PluginProbe ʕ •ᴥ•ʔ
Blocks Animation: CSS Animations for Gutenberg Blocks / 3.2.0
Blocks Animation: CSS Animations for Gutenberg Blocks v3.2.0
3.2.0 3.1.11 3.1.10 2.2.5 2.2.6 2.2.7 2.3.0 2.3.1 2.3.2 2.3.3 2.3.4 2.4.0 2.4.1 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.10 2.6.11 2.6.12 2.6.13 2.6.2 2.6.3 2.6.4 2.6.5 2.6.6 2.6.7 2.6.8 2.6.9 3.0.0 3.0.1 3.0.10 3.0.11 3.0.12 3.0.2 3.0.3 3.0.4 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.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 trunk 1.0.0 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 2.0.0 2.0.1 2.0.10 2.0.11 2.0.12 2.0.13 2.0.14 2.0.15 2.0.16 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4
blocks-animation / vendor / codeinwp / themeisle-sdk / src / Modules / Logger.php
blocks-animation / vendor / codeinwp / themeisle-sdk / src / Modules Last commit date
About_us.php 1 week ago Abstract_Migration.php 1 month ago Announcements.php 1 month ago Compatibilities.php 1 year ago Dashboard_widget.php 1 week ago Featured_plugins.php 1 month ago Float_widget.php 1 year ago Licenser.php 1 month ago Logger.php 8 months ago Migrator.php 1 month ago Notification.php 1 year ago Promotions.php 1 week ago Recommendation.php 1 year ago Review.php 8 months ago Rollback.php 1 year ago Script_loader.php 8 months ago Translate.php 1 year ago Translations.php 8 months ago Uninstall_feedback.php 1 week ago Welcome.php 1 year ago
Logger.php
281 lines
1 <?php
2 /**
3 * The logger model class for ThemeIsle SDK
4 *
5 * @package ThemeIsleSDK
6 * @subpackage Modules
7 * @copyright Copyright (c) 2017, Marius Cristea
8 * @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
9 * @since 1.0.0
10 */
11
12 namespace ThemeisleSDK\Modules;
13
14 use ThemeisleSDK\Common\Abstract_Module;
15 use ThemeisleSDK\Loader;
16 use ThemeisleSDK\Product;
17
18 // Exit if accessed directly.
19 if ( ! defined( 'ABSPATH' ) ) {
20 exit;
21 }
22
23 /**
24 * Logger module for ThemeIsle SDK.
25 */
26 class Logger extends Abstract_Module {
27 /**
28 * Endpoint where to collect logs.
29 */
30 const TRACKING_ENDPOINT = 'https://api.themeisle.com/tracking/log';
31
32 /**
33 * Endpoint where to collect telemetry.
34 */
35 const TELEMETRY_ENDPOINT = 'https://api.themeisle.com/tracking/events';
36
37
38 /**
39 * Check if we should load the module for this product.
40 *
41 * @param Product $product Product to load the module for.
42 *
43 * @return bool Should we load ?
44 */
45 public function can_load( $product ) {
46 return apply_filters( $product->get_slug() . '_sdk_enable_logger', true );
47 }
48
49 /**
50 * Load module logic.
51 *
52 * @param Product $product Product to load.
53 *
54 * @return Logger Module object.
55 */
56 public function load( $product ) {
57 $this->product = $product;
58 add_action( 'wp_loaded', array( $this, 'setup_actions' ) );
59 add_action( 'admin_init', array( $this, 'setup_notification' ) );
60 return $this;
61 }
62
63 /**
64 * Setup notification on admin.
65 */
66 public function setup_notification() {
67 if ( $this->is_logger_active() ) {
68 return;
69 }
70 add_filter( 'themeisle_sdk_registered_notifications', [ $this, 'add_notification' ] );
71 }
72
73 /**
74 * Setup tracking actions.
75 */
76 public function setup_actions() {
77 if ( ! $this->is_logger_active() ) {
78 return;
79 }
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 $action_key = $this->product->get_key() . '_log_activity';
93 if ( ! wp_next_scheduled( $action_key ) ) {
94 wp_schedule_single_event( time() + ( wp_rand( 1, 24 ) * 3600 ), $action_key );
95 }
96 add_action( $action_key, array( $this, 'send_log' ) );
97 }
98
99 /**
100 * Check if the logger is active.
101 *
102 * @return bool Is logger active?
103 */
104 private function is_logger_active() {
105 if ( apply_filters( 'themeisle_sdk_disable_telemetry', false ) ) {
106 return false;
107 }
108 $default = 'no';
109
110 if ( ! $this->product->is_wordpress_available() ) {
111 $default = 'yes';
112 } else {
113 $all_products = Loader::get_products();
114 foreach ( $all_products as $product ) {
115 if ( $product->requires_license() ) {
116 $default = 'yes';
117 break;
118 }
119 }
120 }
121
122
123 return ( get_option( $this->product->get_key() . '_logger_flag', $default ) === 'yes' );
124 }
125 /**
126 * Add notification to queue.
127 *
128 * @param array $all_notifications Previous notification.
129 *
130 * @return array All notifications.
131 */
132 public function add_notification( $all_notifications ) {
133
134 $message = apply_filters( $this->product->get_key() . '_logger_heading', Loader::$labels['logger']['notice'] );
135
136 $message = str_replace(
137 array( '{product}' ),
138 $this->product->get_friendly_name(),
139 $message
140 );
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'] );
143
144 $all_notifications[] = [
145 'id' => $this->product->get_key() . '_logger_flag',
146 'message' => $message,
147 'ctas' => [
148 'confirm' => [
149 'link' => '#',
150 'text' => $button_submit,
151 ],
152 'cancel' => [
153 'link' => '#',
154 'text' => $button_cancel,
155 ],
156 ],
157 ];
158
159 return $all_notifications;
160 }
161
162 /**
163 * Send the statistics to the api endpoint.
164 */
165 public function send_log() {
166 $environment = array();
167 $theme = wp_get_theme();
168 $environment['theme'] = array();
169 $environment['theme']['name'] = $theme->get( 'Name' );
170 $environment['theme']['author'] = $theme->get( 'Author' );
171 $environment['theme']['parent'] = $theme->parent() !== false ? $theme->parent()->get( 'Name' ) : $theme->get( 'Name' );
172 $environment['plugins'] = get_option( 'active_plugins' );
173 global $wp_version;
174 wp_remote_post(
175 self::TRACKING_ENDPOINT,
176 array(
177 'method' => 'POST',
178 'timeout' => 3,
179 'redirection' => 5,
180 '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', '' ),
190 ),
191 )
192 );
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 }
280 }
281