Skip to content
ad.install 12.7 KiB
Newer Older
jeremy's avatar
jeremy committed
 * Copyright (c) 2005-2009.
 *   Jeremy Andrews <jeremy@tag1consulting.com>.
/**
 * Ad module database schema.
 */
function ad_schema() {
 /**
  * The ad table stores administrative information about each ad.  The
  * actual ad itself can be found in the appropriate ad type table.
  */
  $schema['ads'] = array(
    'description' => 'The ad table stores administrative information about each ad.  The actual ad itself can be found in the appropriate ad type table.',
    'fields' => array(
      'aid' => array(
        'type' => 'int',
        'not null' => TRUE,
        'unsigned' => TRUE,
        'default' => 0,
        'description' => 'Unique ad ID. Equals to ad nid.',
      ),
      'uid' => array(
        'type' => 'int',
        'not null' => TRUE,
        'unsigned' => TRUE,
        'default' => 0,
        'description' => 'The {users}.uid that owns this node; initially, this is the user that created it.',
      ),
      'adstatus' => array(
        'type' => 'varchar',
        'length' => 255,
        'not null' => TRUE,
        'default' => '',
        'description' => 'Ad status',
      ),
      'adtype' => array(
        'type' => 'varchar',
        'length' => 255,
        'not null' => TRUE,
        'default' => '',
        'description' => 'Ad type',
      ),
      'redirect' => array(
        'type' => 'varchar',
        'length' => 255,
        'not null' => TRUE,
        'default' => '',
        'description' => 'Ad redirect URL',
      ),
      'autoactivate' => array(
        'type' => 'int',
        'not null' => TRUE,
        'unsigned' => TRUE,
        'default' => 0,
        'description' => 'Is ad autoactivating?',
      ),
      'autoactivated' => array(
        'type' => 'int',
        'not null' => TRUE,
        'unsigned' => TRUE,
        'default' => 0,
        'description' => 'Is ad autoactivated?',
      ),
      'autoexpire' => array(
        'type' => 'int',
        'not null' => TRUE,
        'unsigned' => TRUE,
        'default' => 0,
        'description' => 'Is ad autoexpiring?',
      ),
      'autoexpired' => array(
        'type' => 'int',
        'not null' => TRUE,
        'unsigned' => TRUE,
        'default' => 0,
        'description' => 'Is ad autoexpired?',
      ),
      'activated' => array(
        'type' => 'int',
        'not null' => TRUE,
        'unsigned' => TRUE,
        'default' => 0,
        'description' => 'Is ad activated?',
      ),
      'maxviews' => array(
        'type' => 'int',
        'not null' => TRUE,
        'unsigned' => TRUE,
        'default' => 0,
Alexander Shvets's avatar
Alexander Shvets committed
        'description' => 'Maximum ad impressions',
      ),
      'maxclicks' => array(
        'type' => 'int',
        'not null' => TRUE,
        'unsigned' => TRUE,
        'default' => 0,
        'description' => 'Maximum ad clicks',
      ),
      'expired' => array(
        'type' => 'int',
        'not null' => TRUE,
        'unsigned' => TRUE,
        'default' => 0,
        'description' => 'Is ad expired?',
      ),
    ),
    'primary key' => array('aid'),
    'indexes' => array(
      'uid' => array('uid'),
      'autoactivate' => array('autoactivate'),
      'autoactivate' => array('autoactivate'),
    ),
  );

 /**
  * This table counts each time a given action occurs on an ad.  Actions
  * include when the ad is viewed, clicked, enabled and disabled.
  * Statistics are collected at an hourly granularity.
  *
  * The source column is used for tracking statistics for externally
  * hosted ads.
  *
  * Actions:
  *  'view', 'click', 'enable', 'disable'
  */
  $schema['ad_statistics'] = array(
    'description' => 'Stores ad statistics.',
    'fields' => array(
      'sid' => array(
        'type' => 'serial',
        'not null' => TRUE,
        'unsigned' => TRUE,
        'description' => 'Statistics entry ID.',
      ),
      'aid' => array(
        'type' => 'int',
        'not null' => TRUE,
        'unsigned' => TRUE,
        'default' => 0,
        'description' => 'Ad id.',
      ),
      'date' => array(
        'type' => 'int',
        'not null' => TRUE,
        'unsigned' => TRUE,
        'default' => 0,
        'description' => 'Date when action was made.',
      ),
      'action' => array(
        'type' => 'varchar',
        'length' => 255,
        'not null' => TRUE,
        'default' => '',
        'description' => 'Actions: "view", "click", "enable", "disable".',
      ),
      'adgroup' => array(
        'type' => 'varchar',
        'length' => 255,
        'not null' => FALSE,
        'default' => '',
        'description' => 'Ad group.',
      ),
      'hostid' => array(
        'type' => 'varchar',
        'length' => 32,
        'not null' => TRUE,
        'default' => '',
        'description' => 'Host from which acion was made.',
      ),
      'count' => array(
        'type' => 'int',
        'not null' => TRUE,
        'unsigned' => TRUE,
        'default' => 0,
        'description' => 'Count of actions triggered.',
      ),
jeremy's avatar
jeremy committed
      'extra' => array(
        'type' => 'varchar',
        'length' => 255,
        'not null' => TRUE,
        'default' => '',
        'description' => 'Alow add-on modules to provide additional statistics granularity.',
      ),
jeremy's avatar
jeremy committed
      'aid_date_action' => array('aid', 'date', 'action'),
      'date' => array('date'),
      'action' => array('action'),
      'adgroup' => array('adgroup'),
      'hostid' => array('hostid'),
jeremy's avatar
jeremy committed
      'extra' => array('extra'),
    ),
  );

 /**
  * The ad_clicks table tracks when a given advertisement was clicked,
  * who clicked it (uid if any and IP address), and what page they were
  * on when they clicked it.
  */
  $schema['ad_clicks'] = array(
    'description' => 'The ad_clicks table tracks when a given advertisement was clicked, who clicked it (uid if any and IP address), and what page they were on when they clicked it.',
    'fields' => array(
      'cid' => array(
        'type' => 'serial',
        'not null' => TRUE,
        'unsigned' => TRUE,
        'description' => 'Statistics entry ID.',
      ),
      'aid' => array(
        'type' => 'int',
        'not null' => TRUE,
        'unsigned' => TRUE,
        'default' => 0,
        'description' => 'Ad id.',
      ),
      'uid' => array(
        'type' => 'int',
        'not null' => TRUE,
        'unsigned' => TRUE,
        'default' => 0,
        'description' => '',
      ),
      'status' => array(
        'type' => 'int',
        'size' => 'tiny',
        'not null' => TRUE,
        'unsigned' => TRUE,
        'default' => 0,
        'description' => '',
      ),
      'hostname' => array(
        'type' => 'varchar',
        'length' => 128,
        'not null' => TRUE,
        'default' => '',
        'description' => 'Host from which acion was made.',
      ),
      'user_agent' => array(
        'type' => 'varchar',
        'length' => 255,
        'not null' => TRUE,
        'default' => '',
        'description' => 'Clicker\'s browser agent.',
      ),
      'adgroup' => array(
        'type' => 'varchar',
        'length' => 255,
        'not null' => TRUE,
        'default' => '',
        'description' => 'Ad group.',
      ),
      'hostid' => array(
        'type' => 'varchar',
        'length' => 32,
        'not null' => TRUE,
        'default' => '',
        'description' => 'Host from which acion was made.',
      ),
      'url' => array(
        'type' => 'varchar',
        'length' => 255,
        'not null' => FALSE,
        'default' => '',
        'description' => 'Clicked URL.',
      ),
      'timestamp' => array(
        'type' => 'int',
        'not null' => TRUE,
        'unsigned' => TRUE,
        'default' => 0,
        'description' => 'Date when action was made.',
      ),
jeremy's avatar
jeremy committed
      'extra' => array(
        'type' => 'varchar',
        'length' => 255,
        'not null' => TRUE,
        'default' => '',
        'description' => 'Alow add-on modules to provide additional statistics granularity.',
      ),
    ),
    'primary key' => array('cid'),
    'indexes' => array(
      'aid' => array('aid'),
      'status' => array('status'),
      'hostname' => array('hostname'),
      'user_agent' => array('user_agent'),
      'adgroup' => array('adgroup'),
      'hostid' => array('hostid'),
      'url' => array('url'),
jeremy's avatar
jeremy committed
      'extra' => array('extra'),
jeremy's avatar
jeremy committed

jeremy's avatar
jeremy committed
/**
 * Allow complete uninstallation of the ad module.
 */
function ad_uninstall() {
  // Delete all ad content.
  $result = db_query("SELECT nid FROM {node} WHERE type = 'ad'");
jeremy's avatar
jeremy committed
  while ($node = db_fetch_object($result)) {
    node_delete($node->nid);
    variable_del("ad_autoactivate_warning_$node->nid");
jeremy's avatar
jeremy committed
  }

  // Delete all remaining ad module variables.
jeremy's avatar
jeremy committed
  $variables = array('ad_cron_timestamp', 'ad_link_target', 'ad_cache', 'ad_cache_file', 'adserve', 'ad_group_vid', 'ad_groups', 'ad_validate_url', 'ad_display');
jeremy's avatar
jeremy committed
  foreach ($variables as $variable) {
jeremy's avatar
jeremy committed
    variable_del($variable);
jeremy's avatar
jeremy committed
  }
  db_query("DELETE FROM {variable} WHERE name LIKE 'ad_block_quantity_%'");
jeremy's avatar
jeremy committed

  // Remove tables.
  drupal_uninstall_schema('ad');
jeremy's avatar
jeremy committed
}

/**
 * Convert some things from absolete dev. schema to new schema API
 */
function ad_update_6001() {
  $ret = array();
  // When we touching index columns, we should first remove it from schema
  db_drop_index($ret, 'ad_clicks', 'status');
  db_change_field($ret, 'ad_clicks', 'status', 'status',
      array(
        'type' => 'int',
        'size' => 'tiny',
        'not null' => TRUE,
        'unsigned' => TRUE,
        'default' => 0,
        'description' => '',
      ),
      array('indexes' => array(
        'status' => array('status'),
      ),
    )
  );
  db_drop_index($ret, 'ad_hosts', 'status');
  db_change_field($ret, 'ad_hosts', 'status', 'status',
      array(
        'type' => 'int',
        'size' => 'tiny',
        'not null' => TRUE,
        'unsigned' => TRUE,
        'default' => 0,
        'description' => '',
      ),
      array('indexes' => array(
        'status' => array('status'),
      ),
    )
  );

  db_drop_index($ret, 'ad_statistics', 'hostid');
  db_change_field($ret, 'ad_statistics', 'hostid', 'hostid',
      array(
        'type' => 'varchar',
        'length' => 32,
        'not null' => TRUE,
        'default' => '',
        'description' => 'Host from which acion was made.',
      ),
      array('indexes' => array(
        'hostid' => array('hostid'),
      ),
    )
  );

  db_drop_index($ret, 'ad_hosts', 'hostid');
  db_change_field($ret, 'ad_hosts', 'hostid', 'hostid',
      array(
        'type' => 'varchar',
        'length' => 32,
        'not null' => TRUE,
        'default' => '',
        'description' => 'Host from which acion was made.',
      ),
      array('indexes' => array(
        'hostid' => array('hostid'),
      ),
    )
  );
  return $ret;
}
jeremy's avatar
jeremy committed

/**
 * Rebuild menu for anyone using the ad_embed module.
 */
function ad_update_6002() {
  menu_rebuild();
  return array();
}
jeremy's avatar
jeremy committed

/**
 * Flush all caches for new themeable ad display functions.
 */
function ad_update_6003() {
  drupal_flush_all_caches();
  return array();
}
jeremy's avatar
jeremy committed

/**
 * Introduce "extra" field for ad statistics and clicks, optionally allowing
 * add-on modules to provide additional granularity.
 */
function ad_update_6004() {
  $ret = array();
jeremy's avatar
jeremy committed
  db_add_field($ret, 'ad_statistics', 'extra',
jeremy's avatar
jeremy committed
    array(
      'type' => 'varchar',
      'length' => 255,
      'not null' => TRUE,
      'default' => '',
      'description' => 'Alow add-on modules to provide additional statistics granularity.',
    ),
    array('indexes' => array(
      'extra' => array('extra'))
    ));
jeremy's avatar
jeremy committed
  db_add_field($ret, 'ad_clicks', 'extra',
jeremy's avatar
jeremy committed
    array(
      'type' => 'varchar',
      'length' => 255,
      'not null' => TRUE,
      'default' => '',
      'description' => 'Alow add-on modules to provide additional statistics granularity.',
    ),
    array('indexes' => array(
      'extra' => array('extra'))
    ));
  return $ret;
}

jeremy's avatar
jeremy committed
/**
 * Flush all caches for AHAH ad type switcher to work.
 */
function ad_update_6005() {
  drupal_flush_all_caches();
  return array();
}

jeremy's avatar
jeremy committed
/**
 * Flush all caches
 */
function ad_update_6006() {
  drupal_flush_all_caches();
  return array();
}
jeremy's avatar
jeremy committed

/**
 * Add new index to ad_statistics table for running reports.
 */
function ad_update_6007() {
  $ret = array();
  db_add_index($ret, 'ad_statistics', 'aid_date_action', array('aid', 'date', 'action'));
  db_drop_index($ret, 'ad_statistics', 'aid');
jeremy's avatar
jeremy committed
  return $ret;
jeremy's avatar
jeremy committed
}
jeremy's avatar
jeremy committed

/**
 * If block caching is enabled, make it a per-page cache.  This is necessary
 * to fix bug #604350.
 */
function ad_update_6008() {
  $ret = array();
  $ret[] = update_sql("UPDATE {blocks} SET cache = ". BLOCK_CACHE_PER_PAGE ." WHERE module = 'ad'");
  return $ret;
}