/** * 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(); } }
/** * Build delete folder form with name constraint. * @param RZ\Roadiz\Core\Entities\Folder $folder * * @return \Symfony\Component\Form\Form */ protected function buildDeleteForm(Folder $folder) { $builder = $this->createFormBuilder()->add('folder_id', 'hidden', ['data' => $folder->getId()]); return $builder->getForm(); }