3 namespace Wallabag\CoreBundle\Helper
;
6 use Wallabag\CoreBundle\Entity\Entry
;
7 use Wallabag\CoreBundle\Entity\Tag
;
8 use Wallabag\CoreBundle\Repository\EntryRepository
;
9 use Wallabag\CoreBundle\Repository\TagRepository
;
10 use Wallabag\UserBundle\Entity\User
;
15 private $tagRepository;
16 private $entryRepository;
18 public function __construct(RulerZ
$rulerz, TagRepository
$tagRepository, EntryRepository
$entryRepository)
20 $this->rulerz
= $rulerz;
21 $this->tagRepository
= $tagRepository;
22 $this->entryRepository
= $entryRepository;
26 * Add tags from rules defined by the user.
28 * @param Entry $entry Entry to tag.
30 public function tag(Entry
$entry)
32 $rules = $this->getRulesForUser($entry->getUser());
34 foreach ($rules as $rule) {
35 if (!$this->rulerz
->satisfies($entry, $rule->getRule())) {
39 foreach ($rule->getTags() as $label) {
40 $tag = $this->getTag($label);
48 * Apply all the tagging rules defined by a user on its entries.
52 * @return array<Entry> A list of modified entries.
54 public function tagAllForUser(User
$user)
56 $rules = $this->getRulesForUser($user);
59 foreach ($rules as $rule) {
60 $qb = $this->entryRepository
->getBuilderForAllByUser($user->getId());
61 $entries = $this->rulerz
->filter($qb, $rule->getRule());
63 foreach ($entries as $entry) {
64 foreach ($rule->getTags() as $label) {
65 $tag = $this->getTag($label);
78 * @param string $label The tag's label.
82 private function getTag($label)
84 $tag = $this->tagRepository
->findOneByLabel($label);
88 $tag->setLabel($label);
95 * Retrieves the tagging rules for a given user.
99 * @return array<TaggingRule>
101 private function getRulesForUser(User
$user)
103 return $user->getConfig()->getTaggingRules();