/home/arranoyd/energyclinic.com.hr/wp-content/plugins/docket-cache/includes/compat.php
<?php
/**
* Docket Cache.
*
* @author Nawawi Jamili
* @license MIT
*
* @see https://github.com/nawawi/docket-cache
*/
\defined('ABSPATH') || exit;
if (class_exists('Nawawi\\Symfony\\Component\\VarExporter\\VarExporter')) {
class_alias('Nawawi\Symfony\Component\VarExporter\VarExporter', 'Nawawi\DocketCache\Exporter\VarExporter', false);
}
if (class_exists('Nawawi\\Symfony\\Component\\VarExporter\\Internal\\Hydrator')) {
class_alias('Nawawi\Symfony\Component\VarExporter\Internal\Hydrator', 'Nawawi\DocketCache\Exporter\Hydrator', false);
}
if (class_exists('Nawawi\\Symfony\\Component\\VarExporter\\Internal\\Registry')) {
class_alias('Nawawi\Symfony\Component\VarExporter\Internal\Registry', 'Nawawi\DocketCache\Exporter\Registry', false);
}
if (!\function_exists('nwdcx_constfx')) {
function nwdcx_constfx($name, $is_strip = false)
{
if (!$is_strip) {
return strtoupper('docket_cache_'.$name);
}
// strip prefix, see Canopt().
return substr($name, 13);
}
}
if (!\function_exists('nwdcx_construe')) {
function nwdcx_construe($name)
{
$name = nwdcx_constfx($name);
if (\defined($name)) {
$value = (bool) \constant($name);
if (true === $value || 1 === $value) {
return true;
}
}
return false;
}
}
if (!\function_exists('nwdcx_consfalse')) {
function nwdcx_consfalse($name)
{
$name = nwdcx_constfx($name);
return !\defined($name) || !\constant($name);
}
}
if (!\function_exists('nwdcx_constval')) {
function nwdcx_constval($name)
{
$name = nwdcx_constfx($name);
$value = '';
if (\defined($name)) {
$value = \constant($name);
}
return $value;
}
}
if (!\function_exists('nwdcx_consdef')) {
function nwdcx_consdef($name, $value)
{
$name = nwdcx_constfx($name);
return !\defined($name) && \define($name, $value);
}
}
if (!\function_exists('nwdcx_arraymap')) {
function nwdcx_arraymap($func, $arr)
{
$new = [];
foreach ($arr as $key => $value) {
$new[$key] = (\is_array($value) ? nwdcx_arraymap($func, $value) : (\is_array($func) ? \call_user_func_array($func, $value) : $func($value)));
}
return $new;
}
}
if (!\function_exists('nwdcx_arraysimilar')) {
function nwdcx_arraysimilar($actual, $expected)
{
if (!\is_array($expected) || !\is_array($actual)) {
return $actual === $expected;
}
foreach ($expected as $key => $value) {
if (!isset($actual[$key]) || !isset($expected[$key])) {
return false;
}
if (!nwdcx_arraysimilar($actual[$key], $expected[$key])) {
return false;
}
}
foreach ($actual as $key => $value) {
if (!isset($actual[$key]) || !isset($expected[$key])) {
return false;
}
if (!nwdcx_arraysimilar($actual[$key], $expected[$key])) {
return false;
}
}
return true;
}
}
if (!\function_exists('nwdcx_serialized')) {
function nwdcx_serialized($data)
{
// short-circuit the checking.
if (!\is_string($data) || false === strpbrk($data, '{:;}')) {
return false;
}
if (!\function_exists('is_serialized')) {
// 16072021: rare opcache issue with some hosting ABSPATH not defined.
if (\defined('ABSPATH') && \defined('WPINC')) {
@include_once ABSPATH.WPINC.'/functions.php';
}
}
if (!\function_exists('is_serialized')) {
return false;
}
return is_serialized($data);
}
}
if (!\function_exists('nwdcx_unserialize')) {
function nwdcx_unserialize($data)
{
if (!nwdcx_serialized($data)) {
return $data;
}
// If the string has an object format, check if it has a stdClass, otherwise return the original data.
// The logic here is, if we "unserialize" it, we can't use the cache since the VarExporter can't detect
// the Class instance in objects which may lead to "class not found".
if (false !== strpos($data, 'O:') && @preg_match_all('@O:\d+:"([^"]+)"@', $data, $mm)) {
if (!empty($mm) && !empty($mm[1])) {
foreach ($mm[1] as $v) {
if ('stdClass' !== $v) {
return $data;
}
}
unset($mm);
}
}
// To make query monitor happy.
set_error_handler(function () {});
$data = unserialize(trim($data));
restore_error_handler();
return $data;
}
}
if (!\function_exists('nwdcx_fixhost')) {
function nwdcx_fixhost($hostname)
{
if (false !== strpos($hostname, ':')) {
return @preg_replace('@:\d+$@', '', $hostname);
}
return $hostname;
}
}
if (!\function_exists('nwdcx_fixscheme')) {
// replace http scheme
function nwdcx_fixscheme($url, $scheme = 'http://')
{
return @preg_replace('@^((([a-zA-Z]+)?:)?(//))?@', $scheme, trim($url));
}
}
if (!\function_exists('nwdcx_noscheme')) {
// replace http scheme
function nwdcx_noscheme($url)
{
return nwdcx_fixscheme($url, '');
}
}
if (!\function_exists('nwdcx_wpdb')) {
function nwdcx_wpdb(&$wpdb = '')
{
if (!isset($GLOBALS['wpdb']) || !\is_object($GLOBALS['wpdb']) || (isset($GLOBALS['wpdb']->ready) && !$GLOBALS['wpdb']->ready)) {
$wpdb = false;
return false;
}
$wpdb = $GLOBALS['wpdb'];
return $wpdb;
}
}
if (!\function_exists('nwdcx_optget')) {
function nwdcx_optget($key)
{
if (!nwdcx_wpdb($wpdb)) {
return false;
}
static $cache = [];
if (isset($cache[$key])) {
return $cache[$key];
}
$suppress = $wpdb->suppress_errors(true);
$query = $wpdb->prepare('SELECT option_value FROM `'.$wpdb->options.'` WHERE option_name=%s ORDER BY option_id ASC LIMIT 1', $key);
$option = $wpdb->get_var($query);
$cache[$key] = !empty($option) ? nwdcx_unserialize($option) : false;
$wpdb->suppress_errors($suppress);
return $cache[$key];
}
}
if (!\function_exists('nwdcx_cleanuptransient')) {
function nwdcx_cleanuptransient()
{
if (!nwdcx_wpdb($wpdb)) {
return false;
}
$count = 0;
$qlimit = 1000;
$suppress = $wpdb->suppress_errors(true);
$collect = [];
// $results = $wpdb->get_results('SELECT `option_id`,`option_name`,`option_value` FROM `'.$wpdb->options.'` WHERE `option_name` LIKE "_transient_%" OR `option_name` LIKE "_site_transient_%" ORDER BY `option_id` ASC LIMIT 1000', ARRAY_A);
$results = $wpdb->get_results('SELECT `option_id`,`option_name`,`option_value` FROM `'.$wpdb->options.'` WHERE `option_name` RLIKE "^(_site)?(_transient)(_timeout)?_.*?" ORDER BY `option_id` ASC LIMIT '.$qlimit, ARRAY_A);
if (!empty($results) && \is_array($results)) {
while ($row = @array_shift($results)) {
$key = @preg_replace('@^(_site)?(_transient)(_timeout)?_@', '', $row['option_name']);
$collect[$key] = $key;
if (false !== strpos($row['option_name'], '_transient_timeout_') && (int) $row['option_value'] > time()) {
unset($collect[$key]);
}
}
if (!empty($collect)) {
$wpdb->query('START TRANSACTION');
foreach ($collect as $key) {
$wpdb->query("DELETE FROM `{$wpdb->options}` WHERE `option_name`='_transient_{$key}'");
$wpdb->query("DELETE FROM `{$wpdb->options}` WHERE `option_name`='_transient_timeout_{$key}'");
$wpdb->query("DELETE FROM `{$wpdb->options}` WHERE `option_name`='_site_transient_{$key}'");
$wpdb->query("DELETE FROM `{$wpdb->options}` WHERE `option_name`='_site_transient_timeout_{$key}'");
++$count;
}
$wpdb->query('COMMIT');
}
}
$collect = [];
if (is_multisite() && isset($wpdb->sitemeta)) {
// $results = $wpdb->get_results('SELECT `meta_id`,`meta_key`,`meta_value` FROM `'.$wpdb->sitemeta.'` WHERE `meta_key` LIKE "_site_transient_%" ORDER BY `meta_id` ASC LIMIT 1000', ARRAY_A);
$results = $wpdb->get_results('SELECT `meta_id`,`meta_key`,`meta_value` FROM `'.$wpdb->sitemeta.'` WHERE `meta_key` RLIKE "^(_site_transient)(_timeout)?_.*?" ORDER BY `meta_id` ASC LIMIT '.$qlimit, ARRAY_A);
if (!empty($results) && \is_array($results)) {
while ($row = @array_shift($results)) {
$key = @preg_replace('@^(_site)?(_transient)(_timeout)?_@', '', $row['meta_key']);
$collect[$key] = $key;
if (false !== strpos($row['meta_key'], '_site_transient_timeout_') && (int) $row['meta_value'] > time()) {
unset($collect[$key]);
}
}
if (!empty($collect)) {
$wpdb->query('START TRANSACTION');
foreach ($collect as $key) {
$wpdb->query("DELETE FROM `{$wpdb->sitemeta}` WHERE `meta_key`='_site_transient_{$key}'");
$wpdb->query("DELETE FROM `{$wpdb->sitemeta}` WHERE `meta_key`='_site_transient_timeout_{$key}'");
++$count;
}
$wpdb->query('COMMIT');
}
}
}
unset($collect, $results);
$wpdb->suppress_errors($suppress);
return $count;
}
}
if (!\function_exists('nwdcx_runaction')) {
function nwdcx_runaction(...$args)
{
add_action(
'plugins_loaded',
function () use ($args) {
\call_user_func_array('do_action', $args);
}
);
}
}
if (!\function_exists('nwdcx_throwable')) {
function nwdcx_throwable($name, $error)
{
if (\defined('WP_DEBUG') && WP_DEBUG) {
do_action('docketcache/action/nwdcx/throwable', $name, $error);
}
}
}
if (!\function_exists('nwdcx_debuglog')) {
function nwdcx_debuglog($text)
{
if (nwdcx_construe('dev')) {
$logfile = WP_CONTENT_DIR.'/dcdev-debug.log';
error_log('['.date('Y-m-d H:i:s').'] '.$text."\n", 3, $logfile);
}
}
}
if (!\function_exists('nwdcx_cliverbose')) {
function nwdcx_cliverbose($text)
{
static $is_verbose = false;
if (!$is_verbose) {
$is_verbose = 'cli' === \PHP_SAPI && !empty($_SERVER['argv']) && \in_array('--verbose', $_SERVER['argv']) && !\in_array('--quiet', $_SERVER['argv']);
}
if ($is_verbose && \defined('STDOUT')) {
fwrite(\STDOUT, $text);
}
}
}
if (!\function_exists('nwdcx_microtimetofloat')) {
function nwdcx_microtimetofloat($second)
{
list($usec, $sec) = explode(' ', $second);
return (float) $usec + (float) $sec;
}
}
if (!\function_exists('nwdcx_suppresserrors')) {
function nwdcx_suppresserrors($level = true)
{
$errlevel = error_reporting();
$erropt = true === $level ? 0 : $level;
error_reporting($erropt);
return $errlevel;
}
}
if (!\function_exists('nwdcx_normalizepath')) {
function nwdcx_normalizepath($path)
{
if (false === strpos($path, '\\')) {
return $path;
}
if (\function_exists('wp_normalize_path')) {
return wp_normalize_path($path);
}
return str_replace('\\', '/', $path);
}
}
// network specific
if (!\function_exists('nwdcx_network_multi')) {
function nwdcx_network_multi()
{
if (!is_multisite()) {
return false;
}
if (\defined('MULTINETWORK')) {
return MULTINETWORK;
}
if (\defined('DOCKET_CACHE_MULTINETWORK')) {
return DOCKET_CACHE_MULTINETWORK;
}
if (!nwdcx_wpdb($wpdb)) {
return false;
}
static $ok = null;
if (\is_bool($ok)) {
return $ok;
}
// this lock file should only exists if network more than 1
// see Dropino::multinet_active
$lock_file = nwdcx_normalizepath(DOCKET_CACHE_CONTENT_PATH).'/.object-cache-network-multi.txt';
$timeout = time() + 86400;
if (@is_file($lock_file) && @is_readable($lock_file) && $timeout > @filemtime($lock_file)) {
$ok = !empty(@file_get_contents($lock_file)) ? true : false;
return $ok;
}
$table = $wpdb->base_prefix.'site';
$suppress = $wpdb->suppress_errors(true);
$query = "SELECT id FROM `{$table}` WHERE id > 0 ORDER BY id ASC LIMIT 2";
$check = $wpdb->query($query);
$wpdb->suppress_errors($suppress);
$ok = !empty($check) && $check > 1 ? true : false;
return $ok;
}
}
if (!\function_exists('nwdcx_network_ignore')) {
function nwdcx_network_ignore()
{
if (nwdcx_network_multi()) {
if (!@is_file(nwdcx_normalizepath(DOCKET_CACHE_CONTENT_PATH).'/.object-cache-network-'.nwdcx_network_id().'.txt')) {
return true;
}
return false;
}
}
}
if (!\function_exists('nwdcx_network_main')) {
function nwdcx_network_main()
{
if (!is_multisite()) {
return true;
}
if (\defined('PRIMARY_NETWORK_ID') && PRIMARY_NETWORK_ID === nwdcx_network_id()) {
return true;
}
if (\defined('SITE_ID_CURRENT_SITE') && SITE_ID_CURRENT_SITE === nwdcx_network_id()) {
return true;
}
if (empty($_SERVER['HTTP_HOST'])) {
return true;
}
if (!nwdcx_wpdb($wpdb)) {
return true;
}
$hostname = nwdcx_fixhost($_SERVER['HTTP_HOST']);
if (\defined('DOMAIN_CURRENT_SITE') && DOMAIN_CURRENT_SITE === $hostname) {
return true;
}
$lock_file = nwdcx_normalizepath(DOCKET_CACHE_CONTENT_PATH).'/.object-cache-network-main.txt';
$timeout = time() + 86400;
if (@is_file($lock_file) && @is_readable($lock_file) && $timeout > @filemtime($lock_file)) {
$data = @file_get_contents($lock_file);
if (!empty($data) && trim($data) === $hostname) {
return true;
}
}
static $cache = [];
if (isset($cache[$hostname])) {
return $cache[$hostname];
}
$table = $wpdb->base_prefix.'site';
$suppress = $wpdb->suppress_errors(true);
$query = "SELECT domain FROM `{$table}` WHERE id > 0 ORDER BY id ASC LIMIT 1";
$domain = $wpdb->get_var($query);
$wpdb->suppress_errors($suppress);
if ($hostname === $domain) {
$cache[$hostname] = true;
} elseif (@preg_match('@(.*?\.)?'.preg_quote($domain, '@').'@', $hostname)) {
$cache[$hostname] = true;
} else {
$cache[$hostname] = false;
}
if ($cache[$hostname] && !@is_file($lock_file)) {
@file_put_contents($lock_file, $hostname, \LOCK_EX);
}
return $cache[$hostname];
}
}
if (!\function_exists('nwdcx_network_id')) {
function nwdcx_network_id()
{
$network_id = \defined('SITE_ID_CURRENT_SITE') ? SITE_ID_CURRENT_SITE : 1;
if (!is_multisite()) {
return $network_id;
}
if (!nwdcx_wpdb($wpdb)) {
return $network_id;
}
if (empty($_SERVER['HTTP_HOST'])) {
return $network_id;
}
static $cache = [];
$hostname = nwdcx_fixhost($_SERVER['HTTP_HOST']);
if (isset($cache[$hostname])) {
return $cache[$hostname];
}
$table = $wpdb->base_prefix.'site';
$suppress = $wpdb->suppress_errors(true);
$query = "SELECT `id`,`domain`,`path` FROM `{$table}` ORDER BY id ASC LIMIT 100";
$networks = $wpdb->get_results($query, ARRAY_A);
if (!empty($networks) && \is_array($networks)) {
while ($row = @array_shift($networks)) {
$id = $row['id'];
$domain = $row['domain'];
$path = $row['path'];
if ($hostname === $domain) {
$network_id = $id;
break;
}
if (false !== strpos($hostname, $domain) && @preg_match('@(.*?\.)?'.preg_quote($domain, '@').'$@', $hostname)) {
$network_id = $id;
break;
}
}
}
$wpdb->suppress_errors($suppress);
$cache[$hostname] = $network_id;
return $cache[$hostname];
}
}
if (!\function_exists('nwdcx_network_dirpath')) {
function nwdcx_network_dirpath($save_path)
{
if (nwdcx_network_multi() && !nwdcx_network_main()) {
$network_id = nwdcx_network_id();
$cache_dir = sprintf('network-%s', $network_id);
if (false === strpos($save_path, 'docket-cache-data')) {
$cache_path_constant = sprintf('DOCKET_CACHE_PATH_NETWORK_%s', $network_id);
if (\defined($cache_path_constant)) {
$save_path = \constant($cache_path_constant);
}
}
$save_path = rtrim($save_path, '/').'/'.$cache_dir.'/';
}
return $save_path;
}
}
if (!\function_exists('nwdcx_network_filepath')) {
function nwdcx_network_filepath($file_path)
{
if (nwdcx_network_multi() && !nwdcx_network_main()) {
$ext = substr($file_path, -4);
$fname = substr($file_path, 0, -4);
$file_path = $fname.'-'.nwdcx_network_id().$ext;
}
return $file_path;
}
}