getMessage()); PageLayout::addBodyElements(MessageBox::error(__METHOD__ . ': ' . $e->getMessage())); $class = self::DEFAULT_CACHE_CLASS; self::$cache = new $class(); } } // If proxy should be used, inject it. Otherwise apply pending // operations, if any. if ($proxied) { self::$cache = new StudipCacheProxy(self::$cache); } elseif ($GLOBALS['CACHING_ENABLE'] && $apply_proxied_operations) { // Even if the above condition will try to eliminate most // failures, the following operation still needs to be wrapped // in a try/catch block. Otherwise there are no means to // execute migration 166 which creates the neccessary tables // for said operation. try { StudipCacheOperation::apply(self::$cache); } catch (Exception $e) { } } } return self::$cache; } /** * Load configured cache class and return its name. * * @return string the name of the configured cache class */ public static function loadCacheClass() { $cacheConfig = self::getConfig()->SYSTEMCACHE; $cache_class = $cacheConfig['type'] ?: null; # default class if ($cache_class === null) { $version = new DBSchemaVersion(); if ($version->get(1) < 224) { // db cache is not yet available, use StudipMemoryCache return 'StudipMemoryCache'; } return self::DEFAULT_CACHE_CLASS; } if (!class_exists($cache_class)) { throw new UnexpectedValueException("Could not find class: '$cache_class'"); } return $cache_class; } /** * Return an array of arguments required for instantiation of the cache * class. * * @return array the array of arguments */ public static function retrieveConstructorArguments() { $cacheConfig = self::getConfig()->SYSTEMCACHE; return $cacheConfig ?: []; } /** * Return an instance of a given class using some arguments * * @param string the name of the class * @param array an array of arguments to be used by the constructor * * @return StudipCache an instance of the specified class */ public static function instantiateCache($class, $arguments) { $reflection_class = new ReflectionClass($class); return (is_array($arguments['config']) && count($arguments['config']) > 0) ? $reflection_class->newInstanceArgs($arguments['config']) : $reflection_class->newInstance(); } }