public function correctPath() { // set path if ($this->getId() != 1) { // not for the root node if (!Element\Service::isValidKey($this->getKey(), "object")) { throw new \Exception("invalid key for object with id [ " . $this->getId() . " ] key is: [" . $this->getKey() . "]"); } 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) { throw new \Exception("Document requires key, generated key automatically"); } } elseif ($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->getRealFullPath())) { $duplicate = AbstractObject::getByPath($this->getRealFullPath()); if ($duplicate instanceof self and $duplicate->getId() != $this->getId()) { throw new \Exception("Duplicate full path [ " . $this->getRealFullPath() . " ] - cannot save object"); } } if (strlen($this->getRealFullPath()) > 765) { throw new \Exception("Full path is limited to 765 characters, reduce the length of your parent's path"); } }
/** * @throws \Exception */ public function correctPath() { // set path if ($this->getId() != 1) { // not for the root node if (!Element\Service::isValidKey($this->getKey(), "asset")) { throw new \Exception("invalid filename '" . $this->getKey() . "' for asset with id [ " . $this->getId() . " ]"); } if ($this->getParentId() == $this->getId()) { throw new \Exception("ParentID and ID is identical, an element can't be the parent of itself."); } if ($this->getFilename() === '..' || $this->getFilename() === '.') { throw new \Exception('Cannot create asset called ".." or "."'); } $parent = Asset::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("/"); } } elseif ($this->getId() == 1) { // some data in root node should always be the same $this->setParentId(0); $this->setPath("/"); $this->setFilename(""); $this->setType("folder"); } // do not allow PHP and .htaccess files if (preg_match("@\\.ph(p[345]?|t|tml|ps)\$@i", $this->getFilename()) || $this->getFilename() == ".htaccess") { $this->setFilename($this->getFilename() . ".txt"); } if (Asset\Service::pathExists($this->getRealFullPath())) { $duplicate = Asset::getByPath($this->getRealFullPath()); if ($duplicate instanceof Asset and $duplicate->getId() != $this->getId()) { throw new \Exception("Duplicate full path [ " . $this->getRealFullPath() . " ] - cannot save asset"); } } if (strlen($this->getRealFullPath()) > 765) { throw new \Exception("Full path is limited to 765 characters, reduce the length of your parent's path"); } }