| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775 |
- <?php
- /**
- * Author: ExactMetrics team
- * Author URI: https://exactmetrics.com
- * Copyright 2018 ExactMetrics team
- * License: GPLv2 or later
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
- */
- // Exit if accessed directly
- if ( ! defined( 'ABSPATH' ) )
- exit();
- if ( ! class_exists( 'GADWP_Tracking_Analytics_Base' ) ) {
- class GADWP_Tracking_Analytics_Base {
- protected $gadwp;
- protected $uaid;
- public function __construct() {
- $this->gadwp = GADWP();
- $profile = GADWP_Tools::get_selected_profile( $this->gadwp->config->options['ga_profiles_list'], $this->gadwp->config->options['tableid_jail'] );
- $this->uaid = esc_html( $profile[2] );
- }
- protected function build_custom_dimensions() {
- $custom_dimensions = array();
- if ( $this->gadwp->config->options['ga_author_dimindex'] && ( is_single() || is_page() ) ) {
- global $post;
- $author_id = $post->post_author;
- $author_name = get_the_author_meta( 'display_name', $author_id );
- $index = (int) $this->gadwp->config->options['ga_author_dimindex'];
- $custom_dimensions[$index] = esc_attr( $author_name );
- }
- if ( $this->gadwp->config->options['ga_pubyear_dimindex'] && is_single() ) {
- global $post;
- $date = get_the_date( 'Y', $post->ID );
- $index = (int) $this->gadwp->config->options['ga_pubyear_dimindex'];
- $custom_dimensions[$index] = (int) $date;
- }
- if ( $this->gadwp->config->options['ga_pubyearmonth_dimindex'] && is_single() ) {
- global $post;
- $date = get_the_date( 'Y-m', $post->ID );
- $index = (int) $this->gadwp->config->options['ga_pubyearmonth_dimindex'];
- $custom_dimensions[$index] = esc_attr( $date );
- }
- if ( $this->gadwp->config->options['ga_category_dimindex'] && is_category() ) {
- $fields = array();
- $index = (int) $this->gadwp->config->options['ga_category_dimindex'];
- $custom_dimensions[$index] = esc_attr( single_tag_title( '', false ) );
- }
- if ( $this->gadwp->config->options['ga_category_dimindex'] && is_single() ) {
- global $post;
- $categories = get_the_category( $post->ID );
- foreach ( $categories as $category ) {
- $index = (int) $this->gadwp->config->options['ga_category_dimindex'];
- $custom_dimensions[$index] = esc_attr( $category->name );
- break;
- }
- }
- if ( $this->gadwp->config->options['ga_tag_dimindex'] && is_single() ) {
- global $post;
- $fields = array();
- $post_tags_list = '';
- $post_tags_array = get_the_tags( $post->ID );
- if ( $post_tags_array ) {
- foreach ( $post_tags_array as $tag ) {
- $post_tags_list .= $tag->name . ', ';
- }
- }
- $post_tags_list = rtrim( $post_tags_list, ', ' );
- if ( $post_tags_list ) {
- $index = (int) $this->gadwp->config->options['ga_tag_dimindex'];
- $custom_dimensions[$index] = esc_attr( $post_tags_list );
- }
- }
- if ( $this->gadwp->config->options['ga_user_dimindex'] ) {
- $fields = array();
- $index = (int) $this->gadwp->config->options['ga_user_dimindex'];
- $custom_dimensions[$index] = is_user_logged_in() ? 'registered' : 'guest';
- }
- return $custom_dimensions;
- }
- protected function is_event_tracking( $opt, $with_pagescrolldepth = true ) {
- if ( $this->gadwp->config->options['ga_event_tracking'] || $this->gadwp->config->options['ga_aff_tracking'] || $this->gadwp->config->options['ga_hash_tracking'] || $this->gadwp->config->options['ga_formsubmit_tracking'] ) {
- return true;
- }
- if ( $this->gadwp->config->options['ga_pagescrolldepth_tracking'] && $with_pagescrolldepth ) {
- return true;
- }
- return false;
- }
- }
- }
- if ( ! class_exists( 'GADWP_Tracking_Analytics_Common' ) ) {
- class GADWP_Tracking_Analytics_Common extends GADWP_Tracking_Analytics_Base {
- protected $commands;
- public function __construct() {
- parent::__construct();
- $this->load_scripts();
- if ( $this->gadwp->config->options['optimize_tracking'] && $this->gadwp->config->options['optimize_pagehiding'] && $this->gadwp->config->options['optimize_containerid'] ) {
- add_action( 'wp_head', array( $this, 'optimize_output' ), 99 );
- }
- }
- /**
- * Styles & Scripts load
- */
- private function load_scripts() {
- if ( $this->is_event_tracking( true ) ) {
- $root_domain = GADWP_Tools::get_root_domain();
- wp_enqueue_script( 'gadwp-tracking-analytics-events', GADWP_URL . 'front/js/tracking-analytics-events.js', array( 'jquery' ), GADWP_CURRENT_VERSION, $this->gadwp->config->options['trackingevents_infooter'] );
- if ( $this->gadwp->config->options['ga_pagescrolldepth_tracking'] ) {
- wp_enqueue_script( 'gadwp-pagescrolldepth-tracking', GADWP_URL . 'front/js/tracking-scrolldepth.js', array( 'jquery' ), GADWP_CURRENT_VERSION, $this->gadwp->config->options['trackingevents_infooter'] );
- }
- /* @formatter:off */
- wp_localize_script( 'gadwp-tracking-analytics-events', 'gadwpUAEventsData', array(
- 'options' => array(
- 'event_tracking' => $this->gadwp->config->options['ga_event_tracking'],
- 'event_downloads' => esc_js($this->gadwp->config->options['ga_event_downloads']),
- 'event_bouncerate' => $this->gadwp->config->options['ga_event_bouncerate'],
- 'aff_tracking' => $this->gadwp->config->options['ga_aff_tracking'],
- 'event_affiliates' => esc_js($this->gadwp->config->options['ga_event_affiliates']),
- 'hash_tracking' => $this->gadwp->config->options ['ga_hash_tracking'],
- 'root_domain' => $root_domain,
- 'event_timeout' => apply_filters( 'gadwp_analyticsevents_timeout', 100 ),
- 'event_precision' => $this->gadwp->config->options['ga_event_precision'],
- 'event_formsubmit' => $this->gadwp->config->options ['ga_formsubmit_tracking'],
- 'ga_pagescrolldepth_tracking' => $this->gadwp->config->options['ga_pagescrolldepth_tracking'],
- 'ga_with_gtag' => $this->gadwp->config->options ['ga_with_gtag'],
- ),
- )
- );
- /* @formatter:on */
- }
- }
- /**
- * Outputs the Google Optimize tracking code
- */
- public function optimize_output() {
- GADWP_Tools::load_view( 'front/views/optimize-code.php', array( 'containerid' => $this->gadwp->config->options['optimize_containerid'] ) );
- }
- /**
- * Sanitizes the output of commands in the tracking code
- * @param string $value
- * @return string
- */
- protected function filter( $value, $is_dim = false ) {
- if ( 'true' == $value || 'false' == $value || ( is_numeric( $value ) && ! $is_dim ) ) {
- return $value;
- }
- if ( substr( $value, 0, 1 ) == '[' && substr( $value, - 1 ) == ']' || substr( $value, 0, 1 ) == '{' && substr( $value, - 1 ) == '}' ) {
- return $value;
- }
- return "'" . $value . "'";
- }
- /**
- * Retrieves the commands
- */
- public function get() {
- return $this->commands;
- }
- /**
- * Stores the commands
- * @param array $commands
- */
- public function set( $commands ) {
- $this->commands = $commands;
- }
- /**
- * Formats the command before being added to the commands
- * @param string $command
- * @param array $fields
- * @param string $fieldsobject
- * @return array
- */
- public function prepare( $command, $fields, $fieldsobject = null ) {
- return array( 'command' => $command, 'fields' => $fields, 'fieldsobject' => $fieldsobject );
- }
- /**
- * Adds a formatted command to commands
- * @param string $command
- * @param array $fields
- * @param string $fieldsobject
- */
- protected function add( $command, $fields, $fieldsobject = null ) {
- $this->commands[] = $this->prepare( $command, $fields, $fieldsobject );
- }
- }
- }
- if ( ! class_exists( 'GADWP_Tracking_Analytics' ) ) {
- class GADWP_Tracking_Analytics extends GADWP_Tracking_Analytics_Common {
- public function __construct() {
- parent::__construct();
- if ( $this->gadwp->config->options['trackingcode_infooter'] ) {
- add_action( 'wp_footer', array( $this, 'output' ), 99 );
- } else {
- add_action( 'wp_head', array( $this, 'output' ), 99 );
- }
- }
- /**
- * Builds the commands based on user's options
- */
- private function build_commands() {
- $fields = array();
- $fieldsobject = array();
- $fields['trackingId'] = $this->uaid;
- if ( 1 != $this->gadwp->config->options['ga_speed_samplerate'] ) {
- $fieldsobject['siteSpeedSampleRate'] = (int) $this->gadwp->config->options['ga_speed_samplerate'];
- }
- if ( 100 != $this->gadwp->config->options['ga_user_samplerate'] ) {
- $fieldsobject['sampleRate'] = (int) $this->gadwp->config->options['ga_user_samplerate'];
- }
- if ( $this->gadwp->config->options['ga_crossdomain_tracking'] && '' != $this->gadwp->config->options['ga_crossdomain_list'] ) {
- $fieldsobject['allowLinker'] = 'true';
- }
- if ( ! empty( $this->gadwp->config->options['ga_cookiedomain'] ) ) {
- $fieldsobject['cookieDomain'] = $this->gadwp->config->options['ga_cookiedomain'];
- } else {
- $fields['cookieDomain'] = 'auto';
- }
- if ( ! empty( $this->gadwp->config->options['ga_cookiename'] ) ) {
- $fieldsobject['cookieName'] = $this->gadwp->config->options['ga_cookiename'];
- }
- if ( ! empty( $this->gadwp->config->options['ga_cookieexpires'] ) ) {
- $fieldsobject['cookieExpires'] = (int) $this->gadwp->config->options['ga_cookieexpires'];
- }
- if ( $this->gadwp->config->options['amp_tracking_clientidapi'] ) {
- $fieldsobject['useAmpClientId'] = 'true';
- }
- $this->add( 'create', $fields, $fieldsobject );
- if ( $this->gadwp->config->options['ga_crossdomain_tracking'] && '' != $this->gadwp->config->options['ga_crossdomain_list'] ) {
- $fields = array();
- $fields['plugin'] = 'linker';
- $this->add( 'require', $fields );
- $fields = array();
- $domains = '';
- $domains = explode( ',', $this->gadwp->config->options['ga_crossdomain_list'] );
- $domains = array_map( 'trim', $domains );
- $domains = strip_tags( implode( "','", $domains ) );
- $domains = "['" . $domains . "']";
- $fields['domains'] = $domains;
- $this->add( 'linker:autoLink', $fields );
- }
- if ( $this->gadwp->config->options['ga_remarketing'] ) {
- $fields = array();
- $fields['plugin'] = 'displayfeatures';
- $this->add( 'require', $fields );
- }
- if ( $this->gadwp->config->options['ga_enhanced_links'] ) {
- $fields = array();
- $fields['plugin'] = 'linkid';
- $this->add( 'require', $fields );
- }
- if ( $this->gadwp->config->options['ga_force_ssl'] ) {
- $fields = array();
- $fields['option'] = 'forceSSL';
- $fields['value'] = 'true';
- $this->add( 'set', $fields );
- }
- $custom_dimensions = $this->build_custom_dimensions();
- if ( ! empty( $custom_dimensions ) ) {
- foreach ( $custom_dimensions as $index => $value ) {
- $fields = array();
- $fields['gadwp_dimension'] = 'dimension' . $index;
- $fields['gadwp_dim_value'] = $value;
- $this->add( 'set', $fields );
- }
- }
- if ( $this->gadwp->config->options['ga_anonymize_ip'] ) {
- $fields = array();
- $fields['option'] = 'anonymizeIp';
- $fields['value'] = 'true';
- $this->add( 'set', $fields );
- }
- if ( 'enhanced' == $this->gadwp->config->options['ecommerce_mode'] ) {
- $fields = array();
- $fields['plugin'] = 'ec';
- $this->add( 'require', $fields );
- } else if ( 'standard' == $this->gadwp->config->options['ecommerce_mode'] ) {
- $fields = array();
- $fields['plugin'] = 'ecommerce';
- $this->add( 'require', $fields );
- }
- if ( $this->gadwp->config->options['optimize_tracking'] && $this->gadwp->config->options['optimize_containerid'] ) {
- $fields = array();
- $fields['plugin'] = esc_attr( $this->gadwp->config->options['optimize_containerid'] );
- $this->add( 'require', $fields );
- }
- $fields = array();
- $fields['hitType'] = 'pageview';
- $this->add( 'send', $fields );
- do_action( 'gadwp_analytics_commands', $this );
- }
- /**
- * Outputs the Google Analytics tracking code
- */
- public function output() {
- $this->commands = array();
- $this->build_commands();
- $trackingcode = '';
- foreach ( $this->commands as $set ) {
- $command = $set['command'];
- $fields = '';
- foreach ( $set['fields'] as $fieldkey => $fieldvalue ) {
- if ( false === strpos( $fieldkey, 'gadwp_dim_value' ) ) {
- $fieldvalue = $this->filter( $fieldvalue );
- } else {
- $fieldvalue = $this->filter( $fieldvalue, true );
- }
- $fields .= ", " . $fieldvalue;
- }
- if ( $set['fieldsobject'] ) {
- $fieldsobject = ", {";
- foreach ( $set['fieldsobject'] as $fieldkey => $fieldvalue ) {
- $fieldvalue = $this->filter( $fieldvalue );
- $fieldkey = $this->filter( $fieldkey );
- $fieldsobject .= $fieldkey . ": " . $fieldvalue . ", ";
- }
- $fieldsobject = rtrim( $fieldsobject, ", " );
- $fieldsobject .= "}";
- $trackingcode .= " ga('" . $command . "'" . $fields . $fieldsobject . ");\n";
- } else {
- $trackingcode .= " ga('" . $command . "'" . $fields . ");\n";
- }
- }
- $tracking_script_path = apply_filters( 'gadwp_analytics_script_path', 'https://www.google-analytics.com/analytics.js' );
- if ( $this->gadwp->config->options['ga_optout'] || $this->gadwp->config->options['ga_dnt_optout'] ) {
- GADWP_Tools::load_view( 'front/views/analytics-optout-code.php', array( 'uaid' => $this->uaid, 'gaDntOptout' => $this->gadwp->config->options['ga_dnt_optout'], 'gaOptout' => $this->gadwp->config->options['ga_optout'] ) );
- }
- GADWP_Tools::load_view( 'front/views/analytics-code.php', array( 'trackingcode' => $trackingcode, 'tracking_script_path' => $tracking_script_path, 'ga_with_gtag' => $this->gadwp->config->options['ga_with_gtag'] , 'uaid' => $this->uaid ) );
- }
- }
- }
- if ( ! class_exists( 'GADWP_Tracking_GlobalSiteTag' ) ) {
- class GADWP_Tracking_GlobalSiteTag extends GADWP_Tracking_Analytics_Common {
- public function __construct() {
- parent::__construct();
- if ( $this->gadwp->config->options['trackingcode_infooter'] ) {
- add_action( 'wp_footer', array( $this, 'output' ), 99 );
- } else {
- add_action( 'wp_head', array( $this, 'output' ), 99 );
- }
- }
- /**
- * Builds the commands based on user's options
- */
- private function build_commands() {
- $fields = array();
- $fieldsobject = array();
- $fields['trackingId'] = $this->uaid;
- $custom_dimensions = $this->build_custom_dimensions();
- /*
- * if ( 1 != $this->gadwp->config->options['ga_speed_samplerate'] ) {
- * $fieldsobject['siteSpeedSampleRate'] = (int) $this->gadwp->config->options['ga_speed_samplerate'];
- * }
- */
- if ( ! empty( $this->gadwp->config->options['ga_cookiedomain'] ) ) {
- $fieldsobject['cookie_domain'] = $this->gadwp->config->options['ga_cookiedomain'];
- }
- if ( ! empty( $this->gadwp->config->options['ga_cookiename'] ) ) {
- $fieldsobject['cookie_name'] = $this->gadwp->config->options['ga_cookiename'];
- }
- if ( ! empty( $this->gadwp->config->options['ga_cookieexpires'] ) ) {
- $fieldsobject['cookie_expires'] = (int) $this->gadwp->config->options['ga_cookieexpires'];
- }
- /*
- * if ( $this->gadwp->config->options['amp_tracking_clientidapi'] ) {
- * $fieldsobject['useAmpClientId'] = 'true';
- * }
- */
- if ( $this->gadwp->config->options['ga_crossdomain_tracking'] && '' != $this->gadwp->config->options['ga_crossdomain_list'] ) {
- $domains = '';
- $domains = explode( ',', $this->gadwp->config->options['ga_crossdomain_list'] );
- $domains = array_map( 'trim', $domains );
- $domains = strip_tags( implode( "','", $domains ) );
- $domains = "['" . $domains . "']";
- $fieldsobject['linker'] = "{ 'domains' : " . $domains . " }";
- }
- if ( ! $this->gadwp->config->options['ga_remarketing'] ) {
- $fieldsobject['allow_display_features'] = 'false';
- }
- if ( $this->gadwp->config->options['ga_enhanced_links'] ) {
- $fieldsobject['link_attribution'] = 'true';
- }
- if ( $this->gadwp->config->options['ga_anonymize_ip'] ) {
- $fieldsobject['anonymize_ip'] = 'true';
- }
- if ( $this->gadwp->config->options['optimize_tracking'] && $this->gadwp->config->options['optimize_containerid'] ) {
- $fieldsobject['optimize_id'] = esc_attr( $this->gadwp->config->options['optimize_containerid'] );
- }
- if ( 100 != $this->gadwp->config->options['ga_user_samplerate'] ) {
- $fieldsobject['sample_rate'] = (int) $this->gadwp->config->options['ga_user_samplerate'];
- }
- if ( ! empty( $custom_dimensions ) ) {
- $fieldsobject['custom_map'] = "{\n\t\t";
- foreach ( $custom_dimensions as $index => $value ) {
- $fieldsobject['custom_map'] .= "'dimension" . $index . "': '" . "gadwp_dim_" . $index . "', \n\t\t";
- }
- $fieldsobject['custom_map'] = rtrim( $fieldsobject['custom_map'], ", \n\t\t" );
- $fieldsobject['custom_map'] .= "\n\t}";
- }
- $this->add( 'config', $fields, $fieldsobject );
- if ( ! empty( $custom_dimensions ) ) {
- $fields = array();
- $fieldsobject = array();
- $fields['event_name'] = 'gadwp_dimensions';
- foreach ( $custom_dimensions as $index => $value ) {
- $fieldsobject['gadwp_dim_' . $index] = $value;
- }
- $this->add( 'event', $fields, $fieldsobject );
- }
- do_action( 'gadwp_gtag_commands', $this );
- }
- /**
- * Outputs the Google Analytics tracking code
- */
- public function output() {
- $this->commands = array();
- $this->build_commands();
- $trackingcode = '';
- foreach ( $this->commands as $set ) {
- $command = $set['command'];
- $fields = '';
- foreach ( $set['fields'] as $fieldkey => $fieldvalue ) {
- $fieldvalue = $this->filter( $fieldvalue );
- $fields .= ", " . $fieldvalue;
- }
- if ( $set['fieldsobject'] ) {
- $fieldsobject = ", {\n\t";
- foreach ( $set['fieldsobject'] as $fieldkey => $fieldvalue ) {
- if ( false === strpos( $fieldkey, 'gadwp_' ) ) {
- $fieldvalue = $this->filter( $fieldvalue );
- } else {
- $fieldvalue = $this->filter( $fieldvalue, true );
- }
- $fieldkey = $this->filter( $fieldkey );
- $fieldsobject .= $fieldkey . ": " . $fieldvalue . ", \n\t";
- }
- $fieldsobject = rtrim( $fieldsobject, ", \n\t" );
- $fieldsobject .= "\n }";
- $trackingcode .= " gtag('" . $command . "'" . $fields . $fieldsobject . ");\n";
- } else {
- $trackingcode .= " gtag('" . $command . "'" . $fields . ");\n";
- }
- }
- $tracking_script_path = apply_filters( 'gadwp_gtag_script_path', 'https://www.googletagmanager.com/gtag/js' );
- if ( $this->gadwp->config->options['ga_optout'] || $this->gadwp->config->options['ga_dnt_optout'] ) {
- GADWP_Tools::load_view( 'front/views/analytics-optout-code.php', array( 'uaid' => $this->uaid, 'gaDntOptout' => $this->gadwp->config->options['ga_dnt_optout'], 'gaOptout' => $this->gadwp->config->options['ga_optout'] ) );
- }
- GADWP_Tools::load_view( 'front/views/analytics-code.php', array( 'trackingcode' => $trackingcode, 'tracking_script_path' => $tracking_script_path, 'ga_with_gtag' => $this->gadwp->config->options['ga_with_gtag'] , 'uaid' => $this->uaid ) );
- }
- }
- }
- if ( ! class_exists( 'GADWP_Tracking_Analytics_AMP' ) ) {
- class GADWP_Tracking_Analytics_AMP extends GADWP_Tracking_Analytics_Base {
- private $config;
- public function __construct() {
- parent::__construct();
- add_filter( 'amp_post_template_data', array( $this, 'load_scripts' ) );
- add_action( 'amp_post_template_footer', array( $this, 'output' ) );
- add_filter( 'the_content', array( $this, 'add_data_attributes' ), 999, 1 );
- if ( $this->gadwp->config->options['amp_tracking_clientidapi'] ) {
- add_action( 'amp_post_template_head', array( $this, 'add_amp_client_id' ) );
- }
- }
- private function get_link_event_data( $link ) {
- if ( empty( $link ) ) {
- return false;
- }
- if ( $this->gadwp->config->options['ga_event_tracking'] ) {
- // on changes adjust the substr() length parameter
- if ( substr( $link, 0, 7 ) === "mailto:" ) {
- return array( 'email', 'send', $link );
- }
- // on changes adjust the substr() length parameter
- if ( substr( $link, 0, 4 ) === "tel:" ) {
- return array( 'telephone', 'call', $link );
- }
- // Add download data-vars
- if ( $this->gadwp->config->options['ga_event_downloads'] && preg_match( '/.*\.(' . $this->gadwp->config->options['ga_event_downloads'] . ')(\?.*)?$/i', $link, $matches ) ) {
- return array( 'download', 'click', $link );
- }
- }
- if ( $this->gadwp->config->options['ga_hash_tracking'] ) {
- // Add hashmark data-vars
- $root_domain = GADWP_Tools::get_root_domain();
- if ( $root_domain && ( strpos( $link, $root_domain ) > - 1 || strpos( $link, '://' ) === false ) && strpos( $link, '#' ) > - 1 ) {
- return array( 'hashmark', 'click', $link );
- }
- }
- if ( $this->gadwp->config->options['ga_aff_tracking'] ) {
- // Add affiliate data-vars
- if ( strpos( $link, $this->gadwp->config->options['ga_event_affiliates'] ) > - 1 ) {
- return array( 'affiliates', 'click', $link );
- }
- }
- if ( $this->gadwp->config->options['ga_event_tracking'] ) {
- // Add outbound data-vars
- $root_domain = GADWP_Tools::get_root_domain();
- if ( $root_domain && strpos( $link, $root_domain ) === false && strpos( $link, '://' ) > - 1 ) {
- return array( 'outbound', 'click', $link );
- }
- }
- return false;
- }
- public function add_data_attributes( $content ) {
- if ( function_exists( 'is_amp_endpoint' ) && is_amp_endpoint() && $this->is_event_tracking( false ) ) {
- $dom = GADWP_Tools::get_dom_from_content( $content );
- if ( $dom ) {
- $links = $dom->getElementsByTagName( 'a' );
- foreach ( $links as $item ) {
- $data_attributes = $this->get_link_event_data( $item->getAttribute( 'href' ) );
- if ( $data_attributes ) {
- if ( ! $item->hasAttribute( 'data-vars-ga-category' ) ) {
- $item->setAttribute( 'data-vars-ga-category', $data_attributes[0] );
- }
- if ( ! $item->hasAttribute( 'data-vars-ga-action' ) ) {
- $item->setAttribute( 'data-vars-ga-action', $data_attributes[1] );
- }
- if ( ! $item->hasAttribute( 'data-vars-ga-label' ) ) {
- $item->setAttribute( 'data-vars-ga-label', $data_attributes[2] );
- }
- }
- }
- if ( $this->gadwp->config->options['ga_formsubmit_tracking'] ) {
- $form_submits = $dom->getElementsByTagName( 'input' );
- foreach ( $form_submits as $item ) {
- if ( $item->getAttribute( 'type' ) == 'submit' ) {
- if ( ! $item->hasAttribute( 'data-vars-ga-category' ) ) {
- $item->setAttribute( 'data-vars-ga-category', 'form' );
- }
- if ( ! $item->hasAttribute( 'data-vars-ga-action' ) ) {
- $item->setAttribute( 'data-vars-ga-action', 'submit' );
- }
- if ( ! $item->hasAttribute( 'data-vars-ga-label' ) ) {
- if ( $item->getAttribute( 'value' ) ) {
- $label = $item->getAttribute( 'value' );
- }
- if ( $item->getAttribute( 'name' ) ) {
- $label = $item->getAttribute( 'name' );
- }
- $item->setAttribute( 'data-vars-ga-label', $label );
- }
- }
- }
- }
- return GADWP_Tools::get_content_from_dom( $dom );
- }
- }
- return $content;
- }
- /**
- * Inserts the Analytics AMP script in the head section
- */
- public function load_scripts( $data ) {
- if ( ! isset( $data['amp_component_scripts'] ) ) {
- $data['amp_component_scripts'] = array();
- }
- $data['amp_component_scripts']['amp-analytics'] = 'https://cdn.ampproject.org/v0/amp-analytics-0.1.js';
- return $data;
- }
- /**
- * Retrieves the AMP config array
- */
- public function get() {
- return $this->config;
- }
- /**
- * Stores the AMP config array
- * @param array $config
- */
- public function set( $config ) {
- $this->config = $config;
- }
- private function build_json() {
- $this->config = array();
- // Set the Tracking ID
- /* @formatter:off */
- $this->config['vars'] = array(
- 'account' => $this->uaid,
- 'documentLocation' => '${canonicalUrl}',
- );
- /* @formatter:on */
- // Set Custom Dimensions as extraUrlParams
- $custom_dimensions = $this->build_custom_dimensions();
- if ( ! empty( $custom_dimensions ) ) {
- foreach ( $custom_dimensions as $index => $value ) {
- $dimension = 'cd' . $index;
- $this->config['extraUrlParams'][$dimension] = $value;
- }
- }
- // Set Triggers
- /* @formatter:off */
- $this->config['triggers']['gadwpTrackPageview'] = array(
- 'on' => 'visible',
- 'request' => 'pageview',
- );
- /* @formatter:on */
- // Set Sampling Rate only if lower than 100%
- if ( 100 != $this->gadwp->config->options['ga_user_samplerate'] ) {
- /* @formatter:off */
- $this->config['triggers']['gadwpTrackPageview']['sampleSpec'] = array(
- 'sampleOn' => '${clientId}',
- 'threshold' => (int) $this->gadwp->config->options['ga_user_samplerate'],
- );
- /* @formatter:on */
- }
- // Set Scroll events
- if ( $this->gadwp->config->options['ga_pagescrolldepth_tracking'] ) {
- /* @formatter:off */
- $this->config['triggers']['gadwpScrollPings'] = array (
- 'on' => 'scroll',
- 'scrollSpec' => array(
- 'verticalBoundaries' => '[25, 50, 75, 100]',
- ),
- 'request' => 'event',
- 'vars' => array(
- 'eventCategory' => 'Scroll Depth',
- 'eventAction' => 'Percentage',
- 'eventLabel' => '${verticalScrollBoundary}%',
- ),
- );
- /* @formatter:on */
- $this->config['triggers']['gadwpScrollPings']['extraUrlParams'] = array( 'ni' => true );
- }
- if ( $this->is_event_tracking( false ) ) {
- // Set downloads, outbound links, affiliate links, hashmarks, e-mails, telephones, form submits events
- /* @formatter:off */
- $this->config['triggers']['gadwpEventTracking'] = array (
- 'on' => 'click',
- 'selector' => '[data-vars-ga-category][data-vars-ga-action][data-vars-ga-label]',
- 'request' => 'event',
- 'vars' => array(
- 'eventCategory' => '${gaCategory}',
- 'eventAction' => '${gaAction}',
- 'eventLabel' => '${gaLabel}',
- ),
- );
- /* @formatter:on */
- if ( $this->gadwp->config->options['ga_event_bouncerate'] ) {
- $this->config['triggers']['gadwpEventTracking']['extraUrlParams'] = array( 'ni' => (bool) $this->gadwp->config->options['ga_event_bouncerate'] );
- }
- }
- do_action( 'gadwp_analytics_amp_config', $this );
- }
- public function add_amp_client_id() {
- GADWP_Tools::load_view( 'front/views/analytics-amp-clientidapi.php' );
- }
- /**
- * Outputs the Google Analytics tracking code for AMP
- */
- public function output() {
- $this->build_json();
- if ( version_compare( phpversion(), '5.4.0', '<' ) ) {
- $json = json_encode( $this->config );
- } else {
- $json = json_encode( $this->config, JSON_PRETTY_PRINT );
- }
- $json = str_replace( array( '"[', ']"' ), array( '[', ']' ), $json ); // make verticalBoundaries a JavaScript array
- $data = array( 'json' => $json );
- GADWP_Tools::load_view( 'front/views/analytics-amp-code.php', $data );
- }
- }
- }
|