| 
pierre@1
 | 
     1 <?php | 
| 
sly@8
 | 
     2 // $Id: ad_channel.install,v 1.1.4.9 2009/07/28 17:39:35 jeremy Exp $ | 
| 
pierre@1
 | 
     3  | 
| 
pierre@1
 | 
     4 /** | 
| 
pierre@1
 | 
     5  * | 
| 
pierre@1
 | 
     6  * Ad channel database schema. | 
| 
pierre@1
 | 
     7  * Copyright (c) 2008-2009 Jeremy Andrews <jeremy@tag1consulting.com>. | 
| 
pierre@1
 | 
     8  */ | 
| 
pierre@1
 | 
     9  | 
| 
pierre@1
 | 
    10 /** | 
| 
pierre@1
 | 
    11  * Create the ad_channel schema. | 
| 
pierre@1
 | 
    12  */ | 
| 
sly@8
 | 
    13 function ad_channel_schema() { | 
| 
sly@8
 | 
    14   $schema['ad_channel'] = array( | 
| 
sly@8
 | 
    15     'description' => 'The ad_channel table allows advertisements to be organized into channels against which rules can be applied.', | 
| 
sly@8
 | 
    16     'fields' => array( | 
| 
sly@8
 | 
    17       'chid' => array( | 
| 
sly@8
 | 
    18         'type' => 'serial', | 
| 
sly@8
 | 
    19         'not null' => TRUE, | 
| 
sly@8
 | 
    20         'unsigned' => TRUE, | 
| 
sly@8
 | 
    21         'description' => 'Unique channel ID.', | 
| 
sly@8
 | 
    22       ), | 
| 
sly@8
 | 
    23       'name' => array( | 
| 
sly@8
 | 
    24         'type' => 'varchar', | 
| 
sly@8
 | 
    25         'length' => 64, | 
| 
sly@8
 | 
    26         'not null' => TRUE, | 
| 
sly@8
 | 
    27         'default' => '', | 
| 
sly@8
 | 
    28         'description' => 'The name of the channel.', | 
| 
sly@8
 | 
    29       ), | 
| 
sly@8
 | 
    30       'description' => array( | 
| 
sly@8
 | 
    31         'type' => 'text', | 
| 
sly@8
 | 
    32         'size' => 'big', | 
| 
sly@8
 | 
    33         'not null' => FALSE, | 
| 
sly@8
 | 
    34         'description' => 'A description of the channel.', | 
| 
sly@8
 | 
    35       ), | 
| 
sly@8
 | 
    36       'conid' => array( | 
| 
sly@8
 | 
    37         'type' => 'int', | 
| 
sly@8
 | 
    38         'not null' => TRUE, | 
| 
sly@8
 | 
    39         'unsigned' => TRUE, | 
| 
sly@8
 | 
    40         'default' => 0, | 
| 
sly@8
 | 
    41         'description' => 'ID of the container the channel is in.', | 
| 
sly@8
 | 
    42       ), | 
| 
sly@8
 | 
    43       'weight' => array( | 
| 
sly@8
 | 
    44         'type' => 'int', | 
| 
sly@8
 | 
    45         'size' => 'medium', | 
| 
sly@8
 | 
    46         'not null' => TRUE, | 
| 
sly@8
 | 
    47         'unsigned' => TRUE, | 
| 
sly@8
 | 
    48         'default' => 0, | 
| 
sly@8
 | 
    49         'description' => 'Used when displaying channels to admins, heavier weights sink to the bottom.', | 
| 
sly@8
 | 
    50       ), | 
| 
sly@8
 | 
    51       'display' => array( | 
| 
sly@8
 | 
    52         'type' => 'int', | 
| 
sly@8
 | 
    53         'size' => 'tiny', | 
| 
sly@8
 | 
    54         'not null' => TRUE, | 
| 
sly@8
 | 
    55         'unsigned' => TRUE, | 
| 
sly@8
 | 
    56         'default' => 0, | 
| 
sly@8
 | 
    57       ), | 
| 
sly@8
 | 
    58       'no_channel_percent' => array( | 
| 
sly@8
 | 
    59         'type' => 'int', | 
| 
sly@8
 | 
    60         'size' => 'medium', | 
| 
sly@8
 | 
    61         'not null' => TRUE, | 
| 
sly@8
 | 
    62         'unsigned' => TRUE, | 
| 
sly@8
 | 
    63         'default' => 0, | 
| 
sly@8
 | 
    64       ), | 
| 
sly@8
 | 
    65       'inventory' => array( | 
| 
sly@8
 | 
    66         'type' => 'int', | 
| 
sly@8
 | 
    67         'not null' => TRUE, | 
| 
sly@8
 | 
    68         'unsigned' => TRUE, | 
| 
sly@8
 | 
    69         'default' => 0, | 
| 
sly@8
 | 
    70       ), | 
| 
sly@8
 | 
    71       'urls' => array( | 
| 
sly@8
 | 
    72         'type' => 'text', | 
| 
sly@8
 | 
    73       ), | 
| 
sly@8
 | 
    74       'groups' => array( | 
| 
sly@8
 | 
    75         'type' => 'text', | 
| 
sly@8
 | 
    76       ), | 
| 
sly@8
 | 
    77     ), | 
| 
sly@8
 | 
    78     'primary key' => array('chid'), | 
| 
sly@8
 | 
    79     'indexes' => array( | 
| 
sly@8
 | 
    80       'name' => array('name'), | 
| 
sly@8
 | 
    81     ), | 
| 
sly@8
 | 
    82   ); | 
| 
sly@8
 | 
    83   $schema['ad_channel_remnant'] = array( | 
| 
sly@8
 | 
    84     'fields' => array( | 
| 
sly@8
 | 
    85       'aid' => array( | 
| 
sly@8
 | 
    86         'type' => 'int', | 
| 
sly@8
 | 
    87         'not null' => TRUE, | 
| 
sly@8
 | 
    88         'unsigned' => TRUE, | 
| 
sly@8
 | 
    89         'default' => 0, | 
| 
sly@8
 | 
    90       ), | 
| 
sly@8
 | 
    91       'remnant' => array( | 
| 
sly@8
 | 
    92         'type' => 'int', | 
| 
sly@8
 | 
    93         'size' => 'tiny', | 
| 
sly@8
 | 
    94         'not null' => TRUE, | 
| 
sly@8
 | 
    95         'unsigned' => TRUE, | 
| 
sly@8
 | 
    96         'default' => 0, | 
| 
sly@8
 | 
    97       ), | 
| 
sly@8
 | 
    98     ), | 
| 
sly@8
 | 
    99     'primary key' => array('aid', 'remnant'), | 
| 
sly@8
 | 
   100   ); | 
| 
sly@8
 | 
   101   $schema['ad_channel_container'] = array( | 
| 
sly@8
 | 
   102     'description' => 'The ad_channel_container table stores channel container definitions.', | 
| 
sly@8
 | 
   103     'fields' => array( | 
| 
sly@8
 | 
   104       'conid' => array( | 
| 
sly@8
 | 
   105         'type' => 'serial', | 
| 
sly@8
 | 
   106         'not null' => TRUE, | 
| 
sly@8
 | 
   107         'unsigned' => TRUE, | 
| 
sly@8
 | 
   108         'description' => 'Unique container ID.', | 
| 
sly@8
 | 
   109       ), | 
| 
sly@8
 | 
   110       'name' => array( | 
| 
sly@8
 | 
   111         'type' => 'varchar', | 
| 
sly@8
 | 
   112         'length' => 64, | 
| 
sly@8
 | 
   113         'not null' => TRUE, | 
| 
sly@8
 | 
   114         'default' => '', | 
| 
sly@8
 | 
   115         'description' => 'The name of the container.', | 
| 
sly@8
 | 
   116       ), | 
| 
sly@8
 | 
   117       'description' => array( | 
| 
sly@8
 | 
   118         'type' => 'text', | 
| 
sly@8
 | 
   119         'size' => 'big', | 
| 
sly@8
 | 
   120         'not null' => FALSE, | 
| 
sly@8
 | 
   121         'description' => 'A description of the container.', | 
| 
sly@8
 | 
   122       ), | 
| 
sly@8
 | 
   123       'weight' => array( | 
| 
sly@8
 | 
   124         'type' => 'int', | 
| 
sly@8
 | 
   125         'size' => 'medium', | 
| 
sly@8
 | 
   126         'not null' => TRUE, | 
| 
sly@8
 | 
   127         'unsigned' => TRUE, | 
| 
sly@8
 | 
   128         'default' => 0, | 
| 
sly@8
 | 
   129         'description' => 'Used when displaying channels to admins, heavier weights sink to the bottom.', | 
| 
sly@8
 | 
   130       ), | 
| 
sly@8
 | 
   131     ), | 
| 
sly@8
 | 
   132     'primary key' => array('conid'), | 
| 
sly@8
 | 
   133   ); | 
| 
sly@8
 | 
   134   $schema['ad_channel_node'] = array( | 
| 
sly@8
 | 
   135     'description' => 'The ad_channel_node table stores per node channel information.', | 
| 
sly@8
 | 
   136     'fields' => array( | 
| 
sly@8
 | 
   137       'chid' => array( | 
| 
sly@8
 | 
   138         'type' => 'int', | 
| 
sly@8
 | 
   139         'not null' => TRUE, | 
| 
sly@8
 | 
   140         'unsigned' => TRUE, | 
| 
sly@8
 | 
   141         'default' => 0, | 
| 
sly@8
 | 
   142       ), | 
| 
sly@8
 | 
   143       'nid' => array( | 
| 
sly@8
 | 
   144         'type' => 'int', | 
| 
sly@8
 | 
   145         'not null' => TRUE, | 
| 
sly@8
 | 
   146         'unsigned' => TRUE, | 
| 
sly@8
 | 
   147         'default' => 0, | 
| 
sly@8
 | 
   148       ), | 
| 
sly@8
 | 
   149     ), | 
| 
sly@8
 | 
   150     'primary key' => array('chid', 'nid'), | 
| 
sly@8
 | 
   151     'indexes' => array( | 
| 
sly@8
 | 
   152       'nid_chid' => array('nid', 'chid'), | 
| 
sly@8
 | 
   153     ), | 
| 
sly@8
 | 
   154   ); | 
| 
sly@8
 | 
   155   $schema['ad_priority'] = array( | 
| 
sly@8
 | 
   156     'fields' => array( | 
| 
sly@8
 | 
   157       'aid' => array( | 
| 
sly@8
 | 
   158         'type' => 'int', | 
| 
sly@8
 | 
   159         'not null' => TRUE, | 
| 
sly@8
 | 
   160         'unsigned' => TRUE, | 
| 
sly@8
 | 
   161         'default' => 0, | 
| 
sly@8
 | 
   162       ), | 
| 
sly@8
 | 
   163       'priority' => array( | 
| 
sly@8
 | 
   164         'type' => 'int', | 
| 
sly@8
 | 
   165         'size' => 'tiny', | 
| 
sly@8
 | 
   166         'not null' => TRUE, | 
| 
sly@8
 | 
   167         'unsigned' => TRUE, | 
| 
sly@8
 | 
   168         'default' => 0, | 
| 
sly@8
 | 
   169       ), | 
| 
sly@8
 | 
   170     ), | 
| 
sly@8
 | 
   171     'primary key' => array('aid', 'priority'), | 
| 
sly@8
 | 
   172   ); | 
| 
sly@8
 | 
   173   return $schema; | 
| 
sly@8
 | 
   174 } | 
