diff --git a/index.php b/index.php
index 851f0f9..97a7645 100644
--- a/index.php
+++ b/index.php
@@ -19,6 +19,10 @@ define('PROXY_BYBRIDGE', false);
// Comment this line or keep PROXY_NAME empty to display PROXY_URL instead
define('PROXY_NAME', 'Hidden Proxy Name');
+// Allows the operator to specify custom cache timeouts via '&_cache_timeout=3600'
+// true: enabled, false: disabled (default)
+define('CUSTOM_CACHE_TIMEOUT', false);
+
date_default_timezone_set('UTC');
error_reporting(0);
@@ -168,6 +172,16 @@ try {
define('NOPROXY', true);
}
+ // Custom cache timeout
+ $cache_timeout = -1;
+ if(array_key_exists('_cache_timeout', $params)) {
+ if(!CUSTOM_CACHE_TIMEOUT) {
+ throw new \HttpException('This server doesn\'t support "_cache_timeout"!');
+ }
+
+ $cache_timeout = filter_var($params['_cache_timeout'], FILTER_VALIDATE_INT);
+ }
+
// Initialize cache
$cache = Cache::create('FileCache');
$cache->setPath(CACHE_DIR);
@@ -178,10 +192,12 @@ try {
unset($params['bridge']);
unset($params['format']);
unset($params['_noproxy']);
+ unset($params['_cache_timeout']);
// Load cache & data
try {
$bridge->setCache($cache);
+ $bridge->setCacheTimeout($cache_timeout);
$bridge->setDatas($params);
} catch(Exception $e) {
http_response_code($e->getCode());
diff --git a/lib/BridgeAbstract.php b/lib/BridgeAbstract.php
index cd2ff63..0bd1c7c 100644
--- a/lib/BridgeAbstract.php
+++ b/lib/BridgeAbstract.php
@@ -14,6 +14,7 @@ abstract class BridgeAbstract implements BridgeInterface {
protected $items = array();
protected $inputs = array();
protected $queriedContext = '';
+ protected $cacheTimeout;
/**
* Return cachable datas (extrainfos and items) stored in the bridge
@@ -171,7 +172,7 @@ abstract class BridgeAbstract implements BridgeInterface {
if(!is_null($this->cache)) {
$time = $this->cache->getTime();
if($time !== false
- && (time() - static::CACHE_TIMEOUT < $time)
+ && (time() - $this->getCacheTimeout() < $time)
&& (!defined('DEBUG') || DEBUG !== true)) {
$cached = $this->cache->loadData();
if(isset($cached['items']) && isset($cached['extraInfos'])) {
@@ -268,4 +269,17 @@ abstract class BridgeAbstract implements BridgeInterface {
public function setCache(\CacheInterface $cache){
$this->cache = $cache;
}
+
+ public function setCacheTimeout($timeout){
+ if(is_numeric($timeout) && ($timeout < 1 || $timeout > 86400)) {
+ $this->cacheTimeout = static::CACHE_TIMEOUT;
+ return;
+ }
+
+ $this->cacheTimeout = $timeout;
+ }
+
+ public function getCacheTimeout(){
+ return isset($this->cacheTimeout) ? $this->cacheTimeout : static::CACHE_TIMEOUT;
+ }
}
diff --git a/lib/BridgeInterface.php b/lib/BridgeInterface.php
index a4add2c..b8f5cf4 100644
--- a/lib/BridgeInterface.php
+++ b/lib/BridgeInterface.php
@@ -68,4 +68,20 @@ interface BridgeInterface {
* @param object CacheInterface The cache instance
*/
public function setCache(\CacheInterface $cache);
+
+ /**
+ * Sets the timeout for clearing the cache files. The timeout must be
+ * specified between 1..86400 seconds (max. 24 hours). The default timeout
+ * (specified by the bridge maintainer) applies for invalid values.
+ *
+ * @param int $timeout The cache timeout in seconds
+ */
+ public function setCacheTimeout($timeout);
+
+ /**
+ * Returns the cache timeout
+ *
+ * @return int Cache timeout
+ */
+ public function getCacheTimeout();
}
diff --git a/lib/html.php b/lib/html.php
index 4c6c320..eec47ae 100644
--- a/lib/html.php
+++ b/lib/html.php
@@ -75,8 +75,24 @@ CARD;
. ((defined('PROXY_NAME') && PROXY_NAME) ? PROXY_NAME : PROXY_URL)
. ')
'
. PHP_EOL;
- }
+ } if(CUSTOM_CACHE_TIMEOUT) {
+ $idArg = 'arg-'
+ . urlencode($bridgeName)
+ . '-'
+ . urlencode('_cache_timeout');
+ $card .= ''
+ . PHP_EOL;
+
+ $card .= '
'
+ . PHP_EOL;
+ }
$card .= $getHelperButtonsFormat($formats);
} else {
$card .= 'Inactive';
@@ -251,6 +267,23 @@ CARD;
. ((defined('PROXY_NAME') && PROXY_NAME) ? PROXY_NAME : PROXY_URL)
. ')
'
. PHP_EOL;
+ } if(CUSTOM_CACHE_TIMEOUT) {
+ $idArg = 'arg-'
+ . urlencode($bridgeName)
+ . '-'
+ . urlencode('_cache_timeout');
+
+ $card .= ''
+ . PHP_EOL;
+
+ $card .= '
'
+ . PHP_EOL;
}
$card .= $getHelperButtonsFormat($formats);
} else {