PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.2.1
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.2.1
4.0.8 4.0.7 4.0.6 4.0.5 4.0.4 4.0.3 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.1 3.1.2 3.1.3 3.10.0 3.10.1 3.10.10 3.10.11 3.10.12 3.10.13 3.10.14 3.10.15 3.10.2 3.10.3 All 149 releases
← All changes | vendor/codeinwp/themeisle-sdk/src/Modules/Logger.php +31 -134 4.0.53.2.1 View file →
@@ -26,16 +26,11 @@
26 26 class Logger extends Abstract_Module {
27 27 /**
28 28 * Endpoint where to collect logs.
29 29 */
30 - const TRACKING_ENDPOINT = 'https://api.themeisle.com/tracking/log';
30 + const TRACKING_ENDPOINT = 'http://log.themeisle.com/wp-json/v1/logs/';
31 31
32 - /**
33 - * Endpoint where to collect telemetry.
34 - */
35 - const TELEMETRY_ENDPOINT = 'https://api.themeisle.com/tracking/events';
36 32
37 -
38 33 /**
39 34 * Check if we should load the module for this product.
40 35 *
41 36 * @param Product $product Product to load the module for.
@@ -42,8 +37,9 @@
42 37 *
43 38 * @return bool Should we load ?
44 39 */
45 40 public function can_load( $product ) {
41 +
46 42 return apply_filters( $product->get_slug() . '_sdk_enable_logger', true );
47 43 }
48 44
49 45 /**
@@ -54,10 +50,11 @@
54 50 * @return Logger Module object.
55 51 */
56 52 public function load( $product ) {
57 53 $this->product = $product;
58 - add_action( 'wp_loaded', array( $this, 'setup_actions' ) );
59 - add_action( 'admin_init', array( $this, 'setup_notification' ) );
54 + $this->setup_notification();
55 + $this->setup_actions();
56 +
60 57 return $this;
61 58 }
62 59
63 60 /**
@@ -63,12 +60,14 @@
63 60 /**
64 61 * Setup notification on admin.
65 62 */
66 63 public function setup_notification() {
67 - if ( $this->is_logger_active() ) {
64 + if ( ! $this->product->is_wordpress_available() ) {
68 65 return;
69 66 }
67 +
70 68 add_filter( 'themeisle_sdk_registered_notifications', [ $this, 'add_notification' ] );
69 +
71 70 }
72 71
73 72 /**
74 73 * Setup tracking actions.
@@ -76,25 +75,14 @@
76 75 public function setup_actions() {
77 76 if ( ! $this->is_logger_active() ) {
78 77 return;
79 78 }
80 - add_action(
81 - 'admin_enqueue_scripts',
82 - function() {
83 - if ( ! apply_filters( 'themeisle_sdk_enable_telemetry', false ) ) {
84 - return;
85 - }
86 -
87 - $this->load_telemetry();
88 - },
89 - PHP_INT_MAX
90 - );
91 -
92 79 $action_key = $this->product->get_key() . '_log_activity';
93 80 if ( ! wp_next_scheduled( $action_key ) ) {
94 - wp_schedule_single_event( time() + ( wp_rand( 1, 24 ) * 3600 ), $action_key );
81 + wp_schedule_single_event( time() + ( rand( 1, 24 ) * 3600 ), $action_key );
95 82 }
96 83 add_action( $action_key, array( $this, 'send_log' ) );
84 +
97 85 }
98 86
99 87 /**
100 88 * Check if the logger is active.
@@ -101,28 +89,23 @@
101 89 *
102 90 * @return bool Is logger active?
103 91 */
104 92 private function is_logger_active() {
105 - if ( apply_filters( 'themeisle_sdk_disable_telemetry', false ) ) {
106 - return false;
93 + if ( ! $this->product->is_wordpress_available() ) {
94 + return true;
107 95 }
108 - $default = 'no';
96 + $pro_slug = $this->product->get_pro_slug();
109 97
110 - if ( ! $this->product->is_wordpress_available() ) {
111 - $default = 'yes';
112 - } else {
98 + if ( ! empty( $pro_slug ) ) {
113 99 $all_products = Loader::get_products();
114 - foreach ( $all_products as $product ) {
115 - if ( $product->requires_license() ) {
116 - $default = 'yes';
117 - break;
118 - }
100 + if ( isset( $all_products[ $pro_slug ] ) ) {
101 + return true;
119 102 }
120 103 }
121 104
105 + return ( get_option( $this->product->get_key() . '_logger_flag', 'no' ) === 'yes' );
106 + }
122 107
123 - return ( get_option( $this->product->get_key() . '_logger_flag', $default ) === 'yes' );
124 - }
125 108 /**
126 109 * Add notification to queue.
127 110 *
128 111 * @param array $all_notifications Previous notification.
@@ -130,9 +113,9 @@
130 113 * @return array All notifications.
131 114 */
132 115 public function add_notification( $all_notifications ) {
133 116
134 - $message = apply_filters( $this->product->get_key() . '_logger_heading', Loader::$labels['logger']['notice'] );
117 + $message = apply_filters( $this->product->get_key() . '_logger_heading', 'Do you enjoy <b>{product}</b>? Become a contributor by opting in to our anonymous data tracking. We guarantee no sensitive data is collected.' );
135 118
136 119 $message = str_replace(
137 120 array( '{product}' ),
138 121 $this->product->get_friendly_name(),
@@ -137,10 +120,10 @@
137 120 array( '{product}' ),
138 121 $this->product->get_friendly_name(),
139 122 $message
140 123 );
141 - $button_submit = apply_filters( $this->product->get_key() . '_logger_button_submit', Loader::$labels['logger']['cta_y'] );
142 - $button_cancel = apply_filters( $this->product->get_key() . '_logger_button_cancel', Loader::$labels['logger']['cta_n'] );
124 + $button_submit = apply_filters( $this->product->get_key() . '_logger_button_submit', 'Sure, I would love to help.' );
125 + $button_cancel = apply_filters( $this->product->get_key() . '_logger_button_cancel', 'No, thanks.' );
143 126
144 127 $all_notifications[] = [
145 128 'id' => $this->product->get_key() . '_logger_flag',
146 129 'message' => $message,
@@ -167,9 +150,8 @@
167 150 $theme = wp_get_theme();
168 151 $environment['theme'] = array();
169 152 $environment['theme']['name'] = $theme->get( 'Name' );
170 153 $environment['theme']['author'] = $theme->get( 'Author' );
171 - $environment['theme']['parent'] = $theme->parent() !== false ? $theme->parent()->get( 'Name' ) : $theme->get( 'Name' );
172 154 $environment['plugins'] = get_option( 'active_plugins' );
173 155 global $wp_version;
174 156 wp_remote_post(
175 157 self::TRACKING_ENDPOINT,
@@ -176,105 +158,20 @@
176 158 array(
177 159 'method' => 'POST',
178 160 'timeout' => 3,
179 161 'redirection' => 5,
162 + 'headers' => array(
163 + 'X-ThemeIsle-Event' => 'log_site',
164 + ),
180 165 'body' => array(
181 - 'site' => get_site_url(),
182 - 'slug' => $this->product->get_slug(),
183 - 'version' => $this->product->get_version(),
184 - 'wp_version' => $wp_version,
185 - 'install_time' => $this->product->get_install_time(),
186 - 'locale' => get_locale(),
187 - 'data' => apply_filters( $this->product->get_key() . '_logger_data', array() ),
188 - 'environment' => $environment,
189 - 'license' => apply_filters( $this->product->get_key() . '_license_status', '' ),
166 + 'site' => get_site_url(),
167 + 'slug' => $this->product->get_slug(),
168 + 'version' => $this->product->get_version(),
169 + 'wp_version' => $wp_version,
170 + 'data' => apply_filters( $this->product->get_key() . '_logger_data', array() ),
171 + 'environment' => $environment,
172 + 'license' => apply_filters( $this->product->get_key() . '_license_status', '' ),
190 173 ),
191 174 )
192 175 );
193 - }
194 -
195 - /**
196 - * Load telemetry.
197 - *
198 - * @return void
199 - */
200 - public function load_telemetry() {
201 - // See which products have telemetry enabled.
202 - try {
203 - $products_with_telemetry = array();
204 - $all_products = Loader::get_products();
205 - $all_products[ $this->product->get_slug() ] = $this->product; // Add current product to the list of products to check for telemetry.
206 -
207 - // Register telemetry params for eligible products.
208 - foreach ( $all_products as $product_slug => $product ) {
209 -
210 - // Ignore PRO products.
211 - if ( false !== strstr( $product_slug, 'pro' ) ) {
212 - continue;
213 - }
214 -
215 - $pro_slug = $product->get_pro_slug();
216 - $logger_key = $product->get_key() . '_logger_flag';
217 -
218 - // If the product is not available in the WordPress store, or it's PRO version is installed, activate the logger if it was not initialized -- Pro users are opted in by default.
219 - if ( ! $product->is_wordpress_available() || ( ! empty( $pro_slug ) && isset( $all_products[ $pro_slug ] ) ) ) {
220 - $logger_flag = get_option( $logger_key );
221 -
222 - if ( false === $logger_flag ) {
223 - update_option( $logger_key, 'yes' );
224 - }
225 - }
226 -
227 - if ( 'yes' === get_option( $product->get_key() . '_logger_flag', 'no' ) ) {
228 -
229 - $main_slug = explode( '-', $product_slug );
230 - $main_slug = $main_slug[0];
231 - $track_hash = Licenser::create_license_hash( str_replace( '-', '_', ! empty( $pro_slug ) ? $pro_slug : $product_slug ) );
232 -
233 - // Check if product was already tracked.
234 - $active_telemetry = false;
235 - foreach ( $products_with_telemetry as $product_with_telemetry ) {
236 - if ( $product_with_telemetry['slug'] === $main_slug ) {
237 - $active_telemetry = true;
238 - break;
239 - }
240 - }
241 -
242 - if ( $active_telemetry ) {
243 - continue;
244 - }
245 -
246 - $products_with_telemetry[] = array(
247 - 'slug' => $main_slug,
248 - 'trackHash' => $track_hash ? $track_hash : 'free',
249 - 'consent' => true,
250 - );
251 - }
252 - }
253 -
254 - $products_with_telemetry = apply_filters( 'themeisle_sdk_telemetry_products', $products_with_telemetry );
255 -
256 - if ( 0 === count( $products_with_telemetry ) ) {
257 - return;
258 - }
259 -
260 - $tracking_handler = apply_filters( 'themeisle_sdk_dependency_script_handler', 'tracking' );
261 - if ( ! empty( $tracking_handler ) ) {
262 - do_action( 'themeisle_sdk_dependency_enqueue_script', 'tracking' );
263 - wp_localize_script(
264 - $tracking_handler,
265 - 'tiTelemetry',
266 - array(
267 - 'products' => $products_with_telemetry,
268 - 'endpoint' => self::TELEMETRY_ENDPOINT,
269 - )
270 - );
271 - }
272 - } catch ( \Exception $e ) {
273 - if ( defined( 'WP_DEBUG' ) && WP_DEBUG && defined( 'WP_DEBUG_LOG' ) && WP_DEBUG_LOG ) {
274 - error_log( $e->getMessage() ); // phpcs:ignore
275 - }
276 - } finally {
277 - return;
278 - }
279 176 }
280 177 }