mirror of
https://github.com/RSS-Bridge/rss-bridge.git
synced 2025-07-11 03:56:24 +02:00
bridges
cache
caches
css
formats
lib
Bridge.php
BridgeAbstract.php
BridgeInterface.php
Cache.php
CacheInterface.php
Exceptions.php
FeedExpander.php
Format.php
FormatAbstract.php
FormatInterface.php
RssBridge.php
contents.php
error.php
html.php
validation.php
vendor
.gitattributes
.gitignore
.travis.yml
CHANGELOG.md
README.md
UNLICENSE
index.php
phpcs.xml
scalingo.json
* add function getExtraInfos() to BridgeAbstract * replace call to $bridge->getName() and $bridge->getURI() by $bridge->getExtraInfos() replace call to $bridge->getName() and $bridge->getURI() by $bridge->getExtraInfos() defined by default in BridgeAbstract. So we could pass additionals ExtraInfos from custom bridges to custom formats.
209 lines
5.3 KiB
PHP
209 lines
5.3 KiB
PHP
<?php
|
|
require_once(__DIR__ . '/BridgeInterface.php');
|
|
abstract class BridgeAbstract implements BridgeInterface {
|
|
|
|
const NAME = 'Unnamed bridge';
|
|
const URI = '';
|
|
const DESCRIPTION = 'No description provided';
|
|
const MAINTAINER = 'No maintainer';
|
|
const CACHE_TIMEOUT = 3600;
|
|
const PARAMETERS = array();
|
|
|
|
protected $cache;
|
|
protected $items = array();
|
|
protected $inputs = array();
|
|
protected $queriedContext = '';
|
|
|
|
/**
|
|
* Return items stored in the bridge
|
|
* @return mixed
|
|
*/
|
|
public function getItems(){
|
|
return $this->items;
|
|
}
|
|
|
|
|
|
protected function setInputs(array $inputs, $queriedContext){
|
|
// Import and assign all inputs to their context
|
|
foreach($inputs as $name => $value){
|
|
foreach(static::PARAMETERS as $context => $set){
|
|
if(array_key_exists($name, static::PARAMETERS[$context])){
|
|
$this->inputs[$context][$name]['value'] = $value;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Apply default values to missing data
|
|
$contexts = array($queriedContext);
|
|
if(array_key_exists('global', static::PARAMETERS)){
|
|
$contexts[] = 'global';
|
|
}
|
|
|
|
foreach($contexts as $context){
|
|
foreach(static::PARAMETERS[$context] as $name => $properties){
|
|
if(isset($this->inputs[$context][$name]['value'])){
|
|
continue;
|
|
}
|
|
|
|
$type = isset($properties['type']) ? $properties['type'] : 'text';
|
|
|
|
switch($type){
|
|
case 'checkbox':
|
|
if(!isset($properties['defaultValue'])){
|
|
$this->inputs[$context][$name]['value'] = false;
|
|
} else {
|
|
$this->inputs[$context][$name]['value'] = $properties['defaultValue'];
|
|
}
|
|
break;
|
|
case 'list':
|
|
if(!isset($properties['defaultValue'])){
|
|
$firstItem = reset($properties['values']);
|
|
if(is_array($firstItem)){
|
|
$firstItem = reset($firstItem);
|
|
}
|
|
$this->inputs[$context][$name]['value'] = $firstItem;
|
|
} else {
|
|
$this->inputs[$context][$name]['value'] = $properties['defaultValue'];
|
|
}
|
|
break;
|
|
default:
|
|
if(isset($properties['defaultValue'])){
|
|
$this->inputs[$context][$name]['value'] = $properties['defaultValue'];
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Copy global parameter values to the guessed context
|
|
if(array_key_exists('global', static::PARAMETERS)){
|
|
foreach(static::PARAMETERS['global'] as $name => $properties){
|
|
if(isset($inputs[$name])){
|
|
$value = $inputs[$name];
|
|
} elseif (isset($properties['value'])){
|
|
$value = $properties['value'];
|
|
} else {
|
|
continue;
|
|
}
|
|
$this->inputs[$queriedContext][$name]['value'] = $value;
|
|
}
|
|
}
|
|
|
|
// Only keep guessed context parameters values
|
|
if(isset($this->inputs[$queriedContext])){
|
|
$this->inputs = array($queriedContext => $this->inputs[$queriedContext]);
|
|
} else {
|
|
$this->inputs = array();
|
|
}
|
|
}
|
|
|
|
protected function getQueriedContext(array $inputs){
|
|
$queriedContexts = array();
|
|
foreach(static::PARAMETERS as $context => $set){
|
|
$queriedContexts[$context] = null;
|
|
foreach($set as $id => $properties){
|
|
if(isset($inputs[$id]) && !empty($inputs[$id])){
|
|
$queriedContexts[$context] = true;
|
|
} elseif(isset($properties['required'])
|
|
&& $properties['required'] === true){
|
|
$queriedContexts[$context] = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if(array_key_exists('global', static::PARAMETERS)
|
|
&& $queriedContexts['global'] === false){
|
|
return null;
|
|
}
|
|
unset($queriedContexts['global']);
|
|
|
|
switch(array_sum($queriedContexts)){
|
|
case 0:
|
|
foreach($queriedContexts as $context => $queried){
|
|
if (is_null($queried)){
|
|
return $context;
|
|
}
|
|
}
|
|
return null;
|
|
case 1: return array_search(true, $queriedContexts);
|
|
default: return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Defined datas with parameters depending choose bridge
|
|
* Note : you can define a cache with "setCache"
|
|
* @param array array with expected bridge paramters
|
|
*/
|
|
public function setDatas(array $inputs){
|
|
if(!is_null($this->cache)){
|
|
$time = $this->cache->getTime();
|
|
if($time !== false
|
|
&& (time() - static::CACHE_TIMEOUT < $time)
|
|
&& (!defined('DEBUG') || DEBUG !== true)){
|
|
$this->items = $this->cache->loadData();
|
|
return;
|
|
}
|
|
}
|
|
|
|
if(empty(static::PARAMETERS)){
|
|
if(!empty($inputs)){
|
|
returnClientError('Invalid parameters value(s)');
|
|
}
|
|
|
|
$this->collectData();
|
|
if(!is_null($this->cache)){
|
|
$this->cache->saveData($this->getItems());
|
|
}
|
|
return;
|
|
}
|
|
|
|
if(!validateData($inputs, static::PARAMETERS)){
|
|
returnClientError('Invalid parameters value(s)');
|
|
}
|
|
|
|
// Guess the paramter context from input data
|
|
$this->queriedContext = $this->getQueriedContext($inputs);
|
|
if(is_null($this->queriedContext)){
|
|
returnClientError('Required parameter(s) missing');
|
|
} elseif($this->queriedContext === false){
|
|
returnClientError('Mixed context parameters');
|
|
}
|
|
|
|
$this->setInputs($inputs, $this->queriedContext);
|
|
|
|
$this->collectData();
|
|
|
|
if(!is_null($this->cache)){
|
|
$this->cache->saveData($this->getItems());
|
|
}
|
|
}
|
|
|
|
function getInput($input){
|
|
if(!isset($this->inputs[$this->queriedContext][$input]['value'])){
|
|
return null;
|
|
}
|
|
return $this->inputs[$this->queriedContext][$input]['value'];
|
|
}
|
|
|
|
public function getName(){
|
|
return static::NAME;
|
|
}
|
|
|
|
public function getURI(){
|
|
return static::URI;
|
|
}
|
|
|
|
public function getExtraInfos(){
|
|
$extraInfos = array();
|
|
$extraInfos['name']= $this->getName();
|
|
$extraInfos['uri']= $this->getURI();
|
|
return $extraInfos;
|
|
}
|
|
|
|
public function setCache(\CacheInterface $cache){
|
|
$this->cache = $cache;
|
|
}
|
|
}
|