diff --git a/lib/api/ktcmis/util/CMISUtil.inc.php b/lib/api/ktcmis/util/CMISUtil.inc.php index 5e26a41..c1df243 100644 --- a/lib/api/ktcmis/util/CMISUtil.inc.php +++ b/lib/api/ktcmis/util/CMISUtil.inc.php @@ -261,36 +261,45 @@ class CMISUtil { // TODO additional properties to be returned $object['properties']['BaseType'] = array('type' => $properties->getFieldType('BaseType'), 'value' => $properties->getValue('BaseType')); - $object['properties']['ObjectId'] = array('type' => $properties->getFieldType('ObjectId'), - 'value' => $properties->getValue('ObjectId')); - $object['properties']['ObjectTypeId'] = array('type' => $properties->getFieldType('ObjectTypeId'), - 'value' => $properties->getValue('ObjectTypeId')); - $object['properties']['Name'] = array('type' => $properties->getFieldType('Name'), + + $object['properties']['Name'] = array('type' => $properties->getFieldType('Name'), 'value' => $properties->getValue('Name')); - // TODO ensure format of date is always correct - $object['properties']['LastModificationDate'] = array('type' => $properties->getFieldType('LastModificationDate'), - 'value' => $properties->getValue('LastModificationDate')); - $object['properties']['Uri'] = array('type' => $properties->getFieldType('Uri'), - 'value' => $properties->getValue('Uri')); - - $object['properties']['ParentId'] = array('type' => $properties->getFieldType('ParentId'), + + $object['properties']['ParentId'] = array('type' => $properties->getFieldType('ParentId'), 'value' => CMISUtil::encodeObjectId('Folder', $properties->getValue('ParentId'))); - - $object['properties']['AllowedChildObjectTypeIds'] = array('type' => $properties->getFieldType('AllowedChildObjectTypeIds'), - 'value' => $properties->getValue('AllowedChildObjectTypeIds')); - -// $object['properties']['AllowedChildObjectTypeIds'] = array('type' => $properties->getFieldType('AllowedChildObjectTypeIds'), -// 'value' => $properties->getValue('AllowedChildObjectTypeIds')); + + $object['properties']['Uri'] = array('type' => $properties->getFieldType('Uri'), + 'value' => $properties->getValue('Uri')); + + // TODO ensure format of date is always correct + $object['properties']['LastModificationDate'] = array('type' => $properties->getFieldType('LastModificationDate'), + 'value' => $properties->getValue('LastModificationDate')); $object['properties']['CreatedBy'] = array('type' => $properties->getFieldType('CreatedBy'), 'value' => $properties->getValue('CreatedBy')); + + $object['properties']['AllowedChildObjectTypeIds'] = array('type' => $properties->getFieldType('AllowedChildObjectTypeIds'), + 'value' => $properties->getValue('AllowedChildObjectTypeIds')); $object['properties']['CreationDate'] = array('type' => $properties->getFieldType('CreationDate'), 'value' => $properties->getValue('CreationDate')); + $object['properties']['LastModifiedBy'] = array('type' => $properties->getFieldType('LastModifiedBy'), + 'value' => $properties->getValue('LastModifiedBy')); + $object['properties']['ChangeToken'] = array('type' => $properties->getFieldType('ChangeToken'), 'value' => $properties->getValue('ChangeToken')); + + $object['properties']['ObjectTypeId'] = array('type' => $properties->getFieldType('ObjectTypeId'), + 'value' => $properties->getValue('ObjectTypeId')); + + $object['properties']['ObjectId'] = array('type' => $properties->getFieldType('ObjectId'), + 'value' => $properties->getValue('ObjectId')); + + + + if (strtolower($properties->getValue('ObjectTypeId')) == 'document') { 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 8349ff0..dfe65c7 100644 --- a/webservice/atompub/cmis/KT_cmis_atom_server.services.inc.php +++ b/webservice/atompub/cmis/KT_cmis_atom_server.services.inc.php @@ -268,13 +268,16 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service { } // $baseURI=NULL,$title=NULL,$link=NULL,$updated=NULL,$author=NULL,$id=NULL - $feed = new KT_cmis_atom_responseFeed(CMIS_APP_BASE_URI, $folderName . ' ' . ucwords($feedType), null, null, null, - 'urn:uuid:' . $folderId . '-' . $feedType); + $feed = new KT_cmis_atom_responseFeed(CMIS_APP_BASE_URI, $folderName . ' ' . ucwords($feedType), null, null, null, null); +// 'urn:uuid:' . $folderId . '-' . $feedType); // TODO dynamic? $feedElement = $feed->newField('author'); $element = $feed->newField('name', 'System', $feedElement); $feed->appendChild($feedElement); + + // id + $feed->appendChild($feed->newElement('id', 'urn:uuid:' . $folderId . '-' . $feedType)); // TODO get actual most recent update time, only use current if no other available $feed->appendChild($feed->newElement('updated', KT_cmis_atom_service_helper::formatDatestamp())); @@ -287,6 +290,9 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service { foreach($entries as $cmisEntry) { KT_cmis_atom_service_helper::createObjectEntry($feed, $cmisEntry, $folderName); + + // after each entry, add app:edited tag + $feed->appendChild($feed->newElement('app:edited', KT_cmis_atom_service_helper::formatDatestamp())); } // false @@ -494,8 +500,19 @@ class KT_cmis_atom_service_checkedout extends KT_cmis_atom_service { $checkedout = $NavigationService->getCheckedoutDocs($repositoryId); //Create a new response feed - $feed = new KT_cmis_atom_responseFeed(CMIS_APP_BASE_URI, 'Checked out Documents', null, null, null, 'urn:uuid:checkedout'); + $feed = new KT_cmis_atom_responseFeed(CMIS_APP_BASE_URI, 'Checked out Documents'); + + // TODO dynamic? + $feedElement = $feed->newField('author'); + $element = $feed->newField('name', 'admin', $feedElement); + $feed->appendChild($feedElement); + + $feed->appendChild($feed->newElement('id', 'urn:uuid:checkedout')); + // TODO get actual most recent update time, only use current if no other available + $feed->appendChild($feed->newElement('updated', KT_cmis_atom_service_helper::formatDatestamp())); + +//'urn:uuid:checkedout' foreach($checkedout as $document) { $entry = $feed->newEntry(); @@ -515,7 +532,7 @@ class KT_cmis_atom_service_checkedout extends KT_cmis_atom_service { } $entry = null; - $feed->newField('hasMoreItems', 'false', $entry, true); + $feed->newField('cmis:hasMoreItems', 'false', $entry, true); //Expose the responseFeed $this->responseFeed = $feed; 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 cd4b6a8..d11fc6d 100644 --- a/webservice/atompub/cmis/KT_cmis_atom_service_helper.inc.php +++ b/webservice/atompub/cmis/KT_cmis_atom_service_helper.inc.php @@ -13,33 +13,18 @@ class KT_cmis_atom_service_helper { */ static public function createObjectEntry(&$feed, $cmisEntry, $parent, $path) { - // TODO next two lots of code (1 commented 1 not) must be replaced with something better -// $feed->newId('urn:uuid:' . $cmisEntry['properties']['Name']['value'] . '-' -// . strtolower($cmisEntry['properties']['ObjectTypeId']['value']), $entry); - -// echo $_SERVER['QUERY_STRING']."
\n"; -// preg_match('/^\/?[^\/]*\/folder\/(.*)\/[^\/]*\/?$/', trim($_SERVER['QUERY_STRING'], '/'), $matches); -// $path = $matches[1]; -// $parent = preg_replace('/\/[^\/]*$/', '', $path); -// // TODO fix path to work on old method, after fixing drupal module to not require extended path -// -// $path = ''; - - $id = $cmisEntry['properties']['ObjectId']['value']; + // create entry $entry = $feed->newEntry(); - $feed->newField('id', 'urn:uuid:' . $id, $entry); - + // TODO dynamic actual creator name $feedElement = $feed->newField('author'); $element = $feed->newField('name', 'admin', $feedElement); $entry->appendChild($feedElement); - + + // content & id tags + $id = $cmisEntry['properties']['ObjectId']['value']; $entry->appendChild($feed->newField('content', $id)); - // TODO proper date - $entry->appendChild($feed->newField('published', self::formatDatestamp())); - $entry->appendChild($feed->newField('updated', self::formatDatestamp())); - -// $entry->appendChild($feed->newField('summary', $cmisEntry['properties']['Name']['value'])); + $feed->newField('id', 'urn:uuid:' . $id, $entry); // links /* @@ -73,14 +58,6 @@ class KT_cmis_atom_service_helper { $link->appendChild($feed->newAttr('rel','edit')); $link->appendChild($feed->newAttr('href', CMIS_APP_BASE_URI . $feed->workspace . '/' . $type . '/' . $cmisEntry['properties']['ObjectId']['value'])); $entry->appendChild($link); - - // TODO check parent link is correct, fix if needed - // TODO leave out if at root folder - $link = $feed->newElement('link'); - $link->appendChild($feed->newAttr('rel', 'parents')); - $link->appendChild($feed->newAttr('href', CMIS_APP_BASE_URI . $feed->workspace . '/folder/' - . $cmisEntry['properties']['ObjectId']['value'] . '/parent')); - $entry->appendChild($link); // according to spec this MUST be present, but spec says that links for function which are not supported // do not need to be present, so unsure for the moment @@ -90,6 +67,22 @@ class KT_cmis_atom_service_helper { . $cmisEntry['properties']['ObjectId']['value'] . '/permissions')); $entry->appendChild($link); + // according to spec this MUST be present, but spec says that links for function which are not supported + // do not need to be present, so unsure for the moment + $link = $feed->newElement('link'); + $link->appendChild($feed->newAttr('rel', 'relationships')); + $link->appendChild($feed->newAttr('href', CMIS_APP_BASE_URI . $feed->workspace . '/' . $type . '/' + . $cmisEntry['properties']['ObjectId']['value'] . '/rels')); + $entry->appendChild($link); + + // TODO check parent link is correct, fix if needed + // TODO leave out if at root folder + $link = $feed->newElement('link'); + $link->appendChild($feed->newAttr('rel', 'parents')); + $link->appendChild($feed->newAttr('href', CMIS_APP_BASE_URI . $feed->workspace . '/folder/' + . $cmisEntry['properties']['ObjectId']['value'] . '/parent')); + $entry->appendChild($link); + // Folder/Document specific links if (strtolower($cmisEntry['properties']['ObjectTypeId']['value']) == 'folder') { @@ -150,17 +143,7 @@ class KT_cmis_atom_service_helper { // $link->appendChild($feed->newAttr('href', CMIS_APP_BASE_URI . $feed->workspace . '/' . $type . '/' . $cmisEntry['properties']['ParentId']['value'])); // $entry->appendChild($link); // } - } - - - // according to spec this MUST be present, but spec says that links for function which are not supported - // do not need to be present, so unsure for the moment - $link = $feed->newElement('link'); - $link->appendChild($feed->newAttr('rel', 'relationships')); - $link->appendChild($feed->newAttr('href', CMIS_APP_BASE_URI . $feed->workspace . '/' . $type . '/' - . $cmisEntry['properties']['ObjectId']['value'] . '/rels')); - $entry->appendChild($link); - + } $link = $feed->newElement('link'); $link->appendChild($feed->newAttr('rel','type')); @@ -180,8 +163,11 @@ class KT_cmis_atom_service_helper { // $entry->appendChild($link); // end links + // TODO proper date + $entry->appendChild($feed->newField('published', self::formatDatestamp())); $entry->appendChild($feed->newElement('summary', $cmisEntry['properties']['Name']['value'])); $entry->appendChild($feed->newElement('title', $cmisEntry['properties']['Name']['value'])); + $entry->appendChild($feed->newField('updated', self::formatDatestamp())); // main CMIS entry $objectElement = $feed->newElement('cmis:object'); diff --git a/webservice/classes/atompub/cmis/KT_cmis_atom_responseFeed.inc.php b/webservice/classes/atompub/cmis/KT_cmis_atom_responseFeed.inc.php index e8006c4..2650a02 100644 --- a/webservice/classes/atompub/cmis/KT_cmis_atom_responseFeed.inc.php +++ b/webservice/classes/atompub/cmis/KT_cmis_atom_responseFeed.inc.php @@ -21,9 +21,8 @@ class KT_cmis_atom_responseFeed extends KT_atom_responseFeed { protected function constructHeader() { $feed = $this->newElement('feed'); -// $feed->appendChild($this->newAttr('xmlns','http://www.w3.org/2007/app')); -// $feed->appendChild($this->newAttr('xmlns:atom','http://www.w3.org/2005/Atom')); $feed->appendChild($this->newAttr('xmlns','http://www.w3.org/2005/Atom')); + $feed->appendChild($this->newAttr('xmlns:app','http://www.w3.org/2007/app')); $feed->appendChild($this->newAttr('xmlns:cmis','http://docs.oasis-open.org/ns/cmis/core/200901')); $this->feed = &$feed;