You are here

ad_channel.inc in Advertisement 5.2

File

channel/ad_channel.inc
View source
<?php

/**
 * Filter advertisements not in an appropriate channel, from cache.
 */
function ad_channel_cache_filter($ads) {
  _debug_echo("ad_channel_cache: adserve_cache_filter");
  $channels = adserve_cache('get_cache', 'channel');
  $valid = array();
  $nochannel = array();
  foreach ($ads as $aid) {
    _debug_echo("ad_channel_cache: checking aid({$aid})");
    if (is_array($channels['ads']) && isset($channels['ads'][$aid]) && is_array($channels['ads'][$aid])) {
      foreach ($channels['ads'][$aid] as $chid) {
        $channel = $channels['channels'][$chid];
        $display = $channel->display;
        $urls = unserialize($channel->urls);
        $frontpage = adserve_variable('site_frontpage') ? adserve_variable('site_frontpage') : 'node';
        $regexp = '/^(' . preg_replace(array(
          '/(\\r\\n?|\\n)/',
          '/\\\\\\*/',
          '/(^|\\|)\\\\<front\\\\>($|\\|)/',
        ), array(
          '|',
          '.*',
          '\\1' . preg_quote($frontpage, '/') . '\\2',
        ), preg_quote($urls, '/')) . ')$/';
        $match = preg_match($regexp, adserve_variable('url'));
        _debug_echo("ad_channel_cache: checking aid({$aid}) against channel({$chid}) path(" . adserve_variable('url') . ") regexp({$regexp}) match({$match})");
        if ($display == 0) {

          // display on all except listed urls
          if (empty($urls) || !$match) {
            _debug_echo("ad_channel_cache: aid({$aid}) is valid");
            $valid[] = $aid;
            break;
          }
        }
        else {

          // display only on listed urls
          if (!empty($urls) && $match) {
            _debug_echo("ad_channel_cache: aid({$aid}) is valid");
            $valid[] = $aid;
            break;
          }
        }
        _debug_echo("ad_channel_cache: aid({$aid}) is not valid");
      }
    }
    else {

      // no channel information for ad, it's valid
      $display = $channels['display'];
      _debug_echo("ad_channel_cache: aid({$aid}) has no channel info [{$display}]");
      switch ($display) {
        case 0:
          $nochannel[] = $aid;
          _debug_echo("ad_channel_cache: aid({$aid}) is valid if no valid ads found in current channel");
          break;
        case 1:
          $valid[] = $aid;
          _debug_echo("ad_channel_cache: aid({$aid}) is valid");
          break;
        case 2:
          _debug_echo("ad_channel_cache: aid({$aid}) is not valid");
          break;
      }
    }
  }
  if (empty($valid) && !empty($nochannel)) {
    _debug_echo("ad_channel_cache: using ads with no channel info");
    $valid = $nochannel;
  }
  $premiere = adserve_cache('get_cache', 'premiere');
  $premieres = array();
  if (is_array($premiere)) {
    foreach ($valid as $aid) {
      if (in_array($aid, $premiere)) {
        _debug_echo("ad_channel_cache: aid({$aid}) is premiere advertisement");
        $premieres[$aid] = $aid;
      }
      else {
        _debug_echo("ad_channel_cache: aid({$aid}) is not a premiere advertisement");
      }
    }
    if (!empty($premieres)) {
      _debug_echo("ad_channel_cache: returning premiere advertisements");
      return $premieres;
    }
  }
  _debug_echo("ad_channel_cache: returning non-premiere advertisements");
  return $valid;
}

Functions

Namesort descending Description
ad_channel_cache_filter Filter advertisements not in an appropriate channel, from cache.