コード例 #1
0
 protected function makeTagRec($data)
 {
     $tag = new Tag();
     $tag->setTagName($data['tag_name']);
     $tag->setVisible($data['visible']);
     $tag->setLocked($data['locked']);
     foreach ($data["tag_translation"] as $source) {
         $trans = new Translation();
         $trans->setLocale($source['translation']);
         $trans->setName(Translation::$availableLocales[$source['translation']]);
         $tagSource = new TagTranslation($tag, $trans);
         $tagSource->setName($source["title"]);
         $tagSource->setDescription($source["description"]);
         $tag->getTranslatedTags()->add($tagSource);
     }
     foreach ($data['children'] as $child) {
         $tmp = $this->makeTagRec($child);
         $tag->addChild($tmp);
     }
     return $tag;
 }
コード例 #2
0
ファイル: TagsController.php プロジェクト: justinpocta/roadiz
 /**
  * Return an edition form for current translated tag.
  *
  * @param Symfony\Component\HttpFoundation\Request $request
  * @param integer                                  $tagId
  * @param integer | null                           $translationId
  *
  * @return Symfony\Component\HttpFoundation\Response
  */
 public function editTranslatedAction(Request $request, $tagId, $translationId = null)
 {
     $this->validateAccessForRole('ROLE_ACCESS_TAGS');
     if (null === $translationId) {
         $translation = $this->getService('em')->getRepository('RZ\\Roadiz\\Core\\Entities\\Translation')->findDefault();
     } else {
         $translation = $this->getService('em')->find('RZ\\Roadiz\\Core\\Entities\\Translation', (int) $translationId);
     }
     if (null !== $translation) {
         /*
          * Here we need to directly select tagTranslation
          * if not doctrine will grab a cache tag because of TagTreeWidget
          * that is initialized before calling route method.
          */
         $gtag = $this->getService('em')->find('RZ\\Roadiz\\Core\\Entities\\Tag', (int) $tagId);
         $tt = $this->getService('em')->getRepository('RZ\\Roadiz\\Core\\Entities\\TagTranslation')->findOneBy(['translation' => $translation, 'tag' => $gtag]);
         if (null !== $tt) {
             /*
              * Tag is already translated
              */
             $tag = $tt->getTag();
             $this->assignation['tag'] = $tag;
             $this->assignation['translatedTag'] = $tt;
             $this->assignation['translation'] = $translation;
             $this->assignation['available_translations'] = $this->getService('em')->getRepository('RZ\\Roadiz\\Core\\Entities\\Translation')->findAllAvailable();
             $form = $this->createForm(new TagTranslationType(), $tt, ['em' => $this->getService('em')]);
             $form->handleRequest($request);
             if ($form->isValid()) {
                 $this->getService('em')->flush();
                 /*
                  * Dispatch event
                  */
                 $event = new FilterTagEvent($tag);
                 $this->getService('dispatcher')->dispatch(TagEvents::TAG_UPDATED, $event);
                 $msg = $this->getTranslator()->trans('tag.%name%.updated', ['%name%' => $tag->getTranslatedTags()->first()->getName()]);
                 $this->publishConfirmMessage($request, $msg);
                 /*
                  * Force redirect to avoid resending form when refreshing page
                  */
                 return $this->redirect($this->generateUrl('tagsEditTranslatedPage', ['tagId' => $tag->getId(), 'translationId' => $translation->getId()]));
             }
             $this->assignation['form'] = $form->createView();
         } else {
             /*
              * If translation does not exist, we created it.
              */
             $this->getService('em')->refresh($gtag);
             if ($gtag !== null) {
                 $baseTranslation = $gtag->getTranslatedTags()->first();
                 $translatedTag = new TagTranslation($gtag, $translation);
                 if (false !== $baseTranslation) {
                     $translatedTag->setName($baseTranslation->getName());
                 } else {
                     $translatedTag->setName('tag_' . $gtag->getId());
                 }
                 $this->getService('em')->persist($translatedTag);
                 $this->getService('em')->flush();
                 /*
                  * Dispatch event
                  */
                 $event = new FilterTagEvent($gtag);
                 $this->getService('dispatcher')->dispatch(TagEvents::TAG_UPDATED, $event);
                 return $this->redirect($this->generateUrl('tagsEditTranslatedPage', ['tagId' => $gtag->getId(), 'translationId' => $translation->getId()]));
             } else {
                 return $this->throw404();
             }
         }
         return $this->render('tags/edit.html.twig', $this->assignation);
     } else {
         return $this->throw404();
     }
 }
コード例 #3
0
ファイル: TagRepository.php プロジェクト: QuangDang212/roadiz
 /**
  * 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;
 }