/** * Returns a cache instance. * * @param bool $apply_proxied_operations Whether or not to apply any * proxied (disable this in tests!) * @return StudipCache the cache instance */ public static function getCache($apply_proxied_operations = true) { if (is_null(self::$cache)) { $proxied = false; if (!$GLOBALS['CACHING_ENABLE']) { self::$cache = new StudipNullCache(); // Proxy cache operations if CACHING_ENABLE is different from the globally set // caching value. This should only be the case in cli mode. if (isset($GLOBALS['GLOBAL_CACHING_ENABLE']) && $GLOBALS['GLOBAL_CACHING_ENABLE']) { $proxied = true; } } else { try { $class = self::loadCacheClass(); $args = self::retrieveConstructorArguments(); self::$cache = self::instantiateCache($class, $args); } catch (Exception $e) { error_log(__METHOD__ . ': ' . $e->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; }