/**
  * 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();
 }