PluginProbe
BlockSpare – Gutenberg Blocks for News, Magazine, Blog & Business Websites / 2.1.2
BlockSpare – Gutenberg Blocks for News, Magazine, Blog & Business Websites v2.1.2
4.1.0 trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.1.0 1.1.1 1.1.2 1.2.0 1.2.1 1.2.2 1.2.3 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 2.1.2 2.5.0 2.5.3 2.6.1 All 38 releases
blockspare / freemius / templates / debug.php

debug.php in BlockSpare – Gutenberg Blocks for News, Magazine, Blog & Business Websites 2.1.2, at freemius/templates/debug.php

766 lines 34.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * @package Freemius
4 * @copyright Copyright (c) 2015, Freemius, Inc.
5 * @license https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
6 * @since 1.1.1
7 */
8
9 if ( ! defined( 'ABSPATH' ) ) {
10 exit;
11 }
12
13 global $fs_active_plugins;
14
15 $fs_options = FS_Options::instance( WP_FS__ACCOUNTS_OPTION_NAME, true );
16
17 $off_text = fs_text_x_inline( 'Off', 'as turned off' );
18 $on_text = fs_text_x_inline( 'On', 'as turned on' );
19 ?>
20 <h1><?php echo fs_text_inline( 'Freemius Debug' ) . ' - ' . fs_text_inline( 'SDK' ) . ' v.' . $fs_active_plugins->newest->version ?></h1>
21 <div>
22 <!-- Debugging Switch -->
23 <?php //$debug_mode = get_option( 'fs_debug_mode', null ) ?>
24 <span class="fs-switch-label"><?php fs_esc_html_echo_x_inline( 'Debugging', 'as code debugging' ) ?></span>
25
26 <div class="fs-switch fs-round <?php echo WP_FS__DEBUG_SDK ? 'fs-on' : 'fs-off' ?>">
27 <div class="fs-toggle"></div>
28 </div>
29 <script type="text/javascript">
30 (function ($) {
31 $(document).ready(function () {
32 // Switch toggle
33 $( '.fs-switch' ).click( function () {
34 $( this )
35 .toggleClass( 'fs-on' )
36 .toggleClass( 'fs-off' );
37
38 $.post( ajaxurl, {
39 action: 'fs_toggle_debug_mode',
40 // As such we don't need to use `wp_json_encode` method but using it to follow wp.org guideline.
41 _wpnonce : <?php echo wp_json_encode( wp_create_nonce( 'fs_toggle_debug_mode' ) ); ?>,
42 is_on : ($(this).hasClass( 'fs-on' ) ? 1 : 0)
43 }, function ( response ) {
44 if ( 1 == response ) {
45 // Refresh page on success.
46 location.reload();
47 }
48 });
49 });
50 });
51 }(jQuery));
52 </script>
53 </div>
54 <h2><?php fs_esc_html_echo_inline( 'Actions', 'actions' ) ?></h2>
55 <table>
56 <tbody>
57 <tr>
58 <td>
59 <!-- Delete All Accounts -->
60 <form action="" method="POST">
61 <input type="hidden" name="fs_action" value="restart_freemius">
62 <?php wp_nonce_field( 'restart_freemius' ) ?>
63 <button class="button button-primary"
64 onclick="if (confirm('<?php fs_esc_attr_echo_inline( 'Are you sure you want to delete all Freemius data?', 'delete-all-confirm' ) ?>')) this.parentNode.submit(); return false;"><?php fs_esc_html_echo_inline( 'Delete All Accounts' ) ?></button>
65 </form>
66 </td>
67 <td>
68 <!-- Clear API Cache -->
69 <form action="" method="POST">
70 <input type="hidden" name="fs_clear_api_cache" value="true">
71 <button class="button button-primary"><?php fs_esc_html_echo_inline( 'Clear API Cache' ) ?></button>
72 </form>
73 </td>
74 <td>
75 <!-- Clear Updates Transients -->
76 <form action="" method="POST">
77 <input type="hidden" name="fs_action" value="clear_updates_data">
78 <?php wp_nonce_field( 'clear_updates_data' ) ?>
79 <button class="button"><?php fs_esc_html_echo_inline( 'Clear Updates Transients' ) ?></button>
80 </form>
81 </td>
82 <td>
83 <!-- Sync Data with Server -->
84 <form action="" method="POST">
85 <input type="hidden" name="background_sync" value="true">
86 <button class="button button-primary"><?php fs_esc_html_echo_inline( 'Sync Data From Server' ) ?></button>
87 </form>
88 </td>
89 <?php if ( fs_is_network_admin() && true !== $fs_options->get_option( 'ms_migration_complete', false, true ) ) : ?>
90 <td>
91 <!-- Migrate Options to Network -->
92 <form action="" method="POST">
93 <input type="hidden" name="fs_action" value="migrate_options_to_network">
94 <?php wp_nonce_field( 'migrate_options_to_network' ) ?>
95 <button class="button button-primary"><?php fs_esc_html_echo_inline( 'Migrate Options to Network' ) ?></button>
96 </form>
97 </td>
98 <?php endif ?>
99 <td>
100 <button id="fs_load_db_option" class="button"><?php fs_esc_html_echo_inline( 'Load DB Option' ) ?></button>
101 </td>
102 <td>
103 <button id="fs_set_db_option" class="button"><?php fs_esc_html_echo_inline( 'Set DB Option' ) ?></button>
104 </td>
105 </tr>
106 </tbody>
107 </table>
108 <script type="text/javascript">
109 (function ($) {
110 $('#fs_load_db_option').click(function () {
111 var optionName = prompt('Please enter the option name:');
112
113 if (optionName) {
114 $.post(ajaxurl, {
115 action : 'fs_get_db_option',
116 // As such we don't need to use `wp_json_encode` method but using it to follow wp.org guideline.
117 _wpnonce : <?php echo wp_json_encode( wp_create_nonce( 'fs_get_db_option' ) ); ?>,
118 option_name: optionName
119 }, function (response) {
120 if (response.data.value)
121 prompt('The option value is:', response.data.value);
122 else
123 alert('Oops... Option does not exist in the DB.');
124 });
125 }
126 });
127
128 $('#fs_set_db_option').click(function () {
129 var optionName = prompt('Please enter the option name:');
130
131 if (optionName) {
132 var optionValue = prompt('Please enter the option value:');
133
134 if (optionValue) {
135 $.post(ajaxurl, {
136 action : 'fs_set_db_option',
137 // As such we don't need to use `wp_json_encode` method but using it to follow wp.org guideline.
138 _wpnonce : <?php echo wp_json_encode( wp_create_nonce( 'fs_set_db_option' ) ); ?>,
139 option_name : optionName,
140 option_value: optionValue
141 }, function () {
142 alert('Option was successfully set.');
143 });
144 }
145 }
146 });
147 })(jQuery);
148 </script>
149 <?php
150 if ( ! defined( 'FS_API__ADDRESS' ) ) {
151 define( 'FS_API__ADDRESS', '://api.freemius.com' );
152 }
153 if ( ! defined( 'FS_API__SANDBOX_ADDRESS' ) ) {
154 define( 'FS_API__SANDBOX_ADDRESS', '://sandbox-api.freemius.com' );
155 }
156
157 $defines = array(
158 array(
159 'key' => 'WP_FS__REMOTE_ADDR',
160 'val' => WP_FS__REMOTE_ADDR,
161 ),
162 array(
163 'key' => 'WP_FS__ADDRESS_PRODUCTION',
164 'val' => WP_FS__ADDRESS_PRODUCTION,
165 ),
166 array(
167 'key' => 'FS_API__ADDRESS',
168 'val' => FS_API__ADDRESS,
169 ),
170 array(
171 'key' => 'FS_API__SANDBOX_ADDRESS',
172 'val' => FS_API__SANDBOX_ADDRESS,
173 ),
174 array(
175 'key' => 'WP_FS__DIR',
176 'val' => WP_FS__DIR,
177 ),
178 )
179 ?>
180 <br>
181 <table class="widefat">
182 <thead>
183 <tr>
184 <th><?php fs_esc_html_echo_inline( 'Key', 'key' ) ?></th>
185 <th><?php fs_esc_html_echo_inline( 'Value', 'value' ) ?></th>
186 </tr>
187 </thead>
188 <tbody>
189 <?php $alternate = false;
190 foreach ( $defines as $p ) : ?>
191 <tr<?php if ( $alternate ) {
192 echo ' class="alternate"';
193 } ?>>
194 <td><?php echo $p['key'] ?></td>
195 <td><?php echo $p['val'] ?></td>
196 </tr>
197 <?php $alternate = ! $alternate ?>
198 <?php endforeach ?>
199 </tbody>
200 </table>
201 <h2><?php fs_esc_html_echo_x_inline( 'SDK Versions', 'as software development kit versions', 'sdk-versions' ) ?></h2>
202 <table id="fs_sdks" class="widefat">
203 <thead>
204 <tr>
205 <th><?php fs_esc_html_echo_x_inline( 'Version', 'product version' ) ?></th>
206 <th><?php fs_esc_html_echo_inline( 'SDK Path' ) ?></th>
207 <th><?php fs_esc_html_echo_inline( 'Module Path' ) ?></th>
208 <th><?php fs_esc_html_echo_inline( 'Is Active' ) ?></th>
209 </tr>
210 </thead>
211 <tbody>
212 <?php foreach ( $fs_active_plugins->plugins as $sdk_path => $data ) : ?>
213 <?php $is_active = ( WP_FS__SDK_VERSION == $data->version ) ?>
214 <tr<?php if ( $is_active ) {
215 echo ' style="background: #E6FFE6; font-weight: bold"';
216 } ?>>
217 <td><?php echo $data->version ?></td>
218 <td><?php echo $sdk_path ?></td>
219 <td><?php echo $data->plugin_path ?></td>
220 <td><?php echo ( $is_active ) ? 'Active' : 'Inactive' ?></td>
221 </tr>
222 <?php endforeach ?>
223 </tbody>
224 </table>
225
226 <?php
227 $module_types = array(
228 WP_FS__MODULE_TYPE_PLUGIN,
229 WP_FS__MODULE_TYPE_THEME
230 );
231 ?>
232
233 <?php foreach ( $module_types as $module_type ) : ?>
234 <?php $modules = fs_get_entities( $fs_options->get_option( $module_type . 's' ), FS_Plugin::get_class_name() ) ?>
235 <?php if ( is_array( $modules ) && count( $modules ) > 0 ) : ?>
236 <h2><?php echo esc_html( ( WP_FS__MODULE_TYPE_PLUGIN == $module_type ) ? fs_text_inline( 'Plugins', 'plugins' ) : fs_text_inline( 'Themes', 'themes' ) ) ?></h2>
237 <table id="fs_<?php echo $module_type ?>" class="widefat">
238 <thead>
239 <tr>
240 <th><?php fs_esc_html_echo_inline( 'ID', 'id' ) ?></th>
241 <th><?php fs_esc_html_echo_inline( 'Slug' ) ?></th>
242 <th><?php fs_esc_html_echo_x_inline( 'Version', 'product version' ) ?></th>
243 <th><?php fs_esc_html_echo_inline( 'Title' ) ?></th>
244 <th><?php fs_esc_html_echo_x_inline( 'API', 'as application program interface' ) ?></th>
245 <th><?php fs_esc_html_echo_inline( 'Freemius State' ) ?></th>
246 <th><?php fs_esc_html_echo_inline( 'Module Path' ) ?></th>
247 <th><?php fs_esc_html_echo_inline( 'Public Key' ) ?></th>
248 <?php if ( is_multisite() ) : ?>
249 <th><?php fs_esc_html_echo_inline( 'Network Blog' ) ?></th>
250 <th><?php fs_esc_html_echo_inline( 'Network User' ) ?></th>
251 <?php endif ?>
252 <th><?php fs_esc_html_echo_inline( 'Actions' ) ?></th>
253 </tr>
254 </thead>
255 <tbody>
256 <?php foreach ( $modules as $slug => $data ) : ?>
257 <?php
258 if ( WP_FS__MODULE_TYPE_THEME !== $module_type ) {
259 $is_active = is_plugin_active( $data->file );
260 } else {
261 $current_theme = wp_get_theme();
262 $is_active = ( $current_theme->stylesheet === $data->file );
263
264 if ( ! $is_active && is_child_theme() ) {
265 $parent_theme = $current_theme->parent();
266
267 $is_active = ( ( $parent_theme instanceof WP_Theme ) && $parent_theme->stylesheet === $data->file );
268 }
269 }
270 ?>
271 <?php $fs = $is_active ? freemius( $data->id ) : null ?>
272 <tr<?php if ( $is_active ) {
273 if ( $fs->has_api_connectivity() && $fs->is_on() ) {
274 echo ' style="background: #E6FFE6; font-weight: bold"';
275 } else {
276 echo ' style="background: #ffd0d0; font-weight: bold"';
277 }
278 } ?>>
279 <td><?php echo $data->id ?></td>
280 <td><?php echo $slug ?></td>
281 <td><?php echo $data->version ?></td>
282 <td><?php echo $data->title ?></td>
283 <td<?php if ( $is_active && ! $fs->has_api_connectivity() ) {
284 echo ' style="color: red; text-transform: uppercase;"';
285 } ?>><?php if ( $is_active ) {
286 echo esc_html( $fs->has_api_connectivity() ?
287 fs_text_x_inline( 'Connected', 'as connection was successful' ) :
288 fs_text_x_inline( 'Blocked', 'as connection blocked' )
289 );
290 } ?></td>
291 <td<?php if ( $is_active && ! $fs->is_on() ) {
292 echo ' style="color: red; text-transform: uppercase;"';
293 } ?>><?php if ( $is_active ) {
294 echo esc_html( $fs->is_on() ?
295 $on_text :
296 $off_text
297 );
298 } ?></td>
299 <td><?php echo $data->file ?></td>
300 <td><?php echo $data->public_key ?></td>
301 <?php if ( is_multisite() ) : ?>
302 <?php
303 $network_blog_id = null;
304 $network_user = null;
305
306 if ( is_object( $fs ) ) {
307 $network_blog_id = $fs->get_network_install_blog_id();
308 $network_user = $fs->get_network_user();
309 }
310 ?>
311 <td><?php echo is_numeric( $network_blog_id ) ? $network_blog_id : '' ?></td>
312 <td><?php if ( is_object( $network_user ) ) {
313 echo $network_user->email;
314 } ?></td>
315 <?php endif ?>
316 <td>
317 <?php if ( $is_active ) : ?>
318 <?php if ( $fs->has_trial_plan() ) : ?>
319 <form action="" method="POST">
320 <input type="hidden" name="fs_action" value="simulate_trial">
321 <input type="hidden" name="module_id" value="<?php echo $fs->get_id() ?>">
322 <?php wp_nonce_field( 'simulate_trial' ) ?>
323
324 <button type="submit" class="button button-primary simulate-trial"><?php fs_esc_html_echo_inline( 'Simulate Trial Promotion' ) ?></button>
325 </form>
326 <?php endif ?>
327 <?php if ( $fs->is_registered() ) : ?>
328 <a class="button" href="<?php echo $fs->get_account_url() ?>"><?php fs_esc_html_echo_inline( 'Account', 'account' ) ?></a>
329 <?php endif ?>
330 <?php if ( fs_is_network_admin() && ! $fs->is_network_upgrade_mode() ) : ?>
331 <form action="" method="POST">
332 <input type="hidden" name="fs_action" value="simulate_network_upgrade">
333 <input type="hidden" name="module_id" value="<?php echo $fs->get_id() ?>">
334 <?php wp_nonce_field( 'simulate_network_upgrade' ) ?>
335
336 <button type="submit" class="button button-small"><?php fs_esc_html_echo_inline( 'Simulate Network Upgrade' ) ?></button>
337 </form>
338 <?php endif ?>
339 <?php endif ?>
340 </td>
341 </tr>
342 <?php endforeach ?>
343 </tbody>
344 </table>
345 <?php endif ?>
346 <?php endforeach ?>
347 <?php foreach ( $module_types as $module_type ) : ?>
348 <?php
349 /**
350 * @var array $VARS
351 * @var array[string]FS_Site|array[string]FS_Site[] $sites_map
352 */
353 $sites_map = $VARS[ $module_type . '_sites' ];
354
355 $is_multisite = is_multisite();
356 $all_plans = false;
357 ?>
358 <?php if ( is_array( $sites_map ) && count( $sites_map ) > 0 ) : ?>
359 <h2><?php echo esc_html( sprintf(
360 /* translators: %s: 'plugin' or 'theme' */
361 fs_text_inline( '%s Installs', 'module-installs' ),
362 ( WP_FS__MODULE_TYPE_PLUGIN === $module_type ? fs_text_inline( 'Plugin', 'plugin' ) : fs_text_inline( 'Theme', 'theme' ) )
363 ) ) ?> / <?php fs_esc_html_echo_x_inline( 'Sites', 'like websites', 'sites' ) ?></h2>
364 <table id="fs_<?php echo $module_type ?>_installs" class="widefat">
365 <thead>
366 <tr>
367 <th><?php fs_esc_html_echo_inline( 'ID', 'id' ) ?></th>
368 <?php if ( $is_multisite ) : ?>
369 <th><?php fs_esc_html_echo_inline( 'Blog ID' ) ?></th>
370 <th><?php fs_esc_html_echo_inline( 'Address' ) ?></th>
371 <?php endif ?>
372 <th><?php fs_esc_html_echo_inline( 'Slug' ) ?></th>
373 <th><?php fs_esc_html_echo_inline( 'User ID' ) ?></th>
374 <th><?php fs_esc_html_echo_inline( 'License ID' ) ?></th>
375 <th><?php fs_esc_html_echo_x_inline( 'Plan', 'as product pricing plan', 'plan' ) ?></th>
376 <th><?php fs_esc_html_echo_inline( 'Public Key' ) ?></th>
377 <th><?php fs_esc_html_echo_inline( 'Secret Key' ) ?></th>
378 <th><?php fs_esc_html_echo_inline( 'Actions' ) ?></th>
379 </tr>
380 </thead>
381 <tbody>
382 <?php foreach ( $sites_map as $slug => $sites ) : ?>
383 <?php if ( ! is_array( $sites ) ) {
384 $sites = array( $sites );
385 } ?>
386 <?php foreach ( $sites as $site ) : ?>
387 <tr>
388 <td><?php echo $site->id ?></td>
389 <?php if ( $is_multisite ) : ?>
390 <td><?php echo $site->blog_id ?></td>
391 <td><?php echo fs_strip_url_protocol( $site->url ) ?></td>
392 <?php endif ?>
393 <td><?php echo $slug ?></td>
394 <td><?php echo $site->user_id ?></td>
395 <td><?php echo !empty($site->license_id) ? $site->license_id : '' ?></td>
396 <td><?php
397 $plan_name = '';
398 if ( FS_Plugin_Plan::is_valid_id( $site->plan_id ) ) {
399 if ( false === $all_plans ) {
400 $option_name = 'plans';
401 if ( WP_FS__MODULE_TYPE_PLUGIN !== $module_type ) {
402 $option_name = $module_type . '_' . $option_name;
403 }
404
405 $all_plans = fs_get_entities( $fs_options->get_option( $option_name, array() ), FS_Plugin_Plan::get_class_name() );
406 }
407
408 foreach ( $all_plans[ $slug ] as $plan ) {
409 $plan_id = Freemius::_decrypt( $plan->id );
410
411 if ( $site->plan_id == $plan_id ) {
412 $plan_name = Freemius::_decrypt( $plan->name );
413 break;
414 }
415 }
416 }
417
418 echo $plan_name;
419 ?></td>
420 <td><?php echo $site->public_key ?></td>
421 <td><?php
422 $plugin_storage = FS_Storage::instance( $module_type, $slug );
423
424 echo $plugin_storage->is_whitelabeled ?
425 FS_Plugin_License::mask_secret_key_for_html( $site->secret_key ) :
426 esc_html( $site->secret_key );
427 ?></td>
428 <td>
429 <form action="" method="POST">
430 <input type="hidden" name="fs_action" value="delete_install">
431 <?php wp_nonce_field( 'delete_install' ) ?>
432 <input type="hidden" name="module_id" value="<?php echo $site->plugin_id ?>">
433 <?php if ( $is_multisite ) : ?>
434 <input type="hidden" name="blog_id" value="<?php echo $site->blog_id ?>">
435 <?php endif ?>
436 <input type="hidden" name="module_type" value="<?php echo $module_type ?>">
437 <input type="hidden" name="slug" value="<?php echo $slug ?>">
438 <button type="submit" class="button"><?php fs_esc_html_echo_x_inline( 'Delete', 'verb', 'delete' ) ?></button>
439 </form>
440 </td>
441 </tr>
442 <?php endforeach ?>
443 <?php endforeach ?>
444 </tbody>
445 </table>
446 <?php endif ?>
447 <?php endforeach ?>
448 <?php
449 $addons = $VARS['addons'];
450 ?>
451 <?php foreach ( $addons as $plugin_id => $plugin_addons ) : ?>
452 <h2><?php echo esc_html( sprintf( fs_text_inline( 'Add Ons of module %s', 'addons-of-x' ), $plugin_id ) ) ?></h2>
453 <table id="fs_addons" class="widefat">
454 <thead>
455 <tr>
456 <th><?php fs_esc_html_echo_inline( 'ID', 'id' ) ?></th>
457 <th><?php fs_esc_html_echo_inline( 'Title' ) ?></th>
458 <th><?php fs_esc_html_echo_inline( 'Slug' ) ?></th>
459 <th><?php fs_esc_html_echo_x_inline( 'Version', 'product version' ) ?></th>
460 <th><?php fs_esc_html_echo_inline( 'Public Key' ) ?></th>
461 <th><?php fs_esc_html_echo_inline( 'Secret Key' ) ?></th>
462 </tr>
463 </thead>
464 <tbody>
465 <?php
466 /**
467 * @var FS_Plugin[] $plugin_addons
468 */
469 foreach ( $plugin_addons as $addon ) : ?>
470 <tr>
471 <td><?php echo $addon->id ?></td>
472 <td><?php echo $addon->title ?></td>
473 <td><?php echo $addon->slug ?></td>
474 <td><?php echo $addon->version ?></td>
475 <td><?php echo $addon->public_key ?></td>
476 <td><?php echo esc_html( $addon->secret_key ) ?></td>
477 </tr>
478 <?php endforeach ?>
479 </tbody>
480 </table>
481 <?php endforeach ?>
482 <?php
483 /**
484 * @var FS_User[] $users
485 */
486 $users = $VARS['users'];
487 $users_with_developer_license_by_id = array();
488
489 foreach ( $module_types as $module_type ) {
490 /**
491 * @var FS_Plugin_License[] $licenses
492 */
493 $licenses = $VARS[ $module_type . '_licenses' ];
494
495 foreach ( $licenses as $license ) {
496 if ( $license->is_whitelabeled ) {
497 $users_with_developer_license_by_id[ $license->user_id ] = true;
498 }
499 }
500 }
501
502 ?>
503 <?php if ( is_array( $users ) && 0 < count( $users ) ) : ?>
504 <h2><?php fs_esc_html_echo_inline( 'Users' ) ?></h2>
505 <table id="fs_users" class="widefat">
506 <thead>
507 <tr>
508 <th><?php fs_esc_html_echo_inline( 'ID', 'id' ) ?></th>
509 <th><?php fs_esc_html_echo_inline( 'Name' ) ?></th>
510 <th><?php fs_esc_html_echo_inline( 'Email' ) ?></th>
511 <th><?php fs_esc_html_echo_inline( 'Verified' ) ?></th>
512 <th><?php fs_esc_html_echo_inline( 'Public Key' ) ?></th>
513 <th><?php fs_esc_html_echo_inline( 'Secret Key' ) ?></th>
514 <th><?php fs_esc_html_echo_inline( 'Actions' ) ?></th>
515 </tr>
516 </thead>
517 <tbody>
518 <?php foreach ( $users as $user_id => $user ) : ?>
519 <?php $has_developer_license = isset( $users_with_developer_license_by_id[ $user_id ] ) ?>
520 <tr>
521 <td><?php echo $user->id ?></td>
522 <td><?php echo $has_developer_license ? '' : $user->get_name() ?></td>
523 <td>
524 <?php if ( ! $has_developer_license ) : ?>
525 <a href="mailto:<?php echo esc_attr( $user->email ) ?>"><?php echo $user->email ?></a>
526 <?php endif ?>
527 </td>
528 <td><?php echo $has_developer_license ? '' : json_encode( $user->is_verified ) ?></td>
529 <td><?php echo $user->public_key ?></td>
530 <td><?php echo $has_developer_license ? FS_Plugin_License::mask_secret_key_for_html($user->secret_key) : esc_html( $user->secret_key ) ?></td>
531 <td>
532 <?php if ( ! $has_developer_license ) : ?>
533 <form action="" method="POST">
534 <input type="hidden" name="fs_action" value="delete_user">
535 <?php wp_nonce_field( 'delete_user' ) ?>
536 <input type="hidden" name="user_id" value="<?php echo $user->id ?>">
537 <button type="submit" class="button"><?php fs_esc_html_echo_x_inline( 'Delete', 'verb', 'delete' ) ?></button>
538 </form>
539 <?php endif ?>
540 </td>
541 </tr>
542 <?php endforeach ?>
543 </tbody>
544 </table>
545 <?php endif ?>
546 <?php foreach ( $module_types as $module_type ) : ?>
547 <?php
548 /**
549 * @var FS_Plugin_License[] $licenses
550 */
551 $licenses = $VARS[ $module_type . '_licenses' ] ?>
552 <?php if ( is_array( $licenses ) && count( $licenses ) > 0 ) : ?>
553 <h2><?php echo esc_html( sprintf( fs_text_inline( '%s Licenses', 'module-licenses' ), ( WP_FS__MODULE_TYPE_PLUGIN === $module_type ? fs_text_inline( 'Plugin', 'plugin' ) : fs_text_inline( 'Theme', 'theme' ) ) ) ) ?></h2>
554 <table id="fs_<?php echo $module_type ?>_licenses" class="widefat">
555 <thead>
556 <tr>
557 <th><?php fs_esc_html_echo_inline( 'ID', 'id' ) ?></th>
558 <th><?php fs_esc_html_echo_inline( 'Plugin ID' ) ?></th>
559 <th><?php fs_esc_html_echo_inline( 'User ID' ) ?></th>
560 <th><?php fs_esc_html_echo_inline( 'Plan ID' ) ?></th>
561 <th><?php fs_esc_html_echo_inline( 'Quota' ) ?></th>
562 <th><?php fs_esc_html_echo_inline( 'Activated' ) ?></th>
563 <th><?php fs_esc_html_echo_inline( 'Blocking' ) ?></th>
564 <th><?php fs_esc_html_echo_inline( 'Type' ) ?></th>
565 <th><?php fs_esc_html_echo_inline( 'License Key' ) ?></th>
566 <th><?php fs_esc_html_echo_x_inline( 'Expiration', 'as expiration date' ) ?></th>
567 </tr>
568 </thead>
569 <tbody>
570 <?php foreach ( $licenses as $license ) : ?>
571 <tr>
572 <td><?php echo $license->id ?></td>
573 <td><?php echo $license->plugin_id ?></td>
574 <td><?php echo $license->user_id ?></td>
575 <td><?php echo $license->plan_id ?></td>
576 <td><?php echo $license->is_unlimited() ? 'Unlimited' : ( $license->is_single_site() ? 'Single Site' : $license->quota ) ?></td>
577 <td><?php echo $license->activated ?></td>
578 <td><?php echo $license->is_block_features ? 'Blocking' : 'Flexible' ?></td>
579 <td><?php echo $license->is_whitelabeled ? 'Whitelabeled' : 'Normal' ?></td>
580 <td><?php
581 echo $license->is_whitelabeled ?
582 $license->get_html_escaped_masked_secret_key() :
583 esc_html( $license->secret_key );
584 ?></td>
585 <td><?php echo $license->expiration ?></td>
586 </tr>
587 <?php endforeach ?>
588 </tbody>
589 </table>
590 <?php endif ?>
591 <?php endforeach ?>
592 <?php if ( FS_Logger::is_storage_logging_on() ) : ?>
593
594 <h2><?php fs_esc_html_echo_inline( 'Debug Log', 'debug-log' ) ?></h2>
595
596 <div id="fs_debug_filters">
597 <select name="type">
598 <option value="" selected="selected"><?php fs_esc_html_echo_inline( 'All Types', 'all-types' ) ?></option>
599 <option value="warn_error">Warnings & Errors</option>
600 <option value="error">Errors</option>
601 <option value="warn">Warnings</option>
602 <option value="info">Info</option>
603 </select>
604 <select name="request_type">
605 <option value="" selected="selected"><?php fs_esc_html_echo_inline( 'All Requests', 'all-requests' ) ?></option>
606 <option value="call">Sync</option>
607 <option value="ajax">AJAX</option>
608 <option value="cron">WP Cron</option>
609 </select>
610 <input name="file" type="text" placeholder="<?php fs_esc_attr_echo_inline( 'File' ) ?>"/>
611 <input name="function" type="text" placeholder="<?php fs_esc_attr_echo_inline( 'Function' ) ?>"/>
612 <input name="process_id" type="text" placeholder="<?php fs_esc_attr_echo_inline( 'Process ID' ) ?>"/>
613 <input name="logger" type="text" placeholder="<?php fs_esc_attr_echo_inline( 'Logger' ) ?>"/>
614 <input name="message" type="text" placeholder="<?php fs_esc_attr_echo_inline( 'Message' ) ?>"/>
615 <div style="margin: 10px 0">
616 <button id="fs_filter" class="button" style="float: left"><i class="dashicons dashicons-filter"></i> <?php fs_esc_html_echo_inline( 'Filter', 'filter' ) ?>
617 </button>
618
619 <form action="" method="POST" style="float: left; margin-left: 10px;">
620 <input type="hidden" name="fs_action" value="download_logs">
621 <?php wp_nonce_field( 'download_logs' ) ?>
622 <div class="fs-filters"></div>
623 <button id="fs_download" class="button" type="submit"><i
624 class="dashicons dashicons-download"></i> <?php fs_esc_html_echo_inline( 'Download' ) ?></button>
625 </form>
626 <div style="clear: both"></div>
627 </div>
628 </div>
629
630 <div id="fs_log_book" style="height: 300px; overflow: auto;">
631 <table class="widefat">
632 <thead>
633 <tr>
634 <th>#</th>
635 <th><?php fs_esc_html_echo_inline( 'Type' ) ?></th>
636 <th><?php fs_esc_html_echo_inline( 'ID', 'id' ) ?></th>
637 <th><?php fs_esc_html_echo_inline( 'Function' ) ?></th>
638 <th><?php fs_esc_html_echo_inline( 'Message' ) ?></th>
639 <th><?php fs_esc_html_echo_inline( 'File' ) ?></th>
640 <th><?php fs_esc_html_echo_inline( 'Timestamp' ) ?></th>
641 </tr>
642 </thead>
643 <tbody>
644 <tr style="display: none">
645 <td>{$log.log_order}.</td>
646 <td class="fs-col--type">{$log.type}</td>
647 <td class="fs-col--logger">{$log.logger}</td>
648 <td class="fs-col--function">{$log.function}</td>
649 <td class="fs-col--message">
650 <a href="#" onclick="jQuery(this).parent().find('div').toggle(); return false;">
651 <nobr>{$log.message_short}</nobr>
652 </a>
653 <div style="display: none;">{$log.message}</div>
654 </td>
655 <td class="fs-col--file">{$log.file}:{$log.line}</td>
656 <td class="fs-col--timestamp">{$log.created}</td>
657 </tr>
658
659 </tbody>
660 </table>
661 </div>
662 <script type="text/javascript">
663 jQuery(document).ready(function ($) {
664 var filtersChanged = false,
665 offset = 0,
666 limit = 200,
667 prevFiltersSignature = null;
668
669 var getFilters = function () {
670 var filters = {},
671 signature = '';
672
673 $('#fs_debug_filters').find('select, input').each(function (i, e) {
674 var $element = $(e);
675
676 if ('hidden' === $element.attr('type'))
677 return;
678
679 var val = $element.val();
680 if ('' !== val.trim()) {
681 var name = $(e).attr('name');
682 filters[name] = val;
683 signature += name + '=' + val + '~';
684 }
685 });
686
687 if (signature != prevFiltersSignature) {
688 filtersChanged = true;
689 prevFiltersSignature = signature;
690 } else {
691 filtersChanged = false;
692 }
693
694 return filters;
695 };
696
697 $('#fs_download').parent().submit(function () {
698 var filters = getFilters(),
699 hiddenFields = '';
700
701 for (var f in filters) {
702 if (filters.hasOwnProperty(f)) {
703 hiddenFields += '<input type="hidden" name="filters[' + f + ']" value="' + filters[f] + '" />';
704 }
705 }
706
707 $(this).find('.fs-filters').html(hiddenFields);
708 });
709
710 var loadLogs = function () {
711 var $tbody = $('#fs_log_book tbody'),
712 template = $tbody.find('tr:first-child').html(),
713 filters = getFilters();
714
715 if (!filtersChanged) {
716 offset += limit;
717 } else {
718 // Cleanup table for new filter (only keep template row).
719 $tbody.find('tr').each(function (i, e) {
720 if (0 == i)
721 return;
722
723 $(e).remove();
724 });
725
726 offset = 0;
727 }
728
729 $.post(ajaxurl, {
730 action : 'fs_get_debug_log',
731 // As such we don't need to use `wp_json_encode` method but using it to follow wp.org guideline.
732 _wpnonce : <?php echo wp_json_encode( wp_create_nonce( 'fs_get_debug_log' ) ); ?>,
733 filters: filters,
734 offset : offset,
735 limit : limit
736 }, function (response) {
737
738 for (var i = 0; i < response.data.length; i++) {
739 var templateCopy = template;
740
741 response.data[i].message_short = (response.data[i].message.length > 32) ?
742 response.data[i].message.substr(0, 32) + '...' :
743 response.data[i].message;
744
745 for (var p in response.data[i]) {
746 if (response.data[i].hasOwnProperty(p)) {
747 templateCopy = templateCopy.replace('{$log.' + p + '}', response.data[i][p]);
748 }
749 }
750
751 $tbody.append('<tr' + (i % 2 ? ' class="alternate"' : '') + '>' + templateCopy + '</tr>');
752 }
753 });
754 };
755
756 $('#fs_filter').click(function () {
757 loadLogs();
758
759 return false;
760 });
761
762 loadLogs();
763 });
764 </script>
765 <?php endif ?>
766