From 6bc6fb1f60e7b81a21f844dca025671a2f4a4564 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Sat, 27 May 2017 22:08:14 +0200 Subject: Move Tags assigner to a separate file Signed-off-by: Thomas Citharel --- .../ApiBundle/Controller/EntryRestController.php | 8 +-- .../CoreBundle/Controller/TagController.php | 2 +- src/Wallabag/CoreBundle/Helper/ContentProxy.php | 56 +--------------- src/Wallabag/CoreBundle/Helper/TagsAssigner.php | 76 ++++++++++++++++++++++ .../CoreBundle/Resources/config/services.yml | 6 +- .../ImportBundle/Import/AbstractImport.php | 5 +- src/Wallabag/ImportBundle/Import/BrowserImport.php | 2 +- .../ImportBundle/Import/PinboardImport.php | 2 +- src/Wallabag/ImportBundle/Import/PocketImport.php | 2 +- .../ImportBundle/Import/WallabagImport.php | 2 +- .../ImportBundle/Resources/config/services.yml | 8 +++ 11 files changed, 105 insertions(+), 64 deletions(-) create mode 100644 src/Wallabag/CoreBundle/Helper/TagsAssigner.php (limited to 'src/Wallabag') diff --git a/src/Wallabag/ApiBundle/Controller/EntryRestController.php b/src/Wallabag/ApiBundle/Controller/EntryRestController.php index 4801811d..31bb67fd 100644 --- a/src/Wallabag/ApiBundle/Controller/EntryRestController.php +++ b/src/Wallabag/ApiBundle/Controller/EntryRestController.php @@ -318,7 +318,7 @@ class EntryRestController extends WallabagRestController $tags = $request->request->get('tags', ''); if (!empty($tags)) { - $this->get('wallabag_core.content_proxy')->assignTagsToEntry($entry, $tags); + $this->get('wallabag_core.tags_assigner')->assignTagsToEntry($entry, $tags); } if (!is_null($isStarred)) { @@ -379,7 +379,7 @@ class EntryRestController extends WallabagRestController $tags = $request->request->get('tags', ''); if (!empty($tags)) { - $this->get('wallabag_core.content_proxy')->assignTagsToEntry($entry, $tags); + $this->get('wallabag_core.tags_assigner')->assignTagsToEntry($entry, $tags); } $em = $this->getDoctrine()->getManager(); @@ -497,7 +497,7 @@ class EntryRestController extends WallabagRestController $tags = $request->request->get('tags', ''); if (!empty($tags)) { - $this->get('wallabag_core.content_proxy')->assignTagsToEntry($entry, $tags); + $this->get('wallabag_core.tags_assigner')->assignTagsToEntry($entry, $tags); } $em = $this->getDoctrine()->getManager(); @@ -626,7 +626,7 @@ class EntryRestController extends WallabagRestController $tags = $element->tags; if (false !== $entry && !(empty($tags))) { - $this->get('wallabag_core.content_proxy')->assignTagsToEntry($entry, $tags); + $this->get('wallabag_core.tags_assigner')->assignTagsToEntry($entry, $tags); $em = $this->getDoctrine()->getManager(); $em->persist($entry); diff --git a/src/Wallabag/CoreBundle/Controller/TagController.php b/src/Wallabag/CoreBundle/Controller/TagController.php index 8a093289..fb6a720b 100644 --- a/src/Wallabag/CoreBundle/Controller/TagController.php +++ b/src/Wallabag/CoreBundle/Controller/TagController.php @@ -28,7 +28,7 @@ class TagController extends Controller $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { - $this->get('wallabag_core.content_proxy')->assignTagsToEntry( + $this->get('wallabag_core.tags_assigner')->assignTagsToEntry( $entry, $form->get('label')->getData() ); diff --git a/src/Wallabag/CoreBundle/Helper/ContentProxy.php b/src/Wallabag/CoreBundle/Helper/ContentProxy.php index 9a08db3d..076135c7 100644 --- a/src/Wallabag/CoreBundle/Helper/ContentProxy.php +++ b/src/Wallabag/CoreBundle/Helper/ContentProxy.php @@ -4,10 +4,9 @@ namespace Wallabag\CoreBundle\Helper; use Graby\Graby; use Psr\Log\LoggerInterface; +use Symfony\Component\EventDispatcher\EventDispatcher; 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; /** @@ -19,16 +18,15 @@ class ContentProxy protected $graby; protected $tagger; protected $logger; - protected $tagRepository; protected $mimeGuesser; protected $fetchingErrorMessage; + protected $eventDispatcher; - public function __construct(Graby $graby, RuleBasedTagger $tagger, TagRepository $tagRepository, LoggerInterface $logger, $fetchingErrorMessage) + public function __construct(Graby $graby, RuleBasedTagger $tagger, LoggerInterface $logger, $fetchingErrorMessage) { $this->graby = $graby; $this->tagger = $tagger; $this->logger = $logger; - $this->tagRepository = $tagRepository; $this->mimeGuesser = new MimeTypeExtensionGuesser(); $this->fetchingErrorMessage = $fetchingErrorMessage; } @@ -121,54 +119,6 @@ class ContentProxy 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 - * @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, 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); - - // avoid empty tag - if (0 === strlen($label)) { - continue; - } - - if (isset($tagsNotYetFlushed[$label])) { - $tagEntity = $tagsNotYetFlushed[$label]; - } else { - $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); - } - } - } - /** * Validate that the given content as enough value to be used * instead of fetch the content from the url. diff --git a/src/Wallabag/CoreBundle/Helper/TagsAssigner.php b/src/Wallabag/CoreBundle/Helper/TagsAssigner.php new file mode 100644 index 00000000..ae712d77 --- /dev/null +++ b/src/Wallabag/CoreBundle/Helper/TagsAssigner.php @@ -0,0 +1,76 @@ +tagRepository = $tagRepository; + } + + /** + * 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 $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 + * + * @return Tag[] + */ + public function assignTagsToEntry(Entry $entry, $tags, array $entitiesReady = []) + { + $tagsEntities = []; + + 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); + + // avoid empty tag + if (0 === strlen($label)) { + continue; + } + + if (isset($tagsNotYetFlushed[$label])) { + $tagEntity = $tagsNotYetFlushed[$label]; + } else { + $tagEntity = $this->tagRepository->findOneByLabel($label); + + if (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); + $tagsEntities[] = $tagEntity; + } + } + + return $tagsEntities; + } +} diff --git a/src/Wallabag/CoreBundle/Resources/config/services.yml b/src/Wallabag/CoreBundle/Resources/config/services.yml index a9134ac3..a68b2fdc 100644 --- a/src/Wallabag/CoreBundle/Resources/config/services.yml +++ b/src/Wallabag/CoreBundle/Resources/config/services.yml @@ -89,10 +89,14 @@ services: arguments: - "@wallabag_core.graby" - "@wallabag_core.rule_based_tagger" - - "@wallabag_core.tag_repository" - "@logger" - '%wallabag_core.fetching_error_message%' + wallabag_core.tags_assigner: + class: Wallabag\CoreBundle\Helper\TagsAssigner + arguments: + - "@wallabag_core.tag_repository" + wallabag_core.rule_based_tagger: class: Wallabag\CoreBundle\Helper\RuleBasedTagger arguments: diff --git a/src/Wallabag/ImportBundle/Import/AbstractImport.php b/src/Wallabag/ImportBundle/Import/AbstractImport.php index 1d4a6e27..a61388c0 100644 --- a/src/Wallabag/ImportBundle/Import/AbstractImport.php +++ b/src/Wallabag/ImportBundle/Import/AbstractImport.php @@ -8,6 +8,7 @@ use Doctrine\ORM\EntityManager; use Wallabag\CoreBundle\Helper\ContentProxy; use Wallabag\CoreBundle\Entity\Entry; use Wallabag\CoreBundle\Entity\Tag; +use Wallabag\CoreBundle\Helper\TagsAssigner; use Wallabag\UserBundle\Entity\User; use OldSound\RabbitMqBundle\RabbitMq\ProducerInterface; use Symfony\Component\EventDispatcher\EventDispatcherInterface; @@ -18,6 +19,7 @@ abstract class AbstractImport implements ImportInterface protected $em; protected $logger; protected $contentProxy; + protected $tagsAssigner; protected $eventDispatcher; protected $producer; protected $user; @@ -26,11 +28,12 @@ abstract class AbstractImport implements ImportInterface protected $importedEntries = 0; protected $queuedEntries = 0; - public function __construct(EntityManager $em, ContentProxy $contentProxy, EventDispatcherInterface $eventDispatcher) + public function __construct(EntityManager $em, ContentProxy $contentProxy, TagsAssigner $tagsAssigner, EventDispatcherInterface $eventDispatcher) { $this->em = $em; $this->logger = new NullLogger(); $this->contentProxy = $contentProxy; + $this->tagsAssigner = $tagsAssigner; $this->eventDispatcher = $eventDispatcher; } diff --git a/src/Wallabag/ImportBundle/Import/BrowserImport.php b/src/Wallabag/ImportBundle/Import/BrowserImport.php index 8bf7d92e..c8a9b4e6 100644 --- a/src/Wallabag/ImportBundle/Import/BrowserImport.php +++ b/src/Wallabag/ImportBundle/Import/BrowserImport.php @@ -205,7 +205,7 @@ abstract class BrowserImport extends AbstractImport $entry = $this->fetchContent($entry, $data['url'], $data); if (array_key_exists('tags', $data)) { - $this->contentProxy->assignTagsToEntry( + $this->tagsAssigner->assignTagsToEntry( $entry, $data['tags'] ); diff --git a/src/Wallabag/ImportBundle/Import/PinboardImport.php b/src/Wallabag/ImportBundle/Import/PinboardImport.php index d9865534..489b9257 100644 --- a/src/Wallabag/ImportBundle/Import/PinboardImport.php +++ b/src/Wallabag/ImportBundle/Import/PinboardImport.php @@ -112,7 +112,7 @@ class PinboardImport extends AbstractImport $entry = $this->fetchContent($entry, $data['url'], $data); if (!empty($data['tags'])) { - $this->contentProxy->assignTagsToEntry( + $this->tagsAssigner->assignTagsToEntry( $entry, $data['tags'], $this->em->getUnitOfWork()->getScheduledEntityInsertions() diff --git a/src/Wallabag/ImportBundle/Import/PocketImport.php b/src/Wallabag/ImportBundle/Import/PocketImport.php index 33093480..1171d452 100644 --- a/src/Wallabag/ImportBundle/Import/PocketImport.php +++ b/src/Wallabag/ImportBundle/Import/PocketImport.php @@ -216,7 +216,7 @@ class PocketImport extends AbstractImport } if (isset($importedEntry['tags']) && !empty($importedEntry['tags'])) { - $this->contentProxy->assignTagsToEntry( + $this->tagsAssigner->assignTagsToEntry( $entry, array_keys($importedEntry['tags']), $this->em->getUnitOfWork()->getScheduledEntityInsertions() diff --git a/src/Wallabag/ImportBundle/Import/WallabagImport.php b/src/Wallabag/ImportBundle/Import/WallabagImport.php index 702da057..0e5382cf 100644 --- a/src/Wallabag/ImportBundle/Import/WallabagImport.php +++ b/src/Wallabag/ImportBundle/Import/WallabagImport.php @@ -111,7 +111,7 @@ abstract class WallabagImport extends AbstractImport $entry = $this->fetchContent($entry, $data['url'], $data); if (array_key_exists('tags', $data)) { - $this->contentProxy->assignTagsToEntry( + $this->tagsAssigner->assignTagsToEntry( $entry, $data['tags'], $this->em->getUnitOfWork()->getScheduledEntityInsertions() diff --git a/src/Wallabag/ImportBundle/Resources/config/services.yml b/src/Wallabag/ImportBundle/Resources/config/services.yml index c4fe3f92..661dc7e1 100644 --- a/src/Wallabag/ImportBundle/Resources/config/services.yml +++ b/src/Wallabag/ImportBundle/Resources/config/services.yml @@ -20,6 +20,7 @@ services: arguments: - "@doctrine.orm.entity_manager" - "@wallabag_core.content_proxy" + - "@wallabag_core.tags_assigner" - "@event_dispatcher" calls: - [ setClient, [ "@wallabag_import.pocket.client" ] ] @@ -32,6 +33,7 @@ services: arguments: - "@doctrine.orm.entity_manager" - "@wallabag_core.content_proxy" + - "@wallabag_core.tags_assigner" - "@event_dispatcher" calls: - [ setLogger, [ "@logger" ]] @@ -43,6 +45,7 @@ services: arguments: - "@doctrine.orm.entity_manager" - "@wallabag_core.content_proxy" + - "@wallabag_core.tags_assigner" - "@event_dispatcher" calls: - [ setLogger, [ "@logger" ]] @@ -54,6 +57,7 @@ services: arguments: - "@doctrine.orm.entity_manager" - "@wallabag_core.content_proxy" + - "@wallabag_core.tags_assigner" - "@event_dispatcher" calls: - [ setLogger, [ "@logger" ]] @@ -65,6 +69,7 @@ services: arguments: - "@doctrine.orm.entity_manager" - "@wallabag_core.content_proxy" + - "@wallabag_core.tags_assigner" - "@event_dispatcher" calls: - [ setLogger, [ "@logger" ]] @@ -76,6 +81,7 @@ services: arguments: - "@doctrine.orm.entity_manager" - "@wallabag_core.content_proxy" + - "@wallabag_core.tags_assigner" - "@event_dispatcher" calls: - [ setLogger, [ "@logger" ]] @@ -87,6 +93,7 @@ services: arguments: - "@doctrine.orm.entity_manager" - "@wallabag_core.content_proxy" + - "@wallabag_core.tags_assigner" - "@event_dispatcher" calls: - [ setLogger, [ "@logger" ]] @@ -97,6 +104,7 @@ services: arguments: - "@doctrine.orm.entity_manager" - "@wallabag_core.content_proxy" + - "@wallabag_core.tags_assigner" - "@event_dispatcher" calls: - [ setLogger, [ "@logger" ]] -- cgit v1.2.3