Better Google Analytics - Version 1.2.2

Version Description

  • Made some changes to address suppressed PHP notices in PHP 7.1
  • Fixed stray string being output in admin in certain situations
  • Fixed incompatibility with Gravity Forms
Download this release

Release Info

Developer digitalpoint
Plugin Icon 128x128 Better Google Analytics
Version 1.2.2
Comparing to
See all releases

Code changes from version 1.2.1 to 1.2.2

better-analytics.php CHANGED
@@ -7,7 +7,7 @@
7
  Plugin Name: Better Analytics
8
  Plugin URI: https://marketplace.digitalpoint.com/better-analytics.3354/item
9
  Description: Adds Google Universal Analytics code to your WordPress site. Options to track most everything (social button interactions, advertising clicks, emails sent/opened, YouTube video engagement, custom dimension tracking of authors/categories, etc.) Integrates with API for reports/charts on dashboard, heat maps and real-time traffic tracking.
10
- Version: 1.2.1
11
  Author: Digital Point
12
  Author URI: https://www.digitalpoint.com/
13
  License: GPLv2
@@ -23,7 +23,7 @@ if (!function_exists('add_action'))
23
  exit;
24
  }
25
 
26
- define('BETTER_ANALYTICS_VERSION', '1.2.1');
27
  define('BETTER_ANALYTICS_MINIMUM_WP_VERSION', '3.8'); // Dashicons: https://codex.wordpress.org/Function_Reference/add_menu_page
28
  define('BETTER_ANALYTICS_PRODUCT_URL', 'https://marketplace.digitalpoint.com/better-analytics.3354/item');
29
  define('BETTER_ANALYTICS_PRO_PRODUCT_URL', 'https://marketplace.digitalpoint.com/better-analytics-pro.3355/item');
7
  Plugin Name: Better Analytics
8
  Plugin URI: https://marketplace.digitalpoint.com/better-analytics.3354/item
9
  Description: Adds Google Universal Analytics code to your WordPress site. Options to track most everything (social button interactions, advertising clicks, emails sent/opened, YouTube video engagement, custom dimension tracking of authors/categories, etc.) Integrates with API for reports/charts on dashboard, heat maps and real-time traffic tracking.
10
+ Version: 1.2.2
11
  Author: Digital Point
12
  Author URI: https://www.digitalpoint.com/
13
  License: GPLv2
23
  exit;
24
  }
25
 
26
+ define('BETTER_ANALYTICS_VERSION', '1.2.2');
27
  define('BETTER_ANALYTICS_MINIMUM_WP_VERSION', '3.8'); // Dashicons: https://codex.wordpress.org/Function_Reference/add_menu_page
28
  define('BETTER_ANALYTICS_PRODUCT_URL', 'https://marketplace.digitalpoint.com/better-analytics.3354/item');
29
  define('BETTER_ANALYTICS_PRO_PRODUCT_URL', 'https://marketplace.digitalpoint.com/better-analytics-pro.3355/item');
