Commit bc7af7924e3f389df17892b829216d86807723b4

Authored by Paul Barrett
1 parent 8e953826

Various changes to ktcmis code made while implementing atompub responses. Moved…

… ktcmis code into lib/api/ to clean up the root of the folder tree.

Committed by: Paul Barrett
Showing 17 changed files with 207 additions and 198 deletions
ktcmis/classes/CMISBaseObject.inc.php renamed to lib/api/ktcmis/classes/CMISBaseObject.inc.php
@@ -40,10 +40,9 @@ @@ -40,10 +40,9 @@
40 * @version Version 0.1 40 * @version Version 0.1
41 */ 41 */
42 42
43 -require_once(CMIS_DIR . '/classes/CMISObject.inc.php'); 43 +//require_once(CMIS_DIR . '/classes/CMISObject.inc.php');
44 44
45 -// NOTE chemistry class was abstract but this has gone in a different direction anyway  
46 -abstract class CMISBaseObject implements CMISObject { 45 +abstract class CMISBaseObject {
47 46
48 protected $typeId; 47 protected $typeId;
49 protected $queryName; 48 protected $queryName;
@@ -60,7 +59,7 @@ abstract class CMISBaseObject implements CMISObject { @@ -60,7 +59,7 @@ abstract class CMISBaseObject implements CMISObject {
60 59
61 protected $properties; // list of property objects which define the additional properties for this object 60 protected $properties; // list of property objects which define the additional properties for this object
62 61
63 - // TODO all we have here so far is getAttributes & getProperties :) 62 + // TODO all we have here so far is getAttributes & getProperties
64 // add all the other methods as we go along 63 // add all the other methods as we go along
65 64
66 function __construct() 65 function __construct()
ktcmis/classes/CMISDocumentPropertyCollection.inc.php renamed to lib/api/ktcmis/classes/CMISDocumentPropertyCollection.inc.php
@@ -47,21 +47,26 @@ require_once(CMIS_DIR . '/classes/CMISPropertyCollection.inc.php'); @@ -47,21 +47,26 @@ require_once(CMIS_DIR . '/classes/CMISPropertyCollection.inc.php');
47 */ 47 */
48 class CMISDocumentPropertyCollection extends CMISPropertyCollection { 48 class CMISDocumentPropertyCollection extends CMISPropertyCollection {
49 49
50 - static $name;  
51 - static $isImmutable;  
52 - static $isLatestVersion;  
53 - static $isMajorVersion;  
54 - static $isLatestMajorVersion;  
55 - static $versionLabel;  
56 - static $versionSeriesId;  
57 - static $isVersionSeriesCheckedOut;  
58 - static $versionSeriesCheckedOutBy;  
59 - static $versionSeriesCheckedOutId;  
60 - static $checkinComment;  
61 - static $contentStreamLength;  
62 - static $contentStreamMimeType;  
63 - static $contentStreamFilename;  
64 - static $contentStreamUri; 50 + static $Name;
  51 + static $IsImmutable;
  52 + static $IsLatestVersion;
  53 + static $IsMajorVersion;
  54 + static $IsLatestMajorVersion;
  55 + static $VersionLabel;
  56 + static $VersionSeriesId;
  57 + static $IsVersionSeriesCheckedOut;
  58 + static $VersionSeriesCheckedOutBy;
  59 + static $VersionSeriesCheckedOutId;
  60 + static $CheckinComment;
  61 + static $ContentStreamLength;
  62 + static $ContentStreamMimeType;
  63 + static $ContentStreamFilename;
  64 + static $ContentStreamUri;
  65 +
  66 + function __construct()
  67 + {
  68 + parent::__construct();
  69 + }
65 70
66 } 71 }
67 72
ktcmis/classes/CMISFolderPropertyCollection.inc.php renamed to lib/api/ktcmis/classes/CMISFolderPropertyCollection.inc.php
@@ -47,9 +47,14 @@ require_once(CMIS_DIR . '/classes/CMISPropertyCollection.inc.php'); @@ -47,9 +47,14 @@ require_once(CMIS_DIR . '/classes/CMISPropertyCollection.inc.php');
47 */ 47 */
48 class CMISFolderPropertyCollection extends CMISPropertyCollection { 48 class CMISFolderPropertyCollection extends CMISPropertyCollection {
49 49
50 - static $name;  
51 - static $parentId;  
52 - static $allowedChildObjectTypeIds; 50 + static $Name;
  51 + static $ParentId;
  52 + static $AllowedChildObjectTypeIds;
  53 +
  54 + function __construct()
  55 + {
  56 + parent::__construct();
  57 + }
53 58
54 } 59 }
55 60
ktcmis/classes/CMISObject.inc.php renamed to lib/api/ktcmis/classes/CMISObject.inc.php
ktcmis/classes/CMISObjectTypes.inc.php renamed to lib/api/ktcmis/classes/CMISObjectTypes.inc.php
ktcmis/classes/CMISPropertyCollection.inc.php renamed to lib/api/ktcmis/classes/CMISPropertyCollection.inc.php
@@ -45,14 +45,26 @@ @@ -45,14 +45,26 @@
45 */ 45 */
46 abstract class CMISPropertyCollection { 46 abstract class CMISPropertyCollection {
47 47
48 - static $objectId; 48 + static $ObjectId;
49 static $URI; 49 static $URI;
50 - static $typeId;  
51 - static $createdBy;  
52 - static $creationDate;  
53 - static $lastModifiedBy;  
54 - static $lastModificationDate;  
55 - static $changeToken; 50 + static $ObjectTypeId;
  51 + static $CreatedBy;
  52 + static $CreationDate;
  53 + static $LastModifiedBy;
  54 + static $LastModificationDate;
  55 + static $ChangeToken;
  56 +
  57 + // TODO these definitions probably belong elsewhere, but here will do for now
  58 + static $propertyTypes;
  59 +
  60 + function __construct()
  61 + {
  62 + $this->propertyTypes = array('ObjectId' => 'propertyId', 'BaseType' => 'propertyString',
  63 + 'ObjectTypeId' => 'propertyString', 'CreatedBy' => 'propertyString',
  64 + 'CreationDate' => 'propertyDateTime', 'LastModifiedBy' => 'propertyString',
  65 + 'LastModificationDate' => 'propertyDateTime', 'Name' => 'propertyString',
  66 + 'ParentId' => 'propertyId');
  67 + }
56 68
57 /** 69 /**
58 * Gets the property value. 70 * Gets the property value.
@@ -71,6 +83,11 @@ abstract class CMISPropertyCollection { @@ -71,6 +83,11 @@ abstract class CMISPropertyCollection {
71 $this->{$field} = $value; 83 $this->{$field} = $value;
72 } 84 }
73 85
  86 + function getFieldType($field)
  87 + {
  88 + return $this->propertyTypes[$field];
  89 + }
  90 +
74 } 91 }
75 92
76 ?> 93 ?>
ktcmis/classes/CMISRepository.inc.php renamed to lib/api/ktcmis/classes/CMISRepository.inc.php
@@ -98,13 +98,13 @@ class CMISRepository { @@ -98,13 +98,13 @@ class CMISRepository {
98 } 98 }
99 99
100 // set capabilities 100 // set capabilities
101 - foreach($config->repositoryCapabilities->children() as $field => $value) 101 + foreach($config->repositoryCapabilities[0] as $field => $value)
102 { 102 {
103 $this->setCapabilityField($field, (string)$value); 103 $this->setCapabilityField($field, (string)$value);
104 } 104 }
105 105
106 // set supported document types 106 // set supported document types
107 - foreach($config->supportedTypes->children() as $field => $value) 107 + foreach($config->supportedTypes[0] as $field => $value)
108 { 108 {
109 $this->objectTypes[] = (string)$value; 109 $this->objectTypes[] = (string)$value;
110 } 110 }
ktcmis/classes/CMISRepositoryCapabilities.inc.php renamed to lib/api/ktcmis/classes/CMISRepositoryCapabilities.inc.php
ktcmis/classes/CMISRepositoryInfo.inc.php renamed to lib/api/ktcmis/classes/CMISRepositoryInfo.inc.php
ktcmis/config/repositories.xml renamed to lib/api/ktcmis/config/repositories.xml
@@ -12,15 +12,15 @@ @@ -12,15 +12,15 @@
12 <repository> 12 <repository>
13 <repositoryURI>http://127.0.0.1/</repositoryURI> 13 <repositoryURI>http://127.0.0.1/</repositoryURI>
14 <repositoryInfo> 14 <repositoryInfo>
15 - <repositoryId>1</repositoryId> 15 + <repositoryId>0ad7de04-7914-41b1-b5ee-be9f0b626437</repositoryId>
16 <repositoryName>KnowledgeTree</repositoryName> 16 <repositoryName>KnowledgeTree</repositoryName>
17 <repositoryRelationship>self</repositoryRelationship> 17 <repositoryRelationship>self</repositoryRelationship>
18 <repositoryDescription>KnowledgeTree Repository</repositoryDescription> 18 <repositoryDescription>KnowledgeTree Repository</repositoryDescription>
19 <vendorName>KnowledgeTree</vendorName> 19 <vendorName>KnowledgeTree</vendorName>
20 - <productName>KnowledgeTree</productName> 20 + <productName>KnowledgeTree Document Management System</productName>
21 <productVersion>3.6.2</productVersion> 21 <productVersion>3.6.2</productVersion>
22 - <rootFolderId>1</rootFolderId>  
23 - <cmisVersionsSupported>cmis 0.61c</cmisVersionsSupported> 22 + <rootFolderId>F1</rootFolderId>
  23 + <cmisVersionsSupported>0.61c</cmisVersionsSupported>
24 </repositoryInfo> 24 </repositoryInfo>
25 <repositoryCapabilities> 25 <repositoryCapabilities>
26 <capabilityMultifiling>false</capabilityMultifiling> 26 <capabilityMultifiling>false</capabilityMultifiling>
@@ -41,7 +41,7 @@ @@ -41,7 +41,7 @@
41 <repository> 41 <repository>
42 <repositoryURI>http://12s7.w0.0.1/</repositoryURI> 42 <repositoryURI>http://12s7.w0.0.1/</repositoryURI>
43 <repositoryInfo> 43 <repositoryInfo>
44 - <repositoryId>44</repositoryId> 44 + <repositoryId>b60bd6c5-e8f9-4776-b292-8d544468c9e4</repositoryId>
45 <repositoryName>asdasdasd</repositoryName> 45 <repositoryName>asdasdasd</repositoryName>
46 <repositoryRelationship>self</repositoryRelationship> 46 <repositoryRelationship>self</repositoryRelationship>
47 <repositoryDescription>KnowledgeTree Repository</repositoryDescription> 47 <repositoryDescription>KnowledgeTree Repository</repositoryDescription>
@@ -49,7 +49,7 @@ @@ -49,7 +49,7 @@
49 <productName>KnowledgeTree</productName> 49 <productName>KnowledgeTree</productName>
50 <productVersion>3.6.1</productVersion> 50 <productVersion>3.6.1</productVersion>
51 <rootFolderId>1</rootFolderId> 51 <rootFolderId>1</rootFolderId>
52 - <cmisVersionsSupported>0.61</cmisVersionsSupported> 52 + <cmisVersionsSupported>0.61c</cmisVersionsSupported>
53 </repositoryInfo> 53 </repositoryInfo>
54 <repositoryCapabilities> 54 <repositoryCapabilities>
55 <capabilityMultifiling>false</capabilityMultifiling> 55 <capabilityMultifiling>false</capabilityMultifiling>
ktcmis/ktcmis.inc.php renamed to lib/api/ktcmis/ktcmis.inc.php
@@ -40,39 +40,29 @@ @@ -40,39 +40,29 @@
40 * @version Version 0.9 40 * @version Version 0.9
41 */ 41 */
42 42
  43 +/**
  44 + * Split into individual classes to handle each section of functionality.
  45 + * This is really just a handling layer between CMIS and the web services.
  46 + */
  47 +
43 // TODO implement exceptions in various calls (in the underlying classes) 48 // TODO implement exceptions in various calls (in the underlying classes)
44 // FIXME none of the error handling actually does anything, it's leftover from copy/paste of some ktapi code 49 // FIXME none of the error handling actually does anything, it's leftover from copy/paste of some ktapi code
45 50
46 -require_once(realpath(dirname(__FILE__) . '/../config/dmsDefaults.php')); 51 +require_once(realpath(dirname(__FILE__) . '/../../../config/dmsDefaults.php'));
47 require_once(KT_DIR . '/ktapi/ktapi.inc.php'); 52 require_once(KT_DIR . '/ktapi/ktapi.inc.php');
48 53
49 -define ('CMIS_DIR', KT_DIR . '/ktcmis'); 54 +define ('CMIS_DIR', KT_LIB_DIR . '/api/ktcmis');
50 require_once(CMIS_DIR . '/services/CMISRepositoryService.inc.php'); 55 require_once(CMIS_DIR . '/services/CMISRepositoryService.inc.php');
51 require_once(CMIS_DIR . '/services/CMISNavigationService.inc.php'); 56 require_once(CMIS_DIR . '/services/CMISNavigationService.inc.php');
52 require_once(CMIS_DIR . '/services/CMISObjectService.inc.php'); 57 require_once(CMIS_DIR . '/services/CMISObjectService.inc.php');
53 require_once(CMIS_DIR . '/util/CMISUtil.inc.php'); 58 require_once(CMIS_DIR . '/util/CMISUtil.inc.php');
54 59
55 -class KTCMIS { 60 +/**
  61 + * Handles authentication
  62 + */
  63 +class KTCMISBase {
56 64
57 /** 65 /**
58 - * Class for CMIS Repository Services  
59 - *  
60 - * @var object  
61 - */  
62 - protected $RepositoryService;  
63 - /**  
64 - * Class for CMIS Navigation Services  
65 - *  
66 - * @var object  
67 - */  
68 - protected $NavigationService;  
69 - /**  
70 - * Class for CMIS Object Services  
71 - *  
72 - * @var object  
73 - */  
74 - protected $ObjectService;  
75 - /**  
76 * KnowledgeTree API instance 66 * KnowledgeTree API instance
77 * 67 *
78 * @var object 68 * @var object
@@ -85,51 +75,41 @@ class KTCMIS { @@ -85,51 +75,41 @@ class KTCMIS {
85 */ 75 */
86 protected $session; 76 protected $session;
87 77
88 - function __construct(&$ktapi = null, $user = '', $password = '') 78 + public function startSession($username, $password)
89 { 79 {
90 - // ktapi interface 80 + global $default;
  81 + $default->log->debug("attempt auth with $username :: $password");
91 $this->session = null; 82 $this->session = null;
92 -// if (is_null($ktapi))  
93 -// {  
94 -// // TODO this should probably throw an exception instead  
95 -// return PEAR::RaiseError('Cannot continue without KTAPI instance');  
96 - // FIXME this CANNOT be allowed in a live environment  
97 - // possibly we should insist on a ktapi instance being passed  
98 - // or at least user/pass for logging in here, if one or other  
99 - // not sent, return error  
100 - $user = 'admin';  
101 - $password = 'admin';  
102 - $this->ktapi = new KTAPI();  
103 - $this->session = $this->ktapi->start_session($user, $password);  
104 -// }  
105 -// else  
106 -// {  
107 -// $this->ktapi = $ktapi;  
108 -// }  
109 -  
110 - // instantiate services  
111 - $this->RepositoryService = new CMISRepositoryService();  
112 - $this->NavigationService = new CMISNavigationService($this->ktapi);  
113 - $this->ObjectService = new CMISObjectService($this->ktapi); 83 + // remove as soon as actual auth code is in place
  84 + $username = 'admin';
  85 + $password = 'admin';
  86 + $this->ktapi = new KTAPI();
  87 + $this->session =& $this->ktapi->start_session($username, $password);
  88 +
  89 + if (PEAR::isError($this->session))
  90 + {
  91 + $default->log->debug("FAILED $username :: $password FAILED");
  92 + }
  93 +
  94 + return $this->session;
114 } 95 }
115 96
116 - function __destruct() 97 + // TODO what about destroying sessions?
  98 +}
  99 +
  100 +/**
  101 + * Handles low level repository information queries
  102 + */
  103 +class KTRepositoryService extends KTCMISBase {
  104 +
  105 + protected $RepositoryService;
  106 +
  107 + public function __construct()
117 { 108 {
118 -// if ($this->session instanceOf KTAPI_UserSession)  
119 -// {  
120 -// try  
121 -// {  
122 -// $this->session->logout();  
123 -// }  
124 -// catch (Exception $e)  
125 -// {  
126 -// // no output  
127 -// }  
128 -// } 109 + // instantiate underlying CMIS service
  110 + $this->RepositoryService = new CMISRepositoryService();
129 } 111 }
130 112
131 - // Repository service functions  
132 -  
133 /** 113 /**
134 * Fetch a list of all available repositories 114 * Fetch a list of all available repositories
135 * 115 *
@@ -137,7 +117,7 @@ class KTCMIS { @@ -137,7 +117,7 @@ class KTCMIS {
137 * 117 *
138 * @return repositoryList[] 118 * @return repositoryList[]
139 */ 119 */
140 - function getRepositories() 120 + public function getRepositories()
141 { 121 {
142 $repositories = $this->RepositoryService->getRepositories(); 122 $repositories = $this->RepositoryService->getRepositories();
143 if (PEAR::isError($repositories)) 123 if (PEAR::isError($repositories))
@@ -170,7 +150,7 @@ class KTCMIS { @@ -170,7 +150,7 @@ class KTCMIS {
170 * 150 *
171 * @param string $repositoryId 151 * @param string $repositoryId
172 */ 152 */
173 - function getRepositoryInfo($repositoryId) 153 + public function getRepositoryInfo($repositoryId)
174 { 154 {
175 $repositoryInfo = $this->RepositoryService->getRepositoryInfo($repositoryId); 155 $repositoryInfo = $this->RepositoryService->getRepositoryInfo($repositoryId);
176 if (PEAR::isError($repositoryInfo)) 156 if (PEAR::isError($repositoryInfo))
@@ -194,7 +174,7 @@ class KTCMIS { @@ -194,7 +174,7 @@ class KTCMIS {
194 * 174 *
195 * @param string $repositoryId 175 * @param string $repositoryId
196 */ 176 */
197 - function getTypes($repositoryId, $typeId = '', $returnPropertyDefinitions = false, 177 + public function getTypes($repositoryId, $typeId = '', $returnPropertyDefinitions = false,
198 $maxItems = 0, $skipCount = 0, &$hasMoreItems = false) 178 $maxItems = 0, $skipCount = 0, &$hasMoreItems = false)
199 { 179 {
200 $repositoryObjectTypeResult = $this->RepositoryService->getTypes($repositoryId, $typeId, $returnPropertyDefinitions, 180 $repositoryObjectTypeResult = $this->RepositoryService->getTypes($repositoryId, $typeId, $returnPropertyDefinitions,
@@ -229,10 +209,10 @@ class KTCMIS { @@ -229,10 +209,10 @@ class KTCMIS {
229 * @param string $repositoryId 209 * @param string $repositoryId
230 * @param string $typeId 210 * @param string $typeId
231 */ 211 */
232 - function getTypeDefinition($repositoryId, $typeId) 212 + public function getTypeDefinition($repositoryId, $typeId)
233 { 213 {
234 $typeDefinitionResult = $this->RepositoryService->getTypeDefinition($repositoryId, $typeId); 214 $typeDefinitionResult = $this->RepositoryService->getTypeDefinition($repositoryId, $typeId);
235 - 215 +
236 if (PEAR::isError($typeDefinitionResult)) 216 if (PEAR::isError($typeDefinitionResult))
237 { 217 {
238 return array( 218 return array(
@@ -252,7 +232,26 @@ class KTCMIS { @@ -252,7 +232,26 @@ class KTCMIS {
252 ); 232 );
253 } 233 }
254 234
255 - // Navigation service functions 235 +}
  236 +
  237 +/*
  238 + * Handles repository navigation
  239 + */
  240 +class KTNavigationService extends KTCMISBase {
  241 +
  242 + protected $NavigationService;
  243 +
  244 + public function __construct()
  245 + {
  246 + // instantiate underlying CMIS service
  247 + $this->NavigationService = new CMISNavigationService();
  248 + }
  249 +
  250 + public function startSession($username, $password)
  251 + {
  252 + parent::startSession($username, $password);
  253 + $this->NavigationService->setInterface($this->ktapi);
  254 + }
256 255
257 /** 256 /**
258 * Get descendents of the specified folder, up to the depth indicated 257 * Get descendents of the specified folder, up to the depth indicated
@@ -266,7 +265,7 @@ class KTCMIS { @@ -266,7 +265,7 @@ class KTCMIS {
266 * @param string $filter 265 * @param string $filter
267 * @return array $descendants 266 * @return array $descendants
268 */ 267 */
269 - function getDescendants($repositoryId, $folderId, $includeAllowableActions, $includeRelationships, 268 + public function getDescendants($repositoryId, $folderId, $includeAllowableActions, $includeRelationships,
270 $depth = 1, $typeID = 'Any', $filter = '') 269 $depth = 1, $typeID = 'Any', $filter = '')
271 { 270 {
272 // TODO optional parameters 271 // TODO optional parameters
@@ -284,11 +283,6 @@ class KTCMIS { @@ -284,11 +283,6 @@ class KTCMIS {
284 // format for webservices consumption 283 // format for webservices consumption
285 // NOTE this will almost definitely be changing in the future, this is just to get something working 284 // NOTE this will almost definitely be changing in the future, this is just to get something working
286 $descendants = CMISUtil::decodeObjectHierarchy($descendantsResult, 'child'); 285 $descendants = CMISUtil::decodeObjectHierarchy($descendantsResult, 'child');
287 -// $descendants = array(array('properties' => array('objectId' => 'D2', 'typeId' => 'Document', 'name' => 'test document'),  
288 -// 'child' => array(array('properties' => array('objectId' => 'D7',  
289 -// 'typeId' => 'Document', 'name' => 'CHILD document'), 'child' => null),  
290 -// array('properties' => array('objectId' => 'F34',  
291 -// 'typeId' => 'Folder', 'name' => 'CHILD FOLDER'), 'child' => null))));  
292 286
293 return array ( 287 return array (
294 "status_code" => 0, 288 "status_code" => 0,
@@ -309,7 +303,7 @@ class KTCMIS { @@ -309,7 +303,7 @@ class KTCMIS {
309 * @param int $skipCount 303 * @param int $skipCount
310 * @return array $descendants 304 * @return array $descendants
311 */ 305 */
312 - function getChildren($repositoryId, $folderId, $includeAllowableActions, $includeRelationships, 306 + public function getChildren($repositoryId, $folderId, $includeAllowableActions, $includeRelationships,
313 $typeID = 'Any', $filter = '', $maxItems = 0, $skipCount = 0) 307 $typeID = 'Any', $filter = '', $maxItems = 0, $skipCount = 0)
314 { 308 {
315 // TODO paging 309 // TODO paging
@@ -325,8 +319,6 @@ class KTCMIS { @@ -325,8 +319,6 @@ class KTCMIS {
325 } 319 }
326 320
327 $children = CMISUtil::decodeObjectHierarchy($childrenResult, 'child'); 321 $children = CMISUtil::decodeObjectHierarchy($childrenResult, 'child');
328 -// $children = array(array('properties' => array('objectId' => 'D2', 'typeId' => 'Document', 'name' => 'test document'),  
329 -// 'child' => null));  
330 322
331 return array( 323 return array(
332 "status_code" => 0, 324 "status_code" => 0,
@@ -345,7 +337,7 @@ class KTCMIS { @@ -345,7 +337,7 @@ class KTCMIS {
345 * @param string $filter 337 * @param string $filter
346 * @return ancestry[] 338 * @return ancestry[]
347 */ 339 */
348 - function getFolderParent($repositoryId, $folderId, $includeAllowableActions, $includeRelationships, $returnToRoot, $filter = '') 340 + public function getFolderParent($repositoryId, $folderId, $includeAllowableActions, $includeRelationships, $returnToRoot, $filter = '')
349 { 341 {
350 $ancestryResult = $this->NavigationService->getFolderParent($repositoryId, $folderId, $includeAllowableActions, 342 $ancestryResult = $this->NavigationService->getFolderParent($repositoryId, $folderId, $includeAllowableActions,
351 $includeRelationships, $returnToRoot); 343 $includeRelationships, $returnToRoot);
@@ -359,8 +351,6 @@ class KTCMIS { @@ -359,8 +351,6 @@ class KTCMIS {
359 } 351 }
360 352
361 $ancestry = CMISUtil::decodeObjectHierarchy($ancestryResult, 'child'); 353 $ancestry = CMISUtil::decodeObjectHierarchy($ancestryResult, 'child');
362 -// $ancestry = array(array('properties' => array('objectId' => 'D2', 'typeId' => 'Document', 'name' => 'test document'),  
363 -// 'child' => null));  
364 354
365 return array( 355 return array(
366 "status_code" => 0, 356 "status_code" => 0,
@@ -368,42 +358,19 @@ class KTCMIS { @@ -368,42 +358,19 @@ class KTCMIS {
368 ); 358 );
369 } 359 }
370 360
371 - /**  
372 - * Gets the parents for the selected object  
373 - *  
374 - * @param string $repositoryId  
375 - * @param string $folderId  
376 - * @param boolean $includeAllowableActions  
377 - * @param boolean $includeRelationships  
378 - * @param string $filter  
379 - * @return ancestry[]  
380 - */  
381 - function getObjectParents($repositoryId, $objectId, $includeAllowableActions, $includeRelationships, $filter = '')  
382 - {  
383 - $ancestryResult = $this->NavigationService->getObjectParents($repositoryId, $objectId, $includeAllowableActions,  
384 - $includeRelationships);  
385 -  
386 - if (PEAR::isError($ancestryResult))  
387 - {  
388 - return array(  
389 - "status_code" => 1,  
390 - "message" => "Failed getting ancestry for object"  
391 - );  
392 - } 361 +}
393 362
394 - $ancestry = CMISUtil::decodeObjectHierarchy($ancestryResult, 'child');  
395 -// $ancestry = array(array('properties' => array('objectId' => 'D2', 'typeId' => 'Document', 'name' => 'test document'),  
396 -// 'child' => null)); 363 +/**
  364 + * Handles requests for and actions on Folders and Documents
  365 + */
  366 +class KTObjectService extends KTCMISBase {
397 367
398 -// $ancestry = array(array('properties' => array(array('property' => array('name' => 'objectId', $value => 'D2')),  
399 -// array('property' => array('name' => 'typeId', $value => 'Document')),  
400 -// array('property' => array('name' => 'name', $value => 'test document')))),  
401 -// 'child' => null); 368 + protected $ObjectService;
402 369
403 - return array(  
404 - "status_code" => 0,  
405 - "results" => $ancestry  
406 - ); 370 + public function __construct()
  371 + {
  372 + // instantiate underlying CMIS service
  373 + $this->ObjectService = new CMISObjectService();
407 } 374 }
408 375
409 /** 376 /**
@@ -417,7 +384,7 @@ class KTCMIS { @@ -417,7 +384,7 @@ class KTCMIS {
417 * @param string $filter 384 * @param string $filter
418 * @return properties[] 385 * @return properties[]
419 */ 386 */
420 - function getProperties($repositoryId, $objectId, $includeAllowableActions, $includeRelationships, 387 + public function getProperties($repositoryId, $objectId, $includeAllowableActions, $includeRelationships,
421 $returnVersion = false, $filter = '') 388 $returnVersion = false, $filter = '')
422 { 389 {
423 $propertiesResult = $this->ObjectService->getProperties($repositoryId, $objectId, $includeAllowableActions, $includeRelationships); 390 $propertiesResult = $this->ObjectService->getProperties($repositoryId, $objectId, $includeAllowableActions, $includeRelationships);
@@ -429,7 +396,7 @@ class KTCMIS { @@ -429,7 +396,7 @@ class KTCMIS {
429 "message" => "Failed getting properties for object" 396 "message" => "Failed getting properties for object"
430 ); 397 );
431 } 398 }
432 -// echo '<pre>'.print_r($propertiesResult, true).'</pre>'; 399 +
433 // will need to convert to array format, so: 400 // will need to convert to array format, so:
434 $propertyCollection['objectId'] = $propertiesResult->getValue('objectId'); 401 $propertyCollection['objectId'] = $propertiesResult->getValue('objectId');
435 $propertyCollection['URI'] = $propertiesResult->getValue('URI'); 402 $propertyCollection['URI'] = $propertiesResult->getValue('URI');
@@ -441,19 +408,13 @@ class KTCMIS { @@ -441,19 +408,13 @@ class KTCMIS {
441 $propertyCollection['changeToken'] = $propertiesResult->getValue('changeToken'); 408 $propertyCollection['changeToken'] = $propertiesResult->getValue('changeToken');
442 409
443 $properties = array(array('properties' => $propertyCollection, 'child' => null)); 410 $properties = array(array('properties' => $propertyCollection, 'child' => null));
444 -// echo '<pre>'.print_r($properties, true).'</pre>';  
445 -//  
446 -// $properties = array(array('properties' => array('objectId' => 'F2', 'URI' => '', 'typeId' => 'Document',  
447 -// 'createdBy' => 'Administrator', 'creationDate' => '1 June 2009',  
448 -// 'lastModifiedBy' => 'Administrator', 'lastModificationDate' => '1 June 2009',  
449 -// 'changeToken' => ''),  
450 -// 'child' => null));  
451 411
452 return array( 412 return array(
453 "status_code" => 0, 413 "status_code" => 0,
454 "results" => $properties 414 "results" => $properties
455 ); 415 );
456 } 416 }
  417 +
457 } 418 }
458 419
459 ?> 420 ?>
ktcmis/objecttypes/CMISDocumentObject.inc.php renamed to lib/api/ktcmis/objecttypes/CMISDocumentObject.inc.php
@@ -107,7 +107,7 @@ class CMISDocumentObject extends CMISBaseObject { @@ -107,7 +107,7 @@ class CMISDocumentObject extends CMISBaseObject {
107 107
108 $objectProperties = $object->get_detail(); 108 $objectProperties = $object->get_detail();
109 109
110 - $this->_setPropertyInternal('objectId', CMISUtil::encodeObjectId($this->typeId, $objectProperties['document_id'])); 110 + $this->_setPropertyInternal('ObjectId', CMISUtil::encodeObjectId($this->typeId, $objectProperties['document_id']));
111 // prevent doubled '/' chars 111 // prevent doubled '/' chars
112 $uri = preg_replace_callback('/([^:]\/)\//', 112 $uri = preg_replace_callback('/([^:]\/)\//',
113 create_function('$matches', 'return $matches[1];'), 113 create_function('$matches', 'return $matches[1];'),
@@ -116,28 +116,28 @@ class CMISDocumentObject extends CMISBaseObject { @@ -116,28 +116,28 @@ class CMISDocumentObject extends CMISBaseObject {
116 . $objectProperties['document_id']); 116 . $objectProperties['document_id']);
117 // NOTE what about instead creating a downloadable version with appropriate link? see ktapi::download_document 117 // NOTE what about instead creating a downloadable version with appropriate link? see ktapi::download_document
118 // also ktapidocument::get_download_url 118 // also ktapidocument::get_download_url
119 - $this->_setPropertyInternal('Uri', $uri); 119 + $this->_setPropertyInternal('URI', $uri);
120 // TODO what is this? Assuming it is the object type id, and not OUR document type? 120 // TODO what is this? Assuming it is the object type id, and not OUR document type?
121 - $this->_setPropertyInternal('typeId', $this->getAttribute('typeId'));  
122 - $this->_setPropertyInternal('createdBy', $objectProperties['created_by']);  
123 - $this->_setPropertyInternal('creationDate', $objectProperties['created_date']);  
124 - $this->_setPropertyInternal('lastModifiedBy', $objectProperties['modified_by']);  
125 - $this->_setPropertyInternal('lastModificationDate', $objectProperties['modified_date']);  
126 - $this->_setPropertyInternal('changeToken', null);  
127 - $this->_setPropertyInternal('name', $objectProperties['title']);  
128 - $this->_setPropertyInternal('isImmutable', $objectProperties['is_immutable']); 121 + $this->_setPropertyInternal('ObjectTypeId', $this->getAttribute('typeId'));
  122 + $this->_setPropertyInternal('CreatedBy', $objectProperties['created_by']);
  123 + $this->_setPropertyInternal('CreationDate', $objectProperties['created_date']);
  124 + $this->_setPropertyInternal('LastModifiedBy', $objectProperties['modified_by']);
  125 + $this->_setPropertyInternal('LastModificationDate', $objectProperties['modified_date']);
  126 + $this->_setPropertyInternal('ChangeToken', null);
  127 + $this->_setPropertyInternal('Name', $objectProperties['title']);
  128 + $this->_setPropertyInternal('IsImmutable', $objectProperties['is_immutable']);
129 // NOTE if access to older versions is allowed, this will need to be checked, else just set to yes 129 // NOTE if access to older versions is allowed, this will need to be checked, else just set to yes
130 // see ktapi::get_document_version_history 130 // see ktapi::get_document_version_history
131 // NOTE see ktapi::is_latest_version 131 // NOTE see ktapi::is_latest_version
132 - $this->_setPropertyInternal('isLatestVersion', true);  
133 - $this->_setPropertyInternal('isMajorVersion', (strstr($objectProperties['version'], '.') ? false : true)); 132 + $this->_setPropertyInternal('IsLatestVersion', true);
  133 + $this->_setPropertyInternal('IsMajorVersion', (strstr($objectProperties['version'], '.') ? false : true));
134 // NOTE if access to older versions is allowed, this will need to be checked, else just set to yes 134 // NOTE if access to older versions is allowed, this will need to be checked, else just set to yes
135 // see ktapi::get_document_version_history 135 // see ktapi::get_document_version_history
136 // NOTE see ktapi::is_latest_version 136 // NOTE see ktapi::is_latest_version
137 - $this->_setPropertyInternal('isLatestMajorVersion', true);  
138 - $this->_setPropertyInternal('versionLabel', $objectProperties['version']); 137 + $this->_setPropertyInternal('IsLatestMajorVersion', true);
  138 + $this->_setPropertyInternal('VersionLabel', $objectProperties['version']);
139 // TODO what determines this, do we have anything? 139 // TODO what determines this, do we have anything?
140 - $this->_setPropertyInternal('versionSeriesId', null); 140 + $this->_setPropertyInternal('VersionSeriesId', null);
141 if ($objectProperties['checked_out_by'] != 'n/a') 141 if ($objectProperties['checked_out_by'] != 'n/a')
142 { 142 {
143 $checkedOut = true; 143 $checkedOut = true;
@@ -151,18 +151,18 @@ class CMISDocumentObject extends CMISBaseObject { @@ -151,18 +151,18 @@ class CMISDocumentObject extends CMISBaseObject {
151 $checkedOutBy = null; 151 $checkedOutBy = null;
152 $checkedOutId = null; 152 $checkedOutId = null;
153 } 153 }
154 - $this->_setPropertyInternal('isVersionSeriesCheckedOut', $checkedOut);  
155 - $this->_setPropertyInternal('versionSeriesCheckedOutBy', $checkedOutBy); 154 + $this->_setPropertyInternal('IsVersionSeriesCheckedOut', $checkedOut);
  155 + $this->_setPropertyInternal('VersionSeriesCheckedOutBy', $checkedOutBy);
156 // TODO presumably this is the ID of the Private Working Copy created on checkout? 156 // TODO presumably this is the ID of the Private Working Copy created on checkout?
157 // will find out more when we do checkout/checkin 157 // will find out more when we do checkout/checkin
158 - $this->_setPropertyInternal('versionSeriesCheckedOutId', $checkedOutId); 158 + $this->_setPropertyInternal('VersionSeriesCheckedOutId', $checkedOutId);
159 // TODO currently not returned by KnowledgeTree? 159 // TODO currently not returned by KnowledgeTree?
160 - $this->_setPropertyInternal('checkinComment', null); 160 + $this->_setPropertyInternal('CheckinComment', null);
161 // TODO if we implement content streams 161 // TODO if we implement content streams
162 - $this->_setPropertyInternal('contentStreamLength', null);  
163 - $this->_setPropertyInternal('contentStreamMimeType', null);  
164 - $this->_setPropertyInternal('contentStreamFilename', null);  
165 - $this->_setPropertyInternal('contentStreamUri', null); 162 + $this->_setPropertyInternal('ContentStreamLength', null);
  163 + $this->_setPropertyInternal('ContentStreamMimeType', null);
  164 + $this->_setPropertyInternal('ContentStreamFilename', null);
  165 + $this->_setPropertyInternal('ContentStreamUri', null);
166 } 166 }
167 167
168 } 168 }
ktcmis/objecttypes/CMISFolderObject.inc.php renamed to lib/api/ktcmis/objecttypes/CMISFolderObject.inc.php
@@ -86,7 +86,7 @@ class CMISFolderObject extends CMISBaseObject { @@ -86,7 +86,7 @@ class CMISFolderObject extends CMISBaseObject {
86 86
87 $objectProperties = $object->get_detail(); 87 $objectProperties = $object->get_detail();
88 88
89 - $this->_setPropertyInternal('objectId', CMISUtil::encodeObjectId($this->typeId, $objectProperties['id'])); 89 + $this->_setPropertyInternal('ObjectId', CMISUtil::encodeObjectId($this->typeId, $objectProperties['id']));
90 // prevent doubled '/' chars 90 // prevent doubled '/' chars
91 $uri = preg_replace_callback('/([^:]\/)\//', 91 $uri = preg_replace_callback('/([^:]\/)\//',
92 create_function('$matches', 'return $matches[1];'), 92 create_function('$matches', 'return $matches[1];'),
@@ -94,20 +94,20 @@ class CMISFolderObject extends CMISBaseObject { @@ -94,20 +94,20 @@ class CMISFolderObject extends CMISBaseObject {
94 . '/browse.php?fFolderId=' 94 . '/browse.php?fFolderId='
95 . $objectProperties['id']); 95 . $objectProperties['id']);
96 // TODO this url is probably incorrect...needs to be checked 96 // TODO this url is probably incorrect...needs to be checked
97 - $this->_setPropertyInternal('Uri', $uri); 97 + $this->_setPropertyInternal('URI', $uri);
98 // TODO what is this? Assuming it is the object type id, and not OUR document type? 98 // TODO what is this? Assuming it is the object type id, and not OUR document type?
99 - $this->_setPropertyInternal('typeId', $this->getAttribute('typeId'));  
100 - $this->_setPropertyInternal('createdBy', $objectProperties['created_by']); 99 + $this->_setPropertyInternal('ObjectTypeId', $this->getAttribute('typeId'));
  100 + $this->_setPropertyInternal('CreatedBy', $objectProperties['created_by']);
101 // TODO cannot currently retrieve via ktapi or regular folder code - add as with created by 101 // TODO cannot currently retrieve via ktapi or regular folder code - add as with created by
102 - $this->_setPropertyInternal('creationDate', $objectProperties['created_date']); 102 + $this->_setPropertyInternal('CreationDate', $objectProperties['created_date']);
103 // TODO cannot currently retrieve via ktapi or regular folder code - add as with created by 103 // TODO cannot currently retrieve via ktapi or regular folder code - add as with created by
104 - $this->_setPropertyInternal('lastModifiedBy', $objectProperties['modified_by']); 104 + $this->_setPropertyInternal('LastModifiedBy', $objectProperties['modified_by']);
105 // TODO cannot currently retrieve via ktapi or regular folder code - add as with created by 105 // TODO cannot currently retrieve via ktapi or regular folder code - add as with created by
106 - $this->_setPropertyInternal('lastModificationDate', $objectProperties['modified_date']);  
107 - $this->_setPropertyInternal('changeToken', null);  
108 - $this->_setPropertyInternal('name', $objectProperties['folder_name']);  
109 - $this->_setPropertyInternal('parentId', $objectProperties['parent_id']);  
110 - $this->_setPropertyInternal('allowedChildObjectTypeIds', array('Document', 'Folder')); 106 + $this->_setPropertyInternal('LastModificationDate', $objectProperties['modified_date']);
  107 + $this->_setPropertyInternal('ChangeToken', null);
  108 + $this->_setPropertyInternal('Name', $objectProperties['folder_name']);
  109 + $this->_setPropertyInternal('ParentId', $objectProperties['parent_id']);
  110 + $this->_setPropertyInternal('AllowedChildObjectTypeIds', array('Document', 'Folder'));
111 } 111 }
112 112
113 } 113 }
ktcmis/services/CMISNavigationService.inc.php renamed to lib/api/ktcmis/services/CMISNavigationService.inc.php
@@ -48,7 +48,12 @@ class CMISNavigationService { @@ -48,7 +48,12 @@ class CMISNavigationService {
48 48
49 protected $ktapi; 49 protected $ktapi;
50 50
51 - function CMISNavigationService(&$ktapi) 51 + /**
  52 + * Sets the interface to be used to query the repository
  53 + *
  54 + * @param object $ktapi The KnowledgeTree API interface
  55 + */
  56 + function setInterface(&$ktapi)
52 { 57 {
53 $this->ktapi = $ktapi; 58 $this->ktapi = $ktapi;
54 } 59 }
ktcmis/services/CMISObjectService.inc.php renamed to lib/api/ktcmis/services/CMISObjectService.inc.php
@@ -11,10 +11,10 @@ class CMISObjectService { @@ -11,10 +11,10 @@ class CMISObjectService {
11 11
12 protected $ktapi; 12 protected $ktapi;
13 13
14 - function CMISObjectService(&$ktapi)  
15 - {  
16 - $this->ktapi = $ktapi;  
17 - } 14 +// function CMISObjectService(&$ktapi)
  15 +// {
  16 +// $this->ktapi = $ktapi;
  17 +// }
18 18
19 /** 19 /**
20 * Fetches the properties for the specified object 20 * Fetches the properties for the specified object
ktcmis/services/CMISRepositoryService.inc.php renamed to lib/api/ktcmis/services/CMISRepositoryService.inc.php
ktcmis/util/CMISUtil.inc.php renamed to lib/api/ktcmis/util/CMISUtil.inc.php
@@ -139,6 +139,7 @@ class CMISUtil { @@ -139,6 +139,7 @@ class CMISUtil {
139 $CMISObject = new CMISFolderObject($ktapi, $repositoryURI); 139 $CMISObject = new CMISFolderObject($ktapi, $repositoryURI);
140 break; 140 break;
141 } 141 }
  142 +
142 $CMISObject->get($object['id']); 143 $CMISObject->get($object['id']);
143 $CMISArray[$count]['object'] = $CMISObject; 144 $CMISArray[$count]['object'] = $CMISObject;
144 145
@@ -220,9 +221,13 @@ class CMISUtil { @@ -220,9 +221,13 @@ class CMISUtil {
220 $object = $entry['object']; 221 $object = $entry['object'];
221 $properties = $object->getProperties(); 222 $properties = $object->getProperties();
222 223
223 - $hierarchy[$key]['properties']['objectId'] = $properties->getValue('objectId');  
224 - $hierarchy[$key]['properties']['typeId'] = $properties->getValue('typeId');  
225 - $hierarchy[$key]['properties']['name'] = $properties->getValue('name'); 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']['ObjectTypeId'] = array('type' => $properties->getFieldType('ObjectTypeId'),
  228 + 'value' => $properties->getValue('ObjectTypeId'));
  229 + $hierarchy[$key]['properties']['Name'] = array('type' => $properties->getFieldType('Name'),
  230 + 'value' => $properties->getValue('Name'));
226 231
227 // if we have found a child/parent with one or more children/parents, recurse into the child/parent object 232 // if we have found a child/parent with one or more children/parents, recurse into the child/parent object
228 if (count($entry['items']) > 0) 233 if (count($entry['items']) > 0)
@@ -272,6 +277,18 @@ class CMISUtil { @@ -272,6 +277,18 @@ class CMISUtil {
272 return $array; 277 return $array;
273 } 278 }
274 279
  280 + /**
  281 + * Converts a boolean value to string representation
  282 + * If input is not true or false, return unaltered
  283 + *
  284 + * @param boolean/other $input
  285 + * @return string
  286 + */
  287 + function boolToString($input)
  288 + {
  289 + return (($input === true) ? 'true' : (($input === false) ? 'false' : $input));
  290 + }
  291 +
275 } 292 }
276 293
277 ?> 294 ?>