1
0
Fork 0
mirror of https://github.com/wallabag/wallabag.git synced 2025-09-15 18:57:05 +00:00

Use scheduled entity insertions to avoid tag duplicate

Using `getScheduledEntityInsertions()` we can retrieve not yet flushed but already persisted entities and then avoid tags duplication on import.
This commit is contained in:
Jeremy Benoist 2016-09-25 11:26:15 +02:00
parent faa86e06ba
commit 401135852c
No known key found for this signature in database
GPG key ID: BCA73962457ACC3C
7 changed files with 89 additions and 7 deletions

View file

@ -96,13 +96,24 @@ class ContentProxy
*
* @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)
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 +122,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

View file

@ -227,7 +227,8 @@ class PocketImport extends AbstractImport
if (isset($importedEntry['tags']) && !empty($importedEntry['tags'])) {
$this->contentProxy->assignTagsToEntry(
$entry,
array_keys($importedEntry['tags'])
array_keys($importedEntry['tags']),
$this->em->getUnitOfWork()->getScheduledEntityInsertions()
);
}

View file

@ -111,7 +111,8 @@ abstract class WallabagImport extends AbstractImport
if (array_key_exists('tags', $data)) {
$this->contentProxy->assignTagsToEntry(
$entry,
$data['tags']
$data['tags'],
$this->em->getUnitOfWork()->getScheduledEntityInsertions()
);
}