? ga_custom_var-609892-46.patch Index: googleanalytics.admin.inc =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/google_analytics/googleanalytics.admin.inc,v retrieving revision 1.13.2.7 diff -u -p -r1.13.2.7 googleanalytics.admin.inc --- googleanalytics.admin.inc 15 Aug 2010 16:54:48 -0000 1.13.2.7 +++ googleanalytics.admin.inc 23 Sep 2010 15:02:04 -0000 @@ -244,6 +244,58 @@ function googleanalytics_admin_settings_ '#description' => t("Code in this textarea will be added after _gaq.push(['_trackPageview']). This is useful if you'd like to track a site in two accounts."), ); + $form['advanced']['custom_var'] = array( + '#type' => 'fieldset', + '#title' => t('Custom Variables'), + '#collapsible' => TRUE, + '#collapsed' => TRUE, + '#description' => t('
You can add Google Analytics Custom Variables here. These will be added to every page that Google Analytics appears on.
', array('@custom_var' => 'http://code.google.com/intl/zh-TW/apis/analytics/docs/tracking/gaTrackingCustomVariables.html')) . + t("Google Analytics will only accept custom variables where the name and value combined are less than 64 bytes when URL encoded. Translation: keep them short, and expect long values to get trimmed.
"), + ); + + if (module_exists('token')) { + $form['advanced']['custom_var']['token_help'] = array( + '#title' => t('Replacement patterns'), + '#type' => 'fieldset', + '#collapsible' => TRUE, + '#collapsed' => TRUE, + ); + $form['advanced']['custom_var']['token_help']['help'] = array( + '#value' => theme('token_help', 'node'), + ); + } + else { + $form['advanced']['custom_var']['#description'] .= t("If you install the !token module, you can use Tokens as custom variable values.
", array('!token' => l('Token', 'http://drupal.org/project/token'))); + } + + for ($i = 1; $i < 6; $i++) { + $form['advanced']['custom_var']['googleanalytics_custom_var_'. $i] = array( + '#type' => 'fieldset', + '#title' => t('Variable %index', array('%index' => $i)), + ); + $form['advanced']['custom_var']['googleanalytics_custom_var_'. $i]['googleanalytics_custom_var_'. $i .'_name'] = array( + '#type' => 'textfield', + '#title' => t('Name'), + '#default_value' => variable_get('googleanalytics_custom_var_'. $i .'_name', ''), + ); + $form['advanced']['custom_var']['googleanalytics_custom_var_'. $i]['googleanalytics_custom_var_'. $i .'_value'] = array( + '#type' => 'textfield', + '#title' => t('Value'), + '#default_value' => variable_get('googleanalytics_custom_var_'. $i .'_value', ''), + '#description' => (module_exists('token') ? t('You may use tokens in this field.') : ''), + ); + $form['advanced']['custom_var']['googleanalytics_custom_var_'. $i]['googleanalytics_custom_var_'. $i .'_scope'] = array( + '#type' => 'select', + '#title' => t('Scope'), + '#default_value' => variable_get('googleanalytics_custom_var_'. $i .'_scope', 3), + '#options' => array( + 3 => 'page', + 2 => 'session', + 1 => 'visitor', + ), + ); + } + /* hook_footer() is not able to add code to head. Upgrade to D7 required. $form['advanced']['googleanalytics_js_scope'] = array( '#type' => 'select', Index: googleanalytics.install =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/google_analytics/googleanalytics.install,v retrieving revision 1.13.2.5 diff -u -p -r1.13.2.5 googleanalytics.install --- googleanalytics.install 28 Aug 2010 18:17:09 -0000 1.13.2.5 +++ googleanalytics.install 23 Sep 2010 15:02:04 -0000 @@ -41,6 +41,12 @@ function googleanalytics_uninstall() { variable_del('googleanalytics_tracker_anonymizeip'); variable_del('googleanalytics_translation_set'); + for ($i = 1; $i < 6; $i++) { + variable_del('googleanalytics_custom_var_'. $i .'_name'); + variable_del('googleanalytics_custom_var_'. $i .'_value'); + variable_del('googleanalytics_custom_var_'. $i .'_scope'); + } + // Remove backup variables if exits. Remove this code in D8. variable_del('googleanalytics_codesnippet_before_backup_6300'); variable_del('googleanalytics_codesnippet_after_backup_6300'); Index: googleanalytics.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/google_analytics/googleanalytics.module,v retrieving revision 1.36.2.12 diff -u -p -r1.36.2.12 googleanalytics.module --- googleanalytics.module 14 Sep 2010 21:52:35 -0000 1.36.2.12 +++ googleanalytics.module 23 Sep 2010 15:02:04 -0000 @@ -135,6 +135,37 @@ function googleanalytics_footer($main = $codesnippet_before = variable_get('googleanalytics_codesnippet_before', ''); $codesnippet_after = variable_get('googleanalytics_codesnippet_after', ''); + // Add custom variables. + $custom_var = ''; + for ($i = 1; $i < 6; $i++) { + $custom_var_name = variable_get('googleanalytics_custom_var_'. $i .'_name', ''); + if ($custom_var_name) { + $custom_var_value = variable_get('googleanalytics_custom_var_'. $i .'_value', ''); + $custom_var_scope = variable_get('googleanalytics_custom_var_'. $i .'_scope', ''); + + if (module_exists('token')) { + $node = menu_get_object(); + $custom_var_value = token_replace($custom_var_value, 'node', $node); + } + + if (!is_numeric($custom_var_value) && !$custom_var_value) { continue; } + + // The custom variable name + value must not be more than 64 bytes after url encoding + $name_length = strlen(rawurlencode($custom_var_name)); + $tmp_value = rawurlencode($custom_var_value); + $value_length = strlen($tmp_value); + if ($name_length + $value_length > 64) { + // Trim value and remove fragments of url encoding. + $tmp_value = rtrim(substr($tmp_value, 0, 63 - $name_length),'%0..9A..F'); + $custom_var_value = urldecode($tmp_value); + } + + $custom_var_name = drupal_to_js($custom_var_name); + $custom_var_value = drupal_to_js($custom_var_value); + $custom_var .= "_gaq.push(['_setCustomVar', $i, $custom_var_name, $custom_var_value, $custom_var_scope]);"; + } + } + // Build tracker code. $script = 'var _gaq = _gaq || [];'; $script .= '_gaq.push(["_setAccount", ' . drupal_to_js($id) . ']);'; @@ -149,6 +180,9 @@ function googleanalytics_footer($main = if (!empty($codesnippet_before)) { $script .= $codesnippet_before; } + if (!empty($custom_var)) { + $script .= $custom_var; + } if (empty($url_custom)) { $script .= '_gaq.push(["_trackPageview"]);'; }