Commit 43d2d64d584625c64e61430590411e09b4f2bab1

Authored by Paul Barrett
1 parent 810f45ac

Minor re-factor of some CMIS code to allow easier loading of object entries in multiple areas

Committed by: Paul Barrett
ktatompub/services/cmis/ObjectFeed.inc.php 0 → 100644
  1 +<?php
  2 +
  3 +class CMISObjectFeed {
  4 +
  5 + /**
  6 + * Creates an AtomPub entry for a CMIS entry and adds it to the supplied feed
  7 + *
  8 + * @param object $feed The feed to which we add the entry
  9 + * @param array $cmisEntry The entry data
  10 + * @param string $parent The parent folder
  11 + */
  12 + static public function createEntry(&$feed, $cmisEntry, $parent)
  13 + {
  14 + $entry = $feed->newEntry();
  15 + $feed->newId('urn:uuid:' . $cmisEntry['properties']['ObjectId']['value'] . '-'
  16 + . strtolower($cmisEntry['properties']['ObjectTypeId']['value']), $entry);
  17 +
  18 + /*
  19 +<link rel="edit" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/e98319fa-76e4-478f-8ce8-a3a0fd683e2c"/>
  20 +<link rel="cmis-allowableactions" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/e98319fa-76e4-478f-8ce8-a3a0fd683e2c/permissions"/>
  21 +<link rel="cmis-relationships" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/e98319fa-76e4-478f-8ce8-a3a0fd683e2c/associations"/>
  22 + */
  23 +
  24 + // links
  25 +// $link = $feed->newElement('link');
  26 +// $link->appendChild($feed->newAttr('rel','self'));
  27 +// $link->appendChild($feed->newAttr('href', CMIS_BASE_URI . strtolower($cmisEntry['properties']['ObjectTypeId']['value'])
  28 +// . '/' . $cmisEntry['properties']['ObjectId']['value']));
  29 +// $entry->appendChild($link);
  30 + $link = $feed->newElement('link');
  31 + $link->appendChild($feed->newAttr('rel','cmis-parent'));
  32 + $link->appendChild($feed->newAttr('href', CMIS_BASE_URI . 'folder/' . $parent));
  33 + $entry->appendChild($link);
  34 +
  35 + if (strtolower($cmisEntry['properties']['ObjectTypeId']['value']) == 'folder')
  36 + {
  37 + $link = $feed->newElement('link');
  38 + $link->appendChild($feed->newAttr('rel','cmis-folderparent'));
  39 + $link->appendChild($feed->newAttr('href', CMIS_BASE_URI . 'folder/' . $parent));
  40 + $entry->appendChild($link);
  41 + $link = $feed->newElement('link');
  42 + $link->appendChild($feed->newAttr('rel','cmis-children'));
  43 + $link->appendChild($feed->newAttr('href', CMIS_BASE_URI
  44 + . strtolower($cmisEntry['properties']['ObjectTypeId']['value'])
  45 + . '/' . $cmisEntry['properties']['ObjectId']['value'] . '/children'));
  46 + $entry->appendChild($link);
  47 + $link = $feed->newElement('link');
  48 + $link->appendChild($feed->newAttr('rel','cmis-descendants'));
  49 + $link->appendChild($feed->newAttr('href', CMIS_BASE_URI
  50 + . strtolower($cmisEntry['properties']['ObjectTypeId']['value'])
  51 + . '/' . $cmisEntry['properties']['ObjectId']['value'] . '/descendants'));
  52 + $entry->appendChild($link);
  53 + }
  54 +
  55 + $link = $feed->newElement('link');
  56 + $link->appendChild($feed->newAttr('rel','cmis-type'));
  57 + $link->appendChild($feed->newAttr('href', CMIS_BASE_URI . 'type/' . strtolower($cmisEntry['properties']['ObjectTypeId']['value'])));
  58 + $entry->appendChild($link);
  59 + $link = $feed->newElement('link');
  60 + $link->appendChild($feed->newAttr('rel','cmis-repository'));
  61 + $link->appendChild($feed->newAttr('href', CMIS_BASE_URI . 'repository'));
  62 + $entry->appendChild($link);
  63 + // end links
  64 +
  65 + $entry->appendChild($feed->newElement('summary', $cmisEntry['properties']['Name']['value']));
  66 + $entry->appendChild($feed->newElement('title', $cmisEntry['properties']['Name']['value']));
  67 +
  68 + // main CMIS entry
  69 + $objectElement = $feed->newElement('cmis:object');
  70 + $propertiesElement = $feed->newElement('cmis:properties');
  71 + // <cmis:propertyId cmis:name="ObjectId"><cmis:value>D2</cmis:value></cmis:propertyId>
  72 +
  73 + foreach($cmisEntry['properties'] as $propertyName => $property)
  74 + {
  75 + $propElement = $feed->newElement('cmis:' . $property['type']);
  76 + $propElement->appendChild($feed->newAttr('cmis:name', $propertyName));
  77 + $feed->newField('value', CMISUtil::boolToString($property['value']), $propElement);
  78 + $propertiesElement->appendChild($propElement);
  79 + }
  80 +
  81 + $objectElement->appendChild($propertiesElement);
  82 + $entry->appendChild($objectElement);
  83 + }
  84 +
  85 +}
  86 +
  87 +?>
