Reduce HTTP Requests, Disable Emojis & Disable Embeds, Speedup WooCommerce - Version 1.5.21

Version Description

  • New setting to delete all comments completely, great for existing sites that have a lot of old spam comments, but want to turn them off and clean up the database at the same time.
  • Can be found under Admin in Remove Excess Bloat area
Download this release

Release Info

Developer pigeonhut
Plugin Icon 128x128 Reduce HTTP Requests, Disable Emojis & Disable Embeds, Speedup WooCommerce
Version 1.5.21
Comparing to
See all releases

Code changes from version 1.5.19 to 1.5.21

lib/class-wpperformance-admin.php CHANGED
@@ -24,7 +24,7 @@ class WpPerformance_Admin {
24
  {
25
  wp_enqueue_style($single_external_font_to_load["unique_name"], $single_external_font_to_load["src"], array());
26
  }
27
- }
28
 
29
  public function wp_performance_load_external_scripts($tag, $handle) {
30
  //var_dump($handle);
@@ -315,7 +315,7 @@ class WpPerformance_Admin {
315
  "unique_name" => "angular-route1.6.5",
316
  "src" => "https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.5/angular-route.js",
317
  "priority" => 2
318
- )
319
  );
320
  }
321
 
@@ -329,7 +329,7 @@ class WpPerformance_Admin {
329
  array(
330
  "unique_name" => "angular-route1.6.5",
331
  "src" => "https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.5/angular-route.js"
332
- )
333
  );
334
  }
335
 
