Example #1
0
 public function getLocalePath(Locale $locale, Request $request)
 {
     $arrPath = explode('/', ltrim($request->getPathInfo(), '/'));
     if (in_array($arrPath[0], $this->manager->getAllAliases())) {
         unset($arrPath[0]);
     }
     $resultUrl = '/' . implode('/', $arrPath);
     if (!$this->manager->getIgnoreDefaultLocaleFlag() || $locale->getAlias() != $this->manager->getDefaultLocaleAlias()) {
         $resultUrl = '/' . $locale->getAlias() . $resultUrl;
     }
     return $resultUrl;
 }
 public function postSubmit(FormEvent $event)
 {
     $object = $event->getData();
     /** @var TranslationRepository $repository */
     $repository = $this->em->getRepository('Gedmo\\Translatable\\Entity\\Translation');
     $translations = $repository->findTranslations($object);
     $fileMappingsFields = array_keys($this->getFileMappings($object));
     foreach ($this->newData as $locale => $localeData) {
         foreach ($localeData as $field => $value) {
             if (in_array($field, $fileMappingsFields)) {
                 $value = $this->processFileUpload($value, $field, $locale, $object);
                 if ($this->localeManager->getDefaultLocaleAlias() == $locale && is_array($value)) {
                     $object->{'set' . ucfirst($field)}($value);
                 }
                 if (empty($value['fileName'])) {
                     $value = false;
                 }
             }
             if ($value !== false) {
                 $repository->translate($object, $field, $locale, $value);
             } else {
                 if (array_key_exists($locale, $translations) && array_key_exists($field, $translations[$locale])) {
                     $repository->createQueryBuilder('t')->where('t.field = :field')->andWhere('t.locale = :locale')->andWhere('t.objectClass = :class')->andWhere('t.foreignKey = :foreignKey')->setParameters(['class' => get_class($object), 'field' => $field, 'locale' => $locale, 'foreignKey' => $object->getId()])->delete()->getQuery()->execute();
                 }
             }
         }
     }
 }
Example #3
0
 /**
  * Добавить эементы структуры для
  * указанного родителя и местоположения
  * @param Structure[] $structureTree
  * @param Menu $menuParent
  * @param string $location
  */
 protected function addMenuTree($structureTree, $menuParent, $location)
 {
     $menuRepository = $this->entityManager->getRepository('OctavaMenuBundle:Menu');
     /** @var Menu[] $menuChildren */
     $menuChildren = $menuRepository->getByParentIdAndLocation($menuParent ? $menuParent->getId() : 0, $location);
     $existStructureIds = [];
     foreach ($menuChildren as $menuItem) {
         if ($menuItem->getStructure()) {
             $structureId = $menuItem->getStructure()->getId();
             $existStructureIds[$structureId] = $structureId;
         }
     }
     $structureParentId = $menuParent && $menuParent->getStructure() ? $menuParent->getStructure()->getId() : null;
     $structureAddElements = [];
     /** @var Structure $structureItem */
     foreach ($structureTree as $structureItem) {
         $currentParentId = $structureItem->getParent() && $structureItem->getParent()->getId() ? $structureItem->getParent()->getId() : null;
         if ($currentParentId == $structureParentId && !isset($existStructureIds[$structureItem->getId()])) {
             $structureAddElements[] = $structureItem;
         }
     }
     if (count($structureAddElements)) {
         $translationRepository = $this->entityManager->getRepository('Gedmo\\Translatable\\Entity\\Translation');
         foreach ($structureAddElements as $structureItem) {
             /** @var Structure $structureItem */
             $menu = new Menu();
             $menu->setState(true);
             $menu->setLocation($location);
             $menu->setStructure($structureItem);
             $menu->setTitle($structureItem->getTitle());
             $menu->setLink($structureItem->getPreparedPath());
             if ($menuParent) {
                 $menu->setParent($menuParent);
             }
             $this->entityManager->persist($menu);
             $structureTranslations = $translationRepository->findTranslations($structureItem);
             foreach ($this->localeManager->getAllAliases() as $localeAlias) {
                 if (!isset($structureTranslations[$localeAlias])) {
                     continue;
                 }
                 $translation = $structureTranslations[$localeAlias];
                 $path = empty($translation['path']) ? $structureItem->getPath() : $translation['path'];
                 $title = empty($translation['title']) ? $structureItem->getTitle() : $translation['title'];
                 $translationRepository->translate($menu, 'title', $localeAlias, $title);
                 $translationRepository->translate($menu, 'proxyTitle', $localeAlias, true);
                 $translationRepository->translate($menu, 'link', $localeAlias, $structureItem->getType() == Structure::TYPE_STRUCTURE_EMPTY ? '' : $path);
                 $translationRepository->translate($menu, 'proxyLink', $localeAlias, true);
             }
             $menuChildren[] = $menu;
             $this->updatedItems[] = $menu;
         }
         $this->entityManager->flush();
     }
     foreach ($menuChildren as $value) {
         if ($value->getStructure()) {
             $this->addMenuTree($structureTree, $value, $location);
         }
     }
 }
