From 1591e18027064d76a78fae27352b0cf9a1a50629 Mon Sep 17 00:00:00 2001 From: logmanoriginal Date: Fri, 21 Jun 2019 19:08:59 +0200 Subject: [PATCH] core: Add context hinting for new feeds RSS-Bridge currently has to guess the queried context from the data provided by the user. This, however, can cause issues for bridges that have multiple contexts with conflicting parameters (i.e. none). This commit adds context hinting to queries via '&context=' which can be omitted in which case the context is determined as before. --- lib/BridgeAbstract.php | 12 ++++++++++-- lib/BridgeCard.php | 10 ++++++++-- lib/ParameterValidator.php | 1 + 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/lib/BridgeAbstract.php b/lib/BridgeAbstract.php index 13215a46..b4eb9ff5 100644 --- a/lib/BridgeAbstract.php +++ b/lib/BridgeAbstract.php @@ -194,6 +194,11 @@ abstract class BridgeAbstract implements BridgeInterface { */ public function setDatas(array $inputs){ + if(isset($inputs['context'])) { // Context hinting (optional) + $this->queriedContext = $inputs['context']; + unset($inputs['context']); + } + if(empty(static::PARAMETERS)) { if(!empty($inputs)) { @@ -218,8 +223,11 @@ abstract class BridgeAbstract implements BridgeInterface { ); } - // Guess the paramter context from input data - $this->queriedContext = $validator->getQueriedContext($inputs, static::PARAMETERS); + // Guess the context from input data + if(empty($this->queriedContext)) { + $this->queriedContext = $validator->getQueriedContext($inputs, static::PARAMETERS); + } + if(is_null($this->queriedContext)) { returnClientError('Required parameter(s) missing'); } elseif($this->queriedContext === false) { diff --git a/lib/BridgeCard.php b/lib/BridgeCard.php index 8c36919c..c6f38221 100644 --- a/lib/BridgeCard.php +++ b/lib/BridgeCard.php @@ -48,13 +48,19 @@ final class BridgeCard { * @param bool $isHttps If disabled, adds a warning to the form * @return string The form header */ - private static function getFormHeader($bridgeName, $isHttps = false) { + private static function getFormHeader($bridgeName, $isHttps = false, $parameterName = '') { $form = << EOD; + if(!empty($parameterName)) { + $form .= << +EOD; + } + if(!$isHttps) { $form .= '
Warning : This bridge is not fetching its content through a secure connection
'; @@ -80,7 +86,7 @@ This bridge is not fetching its content through a secure connection'; $isHttps = false, $parameterName = '', $parameters = array()) { - $form = self::getFormHeader($bridgeName, $isHttps); + $form = self::getFormHeader($bridgeName, $isHttps, $parameterName); if(count($parameters) > 0) { diff --git a/lib/ParameterValidator.php b/lib/ParameterValidator.php index 55e6fe4b..f740888a 100644 --- a/lib/ParameterValidator.php +++ b/lib/ParameterValidator.php @@ -214,6 +214,7 @@ class ParameterValidator { switch(array_sum($queriedContexts)) { case 0: // Found no match, is there a context without parameters? + if(isset($data['context'])) return $data['context']; foreach($queriedContexts as $context => $queried) { if(is_null($queried)) { return $context;