@@ -500,6 +500,28 @@ class WpPerformance_Admin {
500
 
501
  $prev_settings = get_option( WpPerformance::OPTION_KEY . '_settings', array() );
502
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
503
  $options = array(
504
  'disable_gravatars' => isset( $post_req['disable_gravatars'] ) ? 1 : 0,
505
  'disable_gravatars_only_comments' => isset( $post_req['disable_gravatars_only_comments'] ) ? 1 : 0,
@@ -645,6 +667,9 @@ class WpPerformance_Admin {
645
  'remove_yoast_breadcrumbs_duplicates' => 0,
646
  'default_ping_status' => 0,
647
  'disable_all_comments' => 0,
 
 
 
648
  'disable_author_pages' => 0,
649
  'disable_comments_on_certain_post_types' => 0,
650
  'disable_comments_on_post_types' => array(),
@@ -701,8 +726,7 @@ class WpPerformance_Admin {
701
  <?php } ?>
702
  <li data-tab-setting="tags"><?php esc_html_e('Tags', 'optimisationio'); ?></li>
703
  <li data-tab-setting="admin"><?php esc_html_e('Admin', 'optimisationio'); ?></li>
704
- <li data-tab-setting="seo"><?php esc_html_e('SEO', 'optimisationio'); ?></li>
705
- <li data-tab-setting="others"><?php esc_html_e('Others', 'optimisationio'); ?></li>
706
  <li data-tab-setting="rest-api"><?php esc_html_e('REST API', 'optimisationio'); ?></li>
707
  </ul>
708
  </div>
@@ -901,10 +925,22 @@ class WpPerformance_Admin {
901
  <div class="field-left"><?php esc_attr_e('Disable author pages', 'optimisationio'); ?></div>
902
  <div class="field-right"><?php Optimisationio_Dashboard::checkbox_component('disable_author_pages', isset( $sett['disable_author_pages'] ) && 1 === (int) $sett['disable_author_pages']); ?></div>
903
  </div>
 
 
 
 
 
 
 
 
 
 
 
904
  <div class="field">
905
  <div class="field-left"><?php esc_attr_e('Disable all comments', 'optimisationio'); ?></div>
906
  <div class="field-right"><?php Optimisationio_Dashboard::checkbox_component('disable_all_comments', isset( $sett['disable_all_comments'] ) && 1 === (int) $sett['disable_all_comments']); ?></div>
907
  </div>
 
908
  <div class="field sub-field comments-group">
909
  <div class="field-left"><?php esc_attr_e('Disable comments on certain post types', 'optimisationio'); ?></div>
910
  <div class="field-right"><?php Optimisationio_Dashboard::checkbox_component('disable_comments_on_certain_post_types', isset( $sett['disable_comments_on_certain_post_types'] ) && 1 === (int) $sett['disable_comments_on_certain_post_types']); ?></div>
@@ -995,7 +1031,8 @@ class WpPerformance_Admin {
995
  </div>
996
  </div>
997
 
998
- <div data-tab-setting="seo" class="addon-settings-content auto-table-layout">
 
999
  <div class="field">
1000
  <div class="field-left"><?php esc_attr_e('Remove Yoast SEO comment from head section', 'optimisationio'); ?></div>
1001
  <div class="field-right"><?php Optimisationio_Dashboard::checkbox_component('remove_yoast_comment', isset( $sett['remove_yoast_comment'] ) && 1 === (int) $sett['remove_yoast_comment']); ?></div>
@@ -1004,9 +1041,6 @@ class WpPerformance_Admin {
1004
  <div class="field-left"><?php esc_attr_e('Remove duplicate names in breadcrumbs WP SEO by Yoast', 'optimisationio'); ?></div>
1005
  <div class="field-right"><?php Optimisationio_Dashboard::checkbox_component('remove_yoast_breadcrumbs_duplicates', isset( $sett['remove_yoast_breadcrumbs_duplicates'] ) && 1 === (int) $sett['remove_yoast_breadcrumbs_duplicates']); ?></div>
1006
  </div>
1007
- </div>
1008
-
1009
- <div data-tab-setting="others" class="addon-settings-content auto-table-layout">
1010
  <div class="field">
1011
  <div class="field-left"><?php esc_attr_e('Disable pingbacks and trackbacks', 'optimisationio'); ?></div>
1012
  <div class="field-right"><?php Optimisationio_Dashboard::checkbox_component('default_ping_status', isset( $sett['default_ping_status'] ) && 1 === (int) $sett['default_ping_status']); ?></div>
24
  {
25
  wp_enqueue_style($single_external_font_to_load["unique_name"], $single_external_font_to_load["src"], array());
26
  }
27
+ }
28
 
29
  public function wp_performance_load_external_scripts($tag, $handle) {
30
  //var_dump($handle);
315
  "unique_name" => "angular-route1.6.5",
316
  "src" => "https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.5/angular-route.js",
317
  "priority" => 2
318
+ )
319
  );
320
  }
321
 
329
  array(
330
  "unique_name" => "angular-route1.6.5",
331
  "src" => "https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.5/angular-route.js"
332
+ )
333
  );
334
  }
335
 
500
 
501
  $prev_settings = get_option( WpPerformance::OPTION_KEY . '_settings', array() );
502
 
503
+ /////////////////////////////////
504
+ if (isset( $post_req['delete_all_comments'] ) || isset( $post_req['delete_all_pending_comments'] )) {
505
+
506
+ global $wpdb;
507
+ $c_all = $wpdb->query("SELECT comment_ID FROM $wpdb->comments");
508
+ $c_pend = $wpdb->query("SELECT comment_ID FROM $wpdb->comments WHERE comment_approved = '0'");
509
+
510
+ if( isset( $post_req['delete_all_comments'] ) ) {
511
+ if($wpdb->query("DELETE FROM $wpdb->comments") != FALSE)
512
+ {
513
+ $wpdb->query("DELETE FROM $wpdb->comments");
514
+ }
515
+ }
516
+
517
+ if (isset( $post_req['delete_all_pending_comments'] )) {
518
+ if($wpdb->query("DELETE FROM $wpdb->comments WHERE comment_approved = '0'") != FALSE) {
519
+ $wpdb->query("DELETE FROM $wpdb->comments WHERE comment_approved = '0'");
520
+ }
521
+ }
522
+ }
523
+ ////////////////////////////////
524
+
525
  $options = array(
526
  'disable_gravatars' => isset( $post_req['disable_gravatars'] ) ? 1 : 0,
527
  'disable_gravatars_only_comments' => isset( $post_req['disable_gravatars_only_comments'] ) ? 1 : 0,
667
  'remove_yoast_breadcrumbs_duplicates' => 0,
668
  'default_ping_status' => 0,
669
  'disable_all_comments' => 0,
670
+ 'delete_all_comments' => 0,
671
+ 'delete_all_pending_comments' => 0,
672
+
673
  'disable_author_pages' => 0,
674
  'disable_comments_on_certain_post_types' => 0,
675
  'disable_comments_on_post_types' => array(),
726
  <?php } ?>
727
  <li data-tab-setting="tags"><?php esc_html_e('Tags', 'optimisationio'); ?></li>
728
  <li data-tab-setting="admin"><?php esc_html_e('Admin', 'optimisationio'); ?></li>
729
+ <li data-tab-setting="others"><?php esc_html_e('SEO', 'optimisationio'); ?></li>
 
730
  <li data-tab-setting="rest-api"><?php esc_html_e('REST API', 'optimisationio'); ?></li>
731
  </ul>
732
  </div>
925
  <div class="field-left"><?php esc_attr_e('Disable author pages', 'optimisationio'); ?></div>
926
  <div class="field-right"><?php Optimisationio_Dashboard::checkbox_component('disable_author_pages', isset( $sett['disable_author_pages'] ) && 1 === (int) $sett['disable_author_pages']); ?></div>
927
  </div>
928
+
929
+ <div class="field">
930
+ <div class="field-left"><?php esc_attr_e('Delete all Comments', 'optimisationio'); ?></div>
931
+ <div class="field-right"><?php Optimisationio_Dashboard::checkbox_component('delete_all_comments', isset( $sett['delete_all_comments'] ) && 1 === (int) $sett['delete_all_comments']); ?></div>
932
+ </div>
933
+
934
+ <div class="field">
935
+ <div class="field-left"><?php esc_attr_e('Delete all pending Comments', 'optimisationio'); ?></div>
936
+ <div class="field-right"><?php Optimisationio_Dashboard::checkbox_component('delete_all_pending_comments', isset( $sett['delete_all_pending_comments'] ) && 1 === (int) $sett['delete_all_pending_comments']); ?></div>
937
+ </div>
938
+
939
  <div class="field">
940
  <div class="field-left"><?php esc_attr_e('Disable all comments', 'optimisationio'); ?></div>
941
  <div class="field-right"><?php Optimisationio_Dashboard::checkbox_component('disable_all_comments', isset( $sett['disable_all_comments'] ) && 1 === (int) $sett['disable_all_comments']); ?></div>
942
  </div>
943
+
944
  <div class="field sub-field comments-group">
945
  <div class="field-left"><?php esc_attr_e('Disable comments on certain post types', 'optimisationio'); ?></div>
946
  <div class="field-right"><?php Optimisationio_Dashboard::checkbox_component('disable_comments_on_certain_post_types', isset( $sett['disable_comments_on_certain_post_types'] ) && 1 === (int) $sett['disable_comments_on_certain_post_types']); ?></div>
1031
  </div>
1032
  </div>
1033
 
1034
+
1035
+ <div data-tab-setting="others" class="addon-settings-content auto-table-layout">
1036
  <div class="field">
1037
  <div class="field-left"><?php esc_attr_e('Remove Yoast SEO comment from head section', 'optimisationio'); ?></div>
1038
  <div class="field-right"><?php Optimisationio_Dashboard::checkbox_component('remove_yoast_comment', isset( $sett['remove_yoast_comment'] ) && 1 === (int) $sett['remove_yoast_comment']); ?></div>
1041
  <div class="field-left"><?php esc_attr_e('Remove duplicate names in breadcrumbs WP SEO by Yoast', 'optimisationio'); ?></div>
1042
  <div class="field-right"><?php Optimisationio_Dashboard::checkbox_component('remove_yoast_breadcrumbs_duplicates', isset( $sett['remove_yoast_breadcrumbs_duplicates'] ) && 1 === (int) $sett['remove_yoast_breadcrumbs_duplicates']); ?></div>
1043
  </div>
 
 
 
1044
  <div class="field">
1045
  <div class="field-left"><?php esc_attr_e('Disable pingbacks and trackbacks', 'optimisationio'); ?></div>
1046
  <div class="field-right"><?php Optimisationio_Dashboard::checkbox_component('default_ping_status', isset( $sett['default_ping_status'] ) && 1 === (int) $sett['default_ping_status']); ?></div>
readme.txt CHANGED
@@ -1,15 +1,15 @@
1
  === Reduce HTTP Requests, Disable Emojis & Disable Embeds, Speedup WooCommerce ===
2
  Contributors: optimisation.io, hosting.io
3
- Tags: Disable Emoji, Disable Embeds, Disable Gravatars, Remove Querystrings, Reduce HTTP Requests, speedup WooCommerce, Close comments, Optimization
4
  Requires at least: 4.5
5
- Tested up to: 4.9
6
- Stable tag: 1.5.19
7
  License: GPLv2 or later
8
  License URI: https://www.gnu.org/licenses/gpl-2.0.html
9
 
10
  Reduce HTTP requests - Disable Emojis, Disable Gravatars, Disable Embeds and Remove Querystrings. SpeedUp WooCommerce, Added support to disable pingbacks, disable trackbacks, close comments after 28 days, Added the ability to force pagingation after 20 posts,
11
  Disable WooCommerce scripts and CSS on non WooCommerce Pages, Disable RSS, Disable XML-RPC, Disable Autosave, Remove Windows Live Writer tag, Remove Shortlink Tag, Remove WP API from header and
12
- many more features to help speed and SEO gains.
13
 
14
  == Description ==
15
  <strong>Reduce HTTP requests</strong> - Disable Emojis, Disable Gravatars, Disable Embeds and Remove Querystrings. SpeedUp WooCommerce, Added support to disable pingbacks, disable trackbacks, close comments after 28 days, Added the ability to force pagingation after 20 posts,
@@ -59,6 +59,7 @@ This section describes how to install the plugin and get it working.
59
  = Do I still need caching ? =
60
 
61
  Yes, We have just release a <a href="https://wordpress.org/plugins/cache-performance/">WordPress Caching plugin</a> which is really easy to setup and includes a built in CD-rewrite rule system.<br>
 
62
 
63
  = What about Minification, do I still need it? =
64
 
@@ -66,8 +67,7 @@ Yes, you absolutely do, and none come close to the awesome <a href="https://en-g
66
 
67
  = Do I still need a CDN ? =
68
 
69
- Yes, WarpCache is our recommended choice for the ultimate in flexibility and performance. <br>
70
- We will soon be adding a free CDN for css/js for all users that is integrated with just an "on/off" switch in the plugin and no setup.
71
 
72
  = What about my Image Compression =
73
 
@@ -81,6 +81,15 @@ You can try our <a href="https://wordpress.org/plugins/wp-image-compression/">Fr
81
 
82
 
83
  == Changelog ==
 
 
 
 
 
 
 
 
 
84
  = 1.5.19 =
85
  * IMPORTANT -- please disable and then update the plugin to enable the auto update to work. Something went wrong with the last update and it seems to be fo
86
  * Freemius Removed
@@ -100,7 +109,7 @@ You can try our <a href="https://wordpress.org/plugins/wp-image-compression/">Fr
100
  * Minor CSS _updates
101
  * Bug fix with DNS-prefetch
102
  * Fixed conflicts with other optimisation.io Plugins
103
- * New fetaure - Disable Gravatars only in Comments
104
 
105
 
106
  = 1.5.14 =
@@ -119,7 +128,7 @@ You can try our <a href="https://wordpress.org/plugins/wp-image-compression/">Fr
119
  = 1.5.13 =
120
  * Added Settings link on main Installed Plugin view
121
  * General code tidy up
122
- * PHP 7.1 compatabile
123
  * WP 4.8.2 tested
124
 
125
  = 1.5.12 =
@@ -131,8 +140,8 @@ You can try our <a href="https://wordpress.org/plugins/wp-image-compression/">Fr
131
  * WooCommerce tab not displaying fixed
132
 
133
  = 1.5.1 =
134
- * More visual cleanups
135
- * Removed all webfonts
136
  * Minor bug fix on reporting on dashboard
137
  * Plugin is now under 240kb
138
 
@@ -140,7 +149,7 @@ You can try our <a href="https://wordpress.org/plugins/wp-image-compression/">Fr
140
  * Finished redesign of plugin
141
  * All stats now in one central dashboard
142
  * Removed sidebar navigation completely
143
- * Remobed Freemius
144
  * Added check for WooCommerce, so Woo related stuff only shows if Woo is installed
145
  * Much tighter integration between the 3 optimisation plugins
146
  * Removed old/excess files
1
  === Reduce HTTP Requests, Disable Emojis & Disable Embeds, Speedup WooCommerce ===
2
  Contributors: optimisation.io, hosting.io
3
+ Tags: Disable Emoji, Disable Embeds, Disable Gravatars, Remove Querystrings, Reduce HTTP Requests, speedup WooCommerce, Close comments, Optimization, FREE CDN
4
  Requires at least: 4.5
5
+ Tested up to: 4.9.8
6
+ Stable tag: 1.5.21
7
  License: GPLv2 or later
8
  License URI: https://www.gnu.org/licenses/gpl-2.0.html
9
 
10
  Reduce HTTP requests - Disable Emojis, Disable Gravatars, Disable Embeds and Remove Querystrings. SpeedUp WooCommerce, Added support to disable pingbacks, disable trackbacks, close comments after 28 days, Added the ability to force pagingation after 20 posts,
11
  Disable WooCommerce scripts and CSS on non WooCommerce Pages, Disable RSS, Disable XML-RPC, Disable Autosave, Remove Windows Live Writer tag, Remove Shortlink Tag, Remove WP API from header and
12
+ many more features to help speed and SEO gains. Free CDN now included in cache addon.
13
 
14
  == Description ==
15
  <strong>Reduce HTTP requests</strong> - Disable Emojis, Disable Gravatars, Disable Embeds and Remove Querystrings. SpeedUp WooCommerce, Added support to disable pingbacks, disable trackbacks, close comments after 28 days, Added the ability to force pagingation after 20 posts,
59
  = Do I still need caching ? =
60
 
61
  Yes, We have just release a <a href="https://wordpress.org/plugins/cache-performance/">WordPress Caching plugin</a> which is really easy to setup and includes a built in CD-rewrite rule system.<br>
62
+ Now also comes with a free cdn
63
 
64
  = What about Minification, do I still need it? =
65
 
67
 
68
  = Do I still need a CDN ? =
69
 
70
+ Yes, Our Cache plugin now comes with a free CDN. <br>
 
71
 
72
  = What about my Image Compression =
73
 
81
 
82
 
83
  == Changelog ==
84
+ = 1.5.21 =
85
+ * New setting to delete all comments completely, great for existing sites that have a lot of old spam comments, but want to turn them off and clean up the database at the same time.
86
+ * Can be found under Admin in Remove Excess Bloat area
87
+
88
+ = 1.5.20 =
89
+ * Added a note on dashboard about what to look for to disable our plugins. People have started leaving negative feedback cause can't remember what they installed. Hopefully, this clears it up
90
+ * Removed donation Requests
91
+ * Few other small bugs fixed
92
+
93
  = 1.5.19 =
94
  * IMPORTANT -- please disable and then update the plugin to enable the auto update to work. Something went wrong with the last update and it seems to be fo
95
  * Freemius Removed
109
  * Minor CSS _updates
110
  * Bug fix with DNS-prefetch
111
  * Fixed conflicts with other optimisation.io Plugins
112
+ * New feature - Disable Gravatars only in Comments
113
 
114
 
115
  = 1.5.14 =
128
  = 1.5.13 =
129
  * Added Settings link on main Installed Plugin view
130
  * General code tidy up
131
+ * PHP 7.1 compatible
132
  * WP 4.8.2 tested
133
 
134
  = 1.5.12 =
140
  * WooCommerce tab not displaying fixed
141
 
142
  = 1.5.1 =
143
+ * More visual clean-ups
144
+ * Removed all web fonts
145
  * Minor bug fix on reporting on dashboard
146
  * Plugin is now under 240kb
147
 
149
  * Finished redesign of plugin
150
  * All stats now in one central dashboard
151
  * Removed sidebar navigation completely
152
+ * Removed Freemius
153
  * Added check for WooCommerce, so Woo related stuff only shows if Woo is installed
154
  * Much tighter integration between the 3 optimisation plugins
155
  * Removed old/excess files
tracking/class-example-settings.php DELETED
@@ -1,169 +0,0 @@
1
- <?php
2
- /**
3
- * Discussion Board admin class
4
- */
5
-
6
- // Exit if accessed directly
7
- if ( ! defined( 'ABSPATH' ) ) {
8
- exit;
9
- }
10
-
11
- /**
12
- * Plugin admin class
13
- **/
14
- if ( ! class_exists ( 'PUT_Example_Settings' ) ) { // Don't initialise if there's already a Discussion Board activated
15
-
16
- class PUT_Example_Settings {
17
-
18
- public function __construct() {
19
- //
20
- }
21
-
22
- /*
23
- * Initialize the class and start calling our hooks and filters
24
- * @since 1.0.0
25
- */
26
- public function init() {
27
- add_action ( 'admin_menu', array ( $this, 'add_settings_submenu' ) );
28
- add_action ( 'admin_init', array ( $this, 'register_options_init' ) );
29
- add_action ( 'admin_init', array ( $this, 'save_registered_setting' ) );
30
- }
31
-
32
- /**
33
- * We save this artificially to let the tracker know that we're allowed to export this option's data
34
- */
35
- public function save_registered_setting() {
36
- $options = get_option( 'wisdom_example_options_settings' );
37
- $options['wisdom_registered_setting'] = 1;
38
- update_option( 'wisdom_example_options_settings', $options );
39
- }
40
-
41
- // Add the menu item
42
- public function add_settings_submenu() {
43
- add_submenu_page( 'options-general.php', __( 'Example Settings', 'plugin-usage-tracker' ), __( 'Example Settings', 'plugin-usage-tracker' ), 'manage_options', 'example-settings-page', array ( $this, 'options_page' ) );
44
- }
45
-
46
- public function register_options_init() {
47
-
48
- register_setting ( 'wisdom_example_options', 'wisdom_example_options_settings' );
49
-
50
- add_settings_section (
51
- 'wisdom_example_options_section',
52
- __( 'Example Settings', 'plugin-usage-tracker' ),
53
- array ( $this, 'example_settings_section_callback' ),
54
- 'wisdom_example_options'
55
- );
56
- add_settings_field (
57
- 'text_field_example',
58
- __( 'Text field:', 'plugin-usage-tracker' ),
59
- array ( $this, 'text_field_example_render' ),
60
- 'wisdom_example_options',
61
- 'wisdom_example_options_section'
62
- );
63
- add_settings_field (
64
- 'checkbox_example',
65
- __( 'Checkbox', 'plugin-usage-tracker' ),
66
- array ( $this, 'checkbox_example_render' ),
67
- 'wisdom_example_options',
68
- 'wisdom_example_options_section'
69
- );
70
- add_settings_field (
71
- 'select_example',
72
- __( 'Select', 'plugin-usage-tracker' ),
73
- array ( $this, 'select_example_render' ),
74
- 'wisdom_example_options',
75
- 'wisdom_example_options_section'
76
- );
77
- add_settings_field (
78
- 'wisdom_opt_out',
79
- __( 'Opt out', 'plugin-usage-tracker' ),
80
- array ( $this, 'opt_out_example_render' ),
81
- 'wisdom_example_options',
82
- 'wisdom_example_options_section'
83
- );
84
-
85
- // Set default options
86
- $options = get_option( 'wisdom_example_options_settings' );
87
- if ( false === $options ) {
88
- // Get defaults
89
- $defaults = $this->get_default_options_settings();
90
- update_option( 'wisdom_example_options_settings', $defaults );
91
- }
92
-
93
- }
94
-
95
- public function get_default_options_settings() {
96
- $defaults = array(
97
- 'text_field_example' => __( 'Default setting', 'plugin-usage-tracker' ),
98
- 'checkbox_example' => 1,
99
- 'select_example' => 'option-1',
100
- 'wisdom_opt_out' => '',
101
- 'wisdom_registered_setting' => 1 // For plugin-usage-tracker
102
- );
103
- return $defaults;
104
- }
105
-
106
- public function text_field_example_render() {
107
- $options = get_option( 'wisdom_example_options_settings' );
108
- $value = '';
109
- if( isset( $options['text_field_example'] ) ) {
110
- $value = $options['text_field_example'];
111
- }
112
- ?>
113
- <input type='text' name='wisdom_example_options_settings[text_field_example]' value="<?php echo $value; ?>" />
114
- <?php
115
- }
116
-
117
- public function checkbox_example_render() {
118
- $options = get_option( 'wisdom_example_options_settings' );
119
- ?>
120
- <input type='checkbox' name='wisdom_example_options_settings[checkbox_example]' <?php checked ( ! empty ( $options['checkbox_example'] ), 1 ); ?> value='1'>
121
- <?php
122
- }
123
-
124
- public function opt_out_example_render() {
125
- $options = get_option( 'wisdom_example_options_settings' );
126
- ?>
127
- <input type='checkbox' name='wisdom_example_options_settings[wisdom_opt_out]' <?php checked ( ! empty ( $options['wisdom_opt_out'] ), 1 ); ?> value='1'>
128
- <p class="description"><?php _e( 'You previously opted in to sending tracking details. You can change that setting here.', 'plugin-usage-tracker' ); ?></p>
129
- <?php
130
- }
131
-
132
- public function select_example_render() {
133
- $options = get_option( 'wisdom_example_options_settings' );
134
- $value = '';
135
- if( isset( $options['select_example'] ) ) {
136
- $value = $options['select_example'];
137
- }
138
- ?>
139
- <select name='wisdom_example_options_settings[select_example]'>
140
- <option value="option-1" <?php selected( esc_attr( $value ), 'option-1' ); ?>><?php _e( 'Option 1', 'plugin-usage-tracker' ); ?></option>
141
- <option value="option-2" <?php selected( esc_attr( $value ), 'option-2' ); ?>><?php _e( 'Option 2', 'plugin-usage-tracker' ); ?></option>
142
- <option value="option-3" <?php selected( esc_attr( $value ), 'option-3' ); ?>><?php _e( 'Option 3', 'plugin-usage-tracker' ); ?></option>
143
- </select>
144
- <?php
145
- }
146
-
147
- public function example_settings_section_callback() {
148
- echo '<p>' . __( 'These settings are for example only.', 'plugin-usage-tracker' ) . '</p>';
149
- }
150
-
151
- public function options_page() { ?>
152
- <div class="wrap">
153
- <form action='options.php' method='post'>
154
- <?php
155
- settings_fields( 'wisdom_example_options' );
156
- do_settings_sections( 'wisdom_example_options' );
157
- submit_button();
158
- ?>
159
- </form>
160
- </div><!-- .wrap -->
161
- <?php
162
- }
163
-
164
- }
165
-
166
- }
167
-
168
- $PUT_Example_Settings = new PUT_Example_Settings();
169
- $PUT_Example_Settings -> init();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
tracking/class-plugin-usage-tracker.php DELETED
@@ -1,1072 +0,0 @@
1
- <?php
2
- /**
3
- * This is the class that sends all the data back to the home site
4
- * It also handles opting in and deactivation
5
- * @version 1.2.4
6
- */
7
-
8
- // Exit if accessed directly
9
- if ( ! defined( 'ABSPATH' ) ) {
10
- exit;
11
- }
12
-
13
- if( ! class_exists( 'Plugin_Usage_Tracker') ) {
14
-
15
- class Plugin_Usage_Tracker {
16
-
17
- private $wisdom_version = '1.2.4';
18
- private $home_url = '';
19
- private $plugin_file = '';
20
- private $plugin_name = '';
21
- private $options = array();
22
- private $require_optin = true;
23
- private $include_goodbye_form = true;
24
- private $marketing = false;
25
- private $collect_email = false;
26
- private $what_am_i = 'plugin';
27
- private $theme_allows_tracking = 0;
28
-
29
- /**
30
- * Class constructor
31
- *
32
- * @param $_home_url The URL to the site we're sending data to
33
- * @param $_plugin_file The file path for this plugin
34
- * @param $_options Plugin options to track
35
- * @param $_require_optin Whether user opt-in is required (always required on WordPress.org)
36
- * @param $_include_goodbye_form Whether to include a form when the user deactivates
37
- * @param $_marketing Marketing method:
38
- * 0: Don't collect email addresses
39
- * 1: Request permission same time as tracking opt-in
40
- * 2: Request permission after opt-in
41
- */
42
- public function __construct(
43
- $_plugin_file,
44
- $_home_url,
45
- $_options,
46
- $_require_optin=true,
47
- $_include_goodbye_form=true,
48
- $_marketing=false ) {
49
-
50
- $this->plugin_file = $_plugin_file;
51
- $this->home_url = trailingslashit( $_home_url );
52
-
53
- // If the filename is 'functions' then we're tracking a theme
54
- if( basename( $this->plugin_file, '.php' ) != 'functions' ) {
55
- $this->plugin_name = basename( $this->plugin_file, '.php' );
56
- } else {
57
- $this->what_am_i = 'theme';
58
- $theme = wp_get_theme();
59
- if( $theme->Name ) {
60
- $this->plugin_name = sanitize_text_field( $theme->Name );
61
- }
62
- }
63
-
64
- $this->options = $_options;
65
- $this->require_optin = $_require_optin;
66
- $this->include_goodbye_form = $_include_goodbye_form;
67
- $this->marketing = $_marketing;
68
-
69
- // Only use this on switching theme
70
- $this->theme_allows_tracking = get_theme_mod( 'wisdom-allow-tracking', 0 );
71
-
72
- // Schedule / deschedule tracking when activated / deactivated
73
- if( $this->what_am_i == 'theme' ) {
74
- // Need to think about scheduling for sites that have already activated the theme
75
- add_action( 'after_switch_theme', array( $this, 'schedule_tracking' ) );
76
- add_action( 'switch_theme', array( $this, 'deactivate_this_plugin' ) );
77
- } else {
78
- register_activation_hook( $this->plugin_file, array( $this, 'schedule_tracking' ) );
79
- register_deactivation_hook( $this->plugin_file, array( $this, 'deactivate_this_plugin' ) );
80
- }
81
-
82
- // Get it going
83
- $this->init();
84
-
85
- }
86
-
87
- public function init() {
88
- // Check marketing
89
- if( $this->marketing == 3 ) {
90
- $this->set_can_collect_email( true, $this->plugin_name );
91
- }
92
-
93
- // Check whether opt-in is required
94
- // If not, then tracking is allowed
95
- if( ! $this->require_optin ) {
96
- $this->set_can_collect_email( true, $this->plugin_name );
97
- $this->set_is_tracking_allowed( true );
98
- $this->update_block_notice();
99
- $this->do_tracking();
100
- }
101
-
102
- // Hook our do_tracking function to the weekly action
103
- add_filter( 'cron_schedules', array( $this, 'schedule_weekly_event' ) );
104
- // It's called weekly, but in fact it could be daily, weekly or monthly
105
- add_action( 'put_do_weekly_action', array( $this, 'do_tracking' ) );
106
-
107
- // Use this action for local testing
108
- // add_action( 'admin_init', array( $this, 'do_tracking' ) );
109
-
110
- // Display the admin notice on activation
111
- add_action( 'admin_init', array( $this, 'set_notification_time' ) );
112
- add_action( 'admin_notices', array( $this, 'optin_notice' ) );
113
- add_action( 'admin_notices', array( $this, 'marketing_notice' ) );
114
-
115
- // Deactivation
116
- add_filter( 'plugin_action_links_' . plugin_basename( $this->plugin_file ), array( $this, 'filter_action_links' ) );
117
- add_action( 'admin_footer-plugins.php', array( $this, 'goodbye_ajax' ) );
118
- add_action( 'wp_ajax_goodbye_form', array( $this, 'goodbye_form_callback' ) );
119
-
120
- }
121
-
122
- /**
123
- * When the plugin is activated
124
- * Create scheduled event
125
- * And check if tracking is enabled - perhaps the plugin has been reactivated
126
- *
127
- * @since 1.0.0
128
- */
129
- public function schedule_tracking() {
130
- if ( ! wp_next_scheduled( 'put_do_weekly_action' ) ) {
131
- $schedule = $this->get_schedule();
132
- wp_schedule_event( time(), $schedule, 'put_do_weekly_action' );
133
- }
134
- $this->do_tracking( true );
135
- }
136
-
137
- /**
138
- * Create weekly schedule
139
- *
140
- * @since 1.2.3
141
- */
142
- public function schedule_weekly_event( $schedules ) {
143
- $schedules['weekly'] = array(
144
- 'interval' => 604800,
145
- 'display' => __( 'Once Weekly' )
146
- );
147
- $schedules['monthly'] = array(
148
- 'interval' => 2635200,
149
- 'display' => __( 'Once Monthly' )
150
- );
151
- return $schedules;
152
- }
153
-
154
- /**
155
- * Get how frequently data is tracked back
156
- *
157
- * @since 1.2.3
158
- */
159
- public function get_schedule() {
160
- // Could be daily, weekly or monthly
161
- $schedule = apply_filters( 'wisdom_filter_schedule_' . $this->plugin_name, 'monthly' );
162
- return $schedule;
163
- }
164
-
165
- /**
166
- * This is our function to get everything going
167
- * Check that user has opted in
168
- * Collect data
169
- * Then send it back
170
- *
171
- * @since 1.0.0
172
- * @param $force Force tracking if it's not time
173
- */
174
- public function do_tracking( $force=false ) {
175
-
176
- // If the home site hasn't been defined, we just drop out. Nothing much we can do.
177
- if ( ! $this->home_url ) {
178
- return;
179
- }
180
-
181
- // Check to see if the user has opted in to tracking
182
- $allow_tracking = $this->get_is_tracking_allowed();
183
- if( ! $allow_tracking ) {
184
- return;
185
- }
186
-
187
- // Check to see if it's time to track
188
- $track_time = $this->get_is_time_to_track();
189
- if( ! $track_time && ! $force ) {
190
- return;
191
- }
192
-
193
- $this->set_admin_email();
194
-
195
- // Get our data
196
- $body = $this->get_data();
197
-
198
- // Send the data
199
- $this->send_data( $body );
200
-
201
- }
202
-
203
- /**
204
- * We hook this to admin_init when the user accepts tracking
205
- * Ensures the email address is available
206
- *
207
- * @since 1.2.1
208
- */
209
- public function force_tracking() {
210
- $this->do_tracking( true ); // Run this straightaway
211
- }
212
-
213
- /**
214
- * Send the data to the home site
215
- *
216
- * @since 1.0.0
217
- */
218
- public function send_data( $body ) {
219
-
220
- $request = wp_remote_post(
221
- esc_url( $this->home_url . '?usage_tracker=hello' ),
222
- array(
223
- 'method' => 'POST',
224
- 'timeout' => 20,
225
- 'redirection' => 5,
226
- 'httpversion' => '1.1',
227
- 'blocking' => true,
228
- 'body' => $body,
229
- 'user-agent' => 'PUT/1.0.0; ' . home_url()
230
- )
231
- );
232
-
233
- $this->set_track_time();
234
-
235
- if( is_wp_error( $request ) ) {
236
- return $request;
237
- }
238
-
239
- }
240
-
241
- /**
242
- * Here we collect most of the data
243
- *
244
- * @since 1.0.0
245
- */
246
- public function get_data() {
247
-
248
- // Use this to pass error messages back if necessary
249
- $body['message'] = '';
250
-
251
- // Use this array to send data back
252
- $body = array(
253
- 'plugin_slug' => sanitize_text_field( $this->plugin_name ),
254
- 'url' => home_url(),
255
- 'site_name' => get_bloginfo( 'name' ),
256
- 'site_version' => get_bloginfo( 'version' ),
257
- 'site_language' => get_bloginfo( 'language' ),
258
- 'charset' => get_bloginfo( 'charset' ),
259
- 'wisdom_version' => $this->wisdom_version,
260
- 'php_version' => phpversion(),
261
- 'multisite' => is_multisite(),
262
- 'file_location' => __FILE__,
263
- 'product_type' => esc_html( $this->what_am_i )
264
- );
265
-
266
- // Collect the email if the correct option has been set
267
- if( $this->get_can_collect_email() ) {
268
- $body['email'] = $this->get_admin_email();
269
- }
270
- $body['marketing_method'] = $this->marketing;
271
-
272
- $body['server'] = isset( $_SERVER['SERVER_SOFTWARE'] ) ? $_SERVER['SERVER_SOFTWARE'] : '';
273
-
274
- // Retrieve current plugin information
275
- if( ! function_exists( 'get_plugins' ) ) {
276
- include ABSPATH . '/wp-admin/includes/plugin.php';
277
- }
278
-
279
- $plugins = array_keys( get_plugins() );
280
- $active_plugins = get_option( 'active_plugins', array() );
281
-
282
- foreach ( $plugins as $key => $plugin ) {
283
- if ( in_array( $plugin, $active_plugins ) ) {
284
- // Remove active plugins from list so we can show active and inactive separately
285
- unset( $plugins[$key] );
286
- }
287
- }
288
-
289
- $body['active_plugins'] = $active_plugins;
290
- $body['inactive_plugins'] = $plugins;
291
-
292
- // Check text direction
293
- $body['text_direction'] = 'LTR';
294
- if( function_exists( 'is_rtl' ) ) {
295
- if( is_rtl() ) {
296
- $body['text_direction'] = 'RTL';
297
- }
298
- } else {
299
- $body['text_direction'] = 'not set';
300
- }
301
-
302
- /**
303
- * Get our plugin data
304
- * Currently we grab plugin name and version
305
- * Or, return a message if the plugin data is not available
306
- * @since 1.0.0
307
- */
308
- $plugin = $this->plugin_data();
309
- $body['status'] = 'Active'; // Never translated
310
- if( empty( $plugin ) ) {
311
- // We can't find the plugin data
312
- // Send a message back to our home site
313
- $body['message'] .= __( 'We can\'t detect any product information. This is most probably because you have not included the code snippet.', 'singularity' );
314
- $body['status'] = 'Data not found'; // Never translated
315
- } else {
316
- if( isset( $plugin['Name'] ) ) {
317
- $body['plugin'] = sanitize_text_field( $plugin['Name'] );
318
- }
319
- if( isset( $plugin['Version'] ) ) {
320
- $body['version'] = sanitize_text_field( $plugin['Version'] );
321
- }
322
-
323
- }
324
-
325
- /**
326
- * Get our plugin options
327
- * @since 1.0.0
328
- */
329
- $options = $this->options;
330
- $plugin_options = array();
331
- if( ! empty( $options ) && is_array( $options ) ) {
332
- foreach( $options as $option ) {
333
- $fields = get_option( $option );
334
- // Check for permission to send this option
335
- if( isset( $fields['wisdom_registered_setting'] ) ) {
336
- foreach( $fields as $key=>$value ) {
337
- $plugin_options[$key] = $value;
338
- }
339
- }
340
- }
341
- }
342
- $body['plugin_options'] = $this->options; // Returns array
343
- $body['plugin_options_fields'] = $plugin_options; // Returns object
344
-
345
- /**
346
- * Get our theme data
347
- * Currently we grab theme name and version
348
- * @since 1.0.0
349
- */
350
- $theme = wp_get_theme();
351
- if( $theme->Name ) {
352
- $body['theme'] = sanitize_text_field( $theme->Name );
353
- }
354
- if( $theme->Version ) {
355
- $body['theme_version'] = sanitize_text_field( $theme->Version );
356
- }
357
- if( $theme->Template ) {
358
- $body['theme_parent'] = sanitize_text_field( $theme->Template );
359
- }
360
-
361
- // Return the data
362
- return $body;
363
-
364
- }
365
-
366
- /**
367
- * Return plugin data
368
- * @since 1.0.0
369
- */
370
- public function plugin_data() {
371
- // Being cautious here
372
- if( ! function_exists( 'get_plugin_data' ) ) {
373
- include ABSPATH . '/wp-admin/includes/plugin.php';
374
- }
375
- // Retrieve current plugin information
376
- $plugin = get_plugin_data( $this->plugin_file );
377
- return $plugin;
378
- }
379
-
380
- /**
381
- * Deactivating plugin
382
- * @since 1.0.0
383
- */
384
- public function deactivate_this_plugin() {
385
- // Check to see if the user has opted in to tracking
386
- if( $this->what_am_i == 'theme' ) {
387
- $allow_tracking = $this->theme_allows_tracking;
388
- } else {
389
- $allow_tracking = $this->get_is_tracking_allowed();
390
- }
391
-
392
- if( ! $allow_tracking ) {
393
- return;
394
- }
395
-
396
- $body = $this->get_data();
397
- $body['status'] = 'Deactivated'; // Never translated
398
- $body['deactivated_date'] = time();
399
-
400
- // Add deactivation form data
401
- if( false !== get_option( 'wisdom_deactivation_reason_' . $this->plugin_name ) ) {
402
- $body['deactivation_reason'] = get_option( 'wisdom_deactivation_reason_' . $this->plugin_name );
403
- }
404
- if( false !== get_option( 'wisdom_deactivation_details_' . $this->plugin_name ) ) {
405
- $body['deactivation_details'] = get_option( 'wisdom_deactivation_details_' . $this->plugin_name );
406
- }
407
-
408
- $this->send_data( $body );
409
- // Clear scheduled update
410
- wp_clear_scheduled_hook( 'put_do_weekly_action' );
411
-
412
- // Clear the wisdom_last_track_time value for this plugin
413
- // @since 1.2.2
414
- $track_time = get_option( 'wisdom_last_track_time' );
415
- if( isset( $track_time[$this->plugin_name]) ) {
416
- unset( $track_time[$this->plugin_name] );
417
- }
418
- update_option( 'wisdom_last_track_time', $track_time );
419
-
420
- }
421
-
422
- /**
423
- * Is tracking allowed?
424
- * @since 1.0.0
425
- */
426
- public function get_is_tracking_allowed() {
427
-
428
- // First, check if the user has changed their mind and opted out of tracking
429
- if( $this->has_user_opted_out() ) {
430
- $this->set_is_tracking_allowed( false, $this->plugin_name );
431
- return false;
432
- }
433
-
434
- if( $this->what_am_i == 'theme' ) {
435
-
436
- $mod = get_theme_mod( 'wisdom-allow-tracking', 0 );
437
- if( $mod ) {
438
- return true;
439
- }
440
-
441
- } else {
442
-
443
- // The wisdom_allow_tracking option is an array of plugins that are being tracked
444
- $allow_tracking = get_option( 'wisdom_allow_tracking' );
445
- // If this plugin is in the array, then tracking is allowed
446
- if( isset( $allow_tracking[$this->plugin_name] ) ) {
447
- return true;
448
- }
449
-
450
- }
451
-
452
- return false;
453
- }
454
-
455
- /**
456
- * Set if tracking is allowed
457
- * Option is an array of all plugins with tracking permitted
458
- * More than one plugin may be using the tracker
459
- * @since 1.0.0
460
- * @param $is_allowed Boolean true if tracking is allowed, false if not
461
- */
462
- public function set_is_tracking_allowed( $is_allowed, $plugin=null ) {
463
-
464
- if( empty( $plugin ) ) {
465
- $plugin = $this->plugin_name;
466
- }
467
-
468
- // The wisdom_allow_tracking option is an array of plugins that are being tracked
469
- $allow_tracking = get_option( 'wisdom_allow_tracking' );
470
-
471
- // If the user has decided to opt out
472
- if( $this->has_user_opted_out() ) {
473
- if( $this->what_am_i == 'theme' ) {
474
- set_theme_mod( 'wisdom-allow-tracking', 0 );
475
- } else {
476
- if( isset( $allow_tracking[$plugin] ) ) {
477
- unset( $allow_tracking[$plugin] );
478
- }
479
- }
480
-
481
- } else if( $is_allowed || ! $this->require_optin ) {
482
- // If the user has agreed to allow tracking or if opt-in is not required
483
-
484
- if( $this->what_am_i == 'theme' ) {
485
- set_theme_mod( 'wisdom-allow-tracking', 1 );
486
- } else {
487
- if( empty( $allow_tracking ) || ! is_array( $allow_tracking ) ) {
488
- // If nothing exists in the option yet, start a new array with the plugin name
489
- $allow_tracking = array( $plugin => $plugin );
490
- } else {
491
- // Else add the plugin name to the array
492
- $allow_tracking[$plugin] = $plugin;
493
- }
494
- }
495
-
496
- } else {
497
-
498
- if( $this->what_am_i == 'theme' ) {
499
- set_theme_mod( 'wisdom-allow-tracking', 0 );
500
- } else {
501
- if( isset( $allow_tracking[$plugin] ) ) {
502
- unset( $allow_tracking[$plugin] );
503
- }
504
- }
505
-
506
- }
507
-
508
- update_option( 'wisdom_allow_tracking', $allow_tracking );
509
-
510
- }
511
-
512
- /**
513
- * Has the user opted out of allowing tracking?
514
- * Note that themes are opt in / plugins are opt out
515
- * @since 1.1.0
516
- * @return Boolean
517
- */
518
- public function has_user_opted_out() {
519
- // Different opt-out methods for plugins and themes
520
- if( $this->what_am_i == 'theme' ) {
521
- // Look for the theme mod
522
- $mod = get_theme_mod( 'wisdom-allow-tracking', 0 );
523
- if( false === $mod ) {
524
- // If the theme mod is not set, then return true - the user has opted out
525
- return true;
526
- }
527
- } else {
528
- // Iterate through the options that are being tracked looking for wisdom_opt_out setting
529
- if( ! empty( $this->options ) ) {
530
- foreach( $this->options as $option_name ) {
531
- // Check each option
532
- $options = get_option( $option_name );
533
- // If we find the setting, return true
534
- if( ! empty( $options['wisdom_opt_out'] ) ) {
535
- return true;
536
- }
537
- }
538
- }
539
- }
540
- return false;
541
- }
542
-
543
- /**
544
- * Check if it's time to track
545
- * @since 1.1.1
546
- */
547
- public function get_is_time_to_track() {
548
- // Let's see if we're due to track this plugin yet
549
- $track_times = get_option( 'wisdom_last_track_time', array() );
550
- if( ! isset( $track_times[$this->plugin_name] ) ) {
551
- // If we haven't set a time for this plugin yet, then we must track it
552
- return true;
553
- } else {
554
- // If the time is set, let's get our schedule and check if it's time to track
555
- $schedule = $this->get_schedule();
556
- if( $schedule == 'daily' ) {
557
- $period = 'day';
558
- } else if( $schedule == 'weekly' ) {
559
- $period = 'week';
560
- } else {
561
- $period = 'month';
562
- }
563
- if( $track_times[$this->plugin_name] < strtotime( '-1 ' . $period ) ) {
564
- return true;
565
- }
566
- }
567
- return false;
568
- }
569
-
570
- /**
571
- * Record the time we send tracking data
572
- * @since 1.1.1
573
- */
574
- public function set_track_time() {
575
- // We've tracked, so record the time
576
- $track_times = get_option( 'wisdom_last_track_time', array() );
577
- // Set different times according to plugin, in case we are tracking multiple plugins
578
- $track_times[$this->plugin_name] = time();
579
- update_option( 'wisdom_last_track_time', $track_times );
580
- }
581
-
582
- /**
583
- * Set the time when we can display the opt-in notification
584
- * Will display now unless filtered
585
- * @since 1.2.4
586
- */
587
- public function set_notification_time() {
588
- $notification_times = get_option( 'wisdom_notification_times', array() );
589
- // Set different times according to plugin, in case we are tracking multiple plugins
590
- if( ! isset( $notification_times[$this->plugin_name] ) ) {
591
- $delay_notification = apply_filters( 'wisdom_delay_notification_' . $this->plugin_name, 0 );
592
- // We can delay the notification time
593
- $notification_time = time() + absint( $delay_notification );
594
- $notification_times[$this->plugin_name] = $notification_time;
595
- update_option( 'wisdom_notification_times', $notification_times );
596
- }
597
- }
598
-
599
- /**
600
- * Get whether it's time to display the notification
601
- * @since 1.2.4
602
- * @return Boolean
603
- */
604
- public function get_is_notification_time() {
605
- $notification_times = get_option( 'wisdom_notification_times', array() );
606
- $time = time();
607
- // Set different times according to plugin, in case we are tracking multiple plugins
608
- if( isset( $notification_times[$this->plugin_name] ) ) {
609
- $notification_time = $notification_times[$this->plugin_name];
610
- if( $time >= $notification_time ) {
611
- return true;
612
- }
613
- }
614
- return false;
615
- }
616
-
617
- /**
618
- * Set if we should block the opt-in notice for this plugin
619
- * Option is an array of all plugins that have received a response from the user
620
- * @since 1.0.0
621
- */
622
- public function update_block_notice( $plugin=null ) {
623
- if( empty( $plugin ) ) {
624
- $plugin = $this->plugin_name;
625
- }
626
- $block_notice = get_option( 'wisdom_block_notice' );
627
- if( empty( $block_notice ) || ! is_array( $block_notice ) ) {
628
- // If nothing exists in the option yet, start a new array with the plugin name
629
- $block_notice = array( $plugin => $plugin );
630
- } else {
631
- // Else add the plugin name to the array
632
- $block_notice[$plugin] = $plugin;
633
- }
634
- update_option( 'wisdom_block_notice', $block_notice );
635
- }
636
-
637
- /**
638
- * Can we collect the email address?
639
- * @since 1.0.0
640
- */
641
- public function get_can_collect_email() {
642
- // The wisdom_collect_email option is an array of plugins that are being tracked
643
- $collect_email = get_option( 'wisdom_collect_email' );
644
- // If this plugin is in the array, then we can collect the email address
645
- if( isset( $collect_email[$this->plugin_name] ) ) {
646
- return true;
647
- }
648
- return false;
649
- }
650
-
651
- /**
652
- * Set if user has allowed us to collect their email address
653
- * Option is an array of all plugins with email collection permitted
654
- * More than one plugin may be using the tracker
655
- * @since 1.0.0
656
- * @param $can_collect Boolean true if collection is allowed, false if not
657
- */
658
- public function set_can_collect_email( $can_collect, $plugin=null ) {
659
- if( empty( $plugin ) ) {
660
- $plugin = $this->plugin_name;
661
- }
662
- // The wisdom_collect_email option is an array of plugins that are being tracked
663
- $collect_email = get_option( 'wisdom_collect_email' );
664
- // If the user has agreed to allow tracking or if opt-in is not required
665
- if( $can_collect ) {
666
- if( empty( $collect_email ) || ! is_array( $collect_email ) ) {
667
- // If nothing exists in the option yet, start a new array with the plugin name
668
- $collect_email = array( $plugin => $plugin );
669
- } else {
670
- // Else add the plugin name to the array
671
- $collect_email[$plugin] = $plugin;
672
- }
673
- } else {
674
- if( isset( $collect_email[$plugin] ) ) {
675
- unset( $collect_email[$plugin] );
676
- }
677
- }
678
- update_option( 'wisdom_collect_email', $collect_email );
679
- }
680
-
681
- /**
682
- * Get the correct email address to use
683
- * @since 1.1.2
684
- * @return Email address
685
- */
686
- public function get_admin_email() {
687
- // The wisdom_collect_email option is an array of plugins that are being tracked
688
- $email = get_option( 'wisdom_admin_emails' );
689
- // If this plugin is in the array, then we can collect the email address
690
- if( isset( $email[$this->plugin_name] ) ) {
691
- return $email[$this->plugin_name];
692
- }
693
- return false;
694
- }
695
-
696
- /**
697
- * Set the correct email address to use
698
- * There might be more than one admin on the site
699
- * So we only use the first admin's email address
700
- * @param $email Email address to set
701
- * @param $plugin Plugin name to set email address for
702
- * @since 1.1.2
703
- */
704
- public function set_admin_email( $email=null, $plugin=null ) {
705
- if( empty( $plugin ) ) {
706
- $plugin = $this->plugin_name;
707
- }
708
- // If no email address passed, try to get the current user's email
709
- if( empty( $email ) ) {
710
- // Have to check that current user object is available
711
- if( function_exists( 'wp_get_current_user' ) ) {
712
- $current_user = wp_get_current_user();
713
- $email = $current_user->user_email;
714
- }
715
- }
716
- // The wisdom_admin_emails option is an array of admin email addresses
717
- $admin_emails = get_option( 'wisdom_admin_emails' );
718
- if( empty( $admin_emails ) || ! is_array( $admin_emails ) ) {
719
- // If nothing exists in the option yet, start a new array with the plugin name
720
- $admin_emails = array( $plugin => sanitize_email( $email ) );
721
- } else if( empty( $admin_emails[$plugin] ) ) {
722
- // Else add the email address to the array, if not already set
723
- $admin_emails[$plugin] = sanitize_email( $email );
724
- }
725
- update_option( 'wisdom_admin_emails', $admin_emails );
726
- }
727
-
728
- /**
729
- * Display the admin notice to users to allow them to opt in
730
- *
731
- * @since 1.0.0
732
- */
733
- public function optin_notice() {
734
- // Check for plugin args
735
- if( isset( $_GET['plugin'] ) && isset( $_GET['plugin_action'] ) ) {
736
- $plugin = sanitize_text_field( $_GET['plugin'] );
737
- $action = sanitize_text_field( $_GET['plugin_action'] );
738
- if( $action == 'yes' ) {
739
- $this->set_is_tracking_allowed( true, $plugin );
740
- // Run this straightaway
741
- add_action( 'admin_init', array( $this, 'force_tracking' ) );
742
- } else {
743
- $this->set_is_tracking_allowed( false, $plugin );
744
- }
745
- $this->update_block_notice( $plugin );
746
- }
747
-
748
- // Is it time to display the notification?
749
- $is_time = $this->get_is_notification_time();
750
- if( ! $is_time ) {
751
- return false;
752
- }
753
-
754
- // Check whether to block the notice, e.g. because we're in a local environment
755
- // wisdom_block_notice works the same as wisdom_allow_tracking, an array of plugin names
756
- $block_notice = get_option( 'wisdom_block_notice' );
757
-
758
- if( isset( $block_notice[$this->plugin_name] ) ) {
759
- return;
760
- }
761
-
762
- if ( ! current_user_can( 'manage_options' ) ) {
763
- return;
764
- }
765
-
766
- // @credit EDD
767
- // Don't bother asking user to opt in if they're in local dev
768
- $is_local = false;
769
- if( stristr( network_site_url( '/' ), '.dev' ) !== false || stristr( network_site_url( '/' ), 'localhost' ) !== false || stristr( network_site_url( '/' ), ':8888' ) !== false ) {
770
- $is_local = true;
771
- }
772
- $is_local = apply_filters( 'wisdom_is_local_' . $this->plugin_name, $is_local );
773
- if ( $is_local ) {
774
- $this->update_block_notice();
775
- } else {
776
-
777
- // Display the notice requesting permission to track
778
- // Retrieve current plugin information
779
- $plugin = $this->plugin_data();
780
- $plugin_name = $plugin['Name'];
781
-
782
- // Args to add to query if user opts in to tracking
783
- $yes_args = array(
784
- 'plugin' => $this->plugin_name,
785
- 'plugin_action' => 'yes'
786
- );
787
-
788
- // Decide how to request permission to collect email addresses
789
- if( $this->marketing == 1 ) {
790
- // Option 1 combines permissions to track and collect email
791
- $yes_args['marketing_optin'] = 'yes';
792
- } else if( $this->marketing == 2 ) {
793
- // Option 2 enables a second notice that fires after the user opts in to tracking
794
- $yes_args['marketing'] = 'yes';
795
- }
796
- $url_yes = add_query_arg( $yes_args );
797
- $url_no = add_query_arg( array(
798
- 'plugin' => $this->plugin_name,
799
- 'plugin_action' => 'no'
800
- ) );
801
-
802
- // Decide on notice text
803
- if( $this->marketing != 1 ) {
804
- // Standard notice text
805
- $notice_text = sprintf(
806
- __( 'Thank you for installing our %1$s. We would like to track its usage on your site. We don\'t record any sensitive data, only information regarding the WordPress environment and %1$s settings, which we will use to help us make improvements to the %1$s. Tracking is completely optional.', 'singularity' ),
807
- $this->what_am_i
808
- );
809
- } else {
810
- // If we have option 1 for marketing, we include reference to sending product information here
811
- $notice_text = sprintf(
812
- __( 'Thank you for installing our %1$s. We\'d like your permission to track its usage on your site and subscribe you to our newsletter. We won\'t record any sensitive data, only information regarding the WordPress environment and %1$s settings, which we will use to help us make improvements to the %1$s. Tracking is completely optional.', 'singularity' ),
813
- $this->what_am_i
814
- );
815
- }
816
- // And we allow you to filter the text anyway
817
- $notice_text = apply_filters( 'wisdom_notice_text_' . esc_attr( $this->plugin_name ), $notice_text ); ?>
818
-
819
- <div class="notice notice-info updated put-dismiss-notice">
820
- <p><?php echo '<strong>' . esc_html( $plugin_name ) . '</strong>'; ?></p>
821
- <p><?php echo esc_html( $notice_text ); ?></p>
822
- <p>
823
- <a href="<?php echo esc_url( $url_yes ); ?>" class="button-secondary"><?php _e( 'Allow', 'singularity' ); ?></a>
824
- <a href="<?php echo esc_url( $url_no ); ?>" class="button-secondary"><?php _e( 'Do Not Allow', 'singularity' ); ?></a>
825
- </p>
826
- </div>
827
- <?php
828
- }
829
-
830
- }
831
-
832
- /**
833
- * Display the marketing notice to users if enabled
834
- * Only displays after the user has opted in to tracking
835
- *
836
- * @since 1.0.0
837
- */
838
- public function marketing_notice() {
839
- // Check if user has opted in to marketing
840
- if( isset( $_GET['marketing_optin'] ) ) {
841
- // Set marketing optin
842
- $this->set_can_collect_email( sanitize_text_field( $_GET['marketing_optin'] ), $this->plugin_name );
843
- // Do tracking
844
- $this->do_tracking( true );
845
- } else if( isset( $_GET['marketing'] ) && $_GET['marketing']=='yes' ) {
846
- // Display the notice requesting permission to collect email address
847
- // Retrieve current plugin information
848
- $plugin = $this->plugin_data();
849
- $plugin_name = $plugin['Name'];
850
-
851
- $url_yes = add_query_arg( array(
852
- 'plugin' => $this->plugin_name,
853
- 'marketing_optin' => 'yes'
854
- ) );
855
- $url_no = add_query_arg( array(
856
- 'plugin' => $this->plugin_name,
857
- 'marketing_optin' => 'no'
858
- ) );
859
-
860
- $marketing_text = sprintf(
861
- __( 'Thank you for opting in to tracking. Would you like to receive occasional news about this %s, including details of new features and special offers?', 'singularity' ),
862
- $this->what_am_i
863
- );
864
- $marketing_text = apply_filters( 'wisdom_marketing_text_' . esc_attr( $this->plugin_name ), $marketing_text ); ?>
865
-
866
- <div class="notice notice-info updated put-dismiss-notice">
867
- <p><?php echo '<strong>' . esc_html( $plugin_name ) . '</strong>'; ?></p>
868
- <p><?php echo esc_html( $marketing_text ); ?></p>
869
- <p>
870
- <a href="<?php echo esc_url( $url_yes ); ?>" data-putnotice="yes" class="button-secondary"><?php _e( 'Yes Please', 'singularity' ); ?></a>
871
- <a href="<?php echo esc_url( $url_no ); ?>" data-putnotice="no" class="button-secondary"><?php _e( 'No Thank You', 'singularity' ); ?></a>
872
- </p>
873
- </div>
874
- <?php }
875
- }
876
-
877
- /**
878
- * Filter the deactivation link to allow us to present a form when the user deactivates the plugin
879
- * @since 1.0.0
880
- */
881
- public function filter_action_links( $links ) {
882
- // Check to see if the user has opted in to tracking
883
- if( ! $this->get_is_tracking_allowed() ) {
884
- return $links;
885
- }
886
- if( isset( $links['deactivate'] ) && $this->include_goodbye_form ) {
887
- $deactivation_link = $links['deactivate'];
888
- // Insert an onClick action to allow form before deactivating
889
- $deactivation_link = str_replace( '<a ', '<div class="put-goodbye-form-wrapper"><span class="put-goodbye-form" id="put-goodbye-form-' . esc_attr( $this->plugin_name ) . '"></span></div><a onclick="javascript:event.preventDefault();" id="put-goodbye-link-' . esc_attr( $this->plugin_name ) . '" ', $deactivation_link );
890
- $links['deactivate'] = $deactivation_link;
891
- }
892
- return $links;
893
- }
894
-
895
- /*
896
- * Form text strings
897
- * These are non-filterable and used as fallback in case filtered strings aren't set correctly
898
- * @since 1.0.0
899
- */
900
- public function form_default_text() {
901
- $form = array();
902
- $form['heading'] = __( 'Sorry to see you go', 'singularity' );
903
- $form['body'] = __( 'Before you deactivate the plugin, would you quickly give us your reason for doing so?', 'singularity' );
904
- $form['options'] = array(
905
- __( 'Set up is too difficult', 'singularity' ),
906
- __( 'Lack of documentation', 'singularity' ),
907
- __( 'Not the features I wanted', 'singularity' ),
908
- __( 'Found a better plugin', 'singularity' ),
909
- __( 'Installed by mistake', 'singularity' ),
910
- __( 'Only required temporarily', 'singularity' ),
911
- __( 'Didn\'t work', 'singularity' )
912
- );
913
- $form['details'] = __( 'Details (optional)', 'singularity' );
914
- return $form;
915
- }
916
-
917
- /**
918
- * Form text strings
919
- * These can be filtered
920
- * The filter hook must be unique to the plugin
921
- * @since 1.0.0
922
- */
923
- public function form_filterable_text() {
924
- $form = $this->form_default_text();
925
- return apply_filters( 'wisdom_form_text_' . esc_attr( $this->plugin_name ), $form );
926
- }
927
-
928
- /**
929
- * Form text strings
930
- * These can be filtered
931
- * @since 1.0.0
932
- */
933
- public function goodbye_ajax() {
934
- // Get our strings for the form
935
- $form = $this->form_filterable_text();
936
- if( ! isset( $form['heading'] ) || ! isset( $form['body'] ) || ! isset( $form['options'] ) || ! is_array( $form['options'] ) || ! isset( $form['details'] ) ) {
937
- // If the form hasn't been filtered correctly, we revert to the default form
938
- $form = $this->form_default_text();
939
- }
940
- // Build the HTML to go in the form
941
- $html = '<div class="put-goodbye-form-head"><strong>' . esc_html( $form['heading'] ) . '</strong></div>';
942
- $html .= '<div class="put-goodbye-form-body"><p>' . esc_html( $form['body'] ) . '</p>';
943
- if( is_array( $form['options'] ) ) {
944
- $html .= '<div class="put-goodbye-options"><p>';
945
- foreach( $form['options'] as $option ) {
946
- $html .= '<input type="checkbox" name="put-goodbye-options[]" id="' . str_replace( " ", "", esc_attr( $option ) ) . '" value="' . esc_attr( $option ) . '"> <label for="' . str_replace( " ", "", esc_attr( $option ) ) . '">' . esc_attr( $option ) . '</label><br>';
947
- }
948
- $html .= '</p><label for="put-goodbye-reasons">' . esc_html( $form['details'] ) .'</label><textarea name="put-goodbye-reasons" id="put-goodbye-reasons" rows="2" style="width:100%"></textarea>';
949
- $html .= '</div><!-- .put-goodbye-options -->';
950
- }
951
- $html .= '</div><!-- .put-goodbye-form-body -->';
952
- $html .= '<p class="deactivating-spinner"><span class="spinner"></span> ' . __( 'Submitting form', 'singularity' ) . '</p>';
953
- ?>
954
- <div class="put-goodbye-form-bg"></div>
955
- <style type="text/css">
956
- .put-form-active .put-goodbye-form-bg {
957
- background: rgba( 0, 0, 0, .5 );
958
- position: fixed;
959
- top: 0;
960
- left: 0;
961
- width: 100%;
962
- height: 100%;
963
- }
964
- .put-goodbye-form-wrapper {
965
- position: relative;
966
- z-index: 999;
967
- display: none;
968
- }
969
- .put-form-active .put-goodbye-form-wrapper {
970
- display: block;
971
- }
972
- .put-goodbye-form {
973
- display: none;
974
- }
975
- .put-form-active .put-goodbye-form {
976
- position: absolute;
977
- bottom: 30px;
978
- left: 0;
979
- max-width: 400px;
980
- background: #fff;
981
- white-space: normal;
982
- }
983
- .put-goodbye-form-head {
984
- background: #0073aa;
985
- color: #fff;
986
- padding: 8px 18px;
987
- }
988
- .put-goodbye-form-body {
989
- padding: 8px 18px;
990
- color: #444;
991
- }
992
- .deactivating-spinner {
993
- display: none;
994
- }
995
- .deactivating-spinner .spinner {
996
- float: none;
997
- margin: 4px 4px 0 18px;
998
- vertical-align: bottom;
999
- visibility: visible;
1000
- }
1001
- .put-goodbye-form-footer {
1002
- padding: 8px 18px;
1003
- }
1004
- </style>
1005
- <script>
1006
- jQuery(document).ready(function($){
1007
- $("#put-goodbye-link-<?php echo esc_attr( $this->plugin_name ); ?>").on("click",function(){
1008
- // We'll send the user to this deactivation link when they've completed or dismissed the form
1009
- var url = document.getElementById("put-goodbye-link-<?php echo esc_attr( $this->plugin_name ); ?>");
1010
- $('body').toggleClass('put-form-active');
1011
- $("#put-goodbye-form-<?php echo esc_attr( $this->plugin_name ); ?>").fadeIn();
1012
- $("#put-goodbye-form-<?php echo esc_attr( $this->plugin_name ); ?>").html( '<?php echo $html; ?>' + '<div class="put-goodbye-form-footer"><p><a id="put-submit-form" class="button primary" href="#"><?php _e( 'Submit and Deactivate', 'singularity' ); ?></a>&nbsp;<a class="secondary button" href="'+url+'"><?php _e( 'Just Deactivate', 'singularity' ); ?></a></p></div>');
1013
- $('#put-submit-form').on('click', function(e){
1014
- // As soon as we click, the body of the form should disappear
1015
- $("#put-goodbye-form-<?php echo esc_attr( $this->plugin_name ); ?> .put-goodbye-form-body").fadeOut();
1016
- $("#put-goodbye-form-<?php echo esc_attr( $this->plugin_name ); ?> .put-goodbye-form-footer").fadeOut();
1017
- // Fade in spinner
1018
- $("#put-goodbye-form-<?php echo esc_attr( $this->plugin_name ); ?> .deactivating-spinner").fadeIn();
1019
- e.preventDefault();
1020
- var values = new Array();
1021
- $.each($("input[name='put-goodbye-options[]']:checked"), function(){
1022
- values.push($(this).val());
1023
- });
1024
- var details = $('#put-goodbye-reasons').val();
1025
- var data = {
1026
- 'action': 'goodbye_form',
1027
- 'values': values,
1028
- 'details': details,
1029
- 'security': "<?php echo wp_create_nonce ( 'wisdom_goodbye_form' ); ?>",
1030
- 'dataType': "json"
1031
- }
1032
- $.post(
1033
- ajaxurl,
1034
- data,
1035
- function(response){
1036
- // Redirect to original deactivation URL
1037
- window.location.href = url;
1038
- }
1039
- );
1040
- });
1041
- // If we click outside the form, the form will close
1042
- $('.put-goodbye-form-bg').on('click',function(){
1043
- $("#put-goodbye-form-<?php echo esc_attr( $this->plugin_name ); ?>").fadeOut();
1044
- $('body').removeClass('put-form-active');
1045
- });
1046
- });
1047
- });
1048
- </script>
1049
- <?php }
1050
-
1051
- /**
1052
- * AJAX callback when the form is submitted
1053
- * @since 1.0.0
1054
- */
1055
- public function goodbye_form_callback() {
1056
- check_ajax_referer( 'wisdom_goodbye_form', 'security' );
1057
- if( isset( $_POST['values'] ) ) {
1058
- $values = json_encode( wp_unslash( $_POST['values'] ) );
1059
- update_option( 'wisdom_deactivation_reason_' . $this->plugin_name, $values );
1060
- }
1061
- if( isset( $_POST['details'] ) ) {
1062
- $details = sanitize_text_field( $_POST['details'] );
1063
- update_option( 'wisdom_deactivation_details_' . $this->plugin_name, $details );
1064
- }
1065
- $this->do_tracking(); // Run this straightaway
1066
- echo 'success';
1067
- wp_die();
1068
- }
1069
-
1070
- }
1071
-
1072
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
views/optimisationio-dashboard.php CHANGED
@@ -17,7 +17,7 @@ $addons = Optimisationio_Dashboard::$addons;
17
  <a href="https://optimisation.io/faq/" title="" target="_blank"><img src="<?php echo esc_url( plugin_dir_url( dirname( __FILE__ ) ) . 'images/logo-optimisation-line.png' ); ?>" alt="" /><?php _e( 'Help and Support' , 'optimisationio' ); ?></a>
18
  </div>
19
  <div class="statistics-top-cell support">
20
- <a href="https://www.paypal.me/web9/10" class="donate-link" title="" target="_blank"><img src="<?php echo esc_url( plugin_dir_url( dirname( __FILE__ ) ) . 'images/icon-support.png' ); ?>" alt="" /><span><?php _e( 'Donate and help us build the ultimate optimisation suite' , 'optimisationio' ); ?></span></a>
21
  </div>
22
  </div>
23
 
@@ -95,25 +95,20 @@ $addons = Optimisationio_Dashboard::$addons;
95
  <div class="donation-overlay-inner">
96
  <div class="donation-overlay-top">
97
  <img src="<?php echo esc_url( plugin_dir_url( dirname( __FILE__ ) ) . 'images/logo-optimisation.png' ); ?>" alt="" />
98
- <span><?php _e( 'Donate and help us build the ultimate optimisation suite' , 'optimisationio' ); ?></span>
99
  </div>
100
  <div class="donation-overlay-bottom">
101
- <select name="donation-value">
102
- <option value="5">$5 - Buy me a beer</option>
103
- <option value="10" selected>$10 - Buy me a shot</option>
104
- <option value="20">$20 - Feeling generous</option>
105
- <option value="30">$30 - Awesome work</option>
106
- <option value="50">$50 - I really love this plugin</option>
107
- <option value="60">$60 - A beer a month</option>
108
- <option value="100">$100 - Money well spent</option>
109
- </select>
110
  <br/>
111
- <button class="button button-primary button-large">DONATE</button>
112
  </div>
113
  <button class="close"><span>x</span></button>
114
  </div>
115
  </div>
116
- </div>
117
  </div><!-- // .donation-overlay-wrap -->
118
 
119
  </div>
17
  <a href="https://optimisation.io/faq/" title="" target="_blank"><img src="<?php echo esc_url( plugin_dir_url( dirname( __FILE__ ) ) . 'images/logo-optimisation-line.png' ); ?>" alt="" /><?php _e( 'Help and Support' , 'optimisationio' ); ?></a>
18
  </div>
19
  <div class="statistics-top-cell support">
20
+ <a href="https://www.paypal.me/web9/10" class="donate-link" title="" target="_blank"><img src="<?php echo esc_url( plugin_dir_url( dirname( __FILE__ ) ) . 'images/icon-support.png' ); ?>" alt="" /><span><?php _e( 'Need to disable one of our plugins?' , 'optimisationio' ); ?></span></a>
21
  </div>
22
  </div>
23
 
95
  <div class="donation-overlay-inner">
96
  <div class="donation-overlay-top">
97
  <img src="<?php echo esc_url( plugin_dir_url( dirname( __FILE__ ) ) . 'images/logo-optimisation.png' ); ?>" alt="" />
98
+ <span><?php _e( 'Need to disable something?' , 'optimisationio' ); ?></span>
99
  </div>
100
  <div class="donation-overlay-bottom">
101
+
102
+ The primary plugin <b>WP Disable is called "WP Disable" </b>and can be disabled via the plugins page</p>
103
+ Our Image Optimisation Plugin is called <b>"JPG, PNG Compression and Optimization"</b> and can be disabled via the Plugins page</p>
104
+ Our Cache plugin is called <b>"Cache for WordPress Performance"</b> and can be disabled via the Plugins page
105
+
 
 
 
 
106
  <br/>
 
107
  </div>
108
  <button class="close"><span>x</span></button>
109
  </div>
110
  </div>
111
+ </div>
112
  </div><!-- // .donation-overlay-wrap -->
113
 
114
  </div>
wpperformance.php CHANGED
@@ -5,7 +5,7 @@
5
  * Description: Improve WordPress performance by disabling unused items. <a href="admin.php?page=optimisationio-dashboard">Open Settings</a>
6
  * Author: optimisation.io - jody nesbitt
7
  * Author URI:https://optimisation.io
8
- * Version: 1.5.19
9
  *
10
  * Copyright (C) 2017-2018 Optimisation.io
11
  */
@@ -152,46 +152,6 @@ add_filter( 'cron_schedules', 'wpperformance_cron_additions' );
152
 
153
  add_action( 'plugins_loaded', array( 'WpPerformance', 'get_instance' ) );
154
 
155
- /**
156
- * This function allows you to track usage of your plugin
157
- * Place in your main plugin file
158
- * Refer to https://wisdomplugin.com/support for help
159
- */
160
- if( ! class_exists( 'Plugin_Usage_Tracker') ) {
161
- require_once dirname( __FILE__ ) . '/tracking/class-plugin-usage-tracker.php';
162
- }
163
- if( ! function_exists( 'wpperformance_start_plugin_tracking' ) ) {
164
- function wpperformance_start_plugin_tracking() {
165
- $wisdom = new Plugin_Usage_Tracker(
166
- __FILE__,
167
- 'https://hosting.io',
168
- array(),
169
- true,
170
- true,
171
- 0
172
- );
173
- }
174
- wpperformance_start_plugin_tracking();
175
- }
176
-
177
- // reasons
178
- function your_prefix_filter_deactivation_form( $form ) {
179
- $form[‘heading’] = __('Sorry to see you go', 'your-text-domain' );
180
- $form['body'] = __('Before you deactivate the plugin, would you quickly give us your reason for doing so?', 'your-text-domain' );
181
- $form['options'] = array(
182
- __('Set up too difficult', 'your-text-domain' ),
183
- __('The plugin broke my site', 'your-text-domain' ),
184
- __('Not the features I wanted', 'your-text-domain' ),
185
- __('Found a better plugin', 'your-text-domain' ),
186
- __('Did not make any difference to performance', 'your-text-domain' ),
187
- __('To difficult to use', 'your-text-domain' ),
188
- __('I was just testing/comparing', 'your-text-domain' ),
189
- );
190
- return $form;
191
- }
192
- add_filter( ‘wisdom_form_text_’ .basename( __FILE__, '.php' ), ‘your_prefix_filter_deactivation_form’ );
193
- // Must be added to your main plugin file
194
-
195
  //Better update notifications
196
  function prefix_plugin_update_message( $data, $response ) {
197
  if( isset( $data['upgrade_notice'] ) ) {
5
  * Description: Improve WordPress performance by disabling unused items. <a href="admin.php?page=optimisationio-dashboard">Open Settings</a>
6
  * Author: optimisation.io - jody nesbitt
7
  * Author URI:https://optimisation.io
8
+ * Version: 1.5.21
9
  *
10
  * Copyright (C) 2017-2018 Optimisation.io
11
  */
152
 
153
  add_action( 'plugins_loaded', array( 'WpPerformance', 'get_instance' ) );
154
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
155
  //Better update notifications
156
  function prefix_plugin_update_message( $data, $response ) {
157
  if( isset( $data['upgrade_notice'] ) ) {