public function addChildAction(Request $request, $parentTagId) { $this->validateAccessForRole('ROLE_ACCESS_TAGS'); $translation = $this->getService('defaultTranslation'); $parentTag = $this->getService('em')->find('RZ\\Roadiz\\Core\\Entities\\Tag', (int) $parentTagId); if (null !== $parentTag) { $form = $this->buildAddForm(); $form->handleRequest($request); if ($form->isValid()) { $data = $form->getData(); $names = explode(',', $data['names']); foreach ($names as $name) { $name = strip_tags(trim($name)); $tag = new Tag(); $tag->setTagName($name); $tag->setParent($parentTag); $this->getService('em')->persist($tag); $translatedTag = new TagTranslation($tag, $translation); $this->getService('em')->persist($translatedTag); $this->getService('em')->flush(); /* * Dispatch event */ $event = new FilterTagEvent($tag); $this->getService('dispatcher')->dispatch(TagEvents::TAG_CREATED, $event); $msg = $this->getTranslator()->trans('child.tag.%name%.created', ['%name%' => $tag->getTagName()]); $this->publishConfirmMessage($request, $msg); } return $this->redirect($this->generateUrl('tagsTreePage', ['tagId' => $parentTagId])); } $this->assignation['translation'] = $translation; $this->assignation['form'] = $form->createView(); $this->assignation['tag'] = $parentTag; return $this->render('tags/add-multiple.html.twig', $this->assignation); } else { return $this->throw404(); } }
/** * @param array $parameters * @param Tag $tag */ protected function updatePosition($parameters, Tag $tag) { /* * First, we set the new parent */ $parent = null; if (!empty($parameters['newParent']) && $parameters['newParent'] > 0) { $parent = $this->getService('em')->find('RZ\\Roadiz\\Core\\Entities\\Tag', (int) $parameters['newParent']); if ($parent !== null) { $tag->setParent($parent); } } else { $tag->setParent(null); } /* * Then compute new position */ if (!empty($parameters['nextTagId']) && $parameters['nextTagId'] > 0) { $nextTag = $this->getService('em')->find('RZ\\Roadiz\\Core\\Entities\\Tag', (int) $parameters['nextTagId']); if ($nextTag !== null) { $tag->setPosition($nextTag->getPosition() - 0.5); } } elseif (!empty($parameters['prevTagId']) && $parameters['prevTagId'] > 0) { $prevTag = $this->getService('em')->find('RZ\\Roadiz\\Core\\Entities\\Tag', (int) $parameters['prevTagId']); if ($prevTag !== null) { $tag->setPosition($prevTag->getPosition() + 0.5); } } // Apply position update before cleaning $this->getService('em')->flush(); if ($parent !== null) { $parent->getHandler()->cleanChildrenPositions(); } else { TagHandler::cleanRootTagsPositions(); } /* * Dispatch event */ $event = new FilterTagEvent($tag); $this->getService('dispatcher')->dispatch(TagEvents::TAG_UPDATED, $event); }
/** * Handle tag creation pages. * * @param Symfony\Component\HttpFoundation\Request $request * @param int $tagId * @param int $translationId * * @return Symfony\Component\HttpFoundation\Response */ public function addChildAction(Request $request, $tagId, $translationId = null) { $this->validateAccessForRole('ROLE_ACCESS_TAGS'); $translation = $this->getService('em')->getRepository('RZ\\Roadiz\\Core\\Entities\\Translation')->findDefault(); if ($translationId !== null) { $translation = $this->getService('em')->find('RZ\\Roadiz\\Core\\Entities\\Translation', (int) $translationId); } $parentTag = $this->getService('em')->find('RZ\\Roadiz\\Core\\Entities\\Tag', (int) $tagId); $tag = new Tag(); $tag->setParent($parentTag); if ($translation !== null && $parentTag !== null) { $form = $this->createForm(new TagType(), $tag, ['em' => $this->getService('em')]); $form->handleRequest($request); if ($form->isValid()) { try { $this->getService('em')->persist($tag); $this->getService('em')->flush(); $translatedTag = new TagTranslation($tag, $translation); $this->getService('em')->persist($translatedTag); $this->getService('em')->flush(); /* * Dispatch event */ $event = new FilterTagEvent($tag); $this->getService('dispatcher')->dispatch(TagEvents::TAG_CREATED, $event); $msg = $this->getTranslator()->trans('child.tag.%name%.created', ['%name%' => $tag->getTagName()]); $this->publishConfirmMessage($request, $msg); return $this->redirect($this->generateUrl('tagsEditPage', ['tagId' => $tag->getId()])); } catch (EntityAlreadyExistsException $e) { $this->publishErrorMessage($request, $e->getMessage()); return $this->redirect($this->generateUrl('tagsAddChildPage', ['tagId' => $tagId, 'translationId' => $translationId])); } } $this->assignation['translation'] = $translation; $this->assignation['form'] = $form->createView(); $this->assignation['parentTag'] = $parentTag; return $this->render('tags/add.html.twig', $this->assignation); } else { return $this->throw404(); } }
/** * Find a tag according to the given path or create it. * * @param string $tagPath * * @return RZ\Roadiz\Core\Entities\Tag */ public function findOrCreateByPath($tagPath) { $tagPath = trim($tagPath); $tags = explode('/', $tagPath); $tags = array_filter($tags); $tagName = $tags[count($tags) - 1]; $parentName = null; $parentTag = null; if (count($tags) > 1) { $parentName = $tags[count($tags) - 2]; $parentTag = $this->findOneByTagName($parentName); if (null === $parentTag) { $ttagParent = $this->_em->getRepository('RZ\\Roadiz\\Core\\Entities\\TagTranslation')->findOneByName($parentName); if (null !== $ttagParent) { $parentTag = $ttagParent->getTag(); } } } $tag = $this->findOneByTagName($tagName); if (null === $tag) { $ttag = $this->_em->getRepository('RZ\\Roadiz\\Core\\Entities\\TagTranslation')->findOneByName($tagName); if (null !== $ttag) { $tag = $ttag->getTag(); } } if (null === $tag) { /* * Creation of a new tag * before linking it to the node */ $trans = $this->_em->getRepository('RZ\\Roadiz\\Core\\Entities\\Translation')->findDefault(); $tag = new Tag(); $tag->setTagName($tagName); $translatedTag = new TagTranslation($tag, $trans); $translatedTag->setName($tagName); $tag->getTranslatedTags()->add($translatedTag); if (null !== $parentTag) { $tag->setParent($parentTag); } $this->_em->persist($translatedTag); $this->_em->persist($tag); $this->_em->flush(); } return $tag; }