From f39c5a2a702036750b4d7c32d02e7f92955a4eed Mon Sep 17 00:00:00 2001 From: Kevin Decherf Date: Sun, 11 Aug 2019 23:51:55 +0200 Subject: Add new Helper to process Ignore Origin rules and RulerZ operator This commits adds a new helper like RuleBasedTagger for processing ignore origin rules. It also adds a new custom RulerZ operator for the '~' pattern matching rule. Renames 'pattern' with '_all' in IgnoreOriginRule entity. Signed-off-by: Kevin Decherf --- .../CoreBundle/Entity/IgnoreOriginInstanceRule.php | 3 +- .../CoreBundle/Entity/IgnoreOriginUserRule.php | 3 +- .../Helper/RuleBasedIgnoreOriginProcessor.php | 50 ++++++++++++++++++++++ .../CoreBundle/Operator/PHP/PatternMatches.php | 23 ++++++++++ .../CoreBundle/Resources/config/services.yml | 13 ++++++ 5 files changed, 88 insertions(+), 4 deletions(-) create mode 100644 src/Wallabag/CoreBundle/Helper/RuleBasedIgnoreOriginProcessor.php create mode 100644 src/Wallabag/CoreBundle/Operator/PHP/PatternMatches.php (limited to 'src') diff --git a/src/Wallabag/CoreBundle/Entity/IgnoreOriginInstanceRule.php b/src/Wallabag/CoreBundle/Entity/IgnoreOriginInstanceRule.php index 34aed50c..ce3b6e7d 100644 --- a/src/Wallabag/CoreBundle/Entity/IgnoreOriginInstanceRule.php +++ b/src/Wallabag/CoreBundle/Entity/IgnoreOriginInstanceRule.php @@ -11,7 +11,6 @@ use Symfony\Component\Validator\Constraints as Assert; * * @ORM\Entity(repositoryClass="Wallabag\CoreBundle\Repository\IgnoreOriginInstanceRuleRepository") * @ORM\Table(name="`ignore_origin_instance_rule`") - * @ORM\Entity */ class IgnoreOriginInstanceRule implements IgnoreOriginRuleInterface, RuleInterface { @@ -30,7 +29,7 @@ class IgnoreOriginInstanceRule implements IgnoreOriginRuleInterface, RuleInterfa * @Assert\NotBlank() * @Assert\Length(max=255) * @RulerZAssert\ValidRule( - * allowed_variables={"host","pattern"}, + * allowed_variables={"host","_all"}, * allowed_operators={"=","~"} * ) * @ORM\Column(name="rule", type="string", nullable=false) diff --git a/src/Wallabag/CoreBundle/Entity/IgnoreOriginUserRule.php b/src/Wallabag/CoreBundle/Entity/IgnoreOriginUserRule.php index befd6090..0b6f318d 100644 --- a/src/Wallabag/CoreBundle/Entity/IgnoreOriginUserRule.php +++ b/src/Wallabag/CoreBundle/Entity/IgnoreOriginUserRule.php @@ -11,7 +11,6 @@ use Symfony\Component\Validator\Constraints as Assert; * * @ORM\Entity(repositoryClass="Wallabag\CoreBundle\Repository\IgnoreOriginUserRuleRepository") * @ORM\Table(name="`ignore_origin_user_rule`") - * @ORM\Entity */ class IgnoreOriginUserRule implements IgnoreOriginRuleInterface, RuleInterface { @@ -30,7 +29,7 @@ class IgnoreOriginUserRule implements IgnoreOriginRuleInterface, RuleInterface * @Assert\NotBlank() * @Assert\Length(max=255) * @RulerZAssert\ValidRule( - * allowed_variables={"host","pattern"}, + * allowed_variables={"host","_all"}, * allowed_operators={"=","~"} * ) * @ORM\Column(name="rule", type="string", nullable=false) diff --git a/src/Wallabag/CoreBundle/Helper/RuleBasedIgnoreOriginProcessor.php b/src/Wallabag/CoreBundle/Helper/RuleBasedIgnoreOriginProcessor.php new file mode 100644 index 00000000..333e5b0a --- /dev/null +++ b/src/Wallabag/CoreBundle/Helper/RuleBasedIgnoreOriginProcessor.php @@ -0,0 +1,50 @@ +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; + } +} diff --git a/src/Wallabag/CoreBundle/Operator/PHP/PatternMatches.php b/src/Wallabag/CoreBundle/Operator/PHP/PatternMatches.php new file mode 100644 index 00000000..532e2bb3 --- /dev/null +++ b/src/Wallabag/CoreBundle/Operator/PHP/PatternMatches.php @@ -0,0 +1,23 @@ + 0; + } +} diff --git a/src/Wallabag/CoreBundle/Resources/config/services.yml b/src/Wallabag/CoreBundle/Resources/config/services.yml index 4ece046a..8417ac35 100644 --- a/src/Wallabag/CoreBundle/Resources/config/services.yml +++ b/src/Wallabag/CoreBundle/Resources/config/services.yml @@ -92,6 +92,7 @@ services: arguments: - "@wallabag_core.graby" - "@wallabag_core.rule_based_tagger" + - "@wallabag_core.rule_based_ignore_origin_processor" - "@validator" - "@logger" - '%wallabag_core.fetching_error_message%' @@ -110,6 +111,13 @@ services: - "@wallabag_core.entry_repository" - "@logger" + wallabag_core.rule_based_ignore_origin_processor: + class: Wallabag\CoreBundle\Helper\RuleBasedIgnoreOriginProcessor + arguments: + - "@rulerz" + - "@logger" + - "@wallabag_core.ignore_origin_instance_rule_repository" + # repository as a service wallabag_core.entry_repository: class: Wallabag\CoreBundle\Repository\EntryRepository @@ -164,6 +172,11 @@ services: tags: - { name: rulerz.operator, target: doctrine, operator: notmatches, inline: true } + wallabag.operator.array.pattern_matches: + class: Wallabag\CoreBundle\Operator\PHP\PatternMatches + tags: + - { name: rulerz.operator, target: native, operator: "~" } + wallabag_core.helper.redirect: class: Wallabag\CoreBundle\Helper\Redirect arguments: -- cgit v1.2.3