PluginProbe ʕ •ᴥ•ʔ
Royal Addons for Elementor – Addons and Templates Kit for Elementor / 1.7.1064
Royal Addons for Elementor – Addons and Templates Kit for Elementor v1.7.1064
1.7.1064 1.7.1063 1.7.1062 1.7.1061 1.7.1060 1.7.1059 1.7.1058 trunk 1.0.0 1.1.0 1.2 1.3 1.3.1 1.3.2 1.3.21 1.3.22 1.3.23 1.3.24 1.3.25 1.3.26 1.3.27 1.3.28 1.3.29 1.3.30 1.3.31 1.3.32 1.3.33 1.3.34 1.3.35 1.3.36 1.3.37 1.3.38 1.3.39 1.3.40 1.3.41 1.3.42 1.3.43 1.3.44 1.3.45 1.3.46 1.3.47 1.3.48 1.3.49 1.3.50 1.3.51 1.3.52 1.3.53 1.3.54 1.3.55 1.3.56 1.3.57 1.3.58 1.3.59 1.3.60 1.3.61 1.3.62 1.3.63 1.3.64 1.3.65 1.3.66 1.3.67 1.3.68 1.3.69 1.3.70 1.3.71 1.3.72 1.3.73 1.3.74 1.3.75 1.3.76 1.3.77 1.3.78 1.3.79 1.3.80 1.3.81 1.3.82 1.3.83 1.3.84 1.3.85 1.3.86 1.3.87 1.3.88 1.3.89 1.3.90 1.3.91 1.3.92 1.3.93 1.3.94 1.3.95 1.3.96 1.3.97 1.3.971 1.3.972 1.3.973 1.3.974 1.3.975 1.3.976 1.3.977 1.3.978 1.3.979 1.3.980 1.3.981 1.3.982 1.3.983 1.3.984 1.3.985 1.3.986 1.3.987 1.7.1 1.7.1001 1.7.1002 1.7.1003 1.7.1004 1.7.1005 1.7.1006 1.7.1007 1.7.1008 1.7.1009 1.7.1010 1.7.1011 1.7.1012 1.7.1013 1.7.1014 1.7.1015 1.7.1016 1.7.1017 1.7.1018 1.7.1019 1.7.1020 1.7.1021 1.7.1022 1.7.1023 1.7.1024 1.7.1025 1.7.1026 1.7.1027 1.7.1028 1.7.1029 1.7.1030 1.7.1031 1.7.1032 1.7.1033 1.7.1034 1.7.1035 1.7.1036 1.7.1037 1.7.1038 1.7.1039 1.7.1040 1.7.1041 1.7.1042 1.7.1043 1.7.1044 1.7.1045 1.7.1046 1.7.1047 1.7.1048 1.7.1049 1.7.1050 1.7.1051 1.7.1052 1.7.1053 1.7.1054 1.7.1055 1.7.1056 1.7.1057
royal-elementor-addons / freemius / includes / managers / class-fs-debug-manager.php
royal-elementor-addons / freemius / includes / managers Last commit date
class-fs-admin-menu-manager.php 5 days ago class-fs-admin-notice-manager.php 5 days ago class-fs-cache-manager.php 5 days ago class-fs-checkout-manager.php 5 days ago class-fs-clone-manager.php 5 days ago class-fs-contact-form-manager.php 5 days ago class-fs-debug-manager.php 5 days ago class-fs-gdpr-manager.php 5 days ago class-fs-key-value-storage.php 5 days ago class-fs-license-manager.php 5 days ago class-fs-option-manager.php 5 days ago class-fs-permission-manager.php 5 days ago class-fs-plan-manager.php 5 days ago class-fs-plugin-manager.php 5 days ago index.php 5 days ago
class-fs-debug-manager.php
509 lines
1 <?php
2 /**
3 * @author Daniele Alessandra (@danielealessandra)
4 * @copyright Copyright (c) 2024, Freemius, Inc.
5 * @license https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
6 * @package Freemius
7 * @since 2.6.2
8 */
9
10 class FS_DebugManager {
11
12 /**
13 * @author Vova Feldman (@svovaf)
14 * Moved from Freemius
15 *
16 * @since 1.0.8
17 */
18 static function _add_debug_section() {
19 if ( ! is_super_admin() ) {
20 // Add debug page only for super-admins.
21 return;
22 }
23
24 Freemius::get_static_logger()->entrance();
25
26 $title = sprintf( '%s [v.%s]', fs_text_inline( 'Freemius Debug' ), WP_FS__SDK_VERSION );
27
28 if ( WP_FS__DEV_MODE ) {
29 // Add top-level debug menu item.
30 $hook = FS_Admin_Menu_Manager::add_page(
31 $title,
32 $title,
33 'manage_options',
34 'freemius',
35 array( self::class, '_debug_page_render' )
36 );
37 } else {
38 // Add hidden debug page.
39 $hook = FS_Admin_Menu_Manager::add_subpage(
40 '',
41 $title,
42 $title,
43 'manage_options',
44 'freemius',
45 array( self::class, '_debug_page_render' )
46 );
47 }
48
49 if ( ! empty( $hook ) ) {
50 add_action( "load-$hook", array( self::class, '_debug_page_actions' ) );
51 }
52 }
53
54 /**
55 * @author Vova Feldman (@svovaf)
56 * Moved from Freemius
57 *
58 * @since 1.0.8
59 */
60 static function _debug_page_actions() {
61 Freemius::_clean_admin_content_section();
62
63 if ( fs_request_is_action( 'restart_freemius' ) ) {
64 check_admin_referer( 'restart_freemius' );
65
66 if ( ! is_multisite() ) {
67 // Clear accounts data.
68 Freemius::get_accounts()->clear( null, true );
69 } else {
70 $sites = Freemius::get_sites();
71 foreach ( $sites as $site ) {
72 $blog_id = Freemius::get_site_blog_id( $site );
73 Freemius::get_accounts()->clear( $blog_id, true );
74 }
75
76 // Clear network level storage.
77 Freemius::get_accounts()->clear( true, true );
78 }
79
80 // Clear SDK reference cache.
81 delete_option( 'fs_active_plugins' );
82 } else if ( fs_request_is_action( 'clear_updates_data' ) ) {
83 check_admin_referer( 'clear_updates_data' );
84
85 if ( ! is_multisite() ) {
86 set_site_transient( 'update_plugins', null );
87 set_site_transient( 'update_themes', null );
88 } else {
89 $current_blog_id = get_current_blog_id();
90
91 $sites = Freemius::get_sites();
92 foreach ( $sites as $site ) {
93 switch_to_blog( Freemius::get_site_blog_id( $site ) );
94
95 set_site_transient( 'update_plugins', null );
96 set_site_transient( 'update_themes', null );
97 }
98
99 switch_to_blog( $current_blog_id );
100 }
101 } else if ( fs_request_is_action( 'reset_deactivation_snoozing' ) ) {
102 check_admin_referer( 'reset_deactivation_snoozing' );
103
104 Freemius::reset_deactivation_snoozing();
105 } else if ( fs_request_is_action( 'simulate_trial' ) ) {
106 check_admin_referer( 'simulate_trial' );
107
108 $fs = freemius( fs_request_get( 'module_id' ) );
109
110 // Update SDK install to at least 24 hours before.
111 $fs->get_storage()->install_timestamp = ( time() - WP_FS__TIME_24_HOURS_IN_SEC );
112 // Unset the trial shown timestamp.
113 unset( $fs->get_storage()->trial_promotion_shown );
114 } else if ( fs_request_is_action( 'simulate_network_upgrade' ) ) {
115 check_admin_referer( 'simulate_network_upgrade' );
116
117 $fs = freemius( fs_request_get( 'module_id' ) );
118
119 Freemius::set_network_upgrade_mode( $fs->get_storage() );
120 } else if ( fs_request_is_action( 'delete_install' ) ) {
121 check_admin_referer( 'delete_install' );
122
123 Freemius::_delete_site_by_slug(
124 fs_request_get( 'slug' ),
125 fs_request_get( 'module_type' ),
126 true,
127 fs_request_get( 'blog_id', null )
128 );
129 } else if ( fs_request_is_action( 'delete_user' ) ) {
130 check_admin_referer( 'delete_user' );
131
132 self::delete_user( fs_request_get( 'user_id' ) );
133 } else if ( fs_request_is_action( 'download_logs' ) ) {
134 check_admin_referer( 'download_logs' );
135
136 $download_url = FS_Logger::download_db_logs(
137 fs_request_get( 'filters', false, 'post' )
138 );
139
140 if ( false === $download_url ) {
141 wp_die( 'Oops... there was an error while generating the logs download file. Please try again and if it doesn\'t work contact support@freemius.com.' );
142 }
143
144 fs_redirect( $download_url );
145 } else if ( fs_request_is_action( 'migrate_options_to_network' ) ) {
146 check_admin_referer( 'migrate_options_to_network' );
147
148 Freemius::migrate_options_to_network();
149 }
150 }
151
152 /**
153 * @author Vova Feldman (@svovaf)
154 * Moved from Freemius
155 *
156 * @since 1.0.8
157 */
158 static function _debug_page_render() {
159 Freemius::get_static_logger()->entrance();
160
161 $all_modules_sites = self::get_all_modules_sites();
162
163 $licenses_by_module_type = self::get_all_licenses_by_module_type();
164
165 $vars = array(
166 'plugin_sites' => $all_modules_sites[ WP_FS__MODULE_TYPE_PLUGIN ],
167 'theme_sites' => $all_modules_sites[ WP_FS__MODULE_TYPE_THEME ],
168 'users' => Freemius::get_all_users(),
169 'addons' => Freemius::get_all_addons(),
170 'account_addons' => Freemius::get_all_account_addons(),
171 'plugin_licenses' => $licenses_by_module_type[ WP_FS__MODULE_TYPE_PLUGIN ],
172 'theme_licenses' => $licenses_by_module_type[ WP_FS__MODULE_TYPE_THEME ],
173 );
174
175 fs_enqueue_local_style( 'fs_debug', '/admin/debug.css' );
176 fs_require_once_template( 'debug.php', $vars );
177 }
178
179 /**
180 * @author Vova Feldman (@svovaf)
181 * Moved from Freemius
182 *
183 * @since 1.2.1.6
184 */
185 static function _get_debug_log() {
186 check_admin_referer( 'fs_get_debug_log' );
187
188 if ( ! is_super_admin() ) {
189 return;
190 }
191
192 if (!FS_Logger::is_storage_logging_on()) {
193 return;
194 }
195
196 $limit = min( ! empty( $_POST['limit'] ) ? absint( $_POST['limit'] ) : 200, 200 );
197 $offset = min( ! empty( $_POST['offset'] ) ? absint( $_POST['offset'] ) : 200, 200 );
198
199 $logs = FS_Logger::load_db_logs(
200 fs_request_get( 'filters', false, 'post' ),
201 $limit,
202 $offset
203 );
204
205 Freemius::shoot_ajax_success( $logs );
206 }
207
208 /**
209 * @author Vova Feldman (@svovaf)
210 * Moved from Freemius
211 *
212 * @since 1.2.1.7
213 */
214 static function _get_db_option() {
215 check_admin_referer( 'fs_get_db_option' );
216
217 $option_name = fs_request_get( 'option_name' );
218
219 if ( ! is_super_admin() ||
220 ! fs_starts_with( $option_name, 'fs_' )
221 ) {
222 Freemius::shoot_ajax_failure();
223 }
224
225 $value = get_option( $option_name );
226
227 $result = array(
228 'name' => $option_name,
229 );
230
231 if ( false !== $value ) {
232 if ( ! is_string( $value ) ) {
233 $value = json_encode( $value );
234 }
235
236 $result['value'] = $value;
237 }
238
239 Freemius::shoot_ajax_success( $result );
240 }
241
242 /**
243 * @author Vova Feldman (@svovaf)
244 * Moved from Freemius
245 *
246 * @since 1.2.1.7
247 */
248 static function _set_db_option() {
249 check_admin_referer( 'fs_set_db_option' );
250
251 $option_name = fs_request_get( 'option_name' );
252
253 if ( ! is_super_admin() ||
254 ! fs_starts_with( $option_name, 'fs_' )
255 ) {
256 Freemius::shoot_ajax_failure();
257 }
258
259 $option_value = fs_request_get_raw( 'option_value' );
260
261 if ( ! empty( $option_value ) ) {
262 update_option( $option_name, $option_value );
263 }
264
265 Freemius::shoot_ajax_success();
266 }
267
268 /**
269 * @author Vova Feldman (@svovaf)
270 * Moved from Freemius
271 *
272 * @since 1.1.7.3
273 */
274 static function _toggle_debug_mode() {
275 check_admin_referer( 'fs_toggle_debug_mode' );
276
277 if ( ! is_super_admin() ) {
278 return;
279 }
280
281 $is_on = fs_request_get( 'is_on', false, 'post' );
282
283 if ( fs_request_is_post() && in_array( $is_on, array( 0, 1 ) ) ) {
284 if ( $is_on ) {
285 self::_turn_on_debug_mode();
286 } else {
287 self::_turn_off_debug_mode();
288 }
289
290 // Logic to turn debugging off automatically
291 if ( 1 == $is_on ) {
292 // Plan a single event triggering after 24 hours to turn debugging off.
293 wp_schedule_single_event( time() + 24 * HOUR_IN_SECONDS, 'fs_debug_turn_off_logging_hook' );
294 } else {
295 // Cancels any planned event when debugging is turned off manually.
296 $timestamp = wp_next_scheduled( 'fs_debug_turn_off_logging_hook' );
297 if ( $timestamp ) {
298 wp_unschedule_event( $timestamp, 'fs_debug_turn_off_logging_hook' );
299 }
300 }
301 }
302
303 exit;
304 }
305
306 /**
307 * @author Daniele Alessandra (@danielealessandra)
308 * @since 2.6.2
309 *
310 */
311 static function _turn_off_debug_mode() {
312 self::update_debug_mode_option( 0 );
313 FS_Logger::_set_storage_logging( false );
314 }
315
316 /**
317 * @author Daniele Alessandra (@danielealessandra)
318 * @since 2.6.2
319 *
320 */
321 static function _turn_on_debug_mode() {
322 self::update_debug_mode_option( 1 );
323 FS_Logger::_set_storage_logging();
324 }
325
326 /**
327 * @author Leo Fajardo (@leorw)
328 * Moved from Freemius
329 *
330 * @param string $url
331 * @param array $request
332 *
333 * @since 2.1.0
334 *
335 */
336 public static function enrich_request_for_debug( &$url, &$request ) {
337 if ( WP_FS__DEBUG_SDK || isset( $_COOKIE['XDEBUG_SESSION'] ) ) {
338 $url = add_query_arg( 'XDEBUG_SESSION_START', rand( 0, 9999999 ), $url );
339 $url = add_query_arg( 'XDEBUG_SESSION', 'PHPSTORM', $url );
340
341 $request['cookies'] = array(
342 new WP_Http_Cookie( array(
343 'name' => 'XDEBUG_SESSION',
344 'value' => 'PHPSTORM',
345 ) ),
346 );
347 }
348 }
349
350 /**
351 * @author Leo Fajardo (@leorw)
352 * Moved from Freemius
353 *
354 * @return array
355 *
356 * @since 2.0.0
357 *
358 */
359 private static function get_all_licenses_by_module_type() {
360 $licenses = Freemius::get_account_option( 'all_licenses' );
361
362 $licenses_by_module_type = array(
363 WP_FS__MODULE_TYPE_PLUGIN => array(),
364 WP_FS__MODULE_TYPE_THEME => array(),
365 );
366
367 if ( ! is_array( $licenses ) ) {
368 return $licenses_by_module_type;
369 }
370
371 foreach ( $licenses as $module_id => $module_licenses ) {
372 $fs = Freemius::get_instance_by_id( $module_id );
373 if ( false === $fs ) {
374 continue;
375 }
376
377 $licenses_by_module_type[ $fs->get_module_type() ] = array_merge( $licenses_by_module_type[ $fs->get_module_type() ],
378 $module_licenses );
379 }
380
381 return $licenses_by_module_type;
382 }
383
384 /**
385 * Moved from the Freemius class.
386 *
387 * @author Leo Fajardo (@leorw)
388 *
389 * @return array
390 *
391 * @since 2.5.0
392 */
393 static function get_all_modules_sites() {
394 Freemius::get_static_logger()->entrance();
395
396 $sites_by_type = array(
397 WP_FS__MODULE_TYPE_PLUGIN => array(),
398 WP_FS__MODULE_TYPE_THEME => array(),
399 );
400
401 $module_types = array_keys( $sites_by_type );
402
403 if ( ! is_multisite() ) {
404 foreach ( $module_types as $type ) {
405 $sites_by_type[ $type ] = Freemius::get_all_sites( $type );
406
407 foreach ( $sites_by_type[ $type ] as $slug => $install ) {
408 $sites_by_type[ $type ][ $slug ] = array( $install );
409 }
410 }
411 } else {
412 $sites = Freemius::get_sites();
413
414 foreach ( $sites as $site ) {
415 $blog_id = Freemius::get_site_blog_id( $site );
416
417 foreach ( $module_types as $type ) {
418 $installs = Freemius::get_all_sites( $type, $blog_id );
419
420 foreach ( $installs as $slug => $install ) {
421 if ( ! isset( $sites_by_type[ $type ][ $slug ] ) ) {
422 $sites_by_type[ $type ][ $slug ] = array();
423 }
424
425 $install->blog_id = $blog_id;
426
427 $sites_by_type[ $type ][ $slug ][] = $install;
428 }
429 }
430 }
431 }
432
433 return $sites_by_type;
434 }
435
436 /**
437 * Delete user.
438 *
439 * @author Vova Feldman (@svovaf)
440 *
441 * @param number $user_id
442 * @param bool $store
443 *
444 * @return false|int The user ID if deleted. Otherwise, FALSE (when install not exist).
445 * @since 2.0.0
446 *
447 */
448 public static function delete_user( $user_id, $store = true ) {
449 $users = Freemius::get_all_users();
450
451 if ( ! is_array( $users ) || ! isset( $users[ $user_id ] ) ) {
452 return false;
453 }
454
455 unset( $users[ $user_id ] );
456
457 self::$_accounts->set_option( 'users', $users, $store );
458
459 return $user_id;
460 }
461
462 /**
463 * @author Daniele Alessandra (@danielealessandra)
464 *
465 * @return void
466 * @since 2.6.2
467 *
468 */
469 public static function load_required_static() {
470 if ( ! WP_FS__DEMO_MODE ) {
471 add_action( ( fs_is_network_admin() ? 'network_' : '' ) . 'admin_menu', array(
472 self::class,
473 '_add_debug_section',
474 ) );
475 }
476
477 add_action( "wp_ajax_fs_toggle_debug_mode", array( self::class, '_toggle_debug_mode' ) );
478
479 Freemius::add_ajax_action_static( 'get_debug_log', array( self::class, '_get_debug_log' ) );
480 Freemius::add_ajax_action_static( 'get_db_option', array( self::class, '_get_db_option' ) );
481 Freemius::add_ajax_action_static( 'set_db_option', array( self::class, '_set_db_option' ) );
482 }
483
484 /**
485 * @author Daniele Alessandra (@danielealessandra)
486 *
487 * @return void
488 *
489 * @since 2.6.2
490 */
491 public static function register_hooks() {
492 add_action( 'fs_debug_turn_off_logging_hook', array( self::class, '_turn_off_debug_mode' ) );
493 }
494
495 /**
496 * @author Daniele Alessandra (@danielealessandra)
497 *
498 * @param int $is_on
499 *
500 * @return void
501 *
502 * @since 2.6.2
503 */
504 private static function update_debug_mode_option( $is_on ) {
505 update_option( 'fs_debug_mode', $is_on );
506 }
507
508 }
509