]> git.immae.eu Git - github/wallabag/wallabag.git/commitdiff
Add TaggingRule entity
authorKévin Gomez <contact@kevingomez.fr>
Sun, 11 Oct 2015 15:14:50 +0000 (17:14 +0200)
committerKévin Gomez <contact@kevingomez.fr>
Wed, 11 Nov 2015 15:23:49 +0000 (16:23 +0100)
src/Wallabag/CoreBundle/Entity/Config.php
src/Wallabag/CoreBundle/Entity/TaggingRule.php [new file with mode: 0644]
src/Wallabag/CoreBundle/Helper/RuleBasedTagger.php

index b2a1915a4fdbd22f921e5ecae5212da9ff922d46..496fadb45a98069999b24936d16ce92b04bb400e 100644 (file)
@@ -76,12 +76,18 @@ class Config
      */
     private $user;
 
+    /**
+     * @ORM\OneToMany(targetEntity="Wallabag\CoreBundle\Entity\TaggingRule", mappedBy="config", cascade={"remove"})
+     */
+    private $taggingRules;
+
     /*
      * @param User     $user
      */
     public function __construct(\Wallabag\UserBundle\Entity\User $user)
     {
         $this->user = $user;
+        $this->taggingRules = new ArrayCollection();
     }
 
     /**
@@ -237,4 +243,24 @@ class Config
     {
         return $this->rssLimit;
     }
+
+    /**
+     * @param TaggingRule $rule
+     *
+     * @return Config
+     */
+    public function addTaggingRule(TaggingRule $rule)
+    {
+        $this->taggingRules[] = $rule;
+
+        return $this;
+    }
+
+    /**
+     * @return ArrayCollection<TaggingRule>
+     */
+    public function getTaggingRules()
+    {
+        return $this->taggingRules;
+    }
 }
diff --git a/src/Wallabag/CoreBundle/Entity/TaggingRule.php b/src/Wallabag/CoreBundle/Entity/TaggingRule.php
new file mode 100644 (file)
index 0000000..6d03a34
--- /dev/null
@@ -0,0 +1,128 @@
+<?php
+
+namespace Wallabag\CoreBundle\Entity;
+
+use Doctrine\ORM\Mapping as ORM;
+use Symfony\Component\Validator\Constraints as Assert;
+
+/**
+ * Config.
+ *
+ * @ORM\Entity(repositoryClass="Wallabag\CoreBundle\Repository\TaggingRuleRepository")
+ * @ORM\Table
+ * @ORM\Entity
+ */
+class TaggingRule
+{
+    /**
+     * @var int
+     *
+     * @ORM\Column(name="id", type="integer")
+     * @ORM\Id
+     * @ORM\GeneratedValue(strategy="AUTO")
+     */
+    private $id;
+
+    /**
+     * @var string
+     *
+     * @Assert\NotBlank()
+     * @ORM\Column(name="rule", type="string", nullable=false)
+     */
+    private $rule;
+
+    /**
+     * @var array
+     *
+     * @Assert\NotBlank()
+     * @ORM\Column(name="tags", type="simple_array", nullable=false)
+     */
+    private $tags = [];
+
+    /**
+     * @ORM\ManyToOne(targetEntity="Wallabag\CoreBundle\Entity\Config", inversedBy="taggingRules")
+     */
+    private $config;
+
+    /**
+     * Get id.
+     *
+     * @return int
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+
+    /**
+     * Set rule.
+     *
+     * @param string $rule
+     *
+     * @return TaggingRule
+     */
+    public function setRule($rule)
+    {
+        $this->rule = $rule;
+
+        return $this;
+    }
+
+    /**
+     * Get rule.
+     *
+     * @return string
+     */
+    public function getRule()
+    {
+        return $this->rule;
+    }
+
+    /**
+     * Set tags.
+     *
+     * @param array<string> $tags
+     *
+     * @return TaggingRule
+     */
+    public function setTags(array $tags)
+    {
+        $this->tags = $tags;
+
+        return $this;
+    }
+
+    /**
+     * Get tags.
+     *
+     * @return array<string>
+     */
+    public function getTags()
+    {
+        return $this->tags;
+    }
+
+    /**
+     * Set config.
+     *
+     * @param Config $config
+     *
+     * @return TaggingRule
+     */
+    public function setConfig(Config $config)
+    {
+        $this->config = $config;
+
+        return $this;
+    }
+
+    /**
+     * Get config.
+     *
+     * @return Config
+     */
+    public function getConfig()
+    {
+        return $this->config;
+    }
+}
index 012450b6924844fa99e0ec83f82ecd3f421e8596..bb93377970b7ca6187ad4d9326b0f715a09562f6 100644 (file)
@@ -30,11 +30,11 @@ class RuleBasedTagger
         $rules = $this->getRulesForUser($entry->getUser());
 
         foreach ($rules as $rule) {
-            if (!$this->rulerz->satisfies($entry, $rule['rule'])) {
+            if (!$this->rulerz->satisfies($entry, $rule->getRule())) {
                 continue;
             }
 
-            foreach ($rule['tags'] as $label) {
+            foreach ($rule->getTags() as $label) {
                 $tag = $this->getTag($entry->getUser(), $label);
 
                 $entry->addTag($tag);
@@ -62,21 +62,15 @@ class RuleBasedTagger
         return $tag;
     }
 
+    /**
+     * Retrieves the tagging rules for a given user.
+     *
+     * @param User $user
+     *
+     * @return array<TaggingRule>
+     */
     private function getRulesForUser(User $user)
     {
-        return [
-            [
-                'rule' => 'domainName = "github.com"',
-                'tags' => ['github'],
-            ],
-            [
-                'rule' => 'readingTime >= 15',
-                'tags' => ['long reading'],
-            ],
-            [
-                'rule' => 'readingTime <= 3 ',
-                'tags' => ['short reading'],
-            ],
-        ];
+        return $user->getConfig()->getTaggingRules();
     }
 }