public function saveAction() { if ($this->_getParam("id")) { $folder = Document_Folder::getById($this->_getParam("id")); $folder->setModificationDate(time()); $folder->setUserModification($this->getUser()->getId()); if ($folder->isAllowed("publish")) { $this->setValuesToDocument($folder); $folder->save(); $this->_helper->json(array("success" => true)); } } $this->_helper->json(false); }
public function getChilds() { if ($this->childs === null) { $childs = parent::getChilds(); $hardLink = $this->getHardLinkSource(); if ($hardLink->getChildsFromSource() && $hardLink->getSourceDocument() && !Pimcore::inAdmin()) { foreach ($childs as &$c) { $c = Document_Hardlink_Service::wrap($c); $c->setHardLinkSource($hardLink); $c->setPath(preg_replace("@^" . preg_quote($hardLink->getSourceDocument()->getFullpath()) . "@", $hardLink->getFullpath(), $c->getPath())); } } $this->setChilds($childs); } return $this->childs; }
public function addAction() { $success = false; // check for permission $parentDocument = Document::getById(intval($this->_getParam("parentId"))); if ($parentDocument->isAllowed("create")) { $intendedPath = $parentDocument->getFullPath() . "/" . $this->_getParam("key"); if (!Document_Service::pathExists($intendedPath)) { $createValues = array("userOwner" => $this->getUser()->getId(), "userModification" => $this->getUser()->getId(), "published" => false); $createValues["key"] = $this->_getParam("key"); // check for a docType if ($this->_getParam("docTypeId") && is_numeric($this->_getParam("docTypeId"))) { $docType = Document_DocType::getById(intval($this->_getParam("docTypeId"))); $createValues["template"] = $docType->getTemplate(); $createValues["controller"] = $docType->getController(); $createValues["action"] = $docType->getAction(); $createValues["module"] = $docType->getModule(); } else { if ($this->_getParam("type") == "page" || $this->_getParam("type") == "snippet" || $this->_getParam("type") == "email") { $createValues["controller"] = Pimcore_Config::getSystemConfig()->documents->default_controller; $createValues["action"] = Pimcore_Config::getSystemConfig()->documents->default_action; } } switch ($this->_getParam("type")) { case "page": $document = Document_Page::create($this->_getParam("parentId"), $createValues); $success = true; break; case "snippet": $document = Document_Snippet::create($this->_getParam("parentId"), $createValues); $success = true; break; case "email": //ckogler $document = Document_Email::create($this->_getParam("parentId"), $createValues); $success = true; break; case "link": $document = Document_Link::create($this->_getParam("parentId"), $createValues); $success = true; break; case "hardlink": $document = Document_Hardlink::create($this->_getParam("parentId"), $createValues); $success = true; break; case "folder": $document = Document_Folder::create($this->_getParam("parentId"), $createValues); $document->setPublished(true); try { $document->save(); $success = true; } catch (Exception $e) { $this->_helper->json(array("success" => false, "message" => $e->getMessage())); } break; default: Logger::debug("Unknown document type, can't add [ " . $this->_getParam("type") . " ] "); break; } } else { Logger::debug("prevented adding a document because document with same path+key [ {$intendedPath} ] already exists"); } } else { Logger::debug("prevented adding a document because of missing permissions"); } if ($success) { $this->_helper->json(array("success" => $success, "id" => $document->getId(), "type" => $document->getType())); } else { $this->_helper->json(array("success" => $success)); } }
/** * change general user permissions * @depends testModifyUserToAdmin * @var User $user */ public function testPermissionChanges() { $userGroup = User::getByName("unitTestUserGroup"); $username = $userGroup->getUsername(); $userGroup->setAdmin(false); $userGroup->save(); unset($userGroup); $userGroup = User::getByName($username); //test if admin is allowed all $permissionList = new User_Permission_Definition_List(); $permissionList->load(); $permissions = $permissionList->getDefinitions(); $setPermissions = array(); //gradually set all system permissions foreach ($permissions as $permission) { $userGroup->setPermission($permission->getKey()); $setPermissions[] = $permission->getKey(); $userGroup->save(); unset($userGroup); $userGroup = User::getByName($username); foreach ($setPermissions as $p) { $this->assertTrue($userGroup->isAllowed($p)); } } //remove system permissions $userGroup->setAllAclToFalse(); foreach ($setPermissions as $p) { $this->assertFalse($userGroup->isAllowed($p)); } //cannot list documents, assts, objects because no permissions by now $documentRoot = Document::getById(1); $documentRoot->getPermissionsForUser($userGroup); $this->assertFalse($documentRoot->isAllowed("list")); $objectRoot = Object_Abstract::getById(1); $objectRoot->getPermissionsForUser($userGroup); $this->assertFalse($objectRoot->isAllowed("list")); $assetRoot = Asset::getById(1); $assetRoot->getPermissionsForUser($userGroup); $this->assertFalse($assetRoot->isAllowed("list")); $objectFolder = new Object_Folder(); $objectFolder->setParentId(1); $objectFolder->setUserOwner(1); $objectFolder->setUserModification(1); $objectFolder->setCreationDate(time()); $objectFolder->setKey(uniqid() . rand(10, 99)); $objectFolder->save(); $documentFolder = Document_Folder::create(1, array("userOwner" => 1, "key" => uniqid() . rand(10, 99))); $assetFolder = Asset_Folder::create(1, array("filename" => uniqid() . "_data", "type" => "folder", "userOwner" => 1)); $user = User::getByName("unitTestUser"); $user->setAdmin(false); $user->save(); $userGroup->setPermission("objects"); $userGroup->setPermission("documents"); $userGroup->setPermission("assets"); $userGroup->save(); //test permissions with user group and user $this->permissionTest($objectRoot, $objectFolder, $userGroup, $user, $user, "object"); $this->permissionTest($assetRoot, $assetFolder, $userGroup, $user, $user, "asset"); $this->permissionTest($documentRoot, $documentFolder, $userGroup, $user, $user, "document"); //test permissions when there is no user group permissions $user = User::create(array("parentId" => 0, "username" => "unitTestUser2", "password" => md5("unitTestUser2"), "hasCredentials" => true, "active" => true)); unset($user); $user = User::getByName("unitTestUser2"); $user->setPermission("objects"); $user->setPermission("documents"); $user->setPermission("assets"); $user->save(); $this->assertTrue($user instanceof User and $user->getUsername() == "unitTestUser2"); $this->permissionTest($objectRoot, $objectFolder, null, $user, $user, "object"); $this->permissionTest($assetRoot, $assetFolder, null, $user, $user, "asset"); $this->permissionTest($documentRoot, $documentFolder, null, $user, $user, "document"); //test permissions when there is only user group permissions $user = User::create(array("parentId" => $userGroup->getId(), "username" => "unitTestUser3", "password" => md5("unitTestUser3"), "hasCredentials" => true, "active" => true)); unset($user); $user = User::getByName("unitTestUser3"); $this->assertTrue($user instanceof User and $user->getUsername() == "unitTestUser3"); $this->permissionTest($objectRoot, $objectFolder, $userGroup, null, $user, "object"); $this->permissionTest($assetRoot, $assetFolder, $userGroup, null, $user, "asset"); $this->permissionTest($documentRoot, $documentFolder, $userGroup, null, $user, "document"); }
/** * makes sure, that the creation of assets with duplicate paths is not possible * @expectedException Exception * @depends testDocumentFolderCreate */ public function testDuplicateDocumentPath() { $createValues = array("userOwner" => 1, "userModification" => 1, "key" => uniqid()); Document_Folder::create(1, $createValues); Document_Folder::create(1, $createValues); }