Index: adsense_injector.admin.inc =================================================================== RCS file: adsense_injector.admin.inc diff -N adsense_injector.admin.inc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ adsense_injector.admin.inc 1 Apr 2008 08:19:46 -0000 @@ -0,0 +1,117 @@ + 'fieldset', + '#collapsible' => TRUE, + '#collapsed' => FALSE, + '#title' => t('Node body ad insertion'), + '#description' => t('Requires adsense.module'), + ); + + if (module_exists('adsense')) { + $form['node_ad_body_insertion']['adsense_injector_insert_body_ad'] = array( + '#type' => 'checkbox', + '#title' => t('Insert inline ad in node body on page views'), + '#default_value' => variable_get('adsense_injector_insert_body_ad', ADSENSE_INJECTOR_INSERT_BODY_AD_DEFAULT), + '#description' => t('Description'), + '#required' => FALSE + ); + $form['node_ad_body_insertion']['adsense_injector_body_minwords'] = array( + '#type' => 'textfield', + '#title' => t('Minimum node body word count'), + '#default_value' => variable_get('adsense_injector_body_minwords', ADSENSE_INJECTOR_BODY_MINWORDS_DEFAULT), + '#description' => t('The minimum node body word count threshold - only inject if node body has at least this many words.') + ); + $form['node_ad_body_insertion']['adsense_injector_body_template'] = array( + '#type' => 'textarea', + '#title' => t('Node body ad insertion template'), + '#rows' => 5, + '#cols' => 40, + '#default_value' => variable_get('adsense_injector_body_template', ADSENSE_INJECTOR_BODY_INSERTION_TEMPLATE_DEFAULT), + '#description' => t('Ad insertion template. Substitution variables: %body = full node body text. Insert adsense module filter tags. See the adsense.module settings page for a list of supported formats and help with filter tags.'), + '#required' => TRUE + ); + + /** + * 'list' insertion (frontpage, taxonomy, etc. + */ + $form['node_ad_list_insertion'] = array( + '#type' => 'fieldset', + '#collapsible' => TRUE, + '#collapsed' => FALSE, + '#title' => t('Node list ad insertion'), + '#description' => t('Ad insertion in node lists or other non-page view, like front page, taxonomy views.') + ); + $form['node_ad_list_insertion']['adsense_injector_append_in_listview'] = array( + '#type' => 'checkbox', + '#title' => t('Append an ad after teaser on frontpage and taxonomy lists'), + '#default_value' => variable_get('adsense_injector_append_in_listview', ADSENSE_INJECTOR_APPEND_IN_LISTVIEW_DEFAULT), + '#description' => t('Note: this does not currently support Views module based lists.'), + '#required' => FALSE + ); + $form['node_ad_list_insertion']['adsense_injector_listview_insertion_template'] = array( + '#type' => 'textarea', + '#title' => t('List ad insertion template'), + '#rows' => 3, + '#cols' => 40, + '#default_value' => variable_get('adsense_injector_listview_insertion_template', ADSENSE_INJECTOR_LISTVIEW_INSERTION_TEMPLATE_DEFAULT), + '#description' => t('Template to use when inserting adsense ad. "%teaser" will be replaced with the node teaser. Insert adsense filter tags. See the adsense.module settings page for a list of supported formats and help with filter tags.'), + '#required' => TRUE + ); + + /** + * What kinds of nodes do we want to insert on...? + */ + $form['injection_control'] = array( + '#type' => 'fieldset', + '#collapsible' => TRUE, + '#collapsed' => TRUE, + '#title' => t('Select Node Types for Insertion'), + '#description' => t('Nodes types to display inline ads - ads are inserted only in the selected node types.'), + ); + + /** + * Enumerate node types, and set up form fields for each + */ + $enabled_count = 0; + $nodetypes = array(); + foreach (node_get_types() as $type => $obj) { + $nodetypes[$type] = $obj->name; + $enabled = variable_get(ADSENSE_INJECTOR_INSERT_AD_NODETYPE . $type, FALSE); + if ($enabled) $enabled_count++; + $form['injection_control']['node_types'][ADSENSE_INJECTOR_INSERT_AD_NODETYPE . $type] = array( + '#type' => 'checkbox', + '#title' => $obj->name, + '#default_value' => $enabled, + '#description' => t('Display inline ads on %nodetype nodes', array('%nodetype' => $obj->name)), + '#required' => FALSE + ); + } + + // do some sanity checking + if ($enabled_count == 0) { + $msg = t('No node types selected (no ads will be inserted because you haven\'t selected any node types for automatic ad insertion.)'); + $form['injection_control']['#collapsed'] = FALSE; + $form['injection_control']['no_nodes_enabled'] = array( + '#type' => 'markup', + '#weight' => -1, + '#value' => '
' . htmlspecialchars(print_r($var,true)) . ''); +if (!function_exists('_dbg')) { + function _dbg($var, $title = NULL) { + drupal_set_message('
'. htmlspecialchars(print_r($var, true)) .''); } } @@ -57,12 +53,12 @@ if (!function_exists('_dbg')) * @return the count of words, where delimiter is one or more spaces * @todo Efficiency, find better way to do this */ -function _adsense_injector_count_words(&$str, $max) { +function _adsense_injector_count_words($str, $max) { return count(explode(' ', $str, $max)); // lifted from node.module node_validate() function. } /** - * Get the minimum node body wordcount for insertion. + * Get the minimum node body wordcount for insertion. * May be content-type specific, but at present, it's * global to all node types. * @param $nodetype the node type @@ -73,26 +69,24 @@ function _adsense_injector_minwords_cfg( return variable_get('adsense_injector_body_minwords', $defval); } -function _adsense_injector_process_tags($template) -{ +function _adsense_injector_process_tags($template) { if (function_exists('_adsense_process_tags')) { - $template = _adsense_process_tags($template); + $template = _adsense_process_tags($template); } else { - watchdog('adsense_injector', t('adsense module function _adsense_process_tags() not found'), WATCHDOG_ERROR); + watchdog('adsense_injector', 'adsense module function _adsense_process_tags() not found', WATCHDOG_ERROR); } return $template; } -function theme_adsense_injector_transform($page, $teaser, $node) -{ +function theme_adsense_injector_transform($page, $teaser, $node) { // Process adsense module tags in the template text, if enabled and possible // TODO: look for %body:x-y where x = start and y = end 'paragraph' // So, we could have a template like %body:start-3[adsense:120x240:1:1]%body:4-end // Find ending 'block' elements //
or newlines since the line break filter may be in operation if ($page) { - $body = $node->content['body']['#value']; + $body = $node->body; if (variable_get('adsense_injector_insert_body_ad', ADSENSE_INJECTOR_INSERT_BODY_AD_DEFAULT)) { $minwords = _adsense_injector_minwords_cfg($node->type); $wordcount = _adsense_injector_count_words($body, $minwords); @@ -100,13 +94,13 @@ function theme_adsense_injector_transfor $template = variable_get('adsense_injector_body_template', ADSENSE_INJECTOR_BODY_INSERTION_TEMPLATE_DEFAULT); $template = _adsense_injector_process_tags($template); $content = strtr($template, array('%body' => $body)); - } else { - $content = "" . $body; + } + else { + $content = "". $body; } } } - else if ($teaser - && variable_get('adsense_injector_append_in_listview', ADSENSE_INJECTOR_APPEND_IN_LISTVIEW_DEFAULT)) { + else if ($teaser && variable_get('adsense_injector_append_in_listview', ADSENSE_INJECTOR_APPEND_IN_LISTVIEW_DEFAULT)) { $template = variable_get('adsense_injector_listview_insertion_template', ADSENSE_INJECTOR_LISTVIEW_INSERTION_TEMPLATE_DEFAULT); // Process adsense module tags in the template text, if enabled and possible $template = _adsense_injector_process_tags($template); @@ -116,16 +110,25 @@ function theme_adsense_injector_transfor } /** + * Implementation of hook_theme(). + */ +function adsense_injector_theme() { + return array( + 'adsense_injector_transform' => array('arguments' => array('page' => NULL, 'teaser' => NULL, 'node' => NULL)), + ); +} + +/** * Implementation of hook_nodeapi. * If rendering a full page, and the node type one of the configured types, * inject configured adsense content using simple string concatenation. * @todo: Evaluate efficiency of string concat vs. sprintf, other methods. - */ + */ function adsense_injector_nodeapi(&$node, $op, $teaser, $page) { // insert an ad into the body. if (module_exists('adsense') && _adsense_page_match() && variable_get(ADSENSE_INJECTOR_INSERT_AD_NODETYPE . $node->type, FALSE)) { - if ($op == 'view') { - $node->content['body']['#value'] = theme('adsense_injector_transform', $page, $teaser, $node); + if ($op == 'alter') { + $node->body = theme('adsense_injector_transform', $page, $teaser, $node); } } } @@ -134,129 +137,16 @@ function adsense_injector_nodeapi(&$node * Implementation of hook_menu */ function adsense_injector_menu() { - $items[] = array( - 'path' => 'admin/settings/adsense_injector', - 'title' => t('Google AdSense Injector'), - 'description' => t('Insert Google AdSense ads into full node views automatically.'), - 'callback' => 'drupal_get_form', - 'callback arguments' => array('adsense_injector_admin_settings'), - 'access' => user_access('administer site configuration'), - 'type' => MENU_NORMAL_ITEM, - ); - return $items; -} - - -/** - * Implementation of hook_settings - */ -function adsense_injector_admin_settings() { - $form=array(); - _adsense_injector_get_banner($form); - - $form['node_ad_body_insertion'] = array( - '#type' => 'fieldset', - '#collapsible' => TRUE, - '#collapsed' => FALSE, - '#title' => t('Node body ad insertion'), - '#description' => t('Requires adsense.module'), - ); - - if (module_exists('adsense')) { - $form['node_ad_body_insertion']['adsense_injector_insert_body_ad'] = - array('#type' => 'checkbox', - '#title'=> t('Insert inline ad in node body on page views'), - '#default_value' => variable_get('adsense_injector_insert_body_ad', ADSENSE_INJECTOR_INSERT_BODY_AD_DEFAULT), - '#description' => t('Description'), - '#required'=>FALSE); - - - - $form['node_ad_body_insertion']['adsense_injector_body_minwords'] = - array('#type' => 'textfield', - '#title'=> t('Minimum node body word count'), - '#default_value' => variable_get('adsense_injector_body_minwords', ADSENSE_INJECTOR_BODY_MINWORDS_DEFAULT), - '#description' => t('The minimum node body word count threshold - only inject if node body has at least this many words.')); - - $form['node_ad_body_insertion']['adsense_injector_body_template'] = - array('#type' => 'textarea', - '#title'=> t('Node body ad insertion template'), - '#rows' => 5, - '#cols' => 40, - '#default_value' => variable_get('adsense_injector_body_template', ADSENSE_INJECTOR_BODY_INSERTION_TEMPLATE_DEFAULT), - '#description' => t('Ad insertion template. Substitution variables: %body = full node body text. Insert adsense module filter tags. See the adsense.module settings page for a list of supported formats and help with filter tags.'), - '#required' => TRUE); - - /** - * 'list' insertion (frontpage, taxonomy, etc. - */ - $form['node_ad_list_insertion'] = - array('#type' => 'fieldset', - '#collapsible' => TRUE, - '#collapsed' => FALSE, - '#title' => t('Node list ad insertion'), - '#description' => t('Ad insertion in node lists or other non-page view, like front page, taxonomy views.'), - ); - - $form['node_ad_list_insertion']['adsense_injector_append_in_listview'] = - array('#type' => 'checkbox', - '#title'=> t('Append an ad after teaser on frontpage and taxonomy lists'), - '#default_value' => variable_get('adsense_injector_append_in_listview', ADSENSE_INJECTOR_APPEND_IN_LISTVIEW_DEFAULT), - '#description' => t('Note: this does not currently support Views module based lists.'), - '#required'=>FALSE); - - $form['node_ad_list_insertion']['adsense_injector_listview_insertion_template'] = - array('#type' => 'textarea', - '#title'=> t('List ad insertion template'), - '#rows' => 3, - '#cols' => 40, - '#default_value' => variable_get('adsense_injector_listview_insertion_template', ADSENSE_INJECTOR_LISTVIEW_INSERTION_TEMPLATE_DEFAULT), - '#description' => t('Template to use when inserting adsense ad. "%teaser" will be replaced with the node teaser. Insert adsense filter tags. See the adsense.module settings page for a list of supported formats and help with filter tags.'), - '#required' => TRUE); - - /** - * What kinds of nodes do we want to insert on...? - */ - - $form['injection_control'] = - array('#type' => 'fieldset', - '#collapsible' => TRUE, - '#collapsed' => TRUE, - '#title' => t('Select Node Types for Insertion'), - '#description' => t('Nodes types to display inline ads - ads are inserted only in the selected node types.'), - ); - - /** - * Enumerate node types, and set up form fields for each - */ - $enabled_count = 0; - $nodetypes = array(); - foreach (node_get_types() as $type => $typeObj) { - $nodetypes[$type] = $typeObj->name; - $enabled = variable_get(ADSENSE_INJECTOR_INSERT_AD_NODETYPE . $type, FALSE); - if ($enabled) $enabled_count++; - $form['injection_control']['node_types'][ADSENSE_INJECTOR_INSERT_AD_NODETYPE . $type] = - array('#type' => 'checkbox', - '#title'=> $typeObj->name, - '#default_value' => $enabled, - '#description' => t('Display inline ads on %nodetype nodes', array('%nodetype' => $typeObj->name)), - '#required'=>FALSE); - - } - - // do some sanity checking - if ($enabled_count == 0) { - $msg = t('No node types selected (no ads will be inserted because you haven\'t selected any node types for automatic ad insertion.)'); - // form_set_error('injection_control][node_types', $msg); - $form['injection_control']['#collapsed'] = FALSE; - $form['injection_control']['no_nodes_enabled'] - = array('#type' => 'markup', - '#weight' => -1, - '#value' => ''); - } - - } - return system_settings_form($form); + $items['admin/settings/adsense_injector'] = array( + 'title' => t('Google AdSense Injector'), + 'description' => t('Insert Google AdSense ads into full node views automatically.'), + 'page callback' => 'drupal_get_form', + 'page arguments' => array('adsense_injector_admin_settings'), + 'access arguments' => array('administer site configuration'), + 'file' => 'adsense_injector.admin.inc', + 'type' => MENU_NORMAL_ITEM, + ); + return $items; } /** @@ -264,8 +154,13 @@ function adsense_injector_admin_settings */ function _adsense_injector_get_banner(&$form) { $name = 'adsense_injector-d5'; - $d = ''; - $form['module_banner'] = array('#type' => 'markup', - '#value' => '
'); + $d = '' . $d . 'Module development sponsored by Exodus Development
'); - $form['module_id'] = array('#type' => 'markup', '#value' => ADSENSE_INJECTOR_MODULE_VERSION . ''; + $form['module_banner'] = array( + '#type' => 'markup', + '#value' => '
' + ); }'. $d .'Module development sponsored by Exodus Development
' + ); + $form['module_id'] = array( + '#type' => 'markup', + '#value' => ADSENSE_INJECTOR_MODULE_VERSION .'