View source
<?php
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) {
return $client_id;
}
$node_info = revenue_sharing_basic_get_node_info();
if (!count($node_info)) {
$uid = NULL;
}
else {
$uid = $node_info['uid'];
}
$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;
}
$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;
}
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;
}
$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) {
return NULL;
}
return $referral_uid;
}
function revenue_sharing_basic_get_client_id() {
static $client = NULL;
if ($client) {
return $client;
}
$site_client = revenue_sharing_basic_get_profile_client_id(1);
$revenue = variable_get(REVENUE_SHARING_BASIC_ENABLE, 0);
if (!$revenue) {
$client = $site_client;
return $site_client;
}
$node_info = revenue_sharing_basic_get_node_info();
if (!count($node_info)) {
if (arg(0) == 'blog' && is_numeric(arg(1))) {
$uid = arg(1);
}
else {
$client = $site_client;
return $site_client;
}
}
list($uid, $type) = $node_info;
$content = variable_get(REVENUE_SHARING_BASIC_NODE_TYPE . $type, 0);
if (!$content) {
$client = $site_client;
return $client;
}
$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));
$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');
}