You are here

revenue_sharing_basic.module in Google AdSense integration 5.2

File

revenue_sharing_basic.module
View source
<?php

// Copyright 2005-2008 Khalid Baheyeldin http://2bits.com
define('REVENUE_SHARING_BASIC_ENABLE', 'revenue_sharing_basic_revenue_enable');
define('REVENUE_SHARING_BASIC_PERCENTAGE_AUTHOR', 'revenue_sharing_basic_percentage_author');
define('REVENUE_SHARING_BASIC_PERCENTAGE_REFER', 'revenue_sharing_basic_percentage_refer');
define('REVENUE_SHARING_BASIC_CLIENT_ID_PROFILE_FIELD', 'revenue_sharing_basic_client_id_profile_field');
define('REVENUE_SHARING_BASIC_ERROR_CACHING_ENABLED', 1);
define('REVENUE_SHARING_BASIC_ERROR_PROFILE_NOT_ENABLED', 2);
define('REVENUE_SHARING_BASIC_ERROR_NOT_CONFIGURED', 3);
function revenue_sharing_basic_adsense($op, $args = array()) {
  switch ($op) {
    case 'status':
      $error_flag = FALSE;
      if (variable_get('cache', 0)) {
        revenue_sharing_basic_error(REVENUE_SHARING_BASIC_ERROR_CACHING_ENABLED);
      }
      if (!module_exists('profile')) {
        revenue_sharing_basic_error(REVENUE_SHARING_BASIC_ERROR_PROFILE_NOT_ENABLED);
        $error_flag = TRUE;
      }
      if (!revenue_sharing_basic_get_profile_client_id(1)) {
        revenue_sharing_basic_error(REVENUE_SHARING_BASIC_ERROR_NOT_CONFIGURED);
        $error_flag = TRUE;
      }
      return $error_flag;
    case 'settings':
      return revenue_sharing_basic_settings();
    case 'client_id':
      return revenue_sharing_basic_client_id();
  }
}
function revenue_sharing_basic_settings() {
  $form = array();
  $module = 'revenue_sharing_basic';
  include_once drupal_get_path('module', $module) . '/' . $module . '_help.inc';
  $form['help'] = array(
    '#type' => 'fieldset',
    '#collapsible' => TRUE,
    '#collapsed' => TRUE,
    '#title' => t('Help and instructions'),
  );
  $help_function = $module . '_help_text';
  $form['help']['help'] = array(
    '#type' => 'markup',
    '#value' => $help_function(),
  );
  $form['required'] = array(
    '#type' => 'fieldset',
    '#collapsible' => TRUE,
    '#collapsed' => FALSE,
    '#title' => t('Required parameters'),
  );
  $form['required'][REVENUE_SHARING_BASIC_CLIENT_ID_PROFILE_FIELD] = array(
    '#type' => 'select',
    '#title' => t('Google AdSense client ID profile field'),
    '#default_value' => variable_get(REVENUE_SHARING_BASIC_CLIENT_ID_PROFILE_FIELD, 0),
    '#options' => revenue_sharing_basic_get_profile_fields(),
    '#required' => TRUE,
    '#description' => t('This is the profile field that holds the AdSense Client ID for the site owner as well as (optionally) for site users who participate in revenue sharing. You must enabled the profile module and create a new field for this.'),
  );
  $error_flag = revenue_sharing_basic_adsense('status');
  if ($error_flag) {
    return $form;
  }
  $form['revenue'] = array(
    '#type' => 'fieldset',
    '#collapsible' => TRUE,
    '#collapsed' => TRUE,
    '#title' => t('Revenue sharing options'),
  );
  $form['revenue'][REVENUE_SHARING_BASIC_ENABLE] = array(
    '#type' => 'checkbox',
    '#title' => t('Enable revenue sharing'),
    '#return_value' => 1,
    '#default_value' => variable_get(REVENUE_SHARING_BASIC_ENABLE, 0),
    '#description' => t('Note that enabling this will disable AdSense code caching, which can cause more resource usage for busy sites. The referral feature requires the referral module to be installed.'),
  );
  $form['revenue'][REVENUE_SHARING_BASIC_PERCENTAGE_AUTHOR] = array(
    '#type' => 'select',
    '#title' => t('Percentage of node views going to author'),
    '#default_value' => variable_get(REVENUE_SHARING_BASIC_PERCENTAGE_AUTHOR, 0),
    '#options' => drupal_map_assoc(array(
      0,
      5,
      10,
      15,
      20,
      25,
      30,
      40,
      50,
      60,
      70,
      75,
      80,
      90,
      100,
    )),
  );
  if (module_exists('referral')) {
    $list = drupal_map_assoc(array(
      0,
      5,
      10,
      15,
      20,
      25,
      30,
      40,
      50,
      60,
      70,
      75,
      80,
      90,
      100,
    ));
    $form['revenue'][REVENUE_SHARING_BASIC_PERCENTAGE_REFER] = array(
      '#type' => 'select',
      '#title' => t('Percentage of node views going to user who referred the author'),
      '#default_value' => variable_get(REVENUE_SHARING_BASIC_PERCENTAGE_REFER, 0),
      '#options' => $list,
      '#description' => t('This feature requires the referral module to be installed.'),
    );
  }
  $form['revenue']['content'] = array(
    '#type' => 'fieldset',
    '#collapsible' => TRUE,
    '#collapsed' => TRUE,
    '#title' => t('Content types'),
    '#description' => t('Content types that have revenue sharing enabled.'),
  );
  foreach (node_get_types() as $type => $name) {
    $form['revenue']['content'][REVENUE_SHARING_BASIC_NODE_TYPE . $type] = array(
      '#type' => 'checkbox',
      '#title' => $name->name,
      '#return_value' => 1,
      '#default_value' => variable_get(REVENUE_SHARING_BASIC_NODE_TYPE . $type, 0),
    );
  }
  return $form;
}
function revenue_sharing_basic_client_id() {
  static $client_id = NULL;
  if ($client_id) {

    // We have cached the client ID from previous calls on this page load
    // so we use that one, to make sure all of the client IDs on one page
    // are the same
    return $client_id;
  }
  $node_info = revenue_sharing_basic_get_node_info();
  if (!count($node_info)) {
    $uid = NULL;
  }
  else {
    $uid = $node_info['uid'];
  }

  // Cache the client ID
  $client_id = revenue_sharing_basic_choose_client($uid);
  return $client_id;
}
function revenue_sharing_basic_choose_client($uid = NULL) {
  $site_client = revenue_sharing_basic_get_profile_client_id(1);
  if (!variable_get(REVENUE_SHARING_BASIC_ENABLE, 0)) {
    return $site_client;
  }
  $percent_author = variable_get(REVENUE_SHARING_BASIC_PERCENTAGE_AUTHOR, 0);
  $percent_referral = variable_get(REVENUE_SHARING_BASIC_PERCENTAGE_REFER, 0);
  $author_client = revenue_sharing_basic_get_profile_client_id($uid);
  $referral_client = revenue_sharing_basic_get_profile_client_id(revenue_sharing_basic_get_referral_uid($uid));
  if (!$percent_author || !$author_client) {
    return $site_client;
  }

  // Toss the dice and see who gets their ad displayed
  $random = mt_rand(1, 100);
  if ($random <= $percent_author) {
    $client = $author_client;
  }
  elseif ($random <= $percent_author + $percent_referral) {
    $client = $referral_client;
  }
  else {
    $client = $site_client;
  }

  // Last check to see that we have a valid client
  if (!$client) {
    $client = $site_client;
  }
  return $client;
}
function revenue_sharing_basic_get_profile_client_id($uid = NULL) {
  $client_id = NULL;
  if (!$uid) {
    return $client_id;
  }

  // Get the profile field for a certain user
  $profile_field = variable_get(REVENUE_SHARING_BASIC_CLIENT_ID_PROFILE_FIELD, 0);
  $client_id = db_result(db_query('SELECT value FROM {profile_values} WHERE fid = %d AND uid = %d', $profile_field, $uid));
  return $client_id;
}
function revenue_sharing_basic_get_profile_fields() {
  $profile_list = array(
    0 => 'None',
  );
  $result = db_query("SELECT fid, title FROM {profile_fields} ORDER BY fid");
  while ($row = db_fetch_object($result)) {
    $profile_list[$row->fid] = $row->title;
  }
  return $profile_list;
}
function revenue_sharing_basic_get_referral_uid($uid) {
  if (!module_exists('referral')) {
    return $uid;
  }
  $referral_uid = referral_get_user($uid);
  if (!$referral_uid) {

    // User was not referred by an existing user
    return NULL;
  }
  return $referral_uid;
}
function revenue_sharing_basic_get_client_id() {
  static $client = NULL;
  if ($client) {

    // Use the cached client id
    return $client;
  }

  // Get the site wide client ID
  $site_client = revenue_sharing_basic_get_profile_client_id(1);

  // Check if revenue sharing is enabled
  $revenue = variable_get(REVENUE_SHARING_BASIC_ENABLE, 0);
  if (!$revenue) {

    // If not enabled, cache the site wide client ID
    $client = $site_client;
    return $site_client;
  }

  // Revenue sharing is enabled
  //
  // Check if we are on a node, and get the author's uid
  $node_info = revenue_sharing_basic_get_node_info();
  if (!count($node_info)) {

    // If it is not a node, check if it is a blog page
    if (arg(0) == 'blog' && is_numeric(arg(1))) {
      $uid = arg(1);
    }
    else {

      // Cache it
      $client = $site_client;
      return $site_client;
    }
  }
  list($uid, $type) = $node_info;

  // Check the content type we are displaying
  $content = variable_get(REVENUE_SHARING_BASIC_NODE_TYPE . $type, 0);
  if (!$content) {

    // Revenue sharing is disabled for this content, use the site wide client id
    // Cache it
    $client = $site_client;
    return $client;
  }

  // Check the percentage and choose one
  $client = revenue_sharing_basic_choose_client($uid);
  return $client;
}
function revenue_sharing_basic_get_node_info() {
  static $nodeinfo = array();
  if ($nodeinfo['type'] && $nodeinfo['uid']) {
    return $nodeinfo;
  }
  if (arg(0) == 'node' && is_numeric(arg(1))) {
    $node = node_load(arg(1));

    // Cache the results
    $nodeinfo['type'] = $node->type;
    $nodeinfo['uid'] = $node->uid;
    return $nodeinfo;
  }
  return array();
}
function revenue_sharing_basic_error($error_code) {
  switch ($error_code) {
    case REVENUE_SHARING_BASIC_ERROR_CACHING_ENABLED:
      $text = t('Drupal page cache is enabled. This causes conflicts with revenue sharing, since the pages are stored in the cache and are not dynamically generated. If you experience issues with revenue sharing, then disable the page cache.');
      break;
    case REVENUE_SHARING_BASIC_ERROR_PROFILE_NOT_ENABLED:
      $text = t('The profile module is not enabled. Please enable it and define a field as per the help instructions.');
      break;
    case REVENUE_SHARING_BASIC_ERROR_NOT_CONFIGURED:
      $text = t('Could not determine a Google Adsense Client ID. The module is not configured correctly. Please check your settings.');
      break;
    default:
      $text = t('Unknown revenue sharing basic error.');
      break;
  }
  drupal_set_message($text, 'error');
}