updateChecker = $updateChecker; if ( isset($panelClass) ) { $this->panelClass = $panelClass; } if ( version_compare(PHP_VERSION, '5.3', '>=') && (strpos($this->panelClass, '\\') === false) ) { $this->panelClass = __NAMESPACE__ . '\\' . $this->panelClass; } add_filter('debug_bar_panels', array($this, 'addDebugBarPanel')); add_action('debug_bar_enqueue_scripts', array($this, 'enqueuePanelDependencies')); add_action('wp_ajax_puc_v4_debug_check_now', array($this, 'ajaxCheckNow')); } /** * Register the PUC Debug Bar panel. * * @param array $panels * @return array */ public function addDebugBarPanel($panels) { if ( $this->updateChecker->userCanInstallUpdates() ) { $panels[] = new $this->panelClass($this->updateChecker); } return $panels; } /** * Enqueue our Debug Bar scripts and styles. */ public function enqueuePanelDependencies() { wp_enqueue_style( 'puc-debug-bar-style-v4', $this->getLibraryUrl("/css/puc-debug-bar.css"), array('debug-bar'), '20171124' ); wp_enqueue_script( 'puc-debug-bar-js-v4', $this->getLibraryUrl("/js/debug-bar.js"), array('jquery'), '20201209' ); } /** * Run an update check and output the result. Useful for making sure that * the update checking process works as expected. */ public function ajaxCheckNow() { if ( $_POST['uid'] !== $this->updateChecker->getUniqueName('uid') ) { return; } $this->preAjaxRequest(); $update = $this->updateChecker->checkForUpdates(); if ( $update !== null ) { echo "An update is available:"; echo '
', htmlentities(print_r($update, true)), '
'; } else { echo 'No updates found.'; } $errors = $this->updateChecker->getLastRequestApiErrors(); if ( !empty($errors) ) { printf('

The update checker encountered %d API error%s.

', count($errors), (count($errors) > 1) ? 's' : ''); foreach (array_values($errors) as $num => $item) { $wpError = $item['error']; /** @var WP_Error $wpError */ printf('

%d) %s

', $num + 1, esc_html($wpError->get_error_message())); echo '
'; printf('
Error code:
%s
', esc_html($wpError->get_error_code())); if ( isset($item['url']) ) { printf('
Requested URL:
%s
', esc_html($item['url'])); } if ( isset($item['httpResponse']) ) { if ( is_wp_error($item['httpResponse']) ) { $httpError = $item['httpResponse']; /** @var WP_Error $httpError */ printf( '
WordPress HTTP API error:
%s (%s)
', esc_html($httpError->get_error_message()), esc_html($httpError->get_error_code()) ); } else { //Status code. printf( '
HTTP status:
%d %s
', wp_remote_retrieve_response_code($item['httpResponse']), wp_remote_retrieve_response_message($item['httpResponse']) ); //Headers. echo '
Response headers:
';
							foreach (wp_remote_retrieve_headers($item['httpResponse']) as $name => $value) {
								printf("%s: %s\n", esc_html($name), esc_html($value));
							}
							echo '
'; //Body. $body = wp_remote_retrieve_body($item['httpResponse']); if ( $body === '' ) { $body = '(Empty response.)'; } else if ( strlen($body) > self::RESPONSE_BODY_LENGTH_LIMIT ) { $length = strlen($body); $body = substr($body, 0, self::RESPONSE_BODY_LENGTH_LIMIT) . sprintf("\n(Long string truncated. Total length: %d bytes.)", $length); } printf('
Response body:
%s
', esc_html($body)); } } echo '
'; } } exit; } /** * Check access permissions and enable error display (for debugging). */ protected function preAjaxRequest() { if ( !$this->updateChecker->userCanInstallUpdates() ) { die('Access denied'); } check_ajax_referer('puc-ajax'); error_reporting(E_ALL); @ini_set('display_errors', 'On'); } /** * Remove hooks that were added by this extension. */ public function removeHooks() { remove_filter('debug_bar_panels', array($this, 'addDebugBarPanel')); remove_action('debug_bar_enqueue_scripts', array($this, 'enqueuePanelDependencies')); remove_action('wp_ajax_puc_v4_debug_check_now', array($this, 'ajaxCheckNow')); } /** * @param string $filePath * @return string */ private function getLibraryUrl($filePath) { $absolutePath = realpath(dirname(__FILE__) . '/../../../' . ltrim($filePath, '/')); //Where is the library located inside the WordPress directory structure? $absolutePath = Puc_v4p11_Factory::normalizePath($absolutePath); $pluginDir = Puc_v4p11_Factory::normalizePath(WP_PLUGIN_DIR); $muPluginDir = Puc_v4p11_Factory::normalizePath(WPMU_PLUGIN_DIR); $themeDir = Puc_v4p11_Factory::normalizePath(get_theme_root()); if ( (strpos($absolutePath, $pluginDir) === 0) || (strpos($absolutePath, $muPluginDir) === 0) ) { //It's part of a plugin. return plugins_url(basename($absolutePath), $absolutePath); } else if ( strpos($absolutePath, $themeDir) === 0 ) { //It's part of a theme. $relativePath = substr($absolutePath, strlen($themeDir) + 1); $template = substr($relativePath, 0, strpos($relativePath, '/')); $baseUrl = get_theme_root_uri($template); if ( !empty($baseUrl) && $relativePath ) { return $baseUrl . '/' . $relativePath; } } return ''; } } endif;