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 } |