pierre@1: . pierre@1: */ pierre@1: pierre@1: /** pierre@1: * Filter advertisements not in an appropriate channel, from cache. pierre@1: */ pierre@1: function ad_channel_cache_filter($ads) { pierre@1: _debug_echo("ad_channel_cache: adserve_cache_filter"); pierre@1: pierre@1: $channels = adserve_cache('get_cache', 'channel'); pierre@1: $valid = array(); pierre@1: $nochannel = array(); pierre@1: foreach ($ads as $aid) { pierre@1: _debug_echo("ad_channel_cache: checking aid($aid)"); pierre@1: if (is_array($channels['ads']) && isset($channels['ads'][$aid]) && pierre@1: is_array($channels['ads'][$aid])) { pierre@1: foreach ($channels['ads'][$aid] as $chid) { pierre@1: $channel = $channels['channels'][$chid]; pierre@1: $display = $channel->display; pierre@1: $urls = unserialize($channel->urls); pierre@1: $frontpage = adserve_variable('site_frontpage') ? adserve_variable('site_frontpage') : 'node'; pierre@1: $regexp = '/^('. preg_replace(array('/(\r\n?|\n)/', '/\\\\\*/', '/(^|\|)\\\\($|\|)/'), array('|', '.*', '\1'. preg_quote($frontpage, '/') .'\2'), preg_quote($urls, '/')) .')$/'; pierre@1: $match = preg_match($regexp, adserve_variable('url')); pierre@1: _debug_echo("ad_channel_cache: checking aid($aid) against channel($chid) path(". adserve_variable('url') .") regexp($regexp) match($match)"); pierre@1: if ($display == 0) { // display on all except listed urls pierre@1: if (empty($urls) || !$match) { pierre@1: _debug_echo("ad_channel_cache: aid($aid) is valid"); pierre@1: $valid[] = $aid; pierre@1: break; pierre@1: } pierre@1: } pierre@1: else { // display only on listed urls pierre@1: if (!empty($urls) && $match) { pierre@1: _debug_echo("ad_channel_cache: aid($aid) is valid"); pierre@1: $valid[] = $aid; pierre@1: break; pierre@1: } pierre@1: } pierre@1: _debug_echo("ad_channel_cache: aid($aid) is not valid"); pierre@1: } pierre@1: } pierre@1: else { pierre@1: // no channel information for ad, it's valid pierre@1: $display = $channels['display']; pierre@1: _debug_echo("ad_channel_cache: aid($aid) has no channel info [$display]"); pierre@1: switch ($display) { pierre@1: case 0: pierre@1: $nochannel[] = $aid; pierre@1: _debug_echo("ad_channel_cache: aid($aid) is valid if no valid ads found in current channel"); pierre@1: break; pierre@1: case 1: pierre@1: $valid[] = $aid; pierre@1: _debug_echo("ad_channel_cache: aid($aid) is valid"); pierre@1: break; pierre@1: case 2: pierre@1: _debug_echo("ad_channel_cache: aid($aid) is not valid"); pierre@1: break; pierre@1: } pierre@1: } pierre@1: } pierre@1: pierre@1: if (empty($valid) && !empty($nochannel)) { pierre@1: _debug_echo("ad_channel_cache: using ads with no channel info"); pierre@1: $valid = $nochannel; pierre@1: } pierre@1: pierre@1: $premiere = adserve_cache('get_cache', 'premiere'); pierre@1: $premieres = array(); pierre@1: if (is_array($premiere)) { pierre@1: foreach ($valid as $aid) { pierre@1: if (in_array($aid, $premiere)) { pierre@1: _debug_echo("ad_channel_cache: aid($aid) is premiere advertisement"); pierre@1: $premieres[$aid] = $aid; pierre@1: } pierre@1: else { pierre@1: _debug_echo("ad_channel_cache: aid($aid) is not a premiere advertisement"); pierre@1: } pierre@1: } pierre@1: if (!empty($premieres)) { pierre@1: _debug_echo("ad_channel_cache: returning premiere advertisements"); pierre@1: return $premieres; pierre@1: } pierre@1: } pierre@1: _debug_echo("ad_channel_cache: returning non-premiere advertisements"); pierre@1: return $valid; pierre@1: }