X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=src%2FWallabag%2FCoreBundle%2FHelper%2FContentProxy.php;h=ba90b7310af83fd13774a1d87b38fb8fb241736a;hb=abc329453be6381bcf4d1b0dfd9f698312ed3b16;hp=7fb41393127c8bcdaab1a11511a988e93bb6cb16;hpb=da3d4998c0972557952c83b610f8f45fdcd31b72;p=github%2Fwallabag%2Fwallabag.git diff --git a/src/Wallabag/CoreBundle/Helper/ContentProxy.php b/src/Wallabag/CoreBundle/Helper/ContentProxy.php index 7fb41393..ba90b731 100644 --- a/src/Wallabag/CoreBundle/Helper/ContentProxy.php +++ b/src/Wallabag/CoreBundle/Helper/ContentProxy.php @@ -3,8 +3,11 @@ namespace Wallabag\CoreBundle\Helper; use Graby\Graby; +use Psr\Log\LoggerInterface as Logger; use Wallabag\CoreBundle\Entity\Entry; +use Wallabag\CoreBundle\Entity\Tag; use Wallabag\CoreBundle\Tools\Utils; +use Wallabag\CoreBundle\Repository\TagRepository; /** * This kind of proxy class take care of getting the content from an url @@ -13,10 +16,16 @@ use Wallabag\CoreBundle\Tools\Utils; class ContentProxy { protected $graby; + protected $tagger; + protected $logger; + protected $tagRepository; - public function __construct(Graby $graby) + public function __construct(Graby $graby, RuleBasedTagger $tagger, TagRepository $tagRepository, Logger $logger) { $this->graby = $graby; + $this->tagger = $tagger; + $this->logger = $logger; + $this->tagRepository = $tagRepository; } /** @@ -59,6 +68,49 @@ class ContentProxy $entry->setPreviewPicture($content['open_graph']['og_image']); } + try { + $this->tagger->tag($entry); + } catch (\Exception $e) { + $this->logger->error('Error while trying to automatically tag an entry.', array( + 'entry_url' => $url, + 'error_msg' => $e->getMessage(), + )); + } + return $entry; } + + /** + * Assign some tags to an entry. + * + * @param Entry $entry + * @param array|string $tags An array of tag or a string coma separated of tag + */ + public function assignTagsToEntry(Entry $entry, $tags) + { + if (!is_array($tags)) { + $tags = explode(',', $tags); + } + + foreach ($tags as $label) { + $label = trim($label); + + // avoid empty tag + if (0 === strlen($label)) { + continue; + } + + $tagEntity = $this->tagRepository->findOneByLabel($label); + + if (is_null($tagEntity)) { + $tagEntity = new Tag(); + $tagEntity->setLabel($label); + } + + // only add the tag on the entry if the relation doesn't exist + if (false === $entry->getTags()->contains($tagEntity)) { + $entry->addTag($tagEntity); + } + } + } }