library/DigitalPointBetterAnalytics/Base/Admin.php CHANGED
@@ -207,8 +207,6 @@ class DigitalPointBetterAnalytics_Base_Admin
207
  {
208
  if (empty($betterAnalyticsOptions['roles_no_track']) || !array_intersect((array)$currentUser->roles, (array)@$betterAnalyticsOptions['roles_no_track']))
209
  {
210
- echo 'YYY';
211
-
212
  DigitalPointBetterAnalytics_Base_Public::getInstance()->insert_code();
213
  include(BETTER_ANALYTICS_PLUGIN_DIR . 'js/universal.php');
214
  }
@@ -292,7 +290,7 @@ class DigitalPointBetterAnalytics_Base_Admin
292
  {
293
  global $plugin_page;
294
 
295
- $method = 'action' . ucwords(strtolower(preg_replace('#[^a-z0-9]#i', '', substr($plugin_page ? $plugin_page : @$_REQUEST['action'], 17))));
296
 
297
  $controller = $this->_getController();
298
  if (method_exists($controller, $method))
@@ -317,12 +315,7 @@ class DigitalPointBetterAnalytics_Base_Admin
317
 
318
  public function removable_query_args($args)
319
  {
320
- if (empty($_REQUEST['action']))
321
- {
322
- $_REQUEST['action'] = 'unsed';
323
- }
324
-
325
- if (strpos(@$_SERVER['REQUEST_URI'], 'page=better-analytics') !== false && (@$_REQUEST['action'] == 'start' || @$_REQUEST['action'] == 'stop' || @$_REQUEST['action'] == 'delete' || @$_REQUEST['action'] == 'activate' || @$_REQUEST['action'] == 'deactivate'))
326
  {
327
  $args[] = 'id';
328
  $args[] = 'action';
207
  {
208
  if (empty($betterAnalyticsOptions['roles_no_track']) || !array_intersect((array)$currentUser->roles, (array)@$betterAnalyticsOptions['roles_no_track']))
209
  {
 
 
210
  DigitalPointBetterAnalytics_Base_Public::getInstance()->insert_code();
211
  include(BETTER_ANALYTICS_PLUGIN_DIR . 'js/universal.php');
212
  }
290
  {
291
  global $plugin_page;
292
 
293
+ $method = 'action' . ucwords(strtolower(preg_replace('#[^a-z0-9]#i', '', substr($plugin_page ? $plugin_page : (!empty($_REQUEST['action']) ? $_REQUEST['action'] : ''), 17))));
294
 
295
  $controller = $this->_getController();
296
  if (method_exists($controller, $method))
315
 
316
  public function removable_query_args($args)
317
  {
318
+ if (strpos(@$_SERVER['REQUEST_URI'], 'page=better-analytics') !== false && !empty($_REQUEST['action']) && ($_REQUEST['action'] == 'start' || $_REQUEST['action'] == 'stop' || $_REQUEST['action'] == 'delete' || $_REQUEST['action'] == 'activate' || $_REQUEST['action'] == 'deactivate'))
 
 
 
 
 
319
  {
320
  $args[] = 'id';
321
  $args[] = 'action';
library/DigitalPointBetterAnalytics/ControllerAdmin/Analytics.php CHANGED
@@ -791,9 +791,9 @@ class DigitalPointBetterAnalytics_ControllerAdmin_Analytics
791
  $betterAnalyticsOptions = get_option('better_analytics');
792
  $reportingClass = DigitalPointBetterAnalytics_Helper_Reporting::getInstance();
793
 
794
- if (@$_REQUEST['action'] == 'activate' || @$_REQUEST['action'] == 'deactivate')
795
  {
796
- if ($goalId = absint(@$_REQUEST['id']))
797
  {
798
  check_admin_referer($_REQUEST['action'] . '-goal');
799
 
@@ -807,7 +807,7 @@ class DigitalPointBetterAnalytics_ControllerAdmin_Analytics
807
  }
808
  }
809
  }
810
- elseif (@$_REQUEST['action'] == 'activate-selected' || @$_REQUEST['action'] == 'deactivate-selected')
811
  {
812
  if (!empty($_REQUEST['checked']) && is_array($_REQUEST['checked']))
813
  {
@@ -866,7 +866,7 @@ class DigitalPointBetterAnalytics_ControllerAdmin_Analytics
866
  $betterAnalyticsOptions = get_option('better_analytics');
867
  $reportingClass = DigitalPointBetterAnalytics_Helper_Reporting::getInstance();
868
 
869
- if (@$_REQUEST['action'] == 'start-selected' || @$_REQUEST['action'] == 'end-selected' || @$_REQUEST['action'] == 'delete-selected')
870
  {
871
  if (!empty($_REQUEST['checked']) && is_array($_REQUEST['checked']))
872
  {
791
  $betterAnalyticsOptions = get_option('better_analytics');
792
  $reportingClass = DigitalPointBetterAnalytics_Helper_Reporting::getInstance();
793
 
794
+ if (!empty($_REQUEST['action']) && ($_REQUEST['action'] == 'activate' || $_REQUEST['action'] == 'deactivate'))
795
  {
796
+ if (!empty($_REQUEST['id']) && $goalId = absint($_REQUEST['id']))
797
  {
798
  check_admin_referer($_REQUEST['action'] . '-goal');
799
 
807
  }
808
  }
809
  }
810
+ elseif (!empty($_REQUEST['action']) && ($_REQUEST['action'] == 'activate-selected' || $_REQUEST['action'] == 'deactivate-selected'))
811
  {
812
  if (!empty($_REQUEST['checked']) && is_array($_REQUEST['checked']))
813
  {
866
  $betterAnalyticsOptions = get_option('better_analytics');
867
  $reportingClass = DigitalPointBetterAnalytics_Helper_Reporting::getInstance();
868
 
869
+ if (!empty($_REQUEST['action']) && ($_REQUEST['action'] == 'start-selected' || $_REQUEST['action'] == 'end-selected' || $_REQUEST['action'] == 'delete-selected'))
870
  {
871
  if (!empty($_REQUEST['checked']) && is_array($_REQUEST['checked']))
872
  {
library/DigitalPointBetterAnalytics/Formatting/ExperimentTable.php CHANGED
@@ -104,7 +104,7 @@ class DigitalPointBetterAnalytics_Formatting_ExperimentTable extends WP_List_Tab
104
  $sortOrder[] = strtolower(@$item[$sortOrders[$_REQUEST['orderby']]['key']]);
105
  }
106
 
107
- array_multisort($sortOrder, (@$_REQUEST['order'] == 'desc' ? SORT_DESC : SORT_ASC), $sortOrders[$_REQUEST['orderby']]['type'], $this->items);
108
  }
109
  }
110
 
@@ -274,10 +274,14 @@ class DigitalPointBetterAnalytics_Formatting_ExperimentTable extends WP_List_Tab
274
  {
275
  $types = DigitalPointBetterAnalytics_Model_Experiments::getTypes();
276
 
277
- if (!$type = @$types[@$item['extraData']['type']])
278
  {
279
  $type = esc_html__('Unknown', 'better-analytics');
280
  }
 
 
 
 
281
 
282
  echo $type;
283
  }
104
  $sortOrder[] = strtolower(@$item[$sortOrders[$_REQUEST['orderby']]['key']]);
105
  }
106
 
107
+ array_multisort($sortOrder, (!empty(@$_REQUEST['order']) && $_REQUEST['order'] == 'desc' ? SORT_DESC : SORT_ASC), $sortOrders[$_REQUEST['orderby']]['type'], $this->items);
108
  }
109
  }
110
 
274
  {
275
  $types = DigitalPointBetterAnalytics_Model_Experiments::getTypes();
276
 
277
+ if (empty($item['extraData']['type']) || empty($types[$item['extraData']['type']]))
278
  {
279
  $type = esc_html__('Unknown', 'better-analytics');
280
  }
281
+ else
282
+ {
283
+ $type = $types[$item['extraData']['type']];
284
+ }
285
 
286
  echo $type;
287
  }
library/DigitalPointBetterAnalytics/Formatting/GoalTable.php CHANGED
@@ -80,7 +80,7 @@ class DigitalPointBetterAnalytics_Formatting_GoalTable extends WP_List_Table
80
  $sortOrder[] = strtolower($item[$sortOrders[$_REQUEST['orderby']]['key']]);
81
  }
82
 
83
- array_multisort($sortOrder, (@$_REQUEST['order'] == 'desc' ? SORT_DESC : SORT_ASC), $sortOrders[$_REQUEST['orderby']]['type'], $this->items);
84
  }
85
  }
86
 
80
  $sortOrder[] = strtolower($item[$sortOrders[$_REQUEST['orderby']]['key']]);
81
  }
82
 
83
+ array_multisort($sortOrder, (!empty(@$_REQUEST['order']) && $_REQUEST['order'] == 'desc' ? SORT_DESC : SORT_ASC), $sortOrders[$_REQUEST['orderby']]['type'], $this->items);
84
  }
85
  }
86
 
library/DigitalPointBetterAnalytics/Model/Experiments.php CHANGED
@@ -86,7 +86,15 @@ class DigitalPointBetterAnalytics_Model_Experiments
86
 
87
  public static function decodeExperimentData(&$experiment)
88
  {
89
- $experiment['extraData'] = @json_decode(@$experiment['description'], true);
 
 
 
 
 
 
 
 
90
  $experiment['fromBetterAnalytics'] = is_array($experiment['extraData']) && !empty($experiment['extraData']['type']);
91
 
92
  if (is_array($experiment['variations']))
86
 
87
  public static function decodeExperimentData(&$experiment)
88
  {
89
+ if (!empty($experiment['description']))
90
+ {
91
+ $experiment['extraData'] = @json_decode($experiment['description'], true);
92
+ }
93
+ else
94
+ {
95
+ $experiment['extraData'] = false;
96
+ }
97
+
98
  $experiment['fromBetterAnalytics'] = is_array($experiment['extraData']) && !empty($experiment['extraData']['type']);
99
 
100
  if (is_array($experiment['variations']))
library/DigitalPointBetterAnalytics/ViewAdmin/experiments.php CHANGED
@@ -32,7 +32,8 @@ if ($experimentId && $accountId = DigitalPointBetterAnalytics_Model_Reporting::g
32
  }
33
  }
34
 
35
- if (@$_REQUEST['action'] == 'create_edit')
 
36
  {
37
  if (empty($experiment['status']))
38
  {
@@ -331,7 +332,7 @@ if (@$_REQUEST['action'] == 'create_edit')
331
  $postId = 0;
332
  if (!empty($experiment['extraData']['post_title']) && !empty($experiment['extraData']['post_title']['post_id']))
333
  {
334
- $postId = $experiment['extraData']['page_title']['post_id'];
335
  }
336
 
337
  echo '<option value="' . absint($post->ID) . '"' . ($post->ID == $postId ? ' selected="selected"' : '') . '>' . htmlentities($post->post_title) . '</option>';
@@ -589,18 +590,18 @@ if (@$_REQUEST['action'] == 'create_edit')
589
  $errorMessage = array();
590
 
591
  $experimentObject = array(
592
- 'status' => sanitize_text_field(@$_POST['status']),
593
  'servingFramework' => 'API',
594
  'editableInGaUi' => false,
595
  );
596
 
597
  if (@$experiment['status'] != 'ENDED')
598
  {
599
- $experimentObject['minimumExperimentLengthInDays'] = absint(@$_POST['minimum_days_to_run']);
600
- $experimentObject['equalWeighting'] = (@$_POST['equal_weighting'] ? true : false);
601
- $experimentObject['name'] = sanitize_text_field(@$_POST['name']);
602
- $experimentObject['trafficCoverage'] = absint(@$_POST['traffic_coverage']) / 100;
603
- $experimentObject['winnerConfidenceLevel'] = absint(@$_POST['winner_confidence_level']) / 100;
604
  }
605
 
606
  if (@$experiment['status'] != 'RUNNING' && @$experiment['status'] != 'ENDED')
@@ -754,26 +755,26 @@ if (@$_REQUEST['action'] == 'create_edit')
754
  }
755
  }
756
  }
757
- elseif ($experiment && (@$_REQUEST['action'] == 'start' || @$_REQUEST['action'] == 'end' || @$_REQUEST['action'] == 'delete'))
758
  {
759
  $reportingClass->deleteExperimentCache($experiment['accountId'], $experiment['webPropertyId'], $experiment['profileId']);
760
  $reportingClass->deleteExperimentCache($experiment['accountId'], $experiment['webPropertyId'], $experiment['profileId'], $experimentId);
761
 
762
- if (@$_REQUEST['action'] == 'start')
763
  {
764
  $experiment = $reportingClass->patchExperiment($experiment['accountId'], $experiment['webPropertyId'], $experiment['profileId'], $experimentId, array('status' => 'RUNNING'));
765
 
766
  /* translators: %1$s = <strong>, %2$s = </strong> */
767
  $noticeAtTop = '<div id="message" class="updated notice is-dismissible"><p>' . sprintf(esc_html__('Experiment %1$sstarted%2$s.'), '<strong>', '</strong>') . '</p></div>';
768
  }
769
- elseif (@$_REQUEST['action'] == 'end')
770
  {
771
  $experiment = $reportingClass->patchExperiment($experiment['accountId'], $experiment['webPropertyId'], $experiment['profileId'], $experimentId, array('status' => 'ENDED'));
772
 
773
  /* translators: %1$s = <strong>, %2$s = </strong> */
774
  $noticeAtTop = '<div id="message" class="updated notice is-dismissible"><p>' . sprintf(esc_html__('Experiment %1$sended%2$s.'), '<strong>', '</strong>') . '</p></div>';
775
  }
776
- elseif (@$_REQUEST['action'] == 'delete')
777
  {
778
  $reportingClass->deleteExperiment($experiment['accountId'], $experiment['webPropertyId'], $experiment['profileId'], $experimentId);
779
 
@@ -782,7 +783,7 @@ elseif ($experiment && (@$_REQUEST['action'] == 'start' || @$_REQUEST['action']
782
  }
783
  }
784
 
785
- if (@$_REQUEST['action'] != 'create_edit' || @$_SERVER['REQUEST_METHOD'] == 'POST')
786
  {
787
  if (!empty($errorMessage))
788
  {
32
  }
33
  }
34
 
35
+
36
+ if (!empty($_REQUEST['action']) && $_REQUEST['action'] == 'create_edit')
37
  {
38
  if (empty($experiment['status']))
39
  {
332
  $postId = 0;
333
  if (!empty($experiment['extraData']['post_title']) && !empty($experiment['extraData']['post_title']['post_id']))
334
  {
335
+ $postId = empty($experiment['extraData']['page_title']['post_id']) ? 0 : $experiment['extraData']['page_title']['post_id'];
336
  }
337
 
338
  echo '<option value="' . absint($post->ID) . '"' . ($post->ID == $postId ? ' selected="selected"' : '') . '>' . htmlentities($post->post_title) . '</option>';
590
  $errorMessage = array();
591
 
592
  $experimentObject = array(
593
+ 'status' => empty($_POST['status']) ? '' : sanitize_text_field($_POST['status']),
594
  'servingFramework' => 'API',
595
  'editableInGaUi' => false,
596
  );
597
 
598
  if (@$experiment['status'] != 'ENDED')
599
  {
600
+ $experimentObject['minimumExperimentLengthInDays'] = absint(empty($_POST['minimum_days_to_run']) ? 1 : $_POST['minimum_days_to_run']);
601
+ $experimentObject['equalWeighting'] = (!empty($_POST['equal_weighting']) && $_POST['equal_weighting'] ? true : false);
602
+ $experimentObject['name'] = sanitize_text_field(empty($_POST['name']) ? '' : $_POST['name']);
603
+ $experimentObject['trafficCoverage'] = absint(empty($_POST['traffic_coverage']) ? 1 : $_POST['traffic_coverage']) / 100;
604
+ $experimentObject['winnerConfidenceLevel'] = absint(empty($_POST['winner_confidence_level']) ? 25 : $_POST['winner_confidence_level']) / 100; //TODO: check default values
605
  }
606
 
607
  if (@$experiment['status'] != 'RUNNING' && @$experiment['status'] != 'ENDED')
755
  }
756
  }
757
  }
758
+ elseif ($experiment && !empty($_REQUEST['action']) && ($_REQUEST['action'] == 'start' || $_REQUEST['action'] == 'end' || $_REQUEST['action'] == 'delete'))
759
  {
760
  $reportingClass->deleteExperimentCache($experiment['accountId'], $experiment['webPropertyId'], $experiment['profileId']);
761
  $reportingClass->deleteExperimentCache($experiment['accountId'], $experiment['webPropertyId'], $experiment['profileId'], $experimentId);
762
 
763
+ if (!empty($_REQUEST['action']) && $_REQUEST['action'] == 'start')
764
  {
765
  $experiment = $reportingClass->patchExperiment($experiment['accountId'], $experiment['webPropertyId'], $experiment['profileId'], $experimentId, array('status' => 'RUNNING'));
766
 
767
  /* translators: %1$s = <strong>, %2$s = </strong> */
768
  $noticeAtTop = '<div id="message" class="updated notice is-dismissible"><p>' . sprintf(esc_html__('Experiment %1$sstarted%2$s.'), '<strong>', '</strong>') . '</p></div>';
769
  }
770
+ elseif (!empty($_REQUEST['action']) && $_REQUEST['action'] == 'end')
771
  {
772
  $experiment = $reportingClass->patchExperiment($experiment['accountId'], $experiment['webPropertyId'], $experiment['profileId'], $experimentId, array('status' => 'ENDED'));
773
 
774
  /* translators: %1$s = <strong>, %2$s = </strong> */
775
  $noticeAtTop = '<div id="message" class="updated notice is-dismissible"><p>' . sprintf(esc_html__('Experiment %1$sended%2$s.'), '<strong>', '</strong>') . '</p></div>';
776
  }
777
+ elseif (!empty($_REQUEST['action']) && $_REQUEST['action'] == 'delete')
778
  {
779
  $reportingClass->deleteExperiment($experiment['accountId'], $experiment['webPropertyId'], $experiment['profileId'], $experimentId);
780
 
783
  }
784
  }
785
 
786
+ if (empty($_REQUEST['action']) || $_REQUEST['action'] != 'create_edit' || $_SERVER['REQUEST_METHOD'] == 'POST')
787
  {
788
  if (!empty($errorMessage))
789
  {
library/DigitalPointBetterAnalytics/ViewAdmin/goals.php CHANGED
@@ -9,9 +9,9 @@ $nOnceSalt = @$betterAnalyticsOptions['property_id'] . '-' . @$betterAnalyticsOp
9
 
10
  $noticeAtTop = '';
11
 
12
- if (@$_REQUEST['action'] == 'create_edit')
13
  {
14
- $goalId = absint(@$_REQUEST['id']);
15
 
16
  $goalsAll = DigitalPointBetterAnalytics_Helper_Reporting::getInstance()->getGoals();
17
 
@@ -461,7 +461,7 @@ if (@$_REQUEST['action'] == 'create_edit')
461
 
462
  }
463
 
464
- if (@$_REQUEST['action'] != 'create_edit' || @$_SERVER['REQUEST_METHOD'] == 'POST')
465
  {
466
  if (!empty($errorMessage))
467
  {
9
 
10
  $noticeAtTop = '';
11
 
12
+ if (!empty($_REQUEST['action']) && $_REQUEST['action'] == 'create_edit')
13
  {
14
+ $goalId = empty($_REQUEST['id']) ? 0 : absint($_REQUEST['id']);
15
 
16
  $goalsAll = DigitalPointBetterAnalytics_Helper_Reporting::getInstance()->getGoals();
17
 
461
 
462
  }
463
 
464
+ if (empty($_REQUEST['action']) || $_REQUEST['action'] != 'create_edit' || $_SERVER['REQUEST_METHOD'] == 'POST')
465
  {
466
  if (!empty($errorMessage))
467
  {
library/DigitalPointBetterAnalytics/ViewAdmin/test.php CHANGED
@@ -32,7 +32,7 @@
32
 
33
  $checks['licensed'] = DigitalPointBetterAnalytics_Helper_Api::check(true);
34
 
35
- if (@$_REQUEST['action'] == 'config')
36
  {
37
  if (!$hasTokens)
38
  {
@@ -129,11 +129,11 @@
129
  elseif($_SERVER['REQUEST_METHOD'] == 'POST')
130
  {
131
  $vertical = sanitize_text_field($_REQUEST['vertical']);
132
- $accountId = absint(@$_REQUEST['account_id']);
133
 
134
  $overQuota = false;
135
 
136
- if ($accountId = absint(@$_REQUEST['account_id']))
137
  {
138
  $property = $reportingClass->insertWebProperty($accountId, array(
139
  'industryVertical' => $vertical,
32
 
33
  $checks['licensed'] = DigitalPointBetterAnalytics_Helper_Api::check(true);
34
 
35
+ if (!empty($_REQUEST['action']) && $_REQUEST['action'] == 'config')
36
  {
37
  if (!$hasTokens)
38
  {
129
  elseif($_SERVER['REQUEST_METHOD'] == 'POST')
130
  {
131
  $vertical = sanitize_text_field($_REQUEST['vertical']);
132
+ $accountId = empty($_REQUEST['account_id']) ? 0 : absint($_REQUEST['account_id']);
133
 
134
  $overQuota = false;
135
 
136
+ if ($accountId)
137
  {
138
  $property = $reportingClass->insertWebProperty($accountId, array(
139
  'industryVertical' => $vertical,
readme.txt CHANGED
@@ -3,8 +3,8 @@ Contributors: digitalpoint
3
  Tags: analytics, google analytics, universal analytics, statistics, tracking, code, dashboard, analytics dashboard, google analytics dashboard, google analytics plugin, google analytics widget, reports, charts, multisite, api, stats, web stats, visits, javascript, pageviews, marketing, widget, realtime, real time, youtube, outbrain, taboola, adsense, twitter, pinterest, linkedin, facebook, google, digitalpoint, ab testing, ab tests, split testing, google analytics content experiments, content experiments
4
  Donate link: https://marketplace.digitalpoint.com/better-analytics.3354/item#utm_source=readme&utm_medium=wordpress&utm_campaign=plugin
5
  Requires at least: 3.8
6
- Tested up to: 4.7.4
7
- Stable tag: 1.2.1
8
  License: GPLv2
9
  License URI: https://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -39,6 +39,7 @@ Better Google Analytics uses lightweight (and client-side cacheable) JavaScript
39
 
40
  * Link Attribution
41
  * User-ID/Session Unification
 
42
  * User Engagement
43
  * Comment Creation
44
  * User Registration
@@ -86,6 +87,7 @@ Better Google Analytics uses lightweight (and client-side cacheable) JavaScript
86
  * Suppress Google Analytics Tracking By User Role
87
  * View Analytics Reports By User Role
88
  * Adjust Location Of Google Analytics Code
 
89
  * Google Analytics Campaign Tracking By Anchor or Parameters
90
  * Adjustable Analytics Sample Rate
91
  * Insert Your Own Custom Google Analytics JavaScript
@@ -201,7 +203,12 @@ Thank you to all the individuals who have contributed translations for Better Go
201
  26. Advanced settings allow you to fine tune how the system works with Google Analytics.
202
 
203
  == Changelog ==
204
- = .1.2.1 =
 
 
 
 
 
205
  * Fixed bug with RSS link tracking
206
  * Fixed bug with widget
207
  * Fixed issue where Google Analytics code might not be used in certain cases in the wp-admin area
3
  Tags: analytics, google analytics, universal analytics, statistics, tracking, code, dashboard, analytics dashboard, google analytics dashboard, google analytics plugin, google analytics widget, reports, charts, multisite, api, stats, web stats, visits, javascript, pageviews, marketing, widget, realtime, real time, youtube, outbrain, taboola, adsense, twitter, pinterest, linkedin, facebook, google, digitalpoint, ab testing, ab tests, split testing, google analytics content experiments, content experiments
4
  Donate link: https://marketplace.digitalpoint.com/better-analytics.3354/item#utm_source=readme&utm_medium=wordpress&utm_campaign=plugin
5
  Requires at least: 3.8
6
+ Tested up to: 4.7.3
7
+ Stable tag: 1.2.2
8
  License: GPLv2
9
  License URI: https://www.gnu.org/licenses/gpl-2.0.html
10
 
39
 
40
  * Link Attribution
41
  * User-ID/Session Unification
42
+ * Enable On AMP Pages
43
  * User Engagement
44
  * Comment Creation
45
  * User Registration
87
  * Suppress Google Analytics Tracking By User Role
88
  * View Analytics Reports By User Role
89
  * Adjust Location Of Google Analytics Code
90
+ * Defer JavaScript Loading
91
  * Google Analytics Campaign Tracking By Anchor or Parameters
92
  * Adjustable Analytics Sample Rate
93
  * Insert Your Own Custom Google Analytics JavaScript
203
  26. Advanced settings allow you to fine tune how the system works with Google Analytics.
204
 
205
  == Changelog ==
206
+ = 1.2.2 =
207
+ * Made some changes to address suppressed PHP notices in PHP 7.1
208
+ * Fixed stray string being output in admin in certain situations
209
+ * Fixed incompatibility with Gravity Forms
210
+
211
+ = 1.2.1 =
212
  * Fixed bug with RSS link tracking
213
  * Fixed bug with widget
214
  * Fixed issue where Google Analytics code might not be used in certain cases in the wp-admin area