コード例 #1
0
 /**
  * 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}();
         }
     }
 }
コード例 #2
0
 /**
  * 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) {
         }
     }
 }