1
0
Fork 0
mirror of https://github.com/wallabag/wallabag.git synced 2025-07-17 17:08:37 +00:00

Move Tags assigner to a separate file

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
Thomas Citharel 2017-05-27 22:08:14 +02:00
parent 35941d57ee
commit 6bc6fb1f60
20 changed files with 274 additions and 200 deletions

View file

@ -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);

View file

@ -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()
);

View file

@ -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.

View file

@ -0,0 +1,76 @@
<?php
namespace Wallabag\CoreBundle\Helper;
use Wallabag\CoreBundle\Entity\Entry;
use Wallabag\CoreBundle\Entity\Tag;
use Wallabag\CoreBundle\Repository\TagRepository;
class TagsAssigner
{
/**
* @var TagRepository $tagRepository
*/
protected $tagRepository;
public function __construct(TagRepository $tagRepository)
{
$this->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;
}
}

View file

@ -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:

View file

@ -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;
}

View file

@ -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']
);

View file

@ -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()

View file

@ -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()

View file

@ -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()

View file

@ -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" ]]