|
1 | 1 | <?php
|
2 | 2 |
|
3 |
| -add_action("init", "wp_tracy_init_action", 1); |
| 3 | +add_action("init", "wp_tracy_init_action", 2); |
4 | 4 |
|
5 |
| -function wp_tracy_init_action() { |
| 5 | +function wp_tracy_init_action() |
| 6 | +{ |
6 | 7 | if (defined("DOING_AJAX") && DOING_AJAX) {
|
7 | 8 | return; // for IE compatibility WordPress media upload
|
8 | 9 | }
|
9 | 10 |
|
10 |
| - if (defined("WP_TRACY_CHECK_USER_LOGGED_IN") && WP_TRACY_CHECK_USER_LOGGED_IN && is_user_logged_in()) { |
11 |
| - return; // cancel for anonymous users |
12 |
| - } |
13 |
| - |
14 |
| - Tracy\Debugger::enable(defined("WP_TRACY_ENABLE_MODE") ? WP_TRACY_ENABLE_MODE : null); // hooray, enabling debugging using Tracy |
15 |
| - // panels in the correct order |
16 |
| - $defaultPanels = array( |
| 11 | + $defaultPanelsClasses = [ |
17 | 12 | "WpTracy\\WpPanel",
|
18 | 13 | "WpTracy\\WpUserPanel",
|
19 | 14 | "WpTracy\\WpPostPanel",
|
20 | 15 | "WpTracy\\WpQueryPanel",
|
21 | 16 | "WpTracy\\WpQueriedObjectPanel",
|
22 | 17 | "WpTracy\\WpDbPanel",
|
23 | 18 | "WpTracy\\WpRewritePanel",
|
24 |
| - ); |
25 |
| - $panels = apply_filters("wp_tracy_panels_filter", $defaultPanels); |
| 19 | + ]; // in the correct order |
| 20 | + |
| 21 | + $defaultSettings = [ |
| 22 | + "check-is-user-logged-in" => defined("WP_TRACY_CHECK_IS_USER_LOGGED_IN") ? WP_TRACY_CHECK_IS_USER_LOGGED_IN : "off", |
| 23 | + "only-for-user-id" => defined("WP_TRACY_ONLY_FOR_USER_ID") ? WP_TRACY_ONLY_FOR_USER_ID : null, |
| 24 | + "debugger-mode" => defined("WP_TRACY_ENABLE_MODE") ? WP_TRACY_ENABLE_MODE : "detect", |
| 25 | + "panels-classes" => $defaultPanelsClasses, |
| 26 | + "panels-filtering-allowed" => defined("WP_TRACY_PANELS_FILTERING_ALLOWED") ? WP_TRACY_PANELS_FILTERING_ALLOWED : "on", |
| 27 | + ]; |
| 28 | + |
| 29 | + $userSettings = get_option("wp-tracy-user-settings", []); |
| 30 | + |
| 31 | + $settings = wp_parse_args($userSettings, $defaultSettings); |
| 32 | + |
| 33 | + if ($settings["check-is-user-logged-in"] === "on") { |
| 34 | + $isUserLoggedIn = is_user_logged_in(); |
| 35 | + if (!$isUserLoggedIn) { |
| 36 | + return; // cancel for anonymous users |
| 37 | + } |
| 38 | + $onlyForUserId = $settings["only-for-user-id"]; |
| 39 | + if ($onlyForUserId > 0 && $onlyForUserId != get_current_user_id()) { |
| 40 | + return; // cancel other users |
| 41 | + } |
| 42 | + } |
| 43 | + |
| 44 | + switch ($settings["debugger-mode"]) { |
| 45 | + case "development": |
| 46 | + $debugMode = Tracy\Debugger::DEVELOPMENT; |
| 47 | + break; |
| 48 | + case "production": |
| 49 | + $debugMode = Tracy\Debugger::PRODUCTION; |
| 50 | + break; |
| 51 | + default: |
| 52 | + $debugMode = Tracy\Debugger::DETECT; |
| 53 | + break; |
| 54 | + } |
| 55 | + Tracy\Debugger::enable($debugMode); // hooray, enabling debugging using Tracy |
| 56 | + |
| 57 | + $panelsClasses = $settings["panels-classes"]; |
| 58 | + if (!is_array($panelsClasses)) { |
| 59 | + trigger_error("\"wp-tracy-user-settings->panels-classes\" option must be type of array.", E_USER_WARNING); |
| 60 | + exit; |
| 61 | + } |
| 62 | + |
| 63 | + // panels (custom) filtering |
| 64 | + if ($settings["panels-filtering-allowed"] === "on") { |
| 65 | + $panelsClasses = apply_filters("wp_tracy_panels_filter", $panelsClasses); |
| 66 | + if (!is_array($panelsClasses)) { |
| 67 | + trigger_error("\"wp_tracy_panels_filter\" must return type of array.", E_USER_WARNING); |
| 68 | + exit; |
| 69 | + } |
| 70 | + } |
26 | 71 |
|
27 | 72 | // panels registration
|
28 |
| - foreach ($panels as $className) { |
29 |
| - Tracy\Debugger::getBar()->addPanel(new $className); |
| 73 | + foreach ($panelsClasses as $className) { |
| 74 | + $panel = new $className; |
| 75 | + if ($panel instanceof Tracy\IBarPanel) { |
| 76 | + Tracy\Debugger::getBar()->addPanel(new $className); |
| 77 | + } |
30 | 78 | }
|
31 | 79 | }
|
0 commit comments