ktatompub/services/cmis/document.inc.php
@@ -4,20 +4,9 @@ @@ -4,20 +4,9 @@
4 * Document access/management functions for CMIS AtomPub 4 * Document access/management functions for CMIS AtomPub
5 * Output returned as an AtomPub feed 5 * Output returned as an AtomPub feed
6 */ 6 */
  7 +include 'services/cmis/ObjectFeed.inc.php';
7 8
8 -include 'services/cmis/RepositoryService.inc.php';  
9 -include 'services/cmis/ObjectService.inc.php';  
10 -  
11 -$RepositoryService = new RepositoryService();  
12 -$repositories = $RepositoryService->getRepositories();  
13 -$repositoryId = $repositories[0]['repositoryId'];  
14 -  
15 -$ObjectService = new ObjectService();  
16 -$ObjectService->startSession($username, $password);  
17 -  
18 -$output = CMISDocumentFeed::getDocumentFeed($ObjectService, $repositoryId, $query[2]);  
19 -  
20 -class CMISDocumentFeed { 9 +class CMISDocumentFeed extends CMISObjectFeed {
21 10
22 /** 11 /**
23 * Retrieves data about a specific document 12 * Retrieves data about a specific document
@@ -29,6 +18,17 @@ class CMISDocumentFeed { @@ -29,6 +18,17 @@ class CMISDocumentFeed {
29 */ 18 */
30 static public function getDocumentFeed($ObjectService, $repositoryId, $documentId) 19 static public function getDocumentFeed($ObjectService, $repositoryId, $documentId)
31 { 20 {
  21 + $cmisEntry = $ObjectService->getProperties($repositoryId, $documentId, false, false);
  22 +
  23 + $feed = new KTCMISAPPFeed(KT_APP_BASE_URI, $cmisEntry['properties']['ObjectTypeId']['value'], null, null, null,
  24 + 'urn:uuid:' . $cmisEntry['properties']['ObjectId']['value']);
  25 +
  26 + CMISDocumentFeed::createEntry($feed, $cmisEntry, $cmisEntry['properties']['ParentId']['value']);
  27 +
  28 + // <cmis:hasMoreItems>false</cmis:hasMoreItems>
  29 +
  30 + $output = $feed->getAPPdoc();
  31 +
32 // $documentData = $ObjectService->getProperties($repositoryId, $documentId, false, false); 32 // $documentData = $ObjectService->getProperties($repositoryId, $documentId, false, false);
33 // 33 //
34 // $feed = new KTCMISAPPFeed(KT_APP_BASE_URI, 'Root Folder Children', null, null, null, 34 // $feed = new KTCMISAPPFeed(KT_APP_BASE_URI, 'Root Folder Children', null, null, null,
@@ -88,7 +88,7 @@ class CMISDocumentFeed { @@ -88,7 +88,7 @@ class CMISDocumentFeed {
88 // // <cmis:hasMoreItems>false</cmis:hasMoreItems> 88 // // <cmis:hasMoreItems>false</cmis:hasMoreItems>
89 // 89 //
90 // $output = $feed->getAPPdoc(); 90 // $output = $feed->getAPPdoc();
91 - $output = '<?xml version="1.0" encoding="UTF-8"?> 91 + $outputs = '<?xml version="1.0" encoding="UTF-8"?>
92 <feed xmlns="http://www.w3.org/2005/Atom" xmlns:cmis="http://www.cmis.org/2008/05"> 92 <feed xmlns="http://www.w3.org/2005/Atom" xmlns:cmis="http://www.cmis.org/2008/05">
93 <entry> 93 <entry>
94 <author><name>admin</name></author> 94 <author><name>admin</name></author>
@@ -142,4 +142,16 @@ class CMISDocumentFeed { @@ -142,4 +142,16 @@ class CMISDocumentFeed {
142 142
143 } 143 }
144 144
  145 +include 'services/cmis/RepositoryService.inc.php';
  146 +include 'services/cmis/ObjectService.inc.php';
  147 +
  148 +$RepositoryService = new RepositoryService();
  149 +$repositories = $RepositoryService->getRepositories();
  150 +$repositoryId = $repositories[0]['repositoryId'];
  151 +
  152 +$ObjectService = new ObjectService();
  153 +$ObjectService->startSession($username, $password);
  154 +
  155 +$output = CMISDocumentFeed::getDocumentFeed($ObjectService, $repositoryId, $query[2]);
  156 +
145 ?> 157 ?>
ktatompub/services/cmis/folder.inc.php
@@ -5,30 +5,9 @@ @@ -5,30 +5,9 @@
5 * Output returned as an AtomPub feed 5 * Output returned as an AtomPub feed
6 */ 6 */
7 7
8 -include 'services/cmis/RepositoryService.inc.php';  
9 -include 'services/cmis/NavigationService.inc.php';  
10 -include 'services/cmis/ObjectService.inc.php'; 8 +include 'services/cmis/ObjectFeed.inc.php';
11 9
12 -$RepositoryService = new RepositoryService();  
13 -$repositories = $RepositoryService->getRepositories();  
14 -$repositoryId = $repositories[0]['repositoryId'];  
15 -  
16 -if (isset($query[3]) && (($query[3] == 'children') || ($query[3] == 'descendants')))  
17 -{  
18 - $NavigationService = new NavigationService();  
19 - $NavigationService->startSession($username, $password);  
20 -  
21 - $output = CMISFolderFeed::getFolderChildrenFeed($NavigationService, $repositoryId, $query[2], $query[3]);  
22 -}  
23 -else  
24 -{  
25 - $ObjectService = new ObjectService();  
26 - $ObjectService->startSession($username, $password);  
27 -  
28 - $output = CMISFolderFeed::getFolderFeed($ObjectService, $repositoryId, $query[2]);  
29 -}  
30 -  
31 -class CMISFolderFeed { 10 +class CMISFolderFeed extends CMISObjectFeed {
32 11
33 /** 12 /**
34 * Retrieves children/descendants of the specified folder 13 * Retrieves children/descendants of the specified folder
@@ -55,7 +34,7 @@ class CMISFolderFeed { @@ -55,7 +34,7 @@ class CMISFolderFeed {
55 } 34 }
56 35
57 $feed = new KTCMISAPPFeed(KT_APP_BASE_URI, $folderName . ' Children', null, null, null, 36 $feed = new KTCMISAPPFeed(KT_APP_BASE_URI, $folderName . ' Children', null, null, null,
58 - 'urn:' . $cmisEntry['properties']['ObjectId']['value'] . '-children'); 37 + 'urn:uuid:' . $cmisEntry['properties']['ObjectId']['value'] . '-children');
59 38
60 foreach($entries as $cmisEntry) 39 foreach($entries as $cmisEntry)
61 { 40 {
@@ -501,86 +480,29 @@ class CMISFolderFeed { @@ -501,86 +480,29 @@ class CMISFolderFeed {
501 return $output; 480 return $output;
502 } 481 }
503 482
504 - /**  
505 - * Creates an AtomPub entry for a CMIS entry and adds it to the supplied feed  
506 - *  
507 - * @param object $feed The feed to which we add the entry  
508 - * @param array $cmisEntry The entry data  
509 - * @param string $parent The parent folder  
510 - */  
511 - function createEntry(&$feed, $cmisEntry, $parent)  
512 - {  
513 - $entry = $feed->newEntry();  
514 - $feed->newId('urn:' . $cmisEntry['properties']['ObjectId']['value'] . '-'  
515 - . strtolower($cmisEntry['properties']['ObjectTypeId']['value']), $entry); 483 +}
516 484
517 - /*  
518 -<link rel="edit" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/e98319fa-76e4-478f-8ce8-a3a0fd683e2c"/>  
519 -<link rel="cmis-allowableactions" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/e98319fa-76e4-478f-8ce8-a3a0fd683e2c/permissions"/>  
520 -<link rel="cmis-relationships" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/e98319fa-76e4-478f-8ce8-a3a0fd683e2c/associations"/>  
521 - */  
522 -  
523 - // links  
524 -// $link = $feed->newElement('link');  
525 -// $link->appendChild($feed->newAttr('rel','self'));  
526 -// $link->appendChild($feed->newAttr('href', CMIS_BASE_URI . strtolower($cmisEntry['properties']['ObjectTypeId']['value'])  
527 -// . '/' . $cmisEntry['properties']['ObjectId']['value']));  
528 -// $entry->appendChild($link);  
529 - $link = $feed->newElement('link');  
530 - $link->appendChild($feed->newAttr('rel','cmis-parent'));  
531 - $link->appendChild($feed->newAttr('href', CMIS_BASE_URI . 'folder/' . $parent));  
532 - $entry->appendChild($link);  
533 -  
534 - if (strtolower($cmisEntry['properties']['ObjectTypeId']['value']) == 'folder')  
535 - {  
536 - $link = $feed->newElement('link');  
537 - $link->appendChild($feed->newAttr('rel','cmis-folderparent'));  
538 - $link->appendChild($feed->newAttr('href', CMIS_BASE_URI . 'folder/' . $parent));  
539 - $entry->appendChild($link);  
540 - $link = $feed->newElement('link');  
541 - $link->appendChild($feed->newAttr('rel','cmis-children'));  
542 - $link->appendChild($feed->newAttr('href', CMIS_BASE_URI  
543 - . strtolower($cmisEntry['properties']['ObjectTypeId']['value'])  
544 - . '/' . $cmisEntry['properties']['ObjectId']['value'] . '/children'));  
545 - $entry->appendChild($link);  
546 - $link = $feed->newElement('link');  
547 - $link->appendChild($feed->newAttr('rel','cmis-descendants'));  
548 - $link->appendChild($feed->newAttr('href', CMIS_BASE_URI  
549 - . strtolower($cmisEntry['properties']['ObjectTypeId']['value'])  
550 - . '/' . $cmisEntry['properties']['ObjectId']['value'] . '/descendants'));  
551 - $entry->appendChild($link);  
552 - } 485 +include 'services/cmis/RepositoryService.inc.php';
  486 +include 'services/cmis/NavigationService.inc.php';
  487 +include 'services/cmis/ObjectService.inc.php';
553 488
554 - $link = $feed->newElement('link');  
555 - $link->appendChild($feed->newAttr('rel','cmis-type'));  
556 - $link->appendChild($feed->newAttr('href', CMIS_BASE_URI . 'type/' . strtolower($cmisEntry['properties']['ObjectTypeId']['value'])));  
557 - $entry->appendChild($link);  
558 - $link = $feed->newElement('link');  
559 - $link->appendChild($feed->newAttr('rel','cmis-repository'));  
560 - $link->appendChild($feed->newAttr('href', CMIS_BASE_URI . 'repository'));  
561 - $entry->appendChild($link);  
562 - // end links  
563 -  
564 - $entry->appendChild($feed->newElement('summary', $cmisEntry['properties']['Name']['value']));  
565 - $entry->appendChild($feed->newElement('title', $cmisEntry['properties']['Name']['value']));  
566 -  
567 - // main CMIS entry  
568 - $objectElement = $feed->newElement('cmis:object');  
569 - $propertiesElement = $feed->newElement('cmis:properties');  
570 - // <cmis:propertyId cmis:name="ObjectId"><cmis:value>D2</cmis:value></cmis:propertyId>  
571 -  
572 - foreach($cmisEntry['properties'] as $propertyName => $property)  
573 - {  
574 - $propElement = $feed->newElement('cmis:' . $property['type']);  
575 - $propElement->appendChild($feed->newAttr('cmis:name', $propertyName));  
576 - $feed->newField('value', CMISUtil::boolToString($property['value']), $propElement);  
577 - $propertiesElement->appendChild($propElement);  
578 - } 489 +$RepositoryService = new RepositoryService();
  490 +$repositories = $RepositoryService->getRepositories();
  491 +$repositoryId = $repositories[0]['repositoryId'];
579 492
580 - $objectElement->appendChild($propertiesElement);  
581 - $entry->appendChild($objectElement);  
582 - } 493 +if (isset($query[3]) && (($query[3] == 'children') || ($query[3] == 'descendants')))
  494 +{
  495 + $NavigationService = new NavigationService();
  496 + $NavigationService->startSession($username, $password);
  497 +
  498 + $output = CMISFolderFeed::getFolderChildrenFeed($NavigationService, $repositoryId, $query[2], $query[3]);
  499 +}
  500 +else
  501 +{
  502 + $ObjectService = new ObjectService();
  503 + $ObjectService->startSession($username, $password);
583 504
  505 + $output = CMISFolderFeed::getFolderFeed($ObjectService, $repositoryId, $query[2]);
584 } 506 }
585 507
586 ?> 508 ?>
ktatompub/services/cmis/index.php
@@ -32,7 +32,7 @@ switch($arg) @@ -32,7 +32,7 @@ switch($arg)
32 include('services/cmis/checkedout.inc.php'); 32 include('services/cmis/checkedout.inc.php');
33 break; 33 break;
34 case 'document': 34 case 'document':
35 - include('services/cmis/folder.inc.php'); 35 + include('services/cmis/document.inc.php');
36 break; 36 break;
37 case 'folder': 37 case 'folder':
38 include('services/cmis/folder.inc.php'); 38 include('services/cmis/folder.inc.php');
lib/api/ktcmis/ktcmis.inc.php
@@ -372,6 +372,12 @@ class KTObjectService extends KTCMISBase { @@ -372,6 +372,12 @@ class KTObjectService extends KTCMISBase {
372 // instantiate underlying CMIS service 372 // instantiate underlying CMIS service
373 $this->ObjectService = new CMISObjectService(); 373 $this->ObjectService = new CMISObjectService();
374 } 374 }
  375 +
  376 + public function startSession($username, $password)
  377 + {
  378 + parent::startSession($username, $password);
  379 + $this->ObjectService->setInterface($this->ktapi);
  380 + }
375 381
376 /** 382 /**
377 * Gets the properties for the selected object 383 * Gets the properties for the selected object
@@ -387,7 +393,7 @@ class KTObjectService extends KTCMISBase { @@ -387,7 +393,7 @@ class KTObjectService extends KTCMISBase {
387 public function getProperties($repositoryId, $objectId, $includeAllowableActions, $includeRelationships, 393 public function getProperties($repositoryId, $objectId, $includeAllowableActions, $includeRelationships,
388 $returnVersion = false, $filter = '') 394 $returnVersion = false, $filter = '')
389 { 395 {
390 - $propertiesResult = $this->ObjectService->getProperties($repositoryId, $objectId, $includeAllowableActions, $includeRelationships); 396 + $propertyCollection = $this->ObjectService->getProperties($repositoryId, $objectId, $includeAllowableActions, $includeRelationships);
391 397
392 if (PEAR::isError($propertiesResult)) 398 if (PEAR::isError($propertiesResult))
393 { 399 {
@@ -397,17 +403,7 @@ class KTObjectService extends KTCMISBase { @@ -397,17 +403,7 @@ class KTObjectService extends KTCMISBase {
397 ); 403 );
398 } 404 }
399 405
400 - // will need to convert to array format, so:  
401 - $propertyCollection['objectId'] = $propertiesResult->getValue('objectId');  
402 - $propertyCollection['URI'] = $propertiesResult->getValue('URI');  
403 - $propertyCollection['typeId'] = $propertiesResult->getValue('typeId');  
404 - $propertyCollection['createdBy'] = $propertiesResult->getValue('createdBy');  
405 - $propertyCollection['creationDate'] = $propertiesResult->getValue('creationDate');  
406 - $propertyCollection['lastModifiedBy'] = $propertiesResult->getValue('lastModifiedBy');  
407 - $propertyCollection['lastModificationDate'] = $propertiesResult->getValue('lastModificationDate');  
408 - $propertyCollection['changeToken'] = $propertiesResult->getValue('changeToken');  
409 -  
410 - $properties = array(array('properties' => $propertyCollection, 'child' => null)); 406 + $properties = CMISUtil::createObjectPropertiesEntry($propertyCollection);
411 407
412 return array( 408 return array(
413 "status_code" => 0, 409 "status_code" => 0,
lib/api/ktcmis/services/CMISObjectService.inc.php
@@ -11,10 +11,15 @@ class CMISObjectService { @@ -11,10 +11,15 @@ class CMISObjectService {
11 11
12 protected $ktapi; 12 protected $ktapi;
13 13
14 -// function CMISObjectService(&$ktapi)  
15 -// {  
16 -// $this->ktapi = $ktapi;  
17 -// } 14 + /**
  15 + * Sets the interface to be used to query the repository
  16 + *
  17 + * @param object $ktapi The KnowledgeTree API interface
  18 + */
  19 + function setInterface(&$ktapi)
  20 + {
  21 + $this->ktapi = $ktapi;
  22 + }
18 23
19 /** 24 /**
20 * Fetches the properties for the specified object 25 * Fetches the properties for the specified object
lib/api/ktcmis/util/CMISUtil.inc.php
@@ -221,43 +221,57 @@ class CMISUtil { @@ -221,43 +221,57 @@ class CMISUtil {
221 $object = $entry['object']; 221 $object = $entry['object'];
222 $properties = $object->getProperties(); 222 $properties = $object->getProperties();
223 223
224 - // TODO additional properties to be returned  
225 - $hierarchy[$key]['properties']['ObjectId'] = array('type' => $properties->getFieldType('ObjectId'),  
226 - 'value' => $properties->getValue('ObjectId'));  
227 - $hierarchy[$key]['properties']['BaseType'] = array('type' => $properties->getFieldType('BaseType'),  
228 - 'value' => $properties->getValue('BaseType'));  
229 - $hierarchy[$key]['properties']['ObjectTypeId'] = array('type' => $properties->getFieldType('ObjectTypeId'),  
230 - 'value' => $properties->getValue('ObjectTypeId'));  
231 - $hierarchy[$key]['properties']['Name'] = array('type' => $properties->getFieldType('Name'),  
232 - 'value' => $properties->getValue('Name'));  
233 - $hierarchy[$key]['Author'] = array('value' => $properties->getValue('Author'));  
234 - if (strtolower($properties->getValue('ObjectTypeId')) == 'folder')  
235 - {  
236 - $hierarchy[$key]['properties']['ParentId'] = array('type' => $properties->getFieldType('ParentId'),  
237 - 'value' => CMISUtil::encodeObjectId('Folder',  
238 - $properties->getValue('ParentId')));  
239 - } else {  
240 - $hierarchy[$key]['properties']['ContentStreamLength'] = array('type' => $properties->getFieldType('ContentStreamLength'),  
241 - 'value' => $properties->getValue('ContentStreamLength'));  
242 - $hierarchy[$key]['properties']['ContentStreamMimeType'] = array('type' => $properties->getFieldType('ContentStreamMimeType'),  
243 - 'value' => $properties->getValue('ContentStreamMimeType'));  
244 - }  
245 - // if we have found a child/parent with one or more children/parents, recurse into the child/parent object  
246 - if (count($entry['items']) > 0)  
247 - {  
248 - $hierarchy[$key][$linkText] = CMISUtil::decodeObjectHierarchy($entry['items'], $linkText);  
249 - }  
250 - // NOTE may need to set a null value here in case webservices don't like it unset  
251 - // so we'll set it just in case...  
252 - else  
253 - {  
254 - $hierarchy[$key][$linkText] = null;  
255 - } 224 + $hierarchy[$key] = CMISUtil::createObjectPropertiesEntry($properties);
256 } 225 }
257 226
258 return $hierarchy; 227 return $hierarchy;
259 } 228 }
260 229
  230 + static function createObjectPropertiesEntry($properties)
  231 + {
  232 + $object = array();
  233 +
  234 + // TODO additional properties to be returned
  235 + $object['properties']['ObjectId'] = array('type' => $properties->getFieldType('ObjectId'),
  236 + 'value' => $properties->getValue('ObjectId'));
  237 + $object['properties']['BaseType'] = array('type' => $properties->getFieldType('BaseType'),
  238 + 'value' => $properties->getValue('BaseType'));
  239 + $object['properties']['ObjectTypeId'] = array('type' => $properties->getFieldType('ObjectTypeId'),
  240 + 'value' => $properties->getValue('ObjectTypeId'));
  241 + $object['properties']['Name'] = array('type' => $properties->getFieldType('Name'),
  242 + 'value' => $properties->getValue('Name'));
  243 + $object['Author'] = array('value' => $properties->getValue('Author'));
  244 +
  245 + if (strtolower($properties->getValue('ObjectTypeId')) == 'folder')
  246 + {
  247 + $object['properties']['ParentId'] = array('type' => $properties->getFieldType('ParentId'),
  248 + 'value' => CMISUtil::encodeObjectId('Folder',
  249 + $properties->getValue('ParentId')));
  250 + }
  251 + // TODO should check for content stream data before filling these in
  252 + else //if ()
  253 + {
  254 + $object['properties']['ContentStreamLength'] = array('type' => $properties->getFieldType('ContentStreamLength'),
  255 + 'value' => $properties->getValue('ContentStreamLength'));
  256 + $object['properties']['ContentStreamMimeType'] = array('type' => $properties->getFieldType('ContentStreamMimeType'),
  257 + 'value' => $properties->getValue('ContentStreamMimeType'));
  258 + }
  259 +
  260 + // if we have found a child/parent with one or more children/parents, recurse into the child/parent object
  261 + if (count($entry['items']) > 0)
  262 + {
  263 + $object[$linkText] = CMISUtil::decodeObjectHierarchy($entry['items'], $linkText);
  264 + }
  265 + // NOTE may need to set a null value here in case webservices don't like it unset
  266 + // so we'll set it just in case...
  267 + else
  268 + {
  269 + $object[$linkText] = null;
  270 + }
  271 +
  272 + return $object;
  273 + }
  274 +
261 /** 275 /**
262 * This function takes a class object and converts it to an array structure 276 * This function takes a class object and converts it to an array structure
263 * via var_export (which returns a useable PHP string for creating the object from array content) 277 * via var_export (which returns a useable PHP string for creating the object from array content)