Example #4
0
 /**
  * Закончить задание содержания мультиязычной
  * вкладки и передать результат в мапер формы
  * @desc Метод повторяет поведение класса FormMapper
  * @return FormMapper
  */
 public function end()
 {
     $eventSubscriber = new AddTranslationFieldSubscriber($this->em, $this->localeManager, $this->mappingFactory, $this->fileStorage);
     $this->formMapper->getFormBuilder()->addEventSubscriber($eventSubscriber);
     $firstTab = true;
     $locales = $this->localeManager->getActiveList();
     $administrator = $this->getTokenStorage()->getToken()->getUser();
     if ($administrator instanceof Administrator) {
         usort($locales, [$administrator, 'sortLocales']);
     }
     foreach ($locales as $localeData) {
         $tabName = $localeData->getName();
         if (strlen($this->tabName) > 0) {
             $tabName = str_replace('%locale_name%', $localeData->getName(), $this->tabName);
         }
         $tabOptions = [];
         if ($this->isDisabledByAdministratorLocales($localeData->getAlias())) {
             $tabOptions = ['class' => 'disabled'];
         }
         $this->formMapper->with($tabName, $tabOptions);
         foreach ($this->fields as $fieldData) {
             if (!$firstTab && (!isset($fieldData['options']['translatable']) || !$fieldData['options']['translatable'])) {
                 continue;
             }
             $fieldName = $fieldData['name'];
             if (isset($fieldData['options']['translatable'])) {
                 if ($fieldData['options']['translatable']) {
                     $fieldName = 'translation___' . $fieldData['name'] . '___' . $localeData->getAlias();
                     $fieldData['options']['mapped'] = false;
                     if (isset($fieldData['options']['locale'])) {
                         $fieldData['options']['locale'] = $localeData->getAlias();
                     }
                     $fieldData['options']['disabled'] = $this->isDisabled($localeData->getAlias(), $fieldData['options']);
                     if ($localeData->getAlias() != $this->localeManager->getDefaultLocaleAlias()) {
                         //убираем обязательность полей для языков
                         $fieldData['options']['required'] = false;
                         if (!empty($fieldData['options']['inner_constraints'])) {
                             foreach ($fieldData['options']['inner_constraints'] as $key => $value) {
                                 if ($value instanceof FileNotBlank) {
                                     unset($fieldData['options']['inner_constraints'][$key]);
                                 }
                             }
                         }
                     }
                 }
                 unset($fieldData['options']['translatable']);
             }
             $this->formMapper->add($fieldName, $fieldData['type'], $fieldData['options'], $fieldData['fieldDescriptionOptions']);
         }
         $this->formMapper->end();
         $firstTab = false;
     }
     return $this->formMapper;
 }
Example #5
0
 public function __construct($defaultLocale, LocaleManager $localeManager, LocaleResolverInterface $localeResolver)
 {
     parent::__construct($defaultLocale, $localeManager->getAllAliases(), $localeResolver);
 }