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.
61 * @return array<Entry> A list of modified entries
63 public function tagAllForUser(User
$user)
65 $rules = $this->getRulesForUser($user);
69 foreach ($rules as $rule) {
70 $qb = $this->entryRepository
->getBuilderForAllByUser($user->getId());
71 $entries = $this->rulerz
->filter($qb, $rule->getRule());
73 foreach ($entries as $entry) {
74 foreach ($rule->getTags() as $label) {
75 // avoid new tag duplicate by manually caching them
76 if (!isset($tagsCache[$label])) {
77 $tagsCache[$label] = $this->getTag($label);
80 $tag = $tagsCache[$label];
93 * @param string $label The tag's label
97 private function getTag($label)
99 $tag = $this->tagRepository
->findOneByLabel($label);
103 $tag->setLabel($label);
110 * Retrieves the tagging rules for a given user.
114 * @return array<TaggingRule>
116 private function getRulesForUser(User
$user)
118 return $user->getConfig()->getTaggingRules();