/** * Добавить эементы структуры для * указанного родителя и местоположения * @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); } } }
/** * @param Menu $object */ protected function fixObjectProperties($object) { if ($object->getState()) { $object->setState(true); } if ($object->isTest()) { $object->setIsTest(true); } if ($object->getProxyTitle()) { $object->setProxyTitle(true); } if ($object->getProxyLink()) { $object->setProxyLink(true); } $object->setPosition((int) $object->getPosition()); }