Commit 90d3ad6086ac444af4354b97482066f1130a3791
1 parent
2af67809
Clean up of CMIS webservice code
Story ID:2713417. CMIS working with PHP client Committed by: Paul Barrett
Showing
3 changed files
with
30 additions
and
28 deletions
webservice/atompub/cmis/KT_cmis_atom_server.services.inc.php
| @@ -147,7 +147,6 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service { | @@ -147,7 +147,6 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service { | ||
| 147 | 147 | ||
| 148 | if (!empty($this->params[1]) && (($this->params[1] == 'children') || ($this->params[1] == 'descendants'))) | 148 | if (!empty($this->params[1]) && (($this->params[1] == 'children') || ($this->params[1] == 'descendants'))) |
| 149 | { | 149 | { |
| 150 | - print_r($this->params);exit; | ||
| 151 | $NavigationService = new KTNavigationService(KT_cmis_atom_service_helper::getKt()); | 150 | $NavigationService = new KTNavigationService(KT_cmis_atom_service_helper::getKt()); |
| 152 | $feed = $this->getFolderChildrenFeed($NavigationService, $repositoryId, $folderId, $folderName, $this->params[1]); | 151 | $feed = $this->getFolderChildrenFeed($NavigationService, $repositoryId, $folderId, $folderName, $this->params[1]); |
| 153 | } | 152 | } |
| @@ -340,7 +339,6 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service { | @@ -340,7 +339,6 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service { | ||
| 340 | */ | 339 | */ |
| 341 | private function getFolderChildrenFeed($NavigationService, $repositoryId, $folderId, $folderName, $feedType = 'children') | 340 | private function getFolderChildrenFeed($NavigationService, $repositoryId, $folderId, $folderName, $feedType = 'children') |
| 342 | { | 341 | { |
| 343 | - print_r($this->params);exit; | ||
| 344 | if ($feedType == 'children') { | 342 | if ($feedType == 'children') { |
| 345 | try { | 343 | try { |
| 346 | $entries = $NavigationService->getChildren($repositoryId, $folderId, false, false); | 344 | $entries = $NavigationService->getChildren($repositoryId, $folderId, false, false); |
| @@ -555,10 +553,10 @@ class KT_cmis_atom_service_pwc extends KT_cmis_atom_service { | @@ -555,10 +553,10 @@ class KT_cmis_atom_service_pwc extends KT_cmis_atom_service { | ||
| 555 | $content = KT_cmis_atom_service_helper::getCmisContent($this->rawContent); | 553 | $content = KT_cmis_atom_service_helper::getCmisContent($this->rawContent); |
| 556 | // NOTE not sure about the text type, will need testing, most content will be base64 | 554 | // NOTE not sure about the text type, will need testing, most content will be base64 |
| 557 | $cmisContent = (isset($content['cmisra:base64']) | 555 | $cmisContent = (isset($content['cmisra:base64']) |
| 558 | - ? $content['cmisra:base64'] | ||
| 559 | - : ((isset($content['cmisra:text'])) | ||
| 560 | - ? $content['cmisra:text'] | ||
| 561 | - : null)); | 556 | + ? $content['cmisra:base64'] |
| 557 | + : ((isset($content['cmisra:text'])) | ||
| 558 | + ? $content['cmisra:text'] | ||
| 559 | + : null)); | ||
| 562 | 560 | ||
| 563 | // if we haven't found it now, the hack begins - retrieve the EXISTING content and submit this as the contentStream | 561 | // if we haven't found it now, the hack begins - retrieve the EXISTING content and submit this as the contentStream |
| 564 | // this is needed because KnowledgeTree will not accept a checkin without a content stream but CMISSpaces (and possibly | 562 | // this is needed because KnowledgeTree will not accept a checkin without a content stream but CMISSpaces (and possibly |
| @@ -576,12 +574,11 @@ class KT_cmis_atom_service_pwc extends KT_cmis_atom_service { | @@ -576,12 +574,11 @@ class KT_cmis_atom_service_pwc extends KT_cmis_atom_service { | ||
| 576 | // we assume minor version updates only | 574 | // we assume minor version updates only |
| 577 | $major = false; | 575 | $major = false; |
| 578 | $checkinComment = ''; | 576 | $checkinComment = ''; |
| 579 | - $response = $VersioningService->checkIn($repositoryId, $this->params[0], $major, $cmisObjectProperties, $cmisContent, $checkinComment); | ||
| 580 | - | ||
| 581 | - if ($response['status_code'] == 1) { | ||
| 582 | - $feed = KT_cmis_atom_service_helper::getErrorFeed($this, self::STATUS_SERVER_ERROR, $response['message']); | ||
| 583 | - // Expose the responseFeed | ||
| 584 | - $this->responseFeed = $feed; | 577 | + try { |
| 578 | + $response = $VersioningService->checkIn($repositoryId, $this->params[0], $major, $cmisObjectProperties, $cmisContent, $checkinComment); | ||
| 579 | + } | ||
| 580 | + catch (Exception $e) { | ||
| 581 | + $this->responseFeed = KT_cmis_atom_service_helper::getErrorFeed($this, $this->getStatusCode($e), $e->getMessage()); | ||
| 585 | return null; | 582 | return null; |
| 586 | } | 583 | } |
| 587 | 584 | ||
| @@ -670,9 +667,12 @@ class KT_cmis_atom_service_checkedout extends KT_cmis_atom_service { | @@ -670,9 +667,12 @@ class KT_cmis_atom_service_checkedout extends KT_cmis_atom_service { | ||
| 670 | // check for existing object id as property of submitted object data | 667 | // check for existing object id as property of submitted object data |
| 671 | if (empty($cmisObjectProperties['cmis:objectId'])) | 668 | if (empty($cmisObjectProperties['cmis:objectId'])) |
| 672 | { | 669 | { |
| 673 | - $feed = KT_cmis_atom_service_helper::getErrorFeed($this, self::STATUS_SERVER_ERROR, 'No object was specified for checkout'); | ||
| 674 | - // Expose the responseFeed | ||
| 675 | - $this->responseFeed = $feed; | 670 | + // not sure this is the best way to deal with this (new InvalidArgumentException) rather than actually throwing an exception |
| 671 | + // in the helper code, but I don't feel that throwing an exception is necessary or always wanted; | ||
| 672 | + // alternative is to send the name of the Exception but not an instance, and do an is_a check on the other side, | ||
| 673 | + // but since it will only be needed to this and similar calls, it seems wasteful to do that for every other case | ||
| 674 | + $this->responseFeed = KT_cmis_atom_service_helper::getErrorFeed($this, $this->getStatusCode(new InvalidArgumentException()), | ||
| 675 | + 'No object was specified for checkout'); | ||
| 676 | return null; | 676 | return null; |
| 677 | } | 677 | } |
| 678 | 678 |
webservice/atompub/cmis/KT_cmis_atom_service_helper.inc.php
| @@ -474,9 +474,18 @@ class KT_cmis_atom_service_helper { | @@ -474,9 +474,18 @@ class KT_cmis_atom_service_helper { | ||
| 474 | 474 | ||
| 475 | static public function getErrorFeed(&$service, $status, $message) | 475 | static public function getErrorFeed(&$service, $status, $message) |
| 476 | { | 476 | { |
| 477 | - // this seems to cause problems as it sets an http header, and if that header is | ||
| 478 | - // "404 Not Found" we get html output instead of atompub | ||
| 479 | -// $service->setStatus($status); | 477 | + // TODO determine whether the client needs to see the AtomPub response or if a 404 header is enough. |
| 478 | + // reason: when this status header is set and the status is 404 Not Found then the AtomPub response does not | ||
| 479 | + // appear to be seen by browser based clients (I am not sure of non-browser clients) | ||
| 480 | + // NOTE just added a check and only send back the header containing 404, no text, and this works, we get a 404 header | ||
| 481 | + // plus a readable AtomPub response | ||
| 482 | + if (!strstr($status, '404')) { | ||
| 483 | + $service->setStatus($status); | ||
| 484 | + } | ||
| 485 | + else { | ||
| 486 | + $service->setStatus('404'); | ||
| 487 | + } | ||
| 488 | + | ||
| 480 | $feed = new KT_cmis_atom_responseFeed_GET(CMIS_APP_BASE_URI); | 489 | $feed = new KT_cmis_atom_responseFeed_GET(CMIS_APP_BASE_URI); |
| 481 | 490 | ||
| 482 | $feed->newField('title', 'Error: ' . $status, $feed); | 491 | $feed->newField('title', 'Error: ' . $status, $feed); |
| @@ -507,7 +516,7 @@ class KT_cmis_atom_service_helper { | @@ -507,7 +516,7 @@ class KT_cmis_atom_service_helper { | ||
| 507 | $numObjects = $numQ; | 516 | $numObjects = $numQ; |
| 508 | $start = 0; | 517 | $start = 0; |
| 509 | $type = CMIS_FOLDER; | 518 | $type = CMIS_FOLDER; |
| 510 | - | 519 | + |
| 511 | while($start < $numObjects) | 520 | while($start < $numObjects) |
| 512 | { | 521 | { |
| 513 | $name = $path[$numQ - $numObjects + $start]; | 522 | $name = $path[$numQ - $numObjects + $start]; |
| @@ -529,7 +538,7 @@ class KT_cmis_atom_service_helper { | @@ -529,7 +538,7 @@ class KT_cmis_atom_service_helper { | ||
| 529 | $objectId = $object->get_folderid(); | 538 | $objectId = $object->get_folderid(); |
| 530 | $lastFolderId = $objectId; | 539 | $lastFolderId = $objectId; |
| 531 | } | 540 | } |
| 532 | - | 541 | + |
| 533 | ++$start; | 542 | ++$start; |
| 534 | } | 543 | } |
| 535 | 544 | ||
| @@ -716,10 +725,6 @@ class KT_cmis_atom_service_helper { | @@ -716,10 +725,6 @@ class KT_cmis_atom_service_helper { | ||
| 716 | } | 725 | } |
| 717 | 726 | ||
| 718 | $contentStream = $ObjectService->getContentStream($repositoryId, $service->params[0]); | 727 | $contentStream = $ObjectService->getContentStream($repositoryId, $service->params[0]); |
| 719 | - | ||
| 720 | - // hack for removing one level of access | ||
| 721 | - $contentStream = $contentStream['results']; | ||
| 722 | - | ||
| 723 | return $contentStream; | 728 | return $contentStream; |
| 724 | } | 729 | } |
| 725 | /** | 730 | /** |
| @@ -755,9 +760,6 @@ class KT_cmis_atom_service_helper { | @@ -755,9 +760,6 @@ class KT_cmis_atom_service_helper { | ||
| 755 | 760 | ||
| 756 | $contentStream = $ObjectService->getContentStream($repositoryId, $service->params[0]); | 761 | $contentStream = $ObjectService->getContentStream($repositoryId, $service->params[0]); |
| 757 | 762 | ||
| 758 | - // hack for removing one level of access | ||
| 759 | - $contentStream = $contentStream['results']; | ||
| 760 | - | ||
| 761 | // headers specific to output | 763 | // headers specific to output |
| 762 | $service->setEtag($eTag); | 764 | $service->setEtag($eTag); |
| 763 | $service->setHeader('Last-Modified', $response['properties']['lastModificationDate']['value']); | 765 | $service->setHeader('Last-Modified', $response['properties']['lastModificationDate']['value']); |
webservice/classes/atompub/KT_atom_service.inc.php
| @@ -151,7 +151,7 @@ class KT_atom_service{ | @@ -151,7 +151,7 @@ class KT_atom_service{ | ||
| 151 | 151 | ||
| 152 | // TODO why is this setting an http header for an atompub response? this causes problems with a "404 Not Found" status message | 152 | // TODO why is this setting an http header for an atompub response? this causes problems with a "404 Not Found" status message |
| 153 | public function setStatus($status=NULL){ | 153 | public function setStatus($status=NULL){ |
| 154 | - header("HTTP/1.1 ".$status); | 154 | + header("HTTP/1.1 ".$status.""); |
| 155 | } | 155 | } |
| 156 | 156 | ||
| 157 | public function setEtag($etagValue=NULL){ | 157 | public function setEtag($etagValue=NULL){ |