*************** *** 100,139 **** * @return google admanager slot script */ function theme_google_admanager_block($id, $ad_slot) { - - google_admanager_add_js('GA_googleAddSlot("' . $id . '", "' . $ad_slot . '");'); - - return ''; } /** - * Stored the ad slots and when called with no slot, return the whole ad manager javascript - * This function should be called from pianofiles_preprocess_page(&$vars) as followed - * if (module_exists('google_admanager')) { - * $vars['scripts'] .= google_admanager_add_js(); - * } - * @param $ad_slot string with the addSlot script - * @return google admanager code */ - function google_admanager_add_js($ad_slot = NULL) { - static $google_admanager_slots; - - if (isset($ad_slot)) { - $google_admanager_slots .= $ad_slot; - } - else { - if (isset($google_admanager_slots)) { $id = variable_get('google_admanager_account', ''); - // javascript which is supposed to come in the header - $js = '' . "\n"; - $js .= '' . "\n"; - $js .= '' . "\n"; - $js .= '' . "\n"; - return $js; } } } /** * Implementation of hook_filter(). * --- 100,179 ---- * @return google admanager slot script */ function theme_google_admanager_block($id, $ad_slot) { + google_admanager_add_js('GA_googleAddSlot("'. $id .'", "'. $ad_slot .'");'); + return ''; } /** + * Store ad slots js and when called with no slot, return the whole ad manager javascript + * + * @param $js (optional) string with the slot script to add to the array. + * @param $type (optional) scripts have to be split up into 4 types and are output + * in order ['init', 'service', 'slot', 'close']. + * @return if $js is empty, then an array of stored google_admanager javascript */ + function google_admanager_add_js($js = NULL, $type = 'slot') { + static $ga_js = array(); + + // add the js to a type + if(isset($js) && isset($type)) { + $ga_js[$type][] = $js; + + //add the init and service scripts the first time this is run + if (!isset($ga_js['init'])) { + //drupal_add_js can't load externaljs in 6, but it will in 7. this is a workaround. + $external_js = 'http://partner.googleadservices.com/gampad/google_service.js'; + google_admanager_add_js('document.write(unescape("%3Cscript src=\''. $external_js . '\' type=\'text/javascript\'%3E%3C/script%3E"));', 'init'); + $id = variable_get('google_admanager_account', ''); + google_admanager_add_js('GS_googleAddAdSenseService("'. $id .'");', 'service'); + google_admanager_add_js('GS_googleEnableAllServices();', 'service'); + + // set the close script to fetch the ads. + google_admanager_add_js('GA_googleFetchAds();', 'close'); } + return; + } + + // $ga_js['init'] must have been set since we didn't return, so if js isn't set then return + // the whole array, just like drupal_add_js(). + + if (!isset($js)) { + return $ga_js; } } + /** + * Output the Google Admanager scripts by way of drupal_add_js(). + * + * @param $scope (optional) the scope to output the javascript. see drupal_add_js(). + */ + function google_admanager_get_js($scope = 'header') { + //get the js for this page if it exists + $ga_js = google_admanager_add_js(); + if(isset($ga_js)) { + $output_order = array('init', 'service', 'slot', 'close'); + foreach ($output_order as $type) { + $output = ''; + foreach($ga_js[$type] as $js) { + $output .= $js . "\n"; + } + drupal_add_js($output, 'inline', $scope); + } + } + } + + /** + * Implementation of hook_preprocess_page(). + */ + function google_admanager_preprocess_page(&$vars) { + //output the scripts through drupal_add_js() + google_admanager_get_js(); + + //this doesn't have any effect if another module/theme later overides it. + $vars['scripts'] = drupal_get_js(); + } + /** * Implementation of hook_filter(). *