Commit 1de29d078e9b3a84d2f836846a7e12c6b5547d93
1 parent
e5942d35
Removed unwanted parent link in CMIS object properties response for the root folder
KTS-4447. CMIS folder properties for root folder should not include a link to the parent Fixed Committed by: Paul Barrett Reviewed by: Jarrett Jordaan
Showing
4 changed files
with
112 additions
and
67 deletions
lib/api/ktcmis/classes/CMISRepository.inc.php
| @@ -61,7 +61,7 @@ class CMISRepository { | @@ -61,7 +61,7 @@ class CMISRepository { | ||
| 61 | */ | 61 | */ |
| 62 | private $objectTypes; | 62 | private $objectTypes; |
| 63 | 63 | ||
| 64 | - function CMISRepository($repositoryId, $config = null) | 64 | + function __construct($repositoryId, $config = null) |
| 65 | { | 65 | { |
| 66 | $this->repositoryId = $repositoryId; | 66 | $this->repositoryId = $repositoryId; |
| 67 | $this->RepositoryInfo = new CMISRepositoryInfo(); | 67 | $this->RepositoryInfo = new CMISRepositoryInfo(); |
| @@ -94,6 +94,9 @@ class CMISRepository { | @@ -94,6 +94,9 @@ class CMISRepository { | ||
| 94 | // set info | 94 | // set info |
| 95 | foreach($config->repositoryInfo[0] as $field => $value) | 95 | foreach($config->repositoryInfo[0] as $field => $value) |
| 96 | { | 96 | { |
| 97 | +// if ($field == 'rootFolderId') { | ||
| 98 | +// $value = CMISUtil::encodeObjectId(FOLDER, $value); | ||
| 99 | +// } | ||
| 97 | $this->setRepositoryInfoField($field, (string)$value); | 100 | $this->setRepositoryInfoField($field, (string)$value); |
| 98 | } | 101 | } |
| 99 | 102 |
lib/api/ktcmis/util/CMISUtil.inc.php
| @@ -178,14 +178,14 @@ class CMISUtil { | @@ -178,14 +178,14 @@ class CMISUtil { | ||
| 178 | // if sub-array | 178 | // if sub-array |
| 179 | if (count($object['items']) > 0) | 179 | if (count($object['items']) > 0) |
| 180 | { | 180 | { |
| 181 | - $CMISArray[$count]['items'] = CMISUtil::createChildObjectHierarchy($object['items'], $repositoryURI, $ktapi); | 181 | + $CMISArray[$count]['items'] = self::createChildObjectHierarchy($object['items'], $repositoryURI, $ktapi); |
| 182 | } | 182 | } |
| 183 | } | 183 | } |
| 184 | else | 184 | else |
| 185 | { | 185 | { |
| 186 | // NOTE why is this necessary? That's what you get for not commenting it at the time | 186 | // NOTE why is this necessary? That's what you get for not commenting it at the time |
| 187 | // TODO comment this properly | 187 | // TODO comment this properly |
| 188 | - $CMISArray[$count] = CMISUtil::createChildObjectHierarchy($object, $repositoryURI, $ktapi); | 188 | + $CMISArray[$count] = self::createChildObjectHierarchy($object, $repositoryURI, $ktapi); |
| 189 | } | 189 | } |
| 190 | } | 190 | } |
| 191 | } | 191 | } |
| @@ -222,7 +222,7 @@ class CMISUtil { | @@ -222,7 +222,7 @@ class CMISUtil { | ||
| 222 | // if more parent elements | 222 | // if more parent elements |
| 223 | if (count($input) > 0) | 223 | if (count($input) > 0) |
| 224 | { | 224 | { |
| 225 | - $CMISElement['items'] = CMISUtil::createParentObjectHierarchy($input, $repositoryURI, $ktapi); | 225 | + $CMISElement['items'] = self::createParentObjectHierarchy($input, $repositoryURI, $ktapi); |
| 226 | } | 226 | } |
| 227 | 227 | ||
| 228 | $CMISArray[] = $CMISElement; | 228 | $CMISArray[] = $CMISElement; |
| @@ -252,7 +252,7 @@ class CMISUtil { | @@ -252,7 +252,7 @@ class CMISUtil { | ||
| 252 | $object = $entry['object']; | 252 | $object = $entry['object']; |
| 253 | $properties = $object->getProperties(); | 253 | $properties = $object->getProperties(); |
| 254 | 254 | ||
| 255 | - $hierarchy[$key] = CMISUtil::createObjectPropertiesEntry($properties); | 255 | + $hierarchy[$key] = self::createObjectPropertiesEntry($properties); |
| 256 | } | 256 | } |
| 257 | 257 | ||
| 258 | return $hierarchy; | 258 | return $hierarchy; |
| @@ -293,7 +293,7 @@ class CMISUtil { | @@ -293,7 +293,7 @@ class CMISUtil { | ||
| 293 | 'value' => $properties->getValue('Name')); | 293 | 'value' => $properties->getValue('Name')); |
| 294 | 294 | ||
| 295 | $object['properties']['ParentId'] = array('type' => $properties->getFieldType('ParentId'), | 295 | $object['properties']['ParentId'] = array('type' => $properties->getFieldType('ParentId'), |
| 296 | - 'value' => CMISUtil::encodeObjectId('Folder', | 296 | + 'value' => self::encodeObjectId('Folder', |
| 297 | $properties->getValue('ParentId'))); | 297 | $properties->getValue('ParentId'))); |
| 298 | 298 | ||
| 299 | $object['properties']['Uri'] = array('type' => $properties->getFieldType('Uri'), | 299 | $object['properties']['Uri'] = array('type' => $properties->getFieldType('Uri'), |
| @@ -350,7 +350,7 @@ class CMISUtil { | @@ -350,7 +350,7 @@ class CMISUtil { | ||
| 350 | /* | 350 | /* |
| 351 | // if we have found a child/parent with one or more children/parents, recurse into the child/parent object | 351 | // if we have found a child/parent with one or more children/parents, recurse into the child/parent object |
| 352 | if (count($entry['items']) > 0) { | 352 | if (count($entry['items']) > 0) { |
| 353 | - $object[$linkText] = CMISUtil::decodeObjectHierarchy($entry['items'], $linkText); | 353 | + $object[$linkText] = self::decodeObjectHierarchy($entry['items'], $linkText); |
| 354 | } | 354 | } |
| 355 | // NOTE may need to set a null value here in case webservices don't like it unset | 355 | // NOTE may need to set a null value here in case webservices don't like it unset |
| 356 | // so we'll set it just in case... | 356 | // so we'll set it just in case... |
| @@ -602,7 +602,7 @@ class CMISUtil { | @@ -602,7 +602,7 @@ class CMISUtil { | ||
| 602 | // TODO consider checking whether content is encoded (currently we expect encoded) | 602 | // TODO consider checking whether content is encoded (currently we expect encoded) |
| 603 | // TODO choose between this and the alternative decode function (see CMISUtil class) | 603 | // TODO choose between this and the alternative decode function (see CMISUtil class) |
| 604 | // this will require some basic benchmarking | 604 | // this will require some basic benchmarking |
| 605 | - $contentStream = CMISUtil::decodeChunkedContentStream($contentStream); | 605 | + $contentStream = self::decodeChunkedContentStream($contentStream); |
| 606 | 606 | ||
| 607 | // NOTE There is a function in CMISUtil to do this, written for the unit tests but since KTUploadManager exists | 607 | // NOTE There is a function in CMISUtil to do this, written for the unit tests but since KTUploadManager exists |
| 608 | // and has more functionality which could come in useful at some point I decided to go with that instead | 608 | // and has more functionality which could come in useful at some point I decided to go with that instead |
| @@ -613,6 +613,22 @@ class CMISUtil { | @@ -613,6 +613,22 @@ class CMISUtil { | ||
| 613 | 613 | ||
| 614 | return $tempfilename; | 614 | return $tempfilename; |
| 615 | } | 615 | } |
| 616 | + | ||
| 617 | + static public function getIdFromName($name, &$ktapi) | ||
| 618 | + { | ||
| 619 | + $folder = $ktapi->get_folder_by_name($name); | ||
| 620 | + | ||
| 621 | + return self::encodeObjectId(FOLDER, $folder->get_folderid()); | ||
| 622 | + } | ||
| 623 | + | ||
| 624 | + static public function isRootFolder($repositoryId, $folderId, &$ktapi) | ||
| 625 | + { | ||
| 626 | + $repository = new CMISRepository($repositoryId); | ||
| 627 | + $repositoryInfo = $repository->getRepositoryInfo(); | ||
| 628 | + $rootFolder = self::getIdFromName($repositoryInfo->getRootFolderId(), $ktapi); | ||
| 629 | + | ||
| 630 | + return $folderId == $rootFolder; | ||
| 631 | + } | ||
| 616 | 632 | ||
| 617 | } | 633 | } |
| 618 | 634 |
webservice/atompub/cmis/KT_cmis_atom_server.services.inc.php
| @@ -54,11 +54,9 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service { | @@ -54,11 +54,9 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service { | ||
| 54 | * This includes children and tree/descendant listings as well as individual folder retrieval | 54 | * This includes children and tree/descendant listings as well as individual folder retrieval |
| 55 | */ | 55 | */ |
| 56 | public function GET_action() | 56 | public function GET_action() |
| 57 | - { | ||
| 58 | - $RepositoryService = new RepositoryService(); | ||
| 59 | - $repositories = $RepositoryService->getRepositories(); | ||
| 60 | - $repositoryId = $repositories[0]['repositoryId']; | ||
| 61 | - | 57 | + { |
| 58 | + $repositoryId = KT_cmis_atom_service_helper::getRepositoryId($RepositoryService); | ||
| 59 | + | ||
| 62 | // TODO implement full path/node separation as with Alfresco - i.e. path requests come in on path/ and node requests come in on node/ | 60 | // TODO implement full path/node separation as with Alfresco - i.e. path requests come in on path/ and node requests come in on node/ |
| 63 | // path request e.g.: path/Root Folder/DroppedDocuments | 61 | // path request e.g.: path/Root Folder/DroppedDocuments |
| 64 | // node request e.g.: node/F1/children | 62 | // node request e.g.: node/F1/children |
| @@ -134,9 +132,7 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service { | @@ -134,9 +132,7 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service { | ||
| 134 | */ | 132 | */ |
| 135 | public function POST_action() | 133 | public function POST_action() |
| 136 | { | 134 | { |
| 137 | - $RepositoryService = new RepositoryService(); | ||
| 138 | - $repositories = $RepositoryService->getRepositories(); | ||
| 139 | - $repositoryId = $repositories[0]['repositoryId']; | 135 | + $repositoryId = KT_cmis_atom_service_helper::getRepositoryId($RepositoryService); |
| 140 | 136 | ||
| 141 | // set default action, objectId and typeId | 137 | // set default action, objectId and typeId |
| 142 | $action = 'create'; | 138 | $action = 'create'; |
| @@ -246,12 +242,10 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service { | @@ -246,12 +242,10 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service { | ||
| 246 | // we COULD call deleteObject but when we delete a folder we expect to be trying to delete | 242 | // we COULD call deleteObject but when we delete a folder we expect to be trying to delete |
| 247 | // the folder and all content. | 243 | // the folder and all content. |
| 248 | 244 | ||
| 249 | - $RepositoryService = new RepositoryService(); | 245 | + $repositoryId = KT_cmis_atom_service_helper::getRepositoryId($RepositoryService); |
| 246 | + | ||
| 250 | $ObjectService = new ObjectService(KT_cmis_atom_service_helper::getKt()); | 247 | $ObjectService = new ObjectService(KT_cmis_atom_service_helper::getKt()); |
| 251 | 248 | ||
| 252 | - $repositories = $RepositoryService->getRepositories(); | ||
| 253 | - $repositoryId = $repositories[0]['repositoryId']; | ||
| 254 | - | ||
| 255 | // attempt delete | 249 | // attempt delete |
| 256 | $response = $ObjectService->deleteTree($repositoryId, $this->params[0]); | 250 | $response = $ObjectService->deleteTree($repositoryId, $this->params[0]); |
| 257 | 251 | ||
| @@ -369,12 +363,10 @@ class KT_cmis_atom_service_document extends KT_cmis_atom_service { | @@ -369,12 +363,10 @@ class KT_cmis_atom_service_document extends KT_cmis_atom_service { | ||
| 369 | */ | 363 | */ |
| 370 | public function GET_action() | 364 | public function GET_action() |
| 371 | { | 365 | { |
| 372 | - $RepositoryService = new RepositoryService(); | 366 | + $repositoryId = KT_cmis_atom_service_helper::getRepositoryId($RepositoryService); |
| 367 | + | ||
| 373 | $ObjectService = new ObjectService(KT_cmis_atom_service_helper::getKt()); | 368 | $ObjectService = new ObjectService(KT_cmis_atom_service_helper::getKt()); |
| 374 | 369 | ||
| 375 | - $repositories = $RepositoryService->getRepositories(); | ||
| 376 | - $repositoryId = $repositories[0]['repositoryId']; | ||
| 377 | - | ||
| 378 | $objectId = $this->params[0]; | 370 | $objectId = $this->params[0]; |
| 379 | 371 | ||
| 380 | // TODO this is "parents" in later versions of the specification | 372 | // TODO this is "parents" in later versions of the specification |
| @@ -422,12 +414,10 @@ class KT_cmis_atom_service_document extends KT_cmis_atom_service { | @@ -422,12 +414,10 @@ class KT_cmis_atom_service_document extends KT_cmis_atom_service { | ||
| 422 | // NOTE due to the way KnowledgeTree works with documents this is always going to call deleteAllVersions. | 414 | // NOTE due to the way KnowledgeTree works with documents this is always going to call deleteAllVersions. |
| 423 | // we do not have support for deleting only specific versions (this may be added in the future.) | 415 | // we do not have support for deleting only specific versions (this may be added in the future.) |
| 424 | 416 | ||
| 425 | - $RepositoryService = new RepositoryService(); | 417 | + $repositoryId = KT_cmis_atom_service_helper::getRepositoryId($RepositoryService); |
| 418 | + | ||
| 426 | $VersioningService = new VersioningService(KT_cmis_atom_service_helper::getKt()); | 419 | $VersioningService = new VersioningService(KT_cmis_atom_service_helper::getKt()); |
| 427 | 420 | ||
| 428 | - $repositories = $RepositoryService->getRepositories(); | ||
| 429 | - $repositoryId = $repositories[0]['repositoryId']; | ||
| 430 | - | ||
| 431 | // attempt delete | 421 | // attempt delete |
| 432 | $response = $VersioningService->deleteAllVersions($repositoryId, $this->params[0]); | 422 | $response = $VersioningService->deleteAllVersions($repositoryId, $this->params[0]); |
| 433 | 423 | ||
| @@ -456,12 +446,10 @@ class KT_cmis_atom_service_pwc extends KT_cmis_atom_service { | @@ -456,12 +446,10 @@ class KT_cmis_atom_service_pwc extends KT_cmis_atom_service { | ||
| 456 | */ | 446 | */ |
| 457 | public function GET_action() | 447 | public function GET_action() |
| 458 | { | 448 | { |
| 459 | - $RepositoryService = new RepositoryService(); | 449 | + $repositoryId = KT_cmis_atom_service_helper::getRepositoryId($RepositoryService); |
| 450 | + | ||
| 460 | $ObjectService = new ObjectService(KT_cmis_atom_service_helper::getKt()); | 451 | $ObjectService = new ObjectService(KT_cmis_atom_service_helper::getKt()); |
| 461 | 452 | ||
| 462 | - $repositories = $RepositoryService->getRepositories(); | ||
| 463 | - $repositoryId = $repositories[0]['repositoryId']; | ||
| 464 | - | ||
| 465 | // determine whether we want the Private Working Copy entry feed or the actual physical Private Working Copy content. | 453 | // determine whether we want the Private Working Copy entry feed or the actual physical Private Working Copy content. |
| 466 | // this depends on $this->params[1] | 454 | // this depends on $this->params[1] |
| 467 | if (!empty($this->params[1])) | 455 | if (!empty($this->params[1])) |
| @@ -486,12 +474,11 @@ class KT_cmis_atom_service_pwc extends KT_cmis_atom_service { | @@ -486,12 +474,11 @@ class KT_cmis_atom_service_pwc extends KT_cmis_atom_service { | ||
| 486 | public function DELETE_action() | 474 | public function DELETE_action() |
| 487 | { | 475 | { |
| 488 | // call the cancel checkout function | 476 | // call the cancel checkout function |
| 489 | - $RepositoryService = new RepositoryService(); | 477 | + |
| 478 | + $repositoryId = KT_cmis_atom_service_helper::getRepositoryId($RepositoryService); | ||
| 479 | + | ||
| 490 | $VersioningService = new VersioningService(KT_cmis_atom_service_helper::getKt()); | 480 | $VersioningService = new VersioningService(KT_cmis_atom_service_helper::getKt()); |
| 491 | 481 | ||
| 492 | - $repositories = $RepositoryService->getRepositories(); | ||
| 493 | - $repositoryId = $repositories[0]['repositoryId']; | ||
| 494 | - | ||
| 495 | $response = $VersioningService->cancelCheckout($repositoryId, $this->params[0]); | 482 | $response = $VersioningService->cancelCheckout($repositoryId, $this->params[0]); |
| 496 | 483 | ||
| 497 | if (PEAR::isError($response)) | 484 | if (PEAR::isError($response)) |
| @@ -508,13 +495,11 @@ class KT_cmis_atom_service_pwc extends KT_cmis_atom_service { | @@ -508,13 +495,11 @@ class KT_cmis_atom_service_pwc extends KT_cmis_atom_service { | ||
| 508 | 495 | ||
| 509 | public function PUT_action() | 496 | public function PUT_action() |
| 510 | { | 497 | { |
| 511 | - $RepositoryService = new RepositoryService(); | 498 | + $repositoryId = KT_cmis_atom_service_helper::getRepositoryId($RepositoryService); |
| 499 | + | ||
| 512 | $VersioningService = new VersioningService(KT_cmis_atom_service_helper::getKt()); | 500 | $VersioningService = new VersioningService(KT_cmis_atom_service_helper::getKt()); |
| 513 | $ObjectService = new ObjectService(KT_cmis_atom_service_helper::getKt()); | 501 | $ObjectService = new ObjectService(KT_cmis_atom_service_helper::getKt()); |
| 514 | 502 | ||
| 515 | - $repositories = $RepositoryService->getRepositories(); | ||
| 516 | - $repositoryId = $repositories[0]['repositoryId']; | ||
| 517 | - | ||
| 518 | // check for content stream | 503 | // check for content stream |
| 519 | // NOTE this is a hack! will not work with CMISSpaces at least, probably not with any client except RestTest and similar | 504 | // NOTE this is a hack! will not work with CMISSpaces at least, probably not with any client except RestTest and similar |
| 520 | // where we can manually modify the input | 505 | // where we can manually modify the input |
| @@ -573,12 +558,10 @@ class KT_cmis_atom_service_checkedout extends KT_cmis_atom_service { | @@ -573,12 +558,10 @@ class KT_cmis_atom_service_checkedout extends KT_cmis_atom_service { | ||
| 573 | */ | 558 | */ |
| 574 | public function GET_action() | 559 | public function GET_action() |
| 575 | { | 560 | { |
| 576 | - $RepositoryService = new RepositoryService(); | 561 | + $repositoryId = KT_cmis_atom_service_helper::getRepositoryId($RepositoryService); |
| 562 | + | ||
| 577 | $NavigationService = new NavigationService(KT_cmis_atom_service_helper::getKt()); | 563 | $NavigationService = new NavigationService(KT_cmis_atom_service_helper::getKt()); |
| 578 | 564 | ||
| 579 | - $repositories = $RepositoryService->getRepositories(); | ||
| 580 | - $repositoryId = $repositories[0]['repositoryId']; | ||
| 581 | - | ||
| 582 | $checkedout = $NavigationService->getCheckedOutDocs($repositoryId); | 565 | $checkedout = $NavigationService->getCheckedOutDocs($repositoryId); |
| 583 | 566 | ||
| 584 | //Create a new response feed | 567 | //Create a new response feed |
| @@ -631,13 +614,11 @@ class KT_cmis_atom_service_checkedout extends KT_cmis_atom_service { | @@ -631,13 +614,11 @@ class KT_cmis_atom_service_checkedout extends KT_cmis_atom_service { | ||
| 631 | 614 | ||
| 632 | public function POST_action() | 615 | public function POST_action() |
| 633 | { | 616 | { |
| 634 | - $RepositoryService = new RepositoryService(); | 617 | + $repositoryId = KT_cmis_atom_service_helper::getRepositoryId($RepositoryService); |
| 618 | + | ||
| 635 | $VersioningService = new VersioningService(KT_cmis_atom_service_helper::getKt()); | 619 | $VersioningService = new VersioningService(KT_cmis_atom_service_helper::getKt()); |
| 636 | $ObjectService = new ObjectService(KT_cmis_atom_service_helper::getKt()); | 620 | $ObjectService = new ObjectService(KT_cmis_atom_service_helper::getKt()); |
| 637 | 621 | ||
| 638 | - $repositories = $RepositoryService->getRepositories(); | ||
| 639 | - $repositoryId = $repositories[0]['repositoryId']; | ||
| 640 | - | ||
| 641 | $cmisObjectProperties = KT_cmis_atom_service_helper::getCmisProperties($this->parsedXMLContent['@children']); | 622 | $cmisObjectProperties = KT_cmis_atom_service_helper::getCmisProperties($this->parsedXMLContent['@children']); |
| 642 | 623 | ||
| 643 | // check for existing object id as property of submitted object data | 624 | // check for existing object id as property of submitted object data |
| @@ -676,8 +657,7 @@ class KT_cmis_atom_service_types extends KT_cmis_atom_service { | @@ -676,8 +657,7 @@ class KT_cmis_atom_service_types extends KT_cmis_atom_service { | ||
| 676 | public function GET_action() | 657 | public function GET_action() |
| 677 | { | 658 | { |
| 678 | $RepositoryService = new RepositoryService(); | 659 | $RepositoryService = new RepositoryService(); |
| 679 | - $repositories = $RepositoryService->getRepositories(); | ||
| 680 | - $repositoryId = $repositories[0]['repositoryId']; | 660 | + $repositoryId = KT_cmis_atom_service_helper::getRepositoryId($RepositoryService); |
| 681 | 661 | ||
| 682 | $types = $RepositoryService->getTypes($repositoryId); | 662 | $types = $RepositoryService->getTypes($repositoryId); |
| 683 | $type = ((empty($this->params[0])) ? 'all' : $this->params[0]); | 663 | $type = ((empty($this->params[0])) ? 'all' : $this->params[0]); |
| @@ -697,10 +677,7 @@ class KT_cmis_atom_service_type extends KT_cmis_atom_service { | @@ -697,10 +677,7 @@ class KT_cmis_atom_service_type extends KT_cmis_atom_service { | ||
| 697 | public function GET_action() | 677 | public function GET_action() |
| 698 | { | 678 | { |
| 699 | $RepositoryService = new RepositoryService(); | 679 | $RepositoryService = new RepositoryService(); |
| 700 | - | ||
| 701 | - // fetch repository id | ||
| 702 | - $repositories = $RepositoryService->getRepositories(); | ||
| 703 | - $repositoryId = $repositories[0]['repositoryId']; | 680 | + $repositoryId = KT_cmis_atom_service_helper::getRepositoryId($RepositoryService); |
| 704 | 681 | ||
| 705 | if (!isset($this->params[1])) { | 682 | if (!isset($this->params[1])) { |
| 706 | // For easier return in the wanted format, we call getTypes instead of getTypeDefinition. | 683 | // For easier return in the wanted format, we call getTypes instead of getTypeDefinition. |
webservice/atompub/cmis/KT_cmis_atom_service_helper.inc.php
| 1 | <?php | 1 | <?php |
| 2 | 2 | ||
| 3 | +// initialise ktapi instance | ||
| 4 | +KT_cmis_atom_service_helper::$ktapi = KT_cmis_atom_service_helper::getKt(); | ||
| 5 | + | ||
| 3 | class KT_cmis_atom_service_helper { | 6 | class KT_cmis_atom_service_helper { |
| 4 | 7 | ||
| 5 | - protected static $kt = null; | 8 | + public static $ktapi = null; |
| 9 | + public static $repositoryId = null; | ||
| 10 | + | ||
| 11 | + /** | ||
| 12 | + * Helper function to set internal repository id | ||
| 13 | + * | ||
| 14 | + * @param object $RepositoryService | ||
| 15 | + */ | ||
| 16 | + static public function setRepositoryId(&$RepositoryService = null) | ||
| 17 | + { | ||
| 18 | + if (is_null($RepositoryService)) { | ||
| 19 | + $RepositoryService = new RepositoryService(); | ||
| 20 | + } | ||
| 21 | + | ||
| 22 | + $repositories = $RepositoryService->getRepositories(); | ||
| 23 | + | ||
| 24 | + // TODO handle multiple repositories | ||
| 25 | + self::$repositoryId = $repositories[0]['repositoryId']; | ||
| 26 | + } | ||
| 27 | + | ||
| 28 | + /** | ||
| 29 | + * Helper function to fetch internal repository id | ||
| 30 | + * | ||
| 31 | + * Calls set function automatically, use $set = false to prevent this and return the current setting, if any | ||
| 32 | + * | ||
| 33 | + * NOTE the function will automatically call the setRepositoryId function if no previous repository id was set | ||
| 34 | + * | ||
| 35 | + * @param object $RepositoryService | ||
| 36 | + * @param boolean $RepositoryService | ||
| 37 | + * @return string | ||
| 38 | + */ | ||
| 39 | + static public function getRepositoryId(&$RepositoryService = null, $set = true) | ||
| 40 | + { | ||
| 41 | + if (empty(self::$repositoryId) || $set) { | ||
| 42 | + self::setRepositoryId($RepositoryService); | ||
| 43 | + } | ||
| 44 | + | ||
| 45 | + return self::$repositoryId; | ||
| 46 | + } | ||
| 6 | 47 | ||
| 7 | /** | 48 | /** |
| 8 | * Retrieves data about a specific folder OR document within a folder | 49 | * Retrieves data about a specific folder OR document within a folder |
| @@ -14,6 +55,8 @@ class KT_cmis_atom_service_helper { | @@ -14,6 +55,8 @@ class KT_cmis_atom_service_helper { | ||
| 14 | */ | 55 | */ |
| 15 | static public function getObjectFeed(&$service, $ObjectService, $repositoryId, $objectId, $method = 'GET') | 56 | static public function getObjectFeed(&$service, $ObjectService, $repositoryId, $objectId, $method = 'GET') |
| 16 | { | 57 | { |
| 58 | + self::$repositoryId = $repositoryId; | ||
| 59 | + | ||
| 17 | $serviceType = $service->getServiceType(); | 60 | $serviceType = $service->getServiceType(); |
| 18 | $response = $ObjectService->getProperties($repositoryId, $objectId, false, false); | 61 | $response = $ObjectService->getProperties($repositoryId, $objectId, false, false); |
| 19 | 62 | ||
| @@ -58,7 +101,7 @@ class KT_cmis_atom_service_helper { | @@ -58,7 +101,7 @@ class KT_cmis_atom_service_helper { | ||
| 58 | * @param string $parent The parent folder | 101 | * @param string $parent The parent folder |
| 59 | */ | 102 | */ |
| 60 | static public function createObjectEntry(&$response, $cmisEntry, $parent, $pwc = false, $method = 'GET') | 103 | static public function createObjectEntry(&$response, $cmisEntry, $parent, $pwc = false, $method = 'GET') |
| 61 | - { | 104 | + { |
| 62 | $workspace = $response->getWorkspace(); | 105 | $workspace = $response->getWorkspace(); |
| 63 | $type = strtolower($cmisEntry['properties']['ObjectTypeId']['value']); | 106 | $type = strtolower($cmisEntry['properties']['ObjectTypeId']['value']); |
| 64 | 107 | ||
| @@ -143,13 +186,19 @@ class KT_cmis_atom_service_helper { | @@ -143,13 +186,19 @@ class KT_cmis_atom_service_helper { | ||
| 143 | . $cmisEntry['properties']['ObjectId']['value'] . '/rels')); | 186 | . $cmisEntry['properties']['ObjectId']['value'] . '/rels')); |
| 144 | $entry->appendChild($link); | 187 | $entry->appendChild($link); |
| 145 | 188 | ||
| 146 | - // TODO check parent link is correct, fix if needed | ||
| 147 | - // TODO leave out if at root folder | ||
| 148 | - $link = $response->newElement('link'); | ||
| 149 | - $link->appendChild($response->newAttr('rel', 'parents')); | ||
| 150 | - $link->appendChild($response->newAttr('href', CMIS_APP_BASE_URI . $workspace . '/folder/' | ||
| 151 | - . $cmisEntry['properties']['ObjectId']['value'] . '/parent')); | ||
| 152 | - $entry->appendChild($link); | 189 | + // if there is no parent or parent is 0, do not add the parent link |
| 190 | + // also if this is specifically the root folder, do not add the parent link | ||
| 191 | +// if (!empty($cmisEntry['properties']['ParentId']['value']) && !CMISUtil::isRootFolder(self::$repositoryId, $cmisEntry['properties']['ObjectId']['value'])) | ||
| 192 | + | ||
| 193 | + if (!CMISUtil::isRootFolder(self::$repositoryId, $cmisEntry['properties']['ObjectId']['value'], self::$ktapi)) | ||
| 194 | + { | ||
| 195 | + // TODO check parent link is correct, fix if needed | ||
| 196 | + $link = $response->newElement('link'); | ||
| 197 | + $link->appendChild($response->newAttr('rel', 'parents')); | ||
| 198 | + $link->appendChild($response->newAttr('href', CMIS_APP_BASE_URI . $workspace . '/folder/' | ||
| 199 | + . $cmisEntry['properties']['ObjectId']['value'] . '/parent')); | ||
| 200 | + $entry->appendChild($link); | ||
| 201 | + } | ||
| 153 | 202 | ||
| 154 | // Folder/Document specific links | 203 | // Folder/Document specific links |
| 155 | if (strtolower($cmisEntry['properties']['ObjectTypeId']['value']) == 'folder') | 204 | if (strtolower($cmisEntry['properties']['ObjectTypeId']['value']) == 'folder') |
| @@ -480,12 +529,12 @@ class KT_cmis_atom_service_helper { | @@ -480,12 +529,12 @@ class KT_cmis_atom_service_helper { | ||
| 480 | */ | 529 | */ |
| 481 | public static function getKt() | 530 | public static function getKt() |
| 482 | { | 531 | { |
| 483 | - if(!isset(self::$kt)) | 532 | + if(!isset(self::$ktapi)) |
| 484 | { | 533 | { |
| 485 | - self::$kt = new KTAPI(); | ||
| 486 | - self::$kt->get_active_session(session_id()); | 534 | + self::$ktapi = new KTAPI(); |
| 535 | + self::$ktapi->get_active_session(session_id()); | ||
| 487 | } | 536 | } |
| 488 | - return self::$kt; | 537 | + return self::$ktapi; |
| 489 | } | 538 | } |
| 490 | 539 | ||
| 491 | // TODO adjust for time zones? | 540 | // TODO adjust for time zones? |