Cache: Add additional state variables + single entry mode

fetchEntries is heaviliy realient on glboal state variables, and that was missed initially. The last commit c8bbb35aacee7af8527820f3d3d5fd47d1dbf340 fixed that partially, but did not catch all global state variables. Additionally, this fixed the clean_page mode as used by staticpage by adding the logic and event hook to printEntriesCached
This commit is contained in:
onli 2017-04-20 01:07:24 +02:00
parent c8bbb35aac
commit e61d38a61d
2 changed files with 31 additions and 8 deletions

View File

@ -211,7 +211,7 @@ function &serendipity_fetchEntries($range = null, $full = true, $limit = '', $fe
if ($serendipity['useInternalCache']) { if ($serendipity['useInternalCache']) {
$cache = serendipity_setupCache(); $cache = serendipity_setupCache();
$key = md5(serialize($initial_args) . $serendipity['GET']['page']); $key = md5(serialize($initial_args) . $serendipity['short_archives'] . '||' . $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']);
$entries = $cache->get($key, "fetchEntries"); $entries = $cache->get($key, "fetchEntries");
if ($entries !== false) { if ($entries !== false) {
@ -462,7 +462,8 @@ function &serendipity_fetchEntries($range = null, $full = true, $limit = '', $fe
} }
if ($serendipity['useInternalCache']) { if ($serendipity['useInternalCache']) {
$key = md5(serialize($initial_args) . $serendipity['GET']['page']); $key = md5(serialize($initial_args) . $serendipity['short_archives'] . '||' . $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']);
$cache->save(serialize($ret), $key, "fetchEntries"); $cache->save(serialize($ret), $key, "fetchEntries");
$cache->save($serendipity['fullCountQuery'], $key . '_fullCountQuery', "fetchEntries"); $cache->save($serendipity['fullCountQuery'], $key . '_fullCountQuery', "fetchEntries");
} }
@ -1057,6 +1058,8 @@ function serendipity_printEntries($entries, $extended = 0, $preview = false, $sm
serendipity_smarty_init(); // if not set, start Smarty templating to avoid member function "method()" on a non-object errors (was draft preview error, now at line 1239) serendipity_smarty_init(); // if not set, start Smarty templating to avoid member function "method()" on a non-object errors (was draft preview error, now at line 1239)
} }
$initial_args = array_values(func_get_args());
if ($use_hooks) { if ($use_hooks) {
$addData = array('extended' => $extended, 'preview' => $preview); $addData = array('extended' => $extended, 'preview' => $preview);
serendipity_plugin_api::hook_event('entry_display', $entries, $addData); serendipity_plugin_api::hook_event('entry_display', $entries, $addData);
@ -1276,10 +1279,8 @@ function serendipity_printEntries($entries, $extended = 0, $preview = false, $sm
if ($serendipity['useInternalCache']) { if ($serendipity['useInternalCache']) {
$cache = serendipity_setupCache(); $cache = serendipity_setupCache();
$key = md5(serialize($initial_args));
$args = func_get_args();
$args = array_values($args);
$key = md5(serialize($args));
$cache->save(serialize($dategroup), $key, "printEntries"); $cache->save(serialize($dategroup), $key, "printEntries");
} }
@ -1307,6 +1308,26 @@ function serendipity_printEntriesCached($entries, $extended = 0, $preview = fals
$key = md5(serialize($args)); $key = md5(serialize($args));
if (($dategroup = $cache->get($key, "printEntries")) !== false) { if (($dategroup = $cache->get($key, "printEntries")) !== false) {
if ($use_hooks) {
$addData = array('extended' => $extended, 'preview' => $preview);
serendipity_plugin_api::hook_event('entry_display', $entries, $addData);
if (isset($entries['clean_page']) && $entries['clean_page'] === true) {
if ($serendipity['view'] == '404') {
$serendipity['view'] = 'plugin';
}
$serendipity['smarty']->assign(array(
'plugin_clean_page' => true,
'view' => $serendipity['view'])
);
serendipity_smarty_fetch($smarty_block, 'entries.tpl', true);
return; // no display of this item
}
}
$dategroup = unserialize($dategroup); $dategroup = unserialize($dategroup);
$serendipity['smarty']->assign('entries', $dategroup); $serendipity['smarty']->assign('entries', $dategroup);

View File

@ -48,8 +48,10 @@ switch ($serendipity['GET']['action']) {
serendipity_header('HTTP/1.0 404 Not found'); serendipity_header('HTTP/1.0 404 Not found');
serendipity_header('Status: 404 Not found'); serendipity_header('Status: 404 Not found');
} }
serendipity_printEntries($entry, 1); if (! serendipity_printEntriesCached($entry, 1)) {
serendipity_printEntries($entry, 1);
}
} else { } else {
serendipity_printEntries(serendipity_fetchEntries($serendipity['range'], true, $serendipity['fetchLimit'])); serendipity_printEntries(serendipity_fetchEntries($serendipity['range'], true, $serendipity['fetchLimit']));
} }