| 
sly@8
 | 
   175  | 
| 
pierre@1
 | 
   176 function ad_channel_install() { | 
| 
sly@8
 | 
   177   // Create tables | 
| 
sly@8
 | 
   178   drupal_install_schema('ad_channel'); | 
| 
pierre@1
 | 
   179 } | 
| 
pierre@1
 | 
   180  | 
| 
pierre@1
 | 
   181 /** | 
| 
pierre@1
 | 
   182  * Completely uninstall the ad channel module. | 
| 
pierre@1
 | 
   183  */ | 
| 
pierre@1
 | 
   184 function ad_channel_uninstall() { | 
| 
sly@8
 | 
   185   // Drop tables | 
| 
sly@8
 | 
   186   drupal_uninstall_schema('ad_channel'); | 
| 
pierre@1
 | 
   187 } | 
| 
pierre@1
 | 
   188  | 
| 
pierre@1
 | 
   189 /** | 
| 
pierre@1
 | 
   190  * Populate the ad_priority table. | 
| 
pierre@1
 | 
   191  */ | 
| 
pierre@1
 | 
   192 function ad_channel_update_6001() { | 
| 
pierre@1
 | 
   193   $ret = array(); | 
| 
pierre@1
 | 
   194  | 
| 
pierre@1
 | 
   195   $result = db_query('SELECT a.aid, p.priority FROM {ads} a LEFT JOIN {ad_priority} p ON a.aid = p.aid'); | 
| 
pierre@1
 | 
   196   while ($ad = db_fetch_object($result)) { | 
| 
pierre@1
 | 
   197     if (!isset($ad->priority)) { | 
| 
pierre@1
 | 
   198       $ret[] = update_sql("INSERT INTO {ad_priority} (aid, priority) VALUES ($ad->aid, 0)"); | 
| 
pierre@1
 | 
   199     } | 
| 
pierre@1
 | 
   200   } | 
| 
pierre@1
 | 
   201  | 
| 
pierre@1
 | 
   202   return $ret; | 
| 
pierre@1
 | 
   203 } | 
