public addTag ( Wallabag\CoreBundle\Entity\Tag $tag ) | ||
$tag | Wallabag\CoreBundle\Entity\Tag |
/** * 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); } } }
/** * 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); } } }
public function testAssignTagsAlreadyAssigned() { $graby = $this->getMockBuilder('Graby\\Graby')->disableOriginalConstructor()->getMock(); $tagRepo = $this->getTagRepositoryMock(); $proxy = new ContentProxy($graby, $this->getTaggerMock(), $tagRepo, $this->getLogger()); $tagEntity = new Tag(); $tagEntity->setLabel('tag1'); $entry = new Entry(new User()); $entry->addTag($tagEntity); $proxy->assignTagsToEntry($entry, 'tag1, tag2'); $this->assertCount(2, $entry->getTags()); $this->assertEquals('tag1', $entry->getTags()[0]->getLabel()); $this->assertEquals('tag2', $entry->getTags()[1]->getLabel()); }
/** * {@inheritdoc} */ public function load(ObjectManager $manager) { $entry1 = new Entry($this->getReference('admin-user')); $entry1->setUrl('http://0.0.0.0/entry1'); $entry1->setReadingTime(11); $entry1->setDomainName('domain.io'); $entry1->setMimetype('text/html'); $entry1->setTitle('test title entry1'); $entry1->setContent('This is my content /o/'); $entry1->setLanguage('en'); $manager->persist($entry1); $this->addReference('entry1', $entry1); $entry2 = new Entry($this->getReference('admin-user')); $entry2->setUrl('http://0.0.0.0/entry2'); $entry2->setReadingTime(1); $entry2->setDomainName('domain.io'); $entry2->setMimetype('text/html'); $entry2->setTitle('test title entry2'); $entry2->setContent('This is my content /o/'); $entry2->setLanguage('fr'); $manager->persist($entry2); $this->addReference('entry2', $entry2); $entry3 = new Entry($this->getReference('bob-user')); $entry3->setUrl('http://0.0.0.0/entry3'); $entry3->setReadingTime(1); $entry3->setDomainName('domain.io'); $entry3->setMimetype('text/html'); $entry3->setTitle('test title entry3'); $entry3->setContent('This is my content /o/'); $entry3->setLanguage('en'); $entry3->addTag($this->getReference('foo-tag')); $entry3->addTag($this->getReference('bar-tag')); $manager->persist($entry3); $this->addReference('entry3', $entry3); $entry4 = new Entry($this->getReference('admin-user')); $entry4->setUrl('http://0.0.0.0/entry4'); $entry4->setReadingTime(12); $entry4->setDomainName('domain.io'); $entry4->setMimetype('text/html'); $entry4->setTitle('test title entry4'); $entry4->setContent('This is my content /o/'); $entry4->setLanguage('en'); $entry4->addTag($this->getReference('foo-tag')); $entry4->addTag($this->getReference('bar-tag')); $manager->persist($entry4); $this->addReference('entry4', $entry4); $entry5 = new Entry($this->getReference('admin-user')); $entry5->setUrl('http://0.0.0.0/entry5'); $entry5->setReadingTime(12); $entry5->setDomainName('domain.io'); $entry5->setMimetype('text/html'); $entry5->setTitle('test title entry5'); $entry5->setContent('This is my content /o/'); $entry5->setStarred(true); $entry5->setLanguage('fr'); $entry5->setPreviewPicture('http://0.0.0.0/image.jpg'); $manager->persist($entry5); $this->addReference('entry5', $entry5); $entry6 = new Entry($this->getReference('admin-user')); $entry6->setUrl('http://0.0.0.0/entry6'); $entry6->setReadingTime(12); $entry6->setDomainName('domain.io'); $entry6->setMimetype('text/html'); $entry6->setTitle('test title entry6'); $entry6->setContent('This is my content /o/'); $entry6->setArchived(true); $entry6->setLanguage('de'); $manager->persist($entry6); $this->addReference('entry6', $entry6); $manager->flush(); }