diff --git a/php/classes/SharedObjectMgrAbstract.php b/php/classes/SharedObjectMgrAbstract.php index db28afa..af562b4 100644 --- a/php/classes/SharedObjectMgrAbstract.php +++ b/php/classes/SharedObjectMgrAbstract.php @@ -80,6 +80,19 @@ abstract class SharedObjectMgrAbstract { return array('success' => TRUE, 'object_id' => $newId); } + + public function createFolder($folder_name) { + $folder_path = $this->getFolderDirPath($folder_name); + if (is_dir($folder_path)) { + return FALSE; + } + + mkdir($folder_path); + chgrp($folder_path, APACHE_USER); + chmod($folder_path, 0775); + + return is_dir($folder_path); + } public function getRootDirPath() { return SHAREDPATH . "/" . $this->rootdirname; @@ -158,4 +171,4 @@ abstract class SharedObjectMgrAbstract { } } -?> \ No newline at end of file +?> diff --git a/php/classes/SharedObjectTreeFile.php b/php/classes/SharedObjectTreeFile.php index 6cfe115..113df44 100644 --- a/php/classes/SharedObjectTreeFile.php +++ b/php/classes/SharedObjectTreeFile.php @@ -50,9 +50,32 @@ class SharedObjectTreeFile { $objectNode->setAttribute($key, $value); } } - + $this->doc->save($this->getFilePath()); //Remove obsolete folders and objects + $folders = $this->getFolders($object_type); + foreach ($folders as $folder) { + $folderNode = $this->getObjectFolderNode($object_type, $folder["name"]); + if (!isset($folderNode)) { + continue; + } + if (!array_key_exists($folder["name"], $objects)) { + $folderNode->parentNode->removeChild($folderNode); + } + else { + $objectNodes = $folderNode->getElementsByTagName($object_type); + $to_remove = array(); + foreach ($objectNodes as $objectNode) { + $idAtt = $objectNode->getAttribute('xml:id'); + if (!in_array($idAtt, $objects[$folder["name"]])) { + $to_remove[] = $objectNode; + } + } + foreach ($to_remove as $node) { + $folderNode->removeChild($node); + } + } + } $this->doc->save($this->getFilePath()); diff --git a/php/classes/SharedObjectsMgr.php b/php/classes/SharedObjectsMgr.php index 526a72b..a5158e9 100644 --- a/php/classes/SharedObjectsMgr.php +++ b/php/classes/SharedObjectsMgr.php @@ -57,6 +57,18 @@ class SharedObjectsMgr { return $this->treeFile->getFolders($object_type); } + + public function createFolder($object_type, $folder_name) { + if (!array_key_exists($object_type, $this->sharedObjectsMgr) || !isset($this->sharedObjectsMgr[$object_type])) { + return array('success' => FALSE, 'message' => 'Unknown type'); + } + + if (!$this->sharedObjectsMgr[$object_type]->createFolder($folder_name)) { + return array('success' => FALSE, 'message' => 'Cannot create folder '.$folder_name); + } + + return $this->updateTree(); + } public function isNameAlreadyUsed($object_type, $name) { if (!array_key_exists($object_type, $this->sharedObjectsMgr) || !isset($this->sharedObjectsMgr[$object_type])) @@ -96,4 +108,4 @@ class SharedObjectsMgr { } } -?> \ No newline at end of file +?> -- libgit2 0.21.2