/** * Retrieve all tags for an entry. * * @ApiDoc( * requirements={ * {"name"="entry", "dataType"="integer", "requirement"="\w+", "description"="The entry ID"} * } * ) * * @return JsonResponse */ public function getEntriesTagsAction(Entry $entry) { $this->validateAuthentication(); $this->validateUserAccess($entry->getUser()->getId()); $json = $this->get('serializer')->serialize($entry->getTags(), 'json'); return (new JsonResponse())->setJson($json); }
/** * 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); } } }