public function correctPath() { // set path if ($this->getId() != 1) { // not for the root node if ($this->getParentId() == $this->getId()) { throw new \Exception("ParentID and ID is identical, an element can't be the parent of itself."); } $parent = AbstractObject::getById($this->getParentId()); if ($parent) { // use the parent's path from the database here (getCurrentFullPath), to ensure the path really exists and does not rely on the path // that is currently in the parent object (in memory), because this might have changed but wasn't not saved $this->setPath(str_replace("//", "/", $parent->getCurrentFullPath() . "/")); } else { // parent document doesn't exist anymore, set the parent to to root $this->setParentId(1); $this->setPath("/"); } if (strlen($this->getKey()) < 1) { $this->setKey("---no-valid-key---" . $this->getId()); throw new \Exception("Document requires key, generated key automatically"); } } else { if ($this->getId() == 1) { // some data in root node should always be the same $this->setParentId(0); $this->setPath("/"); $this->setKey(""); $this->setType("folder"); } } if (Service::pathExists($this->getFullPath())) { $duplicate = AbstractObject::getByPath($this->getFullPath()); if ($duplicate instanceof self and $duplicate->getId() != $this->getId()) { throw new \Exception("Duplicate full path [ " . $this->getFullPath() . " ] - cannot save object"); } } if (strlen($this->getFullPath()) > 765) { throw new \Exception("Full path is limited to 765 characters, reduce the length of your parent's path"); } }
public function addFolderAction() { $success = false; $parent = Object::getById($this->getParam("parentId")); if ($parent->isAllowed("create")) { if (!Object\Service::pathExists($parent->getFullPath() . "/" . $this->getParam("key"))) { $folder = Object\Folder::create(array("o_parentId" => $this->getParam("parentId"), "o_creationDate" => time(), "o_userOwner" => $this->user->getId(), "o_userModification" => $this->user->getId(), "o_key" => $this->getParam("key"), "o_published" => true)); $folder->setCreationDate(time()); $folder->setUserOwner($this->getUser()->getId()); $folder->setUserModification($this->getUser()->getId()); try { $folder->save(); $success = true; } catch (\Exception $e) { $this->_helper->json(array("success" => false, "message" => $e->getMessage())); } } } else { \Logger::debug("prevented creating object id because of missing permissions"); } $this->_helper->json(array("success" => $success)); }
/** * @static * @param $type * @param $path * @return bool */ public static function pathExists($path, $type = null) { if ($type == "asset") { return Asset\Service::pathExists($path); } else { if ($type == "document") { return Document\Service::pathExists($path); } else { if ($type == "object") { return Object\Service::pathExists($path); } } } return; }