/** * Return an creation form for requested folder. * @param Symfony\Component\HttpFoundation\Request $request * * @return Symfony\Component\HttpFoundation\Response */ public function addAction(Request $request, $parentFolderId = null) { $this->validateAccessForRole('ROLE_ACCESS_DOCUMENTS'); $folder = new Folder(); if (null !== $parentFolderId) { $parentFolder = $this->getService('em')->find('RZ\\Roadiz\\Core\\Entities\\Folder', (int) $parentFolderId); if (null !== $parentFolder) { $folder->setParent($parentFolder); } } $form = $this->createForm(new FolderType(), $folder, ['em' => $this->getService('em')]); $form->handleRequest($request); if ($form->isValid()) { try { $this->getService('em')->persist($folder); $this->getService('em')->flush(); $msg = $this->getTranslator()->trans('folder.%name%.created', ['%name%' => $folder->getName()]); $this->publishConfirmMessage($request, $msg); } catch (\RuntimeException $e) { $this->publishErrorMessage($request, $e->getMessage()); } return $this->redirect($this->generateUrl('foldersHomePage')); } $this->assignation['form'] = $form->createView(); return $this->render('folders/add.html.twig', $this->assignation); }
/** * Find a folder according to the given path or create it. * * @param string $folderPath * * @return RZ\Roadiz\Core\Entities\Folder */ public function findOrCreateByPath($folderPath) { $folderPath = trim($folderPath); $folders = explode('/', $folderPath); $folders = array_filter($folders); $folderName = $folders[count($folders) - 1]; $parentFolder = null; if (count($folders) > 1) { $parentName = $folders[count($folders) - 2]; $parentFolder = $this->_em->getRepository('RZ\\Roadiz\\Core\\Entities\\Folder')->findOneByName($parentName); } $folder = $this->_em->getRepository('RZ\\Roadiz\\Core\\Entities\\Folder')->findOneByName($folderName); if (null === $folder) { /* * Creation of a new folder * before linking it to the node */ $folder = new Folder(); $folder->setName($folderName); if (null !== $parentFolder) { $folder->setParent($parentFolder); } $this->_em->persist($folder); $this->_em->flush(); } return $folder; }
/** * @param array $parameters * @param Folder $folder */ protected function updatePosition($parameters, Folder $folder) { /* * First, we set the new parent */ $parent = null; if (!empty($parameters['newParent']) && $parameters['newParent'] > 0) { $parent = $this->getService('em')->find('RZ\\Roadiz\\Core\\Entities\\Folder', (int) $parameters['newParent']); if ($parent !== null) { $folder->setParent($parent); } } else { $folder->setParent(null); } /* * Then compute new position */ if (!empty($parameters['nextFolderId']) && $parameters['nextFolderId'] > 0) { $nextFolder = $this->getService('em')->find('RZ\\Roadiz\\Core\\Entities\\Folder', (int) $parameters['nextFolderId']); if ($nextFolder !== null) { $folder->setPosition($nextFolder->getPosition() - 0.5); } } elseif (!empty($parameters['prevFolderId']) && $parameters['prevFolderId'] > 0) { $prevFolder = $this->getService('em')->find('RZ\\Roadiz\\Core\\Entities\\Folder', (int) $parameters['prevFolderId']); if ($prevFolder !== null) { $folder->setPosition($prevFolder->getPosition() + 0.5); } } // Apply position update before cleaning $this->getService('em')->flush(); if ($parent !== null) { $parent->getHandler()->cleanChildrenPositions(); } else { FolderHandler::cleanRootFoldersPositions(); } }