/home/arranoyd/energyclinic.com.hr/wp-content/plugins/docket-cache/includes/src/MoCache.php
<?php
/**
* Docket Cache.
*
* @author Nawawi Jamili
* @license MIT
*
* @see https://github.com/nawawi/docket-cache
*/
namespace Nawawi\DocketCache;
\defined('ABSPATH') || exit;
#[AllowDynamicProperties]
final class MoCache
{
private $domain = null;
private $cache = [];
private $dosave = false;
private $override = null;
private $upstream = null;
private $mofile = null;
// Avoid warning on get_translations_for_domain.
// Reference: wp-includes/pomo/translations.php.
public $entries = [];
public $headers = [];
public function __construct($mofile, $domain, $override)
{
$this->mofile = apply_filters('load_textdomain_mofile', $mofile, $domain);
$this->domain = $domain;
$this->override = $override;
$cache_key = $domain.'-'.basename($this->mofile, '.mo');
$cache_group = 'docketcache-mo';
if (\function_exists('wp_cache_add_global_groups')) {
wp_cache_add_global_groups($cache_group);
}
$mtime = @filemtime($this->mofile);
$cache = wp_cache_get($cache_key, $cache_group);
if (false !== $cache && !empty($cache['data'])) {
if (!empty($cache['time']) && $mtime > $cache['time']) {
$this->cache = [];
wp_cache_delete($cache_key, $cache_group);
} else {
$this->cache = $cache['data'];
}
}
add_action(
'shutdown',
function () use ($mtime, $cache_key, $cache_group) {
if ($this->dosave) {
$cache_data = [
'time' => $mtime,
'data' => $this->cache,
];
wp_cache_set($cache_key, $cache_data, $cache_group);
}
},
\PHP_INT_MAX
);
}
public function translate($text, $context = null)
{
$args = \func_get_args();
return $this->get_translation($this->text_key($args), $text, $args);
}
public function translate_plural($singular, $plural, $count, $context = null)
{
$text = (1 == abs($count)) ? $singular : $plural;
$args = \func_get_args();
return $this->get_translation($this->text_key([$text, $count, $context]), $text, $args);
}
private function text_key($args)
{
// return substr(md5(serialize([$args, $this->domain])), 0, 12);
return md5(serialize([$args, $this->domain]));
}
private function get_translation($text_key, $text, $args)
{
if (isset($this->cache[$text_key])) {
return $this->cache[$text_key];
}
$translate_function = \count($args) > 2 ? 'translate_plural' : 'translate';
if ($this->override) {
if (($translation = \call_user_func_array([$this->override, $translate_function], $args)) !== $text) {
$this->dosave = true;
return $this->cache[$text_key] = $translation;
}
}
if (!$this->upstream) {
$this->upstream = new \Mo();
do_action('load_textdomain', $this->domain, $this->mofile);
$this->upstream->import_from_file($this->mofile);
}
if (($translation = \call_user_func_array([$this->upstream, $translate_function], $args)) !== $text) {
$this->dosave = true;
return $this->cache[$text_key] = $translation;
}
$translation = \call_user_func_array([$this->upstream, $translate_function], $args);
$this->dosave = true;
return $this->cache[$text_key] = $translation;
}
}