X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=src%2FWallabag%2FCoreBundle%2FHelper%2FContentProxy.php;h=bbd5db5d1f1bed84a2c103035f49114a3857ad5e;hb=8d7b4f0eff9d07f8d6d354e09fd926abf26aa4ce;hp=5dd684f2dcc410b9d9a5d3fc2902607c2f43e526;hpb=f2e5fdc3666a2a6525b4202ab48df05efeebaf5c;p=github%2Fwallabag%2Fwallabag.git diff --git a/src/Wallabag/CoreBundle/Helper/ContentProxy.php b/src/Wallabag/CoreBundle/Helper/ContentProxy.php index 5dd684f2..bbd5db5d 100644 --- a/src/Wallabag/CoreBundle/Helper/ContentProxy.php +++ b/src/Wallabag/CoreBundle/Helper/ContentProxy.php @@ -8,6 +8,7 @@ use Wallabag\CoreBundle\Entity\Entry; use Wallabag\CoreBundle\Entity\Tag; use Wallabag\CoreBundle\Tools\Utils; use Wallabag\CoreBundle\Repository\TagRepository; +use Symfony\Component\HttpFoundation\File\MimeType\MimeTypeExtensionGuesser; /** * This kind of proxy class take care of getting the content from an url @@ -19,6 +20,7 @@ class ContentProxy protected $tagger; protected $logger; protected $tagRepository; + protected $mimeGuesser; public function __construct(Graby $graby, RuleBasedTagger $tagger, TagRepository $tagRepository, Logger $logger) { @@ -26,6 +28,7 @@ class ContentProxy $this->tagger = $tagger; $this->logger = $logger; $this->tagRepository = $tagRepository; + $this->mimeGuesser = new MimeTypeExtensionGuesser(); } /** @@ -79,6 +82,11 @@ class ContentProxy $entry->setPreviewPicture($content['open_graph']['og_image']); } + // if content is an image define as a preview too + if (in_array($this->mimeGuesser->guess($content['content_type']), ['jpeg', 'jpg', 'gif', 'png'], true)) { + $entry->setPreviewPicture($content['url']); + } + try { $this->tagger->tag($entry); } catch (\Exception $e) { @@ -95,14 +103,24 @@ class ContentProxy * Assign some tags to an entry. * * @param Entry $entry - * @param array|string $tags An array of tag or a string coma separated of tag + * @param array|string $tags An array of tag or a string coma separated of tag + * @param array $entitiesReady Entities from the EntityManager which are persisted but not yet flushed + * It is mostly to fix duplicate tag on import @see http://stackoverflow.com/a/7879164/569101 */ - public function assignTagsToEntry(Entry $entry, $tags) + public function assignTagsToEntry(Entry $entry, $tags, array $entitiesReady = []) { if (!is_array($tags)) { $tags = explode(',', $tags); } + // keeps only Tag entity from the "not yet flushed entities" + $tagsNotYetFlushed = []; + foreach ($entitiesReady as $entity) { + if ($entity instanceof Tag) { + $tagsNotYetFlushed[$entity->getLabel()] = $entity; + } + } + foreach ($tags as $label) { $label = trim($label); @@ -111,11 +129,15 @@ class ContentProxy continue; } - $tagEntity = $this->tagRepository->findOneByLabel($label); + if (isset($tagsNotYetFlushed[$label])) { + $tagEntity = $tagsNotYetFlushed[$label]; + } else { + $tagEntity = $this->tagRepository->findOneByLabel($label); - if (is_null($tagEntity)) { - $tagEntity = new Tag(); - $tagEntity->setLabel($label); + if (is_null($tagEntity)) { + $tagEntity = new Tag(); + $tagEntity->setLabel($label); + } } // only add the tag on the entry if the relation doesn't exist