Files
szkoleniauryzaj.pl/wp-content/plugins/elfsight-youtube-gallery-cc/api/vendor/elfsight/Cache.php
2026-04-26 23:47:49 +02:00

93 lines
2.6 KiB
PHP

<?php
namespace ElfsightYoutubeGalleryApi\Core;
class Cache {
private $Helper;
private $pluginFile;
private $cacheTime;
private $tableName;
public function __construct($Helper, $config) {
$this->Helper = $Helper;
$this->pluginFile = $config['plugin_file'];
$this->cacheTime = !empty($config['cache_time']) ? $config['cache_time'] : 43200;
$clear_cache = isset($config['clear_cache_on_update']) ? $config['clear_cache_on_update'] : true;
$this->tableName = $this->Helper->getTableName('cache');
if (!$this->Helper->tableExist($this->tableName)) {
$this->Helper->tableCreate($this->tableName, array('key' => 'text', 'data' => 'longtext'));
}
if ($clear_cache) {
register_deactivation_hook($this->pluginFile, array($this, 'dropTable'));
}
}
public function keyFromQuery($query, $excluded_params = array('access_token')) {
$key = $query;
foreach ($excluded_params as $param) {
$key = $this->Helper->removeQueryParam($key, $param);
}
return preg_replace('#\?$#', '', $key);
}
public function get($key, $check_expire = true) {
$cache = $this->Helper->tableRowGet($this->tableName, array('key' => $key));
if (!$cache || ($check_expire && time() > $cache['updated_at'] + $this->cacheTime)) {
return null;
}
return $cache['data'];
}
public function expired($key) {
$cache = $this->Helper->tableRowGet($this->tableName, array('key' => $key));
return !$cache || $cache && time() > $cache['updated_at'] + $this->cacheTime;
}
public function set($key, $data, $merge = false) {
if (empty($data)) {
return false;
}
$data = $merge ? $this->merge($data, $this->get($key, false)) : $data;
$data = is_array($data) ? json_encode($data) : $data;
return !!$this->Helper->tableRowUpdate(
$this->tableName,
array(
'key' => $key,
'data' => $data
),
array('key' => $key)
);
}
private function merge($data, $cache_data_json){
if (empty($cache_data_json) || empty($data)) {
return $data;
} else {
$cache_data = json_decode($cache_data_json, true);
$unique_data = $this->Helper->uniqueSort(array_merge_recursive($data, $cache_data), 'created_time');
return $unique_data; // @TODO slice by limit
}
}
public function dropTable() {
global $wpdb;
return $wpdb->query("DROP TABLE IF EXISTS $this->tableName");
}
}