/** * Rebuild a cache * * @access public * @param string Cache key * @param string Application * @return @e void */ public static function rebuildCache($key, $app = '') { /* INIT */ $app = IPSText::alphanumericalClean($app); $_caches = array(); if ($app) { if ($app == 'global') { $_caches = ipsRegistry::_fetchCoreVariables('cache'); } else { /* isset there is needed to prevent issues on applications installation */ if (isset(ipsRegistry::$applications[$app]) && !IPSLib::appIsInstalled($app)) { return; } $_caches = ipsRegistry::_fetchAppCoreVariables($app, 'cache'); } } else { /* Get all caches from all apps */ $_caches = ipsRegistry::_fetchCoreVariables('cache'); foreach (ipsRegistry::$applications as $appDir => $appData) { $CACHE = ipsRegistry::_fetchAppCoreVariables($appDir, 'cache'); if (is_array($CACHE)) { $_caches = array_merge($_caches, $CACHE); } } } /* Rebuild the cache, if found */ if (isset($_caches[$key])) { $file_to_check = $_caches[$key]['recache_file']; if ($file_to_check and is_file($file_to_check)) { $_func = $_caches[$key]['recache_function']; /* Hackish way to check for action overloader */ if (strpos($file_to_check, '/modules_') !== FALSE) { $_class = IPSLib::loadActionOverloader($file_to_check, $_caches[$key]['recache_class']); } elseif ($app) { $_class = IPSLib::loadLibrary($file_to_check, $_caches[$key]['recache_class'], $app == 'global' ? 'core' : $app); } /* Fallback */ if (!$_class) { $_class = $_caches[$key]['recache_class']; } $recache = new $_class(ipsRegistry::instance()); if (method_exists($recache, 'makeRegistryShortcuts')) { $recache->makeRegistryShortcuts(ipsRegistry::instance()); } $recache->{$_func}(); } } }
/** * Rebuild a cache using defined $CACHE settings in it's extensions file * * @param string Cache key * @param string Application * @return @e void */ public static function rebuildCache($key, $app = '') { if (defined('IPS_NO_CACHE_REBUILD')) { return true; } /* INIT */ $app = IPSText::alphanumericalClean($app); $_caches = array(); if ($app) { if ($app == 'global') { $_caches = ipsRegistry::_fetchCoreVariables('cache'); } else { /* isset there is needed to prevent issues on applications installation */ if (isset(ipsRegistry::$applications[$app]) && !IPSLib::appIsInstalled($app)) { return; } $_caches = ipsRegistry::_fetchAppCoreVariables($app, 'cache'); } } else { /* Get all caches from all apps */ $_caches = ipsRegistry::_fetchCoreVariables('cache'); foreach (ipsRegistry::$applications as $appDir => $appData) { $CACHE = ipsRegistry::_fetchAppCoreVariables($appDir, 'cache'); if (is_array($CACHE)) { $_caches = array_merge($_caches, $CACHE); /* @link http://community.invisionpower.com/resources/bugs.html/_/ip-board/automatic-cache-reloads-do-not-take-application-directories-into-account-r41762 */ if (isset($CACHE[$key])) { $app = $appDir; } } } } /* Rebuild the cache, if found */ if (isset($_caches[$key])) { $file_to_check = $_caches[$key]['recache_file']; if ($file_to_check and is_file($file_to_check)) { $_func = $_caches[$key]['recache_function']; /* Hackish way to check for action overloader */ if (strpos($file_to_check, '/modules_') !== FALSE) { $_class = IPSLib::loadActionOverloader($file_to_check, $_caches[$key]['recache_class']); } elseif ($app) { $_class = IPSLib::loadLibrary($file_to_check, $_caches[$key]['recache_class'], $app == 'global' ? 'core' : $app); } /* Fallback */ if (!$_class) { $_class = $_caches[$key]['recache_class']; } $recache = new $_class(ipsRegistry::instance()); if (method_exists($recache, 'makeRegistryShortcuts')) { $recache->makeRegistryShortcuts(ipsRegistry::instance()); } $recache->{$_func}(); } } }
/** * Rebuild a cache * * @access public * @param string Cache key * @param string Application * @return void */ public static function rebuildCache($key, $app = '') { $app = IPSText::alphanumericalClean($app); if ($app) { if ($app == 'global') { $CACHE = ipsRegistry::_fetchCoreVariables('cache'); } else { $CACHE = ipsRegistry::_fetchAppCoreVariables($app, 'cache'); } if ($CACHE[$key]) { $file_to_check = $CACHE[$key]['recache_file']; if ($file_to_check and is_file($file_to_check) and file_exists($file_to_check)) { $_class = $CACHE[$key]['recache_class']; $_func = $CACHE[$key]['recache_function']; require_once $file_to_check; if (class_exists($_class)) { $recache = new $_class(ipsRegistry::instance()); if (method_exists($recache, 'makeRegistryShortcuts')) { $recache->makeRegistryShortcuts(ipsRegistry::instance()); } $recache->{$_func}(); } } } } else { try { foreach (new DirectoryIterator(IPS_ROOT_PATH . 'applications') as $application) { if ($application->isDir() and !$application->isDot()) { $CACHE = ipsRegistry::_fetchAppCoreVariables(IPS_APP_COMPONENT, 'cache'); if (is_array($CACHE)) { if ($CACHE[$key]) { $file_to_check = $CACHE[$key]['recache_file']; if ($file_to_check and file_exists($file_to_check)) { $_class = $CACHE[$key]['recache_class']; $_func = $CACHE[$key]['recache_function']; require_once $file_to_check; $recache = new $_class(ipsRegistry::instance()); if (method_exists($recache, 'makeRegistryShortcuts')) { $recache->makeRegistryShortcuts(ipsRegistry::instance()); } $recache->{$_func}(); } break; } } } } } catch (Exception $e) { } } }