3 namespace Wallabag\CoreBundle\Helper
;
5 use Psr\Log\LoggerInterface
;
7 use Wallabag\CoreBundle\Entity\Entry
;
8 use Wallabag\CoreBundle\Entity\Tag
;
9 use Wallabag\CoreBundle\Entity\TaggingRule
;
10 use Wallabag\CoreBundle\Repository\EntryRepository
;
11 use Wallabag\CoreBundle\Repository\TagRepository
;
12 use Wallabag\UserBundle\Entity\User
;
17 private $tagRepository;
18 private $entryRepository;
21 public function __construct(RulerZ
$rulerz, TagRepository
$tagRepository, EntryRepository
$entryRepository, LoggerInterface
$logger)
23 $this->rulerz
= $rulerz;
24 $this->tagRepository
= $tagRepository;
25 $this->entryRepository
= $entryRepository;
26 $this->logger
= $logger;
30 * Add tags from rules defined by the user.
32 * @param Entry $entry Entry to tag
34 public function tag(Entry
$entry)
36 $rules = $this->getRulesForUser($entry->getUser());
38 foreach ($rules as $rule) {
39 if (!$this->rulerz
->satisfies($entry, $rule->getRule())) {
43 $this->logger
->info('Matching rule.', [
44 'rule' => $rule->getRule(),
45 'tags' => $rule->getTags(),
48 foreach ($rule->getTags() as $label) {
49 $tag = $this->getTag($label);
57 * Apply all the tagging rules defined by a user on its entries.
59 * @return array<Entry> A list of modified entries
61 public function tagAllForUser(User
$user)
63 $rules = $this->getRulesForUser($user);
67 foreach ($rules as $rule) {
68 $qb = $this->entryRepository
->getBuilderForAllByUser($user->getId());
69 $entries = $this->rulerz
->filter($qb, $rule->getRule());
71 foreach ($entries as $entry) {
72 foreach ($rule->getTags() as $label) {
73 // avoid new tag duplicate by manually caching them
74 if (!isset($tagsCache[$label])) {
75 $tagsCache[$label] = $this->getTag($label);
78 $tag = $tagsCache[$label];
91 * @param string $label The tag's label
95 private function getTag($label)
97 $tag = $this->tagRepository
->findOneByLabel($label);
101 $tag->setLabel($label);
108 * Retrieves the tagging rules for a given user.
110 * @return array<TaggingRule>
112 private function getRulesForUser(User
$user)
114 return $user->getConfig()->getTaggingRules();