Moved caching methods out of functions.inc.php into ContentCache class.
This commit is contained in:
parent
bb98e38522
commit
50c89e2bad
@ -1387,57 +1387,5 @@ function serendipity_url_allowed($url) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
use voku\cache\Cache;
|
|
||||||
// Configure voku/simple-cache to use templates_c as directory for the opcache files, the fallback
|
|
||||||
// when Memcached and Redis are not used. Returns the configured cache object. Used internally by
|
|
||||||
// the other cache functions, you most likely never need to call this.
|
|
||||||
function serendipity_setupCache() {
|
|
||||||
$cacheManager = new \voku\cache\CacheAdapterAutoManager();
|
|
||||||
|
|
||||||
$cacheManager->addAdapter(
|
|
||||||
\voku\cache\AdapterOpCache::class,
|
|
||||||
static function () {
|
|
||||||
global $serendipity;
|
|
||||||
$cacheDir = $serendipity['serendipityPath'] . '/templates_c/simple_cache';
|
|
||||||
|
|
||||||
return $cacheDir;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
$cacheManager->addAdapter(
|
|
||||||
\voku\cache\AdapterArray::class
|
|
||||||
);
|
|
||||||
|
|
||||||
$cache = new Cache(
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
false,
|
|
||||||
true,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
'',
|
|
||||||
$cacheManager,
|
|
||||||
false
|
|
||||||
);
|
|
||||||
return $cache;
|
|
||||||
}
|
|
||||||
|
|
||||||
function serendipity_cleanCache() {
|
|
||||||
$cache = serendipity_setupCache();
|
|
||||||
return $cache->removeAll();
|
|
||||||
}
|
|
||||||
|
|
||||||
function serendipity_cacheItem($key, $item, $ttl = 3600) {
|
|
||||||
$cache = serendipity_setupCache();
|
|
||||||
return $cache->setItem($key, $item, $ttl);
|
|
||||||
}
|
|
||||||
|
|
||||||
function serendipity_getCacheItem($key) {
|
|
||||||
$cache = serendipity_setupCache();
|
|
||||||
return $cache->getItem($key);
|
|
||||||
}
|
|
||||||
|
|
||||||
define("serendipity_FUNCTIONS_LOADED", true);
|
define("serendipity_FUNCTIONS_LOADED", true);
|
||||||
/* vim: set sts=4 ts=4 expandtab : */
|
/* vim: set sts=4 ts=4 expandtab : */
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
# Copyright (c) 2003-2005, Jannis Hermanns (on behalf the Serendipity Developer Team)
|
# Copyright (c) 2003-2005, Jannis Hermanns (on behalf the Serendipity Developer Team)
|
||||||
# All rights reserved. See LICENSE file for licensing details
|
# All rights reserved. See LICENSE file for licensing details
|
||||||
|
|
||||||
|
use Serendipity\ContentCache;
|
||||||
|
|
||||||
if (IN_serendipity !== true) {
|
if (IN_serendipity !== true) {
|
||||||
die ("Don't hack!");
|
die ("Don't hack!");
|
||||||
}
|
}
|
||||||
@ -730,7 +732,8 @@ function serendipity_approveComment($cid, $entry_id, $force = false, $moderate =
|
|||||||
|
|
||||||
serendipity_plugin_api::hook_event('backend_approvecomment', $rs);
|
serendipity_plugin_api::hook_event('backend_approvecomment', $rs);
|
||||||
}
|
}
|
||||||
serendipity_cleanCache();
|
$cache = ContentCache::getInstance();
|
||||||
|
$cache->clearCache();
|
||||||
if ($flip) {
|
if ($flip) {
|
||||||
if ($moderate) return -1; // comment set to pending
|
if ($moderate) return -1; // comment set to pending
|
||||||
if (!$moderate) return 1; // comment set to approved
|
if (!$moderate) return 1; // comment set to approved
|
||||||
@ -950,7 +953,8 @@ function serendipity_insertComment($id, $commentInfo, $type = 'NORMAL', $source
|
|||||||
if ($GLOBALS['tb_logging'] ?? false) {
|
if ($GLOBALS['tb_logging'] ?? false) {
|
||||||
fclose($fp);
|
fclose($fp);
|
||||||
}
|
}
|
||||||
serendipity_cleanCache();
|
$cache = ContentCache::getInstance();
|
||||||
|
$cache->clearCache();
|
||||||
return $cid;
|
return $cid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
# Copyright (c) 2003-2005, Jannis Hermanns (on behalf the Serendipity Developer Team)
|
# Copyright (c) 2003-2005, Jannis Hermanns (on behalf the Serendipity Developer Team)
|
||||||
# All rights reserved. See LICENSE file for licensing details
|
# All rights reserved. See LICENSE file for licensing details
|
||||||
|
|
||||||
|
use Serendipity\ContentCache;
|
||||||
|
|
||||||
if (IN_serendipity !== true) {
|
if (IN_serendipity !== true) {
|
||||||
die ("Don't hack!");
|
die ("Don't hack!");
|
||||||
}
|
}
|
||||||
@ -214,9 +216,10 @@ function &serendipity_fetchEntries($range = null, $full = true, $limit = '', $fe
|
|||||||
if ($serendipity['useInternalCache']) {
|
if ($serendipity['useInternalCache']) {
|
||||||
$key = md5(serialize($initial_args) . ($serendipity['short_archives'] ?? '') . '||' . (serialize($serendipity['range'] ?? '')) . '||' . ($serendipity['GET']['category'] ?? '') . '||' . ($serendipity['GET']['hide_category'] ?? '') . '||' . ($serendipity['GET']['viewAuthor'] ?? '') . '||' . ($serendipity['GET']['page'] ?? '') . '||' . $serendipity['fetchLimit'] . '||' . $serendipity['max_fetch_limit'] . '||' . ($serendipity['GET']['adminModule'] ?? '') . '||' . serendipity_checkPermission('adminEntriesMaintainOthers') . '||' .$serendipity['showFutureEntries'] . '||' . $serendipity['archiveSortStable'] . '||' . ($serendipity['plugindata']['smartyvars']['uriargs'] ?? '') );
|
$key = md5(serialize($initial_args) . ($serendipity['short_archives'] ?? '') . '||' . (serialize($serendipity['range'] ?? '')) . '||' . ($serendipity['GET']['category'] ?? '') . '||' . ($serendipity['GET']['hide_category'] ?? '') . '||' . ($serendipity['GET']['viewAuthor'] ?? '') . '||' . ($serendipity['GET']['page'] ?? '') . '||' . $serendipity['fetchLimit'] . '||' . $serendipity['max_fetch_limit'] . '||' . ($serendipity['GET']['adminModule'] ?? '') . '||' . serendipity_checkPermission('adminEntriesMaintainOthers') . '||' .$serendipity['showFutureEntries'] . '||' . $serendipity['archiveSortStable'] . '||' . ($serendipity['plugindata']['smartyvars']['uriargs'] ?? '') );
|
||||||
|
|
||||||
$entries = serendipity_getCacheItem($key);
|
$cache = ContentCache::getInstance();
|
||||||
|
$entries = $cache->getItem($key);
|
||||||
if ($entries && $entries !== false) {
|
if ($entries && $entries !== false) {
|
||||||
$serendipity['fullCountQuery'] = serendipity_getCacheItem($key . '_fullCountQuery');
|
$serendipity['fullCountQuery'] = $cache->getItem($key . '_fullCountQuery');
|
||||||
return unserialize($entries);
|
return unserialize($entries);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -505,8 +508,9 @@ function &serendipity_fetchEntries($range = null, $full = true, $limit = '', $fe
|
|||||||
if ($serendipity['useInternalCache']) {
|
if ($serendipity['useInternalCache']) {
|
||||||
$key = md5(serialize($initial_args) . ($serendipity['short_archives'] ?? '') . '||' . (serialize($serendipity['range'] ?? '')) . '||' . ($serendipity['GET']['category'] ?? '') . '||' . ($serendipity['GET']['hide_category'] ?? '') . '||' . ($serendipity['GET']['viewAuthor'] ?? '') . '||' . ($serendipity['GET']['page'] ?? '') . '||' . $serendipity['fetchLimit'] . '||' . $serendipity['max_fetch_limit'] . '||' . ($serendipity['GET']['adminModule'] ?? '') . '||' . serendipity_checkPermission('adminEntriesMaintainOthers') . '||' .$serendipity['showFutureEntries'] . '||' . $serendipity['archiveSortStable'] . '||' . ($serendipity['plugindata']['smartyvars']['uriargs'] ?? '') );
|
$key = md5(serialize($initial_args) . ($serendipity['short_archives'] ?? '') . '||' . (serialize($serendipity['range'] ?? '')) . '||' . ($serendipity['GET']['category'] ?? '') . '||' . ($serendipity['GET']['hide_category'] ?? '') . '||' . ($serendipity['GET']['viewAuthor'] ?? '') . '||' . ($serendipity['GET']['page'] ?? '') . '||' . $serendipity['fetchLimit'] . '||' . $serendipity['max_fetch_limit'] . '||' . ($serendipity['GET']['adminModule'] ?? '') . '||' . serendipity_checkPermission('adminEntriesMaintainOthers') . '||' .$serendipity['showFutureEntries'] . '||' . $serendipity['archiveSortStable'] . '||' . ($serendipity['plugindata']['smartyvars']['uriargs'] ?? '') );
|
||||||
|
|
||||||
serendipity_cacheItem($key, serialize($ret));
|
$cache = ContentCache::getInstance();
|
||||||
serendipity_cacheItem($key . '_fullCountQuery', $serendipity['fullCountQuery']);
|
$cache->addItem($key, serialize($ret));
|
||||||
|
$cache->addItem($key . '_fullCountQuery', $serendipity['fullCountQuery']);
|
||||||
}
|
}
|
||||||
return $ret;
|
return $ret;
|
||||||
}
|
}
|
||||||
@ -1545,7 +1549,8 @@ function serendipity_updertEntry($entry) {
|
|||||||
serendipity_handle_references($entry['id'], $serendipity['blogTitle'], $drafted_entry['title'], $drafted_entry['body'] . $drafted_entry['extended'], false);
|
serendipity_handle_references($entry['id'], $serendipity['blogTitle'], $drafted_entry['title'], $drafted_entry['body'] . $drafted_entry['extended'], false);
|
||||||
}
|
}
|
||||||
|
|
||||||
serendipity_cleanCache();
|
$cache = ContentCache::getInstance();
|
||||||
|
$cache->clearCache();
|
||||||
return (int)$entry['id'];
|
return (int)$entry['id'];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1578,7 +1583,8 @@ function serendipity_deleteEntry($id) {
|
|||||||
serendipity_db_query("DELETE FROM {$serendipity['dbPrefix']}comments WHERE entry_id=$id");
|
serendipity_db_query("DELETE FROM {$serendipity['dbPrefix']}comments WHERE entry_id=$id");
|
||||||
serendipity_db_query("DELETE FROM {$serendipity['dbPrefix']}references WHERE entry_id='$id' AND type = ''");
|
serendipity_db_query("DELETE FROM {$serendipity['dbPrefix']}references WHERE entry_id='$id' AND type = ''");
|
||||||
serendipity_db_query("DELETE FROM {$serendipity['dbPrefix']}permalinks WHERE entry_id='$id'");
|
serendipity_db_query("DELETE FROM {$serendipity['dbPrefix']}permalinks WHERE entry_id='$id'");
|
||||||
serendipity_cleanCache();
|
$cache = ContentCache::getInstance();
|
||||||
|
$cache->clearCache();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1677,7 +1683,8 @@ function serendipity_updateEntryCategories($postid, $categories) {
|
|||||||
$query = "INSERT INTO $serendipity[dbPrefix]entrycat (categoryid, entryid) VALUES (" . (int)$cat . ", " . (int)$postid . ")";
|
$query = "INSERT INTO $serendipity[dbPrefix]entrycat (categoryid, entryid) VALUES (" . (int)$cat . ", " . (int)$postid . ")";
|
||||||
serendipity_db_query($query);
|
serendipity_db_query($query);
|
||||||
}
|
}
|
||||||
serendipity_cleanCache();
|
$cache = ContentCache::getInstance();
|
||||||
|
$cache->clearCache();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
# Copyright (c) 2003-2005, Jannis Hermanns (on behalf the Serendipity Developer Team)
|
# Copyright (c) 2003-2005, Jannis Hermanns (on behalf the Serendipity Developer Team)
|
||||||
# All rights reserved. See LICENSE file for licensing details
|
# All rights reserved. See LICENSE file for licensing details
|
||||||
|
|
||||||
|
use Serendipity\ContentCache;
|
||||||
|
|
||||||
if (IN_serendipity !== true) {
|
if (IN_serendipity !== true) {
|
||||||
die ("Don't hack!");
|
die ("Don't hack!");
|
||||||
}
|
}
|
||||||
@ -651,7 +653,8 @@ function serendipity_insertImageInDatabase($filename, $directory, $authorid = 0,
|
|||||||
$image_id = serendipity_db_insert_id('images', 'id');
|
$image_id = serendipity_db_insert_id('images', 'id');
|
||||||
if ($image_id > 0) {
|
if ($image_id > 0) {
|
||||||
return $image_id;
|
return $image_id;
|
||||||
serendipity_cleanCache();
|
$cache = ContentCache::getInstance();
|
||||||
|
$cache->clearCache();
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -1973,7 +1976,8 @@ function serendipity_traversePath($basedir, $dir='', $onlyDirs = true, $pattern
|
|||||||
|
|
||||||
if ($serendipity['useInternalCache']) {
|
if ($serendipity['useInternalCache']) {
|
||||||
$key = md5($basedir . $dir . $onlyDirs . $pattern . $depth . $max_depth . $apply_ACL . serialize($aExcludeDirs) . $serendipity['serendipityUser']);
|
$key = md5($basedir . $dir . $onlyDirs . $pattern . $depth . $max_depth . $apply_ACL . serialize($aExcludeDirs) . $serendipity['serendipityUser']);
|
||||||
$files = serendipity_getCacheItem($key);
|
$cache = ContentCache::getInstance();
|
||||||
|
$files = $cache->getItem($key);
|
||||||
if ($files && $files !== false) {
|
if ($files && $files !== false) {
|
||||||
return unserialize($files);
|
return unserialize($files);
|
||||||
}
|
}
|
||||||
@ -2027,7 +2031,8 @@ function serendipity_traversePath($basedir, $dir='', $onlyDirs = true, $pattern
|
|||||||
if ($serendipity['useInternalCache']) {
|
if ($serendipity['useInternalCache']) {
|
||||||
$key = md5($basedir . $dir . $onlyDirs . $pattern . $depth . $max_depth . $apply_ACL . serialize($aExcludeDirs) . $serendipity['serendipityUser']);
|
$key = md5($basedir . $dir . $onlyDirs . $pattern . $depth . $max_depth . $apply_ACL . serialize($aExcludeDirs) . $serendipity['serendipityUser']);
|
||||||
|
|
||||||
serendipity_cacheItem($key, serialize($files));
|
$cache = ContentCache::getInstance();
|
||||||
|
$cache->addItem($key, serialize($files));
|
||||||
}
|
}
|
||||||
|
|
||||||
return $files;
|
return $files;
|
||||||
@ -2294,7 +2299,8 @@ function serendipity_renameDir($oldDir, $newDir) {
|
|||||||
);
|
);
|
||||||
serendipity_updateImageInEntries($image['id'], $image);
|
serendipity_updateImageInEntries($image['id'], $image);
|
||||||
}
|
}
|
||||||
serendipity_cleanCache();
|
$cache = ContentCache::getInstance();
|
||||||
|
$cache->clearCache();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -2349,7 +2355,8 @@ function serendipity_renameFile($id, $newName, $path = null) {
|
|||||||
} else {
|
} else {
|
||||||
return '<span class="msg_error"><span class="icon-attention-circled" aria-hidden="true"></span> ' . MEDIA_RENAME_FAILED . "</span>\n";
|
return '<span class="msg_error"><span class="icon-attention-circled" aria-hidden="true"></span> ' . MEDIA_RENAME_FAILED . "</span>\n";
|
||||||
}
|
}
|
||||||
serendipity_cleanCache();
|
$cache = ContentCache::getInstance();
|
||||||
|
$cache->clearCache();
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
76
lib/Serendipity/ContentCache.php
Normal file
76
lib/Serendipity/ContentCache.php
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// Serendipity
|
||||||
|
// See LICENSE file for license information.
|
||||||
|
|
||||||
|
namespace Serendipity;
|
||||||
|
|
||||||
|
use voku\cache\Cache;
|
||||||
|
use voku\cache\CacheAdapterAutoManager;
|
||||||
|
use voku\cache\AdapterArray;
|
||||||
|
use voku\cache\AdapterOpCache;
|
||||||
|
|
||||||
|
class ContentCache
|
||||||
|
{
|
||||||
|
protected static $instance = null;
|
||||||
|
protected $cache_manager;
|
||||||
|
protected $cache;
|
||||||
|
|
||||||
|
public static function getInstance()
|
||||||
|
{
|
||||||
|
if (self::$instance === null) {
|
||||||
|
self::$instance = new self();
|
||||||
|
}
|
||||||
|
return self::$instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function __construct()
|
||||||
|
{
|
||||||
|
// Configure voku/simple-cache to use templates_c as directory for the opcache files, the fallback
|
||||||
|
// when Memcached and Redis are not used.
|
||||||
|
// FIXME: Bad hack - remove when no longer needed!
|
||||||
|
global $serendipity;
|
||||||
|
$cacheDir = $serendipity['serendipityPath'] . '/templates_c/simple_cache';
|
||||||
|
|
||||||
|
$this->cache_manager = new CacheAdapterAutoManager();
|
||||||
|
$this->cache_manager->addAdapter(
|
||||||
|
AdapterOpCache::class,
|
||||||
|
static function () use ($cacheDir) {
|
||||||
|
return $cacheDir;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->cache_manager->addAdapter(
|
||||||
|
AdapterArray::class
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->cache = new Cache(
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
false,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
'',
|
||||||
|
$this->cache_manager,
|
||||||
|
false
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addItem($key, $item, $ttl = 3600)
|
||||||
|
{
|
||||||
|
return $this->cache->setItem($key, $item, $ttl);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getItem($key)
|
||||||
|
{
|
||||||
|
return $this->cache->getItem($key);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function clearCache()
|
||||||
|
{
|
||||||
|
return $this->cache->removeAll();
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user