| 
pierre@1
 | 
   204  | 
| 
sly@2
 | 
   205 /** | 
| 
sly@2
 | 
   206  * Rebuild the menu so that channels and containers can be deleted. | 
| 
sly@2
 | 
   207  */ | 
| 
sly@2
 | 
   208 function ad_channel_update_6002() { | 
| 
sly@2
 | 
   209   cache_clear_all(); | 
| 
sly@2
 | 
   210   menu_rebuild(); | 
| 
sly@2
 | 
   211   return array(); | 
| 
sly@2
 | 
   212 } | 
| 
sly@2
 | 
   213  | 
| 
sly@2
 | 
   214 /** | 
| 
sly@2
 | 
   215  * Introduce no_channel_weight. | 
| 
sly@2
 | 
   216  */ | 
| 
sly@2
 | 
   217 function ad_channel_update_6003() { | 
| 
sly@2
 | 
   218   $ret = array(); | 
| 
sly@2
 | 
   219   $ret[] = update_sql("ALTER TABLE {ad_channel} ADD no_channel_weight INT(3) NOT NULL DEFAULT '0'"); | 
| 
sly@2
 | 
   220   return $ret; | 
| 
sly@2
 | 
   221 } | 
| 
sly@2
 | 
   222  | 
| 
piotre@7
 | 
   223 /** | 
| 
piotre@7
 | 
   224  * Introduce no_channel_percent. | 
| 
piotre@7
 | 
   225  */ | 
