/** * 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}(); } } }
/** * Build furl templates from FURL extensions * * @access public * @return array */ public static function buildFurlTemplates() { /* INIT */ $apps = array(); /* Done this already? */ if (self::$_furlTemplates) { return self::$_furlTemplates; } /* Because this is called before the cache is unpacked, we need to expensively grab all app dirs */ foreach (array('applications', 'applications_addon/ips', 'applications_addon/other') as $folder) { try { foreach (new DirectoryIterator(IPS_ROOT_PATH . $folder) as $file) { if (!$file->isDot() and $file->isDir()) { $_name = $file->getFileName(); if (substr($_name, 0, 1) != '.') { $apps[$folder . '/' . $_name] = $_name; } } } } catch (Exception $e) { } } /* First, add in core stuffs */ ipsRegistry::_loadCoreVariables(); $templates = ipsRegistry::_fetchCoreVariables('templates'); if (is_array($templates)) { foreach ($templates as $key => $data) { self::$_furlTemplates[$key] = $data; } } /* Loop over the applications and build */ foreach ($apps as $path => $app_dir) { $appSphinxTemplate = ''; if (file_exists(IPS_ROOT_PATH . $path . '/extensions/furlTemplates.php')) { unset($_SEOTEMPLATES); require IPS_ROOT_PATH . $path . '/extensions/furlTemplates.php'; if (is_array($_SEOTEMPLATES)) { foreach ($_SEOTEMPLATES as $key => $data) { self::$_furlTemplates[$key] = $data; } } } } /* Return for anyone else */ return self::$_furlTemplates; }
/** * 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}(); } } }
/** * Build furl templates from FURL extensions * * @return array */ public static function buildFurlTemplates() { /* INIT */ $apps = array(); $_SEOTEMPLATES = array(); static $_apps = array(); /* Done this already? */ if (self::$_furlTemplates) { return self::$_furlTemplates; } /** * Get app data and cache - 1 query is better than 1 per app */ ipsRegistry::DB()->build(array('select' => 'app_directory, app_public_title, app_enabled', 'from' => 'core_applications')); ipsRegistry::DB()->execute(); while ($_r = ipsRegistry::DB()->fetch()) { $_apps[$_r['app_directory']] = $_r; } /* Because this is called before the cache is unpacked, we need to expensively grab all app dirs */ foreach (array('applications', 'applications_addon/ips', 'applications_addon/other') as $folder) { try { foreach (new DirectoryIterator(IPS_ROOT_PATH . $folder) as $file) { if (!$file->isDot() and $file->isDir()) { $_name = $file->getFileName(); if (substr($_name, 0, 1) != '.') { /* Check if this app is enabled before including the templates.. */ $_check = isset($_apps[$_name]) ? $_apps[$_name] : array('app_public_title' => '', 'app_enabled' => 0); if ($_check['app_public_title'] && $_check['app_enabled']) { $apps[$folder . '/' . $_name] = $_name; } } } } } catch (Exception $e) { } } /* First, add in core stuffs */ ipsRegistry::_loadCoreVariables(); $templates = ipsRegistry::_fetchCoreVariables('templates'); if (is_array($templates)) { foreach ($templates as $key => $data) { self::$_furlTemplates[$key] = $data; } } /* Loop over the applications and build */ foreach ($apps as $path => $app_dir) { if (is_file(IPS_ROOT_PATH . $path . '/extensions/furlTemplates.php')) { $_SEOTEMPLATES = array(); require IPS_ROOT_PATH . $path . '/extensions/furlTemplates.php'; /*noLibHook*/ if (is_array($_SEOTEMPLATES) && count($_SEOTEMPLATES)) { foreach ($_SEOTEMPLATES as $key => $data) { self::$_furlTemplates[$key] = $data; } } } } /* Return for anyone else */ return self::$_furlTemplates; }
/** * 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) { } } }