pierre@0
|
1 <?php |
sly@2
|
2 // $Id: ad.install,v 1.2.2.4.2.27.2.7.2.4 2009/04/03 17:01:02 jeremy Exp $ |
pierre@0
|
3 |
pierre@0
|
4 /** |
pierre@0
|
5 * @file |
pierre@0
|
6 * Advertisement module database schema. |
pierre@0
|
7 * |
pierre@0
|
8 * Copyright (c) 2005-2009. |
pierre@0
|
9 * Jeremy Andrews <jeremy@tag1consulting.com>. |
pierre@0
|
10 */ |
pierre@0
|
11 |
pierre@0
|
12 /** |
pierre@0
|
13 * Ad module database schema. |
pierre@0
|
14 */ |
pierre@0
|
15 function ad_schema() { |
pierre@0
|
16 /** |
pierre@0
|
17 * The ad table stores administrative information about each ad. The |
pierre@0
|
18 * actual ad itself can be found in the appropriate ad type table. |
pierre@0
|
19 */ |
pierre@0
|
20 $schema['ads'] = array( |
pierre@0
|
21 'description' => 'The ad table stores administrative information about each ad. The actual ad itself can be found in the appropriate ad type table.', |
pierre@0
|
22 'fields' => array( |
pierre@0
|
23 'aid' => array( |
pierre@0
|
24 'type' => 'int', |
pierre@0
|
25 'not null' => TRUE, |
pierre@0
|
26 'unsigned' => TRUE, |
pierre@0
|
27 'default' => 0, |
pierre@0
|
28 'description' => 'Unique ad ID. Equals to ad nid.', |
pierre@0
|
29 ), |
pierre@0
|
30 'uid' => array( |
pierre@0
|
31 'type' => 'int', |
pierre@0
|
32 'not null' => TRUE, |
pierre@0
|
33 'unsigned' => TRUE, |
pierre@0
|
34 'default' => 0, |
pierre@0
|
35 'description' => 'The {users}.uid that owns this node; initially, this is the user that created it.', |
pierre@0
|
36 ), |
pierre@0
|
37 'adstatus' => array( |
pierre@0
|
38 'type' => 'varchar', |
pierre@0
|
39 'length' => 255, |
pierre@0
|
40 'not null' => TRUE, |
pierre@0
|
41 'default' => '', |
pierre@0
|
42 'description' => 'Ad status', |
pierre@0
|
43 ), |
pierre@0
|
44 'adtype' => array( |
pierre@0
|
45 'type' => 'varchar', |
pierre@0
|
46 'length' => 255, |
pierre@0
|
47 'not null' => TRUE, |
pierre@0
|
48 'default' => '', |
pierre@0
|
49 'description' => 'Ad type', |
pierre@0
|
50 ), |
pierre@0
|
51 'redirect' => array( |
pierre@0
|
52 'type' => 'varchar', |
pierre@0
|
53 'length' => 255, |
pierre@0
|
54 'not null' => TRUE, |
pierre@0
|
55 'default' => '', |
pierre@0
|
56 'description' => 'Ad redirect URL', |
pierre@0
|
57 ), |
pierre@0
|
58 'autoactivate' => array( |
pierre@0
|
59 'type' => 'int', |
pierre@0
|
60 'not null' => TRUE, |
pierre@0
|
61 'unsigned' => TRUE, |
pierre@0
|
62 'default' => 0, |
pierre@0
|
63 'description' => 'Is ad autoactivating?', |
pierre@0
|
64 ), |
pierre@0
|
65 'autoactivated' => array( |
pierre@0
|
66 'type' => 'int', |
pierre@0
|
67 'not null' => TRUE, |
pierre@0
|
68 'unsigned' => TRUE, |
pierre@0
|
69 'default' => 0, |
pierre@0
|
70 'description' => 'Is ad autoactivated?', |
pierre@0
|
71 ), |
pierre@0
|
72 'autoexpire' => array( |
pierre@0
|
73 'type' => 'int', |
pierre@0
|
74 'not null' => TRUE, |
pierre@0
|
75 'unsigned' => TRUE, |
pierre@0
|
76 'default' => 0, |
pierre@0
|
77 'description' => 'Is ad autoexpiring?', |
pierre@0
|
78 ), |
pierre@0
|
79 'autoexpired' => array( |
pierre@0
|
80 'type' => 'int', |
pierre@0
|
81 'not null' => TRUE, |
pierre@0
|
82 'unsigned' => TRUE, |
pierre@0
|
83 'default' => 0, |
pierre@0
|
84 'description' => 'Is ad autoexpired?', |
pierre@0
|
85 ), |
pierre@0
|
86 'activated' => array( |
pierre@0
|
87 'type' => 'int', |
pierre@0
|
88 'not null' => TRUE, |
pierre@0
|
89 'unsigned' => TRUE, |
pierre@0
|
90 'default' => 0, |
pierre@0
|
91 'description' => 'Is ad activated?', |
pierre@0
|
92 ), |
pierre@0
|
93 'maxviews' => array( |
pierre@0
|
94 'type' => 'int', |
pierre@0
|
95 'not null' => TRUE, |
pierre@0
|
96 'unsigned' => TRUE, |
pierre@0
|
97 'default' => 0, |
pierre@0
|
98 'description' => 'Maximum ad impressions', |
pierre@0
|
99 ), |
pierre@0
|
100 'maxclicks' => array( |
pierre@0
|
101 'type' => 'int', |
pierre@0
|
102 'not null' => TRUE, |
pierre@0
|
103 'unsigned' => TRUE, |
pierre@0
|
104 'default' => 0, |
pierre@0
|
105 'description' => 'Maximum ad clicks', |
pierre@0
|
106 ), |
pierre@0
|
107 'expired' => array( |
pierre@0
|
108 'type' => 'int', |
pierre@0
|
109 'not null' => TRUE, |
pierre@0
|
110 'unsigned' => TRUE, |
pierre@0
|
111 'default' => 0, |
pierre@0
|
112 'description' => 'Is ad expired?', |
pierre@0
|
113 ), |
pierre@0
|
114 ), |
pierre@0
|
115 'primary key' => array('aid'), |
pierre@0
|
116 'indexes' => array( |
pierre@0
|
117 'uid' => array('uid'), |
pierre@0
|
118 'autoactivate' => array('autoactivate'), |
pierre@0
|
119 'autoactivate' => array('autoactivate'), |
pierre@0
|
120 ), |
pierre@0
|
121 ); |
pierre@0
|
122 |
pierre@0
|
123 /** |
pierre@0
|
124 * This table counts each time a given action occurs on an ad. Actions |
pierre@0
|
125 * include when the ad is viewed, clicked, enabled and disabled. |
pierre@0
|
126 * Statistics are collected at an hourly granularity. |
pierre@0
|
127 * |
pierre@0
|
128 * The source column is used for tracking statistics for externally |
pierre@0
|
129 * hosted ads. |
pierre@0
|
130 * |
pierre@0
|
131 * Actions: |
pierre@0
|
132 * 'view', 'click', 'enable', 'disable' |
pierre@0
|
133 */ |
pierre@0
|
134 $schema['ad_statistics'] = array( |
pierre@0
|
135 'description' => 'Stores ad statistics.', |
pierre@0
|
136 'fields' => array( |
pierre@0
|
137 'sid' => array( |
pierre@0
|
138 'type' => 'serial', |
pierre@0
|
139 'not null' => TRUE, |
pierre@0
|
140 'unsigned' => TRUE, |
pierre@0
|
141 'description' => 'Statistics entry ID.', |
pierre@0
|
142 ), |
pierre@0
|
143 'aid' => array( |
pierre@0
|
144 'type' => 'int', |
pierre@0
|
145 'not null' => TRUE, |
pierre@0
|
146 'unsigned' => TRUE, |
pierre@0
|
147 'default' => 0, |
pierre@0
|
148 'description' => 'Ad id.', |
pierre@0
|
149 ), |
pierre@0
|
150 'date' => array( |
pierre@0
|
151 'type' => 'int', |
pierre@0
|
152 'not null' => TRUE, |
pierre@0
|
153 'unsigned' => TRUE, |
pierre@0
|
154 'default' => 0, |
pierre@0
|
155 'description' => 'Date when action was made.', |
pierre@0
|
156 ), |
pierre@0
|
157 'action' => array( |
pierre@0
|
158 'type' => 'varchar', |
pierre@0
|
159 'length' => 255, |
pierre@0
|
160 'not null' => TRUE, |
pierre@0
|
161 'default' => '', |
pierre@0
|
162 'description' => 'Actions: "view", "click", "enable", "disable".', |
pierre@0
|
163 ), |
pierre@0
|
164 'adgroup' => array( |
pierre@0
|
165 'type' => 'varchar', |
pierre@0
|
166 'length' => 255, |
pierre@0
|
167 'not null' => FALSE, |
pierre@0
|
168 'default' => '', |
pierre@0
|
169 'description' => 'Ad group.', |
pierre@0
|
170 ), |
pierre@0
|
171 'hostid' => array( |
pierre@0
|
172 'type' => 'varchar', |
pierre@0
|
173 'length' => 32, |
pierre@0
|
174 'not null' => TRUE, |
pierre@0
|
175 'default' => '', |
pierre@0
|
176 'description' => 'Host from which acion was made.', |
pierre@0
|
177 ), |
pierre@0
|
178 'count' => array( |
pierre@0
|
179 'type' => 'int', |
pierre@0
|
180 'not null' => TRUE, |
pierre@0
|
181 'unsigned' => TRUE, |
pierre@0
|
182 'default' => 0, |
pierre@0
|
183 'description' => 'Count of actions triggered.', |
pierre@0
|
184 ), |
sly@2
|
185 'extra' => array( |
sly@2
|
186 'type' => 'varchar', |
sly@2
|
187 'length' => 255, |
sly@2
|
188 'not null' => TRUE, |
sly@2
|
189 'default' => '', |
sly@2
|
190 'description' => 'Alow add-on modules to provide additional statistics granularity.', |
sly@2
|
191 ), |
pierre@0
|
192 ), |
pierre@0
|
193 'primary key' => array('sid'), |
pierre@0
|
194 'indexes' => array( |
pierre@0
|
195 'aid' => array('aid'), |
pierre@0
|
196 'date' => array('date'), |
pierre@0
|
197 'action' => array('action'), |
pierre@0
|
198 'adgroup' => array('adgroup'), |
pierre@0
|
199 'hostid' => array('hostid'), |
sly@2
|
200 'extra' => array('extra'), |
pierre@0
|
201 ), |
pierre@0
|
202 ); |
pierre@0
|
203 |
pierre@0
|
204 /** |
pierre@0
|
205 * The ad_clicks table tracks when a given advertisement was clicked, |
pierre@0
|
206 * who clicked it (uid if any and IP address), and what page they were |
pierre@0
|
207 * on when they clicked it. |
pierre@0
|
208 */ |
pierre@0
|
209 $schema['ad_clicks'] = array( |
pierre@0
|
210 '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.', |
pierre@0
|
211 'fields' => array( |
pierre@0
|
212 'cid' => array( |
pierre@0
|
213 'type' => 'serial', |
pierre@0
|
214 'not null' => TRUE, |
pierre@0
|
215 'unsigned' => TRUE, |
pierre@0
|
216 'description' => 'Statistics entry ID.', |
pierre@0
|
217 ), |
pierre@0
|
218 'aid' => array( |
pierre@0
|
219 'type' => 'int', |
pierre@0
|
220 'not null' => TRUE, |
pierre@0
|
221 'unsigned' => TRUE, |
pierre@0
|
222 'default' => 0, |
pierre@0
|
223 'description' => 'Ad id.', |
pierre@0
|
224 ), |
pierre@0
|
225 'uid' => array( |
pierre@0
|
226 'type' => 'int', |
pierre@0
|
227 'not null' => TRUE, |
pierre@0
|
228 'unsigned' => TRUE, |
pierre@0
|
229 'default' => 0, |
pierre@0
|
230 'description' => '', |
pierre@0
|
231 ), |
pierre@0
|
232 'status' => array( |
pierre@0
|
233 'type' => 'int', |
pierre@0
|
234 'size' => 'tiny', |
pierre@0
|
235 'not null' => TRUE, |
pierre@0
|
236 'unsigned' => TRUE, |
pierre@0
|
237 'default' => 0, |
pierre@0
|
238 'description' => '', |
pierre@0
|
239 ), |
pierre@0
|
240 'hostname' => array( |
pierre@0
|
241 'type' => 'varchar', |
pierre@0
|
242 'length' => 128, |
pierre@0
|
243 'not null' => TRUE, |
pierre@0
|
244 'default' => '', |
pierre@0
|
245 'description' => 'Host from which acion was made.', |
pierre@0
|
246 ), |
pierre@0
|
247 'user_agent' => array( |
pierre@0
|
248 'type' => 'varchar', |
pierre@0
|
249 'length' => 255, |
pierre@0
|
250 'not null' => TRUE, |
pierre@0
|
251 'default' => '', |
pierre@0
|
252 'description' => 'Clicker\'s browser agent.', |
pierre@0
|
253 ), |
pierre@0
|
254 'adgroup' => array( |
pierre@0
|
255 'type' => 'varchar', |
pierre@0
|
256 'length' => 255, |
pierre@0
|
257 'not null' => TRUE, |
pierre@0
|
258 'default' => '', |
pierre@0
|
259 'description' => 'Ad group.', |
pierre@0
|
260 ), |
pierre@0
|
261 'hostid' => array( |
pierre@0
|
262 'type' => 'varchar', |
pierre@0
|
263 'length' => 32, |
pierre@0
|
264 'not null' => TRUE, |
pierre@0
|
265 'default' => '', |
pierre@0
|
266 'description' => 'Host from which acion was made.', |
pierre@0
|
267 ), |
pierre@0
|
268 'url' => array( |
pierre@0
|
269 'type' => 'varchar', |
pierre@0
|
270 'length' => 255, |
pierre@0
|
271 'not null' => FALSE, |
pierre@0
|
272 'default' => '', |
pierre@0
|
273 'description' => 'Clicked URL.', |
pierre@0
|
274 ), |
pierre@0
|
275 'timestamp' => array( |
pierre@0
|
276 'type' => 'int', |
pierre@0
|
277 'not null' => TRUE, |
pierre@0
|
278 'unsigned' => TRUE, |
pierre@0
|
279 'default' => 0, |
pierre@0
|
280 'description' => 'Date when action was made.', |
pierre@0
|
281 ), |
sly@2
|
282 'extra' => array( |
sly@2
|
283 'type' => 'varchar', |
sly@2
|
284 'length' => 255, |
sly@2
|
285 'not null' => TRUE, |
sly@2
|
286 'default' => '', |
sly@2
|
287 'description' => 'Alow add-on modules to provide additional statistics granularity.', |
sly@2
|
288 ), |
pierre@0
|
289 ), |
pierre@0
|
290 'primary key' => array('cid'), |
pierre@0
|
291 'indexes' => array( |
pierre@0
|
292 'aid' => array('aid'), |
pierre@0
|
293 'status' => array('status'), |
pierre@0
|
294 'hostname' => array('hostname'), |
pierre@0
|
295 'user_agent' => array('user_agent'), |
pierre@0
|
296 'adgroup' => array('adgroup'), |
pierre@0
|
297 'hostid' => array('hostid'), |
pierre@0
|
298 'url' => array('url'), |
sly@2
|
299 'extra' => array('extra'), |
pierre@0
|
300 ), |
pierre@0
|
301 ); |
pierre@0
|
302 |
pierre@0
|
303 return $schema; |
pierre@0
|
304 } |
pierre@0
|
305 |
pierre@0
|
306 /** |
pierre@0
|
307 * Ad module installation. |
pierre@0
|
308 */ |
pierre@0
|
309 function ad_install() { |
pierre@0
|
310 // Create tables. |
pierre@0
|
311 drupal_install_schema('ad'); |
pierre@0
|
312 } |
pierre@0
|
313 |
pierre@0
|
314 /** |
pierre@0
|
315 * Allow complete uninstallation of the ad module. |
pierre@0
|
316 */ |
pierre@0
|
317 function ad_uninstall() { |
pierre@0
|
318 // Delete all ad content. |
pierre@0
|
319 $result = db_query("SELECT nid FROM {node} WHERE type = 'ad'"); |
pierre@0
|
320 while ($node = db_fetch_object($result)) { |
pierre@0
|
321 node_delete($node->nid); |
pierre@0
|
322 variable_del("ad_autoactivate_warning_$node->nid"); |
pierre@0
|
323 } |
pierre@0
|
324 |
pierre@0
|
325 // Delete all remaining ad module variables. |
pierre@0
|
326 $variables = array('ad_cron_timestamp', 'ad_link_target', 'ad_cache', 'ad_cache_file', 'adserve', 'ad_group_vid', 'ad_groups', 'ad_validate_url', 'ad_display'); |
pierre@0
|
327 foreach ($variables as $variable) { |
pierre@0
|
328 variable_del($variable); |
pierre@0
|
329 } |
pierre@0
|
330 db_query("DELETE FROM {variable} WHERE name LIKE 'ad_block_quantity_%'"); |
pierre@1
|
331 |
pierre@1
|
332 // Remove tables. |
pierre@1
|
333 drupal_uninstall_schema('ad'); |
pierre@0
|
334 } |
pierre@0
|
335 |
pierre@0
|
336 /** |
pierre@0
|
337 * Convert some things from absolete dev. schema to new schema API |
pierre@0
|
338 */ |
pierre@0
|
339 function ad_update_6001() { |
pierre@0
|
340 $ret = array(); |
pierre@0
|
341 // When we touching index columns, we should first remove it from schema |
pierre@0
|
342 db_drop_index($ret, 'ad_clicks', 'status'); |
pierre@0
|
343 db_change_field($ret, 'ad_clicks', 'status', 'status', |
pierre@0
|
344 array( |
pierre@0
|
345 'type' => 'int', |
pierre@0
|
346 'size' => 'tiny', |
pierre@0
|
347 'not null' => TRUE, |
pierre@0
|
348 'unsigned' => TRUE, |
pierre@0
|
349 'default' => 0, |
pierre@0
|
350 'description' => '', |
pierre@0
|
351 ), |
pierre@0
|
352 array('indexes' => array( |
pierre@0
|
353 'status' => array('status'), |
pierre@0
|
354 ), |
pierre@0
|
355 ) |
pierre@0
|
356 ); |
pierre@0
|
357 db_drop_index($ret, 'ad_hosts', 'status'); |
pierre@0
|
358 db_change_field($ret, 'ad_hosts', 'status', 'status', |
pierre@0
|
359 array( |
pierre@0
|
360 'type' => 'int', |
pierre@0
|
361 'size' => 'tiny', |
pierre@0
|
362 'not null' => TRUE, |
pierre@0
|
363 'unsigned' => TRUE, |
pierre@0
|
364 'default' => 0, |
pierre@0
|
365 'description' => '', |
pierre@0
|
366 ), |
pierre@0
|
367 array('indexes' => array( |
pierre@0
|
368 'status' => array('status'), |
pierre@0
|
369 ), |
pierre@0
|
370 ) |
pierre@0
|
371 ); |
pierre@0
|
372 |
pierre@0
|
373 db_drop_index($ret, 'ad_statistics', 'hostid'); |
pierre@0
|
374 db_change_field($ret, 'ad_statistics', 'hostid', 'hostid', |
pierre@0
|
375 array( |
pierre@0
|
376 'type' => 'varchar', |
pierre@0
|
377 'length' => 32, |
pierre@0
|
378 'not null' => TRUE, |
pierre@0
|
379 'default' => '', |
pierre@0
|
380 'description' => 'Host from which acion was made.', |
pierre@0
|
381 ), |
pierre@0
|
382 array('indexes' => array( |
pierre@0
|
383 'hostid' => array('hostid'), |
pierre@0
|
384 ), |
pierre@0
|
385 ) |
pierre@0
|
386 ); |
pierre@0
|
387 |
pierre@0
|
388 db_drop_index($ret, 'ad_hosts', 'hostid'); |
pierre@0
|
389 db_change_field($ret, 'ad_hosts', 'hostid', 'hostid', |
pierre@0
|
390 array( |
pierre@0
|
391 'type' => 'varchar', |
pierre@0
|
392 'length' => 32, |
pierre@0
|
393 'not null' => TRUE, |
pierre@0
|
394 'default' => '', |
pierre@0
|
395 'description' => 'Host from which acion was made.', |
pierre@0
|
396 ), |
pierre@0
|
397 array('indexes' => array( |
pierre@0
|
398 'hostid' => array('hostid'), |
pierre@0
|
399 ), |
pierre@0
|
400 ) |
pierre@0
|
401 ); |
pierre@0
|
402 return $ret; |
pierre@0
|
403 } |
pierre@0
|
404 |
pierre@0
|
405 /** |
pierre@0
|
406 * Rebuild menu for anyone using the ad_embed module. |
pierre@0
|
407 */ |
pierre@0
|
408 function ad_update_6002() { |
pierre@0
|
409 menu_rebuild(); |
pierre@0
|
410 return array(); |
pierre@0
|
411 } |
pierre@0
|
412 |
pierre@0
|
413 /** |
pierre@0
|
414 * Flush all caches for new themeable ad display functions. |
pierre@0
|
415 */ |
pierre@0
|
416 function ad_update_6003() { |
pierre@0
|
417 drupal_flush_all_caches(); |
pierre@0
|
418 return array(); |
pierre@0
|
419 } |
pierre@1
|
420 |
pierre@1
|
421 /** |
pierre@1
|
422 * Introduce "extra" field for ad statistics and clicks, optionally allowing |
pierre@1
|
423 * add-on modules to provide additional granularity. |
pierre@1
|
424 */ |
pierre@1
|
425 function ad_update_6004() { |
pierre@1
|
426 $ret = array(); |
pierre@1
|
427 db_add_field($ret, 'ad_statistics', 'extra', |
pierre@1
|
428 array( |
pierre@1
|
429 'type' => 'varchar', |
pierre@1
|
430 'length' => 255, |
pierre@1
|
431 'not null' => TRUE, |
pierre@1
|
432 'default' => '', |
pierre@1
|
433 'description' => 'Alow add-on modules to provide additional statistics granularity.', |
pierre@1
|
434 ), |
pierre@1
|
435 array('indexes' => array( |
pierre@1
|
436 'extra' => array('extra')) |
pierre@1
|
437 )); |
pierre@1
|
438 db_add_field($ret, 'ad_clicks', 'extra', |
pierre@1
|
439 array( |
pierre@1
|
440 'type' => 'varchar', |
pierre@1
|
441 'length' => 255, |
pierre@1
|
442 'not null' => TRUE, |
pierre@1
|
443 'default' => '', |
pierre@1
|
444 'description' => 'Alow add-on modules to provide additional statistics granularity.', |
pierre@1
|
445 ), |
pierre@1
|
446 array('indexes' => array( |
pierre@1
|
447 'extra' => array('extra')) |
pierre@1
|
448 )); |
pierre@1
|
449 return $ret; |
pierre@1
|
450 } |
pierre@1
|
451 |
pierre@1
|
452 /** |
pierre@1
|
453 * Flush all caches for AHAH ad type switcher to work. |
pierre@1
|
454 */ |
pierre@1
|
455 function ad_update_6005() { |
pierre@1
|
456 drupal_flush_all_caches(); |
pierre@1
|
457 return array(); |
pierre@1
|
458 } |
pierre@1
|
459 |