annotate channel/ad_channel.inc @ 1:948362c2a207 ad

update advertisement
author pierre
date Thu, 02 Apr 2009 15:28:21 +0000
parents
children e5584a19768b
rev   line source
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 }