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\Repository\EntryRepository
;
10 use Wallabag\CoreBundle\Repository\TagRepository
;
11 use Wallabag\UserBundle\Entity\User
;
16 private $tagRepository;
17 private $entryRepository;
20 public function __construct(RulerZ
$rulerz, TagRepository
$tagRepository, EntryRepository
$entryRepository, LoggerInterface
$logger)
22 $this->rulerz
= $rulerz;
23 $this->tagRepository
= $tagRepository;
24 $this->entryRepository
= $entryRepository;
25 $this->logger
= $logger;
29 * Add tags from rules defined by the user.
31 * @param Entry $entry Entry to tag
33 public function tag(Entry
$entry)
35 $rules = $this->getRulesForUser($entry->getUser());
37 foreach ($rules as $rule) {
38 if (!$this->rulerz
->satisfies($entry, $rule->getRule())) {
42 $this->logger
->info('Matching rule.', [
43 'rule' => $rule->getRule(),
44 'tags' => $rule->getTags(),
47 foreach ($rule->getTags() as $label) {
48 $tag = $this->getTag($label);
56 * Apply all the tagging rules defined by a user on its entries.
60 * @return array<Entry> A list of modified entries
62 public function tagAllForUser(User
$user)
64 $rules = $this->getRulesForUser($user);
68 foreach ($rules as $rule) {
69 $qb = $this->entryRepository
->getBuilderForAllByUser($user->getId());
70 $entries = $this->rulerz
->filter($qb, $rule->getRule());
72 foreach ($entries as $entry) {
73 foreach ($rule->getTags() as $label) {
74 // avoid new tag duplicate by manually caching them
75 if (!isset($tagsCache[$label])) {
76 $tagsCache[$label] = $this->getTag($label);
79 $tag = $tagsCache[$label];
92 * @param string $label The tag's label
96 private function getTag($label)
98 $tag = $this->tagRepository
->findOneByLabel($label);
102 $tag->setLabel($label);
109 * Retrieves the tagging rules for a given user.
113 * @return array<TaggingRule>
115 private function getRulesForUser(User
$user)
117 return $user->getConfig()->getTaggingRules();