/** * Store data at the server. * * @param string $key The item's key * @param string $content The item's conten * @param int $expires The item's expiry time in seconds, defaults to 12h * @return bool Returns TRUE on success or FALSE on failure */ public function write($key, $content, $expires = self::DEFAULT_EXPIRATION) { if (in_array('write', $this->proxy_these)) { try { $operation = new StudipCacheOperation(array($key, 'write')); $operation->parameters = serialize(array($content, $expires)); $operation->store(); } catch (Exception $e) { } } return $this->actual_cache->write($key, $content, $expires); }
/** * 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; }