Version Description
Release Date: October 14th, 2014
-
Bugfixes:
- Fixes a bug where 404 tracking would not work when using ga.js tracking.
-
Enhancements:
- Refactored several bits of code.
Download this release
Release Info
Developer | joostdevalk |
Plugin | Google Analytics for WordPress by MonsterInsights |
Version | 5.0.7 |
Comparing to | |
See all releases |
Code changes from version 5.0.6 to 5.0.7
- admin/class-admin.php +117 -203
- admin/class-google-analytics.php +350 -0
- admin/pages/settings.php +2 -0
- frontend/class-frontend.php +1 -1
- frontend/class-ga-js.php +15 -7
- frontend/class-universal.php +13 -6
- googleanalytics.php +2 -2
- includes/class-options.php +67 -8
- languages/google-analytics-for-wordpress-de_DE.po +0 -8
- languages/google-analytics-for-wordpress-el_GR.po +0 -8
- languages/google-analytics-for-wordpress-es_ES.po +0 -8
- languages/google-analytics-for-wordpress-fi.po +0 -8
- languages/google-analytics-for-wordpress-fr_FR.po +0 -8
- languages/google-analytics-for-wordpress-hu_HU.po +0 -8
- languages/google-analytics-for-wordpress-nl_NL.po +0 -8
- readme.txt +10 -1
admin/class-admin.php
CHANGED
@@ -3,8 +3,6 @@
|
|
3 |
* This class is for the backend, extendable for all child classes
|
4 |
*/
|
5 |
|
6 |
-
require_once 'wp-gdata/wp-gdata.php';
|
7 |
-
|
8 |
if ( ! class_exists( 'Yoast_GA_Admin' ) ) {
|
9 |
|
10 |
class Yoast_GA_Admin extends Yoast_GA_Options {
|
@@ -37,6 +35,11 @@ if ( ! class_exists( 'Yoast_GA_Admin' ) ) {
|
|
37 |
add_action( 'admin_notices', array( $this, 'config_warning' ) );
|
38 |
}
|
39 |
|
|
|
|
|
|
|
|
|
|
|
40 |
if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
|
41 |
|
42 |
if ( ! function_exists( 'wp_verify_nonce' ) ) {
|
@@ -77,14 +80,14 @@ if ( ! class_exists( 'Yoast_GA_Admin' ) ) {
|
|
77 |
*/
|
78 |
public function save_settings( $data ) {
|
79 |
foreach ( $data as $key => $value ) {
|
80 |
-
$this->options[
|
81 |
}
|
82 |
|
83 |
// Check checkboxes, on a uncheck they won't be posted to this function
|
84 |
$defaults = $this->default_ga_values();
|
85 |
-
foreach ( $defaults[
|
86 |
-
if ( ! isset( $data[
|
87 |
-
$this->options[
|
88 |
}
|
89 |
}
|
90 |
|
@@ -135,49 +138,81 @@ if ( ! class_exists( 'Yoast_GA_Admin' ) ) {
|
|
135 |
add_menu_page( __( 'Yoast Google Analytics:', 'google-analytics-for-wordpress' ) . ' ' . __( 'General Settings', 'google-analytics-for-wordpress' ), __( 'Analytics', 'google-analytics-for-wordpress' ), 'manage_options', 'yst_ga_dashboard', array(
|
136 |
$this,
|
137 |
'load_page',
|
138 |
-
), $icon_svg, $on_top ? '2.00013467543': '100.00013467543' );
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
),
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
'manage_options',
|
165 |
-
'yst_ga_licenses',
|
166 |
-
array( $this, 'load_page' ),
|
167 |
-
array( array( $this, 'yst_ga_licenses' ) ),
|
168 |
-
),
|
169 |
);
|
170 |
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
181 |
}
|
182 |
}
|
183 |
|
@@ -192,6 +227,7 @@ if ( ! class_exists( 'Yoast_GA_Admin' ) ) {
|
|
192 |
if ( ! defined( 'SCRIPT_DEBUG' ) || ! SCRIPT_DEBUG ) {
|
193 |
$ext = '.min' . $ext;
|
194 |
}
|
|
|
195 |
return $ext;
|
196 |
}
|
197 |
|
@@ -232,7 +268,7 @@ if ( ! class_exists( 'Yoast_GA_Admin' ) ) {
|
|
232 |
require_once( $this->plugin_path . 'admin/pages/settings.php' );
|
233 |
|
234 |
break;
|
235 |
-
case '
|
236 |
require_once( $this->plugin_path . 'admin/pages/extensions.php' );
|
237 |
break;
|
238 |
case 'yst_ga_dashboard':
|
@@ -294,17 +330,22 @@ if ( ! class_exists( 'Yoast_GA_Admin' ) ) {
|
|
294 |
$id = str_replace( '[', '-', $name );
|
295 |
$id = str_replace( ']', '', $id );
|
296 |
|
|
|
|
|
|
|
|
|
|
|
297 |
$input .= '<div class="ga-form ga-form-input">';
|
298 |
if ( ! is_null( $title ) ) {
|
299 |
$input .= '<label class="ga-form ga-form-' . $type . '-label ga-form-label-left" id="yoast-ga-form-label-' . $type . '-' . $this->form_namespace . '-' . $id . '" />' . $title . ':</label>';
|
300 |
}
|
301 |
|
302 |
-
if ( $type == 'checkbox' && $this->options[
|
303 |
$input .= '<input type="' . $type . '" class="ga-form ga-form-checkbox" id="yoast-ga-form-' . $type . '-' . $this->form_namespace . '-' . $id . '" name="' . $name . '" value="1" checked="checked" />';
|
304 |
} elseif ( $type == 'checkbox' ) {
|
305 |
$input .= '<input type="' . $type . '" class="ga-form ga-form-checkbox" id="yoast-ga-form-' . $type . '-' . $this->form_namespace . '-' . $id . '" name="' . $name . '" value="1" />';
|
306 |
} else {
|
307 |
-
$input .= '<input type="' . $type . '" class="ga-form ga-form-' . $type . '" id="yoast-ga-form-' . $type . '-' . $this->form_namespace . '-' . $id . '" name="' . $name . '" value="' . stripslashes( $this->options[
|
308 |
}
|
309 |
|
310 |
if ( ! is_null( $text_label ) ) {
|
@@ -317,7 +358,7 @@ if ( ! class_exists( 'Yoast_GA_Admin' ) ) {
|
|
317 |
if ( ! is_null( $description ) ) {
|
318 |
$input .= '<div class="ga-form ga-form-input">';
|
319 |
$input .= '<label class="ga-form ga-form-select-label ga-form-label-left" id="yoast-ga-form-description-select-' . $this->form_namespace . '-' . $id . '" /> </label>';
|
320 |
-
$input .= '<span class="ga-form ga-form-description">' .
|
321 |
$input .= '</div>';
|
322 |
}
|
323 |
|
@@ -339,6 +380,12 @@ if ( ! class_exists( 'Yoast_GA_Admin' ) ) {
|
|
339 |
$select = null;
|
340 |
$id = str_replace( '[', '-', $name );
|
341 |
$id = str_replace( ']', '', $id );
|
|
|
|
|
|
|
|
|
|
|
|
|
342 |
$select .= '<div class="ga-form ga-form-input">';
|
343 |
if ( ! is_null( $title ) ) {
|
344 |
$select .= '<label class="ga-form ga-form-select-label ga-form-label-left" id="yoast-ga-form-label-select-' . $this->form_namespace . '-' . $id . '" />' . $title . ':</label>';
|
@@ -351,14 +398,14 @@ if ( ! class_exists( 'Yoast_GA_Admin' ) ) {
|
|
351 |
}
|
352 |
if ( count( $values ) >= 1 ) {
|
353 |
foreach ( $values as $value ) {
|
354 |
-
if ( is_array( $this->options[
|
355 |
-
if ( in_array( $value['id'], $this->options[
|
356 |
$select .= '<option value="' . $value['id'] . '" selected="selected">' . stripslashes( $value['name'] ) . '</option>';
|
357 |
} else {
|
358 |
$select .= '<option value="' . $value['id'] . '">' . stripslashes( $value['name'] ) . '</option>';
|
359 |
}
|
360 |
} else {
|
361 |
-
$select .= '<option value="' . $value['id'] . '" ' . selected( $this->options[
|
362 |
}
|
363 |
}
|
364 |
}
|
@@ -388,11 +435,17 @@ if ( ! class_exists( 'Yoast_GA_Admin' ) ) {
|
|
388 |
public function textarea( $title, $name, $description = null ) {
|
389 |
$text = null;
|
390 |
$id = $this->option_prefix . '_' . $name;
|
|
|
|
|
|
|
|
|
|
|
|
|
391 |
$text .= '<div class="ga-form ga-form-input">';
|
392 |
if ( ! is_null( $title ) ) {
|
393 |
$text .= '<label class="ga-form ga-form-select-label ga-form-label-left" id="yoast-ga-form-label-select-' . $this->form_namespace . '-' . $id . '" />' . __( $title, 'google-analytics-for-wordpress' ) . ':</label>';
|
394 |
}
|
395 |
-
$text .= '<textarea rows="5" cols="60" name="' . $name . '" id="yoast-ga-form-textarea-' . $this->form_namespace . '-' . $id . '">' . stripslashes( $this->options[
|
396 |
$text .= '</div>';
|
397 |
|
398 |
// If we get a description, append it to this select field in a new row
|
@@ -412,172 +465,33 @@ if ( ! class_exists( 'Yoast_GA_Admin' ) ) {
|
|
412 |
* @return array
|
413 |
*/
|
414 |
public function get_profiles() {
|
415 |
-
|
416 |
-
$
|
417 |
-
|
418 |
-
|
419 |
-
|
420 |
-
if ( ! empty ( $options['ga_token'] ) ) {
|
421 |
-
$args = array(
|
422 |
-
'scope' => 'https://www.googleapis.com/auth/analytics.readonly',
|
423 |
-
'xoauth_displayname' => 'Google Analytics for WordPress by Yoast',
|
424 |
-
);
|
425 |
-
$access_token = $options['ga_oauth']['access_token'];
|
426 |
-
$gdata = new WP_Gdata( $args, $access_token['oauth_token'], $access_token['oauth_token_secret'] );
|
427 |
-
|
428 |
-
$response = $gdata->get( 'https://www.googleapis.com/analytics/v2.4/management/accounts/~all/webproperties/~all/profiles' );
|
429 |
-
$http_code = wp_remote_retrieve_response_code( $response );
|
430 |
-
$response = wp_remote_retrieve_body( $response );
|
431 |
-
|
432 |
-
if ( $http_code == 200 ) {
|
433 |
-
$options['ga_api_response'] = array(
|
434 |
-
'response' => array( 'code' => $http_code ),
|
435 |
-
'body' => $response,
|
436 |
-
);
|
437 |
-
update_option( $option_name, $options );
|
438 |
-
} else {
|
439 |
-
return $return;
|
440 |
-
}
|
441 |
-
|
442 |
-
try {
|
443 |
-
$xml_reader = new SimpleXMLElement( $options['ga_api_response']['body'] );
|
444 |
-
|
445 |
-
if ( ! empty( $xml_reader->entry ) ) {
|
446 |
-
|
447 |
-
$ga_accounts = array();
|
448 |
-
|
449 |
-
// Check whether the feed output is the new one, first set, or the old one, second set.
|
450 |
-
if ( $xml_reader->link['href'] == 'https://www.googleapis.com/analytics/v2.4/management/accounts/~all/webproperties/~all/profiles' ) {
|
451 |
-
foreach ( $xml_reader->entry AS $entry ) {
|
452 |
-
$ns = $entry->getNamespaces( true );
|
453 |
-
$properties = $entry->children( $ns['dxp'] )->property;
|
454 |
-
|
455 |
-
if ( isset ( $properties[1]->attributes()->value ) ) {
|
456 |
-
$ua = (string) trim( $properties[1]->attributes()->value );
|
457 |
-
}
|
458 |
-
|
459 |
-
if ( isset ( $properties[2]->attributes()->value ) ) {
|
460 |
-
$title = (string) trim( $properties[2]->attributes()->value );
|
461 |
-
}
|
462 |
-
|
463 |
-
if ( ! empty( $ua ) && ! empty( $title ) ) {
|
464 |
-
$ga_accounts[] = array(
|
465 |
-
'ua' => $ua,
|
466 |
-
'title' => $title,
|
467 |
-
);
|
468 |
-
}
|
469 |
-
}
|
470 |
-
} else {
|
471 |
-
if ( $xml_reader->link['href'] == 'https://www.google.com/analytics/feeds/accounts/default' ) {
|
472 |
-
foreach ( $xml_reader->entry AS $entry ) {
|
473 |
-
$ns = $entry->getNamespaces( true );
|
474 |
-
$properties = $entry->children( $ns['dxp'] )->property;
|
475 |
-
|
476 |
-
if ( isset ( $properties[3]->attributes()->value ) ) {
|
477 |
-
$ua = (string) trim( $properties[3]->attributes()->value );
|
478 |
-
}
|
479 |
-
|
480 |
-
if ( isset ( $properties[2]->attributes()->value ) ) {
|
481 |
-
$title = (string) trim( $properties[2]->attributes()->value );
|
482 |
-
}
|
483 |
-
|
484 |
-
if ( ! empty( $ua ) && ! empty( $title ) ) {
|
485 |
-
$ga_accounts[] = array(
|
486 |
-
'ua' => $ua,
|
487 |
-
'title' => $title,
|
488 |
-
);
|
489 |
-
}
|
490 |
-
}
|
491 |
-
}
|
492 |
-
}
|
493 |
-
|
494 |
-
if ( is_array( $ga_accounts ) ) {
|
495 |
-
usort( $ga_accounts, array( $this, 'sort_profiles' ) );
|
496 |
-
}
|
497 |
-
|
498 |
-
foreach ( $ga_accounts as $key => $ga_account ) {
|
499 |
-
$return[] = array(
|
500 |
-
'id' => $ga_account['ua'],
|
501 |
-
'name' => $ga_account['title'] . ' (' . $ga_account['ua'] . ')',
|
502 |
-
);
|
503 |
-
}
|
504 |
-
}
|
505 |
-
} catch ( Exception $e ) {
|
506 |
-
|
507 |
-
}
|
508 |
}
|
509 |
|
510 |
return $return;
|
511 |
}
|
512 |
|
513 |
-
/**
|
514 |
-
* Sorting the array in alphabetic order
|
515 |
-
*
|
516 |
-
* @param string $a
|
517 |
-
* @param string $b
|
518 |
-
*
|
519 |
-
* @return int
|
520 |
-
*/
|
521 |
-
public function sort_profiles( $a, $b ) {
|
522 |
-
return strcmp( $a['title'], $b['title'] );
|
523 |
-
}
|
524 |
|
525 |
/**
|
526 |
* Checks if there is a callback or reauth to get token from Google Analytics api
|
527 |
*/
|
528 |
private function connect_with_google_analytics() {
|
529 |
|
530 |
-
$option_name = 'yst_ga_api';
|
531 |
-
|
532 |
if ( isset( $_REQUEST['ga_oauth_callback'] ) ) {
|
533 |
-
$o = get_option( $option_name );
|
534 |
-
if ( isset( $o['ga_oauth']['oauth_token'] ) && $o['ga_oauth']['oauth_token'] == $_REQUEST['oauth_token'] ) {
|
535 |
-
$gdata = new WP_GData(
|
536 |
-
array(
|
537 |
-
'scope' => 'https://www.google.com/analytics/feeds/',
|
538 |
-
'xoauth_displayname' => 'Google Analytics by Yoast',
|
539 |
-
),
|
540 |
-
$o['ga_oauth']['oauth_token'],
|
541 |
-
$o['ga_oauth']['oauth_token_secret']
|
542 |
-
);
|
543 |
-
|
544 |
-
$o['ga_oauth']['access_token'] = $gdata->get_access_token( $_REQUEST['oauth_verifier'] );
|
545 |
-
unset( $o['ga_oauth']['oauth_token'] );
|
546 |
-
unset( $o['ga_oauth']['oauth_token_secret'] );
|
547 |
-
$o['ga_token'] = $o['ga_oauth']['access_token']['oauth_token'];
|
548 |
-
}
|
549 |
|
550 |
-
|
551 |
|
552 |
wp_redirect( menu_page_url( 'yst_ga_settings', false ) );
|
553 |
exit;
|
554 |
}
|
555 |
|
556 |
if ( ! empty ( $_GET['reauth'] ) ) {
|
557 |
-
$
|
558 |
-
array(
|
559 |
-
'scope' => 'https://www.google.com/analytics/feeds/',
|
560 |
-
'xoauth_displayname' => 'Google Analytics by Yoast',
|
561 |
-
)
|
562 |
-
);
|
563 |
-
|
564 |
-
$oauth_callback = add_query_arg( array( 'ga_oauth_callback' => 1 ), menu_page_url( 'yst_ga_settings', false ) );
|
565 |
-
$request_token = $gdata->get_request_token( $oauth_callback );
|
566 |
-
|
567 |
-
$options = get_option( $option_name );
|
568 |
-
|
569 |
-
if ( is_array( $options ) ) {
|
570 |
-
unset( $options['ga_token'] );
|
571 |
-
if ( is_array( $options['ga_oauth'] ) ) {
|
572 |
-
unset( $options['ga_oauth']['access_token'] );
|
573 |
-
}
|
574 |
-
}
|
575 |
-
|
576 |
-
$options['ga_oauth']['oauth_token'] = $request_token['oauth_token'];
|
577 |
-
$options['ga_oauth']['oauth_token_secret'] = $request_token['oauth_token_secret'];
|
578 |
-
update_option( $option_name, $options );
|
579 |
|
580 |
-
wp_redirect( $
|
581 |
exit;
|
582 |
}
|
583 |
}
|
@@ -590,8 +504,8 @@ if ( ! class_exists( 'Yoast_GA_Admin' ) ) {
|
|
590 |
public function get_userroles() {
|
591 |
global $wp_roles;
|
592 |
|
593 |
-
$all_roles
|
594 |
-
$roles
|
595 |
|
596 |
/**
|
597 |
* Filter: 'editable_roles' - Allows filtering of the roles shown within the plugin (and elsewhere in WP as it's a WP filter)
|
3 |
* This class is for the backend, extendable for all child classes
|
4 |
*/
|
5 |
|
|
|
|
|
6 |
if ( ! class_exists( 'Yoast_GA_Admin' ) ) {
|
7 |
|
8 |
class Yoast_GA_Admin extends Yoast_GA_Options {
|
35 |
add_action( 'admin_notices', array( $this, 'config_warning' ) );
|
36 |
}
|
37 |
|
38 |
+
// Require analytics class
|
39 |
+
if ( ! class_exists( 'Yoast_Google_Analytics' ) ) {
|
40 |
+
require_once 'class-google-analytics.php';
|
41 |
+
}
|
42 |
+
|
43 |
if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
|
44 |
|
45 |
if ( ! function_exists( 'wp_verify_nonce' ) ) {
|
80 |
*/
|
81 |
public function save_settings( $data ) {
|
82 |
foreach ( $data as $key => $value ) {
|
83 |
+
$this->options[$key] = $value;
|
84 |
}
|
85 |
|
86 |
// Check checkboxes, on a uncheck they won't be posted to this function
|
87 |
$defaults = $this->default_ga_values();
|
88 |
+
foreach ( $defaults[$this->option_prefix] as $key => $value ) {
|
89 |
+
if ( ! isset( $data[$key] ) ) {
|
90 |
+
$this->options[$key] = $value;
|
91 |
}
|
92 |
}
|
93 |
|
138 |
add_menu_page( __( 'Yoast Google Analytics:', 'google-analytics-for-wordpress' ) . ' ' . __( 'General Settings', 'google-analytics-for-wordpress' ), __( 'Analytics', 'google-analytics-for-wordpress' ), 'manage_options', 'yst_ga_dashboard', array(
|
139 |
$this,
|
140 |
'load_page',
|
141 |
+
), $icon_svg, $on_top ? '2.00013467543' : '100.00013467543' );
|
142 |
+
|
143 |
+
$this->add_submenu_pages();
|
144 |
+
}
|
145 |
+
|
146 |
+
/**
|
147 |
+
* Prepares an array that can be used to add a submenu page to the Google Analytics for Wordpress menu
|
148 |
+
*
|
149 |
+
* @param $submenu_name
|
150 |
+
* @param $font_color
|
151 |
+
*
|
152 |
+
* @return array
|
153 |
+
*/
|
154 |
+
private function prepare_submenu_page( $submenu_name, $font_color ) {
|
155 |
+
$menu_title = __( ucfirst( $submenu_name ), 'google-analytics-for-wordpress' );
|
156 |
+
if ( ! empty( $font_color ) ) {
|
157 |
+
$menu_title = __( '<span style="color:' . $font_color . '">' . $menu_title . '</span>', 'google-analytics-for-wordpress' );
|
158 |
+
}
|
159 |
+
|
160 |
+
$submenu_page = array(
|
161 |
+
'parent_slug' => 'yst_ga_dashboard',
|
162 |
+
'page_title' => __( 'Yoast Google Analytics:', 'google-analytics-for-wordpress' ) . ' ' . __( ucfirst( $submenu_name ), 'google-analytics-for-wordpress' ),
|
163 |
+
'menu_title' => $menu_title,
|
164 |
+
'capability' => 'manage_options',
|
165 |
+
'menu_slug' => 'yst_ga_' . $submenu_name,
|
166 |
+
'submenu_function' => array( $this, 'load_page' ),
|
|
|
|
|
|
|
|
|
|
|
167 |
);
|
168 |
|
169 |
+
return $submenu_page;
|
170 |
+
}
|
171 |
+
|
172 |
+
/**
|
173 |
+
* Adds a submenu page to the Google Analytics for WordPress menu
|
174 |
+
*
|
175 |
+
* @param $submenu_page
|
176 |
+
*/
|
177 |
+
private function add_submenu_page( $submenu_page ) {
|
178 |
+
$page = add_submenu_page( $submenu_page['parent_slug'], $submenu_page['page_title'], $submenu_page['menu_title'], $submenu_page['capability'], $submenu_page['menu_slug'], $submenu_page['submenu_function'] );
|
179 |
+
add_action( 'admin_print_styles-' . $page, array( $this, 'enqueue_styles' ) );
|
180 |
+
if ( 'yst_ga_settings' === $submenu_page['menu_slug'] || 'yst_ga_extensions' === $submenu_page['menu_slug'] ) {
|
181 |
+
add_action( 'admin_print_styles-' . $page, array( $this, 'enqueue_settings_styles' ) );
|
182 |
+
add_action( 'admin_print_scripts-' . $page, array( $this, 'enqueue_scripts' ) );
|
183 |
+
}
|
184 |
+
}
|
185 |
+
|
186 |
+
/**
|
187 |
+
* Prepares and adds submenu pages to the Google Analytics for Wordpress menu:
|
188 |
+
* - Dashboard
|
189 |
+
* - Settings
|
190 |
+
* - Extensions
|
191 |
+
*
|
192 |
+
* @return array
|
193 |
+
*/
|
194 |
+
private function add_submenu_pages() {
|
195 |
+
/**
|
196 |
+
* Array structure:
|
197 |
+
*
|
198 |
+
* array(
|
199 |
+
* $submenu_name => $font_color,
|
200 |
+
* ..,
|
201 |
+
* ..,
|
202 |
+
* )
|
203 |
+
*
|
204 |
+
* $font_color can be left empty.
|
205 |
+
*
|
206 |
+
*/
|
207 |
+
$submenu_types = array(
|
208 |
+
'dashboard' => '',
|
209 |
+
'settings' => '',
|
210 |
+
'extensions' => '#f18500',
|
211 |
+
);
|
212 |
+
|
213 |
+
foreach ( $submenu_types as $submenu_name => $font_color ) {
|
214 |
+
$submenu_page = $this->prepare_submenu_page( $submenu_name, $font_color );
|
215 |
+
$this->add_submenu_page( $submenu_page );
|
216 |
}
|
217 |
}
|
218 |
|
227 |
if ( ! defined( 'SCRIPT_DEBUG' ) || ! SCRIPT_DEBUG ) {
|
228 |
$ext = '.min' . $ext;
|
229 |
}
|
230 |
+
|
231 |
return $ext;
|
232 |
}
|
233 |
|
268 |
require_once( $this->plugin_path . 'admin/pages/settings.php' );
|
269 |
|
270 |
break;
|
271 |
+
case 'yst_ga_extensions':
|
272 |
require_once( $this->plugin_path . 'admin/pages/extensions.php' );
|
273 |
break;
|
274 |
case 'yst_ga_dashboard':
|
330 |
$id = str_replace( '[', '-', $name );
|
331 |
$id = str_replace( ']', '', $id );
|
332 |
|
333 |
+
// Catch a notice if the option doesn't exist, yet
|
334 |
+
if ( ! isset( $this->options[$name] ) ) {
|
335 |
+
$this->options[$name] = '';
|
336 |
+
}
|
337 |
+
|
338 |
$input .= '<div class="ga-form ga-form-input">';
|
339 |
if ( ! is_null( $title ) ) {
|
340 |
$input .= '<label class="ga-form ga-form-' . $type . '-label ga-form-label-left" id="yoast-ga-form-label-' . $type . '-' . $this->form_namespace . '-' . $id . '" />' . $title . ':</label>';
|
341 |
}
|
342 |
|
343 |
+
if ( $type == 'checkbox' && $this->options[$name] == 1 ) {
|
344 |
$input .= '<input type="' . $type . '" class="ga-form ga-form-checkbox" id="yoast-ga-form-' . $type . '-' . $this->form_namespace . '-' . $id . '" name="' . $name . '" value="1" checked="checked" />';
|
345 |
} elseif ( $type == 'checkbox' ) {
|
346 |
$input .= '<input type="' . $type . '" class="ga-form ga-form-checkbox" id="yoast-ga-form-' . $type . '-' . $this->form_namespace . '-' . $id . '" name="' . $name . '" value="1" />';
|
347 |
} else {
|
348 |
+
$input .= '<input type="' . $type . '" class="ga-form ga-form-' . $type . '" id="yoast-ga-form-' . $type . '-' . $this->form_namespace . '-' . $id . '" name="' . $name . '" value="' . stripslashes( $this->options[$name] ) . '" />';
|
349 |
}
|
350 |
|
351 |
if ( ! is_null( $text_label ) ) {
|
358 |
if ( ! is_null( $description ) ) {
|
359 |
$input .= '<div class="ga-form ga-form-input">';
|
360 |
$input .= '<label class="ga-form ga-form-select-label ga-form-label-left" id="yoast-ga-form-description-select-' . $this->form_namespace . '-' . $id . '" /> </label>';
|
361 |
+
$input .= '<span class="ga-form ga-form-description">' . $description . '</span>';
|
362 |
$input .= '</div>';
|
363 |
}
|
364 |
|
380 |
$select = null;
|
381 |
$id = str_replace( '[', '-', $name );
|
382 |
$id = str_replace( ']', '', $id );
|
383 |
+
|
384 |
+
// Catch a notice if the option doesn't exist, yet
|
385 |
+
if ( ! isset( $this->options[$name] ) ) {
|
386 |
+
$this->options[$name] = '';
|
387 |
+
}
|
388 |
+
|
389 |
$select .= '<div class="ga-form ga-form-input">';
|
390 |
if ( ! is_null( $title ) ) {
|
391 |
$select .= '<label class="ga-form ga-form-select-label ga-form-label-left" id="yoast-ga-form-label-select-' . $this->form_namespace . '-' . $id . '" />' . $title . ':</label>';
|
398 |
}
|
399 |
if ( count( $values ) >= 1 ) {
|
400 |
foreach ( $values as $value ) {
|
401 |
+
if ( is_array( $this->options[$name] ) ) {
|
402 |
+
if ( in_array( $value['id'], $this->options[$name] ) ) {
|
403 |
$select .= '<option value="' . $value['id'] . '" selected="selected">' . stripslashes( $value['name'] ) . '</option>';
|
404 |
} else {
|
405 |
$select .= '<option value="' . $value['id'] . '">' . stripslashes( $value['name'] ) . '</option>';
|
406 |
}
|
407 |
} else {
|
408 |
+
$select .= '<option value="' . $value['id'] . '" ' . selected( $this->options[$name], $value['id'], false ) . '>' . stripslashes( $value['name'] ) . '</option>';
|
409 |
}
|
410 |
}
|
411 |
}
|
435 |
public function textarea( $title, $name, $description = null ) {
|
436 |
$text = null;
|
437 |
$id = $this->option_prefix . '_' . $name;
|
438 |
+
|
439 |
+
// Catch a notice if the option doesn't exist, yet
|
440 |
+
if ( ! isset( $this->options[$name] ) ) {
|
441 |
+
$this->options[$name] = '';
|
442 |
+
}
|
443 |
+
|
444 |
$text .= '<div class="ga-form ga-form-input">';
|
445 |
if ( ! is_null( $title ) ) {
|
446 |
$text .= '<label class="ga-form ga-form-select-label ga-form-label-left" id="yoast-ga-form-label-select-' . $this->form_namespace . '-' . $id . '" />' . __( $title, 'google-analytics-for-wordpress' ) . ':</label>';
|
447 |
}
|
448 |
+
$text .= '<textarea rows="5" cols="60" name="' . $name . '" id="yoast-ga-form-textarea-' . $this->form_namespace . '-' . $id . '">' . stripslashes( $this->options[$name] ) . '</textarea>';
|
449 |
$text .= '</div>';
|
450 |
|
451 |
// If we get a description, append it to this select field in a new row
|
465 |
* @return array
|
466 |
*/
|
467 |
public function get_profiles() {
|
468 |
+
$return = array();
|
469 |
+
$google_analytics = Yoast_Google_Analytics::instance();
|
470 |
+
if ( $google_analytics->has_token() ) {
|
471 |
+
$return = $google_analytics->get_profiles();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
472 |
}
|
473 |
|
474 |
return $return;
|
475 |
}
|
476 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
477 |
|
478 |
/**
|
479 |
* Checks if there is a callback or reauth to get token from Google Analytics api
|
480 |
*/
|
481 |
private function connect_with_google_analytics() {
|
482 |
|
|
|
|
|
483 |
if ( isset( $_REQUEST['ga_oauth_callback'] ) ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
484 |
|
485 |
+
Yoast_Google_Analytics::instance()->authenticate( $_REQUEST['oauth_token'], $_REQUEST['oauth_verifier'] );
|
486 |
|
487 |
wp_redirect( menu_page_url( 'yst_ga_settings', false ) );
|
488 |
exit;
|
489 |
}
|
490 |
|
491 |
if ( ! empty ( $_GET['reauth'] ) ) {
|
492 |
+
$authorize_url = Yoast_Google_Analytics::instance()->authenticate();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
493 |
|
494 |
+
wp_redirect( $authorize_url );
|
495 |
exit;
|
496 |
}
|
497 |
}
|
504 |
public function get_userroles() {
|
505 |
global $wp_roles;
|
506 |
|
507 |
+
$all_roles = $wp_roles->roles;
|
508 |
+
$roles = array();
|
509 |
|
510 |
/**
|
511 |
* Filter: 'editable_roles' - Allows filtering of the roles shown within the plugin (and elsewhere in WP as it's a WP filter)
|
admin/class-google-analytics.php
ADDED
@@ -0,0 +1,350 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
|
4 |
+
if ( ! class_exists( 'Yoast_Google_Analytics', false ) ) {
|
5 |
+
|
6 |
+
class Yoast_Google_Analytics {
|
7 |
+
|
8 |
+
private $access_token;
|
9 |
+
private $secret;
|
10 |
+
|
11 |
+
private $option_name = 'yst_ga_api';
|
12 |
+
private $options = array();
|
13 |
+
|
14 |
+
private static $instance = null;
|
15 |
+
|
16 |
+
public function __construct() {
|
17 |
+
|
18 |
+
if ( is_null( self::$instance ) ) {
|
19 |
+
self::$instance = $this;
|
20 |
+
}
|
21 |
+
|
22 |
+
$this->options = $this->get_options();
|
23 |
+
|
24 |
+
if ( $this->has_token() ) {
|
25 |
+
$this->set_access_token();
|
26 |
+
$this->set_secret();
|
27 |
+
}
|
28 |
+
}
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Getting the instance object
|
32 |
+
*
|
33 |
+
* This method will return the instance of itself, if instance not exists, becauses of it's called for the first
|
34 |
+
* time, the instance will be created.
|
35 |
+
*
|
36 |
+
* @return null|Yoast_Google_Analytics
|
37 |
+
*/
|
38 |
+
public static function instance() {
|
39 |
+
if ( is_null( self::$instance ) ) {
|
40 |
+
self::$instance = new self();
|
41 |
+
}
|
42 |
+
|
43 |
+
return self::$instance;
|
44 |
+
}
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Is there a token set
|
48 |
+
*
|
49 |
+
* Checks in options whether there is a token set or not. Will return true if token is set
|
50 |
+
*
|
51 |
+
* @return bool
|
52 |
+
*/
|
53 |
+
public function has_token() {
|
54 |
+
return ! empty( $this->options['ga_token'] );
|
55 |
+
}
|
56 |
+
|
57 |
+
/**
|
58 |
+
* Connect with google analytics
|
59 |
+
*
|
60 |
+
* @param bool $token
|
61 |
+
* @param bool $verifier
|
62 |
+
*
|
63 |
+
* @return string
|
64 |
+
*/
|
65 |
+
public function authenticate( $token = false, $verifier = false ) {
|
66 |
+
|
67 |
+
if ( ! empty( $token ) && ! empty ( $verifier ) ) {
|
68 |
+
if ( isset( $this->options['ga_oauth']['oauth_token'] ) && $this->options['ga_oauth']['oauth_token'] == $token ) {
|
69 |
+
$this->get_access_token( $verifier );
|
70 |
+
}
|
71 |
+
} else {
|
72 |
+
$authorize_url = $this->get_authorize_url();
|
73 |
+
|
74 |
+
return $authorize_url;
|
75 |
+
}
|
76 |
+
|
77 |
+
}
|
78 |
+
|
79 |
+
/**
|
80 |
+
* Getting the analytics profiles
|
81 |
+
*
|
82 |
+
* Doing the request to the Google analytics API and if there is a response, parses this response and return its
|
83 |
+
* array
|
84 |
+
*
|
85 |
+
* @return array
|
86 |
+
*/
|
87 |
+
public function get_profiles() {
|
88 |
+
|
89 |
+
$return = array();
|
90 |
+
$response = $this->do_request( 'https://www.googleapis.com/analytics/v2.4/management/accounts/~all/webproperties/~all/profiles', 'https://www.googleapis.com/auth/analytics.readonly' );
|
91 |
+
|
92 |
+
if ( $response ) {
|
93 |
+
$this->save_profile_response( $response );
|
94 |
+
|
95 |
+
$return = $this->parse_profile_response( $response );
|
96 |
+
}
|
97 |
+
|
98 |
+
return $return;
|
99 |
+
}
|
100 |
+
|
101 |
+
/**
|
102 |
+
* Getting a access token
|
103 |
+
*
|
104 |
+
* With this token a reconnection to Google Analytics is possible
|
105 |
+
*
|
106 |
+
* @param string $verifier
|
107 |
+
*/
|
108 |
+
protected function get_access_token( $verifier ) {
|
109 |
+
$gdata = $this->get_gdata(
|
110 |
+
'https://www.google.com/analytics/feeds/',
|
111 |
+
$this->options['ga_oauth']['oauth_token'],
|
112 |
+
$this->options['ga_oauth']['oauth_token_secret']
|
113 |
+
);
|
114 |
+
|
115 |
+
$access_token = $gdata->get_access_token( $verifier );
|
116 |
+
|
117 |
+
$this->options['ga_oauth']['access_token'] = $access_token;
|
118 |
+
$this->options['ga_token'] = $access_token['oauth_token'];
|
119 |
+
|
120 |
+
unset( $this->options['ga_oauth']['oauth_token'] );
|
121 |
+
unset( $this->options['ga_oauth']['oauth_token_secret'] );
|
122 |
+
|
123 |
+
$this->update_options();
|
124 |
+
}
|
125 |
+
|
126 |
+
/**
|
127 |
+
* Getting the URL to authenticate the use
|
128 |
+
*
|
129 |
+
* @return string
|
130 |
+
*/
|
131 |
+
protected function get_authorize_url() {
|
132 |
+
$gdata = $this->get_gdata( 'https://www.google.com/analytics/feeds/' );
|
133 |
+
$request_token = $this->get_request_token( $gdata );
|
134 |
+
|
135 |
+
if ( is_array( $this->options ) ) {
|
136 |
+
unset( $this->options['ga_token'] );
|
137 |
+
if ( is_array( $this->options['ga_oauth'] ) ) {
|
138 |
+
unset( $this->options['ga_oauth']['access_token'] );
|
139 |
+
}
|
140 |
+
}
|
141 |
+
|
142 |
+
$this->options['ga_oauth']['oauth_token'] = $request_token['oauth_token'];
|
143 |
+
$this->options['ga_oauth']['oauth_token_secret'] = $request_token['oauth_token_secret'];
|
144 |
+
|
145 |
+
$this->update_options();
|
146 |
+
|
147 |
+
return $gdata->get_authorize_url( $request_token );
|
148 |
+
}
|
149 |
+
|
150 |
+
/**
|
151 |
+
* Get the request token from Google Analytics
|
152 |
+
*
|
153 |
+
* @param WP_Gdata $gdata
|
154 |
+
*
|
155 |
+
* @return array
|
156 |
+
*/
|
157 |
+
protected function get_request_token( $gdata ) {
|
158 |
+
$oauth_callback = add_query_arg( array( 'ga_oauth_callback' => 1 ), menu_page_url( 'yst_ga_settings', false ) );
|
159 |
+
$request_token = $gdata->get_request_token( $oauth_callback );
|
160 |
+
|
161 |
+
return $request_token;
|
162 |
+
}
|
163 |
+
|
164 |
+
/**
|
165 |
+
* Doing request to Google Analytics
|
166 |
+
*
|
167 |
+
* This method will do a request to google and get the response code and body from content
|
168 |
+
*
|
169 |
+
* @param string $target_url
|
170 |
+
* @param string $scope
|
171 |
+
*
|
172 |
+
* @return array|null
|
173 |
+
*/
|
174 |
+
protected function do_request( $target_url, $scope ) {
|
175 |
+
$gdata = $this->get_gdata( $scope, $this->access_token, $this->secret );
|
176 |
+
$response = $gdata->get( $target_url );
|
177 |
+
$http_code = wp_remote_retrieve_response_code( $response );
|
178 |
+
$response = wp_remote_retrieve_body( $response );
|
179 |
+
|
180 |
+
if ( $http_code == 200 ) {
|
181 |
+
return array(
|
182 |
+
'response' => array( 'code' => $http_code ),
|
183 |
+
'body' => $response,
|
184 |
+
);
|
185 |
+
}
|
186 |
+
}
|
187 |
+
|
188 |
+
/**
|
189 |
+
* Getting WP_GData object
|
190 |
+
*
|
191 |
+
* If not available include class file and create an instance of WP_GDAta
|
192 |
+
*
|
193 |
+
* @param string $scope
|
194 |
+
* @param null $token
|
195 |
+
* @param null $secret
|
196 |
+
*
|
197 |
+
* @return WP_GData
|
198 |
+
*/
|
199 |
+
protected function get_gdata( $scope, $token = null, $secret = null ) {
|
200 |
+
if ( ! class_exists( 'WP_Gdata', false ) ) {
|
201 |
+
require_once 'wp-gdata/wp-gdata.php';
|
202 |
+
}
|
203 |
+
|
204 |
+
$args = array(
|
205 |
+
'scope' => $scope,
|
206 |
+
'xoauth_displayname' => 'Google Analytics by Yoast',
|
207 |
+
);
|
208 |
+
|
209 |
+
$gdata = new WP_GData( $args, $token, $secret );
|
210 |
+
|
211 |
+
return $gdata;
|
212 |
+
}
|
213 |
+
|
214 |
+
/**
|
215 |
+
* Saving profile response in options
|
216 |
+
*
|
217 |
+
* @param $response
|
218 |
+
*/
|
219 |
+
protected function save_profile_response( $response ) {
|
220 |
+
$this->options['ga_api_response'] = $response;
|
221 |
+
$this->update_options();
|
222 |
+
}
|
223 |
+
|
224 |
+
/**
|
225 |
+
* Parsing the profile response
|
226 |
+
*
|
227 |
+
* Create XML_Reader for the response. Check if there are entries available. Check which link is used and parsing the entries.
|
228 |
+
* If there are entries parse, then sort them and rebuild array
|
229 |
+
*
|
230 |
+
* @return array
|
231 |
+
*/
|
232 |
+
protected function parse_profile_response() {
|
233 |
+
$return = array();
|
234 |
+
|
235 |
+
try {
|
236 |
+
$xml_reader = new SimpleXMLElement( $this->options['ga_api_response']['body'] );
|
237 |
+
|
238 |
+
if ( ! empty( $xml_reader->entry ) ) {
|
239 |
+
|
240 |
+
$ga_accounts = array();
|
241 |
+
|
242 |
+
// Check whether the feed output is the new one, first set, or the old one, second set.
|
243 |
+
if ( $xml_reader->link['href'] == 'https://www.googleapis.com/analytics/v2.4/management/accounts/~all/webproperties/~all/profiles' ) {
|
244 |
+
$ga_accounts = $this->parse_entries( $xml_reader->entry, 1, 2 );
|
245 |
+
} elseif ( $xml_reader->link['href'] == 'https://www.google.com/analytics/feeds/accounts/default' ) {
|
246 |
+
$ga_accounts = $this->parse_entries( $xml_reader->entry, 3, 2 );
|
247 |
+
}
|
248 |
+
|
249 |
+
if ( is_array( $ga_accounts ) ) {
|
250 |
+
usort( $ga_accounts, array( $this, 'sort_profiles' ) );
|
251 |
+
}
|
252 |
+
|
253 |
+
foreach ( $ga_accounts as $key => $ga_account ) {
|
254 |
+
$return[] = array(
|
255 |
+
'id' => $ga_account['ua'],
|
256 |
+
'name' => $ga_account['title'] . ' (' . $ga_account['ua'] . ')',
|
257 |
+
);
|
258 |
+
}
|
259 |
+
}
|
260 |
+
} catch ( Exception $e ) {
|
261 |
+
|
262 |
+
}
|
263 |
+
|
264 |
+
return $return;
|
265 |
+
|
266 |
+
}
|
267 |
+
|
268 |
+
/**
|
269 |
+
* Sorting the array in alphabetic order
|
270 |
+
*
|
271 |
+
* @param string $a
|
272 |
+
* @param string $b
|
273 |
+
*
|
274 |
+
* @return int
|
275 |
+
*/
|
276 |
+
protected function sort_profiles( $a, $b ) {
|
277 |
+
return strcmp( $a['title'], $b['title'] );
|
278 |
+
}
|
279 |
+
|
280 |
+
|
281 |
+
/**
|
282 |
+
* Parses the entries
|
283 |
+
*
|
284 |
+
* The keys can be different for some types of responses, so there are two params which defines the target keys
|
285 |
+
*
|
286 |
+
* @param SimpleXMLElement $entries
|
287 |
+
* @param integer $ua_key
|
288 |
+
* @param integer $title_key
|
289 |
+
*
|
290 |
+
* @return array
|
291 |
+
*/
|
292 |
+
protected function parse_entries( $entries, $ua_key, $title_key ) {
|
293 |
+
$return = array();
|
294 |
+
|
295 |
+
foreach ( $entries AS $entry ) {
|
296 |
+
$ns = $entry->getNamespaces( true );
|
297 |
+
$properties = $entry->children( $ns['dxp'] )->property;
|
298 |
+
|
299 |
+
if ( isset ( $properties[$ua_key]->attributes()->value ) ) {
|
300 |
+
$ua = (string) trim( $properties[$ua_key]->attributes()->value );
|
301 |
+
}
|
302 |
+
|
303 |
+
if ( isset ( $properties[$title_key]->attributes()->value ) ) {
|
304 |
+
$title = (string) trim( $properties[$title_key]->attributes()->value );
|
305 |
+
}
|
306 |
+
|
307 |
+
if ( ! empty( $ua ) && ! empty( $title ) ) {
|
308 |
+
$return[] = array(
|
309 |
+
'ua' => $ua,
|
310 |
+
'title' => $title,
|
311 |
+
);
|
312 |
+
}
|
313 |
+
}
|
314 |
+
|
315 |
+
return $return;
|
316 |
+
}
|
317 |
+
|
318 |
+
/**
|
319 |
+
* Setting the token for Google Analytics api
|
320 |
+
*/
|
321 |
+
protected function set_access_token() {
|
322 |
+
$this->access_token = $this->options['ga_oauth']['access_token']['oauth_token'];
|
323 |
+
}
|
324 |
+
|
325 |
+
/**
|
326 |
+
* Setting the token secret for Google Analytics API
|
327 |
+
*/
|
328 |
+
protected function set_secret() {
|
329 |
+
$this->secret = $this->options['ga_oauth']['access_token']['oauth_token_secret'];
|
330 |
+
}
|
331 |
+
|
332 |
+
/**
|
333 |
+
* Getting the options bases on $this->option_name from the database
|
334 |
+
*
|
335 |
+
* @return mixed
|
336 |
+
*/
|
337 |
+
protected function get_options() {
|
338 |
+
return get_option( $this->option_name );
|
339 |
+
}
|
340 |
+
|
341 |
+
/**
|
342 |
+
* Updating the options based on $this->option_name and the internal property $this->options
|
343 |
+
*/
|
344 |
+
protected function update_options() {
|
345 |
+
update_option( $this->option_name, $this->options );
|
346 |
+
}
|
347 |
+
|
348 |
+
}
|
349 |
+
|
350 |
+
}
|
admin/pages/settings.php
CHANGED
@@ -90,6 +90,8 @@ echo $yoast_ga_admin->create_form( 'settings' );
|
|
90 |
echo $yoast_ga_admin->input( 'checkbox', __( 'Allow anchor', 'google-analytics-for-wordpress' ), 'allow_anchor', null, __( 'This adds a <code><a href="http://code.google.com/apis/analytics/docs/gaJSApiCampaignTracking.html#_gat.GA_Tracker_._setAllowAnchor" target="_blank">_setAllowAnchor</a></code> call to your tracking code, and makes RSS link tagging use a # as well.', 'google-analytics-for-wordpress' ) );
|
91 |
echo $yoast_ga_admin->input( 'checkbox', __( 'Add <code>_setAllowLinker</code>', 'google-analytics-for-wordpress' ), 'add_allow_linker', null, __( 'This adds a <code><a href="http://code.google.com/apis/analytics/docs/gaJS/gaJSApiDomainDirectory.html#_gat.GA_Tracker_._setAllowLinker" target="_blank">_setAllowLinker</a></code> call to your tracking code, allowing you to use <code>_link</code> and related functions.', 'google-analytics-for-wordpress' ) );
|
92 |
echo $yoast_ga_admin->textarea( 'Custom code', 'custom_code', __( 'Not for the average user: this allows you to add a line of code, to be added before the <code>trackPageview</code> call.', 'google-analytics-for-wordpress' ) );
|
|
|
|
|
93 |
?>
|
94 |
</div>
|
95 |
<div id="debugmode" class="gatab">
|
90 |
echo $yoast_ga_admin->input( 'checkbox', __( 'Allow anchor', 'google-analytics-for-wordpress' ), 'allow_anchor', null, __( 'This adds a <code><a href="http://code.google.com/apis/analytics/docs/gaJSApiCampaignTracking.html#_gat.GA_Tracker_._setAllowAnchor" target="_blank">_setAllowAnchor</a></code> call to your tracking code, and makes RSS link tagging use a # as well.', 'google-analytics-for-wordpress' ) );
|
91 |
echo $yoast_ga_admin->input( 'checkbox', __( 'Add <code>_setAllowLinker</code>', 'google-analytics-for-wordpress' ), 'add_allow_linker', null, __( 'This adds a <code><a href="http://code.google.com/apis/analytics/docs/gaJS/gaJSApiDomainDirectory.html#_gat.GA_Tracker_._setAllowLinker" target="_blank">_setAllowLinker</a></code> call to your tracking code, allowing you to use <code>_link</code> and related functions.', 'google-analytics-for-wordpress' ) );
|
92 |
echo $yoast_ga_admin->textarea( 'Custom code', 'custom_code', __( 'Not for the average user: this allows you to add a line of code, to be added before the <code>trackPageview</code> call.', 'google-analytics-for-wordpress' ) );
|
93 |
+
|
94 |
+
do_action( 'yst_ga_advanced-tab' );
|
95 |
?>
|
96 |
</div>
|
97 |
<div id="debugmode" class="gatab">
|
frontend/class-frontend.php
CHANGED
@@ -58,7 +58,7 @@ if ( ! class_exists( 'Yoast_GA_Frontend' ) ) {
|
|
58 |
* @return array|bool
|
59 |
*/
|
60 |
public function yoast_ga_get_domain( $uri ) {
|
61 |
-
$hostPattern = '/^(
|
62 |
$domainPatternUS = '/[^\.\/]+\.[^\.\/]+$/';
|
63 |
$domainPatternUK = '/[^\.\/]+\.[^\.\/]+\.[^\.\/]+$/';
|
64 |
|
58 |
* @return array|bool
|
59 |
*/
|
60 |
public function yoast_ga_get_domain( $uri ) {
|
61 |
+
$hostPattern = '/^(https?:\/\/)?([^\/]+)/i';
|
62 |
$domainPatternUS = '/[^\.\/]+\.[^\.\/]+$/';
|
63 |
$domainPatternUK = '/[^\.\/]+\.[^\.\/]+\.[^\.\/]+$/';
|
64 |
|
frontend/class-ga-js.php
CHANGED
@@ -27,14 +27,17 @@ if ( ! class_exists( 'Yoast_GA_JS' ) ) {
|
|
27 |
/**
|
28 |
* Function to output the GA Tracking code in the wp_head()
|
29 |
*
|
30 |
-
* @
|
31 |
*/
|
32 |
-
public function tracking() {
|
33 |
global $wp_query;
|
34 |
|
35 |
if ( parent::do_tracking() && ! is_preview() ) {
|
36 |
$gaq_push = array();
|
37 |
|
|
|
|
|
|
|
38 |
if ( isset( $this->options['subdomain_tracking'] ) && $this->options['subdomain_tracking'] != '' ) {
|
39 |
$domain = $this->options['subdomain_tracking'];
|
40 |
} else {
|
@@ -46,7 +49,7 @@ if ( ! class_exists( 'Yoast_GA_JS' ) ) {
|
|
46 |
}
|
47 |
|
48 |
$ua_code = $this->get_tracking_code();
|
49 |
-
if ( is_null( $ua_code ) ) {
|
50 |
return;
|
51 |
}
|
52 |
|
@@ -56,7 +59,7 @@ if ( ! class_exists( 'Yoast_GA_JS' ) ) {
|
|
56 |
$gaq_push[] = "'_setDomainName', '" . $domain . "'";
|
57 |
}
|
58 |
|
59 |
-
if ( $this->options['allowanchor'] ) {
|
60 |
$gaq_push[] = "'_setAllowAnchor', true";
|
61 |
}
|
62 |
|
@@ -73,7 +76,7 @@ if ( ! class_exists( 'Yoast_GA_JS' ) ) {
|
|
73 |
// Add custom code to the view
|
74 |
$gaq_push[] = array(
|
75 |
'type' => 'custom_code',
|
76 |
-
'value' => $this->options['custom_code'],
|
77 |
);
|
78 |
}
|
79 |
|
@@ -87,7 +90,7 @@ if ( ! class_exists( 'Yoast_GA_JS' ) ) {
|
|
87 |
}
|
88 |
|
89 |
if ( is_404() ) {
|
90 |
-
$gaq_push[] = "'_trackPageview,'/404.html?page=' + document.location.pathname + document.location.search + '&from=' + document.referrer";
|
91 |
} else {
|
92 |
if ( $wp_query->is_search ) {
|
93 |
$pushstr = "'_trackPageview','/?s=";
|
@@ -114,10 +117,15 @@ if ( ! class_exists( 'Yoast_GA_JS' ) ) {
|
|
114 |
*
|
115 |
* @api array $gaq_push
|
116 |
*/
|
|
|
|
|
|
|
|
|
117 |
$gaq_push = apply_filters( 'yoast-ga-push-array-ga-js', $gaq_push );
|
118 |
|
119 |
$ga_settings = $this->options; // Assign the settings to the javascript include view
|
120 |
|
|
|
121 |
// Include the tracking view
|
122 |
if ( $this->options['debug_mode'] == 1 ) {
|
123 |
require( 'views/tracking-debug.php' );
|
@@ -312,4 +320,4 @@ if ( ! class_exists( 'Yoast_GA_JS' ) ) {
|
|
312 |
|
313 |
global $yoast_ga_js;
|
314 |
$yoast_ga_js = new Yoast_GA_JS;
|
315 |
-
}
|
27 |
/**
|
28 |
* Function to output the GA Tracking code in the wp_head()
|
29 |
*
|
30 |
+
* @param bool $return_array
|
31 |
*/
|
32 |
+
public function tracking( $return_array = false ) {
|
33 |
global $wp_query;
|
34 |
|
35 |
if ( parent::do_tracking() && ! is_preview() ) {
|
36 |
$gaq_push = array();
|
37 |
|
38 |
+
// Running action for adding possible code
|
39 |
+
do_action( 'yst_tracking' );
|
40 |
+
|
41 |
if ( isset( $this->options['subdomain_tracking'] ) && $this->options['subdomain_tracking'] != '' ) {
|
42 |
$domain = $this->options['subdomain_tracking'];
|
43 |
} else {
|
49 |
}
|
50 |
|
51 |
$ua_code = $this->get_tracking_code();
|
52 |
+
if ( is_null( $ua_code ) && $return_array == false ) {
|
53 |
return;
|
54 |
}
|
55 |
|
59 |
$gaq_push[] = "'_setDomainName', '" . $domain . "'";
|
60 |
}
|
61 |
|
62 |
+
if ( isset( $this->options['allowanchor'] ) && $this->options['allowanchor'] ) {
|
63 |
$gaq_push[] = "'_setAllowAnchor', true";
|
64 |
}
|
65 |
|
76 |
// Add custom code to the view
|
77 |
$gaq_push[] = array(
|
78 |
'type' => 'custom_code',
|
79 |
+
'value' => stripslashes( $this->options['custom_code'] ),
|
80 |
);
|
81 |
}
|
82 |
|
90 |
}
|
91 |
|
92 |
if ( is_404() ) {
|
93 |
+
$gaq_push[] = "'_trackPageview','/404.html?page=' + document.location.pathname + document.location.search + '&from=' + document.referrer";
|
94 |
} else {
|
95 |
if ( $wp_query->is_search ) {
|
96 |
$pushstr = "'_trackPageview','/?s=";
|
117 |
*
|
118 |
* @api array $gaq_push
|
119 |
*/
|
120 |
+
if ( true == $return_array ) {
|
121 |
+
return $gaq_push;
|
122 |
+
}
|
123 |
+
|
124 |
$gaq_push = apply_filters( 'yoast-ga-push-array-ga-js', $gaq_push );
|
125 |
|
126 |
$ga_settings = $this->options; // Assign the settings to the javascript include view
|
127 |
|
128 |
+
|
129 |
// Include the tracking view
|
130 |
if ( $this->options['debug_mode'] == 1 ) {
|
131 |
require( 'views/tracking-debug.php' );
|
320 |
|
321 |
global $yoast_ga_js;
|
322 |
$yoast_ga_js = new Yoast_GA_JS;
|
323 |
+
}
|
frontend/class-universal.php
CHANGED
@@ -29,12 +29,15 @@ if ( ! class_exists( 'Yoast_GA_Universal' ) ) {
|
|
29 |
*
|
30 |
* @todo, add the tracking code and remove this test output
|
31 |
*/
|
32 |
-
public function tracking() {
|
33 |
global $wp_query;
|
34 |
|
35 |
if ( $this->do_tracking() && ! is_preview() ) {
|
36 |
$gaq_push = array();
|
37 |
|
|
|
|
|
|
|
38 |
if ( isset( $this->options['subdomain_tracking'] ) && $this->options['subdomain_tracking'] != '' ) {
|
39 |
$domain = $this->options['subdomain_tracking'];
|
40 |
} else {
|
@@ -46,19 +49,19 @@ if ( ! class_exists( 'Yoast_GA_Universal' ) ) {
|
|
46 |
}
|
47 |
|
48 |
$ua_code = $this->get_tracking_code();
|
49 |
-
if ( is_null( $ua_code ) ) {
|
50 |
return;
|
51 |
}
|
52 |
|
53 |
// Set tracking code here
|
54 |
if ( ! empty( $ua_code ) ) {
|
55 |
-
if ( $this->options['add_allow_linker'] && ! $this->options['
|
56 |
$gaq_push[] = "'create', '" . $ua_code . "', '" . $domain . "', {'allowLinker': true}";
|
57 |
} else {
|
58 |
-
if ( $this->options['
|
59 |
$gaq_push[] = "'create', '" . $ua_code . "', '" . $domain . "', {'allowAnchor': true}";
|
60 |
} else {
|
61 |
-
if ( $this->options['
|
62 |
$gaq_push[] = "'create', '" . $ua_code . "', '" . $domain . "', {'allowAnchor': true, 'allowLinker': true}";
|
63 |
} else {
|
64 |
$gaq_push[] = "'create', '" . $ua_code . "', '" . $domain . "'";
|
@@ -73,7 +76,7 @@ if ( ! class_exists( 'Yoast_GA_Universal' ) ) {
|
|
73 |
// Add custom code to the view
|
74 |
$gaq_push[] = array(
|
75 |
'type' => 'custom_code',
|
76 |
-
'value' => $this->options['custom_code'],
|
77 |
);
|
78 |
}
|
79 |
|
@@ -119,6 +122,10 @@ if ( ! class_exists( 'Yoast_GA_Universal' ) ) {
|
|
119 |
*
|
120 |
* @api array $gaq_push
|
121 |
*/
|
|
|
|
|
|
|
|
|
122 |
$gaq_push = apply_filters( 'yoast-ga-push-array-universal', $gaq_push );
|
123 |
|
124 |
$ga_settings = $this->options; // Assign the settings to the javascript include view
|
29 |
*
|
30 |
* @todo, add the tracking code and remove this test output
|
31 |
*/
|
32 |
+
public function tracking( $return_array = false ) {
|
33 |
global $wp_query;
|
34 |
|
35 |
if ( $this->do_tracking() && ! is_preview() ) {
|
36 |
$gaq_push = array();
|
37 |
|
38 |
+
// Running action for adding possible code
|
39 |
+
do_action( 'yst_tracking' );
|
40 |
+
|
41 |
if ( isset( $this->options['subdomain_tracking'] ) && $this->options['subdomain_tracking'] != '' ) {
|
42 |
$domain = $this->options['subdomain_tracking'];
|
43 |
} else {
|
49 |
}
|
50 |
|
51 |
$ua_code = $this->get_tracking_code();
|
52 |
+
if ( is_null( $ua_code ) && $return_array == false ) {
|
53 |
return;
|
54 |
}
|
55 |
|
56 |
// Set tracking code here
|
57 |
if ( ! empty( $ua_code ) ) {
|
58 |
+
if ( $this->options['add_allow_linker'] && ! $this->options['allow_anchor'] ) {
|
59 |
$gaq_push[] = "'create', '" . $ua_code . "', '" . $domain . "', {'allowLinker': true}";
|
60 |
} else {
|
61 |
+
if ( $this->options['allow_anchor'] && ! $this->options['add_allow_linker'] ) {
|
62 |
$gaq_push[] = "'create', '" . $ua_code . "', '" . $domain . "', {'allowAnchor': true}";
|
63 |
} else {
|
64 |
+
if ( $this->options['allow_anchor'] && $this->options['add_allow_linker'] ) {
|
65 |
$gaq_push[] = "'create', '" . $ua_code . "', '" . $domain . "', {'allowAnchor': true, 'allowLinker': true}";
|
66 |
} else {
|
67 |
$gaq_push[] = "'create', '" . $ua_code . "', '" . $domain . "'";
|
76 |
// Add custom code to the view
|
77 |
$gaq_push[] = array(
|
78 |
'type' => 'custom_code',
|
79 |
+
'value' => stripslashes( $this->options['custom_code'] ),
|
80 |
);
|
81 |
}
|
82 |
|
122 |
*
|
123 |
* @api array $gaq_push
|
124 |
*/
|
125 |
+
if ( true == $return_array ) {
|
126 |
+
return $gaq_push;
|
127 |
+
}
|
128 |
+
|
129 |
$gaq_push = apply_filters( 'yoast-ga-push-array-universal', $gaq_push );
|
130 |
|
131 |
$ga_settings = $this->options; // Assign the settings to the javascript include view
|
googleanalytics.php
CHANGED
@@ -4,7 +4,7 @@ Plugin Name: Google Analytics by Yoast
|
|
4 |
Plugin URI: https://yoast.com/wordpress/plugins/google-analytics/#utm_source=wordpress&utm_medium=plugin&utm_campaign=wpgaplugin&utm_content=v504
|
5 |
Description: This plugin makes it simple to add Google Analytics to your WordPress blog, adding lots of features, eg. error page, search result and automatic clickout and download tracking.
|
6 |
Author: Team Yoast
|
7 |
-
Version: 5.0.
|
8 |
Requires at least: 3.8
|
9 |
Author URI: https://yoast.com/
|
10 |
License: GPL v3
|
@@ -30,7 +30,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
30 |
|
31 |
// This plugin was originally based on Rich Boakes' Analytics plugin: http://boakes.org/analytics, but has since been rewritten and refactored multiple times.
|
32 |
|
33 |
-
define( 'GAWP_VERSION', '5.0.
|
34 |
|
35 |
define( 'GAWP_FILE', __FILE__ );
|
36 |
|
4 |
Plugin URI: https://yoast.com/wordpress/plugins/google-analytics/#utm_source=wordpress&utm_medium=plugin&utm_campaign=wpgaplugin&utm_content=v504
|
5 |
Description: This plugin makes it simple to add Google Analytics to your WordPress blog, adding lots of features, eg. error page, search result and automatic clickout and download tracking.
|
6 |
Author: Team Yoast
|
7 |
+
Version: 5.0.7
|
8 |
Requires at least: 3.8
|
9 |
Author URI: https://yoast.com/
|
10 |
License: GPL v3
|
30 |
|
31 |
// This plugin was originally based on Rich Boakes' Analytics plugin: http://boakes.org/analytics, but has since been rewritten and refactored multiple times.
|
32 |
|
33 |
+
define( 'GAWP_VERSION', '5.0.7' );
|
34 |
|
35 |
define( 'GAWP_FILE', __FILE__ );
|
36 |
|
includes/class-options.php
CHANGED
@@ -34,11 +34,34 @@ if ( ! class_exists( 'Yoast_GA_Options' ) ) {
|
|
34 |
*/
|
35 |
public $plugin_url;
|
36 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
37 |
/**
|
38 |
* Constructor for the options
|
39 |
*/
|
40 |
public function __construct() {
|
41 |
$this->options = $this->get_options();
|
|
|
42 |
|
43 |
$this->plugin_path = plugin_dir_path( GAWP_FILE );
|
44 |
$this->plugin_url = trailingslashit( plugin_dir_url( GAWP_FILE ) );
|
@@ -51,6 +74,11 @@ if ( ! class_exists( 'Yoast_GA_Options' ) ) {
|
|
51 |
if ( ! isset( $this->options['version'] ) || $this->options['version'] < GAWP_VERSION ) {
|
52 |
$this->upgrade();
|
53 |
}
|
|
|
|
|
|
|
|
|
|
|
54 |
}
|
55 |
|
56 |
/**
|
@@ -61,8 +89,8 @@ if ( ! class_exists( 'Yoast_GA_Options' ) ) {
|
|
61 |
* @return bool
|
62 |
*/
|
63 |
public function update_option( $val ) {
|
64 |
-
$options
|
65 |
-
$options[
|
66 |
|
67 |
return update_option( $this->option_name, $options );
|
68 |
}
|
@@ -75,7 +103,32 @@ if ( ! class_exists( 'Yoast_GA_Options' ) ) {
|
|
75 |
public function get_options() {
|
76 |
$options = get_option( $this->option_name );
|
77 |
|
78 |
-
return $options[
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
79 |
}
|
80 |
|
81 |
/**
|
@@ -85,6 +138,7 @@ if ( ! class_exists( 'Yoast_GA_Options' ) ) {
|
|
85 |
*/
|
86 |
public function get_tracking_code() {
|
87 |
$tracking_code = null;
|
|
|
88 |
|
89 |
if ( ! empty( $this->options['analytics_profile'] ) ) {
|
90 |
$tracking_code = $this->options['analytics_profile'];
|
@@ -129,7 +183,7 @@ if ( ! class_exists( 'Yoast_GA_Options' ) ) {
|
|
129 |
|
130 |
// 5.0.0 to 5.0.1 fix of ignore users array
|
131 |
if ( ! isset( $this->options['version'] ) || version_compare( $this->options['version'], '5.0.1', '<' ) ) {
|
132 |
-
if ( ! is_array( $this->options['ignore_users'] ) ) {
|
133 |
$this->options['ignore_users'] = (array) $this->options['ignore_users'];
|
134 |
}
|
135 |
}
|
@@ -142,9 +196,9 @@ if ( ! class_exists( 'Yoast_GA_Options' ) ) {
|
|
142 |
|
143 |
// Fallback to make sure every default option has a value
|
144 |
$defaults = $this->default_ga_values();
|
145 |
-
foreach ( $defaults[
|
146 |
-
if ( ! isset( $this->options[
|
147 |
-
$this->options[
|
148 |
}
|
149 |
}
|
150 |
|
@@ -159,7 +213,8 @@ if ( ! class_exists( 'Yoast_GA_Options' ) ) {
|
|
159 |
* @return array
|
160 |
*/
|
161 |
public function default_ga_values() {
|
162 |
-
|
|
|
163 |
$this->option_prefix => array(
|
164 |
'analytics_profile' => null,
|
165 |
'manual_ua_code' => 0,
|
@@ -184,6 +239,10 @@ if ( ! class_exists( 'Yoast_GA_Options' ) ) {
|
|
184 |
'firebug_lite' => 0,
|
185 |
)
|
186 |
);
|
|
|
|
|
|
|
|
|
187 |
}
|
188 |
}
|
189 |
}
|
34 |
*/
|
35 |
public $plugin_url;
|
36 |
|
37 |
+
/**
|
38 |
+
* Saving instance of it's own in this static var
|
39 |
+
*
|
40 |
+
* @var object
|
41 |
+
*/
|
42 |
+
private static $instance;
|
43 |
+
|
44 |
+
/**
|
45 |
+
* Getting instance of this object. If instance doesn't exists it will be created.
|
46 |
+
*
|
47 |
+
* @return object|Yoast_GA_Options
|
48 |
+
*/
|
49 |
+
public static function instance() {
|
50 |
+
|
51 |
+
if ( is_null( self::$instance ) ) {
|
52 |
+
self::$instance = new Yoast_GA_Options();
|
53 |
+
}
|
54 |
+
|
55 |
+
return self::$instance;
|
56 |
+
|
57 |
+
}
|
58 |
+
|
59 |
/**
|
60 |
* Constructor for the options
|
61 |
*/
|
62 |
public function __construct() {
|
63 |
$this->options = $this->get_options();
|
64 |
+
$this->options = $this->check_options( $this->options );
|
65 |
|
66 |
$this->plugin_path = plugin_dir_path( GAWP_FILE );
|
67 |
$this->plugin_url = trailingslashit( plugin_dir_url( GAWP_FILE ) );
|
74 |
if ( ! isset( $this->options['version'] ) || $this->options['version'] < GAWP_VERSION ) {
|
75 |
$this->upgrade();
|
76 |
}
|
77 |
+
|
78 |
+
// If instance is null, create it. Prevent creating multiple instances of this class
|
79 |
+
if ( is_null( self::$instance ) ) {
|
80 |
+
self::$instance = $this;
|
81 |
+
}
|
82 |
}
|
83 |
|
84 |
/**
|
89 |
* @return bool
|
90 |
*/
|
91 |
public function update_option( $val ) {
|
92 |
+
$options = get_option( $this->option_name );
|
93 |
+
$options[$this->option_prefix] = $val;
|
94 |
|
95 |
return update_option( $this->option_name, $options );
|
96 |
}
|
103 |
public function get_options() {
|
104 |
$options = get_option( $this->option_name );
|
105 |
|
106 |
+
return $options[$this->option_prefix];
|
107 |
+
}
|
108 |
+
|
109 |
+
/**
|
110 |
+
* Check if all the options are set, to prevent a notice if debugging is enabled
|
111 |
+
* When we have new changes, the settings are saved to the options class
|
112 |
+
*
|
113 |
+
* @param $options
|
114 |
+
*
|
115 |
+
* @return mixed
|
116 |
+
*/
|
117 |
+
public function check_options( $options ) {
|
118 |
+
|
119 |
+
$changes = 0;
|
120 |
+
foreach ( $this->default_ga_values() as $key => $value ) {
|
121 |
+
if ( ! isset( $options[$key] ) ) {
|
122 |
+
$options[$key] = $value;
|
123 |
+
$changes ++;
|
124 |
+
}
|
125 |
+
}
|
126 |
+
|
127 |
+
if ( $changes >= 1 ) {
|
128 |
+
$this->update_option( $options );
|
129 |
+
}
|
130 |
+
|
131 |
+
return $options;
|
132 |
}
|
133 |
|
134 |
/**
|
138 |
*/
|
139 |
public function get_tracking_code() {
|
140 |
$tracking_code = null;
|
141 |
+
$this->options = $this->get_options();
|
142 |
|
143 |
if ( ! empty( $this->options['analytics_profile'] ) ) {
|
144 |
$tracking_code = $this->options['analytics_profile'];
|
183 |
|
184 |
// 5.0.0 to 5.0.1 fix of ignore users array
|
185 |
if ( ! isset( $this->options['version'] ) || version_compare( $this->options['version'], '5.0.1', '<' ) ) {
|
186 |
+
if ( isset( $this->options['ignore_users'] ) && ! is_array( $this->options['ignore_users'] ) ) {
|
187 |
$this->options['ignore_users'] = (array) $this->options['ignore_users'];
|
188 |
}
|
189 |
}
|
196 |
|
197 |
// Fallback to make sure every default option has a value
|
198 |
$defaults = $this->default_ga_values();
|
199 |
+
foreach ( $defaults[$this->option_prefix] as $key => $value ) {
|
200 |
+
if ( ! isset( $this->options[$key] ) ) {
|
201 |
+
$this->options[$key] = $value;
|
202 |
}
|
203 |
}
|
204 |
|
213 |
* @return array
|
214 |
*/
|
215 |
public function default_ga_values() {
|
216 |
+
|
217 |
+
$options = array(
|
218 |
$this->option_prefix => array(
|
219 |
'analytics_profile' => null,
|
220 |
'manual_ua_code' => 0,
|
239 |
'firebug_lite' => 0,
|
240 |
)
|
241 |
);
|
242 |
+
|
243 |
+
$options = apply_filters( 'yst_ga_default-ga-values', $options, $this->option_prefix );
|
244 |
+
|
245 |
+
return $options;
|
246 |
}
|
247 |
}
|
248 |
}
|
languages/google-analytics-for-wordpress-de_DE.po
CHANGED
@@ -342,14 +342,6 @@ msgstr ""
|
|
342 |
msgid "Not for the average user: this allows you to add a line of code, to be added before the <code>trackPageview</code> call."
|
343 |
msgstr ""
|
344 |
|
345 |
-
#: admin/class-admin.php:548
|
346 |
-
msgid "Track AdSense"
|
347 |
-
msgstr ""
|
348 |
-
|
349 |
-
#: admin/class-admin.php:549
|
350 |
-
msgid "This requires integration of your Analytics and AdSense account, for help, <a href=\"http://google.com/support/analytics/bin/answer.py?answer=92625\">look here</a>."
|
351 |
-
msgstr ""
|
352 |
-
|
353 |
#: admin/class-admin.php:554
|
354 |
msgid "Host ga.js locally"
|
355 |
msgstr ""
|
342 |
msgid "Not for the average user: this allows you to add a line of code, to be added before the <code>trackPageview</code> call."
|
343 |
msgstr ""
|
344 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
345 |
#: admin/class-admin.php:554
|
346 |
msgid "Host ga.js locally"
|
347 |
msgstr ""
|
languages/google-analytics-for-wordpress-el_GR.po
CHANGED
@@ -342,14 +342,6 @@ msgstr ""
|
|
342 |
msgid "Not for the average user: this allows you to add a line of code, to be added before the <code>trackPageview</code> call."
|
343 |
msgstr ""
|
344 |
|
345 |
-
#: admin/class-admin.php:548
|
346 |
-
msgid "Track AdSense"
|
347 |
-
msgstr ""
|
348 |
-
|
349 |
-
#: admin/class-admin.php:549
|
350 |
-
msgid "This requires integration of your Analytics and AdSense account, for help, <a href=\"http://google.com/support/analytics/bin/answer.py?answer=92625\">look here</a>."
|
351 |
-
msgstr ""
|
352 |
-
|
353 |
#: admin/class-admin.php:554
|
354 |
msgid "Host ga.js locally"
|
355 |
msgstr ""
|
342 |
msgid "Not for the average user: this allows you to add a line of code, to be added before the <code>trackPageview</code> call."
|
343 |
msgstr ""
|
344 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
345 |
#: admin/class-admin.php:554
|
346 |
msgid "Host ga.js locally"
|
347 |
msgstr ""
|
languages/google-analytics-for-wordpress-es_ES.po
CHANGED
@@ -342,14 +342,6 @@ msgstr ""
|
|
342 |
msgid "Not for the average user: this allows you to add a line of code, to be added before the <code>trackPageview</code> call."
|
343 |
msgstr ""
|
344 |
|
345 |
-
#: admin/class-admin.php:548
|
346 |
-
msgid "Track AdSense"
|
347 |
-
msgstr ""
|
348 |
-
|
349 |
-
#: admin/class-admin.php:549
|
350 |
-
msgid "This requires integration of your Analytics and AdSense account, for help, <a href=\"http://google.com/support/analytics/bin/answer.py?answer=92625\">look here</a>."
|
351 |
-
msgstr ""
|
352 |
-
|
353 |
#: admin/class-admin.php:554
|
354 |
msgid "Host ga.js locally"
|
355 |
msgstr ""
|
342 |
msgid "Not for the average user: this allows you to add a line of code, to be added before the <code>trackPageview</code> call."
|
343 |
msgstr ""
|
344 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
345 |
#: admin/class-admin.php:554
|
346 |
msgid "Host ga.js locally"
|
347 |
msgstr ""
|
languages/google-analytics-for-wordpress-fi.po
CHANGED
@@ -342,14 +342,6 @@ msgstr "Räätälöity koodi"
|
|
342 |
msgid "Not for the average user: this allows you to add a line of code, to be added before the <code>trackPageview</code> call."
|
343 |
msgstr "Ei normaaleille käyttäjille: mahdollistaa koodirivin lisäämisen ennen <code>trackPageview</code> kutsua."
|
344 |
|
345 |
-
#: admin/class-admin.php:548
|
346 |
-
msgid "Track AdSense"
|
347 |
-
msgstr "Seuraa AdSenseä"
|
348 |
-
|
349 |
-
#: admin/class-admin.php:549
|
350 |
-
msgid "This requires integration of your Analytics and AdSense account, for help, <a href=\"http://google.com/support/analytics/bin/answer.py?answer=92625\">look here</a>."
|
351 |
-
msgstr "Vaatii integraation Analytics ja AdSense tilien välillä. <a href=\"http://google.com/support/analytics/bin/answer.py?answer=92625\">Lue lisää</a>."
|
352 |
-
|
353 |
#: admin/class-admin.php:554
|
354 |
msgid "Host ga.js locally"
|
355 |
msgstr "Lataa ga.js paikallisesti"
|
342 |
msgid "Not for the average user: this allows you to add a line of code, to be added before the <code>trackPageview</code> call."
|
343 |
msgstr "Ei normaaleille käyttäjille: mahdollistaa koodirivin lisäämisen ennen <code>trackPageview</code> kutsua."
|
344 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
345 |
#: admin/class-admin.php:554
|
346 |
msgid "Host ga.js locally"
|
347 |
msgstr "Lataa ga.js paikallisesti"
|
languages/google-analytics-for-wordpress-fr_FR.po
CHANGED
@@ -342,14 +342,6 @@ msgstr ""
|
|
342 |
msgid "Not for the average user: this allows you to add a line of code, to be added before the <code>trackPageview</code> call."
|
343 |
msgstr ""
|
344 |
|
345 |
-
#: admin/class-admin.php:548
|
346 |
-
msgid "Track AdSense"
|
347 |
-
msgstr ""
|
348 |
-
|
349 |
-
#: admin/class-admin.php:549
|
350 |
-
msgid "This requires integration of your Analytics and AdSense account, for help, <a href=\"http://google.com/support/analytics/bin/answer.py?answer=92625\">look here</a>."
|
351 |
-
msgstr ""
|
352 |
-
|
353 |
#: admin/class-admin.php:554
|
354 |
msgid "Host ga.js locally"
|
355 |
msgstr ""
|
342 |
msgid "Not for the average user: this allows you to add a line of code, to be added before the <code>trackPageview</code> call."
|
343 |
msgstr ""
|
344 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
345 |
#: admin/class-admin.php:554
|
346 |
msgid "Host ga.js locally"
|
347 |
msgstr ""
|
languages/google-analytics-for-wordpress-hu_HU.po
CHANGED
@@ -342,14 +342,6 @@ msgstr ""
|
|
342 |
msgid "Not for the average user: this allows you to add a line of code, to be added before the <code>trackPageview</code> call."
|
343 |
msgstr ""
|
344 |
|
345 |
-
#: admin/class-admin.php:548
|
346 |
-
msgid "Track AdSense"
|
347 |
-
msgstr ""
|
348 |
-
|
349 |
-
#: admin/class-admin.php:549
|
350 |
-
msgid "This requires integration of your Analytics and AdSense account, for help, <a href=\"http://google.com/support/analytics/bin/answer.py?answer=92625\">look here</a>."
|
351 |
-
msgstr ""
|
352 |
-
|
353 |
#: admin/class-admin.php:554
|
354 |
msgid "Host ga.js locally"
|
355 |
msgstr ""
|
342 |
msgid "Not for the average user: this allows you to add a line of code, to be added before the <code>trackPageview</code> call."
|
343 |
msgstr ""
|
344 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
345 |
#: admin/class-admin.php:554
|
346 |
msgid "Host ga.js locally"
|
347 |
msgstr ""
|
languages/google-analytics-for-wordpress-nl_NL.po
CHANGED
@@ -342,14 +342,6 @@ msgstr "Eigen code"
|
|
342 |
msgid "Not for the average user: this allows you to add a line of code, to be added before the <code>trackPageview</code> call."
|
343 |
msgstr "Niet voor de gemiddelde gebruiker: dit zorgt dat je een regel codes kan toevoegen voor de <code>trackPageview</code> call."
|
344 |
|
345 |
-
#: admin/class-admin.php:548
|
346 |
-
msgid "Track AdSense"
|
347 |
-
msgstr "Track AdSense"
|
348 |
-
|
349 |
-
#: admin/class-admin.php:549
|
350 |
-
msgid "This requires integration of your Analytics and AdSense account, for help, <a href=\"http://google.com/support/analytics/bin/answer.py?answer=92625\">look here</a>."
|
351 |
-
msgstr "Dit heeft een integratie van je Analytics en AdSense account nodig. Hulp nodig? <a href=\"http://google.com/support/analytics/bin/answer.py?answer=92625\">Kijk hier</a>."
|
352 |
-
|
353 |
#: admin/class-admin.php:554
|
354 |
msgid "Host ga.js locally"
|
355 |
msgstr "Host ga.js lokaal"
|
342 |
msgid "Not for the average user: this allows you to add a line of code, to be added before the <code>trackPageview</code> call."
|
343 |
msgstr "Niet voor de gemiddelde gebruiker: dit zorgt dat je een regel codes kan toevoegen voor de <code>trackPageview</code> call."
|
344 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
345 |
#: admin/class-admin.php:554
|
346 |
msgid "Host ga.js locally"
|
347 |
msgstr "Host ga.js lokaal"
|
readme.txt
CHANGED
@@ -4,7 +4,7 @@ Donate link: https://yoast.com/donate/
|
|
4 |
Tags: analytics, google analytics, statistics, tracking, stats, google, yoast
|
5 |
Requires at least: 3.8
|
6 |
Tested up to: 4.0
|
7 |
-
Stable tag: 5.0.
|
8 |
|
9 |
Track your WordPress site easily with the latest tracking codes and lots added data for search result pages and error pages.
|
10 |
|
@@ -49,6 +49,15 @@ This section describes how to install the plugin and get it working.
|
|
49 |
|
50 |
== Changelog ==
|
51 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
52 |
= 5.0.6 =
|
53 |
Release Date: September 17th, 2014
|
54 |
|
4 |
Tags: analytics, google analytics, statistics, tracking, stats, google, yoast
|
5 |
Requires at least: 3.8
|
6 |
Tested up to: 4.0
|
7 |
+
Stable tag: 5.0.7
|
8 |
|
9 |
Track your WordPress site easily with the latest tracking codes and lots added data for search result pages and error pages.
|
10 |
|
49 |
|
50 |
== Changelog ==
|
51 |
|
52 |
+
= 5.0.7 =
|
53 |
+
Release Date: October 14th, 2014
|
54 |
+
|
55 |
+
* Bugfixes:
|
56 |
+
* Fixes a bug where 404 tracking would not work when using ga.js tracking.
|
57 |
+
|
58 |
+
* Enhancements:
|
59 |
+
* Refactored several bits of code.
|
60 |
+
|
61 |
= 5.0.6 =
|
62 |
Release Date: September 17th, 2014
|
63 |
|