Commit 5c7d6464e6eb0acd224e03dfbec4c4bf6952bf45

Authored by Paul Barrett
1 parent c5c0f6f2

Implemented return for CMIS folder parent request

Story ID:1434265. CMIS patch contributions

Committed by: Paul Barrett
lib/api/ktcmis/objecttypes/CMISFolderObject.inc.php
... ... @@ -72,19 +72,22 @@ class CMISFolderObject extends CMISObject {
72 72  
73 73 if (!is_null($folderId))
74 74 {
75   - $this->get($folderId);
  75 + try {
  76 + $this->get($folderId);
  77 + }
  78 + catch (exception $e) {
  79 + throw new ObjectNotFoundException($e->getMessage());
  80 + }
76 81 }
77 82 }
78 83  
79 84 private function get($folderId)
80 85 {
81 86 $object = $this->ktapi->get_folder_by_id((int)$folderId);
82   -
83   - // error?
84   - if (PEAR::isError($object))
85   - {
86   - // throw an exception?
87   - return $object;
  87 +
  88 + // folder does not exist?
  89 + if (PEAR::isError($object)) {
  90 + throw new ObjectNotFoundException('The folder you are trying to access does not exist or is inaccessible');
88 91 }
89 92  
90 93 // static $allowedChildObjectTypeIds;
... ...
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 {
60 60 $repositoryId = $repositories[0]['repositoryId'];
61 61  
62 62 // TODO implement full path/node separation as with Alfresco - i.e. path requests come in on path/ and node requests come in on node/
63   - // path request e.g.: Root Folder/DroppedDocuments
64   - // node request e.g.: F1/children
65   - // node request e.g.: F2
  63 + // path request e.g.: path/Root Folder/DroppedDocuments
  64 + // node request e.g.: node/F1/children
  65 + // node request e.g.: node/F2/parent
  66 + // node request e.g.: node/F2
66 67 if (urldecode($this->params[0]) == 'Root Folder')
67 68 {
68 69 $folderId = CMISUtil::encodeObjectId('Folder', 1);
... ... @@ -87,6 +88,26 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service {
87 88  
88 89 $folderName = $response['properties']['Name']['value'];
89 90 }
  91 + // NOTE parent changes to parents in later specification
  92 + // TODO update when updating to later specification
  93 + else if ($this->params[1] == 'parent')
  94 + {
  95 + // abstract this to be used also by the document service (and the PWC service?) ???
  96 + // alternatively use getFolderParent here makes sense and use getObjectParents when document service?
  97 + $folderId = $this->params[0];
  98 + $NavigationService = new NavigationService(KT_cmis_atom_service_helper::getKt());
  99 + $response = $NavigationService->getFolderParent($repositoryId, $folderId, false, false, false);
  100 +
  101 + if (PEAR::isError($response)) {
  102 + $feed = KT_cmis_atom_service_helper::getErrorFeed($this, KT_cmis_atom_service::STATUS_SERVER_ERROR, $response->getMessage());
  103 + $this->responseFeed = $feed;
  104 + return null;
  105 + }
  106 +
  107 + // we know that a folder will only have one parent, so we can assume element 0
  108 + $folderId = $response[0]['properties']['ObjectId']['value'];
  109 + $folderName = $response[0]['properties']['Name']['value'];
  110 + }
90 111 else {
91 112 $folderId = $this->params[0];
92 113 }
... ...
webservice/atompub/cmis/KT_cmis_atom_service_helper.inc.php
... ... @@ -97,7 +97,8 @@ class KT_cmis_atom_service_helper {
97 97 // links
98 98 $link = $response->newElement('link');
99 99 $link->appendChild($response->newAttr('rel', 'self'));
100   - $link->appendChild($response->newAttr('href', CMIS_APP_BASE_URI . $workspace . '/' . (!$pwc ? $type : 'pwc') . '/' . $cmisEntry['properties']['ObjectId']['value']));
  100 + $link->appendChild($response->newAttr('href', CMIS_APP_BASE_URI . $workspace . '/' . (!$pwc ? $type : 'pwc') . '/'
  101 + . $cmisEntry['properties']['ObjectId']['value']));
101 102 $entry->appendChild($link);
102 103  
103 104 $link = $response->newElement('link');
... ...