From 995d78fa5ab4b1d925d2b98b3e61bb2ad5d595e3 Mon Sep 17 00:00:00 2001 From: Frans de Jonge Date: Sat, 24 Jun 2017 15:11:40 +0200 Subject: [PATCH] [FilterBridge] Initial implementation of basic title permit and block See the comment https://github.com/RSS-Bridge/rss-bridge/issues/402#issuecomment-305982306 Split off from https://github.com/RSS-Bridge/rss-bridge/pull/535 --- bridges/FilterBridge.php | 77 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 bridges/FilterBridge.php diff --git a/bridges/FilterBridge.php b/bridges/FilterBridge.php new file mode 100644 index 0000000..00f045f --- /dev/null +++ b/bridges/FilterBridge.php @@ -0,0 +1,77 @@ + array( + 'name' => 'Feed URL', + 'required' => true, + ), + 'filter' => array( + 'name' => 'Filter item title (regular expression)', + 'required' => false, + ), + 'filter_type' => array( + 'name' => 'Filter type', + 'type' => 'list', + 'required' => false, + 'values' => array( + 'Permit' => 'permit', + 'Block' => 'block', + ), + 'defaultValue' => 'permit', + ), + )); + + protected function parseItem($newItem){ + $item = parent::parseItem($newItem); + + switch(true){ + case $this->getFilterType() === 'permit': + if (preg_match($this->getFilter(), $item['title'])) { + return $item; + } + break; + case $this->getFilterType() === 'block': + if (!preg_match($this->getFilter(), $item['title'])) { + return $item; + } + break; + } + return null; + } + + protected function getFilter(){ + return '/' . $this->getInput('filter') . '/'; + } + + protected function getFilterType(){ + return $this->getInput('filter_type'); + } + + public function getURI(){ + $url = $this->getInput('url'); + + if(empty($url)){ + $url = parent::getURI(); + } + return $url; + } + + public function collectData(){ + if($this->getInput('url') && substr($this->getInput('url'), 0, strlen('http')) !== 'http'){ + // just in case someone find a way to access local files by playing with the url + returnClientError('The url parameter must either refer to http or https protocol.'); + } + try{ + $this->collectExpandableDatas($this->getURI()); + }catch (HttpException $e){ + $this->collectExpandableDatas($this->getURI()); + } + } +}