diff options
-rw-r--r-- | engine/lib/cache.php | 204 | ||||
-rw-r--r-- | engine/lib/views.php | 200 |
2 files changed, 204 insertions, 200 deletions
diff --git a/engine/lib/cache.php b/engine/lib/cache.php index 72293022a..1f24cddd1 100644 --- a/engine/lib/cache.php +++ b/engine/lib/cache.php @@ -7,6 +7,8 @@ * @subpackage Cache */ +/* Filepath Cache */ + /** * Returns an ElggCache object suitable for caching view * file load paths to disk under $CONFIG->dataroot. @@ -112,3 +114,205 @@ function elgg_disable_filepath_cache() { $CONFIG->viewpath_cache_enabled = 0; elgg_filepath_cache_reset(); } + +/* Simplecache */ + +/** + * Registers a view to simple cache. + * + * Simple cache is a caching mechanism that saves the output of + * views and its extensions into a file. If the view is called + * by the {@link simplecache/view.php} file, the Elgg framework will + * not be loaded and the contents of the view will returned + * from file. + * + * @warning Simple cached views must take no parameters and return + * the same content no matter who is logged in. + * + * @note CSS and the basic JS views are cached by the engine. + * + * @param string $viewname View name + * + * @return void + * @link http://docs.elgg.org/Views/Simplecache + * @see elgg_view_regenerate_simplecache() + */ +function elgg_view_register_simplecache($viewname) { + global $CONFIG; + + if (!isset($CONFIG->views)) { + $CONFIG->views = new stdClass; + } + + if (!isset($CONFIG->views->simplecache)) { + $CONFIG->views->simplecache = array(); + } + + $CONFIG->views->simplecache[] = $viewname; +} + +/** + * Get the URL for the cached file + * + * @param string $type The file type: css or js + * @param string $view The view name + * @return string + * @since 1.8.0 + */ +function elgg_view_get_simplecache_url($type, $view) { + global $CONFIG; + $lastcache = (int)$CONFIG->lastcache; + + if (elgg_view_is_simplecache_enabled()) { + $viewtype = elgg_get_viewtype(); + $url = elgg_get_site_url() . "cache/$type/$view/$viewtype/$view.$lastcache.$type"; + } else { + $url = elgg_get_site_url() . "pg/$type/$view.$lastcache.$type"; + } + return $url; +} + +/** + * Regenerates the simple cache. + * + * @warning This does not invalidate the cache, but actively resets it. + * + * @param string $viewtype Optional viewtype to regenerate + * + * @return void + * @see elgg_view_register_simplecache() + */ +function elgg_view_regenerate_simplecache($viewtype = NULL) { + global $CONFIG; + + if (!isset($CONFIG->views->simplecache) || !is_array($CONFIG->views->simplecache)) { + return; + } + + $lastcached = time(); + + // @todo elgg_view() checks if the page set is done (isset($CONFIG->pagesetupdone)) and + // triggers an event if it's not. Calling elgg_view() here breaks submenus + // (at least) because the page setup hook is called before any + // contexts can be correctly set (since this is called before page_handler()). + // To avoid this, lie about $CONFIG->pagehandlerdone to force + // the trigger correctly when the first view is actually being output. + $CONFIG->pagesetupdone = TRUE; + + if (!file_exists($CONFIG->dataroot . 'views_simplecache')) { + mkdir($CONFIG->dataroot . 'views_simplecache'); + } + + if (isset($viewtype)) { + $viewtypes = array($viewtype); + } else { + $viewtypes = $CONFIG->view_types; + } + + $original_viewtype = elgg_get_viewtype(); + + foreach ($viewtypes as $viewtype) { + elgg_set_viewtype($viewtype); + foreach ($CONFIG->views->simplecache as $view) { + $viewcontents = elgg_view($view); + $viewname = md5(elgg_get_viewtype() . $view); + if ($handle = fopen($CONFIG->dataroot . 'views_simplecache/' . $viewname, 'w')) { + fwrite($handle, $viewcontents); + fclose($handle); + } + } + + datalist_set("simplecache_lastupdate_$viewtype", $lastcached); + datalist_set("simplecache_lastcached_$viewtype", $lastcached); + } + + elgg_set_viewtype($original_viewtype); + + // needs to be set for links in html head + $CONFIG->lastcache = $lastcached; + + unset($CONFIG->pagesetupdone); +} + +/** + * Is simple cache enabled + * + * @return bool + * @since 1.8.0 + */ +function elgg_view_is_simplecache_enabled() { + global $CONFIG; + + if ($CONFIG->simplecache_enabled) { + return true; + } + + return false; +} + +/** + * Enables the simple cache. + * + * @access private + * @see elgg_view_register_simplecache() + * @return void + */ +function elgg_view_enable_simplecache() { + global $CONFIG; + + datalist_set('simplecache_enabled', 1); + $CONFIG->simplecache_enabled = 1; + elgg_view_regenerate_simplecache(); +} + +/** + * Disables the simple cache. + * + * @warning Simplecache is also purged when disabled. + * + * @access private + * @see elgg_view_register_simplecache() + * @return void + */ +function elgg_view_disable_simplecache() { + global $CONFIG; + if ($CONFIG->simplecache_enabled) { + datalist_set('simplecache_enabled', 0); + $CONFIG->simplecache_enabled = 0; + + // purge simple cache + if ($handle = opendir($CONFIG->dataroot . 'views_simplecache')) { + while (false !== ($file = readdir($handle))) { + if ($file != "." && $file != "..") { + unlink($CONFIG->dataroot . 'views_simplecache/' . $file); + } + } + closedir($handle); + } + } +} + +/** + * Invalidates all cached views in the simplecache + * + * @return bool + * @since 1.7.4 + */ +function elgg_invalidate_simplecache() { + global $CONFIG; + + $return = TRUE; + + if ($handle = opendir($CONFIG->dataroot . 'views_simplecache')) { + while (false !== ($file = readdir($handle))) { + if ($file != "." && $file != "..") { + $return = $return && unlink($CONFIG->dataroot . 'views_simplecache/' . $file); + } + } + closedir($handle); + } else { + $return = FALSE; + } + + return $return; +} diff --git a/engine/lib/views.php b/engine/lib/views.php index 865212a06..49fba8bf6 100644 --- a/engine/lib/views.php +++ b/engine/lib/views.php @@ -1453,206 +1453,6 @@ function autoregister_views($view_base, $folder, $base_location_path, $viewtype) } /** - * Registers a view to simple cache. - * - * Simple cache is a caching mechanism that saves the output of - * views and its extensions into a file. If the view is called - * by the {@link simplecache/view.php} file, the Elgg framework will - * not be loaded and the contents of the view will returned - * from file. - * - * @warning Simple cached views must take no parameters and return - * the same content no matter who is logged in. - * - * @note CSS and the basic JS views are cached by the engine. - * - * @param string $viewname View name - * - * @return void - * @link http://docs.elgg.org/Views/Simplecache - * @see elgg_view_regenerate_simplecache() - */ -function elgg_view_register_simplecache($viewname) { - global $CONFIG; - - if (!isset($CONFIG->views)) { - $CONFIG->views = new stdClass; - } - - if (!isset($CONFIG->views->simplecache)) { - $CONFIG->views->simplecache = array(); - } - - $CONFIG->views->simplecache[] = $viewname; -} - -/** - * Get the URL for the cached file - * - * @param string $type The file type: css or js - * @param string $view The view name - * @return string - * @since 1.8.0 - */ -function elgg_view_get_simplecache_url($type, $view) { - global $CONFIG; - $lastcache = (int)$CONFIG->lastcache; - - if (elgg_view_is_simplecache_enabled()) { - $viewtype = elgg_get_viewtype(); - $url = elgg_get_site_url() . "cache/$type/$view/$viewtype/$view.$lastcache.$type"; - } else { - $url = elgg_get_site_url() . "pg/$type/$view.$lastcache.$type"; - } - return $url; -} - -/** - * Regenerates the simple cache. - * - * @warning This does not invalidate the cache, but actively resets it. - * - * @param string $viewtype Optional viewtype to regenerate - * - * @return void - * @see elgg_view_register_simplecache() - */ -function elgg_view_regenerate_simplecache($viewtype = NULL) { - global $CONFIG; - - if (!isset($CONFIG->views->simplecache) || !is_array($CONFIG->views->simplecache)) { - return; - } - - $lastcached = time(); - - // @todo elgg_view() checks if the page set is done (isset($CONFIG->pagesetupdone)) and - // triggers an event if it's not. Calling elgg_view() here breaks submenus - // (at least) because the page setup hook is called before any - // contexts can be correctly set (since this is called before page_handler()). - // To avoid this, lie about $CONFIG->pagehandlerdone to force - // the trigger correctly when the first view is actually being output. - $CONFIG->pagesetupdone = TRUE; - - if (!file_exists($CONFIG->dataroot . 'views_simplecache')) { - mkdir($CONFIG->dataroot . 'views_simplecache'); - } - - if (isset($viewtype)) { - $viewtypes = array($viewtype); - } else { - $viewtypes = $CONFIG->view_types; - } - - $original_viewtype = elgg_get_viewtype(); - - foreach ($viewtypes as $viewtype) { - elgg_set_viewtype($viewtype); - foreach ($CONFIG->views->simplecache as $view) { - $viewcontents = elgg_view($view); - $viewname = md5(elgg_get_viewtype() . $view); - if ($handle = fopen($CONFIG->dataroot . 'views_simplecache/' . $viewname, 'w')) { - fwrite($handle, $viewcontents); - fclose($handle); - } - } - - datalist_set("simplecache_lastupdate_$viewtype", $lastcached); - datalist_set("simplecache_lastcached_$viewtype", $lastcached); - } - - elgg_set_viewtype($original_viewtype); - - // needs to be set for links in html head - $CONFIG->lastcache = $lastcached; - - unset($CONFIG->pagesetupdone); -} - -/** - * Is simple cache enabled - * - * @return bool - * @since 1.8.0 - */ -function elgg_view_is_simplecache_enabled() { - global $CONFIG; - - if ($CONFIG->simplecache_enabled) { - return true; - } - - return false; -} - -/** - * Enables the simple cache. - * - * @access private - * @see elgg_view_register_simplecache() - * @return void - */ -function elgg_view_enable_simplecache() { - global $CONFIG; - - datalist_set('simplecache_enabled', 1); - $CONFIG->simplecache_enabled = 1; - elgg_view_regenerate_simplecache(); -} - -/** - * Disables the simple cache. - * - * @warning Simplecache is also purged when disabled. - * - * @access private - * @see elgg_view_register_simplecache() - * @return void - */ -function elgg_view_disable_simplecache() { - global $CONFIG; - if ($CONFIG->simplecache_enabled) { - datalist_set('simplecache_enabled', 0); - $CONFIG->simplecache_enabled = 0; - - // purge simple cache - if ($handle = opendir($CONFIG->dataroot . 'views_simplecache')) { - while (false !== ($file = readdir($handle))) { - if ($file != "." && $file != "..") { - unlink($CONFIG->dataroot . 'views_simplecache/' . $file); - } - } - closedir($handle); - } - } -} - -/** - * Invalidates all cached views in the simplecache - * - * @return bool - * @since 1.7.4 - */ -function elgg_invalidate_simplecache() { - global $CONFIG; - - $return = TRUE; - - if ($handle = opendir($CONFIG->dataroot . 'views_simplecache')) { - while (false !== ($file = readdir($handle))) { - if ($file != "." && $file != "..") { - $return = $return && unlink($CONFIG->dataroot . 'views_simplecache/' . $file); - } - } - closedir($handle); - } else { - $return = FALSE; - } - - return $return; -} - -/** * Add the core Elgg head elements that could be cached */ function elgg_views_register_core_head_elements() { |