Newer
Older
Alexander Shvets
committed
* @file
* Copyright (c) 2005-2009.
* Jeremy Andrews <jeremy@tag1consulting.com>.
*
* By default, adserve configuration happens dynamically as ads are served.
* However, it is possible to override dynamic settings with static defaults.
* Refer to the documentation/ADSERVE_CONFIGURATION.txt for details on adding
* adserve overrides to settings.php.
*
* Note that the path to Drupal's root directory can not be overriden in
* settings.php as adserve needs this path to find settings.php in the first
* place. To hard code the path to Drupal's root directory, uncomment the
* following define statement, and set the correct path. This is not generally
* required. On a Unix server this path will be something like '/path/to/web'.
* On a Windows server this path will be something like 'D:\path\to\web'.
// if no $options are passed in, assume we're using JavaScript
// invoke cache function (file already included in adserve_variable)
$ids = adserve_cache('get_ad_ids');
* Retrieve variables from $_GET array or from passed in $value array.
global $conf;
static $variables = NULL, $overridden = NULL, $cache_loaded = array();
// Declare variables if not already declared.
if ($variables === NULL) {
$variables = new stdClass();
}
// Update the value, if set.
if (isset($value)) {
$variables->$variable = $value;
}
$values['debug'] = isset($value['debug']) ? $value['debug'] : '';
$values['c'] = isset($value['adcache']) ? $value['adcache'] : '';
$values['n'] = isset($value['nids']) ? $value['nids'] : '';
$values['t'] = isset($value['tids']) ? $value['tids'] : '';
$values['k'] = isset($value['hostid']) ? $value['hostid'] : '';
$values['q'] = isset($value['quantity']) ? $value['quantity'] : 1;
$values['m'] = isset($value['ad_display']) ? $value['ad_display'] : 0;
// Don't use getcwd as path may involve symbolic links
$variables->ad_dir = dirname($_SERVER['SCRIPT_FILENAME']);
$variables->debug = isset($values['debug']) ? (int)$values['debug'] : 0;
$variables->adcache = isset($values['c']) ? preg_replace('/[^a-zA-Z]/', '', $values['c']) : 'none';
$variables->nids = isset($values['n']) ? preg_replace('/[^0-9,]/', '', $values['n']) : '';
$variables->tids = isset($values['t']) ? preg_replace('/[^0-9,]/', '', $values['t']) : '';
// Hostid is an md5() which is comprised of numbers and letters a-f.
$variables->hostid = isset($values['k']) ? preg_replace('/[^0-9a-f]/', '', $values['k']) : '';
// Click url
$variables->url = isset($values['u']) ? $values['u'] : '';
$variables->url = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
$variables->quantity = isset($values['q']) ? (int)$values['q'] : 0;
// Ad ID is an integer.
$variables->aid = isset($values['a']) ? (int)$values['a'] : 0;
$variables->ad_display = isset($values['m']) ? preg_replace('/[^a-zA-Z]/', '', $values['m']) : 'javascript';
// Set defaults.
$variables->quantity = $variables->quantity ? $variables->quantity : 1;
if ($variables->debug) {
foreach ($variables as $variable => $val) {
echo "$variable: '$val'<br />\n";
}
if ($variables->debug == 1) exit;
}
$variables->loaded = TRUE;
// Override the value, if set during initialization.
if (isset($value)) {
$variables->$variable = $value;
}
}
if (!$overridden) {
if (isset($conf)) {
foreach ($conf as $var => $val) {
$variables->$var = $val;
if ($variables->debug) {
echo "Override $var: '$val'<br />\n";
}
}
$overridden = TRUE;
}
}
if ($variables->adcache != 'none') {
$include = $variables->ad_dir ."/cache/$variables->adcache/ad_cache_$variables->adcache.inc";
if (file_exists($include)) {
if ($variables->debug) {
echo "Attempting to include cache include file '$include'.<br />\n";
}
Alexander Shvets
committed
require_once($include);
}
else if ($variables->debug) {
echo "Failed to find cache include file '$include'.<br />\n";
}
Alexander Shvets
committed
$function = 'ad_cache_'. $variables->adcache .'_variables';
if (function_exists($function)) {
$external_variables = $function();
foreach ($variables as $var => $val) {
echo " $var($val)<br />\n";
if (isset($variables->$variable)) {
return $variables->$variable;
Alexander Shvets
committed
}
function adserve_invoke_file($function, $arg1 = NULL, $arg2 = NULL) {
}
else if (adserve_variable('debug')) {
echo "Function '$function' does not exist.<br />\n";
}
return $output;
}
/*
* When debugging, strip away distracting header errors. Dump all other errors.
function _debug_error_handler($errno, $errstr, $errfile = NULL, $errline = 0, $errcontext = NULL) {
if (!preg_match('/Cannot modify header information/', $errstr) &&
!preg_match('/Cannot send session cache limiter/', $errstr)) {
echo "PHP: errno($errno): $errstr ";
if ($errfile && $errline) {
echo "; Line $errline in [$errfile]";
echo "<br />\n";
if (!empty($errcontext) && adserve_variable('debug') >= 5) {
echo 'Error context:<pre>';
print_r($errcontext);
echo '</pre>';
* Dump debug message to screen; set custom error handler.
function _debug_echo($text) {
static $error_handler = FALSE;
if ($time < time()) {
$time = time();
if (!$error_handler) {
set_error_handler('_debug_error_handler');
$error_handler = TRUE;
function _debug_memory() {
$memory = '';
if (adserve_variable('debug') && function_exists('memory_get_usage')) {
$memory = number_format(round(memory_get_usage() / 1024, 3), 3);
echo "Memory usage: $memory K<br />\n";
}
}
/**
* Include Drupal's bootstrap.inc.
*/
function adserve_include_drupal() {
// For optimal performance set DRUPAL_ROOT at the top of this file.
if (defined('DRUPAL_ROOT')) {
if (is_dir(DRUPAL_ROOT) && file_exists(DRUPAL_ROOT .'/includes/bootstrap.inc')) {
chdir(DRUPAL_ROOT);
}
else {
echo 'Invalid DRUPAL_ROOT ('. DRUPAL_ROOT .') defined in adserve.inc';
}
$path = explode('/', adserve_variable('ad_dir'));
while (!empty($path)) {
// Search for top level Drupal directory to perform bootstrap.
chdir(implode('/', $path));
require_once adserve_variable('root_dir') .'/includes/bootstrap.inc';
}
/**
* Include the necessary files and call the Drupal bootstrap.
*/
function adserve_bootstrap($bootstrap = NULL) {
adserve_include_drupal();
// If no specific bootstrap is specified, do a full bootstrap.
if (!isset($bootstrap)) {
$bootstrap = DRUPAL_BOOTSTRAP_FULL;
}
/**
* Display additional debug information.
*/
function adserve_debug() {
if (adserve_variable('debug')) {
echo "Root drupal directory detected as '". adserve_variable('root_dir') ."'.<br />\n<br />\n";
$ad_dir = adserve_variable('ad_dir');
$files = array("$ad_dir/serve.php", "$ad_dir/adserve.inc", "$ad_dir/adcache.inc", "$ad_dir/ad.module");
if (adserve_variable('debug') >= 2) {
if (adserve_variable('debug') >= 3) {
$files = array_merge($files, array("$ad_dir/image/ad_image.module", "$ad_dir/image/ad_image.install", "$ad_dir/text/ad_text.module", "$ad_dir/text/ad_text.install", "$ad_dir/embed/ad_embed.module", "$ad_dir/report/ad_report.module", "$ad_dir/notify/ad_notify.module", "$ad_dir/notify/ad_notify.install", "$ad_dir/cache/file/ad_cache_file.inc", "$ad_dir/cache/file/ad_cache_file.module", "$ad_dir/permission/ad_permission.module", "$ad_dir/weight/probability/ad_weight_probability.module", "$ad_dir/weight/probability/ad_weight_probability.inc"));
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
}
foreach ($files as $file) {
if (!file_exists($file)) {
echo "Error: '$file' does not exist!<br />\n";
}
else if (!is_readable($file)) {
echo "Error: '$file' is not readable!<br />\n";
}
else {
$fd = fopen($file, 'r');
while (!feof($fd)) {
$line = fgets($fd);
if (substr($line, 0, 5) == "<?php") {
continue;
}
else {
echo "$file: $line<br />";
break;
}
}
}
}
echo "<br />\n";
}
}