Commit fa3eed7c2edc89ac75ff3f38daea92dfb05a2fb3

Authored by Paul Barrett
1 parent 315d6be7

Fixed Drupal browsing and breadcrumb trail to work with single folder id browse structure

Committed by: Paul Barrett
lib/api/ktcmis/ktcmis.inc.php
@@ -64,24 +64,12 @@ class KTCMISBase { @@ -64,24 +64,12 @@ class KTCMISBase {
64 64
65 // we want all child classes to share the ktapi and session instances, no matter where they are set from, 65 // we want all child classes to share the ktapi and session instances, no matter where they are set from,
66 // so we declare them as static 66 // so we declare them as static
67 - /**  
68 - * KnowledgeTree API instance  
69 - *  
70 - * @var object  
71 - */  
72 static protected $ktapi; 67 static protected $ktapi;
73 - /**  
74 - * KnowledgeTree API Session Identifier  
75 - *  
76 - * @var object  
77 - */  
78 static protected $session; 68 static protected $session;
79 69
80 // TODO try to pick up existing session if possible, i.e. if the $session value is not empty 70 // TODO try to pick up existing session if possible, i.e. if the $session value is not empty
81 public function startSession($username, $password) 71 public function startSession($username, $password)
82 { 72 {
83 - self::$session = null;  
84 -  
85 if (is_null(self::$session)) 73 if (is_null(self::$session))
86 { 74 {
87 self::$ktapi = new KTAPI(); 75 self::$ktapi = new KTAPI();
@@ -90,11 +78,18 @@ class KTCMISBase { @@ -90,11 +78,18 @@ class KTCMISBase {
90 else 78 else
91 { 79 {
92 // add session restart code here 80 // add session restart code here
  81 + self::$session =& self::$ktapi->get_active_session(self::$session->get_sessionid());
93 } 82 }
94 -//var_dump(self::$ktapi); 83 +
  84 + //var_dump(self::$ktapi);
95 return self::$session; 85 return self::$session;
96 } 86 }
97 87
  88 + public function getInterface()
  89 + {
  90 + return self::$ktapi;
  91 + }
  92 +
98 // TODO what about destroying sessions? only on logout (which is not offered by the CMIS clients tested so far) 93 // TODO what about destroying sessions? only on logout (which is not offered by the CMIS clients tested so far)
99 } 94 }
100 95
@@ -255,9 +250,10 @@ class KTNavigationService extends KTCMISBase { @@ -255,9 +250,10 @@ class KTNavigationService extends KTCMISBase {
255 { 250 {
256 parent::startSession($username, $password); 251 parent::startSession($username, $password);
257 $this->setInterface(); 252 $this->setInterface();
  253 + return self::$session;
258 } 254 }
259 255
260 - function setInterface() 256 + public function setInterface()
261 { 257 {
262 $this->NavigationService->setInterface(self::$ktapi); 258 $this->NavigationService->setInterface(self::$ktapi);
263 } 259 }
@@ -441,16 +437,16 @@ class KTObjectService extends KTCMISBase { @@ -441,16 +437,16 @@ class KTObjectService extends KTCMISBase {
441 // instantiate underlying CMIS service 437 // instantiate underlying CMIS service
442 $this->ObjectService = new CMISObjectService(); 438 $this->ObjectService = new CMISObjectService();
443 } 439 }
444 - 440 +
445 public function startSession($username, $password) 441 public function startSession($username, $password)
446 { 442 {
447 parent::startSession($username, $password); 443 parent::startSession($username, $password);
448 $this->setInterface(); 444 $this->setInterface();
  445 + return self::$session;
449 } 446 }
450 447
451 - function setInterface() 448 + public function setInterface()
452 { 449 {
453 -// var_dump(self::$ktapi);  
454 $this->ObjectService->setInterface(self::$ktapi); 450 $this->ObjectService->setInterface(self::$ktapi);
455 } 451 }
456 452
webservice/atompub/cmis/KT_cmis_atom_server.services.inc.php
@@ -24,23 +24,31 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service @@ -24,23 +24,31 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service
24 $repositoryId = $repositories[0]['repositoryId']; 24 $repositoryId = $repositories[0]['repositoryId'];
25 //var_dump($RepositoryService->ktapi); 25 //var_dump($RepositoryService->ktapi);
26 // $folderId = $this->getFolderData(); 26 // $folderId = $this->getFolderData();
  27 +
27 if (urldecode($this->params[0]) == 'Root Folder') 28 if (urldecode($this->params[0]) == 'Root Folder')
28 { 29 {
29 $folderId = CMISUtil::encodeObjectId('Folder', 1); 30 $folderId = CMISUtil::encodeObjectId('Folder', 1);
30 $folderName = urldecode($this->params[0]); 31 $folderName = urldecode($this->params[0]);
31 } 32 }
  33 + // this is a bit of a hack, but then it's to accomodate a bit of a hack to work with the knowledgetree/drupal cmis modules...
  34 + else if ($this->params[0] == 'path')
  35 + {
  36 + $ktapi =& $RepositoryService->getInterface();
  37 + $folderId = KT_cmis_atom_service_helper::getFolderId($this->params, $ktapi);
  38 +// echo "DA FOLDER ID IS $folderId<BR>";
  39 + }
32 else 40 else
33 { 41 {
34 $folderId = $this->params[0]; 42 $folderId = $this->params[0];
35 - // get folder name from id, using the ObjectService methods  
36 - $ObjectService = new ObjectService();  
37 -// var_dump($ObjectService->ktapi);  
38 - $ObjectService->setInterface();  
39 - $cmisProps = $ObjectService->getProperties($repositoryId, $folderId, false, false);  
40 -// var_dump($cmisObject);  
41 -// $props = $cmisObject->getProperties();  
42 -// var_dump($props);  
43 - $folderName = $cmisProps['properties']['Name']['value']; 43 +// // get folder name from id, using the ObjectService methods
  44 +// $ObjectService = new ObjectService();
  45 +//// var_dump($ObjectService->ktapi);
  46 +// $ObjectService->setInterface();
  47 +// $cmisProps = $ObjectService->getProperties($repositoryId, $folderId, false, false);
  48 +//// var_dump($cmisObject);
  49 +//// $props = $cmisObject->getProperties();
  50 +//// var_dump($props);
  51 +// $folderName = $cmisProps['properties']['Name']['value'];
44 } 52 }
45 53
46 $username = $password = 'admin'; 54 $username = $password = 'admin';
@@ -53,6 +61,7 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service @@ -53,6 +61,7 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service
53 } 61 }
54 else 62 else
55 { 63 {
  64 +// echo "UHUHUHUHUH: $folderId<BR>\n";
56 $ObjectService = new ObjectService(); 65 $ObjectService = new ObjectService();
57 $ObjectService->startSession($username, $password); 66 $ObjectService->startSession($username, $password);
58 67
webservice/atompub/cmis/KT_cmis_atom_service_helper.inc.php
@@ -23,43 +23,45 @@ class KT_cmis_atom_service_helper { @@ -23,43 +23,45 @@ class KT_cmis_atom_service_helper {
23 23
24 $id = $cmisEntry['properties']['ObjectId']['value']; 24 $id = $cmisEntry['properties']['ObjectId']['value'];
25 $entry = $feed->newEntry(); 25 $entry = $feed->newEntry();
26 - $feed->newField('id', $id, $entry); 26 + $feed->newField('id', 'urn:uuid:' . $id, $entry);
27 27
28 // links 28 // links
  29 + // TODO check parent link is correct, fix if needed
29 $link = $feed->newElement('link'); 30 $link = $feed->newElement('link');
30 $link->appendChild($feed->newAttr('rel','cmis-parent')); 31 $link->appendChild($feed->newAttr('rel','cmis-parent'));
31 - $link->appendChild($feed->newAttr('href', CMIS_APP_BASE_URI . 'folder/' . $path)); 32 + $link->appendChild($feed->newAttr('href', CMIS_APP_BASE_URI . $feed->workspace . '/folder/' . $path));
32 $entry->appendChild($link); 33 $entry->appendChild($link);
33 34
34 if (strtolower($cmisEntry['properties']['ObjectTypeId']['value']) == 'folder') 35 if (strtolower($cmisEntry['properties']['ObjectTypeId']['value']) == 'folder')
35 { 36 {
  37 + // TODO check parent link is correct, fix if needed
36 $link = $feed->newElement('link'); 38 $link = $feed->newElement('link');
37 $link->appendChild($feed->newAttr('rel','cmis-folderparent')); 39 $link->appendChild($feed->newAttr('rel','cmis-folderparent'));
38 - $link->appendChild($feed->newAttr('href', CMIS_APP_BASE_URI . 'folder/' . $path)); 40 + $link->appendChild($feed->newAttr('href', CMIS_APP_BASE_URI . $feed->workspace . '/folder/' . $path));
39 $entry->appendChild($link); 41 $entry->appendChild($link);
40 $link = $feed->newElement('link'); 42 $link = $feed->newElement('link');
41 $link->appendChild($feed->newAttr('rel','cmis-children')); 43 $link->appendChild($feed->newAttr('rel','cmis-children'));
42 - $link->appendChild($feed->newAttr('href', CMIS_APP_BASE_URI 44 + $link->appendChild($feed->newAttr('href', CMIS_APP_BASE_URI . $feed->workspace . '/'
43 . strtolower($cmisEntry['properties']['ObjectTypeId']['value']) 45 . strtolower($cmisEntry['properties']['ObjectTypeId']['value'])
44 - . '/' . $path . '/' . urlencode($cmisEntry['properties']['Name']['value']) 46 + . '/' . $path . '/' . rawurlencode($cmisEntry['properties']['Name']['value'])
45 . '/children')); 47 . '/children'));
46 $entry->appendChild($link); 48 $entry->appendChild($link);
47 $link = $feed->newElement('link'); 49 $link = $feed->newElement('link');
48 $link->appendChild($feed->newAttr('rel','cmis-descendants')); 50 $link->appendChild($feed->newAttr('rel','cmis-descendants'));
49 - $link->appendChild($feed->newAttr('href', CMIS_APP_BASE_URI 51 + $link->appendChild($feed->newAttr('href', CMIS_APP_BASE_URI . $feed->workspace . '/'
50 . strtolower($cmisEntry['properties']['ObjectTypeId']['value']) 52 . strtolower($cmisEntry['properties']['ObjectTypeId']['value'])
51 - . '/' . $path . '/' . urlencode($cmisEntry['properties']['Name']['value']) 53 + . '/' . $path . '/' . rawurlencode($cmisEntry['properties']['Name']['value'])
52 . '/descendants')); 54 . '/descendants'));
53 $entry->appendChild($link); 55 $entry->appendChild($link);
54 } 56 }
55 57
56 $link = $feed->newElement('link'); 58 $link = $feed->newElement('link');
57 $link->appendChild($feed->newAttr('rel','cmis-type')); 59 $link->appendChild($feed->newAttr('rel','cmis-type'));
58 - $link->appendChild($feed->newAttr('href', CMIS_APP_BASE_URI . 'type/' . strtolower($cmisEntry['properties']['ObjectTypeId']['value']))); 60 + $link->appendChild($feed->newAttr('href', CMIS_APP_BASE_URI . $feed->workspace . '/type/' . strtolower($cmisEntry['properties']['ObjectTypeId']['value'])));
59 $entry->appendChild($link); 61 $entry->appendChild($link);
60 $link = $feed->newElement('link'); 62 $link = $feed->newElement('link');
61 $link->appendChild($feed->newAttr('rel','cmis-repository')); 63 $link->appendChild($feed->newAttr('rel','cmis-repository'));
62 - $link->appendChild($feed->newAttr('href', CMIS_APP_BASE_URI . 'servicedocument')); 64 + $link->appendChild($feed->newAttr('href', CMIS_APP_BASE_URI . $feed->workspace . '/servicedocument'));
63 $entry->appendChild($link); 65 $entry->appendChild($link);
64 // end links 66 // end links
65 67
@@ -118,23 +120,23 @@ class KT_cmis_atom_service_helper { @@ -118,23 +120,23 @@ class KT_cmis_atom_service_helper {
118 // links 120 // links
119 $link = $feed->newElement('link'); 121 $link = $feed->newElement('link');
120 $link->appendChild($feed->newAttr('rel','self')); 122 $link->appendChild($feed->newAttr('rel','self'));
121 - $link->appendChild($feed->newAttr('href', CMIS_APP_BASE_URI . 'type/' . strtolower($type['typeId']))); 123 + $link->appendChild($feed->newAttr('href', CMIS_APP_BASE_URI . $feed->workspace . '/type/' . strtolower($type['typeId'])));
122 $entry->appendChild($link); 124 $entry->appendChild($link);
123 $link = $feed->newElement('link'); 125 $link = $feed->newElement('link');
124 $link->appendChild($feed->newAttr('rel','cmis-type')); 126 $link->appendChild($feed->newAttr('rel','cmis-type'));
125 - $link->appendChild($feed->newAttr('href', CMIS_APP_BASE_URI . 'type/' . strtolower($type['typeId']))); 127 + $link->appendChild($feed->newAttr('href', CMIS_APP_BASE_URI . $feed->workspace . '/type/' . strtolower($type['typeId'])));
126 $entry->appendChild($link); 128 $entry->appendChild($link);
127 $link = $feed->newElement('link'); 129 $link = $feed->newElement('link');
128 $link->appendChild($feed->newAttr('rel','cmis-children')); 130 $link->appendChild($feed->newAttr('rel','cmis-children'));
129 - $link->appendChild($feed->newAttr('href', CMIS_APP_BASE_URI . 'type/' . strtolower($type['typeId']) . '/children')); 131 + $link->appendChild($feed->newAttr('href', CMIS_APP_BASE_URI . $feed->workspace . '/type/' . strtolower($type['typeId']) . '/children'));
130 $entry->appendChild($link); 132 $entry->appendChild($link);
131 $link = $feed->newElement('link'); 133 $link = $feed->newElement('link');
132 $link->appendChild($feed->newAttr('rel','cmis-descendants')); 134 $link->appendChild($feed->newAttr('rel','cmis-descendants'));
133 - $link->appendChild($feed->newAttr('href', CMIS_APP_BASE_URI . 'type/' . strtolower($type['typeId']) . '/descendants')); 135 + $link->appendChild($feed->newAttr('href', CMIS_APP_BASE_URI . $feed->workspace . '/type/' . strtolower($type['typeId']) . '/descendants'));
134 $entry->appendChild($link); 136 $entry->appendChild($link);
135 $link = $feed->newElement('link'); 137 $link = $feed->newElement('link');
136 $link->appendChild($feed->newAttr('rel','cmis-repository')); 138 $link->appendChild($feed->newAttr('rel','cmis-repository'));
137 - $link->appendChild($feed->newAttr('href', CMIS_APP_BASE_URI . 'servicedocument')); 139 + $link->appendChild($feed->newAttr('href', CMIS_APP_BASE_URI . $feed->workspace . '/servicedocument'));
138 $entry->appendChild($link); 140 $entry->appendChild($link);
139 141
140 $entry->appendChild($feed->newElement('summary', $type['typeId'] . ' Type')); 142 $entry->appendChild($feed->newElement('summary', $type['typeId'] . ' Type'));
@@ -153,6 +155,47 @@ class KT_cmis_atom_service_helper { @@ -153,6 +155,47 @@ class KT_cmis_atom_service_helper {
153 return $feed; 155 return $feed;
154 } 156 }
155 157
  158 + /**
  159 + * Fetches the CMIS objectId based on the path
  160 + *
  161 + * @param array $path
  162 + * @param object $ktapi KTAPI instance
  163 + */
  164 + // TODO make this much more efficient than this messy method
  165 + static public function getFolderId($path, &$ktapi)
  166 + {
  167 +// static public function getFolderData($query, &$folderName, &$tree)
  168 +// $ktapi = new KTAPI();
  169 +// $ktapi->start_session('admin', 'admin');
  170 +
  171 + // lose first item
  172 + array_shift($path);
  173 +
  174 + $numQ = count($path);
  175 +// echo $numQ."<BR>";
  176 + $numFolders = $numQ;
  177 + $folderId = 1;
  178 +// echo $numFolders."<BR>";
  179 +
  180 + $start = 0;
  181 + while($start < $numFolders)
  182 + {
  183 + $name = $path[$numQ-$numFolders+$start];
  184 + // hack to fix drupal url encoding issue
  185 + $name = str_replace('%2520', '%20', $name);
  186 +
  187 +// echo $name."<BR>";
  188 +
  189 + $folderName = urldecode($name);
  190 +// echo $folderName."<BR>";
  191 + $folder = $ktapi->get_folder_by_name($folderName, $folderId);
  192 + $folderId = $folder->get_folderid();
  193 + ++$start;
  194 + }
  195 +
  196 + return CMISUtil::encodeObjectId('Folder', $folderId);
  197 + }
  198 +
156 } 199 }
157 200
158 ?> 201 ?>
webservice/atompub/cmis/index.php
@@ -45,6 +45,7 @@ define(&#39;KT_APP_BASE_URI&#39;, &quot;http://&quot;.$_SERVER[&#39;HTTP_HOST&#39;].dirname($_SERVER[&#39;PHP_ @@ -45,6 +45,7 @@ define(&#39;KT_APP_BASE_URI&#39;, &quot;http://&quot;.$_SERVER[&#39;HTTP_HOST&#39;].dirname($_SERVER[&#39;PHP_
45 define('KT_APP_SYSTEM_URI', "http://".$_SERVER['HTTP_HOST']); 45 define('KT_APP_SYSTEM_URI', "http://".$_SERVER['HTTP_HOST']);
46 define('KT_ATOM_LIB_FOLDER', '../../classes/atompub/'); 46 define('KT_ATOM_LIB_FOLDER', '../../classes/atompub/');
47 47
  48 +// should make the "dms" part dynamic but right now this is needed fast
48 define('CMIS_APP_BASE_URI', trim(KT_APP_BASE_URI, '/')); 49 define('CMIS_APP_BASE_URI', trim(KT_APP_BASE_URI, '/'));
49 define('CMIS_APP_SYSTEM_URI', KT_APP_SYSTEM_URI); 50 define('CMIS_APP_SYSTEM_URI', KT_APP_SYSTEM_URI);
50 define('CMIS_ATOM_LIB_FOLDER', trim(KT_ATOM_LIB_FOLDER, '/') . '/cmis/'); 51 define('CMIS_ATOM_LIB_FOLDER', trim(KT_ATOM_LIB_FOLDER, '/') . '/cmis/');
@@ -74,7 +75,7 @@ $APP = new KT_cmis_atom_server(); @@ -74,7 +75,7 @@ $APP = new KT_cmis_atom_server();
74 $APP->initServiceDocument(); 75 $APP->initServiceDocument();
75 // FIXME HACK! this should not happen every time, ONLY on a service doc request 76 // FIXME HACK! this should not happen every time, ONLY on a service doc request
76 // User defined title tag 77 // User defined title tag
77 -$APP->addWorkspaceTag('dms','atom:title','KnowledgeTree DMS'); 78 +$APP->addWorkspaceTag('dms','atom:title',$APP->repositoryInfo['repositoryName']);
78 79
79 /** 80 /**
80 * Register Services 81 * Register Services
@@ -92,9 +93,9 @@ $APP-&gt;addWorkspaceTag(&#39;dms&#39;,&#39;atom:title&#39;,&#39;KnowledgeTree DMS&#39;); @@ -92,9 +93,9 @@ $APP-&gt;addWorkspaceTag(&#39;dms&#39;,&#39;atom:title&#39;,&#39;KnowledgeTree DMS&#39;);
92 // TODO consider a registerServices function which will, dependant on what is requested, register the appropriate services, keep the logic out of the index file 93 // TODO consider a registerServices function which will, dependant on what is requested, register the appropriate services, keep the logic out of the index file
93 // FIXME HACK! this should not happen every time, ONLY on a service doc request, except for request specific collection links 94 // FIXME HACK! this should not happen every time, ONLY on a service doc request, except for request specific collection links
94 $APP->registerService('dms', 'folder', 'KT_cmis_atom_service_folder', 'Root Folder Children Collection', 95 $APP->registerService('dms', 'folder', 'KT_cmis_atom_service_folder', 'Root Folder Children Collection',
95 - array($APP->repositoryInfo['rootFolderId'], 'children'), 'root-children'); 96 + array(rawurlencode($APP->repositoryInfo['rootFolderId']), 'children'), 'root-children');
96 $APP->registerService('dms', 'folder', 'KT_cmis_atom_service_folder', 'Root Folder Children Collection', 97 $APP->registerService('dms', 'folder', 'KT_cmis_atom_service_folder', 'Root Folder Children Collection',
97 - array($APP->repositoryInfo['rootFolderId'], 'descendants'), 'root-descendants'); 98 + array(rawurlencode($APP->repositoryInfo['rootFolderId']), 'descendants'), 'root-descendants');
98 $APP->registerService('dms', 'checkedout', 'KT_cmis_atom_service_checkedout', 'Checked Out Document Collection', null, 'checkedout'); 99 $APP->registerService('dms', 'checkedout', 'KT_cmis_atom_service_checkedout', 'Checked Out Document Collection', null, 'checkedout');
99 $APP->registerService('dms', 'types', 'KT_cmis_atom_service_types', 'Object Type Collection', null, 'types-children'); 100 $APP->registerService('dms', 'types', 'KT_cmis_atom_service_types', 'Object Type Collection', null, 'types-children');
100 $APP->registerService('dms', 'types', 'KT_cmis_atom_service_types', 'Object Type Collection', null, 'types-descendants'); 101 $APP->registerService('dms', 'types', 'KT_cmis_atom_service_types', 'Object Type Collection', null, 'types-descendants');
webservice/classes/atompub/KT_atom_responseFeed.inc.php
@@ -4,11 +4,10 @@ class KT_atom_responseFeed extends KT_atom_baseDoc { @@ -4,11 +4,10 @@ class KT_atom_responseFeed extends KT_atom_baseDoc {
4 protected $baseURI=NULL; 4 protected $baseURI=NULL;
5 protected $feed=NULL; 5 protected $feed=NULL;
6 6
7 -  
8 - public function __construct($baseURI=NULL,$title=NULL,$link=NULL,$updated=NULL,$author=NULL,$id=NULL){ 7 + public function __construct($baseURI=NULL,$title=NULL,$link=NULL,$updated=NULL,$author=NULL,$id=NULL, $workspace = null){
9 parent::__construct(); 8 parent::__construct();
  9 + $this->baseURI = $baseURI;
10 $this->constructHeader(); 10 $this->constructHeader();
11 - $this->baseURI=$baseURI;  
12 } 11 }
13 12
14 protected function constructHeader(){ 13 protected function constructHeader(){
webservice/classes/atompub/KT_atom_server.inc.php
@@ -21,10 +21,11 @@ class KT_atom_server{ @@ -21,10 +21,11 @@ class KT_atom_server{
21 * 21 *
22 */ 22 */
23 public function execute(){ 23 public function execute(){
  24 +// $_SERVER['QUERY_STRING'] = urldecode($_SERVER['QUERY_STRING']);
24 $reqMethod=trim(strtoupper($_SERVER['REQUEST_METHOD'])); 25 $reqMethod=trim(strtoupper($_SERVER['REQUEST_METHOD']));
25 $queryArray=split('/',trim($_SERVER['QUERY_STRING'],'/')); 26 $queryArray=split('/',trim($_SERVER['QUERY_STRING'],'/'));
26 $rawRequest=@file_get_contents('php://input'); 27 $rawRequest=@file_get_contents('php://input');
27 - 28 +//echo "\n\n".rawurldecode($_SERVER['QUERY_STRING'])."<BR><BR>\n\n";
28 $workspace=strtolower(trim($queryArray[0])); 29 $workspace=strtolower(trim($queryArray[0]));
29 $serviceName=strtolower(trim($queryArray[1])); 30 $serviceName=strtolower(trim($queryArray[1]));
30 $requestParams=array_slice($queryArray,2); 31 $requestParams=array_slice($queryArray,2);
webservice/classes/atompub/cmis/KT_cmis_atom_responseFeed.inc.php
@@ -5,13 +5,17 @@ include_once(KT_ATOM_LIB_FOLDER.&#39;KT_atom_responseFeed.inc.php&#39;); @@ -5,13 +5,17 @@ include_once(KT_ATOM_LIB_FOLDER.&#39;KT_atom_responseFeed.inc.php&#39;);
5 class KT_cmis_atom_responseFeed extends KT_atom_responseFeed { 5 class KT_cmis_atom_responseFeed extends KT_atom_responseFeed {
6 6
7 // override and extend as needed 7 // override and extend as needed
  8 +
  9 + public $workspace = null;
8 10
9 public function __construct($baseURI = NULL, $title = NULL, $link = NULL, $updated = NULL, $author = NULL, $id = NULL) 11 public function __construct($baseURI = NULL, $title = NULL, $link = NULL, $updated = NULL, $author = NULL, $id = NULL)
10 { 12 {
  13 + $queryArray = split('/', trim($_SERVER['QUERY_STRING'], '/'));
  14 + $this->workspace = strtolower(trim($queryArray[0]));
11 $this->id = $id; 15 $this->id = $id;
12 $this->title = $title; 16 $this->title = $title;
13 17
14 - parent::__construct(); 18 + parent::__construct($baseURI, $title, $link, $updated, $author, $id);
15 } 19 }
16 20
17 protected function constructHeader() 21 protected function constructHeader()
webservice/classes/atompub/cmis/KT_cmis_atom_server.inc.php
@@ -34,13 +34,19 @@ class KT_cmis_atom_server extends KT_atom_server { @@ -34,13 +34,19 @@ class KT_cmis_atom_server extends KT_atom_server {
34 $ws = $service->newWorkspace(); 34 $ws = $service->newWorkspace();
35 35
36 $hadDetail=false; 36 $hadDetail=false;
37 - if(isset($this->workspaceDetail[$workspace]))if(is_array($this->workspaceDetail[$workspace])){  
38 - foreach ($this->workspaceDetail[$workspace] as $wsTag=>$wsValue){  
39 - $ws->appendChild($service->newElement($wsTag,$wsValue));  
40 - $hadDetail=true;  
41 - }  
42 - }  
43 - if(!$hadDetail){ 37 + if(isset($this->workspaceDetail[$workspace]))
  38 + {
  39 + if(is_array($this->workspaceDetail[$workspace]))
  40 + {
  41 + foreach ($this->workspaceDetail[$workspace] as $wsTag=>$wsValue)
  42 + {
  43 + $ws->appendChild($service->newElement($wsTag,$wsValue));
  44 + $hadDetail=true;
  45 + }
  46 + }
  47 + }
  48 +
  49 + if(!$hadDetail) {
44 $ws->appendChild($service->newElement('atom:title',$workspace)); 50 $ws->appendChild($service->newElement('atom:title',$workspace));
45 } 51 }
46 52
@@ -52,7 +58,7 @@ class KT_cmis_atom_server extends KT_atom_server { @@ -52,7 +58,7 @@ class KT_cmis_atom_server extends KT_atom_server {
52 { 58 {
53 if ($key == 'rootFolderId') 59 if ($key == 'rootFolderId')
54 { 60 {
55 - $repoData = CMIS_APP_BASE_URI . 'folder/' . $repoData; 61 + $repoData = CMIS_APP_BASE_URI . $workspace . '/folder/' . rawurlencode($repoData);
56 } 62 }
57 63
58 if (!is_array($repoData)) 64 if (!is_array($repoData))