]> git.immae.eu Git - github/wallabag/wallabag.git/blobdiff - src/Wallabag/CoreBundle/Helper/RuleBasedIgnoreOriginProcessor.php
Add new Helper to process Ignore Origin rules and RulerZ operator
[github/wallabag/wallabag.git] / src / Wallabag / CoreBundle / Helper / RuleBasedIgnoreOriginProcessor.php
diff --git a/src/Wallabag/CoreBundle/Helper/RuleBasedIgnoreOriginProcessor.php b/src/Wallabag/CoreBundle/Helper/RuleBasedIgnoreOriginProcessor.php
new file mode 100644 (file)
index 0000000..333e5b0
--- /dev/null
@@ -0,0 +1,50 @@
+<?php
+
+namespace Wallabag\CoreBundle\Helper;
+
+use Psr\Log\LoggerInterface;
+use RulerZ\RulerZ;
+use Wallabag\CoreBundle\Entity\Entry;
+use Wallabag\CoreBundle\Repository\IgnoreOriginInstanceRuleRepository;
+
+class RuleBasedIgnoreOriginProcessor
+{
+    protected $rulerz;
+    protected $logger;
+    protected $ignoreOriginInstanceRuleRepository;
+
+    public function __construct(RulerZ $rulerz, LoggerInterface $logger, IgnoreOriginInstanceRuleRepository $ignoreOriginInstanceRuleRepository)
+    {
+        $this->rulerz = $rulerz;
+        $this->logger = $logger;
+        $this->ignoreOriginInstanceRuleRepository = $ignoreOriginInstanceRuleRepository;
+    }
+
+    /**
+     * @param Entry $entry Entry to process
+     *
+     * @return bool
+     */
+    public function process(Entry $entry)
+    {
+        $url = $entry->getUrl();
+        $userRules = $entry->getUser()->getConfig()->getIgnoreOriginRules()->toArray();
+        $rules = array_merge($this->ignoreOriginInstanceRuleRepository->findAll(), $userRules);
+
+        $parsed_url = parse_url($url);
+        // We add the former url as a new key _all for pattern matching
+        $parsed_url['_all'] = $url;
+
+        foreach ($rules as $rule) {
+            if ($this->rulerz->satisfies($parsed_url, $rule->getRule())) {
+                $this->logger->info('Origin url matching ignore rule.', [
+                    'rule' => $rule->getRule(),
+                ]);
+
+                return true;
+            }
+        }
+
+        return false;
+    }
+}