* @copyright Copyright (c) 2020 Samuel Marshall / JCH Optimize * @license GNU/GPLv3, or later. See LICENSE file * * If LICENSE file missing, see . */ namespace JchOptimize\WordPress\Platform; use JchOptimize\Core\Platform\UtilityInterface; use JchOptimize\Core\Registry; use stdClass; use function __; use function add_action; use function array_search; use function count; use function function_exists; use function header; use function headers_list; use function headers_sent; use function is_admin; use function is_user_logged_in; use function preg_match_all; use function strripos; use function wp_create_nonce; use function wp_is_mobile; defined('_WP_EXEC') or die('Restricted access'); class Utility implements UtilityInterface { /** * * @param string $text * * @return string */ public function translate(string $text): string { return __($text, 'jch-optimize'); } /** * Checks if user is not logged in * */ public function isGuest(): bool { if (defined('TEST_SITE_ROOT')) { return true; } if (function_exists('is_user_logged_in')) { return !is_user_logged_in(); } return false; } /** * @param array $headers * * @return void */ public function sendHeaders(array $headers): void { /** @psalm-var array $headers */ if (!empty($headers)) { foreach ($headers as $header => $value) { add_action('jch_optimize_send_headers', function () use ($header, $value) { header($header . ': ' . $value, false); }); } } } public function userAgent($userAgent): stdClass { global $is_chrome, $is_IE, $is_edge, $is_safari, $is_opera, $is_gecko, $is_winIE, $is_macIE, $is_iphone; $oUA = new stdClass(); $oUA->browser = 'Unknown'; $oUA->browserVersion = 'Unknown'; $oUA->os = 'Unknown'; if ($is_chrome) { $oUA->browser = 'Chrome'; } elseif ($is_gecko) { $oUA->browser = 'Firefox'; } elseif ($is_safari) { $oUA->browser = 'Safari'; } elseif ($is_edge) { $oUA->browser = 'Edge'; } elseif ($is_IE) { $oUA->browser = 'Internet Explorer'; } elseif ($is_opera) { $oUA->browser = 'Opera'; } if ($oUA->browser != 'Unknown') { // Build the REGEX pattern to match the browser version string within the user agent string. $pattern = '#(?Version|' . $oUA->browser . ')[/ :]+(?[0-9.|a-zA-Z.]*)#'; // Attempt to find version strings in the user agent string. $matches = array(); if (preg_match_all($pattern, $userAgent, $matches)) { // Do we have both a Version and browser match? if (count($matches['browser']) == 2) { // See whether Version or browser came first, and use the number accordingly. if (strripos($userAgent, 'Version') < strripos($userAgent, $oUA->browser)) { $oUA->browserVersion = $matches['version'][0]; } else { $oUA->browserVersion = $matches['version'][1]; } } elseif (count($matches['browser']) > 2) { $key = array_search('Version', $matches['browser']); if ($key) { $oUA->browserVersion = $matches['version'][$key]; } } else { // We only have a Version or a browser so use what we have. $oUA->browserVersion = $matches['version'][0]; } } } if ($is_winIE) { $oUA->os = 'Windows'; } elseif ($is_macIE) { $oUA->os = 'Mac'; } elseif ($is_iphone) { $oUA->os = 'iOS'; } return $oUA; } public function bsTooltipContentAttribute(): string { return 'data-bs-content'; } /** * @param Registry $params * @param bool $nativeCache * * @return bool * @deprecated Use Cache::isPageCacheEnabled() */ public function isPageCacheEnabled(Registry $params, bool $nativeCache = false): bool { return (bool)$params->get('cache_enable', '0'); } public function isMobile(): bool { return wp_is_mobile(); } public function getMobileUserAgentPattern(): string { return 'Mobile|Android|Silk/|Kindle|BlackBerry|Opera Mini|Opera Mobi'; } public function usesMobileClientHint(): bool { return true; } /** * @param Registry $params * * @return string * @deprecated Use Cache::getCacheStorage() */ public function getCacheStorage(Registry $params): string { return $params->get('pro_cache_storage_adapter', 'filesystem'); } public function getHeaders(): array { return headers_list(); } public function publishAdminMessages(string $message, string $messageType): void { add_action('admin_notices', function () use ($message, $messageType) { echo <<

{$message}

HTML; }); } public function getLogsPath(): string { return JCH_PLUGIN_DIR . 'logs'; } public function isSiteGzipEnabled(): bool { return false; } /** * @param array $data * * @return void * @deprecated Use Cache::outputData() */ #[NoReturn] public function outputData(array $data): void { /** @psalm-var array{headers:array, body: string} $data */ if (!empty($data['headers'])) { foreach ($data['headers'] as $header) { header($header); } } echo $data['body']; exit(); } /** * @param array|null $data * * @return array|null * @deprecated Use Cache::prepareDataFromCache() */ public function prepareDataFromCache(?array $data): ?array { return $data; } public function isAdmin(): bool { return is_admin(); } public function getNonce(string $id): string { return wp_create_nonce($id); } }