pierre@1
|
1 <?php |
pierre@1
|
2 |
pierre@1
|
3 /** |
pierre@1
|
4 * @file |
pierre@1
|
5 * Ad Channel include file. |
pierre@1
|
6 * |
pierre@1
|
7 * Copyright (c) 2008-2009. |
pierre@1
|
8 * Jeremy Andrews <jeremy@tag1consulting.com>. |
pierre@1
|
9 */ |
pierre@1
|
10 |
pierre@1
|
11 /** |
pierre@1
|
12 * Filter advertisements not in an appropriate channel, from cache. |
pierre@1
|
13 */ |
pierre@1
|
14 function ad_channel_cache_filter($ads) { |
pierre@1
|
15 _debug_echo("ad_channel_cache: adserve_cache_filter"); |
pierre@1
|
16 |
pierre@1
|
17 $channels = adserve_cache('get_cache', 'channel'); |
pierre@1
|
18 $valid = array(); |
pierre@1
|
19 $nochannel = array(); |
pierre@1
|
20 foreach ($ads as $aid) { |
pierre@1
|
21 _debug_echo("ad_channel_cache: checking aid($aid)"); |
pierre@1
|
22 if (is_array($channels['ads']) && isset($channels['ads'][$aid]) && |
pierre@1
|
23 is_array($channels['ads'][$aid])) { |
pierre@1
|
24 foreach ($channels['ads'][$aid] as $chid) { |
pierre@1
|
25 $channel = $channels['channels'][$chid]; |
pierre@1
|
26 $display = $channel->display; |
pierre@1
|
27 $urls = unserialize($channel->urls); |
pierre@1
|
28 $frontpage = adserve_variable('site_frontpage') ? adserve_variable('site_frontpage') : 'node'; |
pierre@1
|
29 $regexp = '/^('. preg_replace(array('/(\r\n?|\n)/', '/\\\\\*/', '/(^|\|)\\\\<front\\\\>($|\|)/'), array('|', '.*', '\1'. preg_quote($frontpage, '/') .'\2'), preg_quote($urls, '/')) .')$/'; |
pierre@1
|
30 $match = preg_match($regexp, adserve_variable('url')); |
pierre@1
|
31 _debug_echo("ad_channel_cache: checking aid($aid) against channel($chid) path(". adserve_variable('url') .") regexp($regexp) match($match)"); |
pierre@1
|
32 if ($display == 0) { // display on all except listed urls |
pierre@1
|
33 if (empty($urls) || !$match) { |
pierre@1
|
34 _debug_echo("ad_channel_cache: aid($aid) is valid"); |
pierre@1
|
35 $valid[] = $aid; |
pierre@1
|
36 break; |
pierre@1
|
37 } |
pierre@1
|
38 } |
pierre@1
|
39 else { // display only on listed urls |
pierre@1
|
40 if (!empty($urls) && $match) { |
pierre@1
|
41 _debug_echo("ad_channel_cache: aid($aid) is valid"); |
pierre@1
|
42 $valid[] = $aid; |
pierre@1
|
43 break; |
pierre@1
|
44 } |
pierre@1
|
45 } |
pierre@1
|
46 _debug_echo("ad_channel_cache: aid($aid) is not valid"); |
pierre@1
|
47 } |
pierre@1
|
48 } |
pierre@1
|
49 else { |
pierre@1
|
50 // no channel information for ad, it's valid |
pierre@1
|
51 $display = $channels['display']; |
pierre@1
|
52 _debug_echo("ad_channel_cache: aid($aid) has no channel info [$display]"); |
pierre@1
|
53 switch ($display) { |
pierre@1
|
54 case 0: |
pierre@1
|
55 $nochannel[] = $aid; |
pierre@1
|
56 _debug_echo("ad_channel_cache: aid($aid) is valid if no valid ads found in current channel"); |
pierre@1
|
57 break; |
pierre@1
|
58 case 1: |
pierre@1
|
59 $valid[] = $aid; |
pierre@1
|
60 _debug_echo("ad_channel_cache: aid($aid) is valid"); |
pierre@1
|
61 break; |
pierre@1
|
62 case 2: |
pierre@1
|
63 _debug_echo("ad_channel_cache: aid($aid) is not valid"); |
pierre@1
|
64 break; |
pierre@1
|
65 } |
pierre@1
|
66 } |
pierre@1
|
67 } |
pierre@1
|
68 |
pierre@1
|
69 if (empty($valid) && !empty($nochannel)) { |
pierre@1
|
70 _debug_echo("ad_channel_cache: using ads with no channel info"); |
pierre@1
|
71 $valid = $nochannel; |
pierre@1
|
72 } |
pierre@1
|
73 |
pierre@1
|
74 $premiere = adserve_cache('get_cache', 'premiere'); |
pierre@1
|
75 $premieres = array(); |
pierre@1
|
76 if (is_array($premiere)) { |
pierre@1
|
77 foreach ($valid as $aid) { |
pierre@1
|
78 if (in_array($aid, $premiere)) { |
pierre@1
|
79 _debug_echo("ad_channel_cache: aid($aid) is premiere advertisement"); |
pierre@1
|
80 $premieres[$aid] = $aid; |
pierre@1
|
81 } |
pierre@1
|
82 else { |
pierre@1
|
83 _debug_echo("ad_channel_cache: aid($aid) is not a premiere advertisement"); |
pierre@1
|
84 } |
pierre@1
|
85 } |
pierre@1
|
86 if (!empty($premieres)) { |
pierre@1
|
87 _debug_echo("ad_channel_cache: returning premiere advertisements"); |
pierre@1
|
88 return $premieres; |
pierre@1
|
89 } |
pierre@1
|
90 } |
pierre@1
|
91 _debug_echo("ad_channel_cache: returning non-premiere advertisements"); |
pierre@1
|
92 return $valid; |
pierre@1
|
93 } |