diff --git a/lib/api/ktcmis/objecttypes/CMISFolderObject.inc.php b/lib/api/ktcmis/objecttypes/CMISFolderObject.inc.php index 51861dd..d97f53a 100644 --- a/lib/api/ktcmis/objecttypes/CMISFolderObject.inc.php +++ b/lib/api/ktcmis/objecttypes/CMISFolderObject.inc.php @@ -72,19 +72,22 @@ class CMISFolderObject extends CMISObject { if (!is_null($folderId)) { - $this->get($folderId); + try { + $this->get($folderId); + } + catch (exception $e) { + throw new ObjectNotFoundException($e->getMessage()); + } } } private function get($folderId) { $object = $this->ktapi->get_folder_by_id((int)$folderId); - - // error? - if (PEAR::isError($object)) - { - // throw an exception? - return $object; + + // folder does not exist? + if (PEAR::isError($object)) { + throw new ObjectNotFoundException('The folder you are trying to access does not exist or is inaccessible'); } // static $allowedChildObjectTypeIds; diff --git a/webservice/atompub/cmis/KT_cmis_atom_server.services.inc.php b/webservice/atompub/cmis/KT_cmis_atom_server.services.inc.php index 81b18ee..6b81c69 100644 --- a/webservice/atompub/cmis/KT_cmis_atom_server.services.inc.php +++ b/webservice/atompub/cmis/KT_cmis_atom_server.services.inc.php @@ -60,9 +60,10 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service { $repositoryId = $repositories[0]['repositoryId']; // TODO implement full path/node separation as with Alfresco - i.e. path requests come in on path/ and node requests come in on node/ - // path request e.g.: Root Folder/DroppedDocuments - // node request e.g.: F1/children - // node request e.g.: F2 + // path request e.g.: path/Root Folder/DroppedDocuments + // node request e.g.: node/F1/children + // node request e.g.: node/F2/parent + // node request e.g.: node/F2 if (urldecode($this->params[0]) == 'Root Folder') { $folderId = CMISUtil::encodeObjectId('Folder', 1); @@ -87,6 +88,26 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service { $folderName = $response['properties']['Name']['value']; } + // NOTE parent changes to parents in later specification + // TODO update when updating to later specification + else if ($this->params[1] == 'parent') + { + // abstract this to be used also by the document service (and the PWC service?) ??? + // alternatively use getFolderParent here makes sense and use getObjectParents when document service? + $folderId = $this->params[0]; + $NavigationService = new NavigationService(KT_cmis_atom_service_helper::getKt()); + $response = $NavigationService->getFolderParent($repositoryId, $folderId, false, false, false); + + if (PEAR::isError($response)) { + $feed = KT_cmis_atom_service_helper::getErrorFeed($this, KT_cmis_atom_service::STATUS_SERVER_ERROR, $response->getMessage()); + $this->responseFeed = $feed; + return null; + } + + // we know that a folder will only have one parent, so we can assume element 0 + $folderId = $response[0]['properties']['ObjectId']['value']; + $folderName = $response[0]['properties']['Name']['value']; + } else { $folderId = $this->params[0]; } diff --git a/webservice/atompub/cmis/KT_cmis_atom_service_helper.inc.php b/webservice/atompub/cmis/KT_cmis_atom_service_helper.inc.php index 078e5fc..cf964c6 100644 --- a/webservice/atompub/cmis/KT_cmis_atom_service_helper.inc.php +++ b/webservice/atompub/cmis/KT_cmis_atom_service_helper.inc.php @@ -97,7 +97,8 @@ class KT_cmis_atom_service_helper { // links $link = $response->newElement('link'); $link->appendChild($response->newAttr('rel', 'self')); - $link->appendChild($response->newAttr('href', CMIS_APP_BASE_URI . $workspace . '/' . (!$pwc ? $type : 'pwc') . '/' . $cmisEntry['properties']['ObjectId']['value'])); + $link->appendChild($response->newAttr('href', CMIS_APP_BASE_URI . $workspace . '/' . (!$pwc ? $type : 'pwc') . '/' + . $cmisEntry['properties']['ObjectId']['value'])); $entry->appendChild($link); $link = $response->newElement('link');