| 
piotre@7
 | 
   226 function ad_channel_update_6004() { | 
| 
piotre@7
 | 
   227   $ret = array(); | 
| 
piotre@7
 | 
   228   $ret[] = update_sql("ALTER TABLE {ad_channel} CHANGE COLUMN no_channel_weight no_channel_percent INT(3) NOT NULL DEFAULT '0'"); | 
| 
piotre@7
 | 
   229    // migration of no_channel_weights to no_channel_percent is an approximation | 
| 
piotre@7
 | 
   230    // to evenly distribute legacy values to new inorder to maintain weighting | 
| 
piotre@7
 | 
   231   $ret[] = update_sql("UPDATE {ad_channel} SET no_channel_percent=20 WHERE no_channel_percent=25"); | 
| 
piotre@7
 | 
   232   $ret[] = update_sql("UPDATE {ad_channel} SET no_channel_percent=25 WHERE no_channel_percent=33"); | 
| 
piotre@7
 | 
   233   $ret[] = update_sql("UPDATE {ad_channel} SET no_channel_percent=35 WHERE no_channel_percent=50"); | 
| 
piotre@7
 | 
   234   $ret[] = update_sql("UPDATE {ad_channel} SET no_channel_percent=50 WHERE no_channel_percent=100"); | 
| 
piotre@7
 | 
   235   $ret[] = update_sql("UPDATE {ad_channel} SET no_channel_percent=65 WHERE no_channel_percent=200"); | 
| 
piotre@7
 | 
   236   $ret[] = update_sql("UPDATE {ad_channel} SET no_channel_percent=75 WHERE no_channel_percent=300"); | 
| 
piotre@7
 | 
   237   $ret[] = update_sql("UPDATE {ad_channel} SET no_channel_percent=80 WHERE no_channel_percent=400"); | 
| 
piotre@7
 | 
   238   return $ret; | 
| 
piotre@7
 | 
   239 } | 
| 
piotre@7
 | 
   240  | 
| 
piotre@7
 | 
   241 /* | 
| 
piotre@7
 | 
   242  * Introduce channel inventory and remnant ads | 
| 
piotre@7
 | 
   243  */ | 
| 
piotre@7
 | 
   244 function ad_channel_update_6005() { | 
| 
piotre@7
 | 
   245   $ret = array(); | 
| 
piotre@7
 | 
   246   $ret[] = update_sql("ALTER TABLE {ad_channel} ADD inventory INT(11)"); | 
| 
piotre@7
 | 
   247   $ret[] = update_sql("CREATE TABLE {ad_channel_remnant} (aid INT(11) UNSIGNED NOT NULL DEFAULT '0', remnant TINYINT UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (aid, remnant))"); | 
| 
piotre@7
 | 
   248   return $ret; | 
| 
piotre@7
 | 
   249 } |