Commit 551aeb7c9981cadae21f045509fb5a57568c0b0c
Merge branch 'AtomPub_Cleanup' into edge
Showing
40 changed files
with
1016 additions
and
1661 deletions
ktatompub/Client/index.html
| ... | ... | @@ -20,7 +20,7 @@ |
| 20 | 20 | <script src="js/lib/lib.data.js"></script> |
| 21 | 21 | <script src="js/lib/events.js"></script> |
| 22 | 22 | <script src="js/site/site.event_handlers.js"></script> |
| 23 | -<script src="js/APP/ktApp.js"></script> | |
| 23 | +<script src="js/APP/KT_atom_server.js"></script> | |
| 24 | 24 | <script src="js/APP/app.js"></script> |
| 25 | 25 | <script type="text/javascript"> |
| 26 | 26 | // site.bootStrap(); //If enabled then you don't need to have all the javascript installs above | ... | ... |
ktatompub/Client/js/APP/ktApp.js
| 1 | -ktApp=new function(){ | |
| 1 | +KT_atom_server=new function(){ | |
| 2 | 2 | this.xmlhelpers=new function(){ |
| 3 | 3 | this.getTagContents=function(node,tagName){ |
| 4 | 4 | return $(node).find(tagName)[0].textContent; |
| ... | ... | @@ -53,7 +53,7 @@ ktApp=new function(){ |
| 53 | 53 | $('.document_storage_path',elem).html($(entry).find('storage_path')[0].textContent); |
| 54 | 54 | |
| 55 | 55 | */ |
| 56 | -ktApp.folder=new function(){ | |
| 56 | +KT_atom_server.folder=new function(){ | |
| 57 | 57 | this.fieldList={ |
| 58 | 58 | 'folder_id' :'id', |
| 59 | 59 | 'folder_name' :'folder_name', |
| ... | ... | @@ -65,7 +65,7 @@ ktApp.folder=new function(){ |
| 65 | 65 | this.parseXML=function(entry){ |
| 66 | 66 | this.data={}; |
| 67 | 67 | for(var lFname in this.fieldList){ |
| 68 | - this.data[lFname]=ktApp.xmlhelpers.getTagContents(entry,this.fieldList[lFname]); | |
| 68 | + this.data[lFname]=KT_atom_server.xmlhelpers.getTagContents(entry,this.fieldList[lFname]); | |
| 69 | 69 | } |
| 70 | 70 | } |
| 71 | 71 | |
| ... | ... | @@ -73,13 +73,13 @@ ktApp.folder=new function(){ |
| 73 | 73 | var elem=lib.def(document.getElementById(containerId),window.document.body); |
| 74 | 74 | for(var field in this.fieldList){ |
| 75 | 75 | $("."+field,elem).each(function(){ |
| 76 | - ktApp.set(this,ktApp.folder.data[field]); | |
| 76 | + KT_atom_server.set(this,KT_atom_server.folder.data[field]); | |
| 77 | 77 | }); |
| 78 | 78 | } |
| 79 | 79 | } |
| 80 | 80 | } |
| 81 | 81 | |
| 82 | -ktApp.serviceDoc=new function(){ | |
| 82 | +KT_atom_server.serviceDoc=new function(){ | |
| 83 | 83 | this.parseXML=function(data,workspace){ |
| 84 | 84 | $('workspace',data).each(function(){ |
| 85 | 85 | var ws=$(this); |
| ... | ... | @@ -92,7 +92,7 @@ ktApp.serviceDoc=new function(){ |
| 92 | 92 | } |
| 93 | 93 | |
| 94 | 94 | |
| 95 | -ktApp.document=new function(){ | |
| 95 | +KT_atom_server.document=new function(){ | |
| 96 | 96 | this.fieldList={ |
| 97 | 97 | 'document_id' :'document_id', |
| 98 | 98 | 'document_title' :'title', |
| ... | ... | @@ -125,7 +125,7 @@ ktApp.document=new function(){ |
| 125 | 125 | this.parseXML=function(entry){ |
| 126 | 126 | this.data={}; |
| 127 | 127 | for(var lFname in this.fieldList){ |
| 128 | - this.data[lFname]=ktApp.xmlhelpers.getTagContents(entry,this.fieldList[lFname]); | |
| 128 | + this.data[lFname]=KT_atom_server.xmlhelpers.getTagContents(entry,this.fieldList[lFname]); | |
| 129 | 129 | } |
| 130 | 130 | |
| 131 | 131 | } |
| ... | ... | @@ -134,7 +134,7 @@ ktApp.document=new function(){ |
| 134 | 134 | var elem=lib.def(document.getElementById(containerId),window.document.body); |
| 135 | 135 | for(var field in this.fieldList){ |
| 136 | 136 | $("."+field,elem).each(function(){ |
| 137 | - ktApp.set(this,ktApp.document.data[field]); | |
| 137 | + KT_atom_server.set(this,KT_atom_server.document.data[field]); | |
| 138 | 138 | }); |
| 139 | 139 | } |
| 140 | 140 | } | ... | ... |
ktatompub/Client/js/site/site.event_handlers.js
| ... | ... | @@ -23,8 +23,8 @@ site.event_handlers=new function(){ |
| 23 | 23 | var data=lib.resources.getResourceFromUrl(url); |
| 24 | 24 | events.trigger('panel.clear'); |
| 25 | 25 | site.event_handlers.setInfoPaneToolbar('info_panel_toolbar_viewFolder'); |
| 26 | - ktApp.folder.parseXML($(data.data).find('entry')[0]); | |
| 27 | - ktApp.folder.renderContainer(); | |
| 26 | + KT_atom_server.folder.parseXML($(data.data).find('entry')[0]); | |
| 27 | + KT_atom_server.folder.renderContainer(); | |
| 28 | 28 | $('#panel_folder_info').fadeIn(100); |
| 29 | 29 | |
| 30 | 30 | }else{ |
| ... | ... | @@ -43,8 +43,8 @@ site.event_handlers=new function(){ |
| 43 | 43 | var data=lib.resources.getResourceFromUrl(url); |
| 44 | 44 | events.trigger('panel.clear'); |
| 45 | 45 | site.event_handlers.setInfoPaneToolbar('info_panel_toolbar_editFolder'); |
| 46 | - ktApp.folder.parseXML($(data.data).find('entry')[0]); | |
| 47 | - ktApp.folder.renderContainer(); | |
| 46 | + KT_atom_server.folder.parseXML($(data.data).find('entry')[0]); | |
| 47 | + KT_atom_server.folder.renderContainer(); | |
| 48 | 48 | $('#panel_folder_edit').fadeIn(100); |
| 49 | 49 | |
| 50 | 50 | }else{ |
| ... | ... | @@ -63,8 +63,8 @@ site.event_handlers=new function(){ |
| 63 | 63 | var data=lib.resources.getResourceFromUrl(url); |
| 64 | 64 | events.trigger('panel.clear'); |
| 65 | 65 | site.event_handlers.setInfoPaneToolbar('info_panel_toolbar_viewDocument'); |
| 66 | - ktApp.document.parseXML($(data.data).find('entry')[0]); | |
| 67 | - ktApp.document.renderContainer(); | |
| 66 | + KT_atom_server.document.parseXML($(data.data).find('entry')[0]); | |
| 67 | + KT_atom_server.document.renderContainer(); | |
| 68 | 68 | $('#panel_document_info').fadeIn(100); |
| 69 | 69 | |
| 70 | 70 | }else{ |
| ... | ... | @@ -83,8 +83,8 @@ site.event_handlers=new function(){ |
| 83 | 83 | var data=lib.resources.getResourceFromUrl(url); |
| 84 | 84 | events.trigger('panel.clear'); |
| 85 | 85 | site.event_handlers.setInfoPaneToolbar('info_panel_toolbar_editDocument'); |
| 86 | - ktApp.document.parseXML($(data.data).find('entry')[0]); | |
| 87 | - ktApp.document.renderContainer(); | |
| 86 | + KT_atom_server.document.parseXML($(data.data).find('entry')[0]); | |
| 87 | + KT_atom_server.document.renderContainer(); | |
| 88 | 88 | $('#panel_document_info_edit').fadeIn(100); |
| 89 | 89 | |
| 90 | 90 | }else{ |
| ... | ... | @@ -122,7 +122,7 @@ site.event_handlers=new function(){ |
| 122 | 122 | this.document_action_download=function(){ |
| 123 | 123 | //site.showDialog('Feature Not Yet Supported','In the future the document can be <b>downloaded</b> here.'); |
| 124 | 124 | if(site.currentDocument!=undefined){ |
| 125 | - var url=unescape(ktApp.document.data.document_download_url); | |
| 125 | + var url=unescape(KT_atom_server.document.data.document_download_url); | |
| 126 | 126 | window.document.location.replace(url); |
| 127 | 127 | } |
| 128 | 128 | } |
| ... | ... | @@ -140,7 +140,7 @@ site.event_handlers=new function(){ |
| 140 | 140 | site.cfg('service',sdoc); |
| 141 | 141 | if(lib.resources.resourceLoaded(sdoc)){ |
| 142 | 142 | var data=lib.resources.getResourceFromUrl(sdoc); |
| 143 | - ktApp.serviceDoc.parseXML($(data.data).find('service')[0],'DMS'); | |
| 143 | + KT_atom_server.serviceDoc.parseXML($(data.data).find('service')[0],'DMS'); | |
| 144 | 144 | |
| 145 | 145 | }else{ |
| 146 | 146 | lib.resources.getUrl(sdoc,site.event_handlers.discovery); | ... | ... |
ktatompub/Client/js/site/site.js
| ... | ... | @@ -38,7 +38,7 @@ site=new function(){ |
| 38 | 38 | <script src="js/ui/ui.core.js"></script> |
| 39 | 39 | <script src="js/ui/ui.tabs.js"></script> |
| 40 | 40 | <script src="js/jquery.dynatree.min.js"></script> |
| 41 | - <script src="js/ktApp.js"></script> | |
| 41 | + <script src="js/KT_atom_server.js"></script> | |
| 42 | 42 | |
| 43 | 43 | */ |
| 44 | 44 | this.libraries={ |
| ... | ... | @@ -51,7 +51,7 @@ site=new function(){ |
| 51 | 51 | 'js/ui/ui.core.js' :'jQuery UI Core', |
| 52 | 52 | 'js/ui/ui.tabs.js' :'jQuery UI Tabs Plugin', |
| 53 | 53 | 'js/jquery.dynatree.min.js' :'jQuery DynaTree Tree Menu Plugin', |
| 54 | - 'js/ktApp.js' :'KT Atom Publishing Protocol Library' | |
| 54 | + 'js/KT_atom_server.js' :'KT Atom Publishing Protocol Library' | |
| 55 | 55 | } |
| 56 | 56 | |
| 57 | 57 | this.init=function(){ | ... | ... |
ktatompub/auth.php
ktatompub/index.php
| ... | ... | @@ -57,6 +57,7 @@ ob_start(); |
| 57 | 57 | |
| 58 | 58 | define('KT_APP_BASE_URI',"http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/?/'); |
| 59 | 59 | define('KT_APP_SYSTEM_URI',"http://".$_SERVER['HTTP_HOST']); |
| 60 | +define('KT_ATOM_LIB_FOLDER','lib/'); | |
| 60 | 61 | |
| 61 | 62 | // Define whether to use in debug mode for viewing generated structures |
| 62 | 63 | //define('KT_APP_WEB_OUTPUT',false); //defunct |
| ... | ... | @@ -67,37 +68,38 @@ define('KT_APP_SYSTEM_URI',"http://".$_SERVER['HTTP_HOST']); |
| 67 | 68 | * Includes |
| 68 | 69 | */ |
| 69 | 70 | include_once('../ktapi/ktapi.inc.php'); |
| 70 | -include_once('lib/ktAPP.inc.php'); | |
| 71 | -include_once('lib/KTAPPHelper.inc.php'); //Containing helper bridge functions to KtAPI | |
| 72 | -include_once('lib/KTAPDoc.inc.php'); //Containing the parent class allowing easy XML manipulation | |
| 73 | -include_once('lib/KTAPPServiceDoc.inc.php'); //Containing the servicedoc class allowing easy ServiceDocument generation | |
| 74 | -include_once('lib/KTAPPFeed.inc.php'); //Containing the response feed class allowing easy atom feed generation | |
| 75 | -include_once('lib/KTAPP_ResponseFeed.inc.php'); //Containing the response feed class allowing easy atom feed generation | |
| 76 | -include_once('lib/ktAPP_Service.inc.php'); | |
| 77 | -include_once('lib/ktApp.default_dms_services.inc.php'); | |
| 71 | +include_once(KT_ATOM_LIB_FOLDER.'KT_atom_server.inc.php'); | |
| 72 | +include_once(KT_ATOM_LIB_FOLDER.'KT_atom_service_helper.inc.php'); //Containing helper bridge functions to KtAPI | |
| 73 | +include_once(KT_ATOM_LIB_FOLDER.'KT_atom_baseDoc.inc.php'); //Containing the parent class allowing easy XML manipulation | |
| 74 | +include_once(KT_ATOM_LIB_FOLDER.'KT_atom_serviceDoc.inc.php'); //Containing the servicedoc class allowing easy ServiceDocument generation | |
| 75 | +include_once(KT_ATOM_LIB_FOLDER.'KT_atom_responseFeed.inc.php'); //Containing the response feed class allowing easy atom feed generation | |
| 76 | +include_once(KT_ATOM_LIB_FOLDER.'KT_atom_service.inc.php'); | |
| 77 | +include_once(KT_ATOM_LIB_FOLDER.'KT_atom_server.default_dms_services.inc.php'); | |
| 78 | 78 | include_once('auth.php'); //Containing the authentication protocols |
| 79 | 79 | |
| 80 | 80 | |
| 81 | 81 | //Start the AtomPubProtocol Routing Engine |
| 82 | -$APP=new KTAPP(); | |
| 82 | +$APP=new KT_atom_server(); | |
| 83 | 83 | |
| 84 | 84 | /** |
| 85 | 85 | * Register Services |
| 86 | 86 | * |
| 87 | - * Registered services are classes extended from ktAPP_Service | |
| 87 | + * Registered services are classes extended from KT_atom_service | |
| 88 | 88 | * The registration process takes the following parameters |
| 89 | 89 | * Workspace :The workspace within which the service collection will be grouped |
| 90 | 90 | * ServiceName :This is the name by which the service/collection is exposed |
| 91 | 91 | * ServiceClass :This is the class name of the class to be instantiated when this service is accessed |
| 92 | 92 | * Title :This is the title given to the service/collection in the servicedocument |
| 93 | 93 | */ |
| 94 | -$APP->registerService('DMS','fulltree','ktAPP_Service_fullTree','Full Document Tree'); | |
| 95 | -$APP->registerService('DMS','folder','ktAPP_Service_folder','Folder Detail'); | |
| 96 | -$APP->registerService('DMS','document','ktAPP_Service_document','Document Detail'); | |
| 94 | +$APP->registerService('DMS','fulltree','KT_atom_service_fulltree','Full Document Tree'); | |
| 95 | +$APP->registerService('DMS','folder','KT_atom_service_folder','Folder Detail'); | |
| 96 | +$APP->registerService('DMS','document','KT_atom_service_document','Document Detail'); | |
| 97 | 97 | |
| 98 | 98 | //Execute the current url/header request |
| 99 | 99 | $APP->execute(); |
| 100 | 100 | |
| 101 | +//echo '<pre>'.print_r($APP,true).'</pre>'; | |
| 102 | + | |
| 101 | 103 | //Render the resulting feed response |
| 102 | 104 | $APP->render(); |
| 103 | 105 | ... | ... |
ktatompub/lib/KTAPDoc.inc.php renamed to ktatompub/lib/KT_atom_baseDoc.inc.php
ktatompub/lib/KT_atom_responseFeed.inc.php
0 โ 100644
| 1 | +<?php | |
| 2 | +class KT_atom_responseFeed extends KT_atom_baseDoc { | |
| 3 | + | |
| 4 | + private $baseURI=NULL; | |
| 5 | + private $feed=NULL; | |
| 6 | + | |
| 7 | + | |
| 8 | + public function __construct($baseURI=NULL,$title=NULL,$link=NULL,$updated=NULL,$author=NULL,$id=NULL){ | |
| 9 | + parent::__construct(); | |
| 10 | + $this->constructHeader(); | |
| 11 | + $this->baseURI=$baseURI; | |
| 12 | + } | |
| 13 | + | |
| 14 | + private function constructHeader(){ | |
| 15 | + $feed=$this->newElement('feed'); | |
| 16 | + $feed->appendChild($this->newAttr('xmlns','http://www.w3.org/2005/Atom')); | |
| 17 | + $this->feed=&$feed; | |
| 18 | + $this->DOM->appendChild($this->feed); | |
| 19 | + } | |
| 20 | + | |
| 21 | + public function &newEntry(){ | |
| 22 | + $entry=$this->newElement('entry'); | |
| 23 | + $this->feed->appendChild($entry); | |
| 24 | + return $entry; | |
| 25 | + } | |
| 26 | + | |
| 27 | + public function &newField($name=NULL,$value=NULL,&$attachToNode=NULL){ | |
| 28 | + $field=$this->newElement($name,$value); | |
| 29 | + if(isset($attachToNode))$attachToNode->appendChild($field); | |
| 30 | + return $field; | |
| 31 | + } | |
| 32 | + | |
| 33 | + public function render(){ | |
| 34 | + return $this->formatXmlString(trim($this->DOM->saveXML())); | |
| 35 | + } | |
| 36 | + | |
| 37 | + | |
| 38 | +} | |
| 39 | + | |
| 40 | +class KT_atom_ResponseFeed_GET extends KT_atom_responseFeed{} | |
| 41 | +class KT_atom_ResponseFeed_PUT extends KT_atom_responseFeed{} | |
| 42 | +class KT_atom_ResponseFeed_POST extends KT_atom_responseFeed{} | |
| 43 | +class KT_atom_ResponseFeed_DELETE extends KT_atom_responseFeed{} | |
| 44 | + | |
| 45 | +?> | |
| 0 | 46 | \ No newline at end of file | ... | ... |
ktatompub/lib/ktApp.default_dms_services.inc.php renamed to ktatompub/lib/KT_atom_server.default_dms_services.inc.php
| ... | ... | @@ -6,13 +6,13 @@ |
| 6 | 6 | * Tree structure obtained by referencing parent id |
| 7 | 7 | * |
| 8 | 8 | */ |
| 9 | -class ktAPP_Service_fullTree extends ktAPP_Service { | |
| 9 | +class KT_atom_service_fulltree extends KT_atom_service { | |
| 10 | 10 | public function GET_action(){ |
| 11 | 11 | //Create a new response feed |
| 12 | - $feed=new KTAPPFeed(KT_APP_BASE_URI); | |
| 12 | + $feed=new KT_atom_ResponseFeed_GET(KT_APP_BASE_URI); | |
| 13 | 13 | |
| 14 | 14 | //Invoke the KtAPI to get detail about the referenced document |
| 15 | - $tree=KTAPPHelper::getFullTree(); | |
| 15 | + $tree=KT_atom_service_helper::getFullTree(); | |
| 16 | 16 | |
| 17 | 17 | //Create the atom response feed |
| 18 | 18 | foreach($tree as $item){ |
| ... | ... | @@ -28,7 +28,7 @@ class ktAPP_Service_fullTree extends ktAPP_Service { |
| 28 | 28 | } |
| 29 | 29 | |
| 30 | 30 | public function DELETE_action(){ |
| 31 | - $feed = new ktAPP_ResponseFeed_DELETE(); | |
| 31 | + $feed = new KT_atom_ResponseFeed_DELETE(); | |
| 32 | 32 | $this->responseFeed=$feed; |
| 33 | 33 | } |
| 34 | 34 | } |
| ... | ... | @@ -42,13 +42,13 @@ class ktAPP_Service_fullTree extends ktAPP_Service { |
| 42 | 42 | * Returns detail on a particular folder |
| 43 | 43 | * |
| 44 | 44 | */ |
| 45 | -class ktAPP_Service_folder extends ktAPP_Service { | |
| 45 | +class KT_atom_service_folder extends KT_atom_service { | |
| 46 | 46 | public function GET_action(){ |
| 47 | 47 | //Create a new response feed |
| 48 | - $feed=new KTAPPFeed(KT_APP_BASE_URI); | |
| 48 | + $feed=new KT_atom_responseFeed(KT_APP_BASE_URI); | |
| 49 | 49 | |
| 50 | 50 | //Invoke the KtAPI to get detail about the referenced document |
| 51 | - $folderDetail=KTAPPHelper::getFolderDetail($this->params[0]?$this->params[0]:1); | |
| 51 | + $folderDetail=KT_atom_service_helper::getFolderDetail($this->params[0]?$this->params[0]:1); | |
| 52 | 52 | |
| 53 | 53 | //Create the atom response feed |
| 54 | 54 | $entry=$feed->newEntry(); |
| ... | ... | @@ -70,13 +70,13 @@ class ktAPP_Service_folder extends ktAPP_Service { |
| 70 | 70 | * Returns detail on a particular document |
| 71 | 71 | * |
| 72 | 72 | */ |
| 73 | -class ktAPP_Service_document extends ktAPP_Service { | |
| 73 | +class KT_atom_service_document extends KT_atom_service { | |
| 74 | 74 | public function GET_action(){ |
| 75 | 75 | //Create a new response feed |
| 76 | - $feed=new KTAPPFeed(KT_APP_BASE_URI); | |
| 76 | + $feed=new KT_atom_responseFeed(KT_APP_BASE_URI); | |
| 77 | 77 | |
| 78 | 78 | //Invoke the KtAPI to get detail about the referenced document |
| 79 | - $docDetail=KTAPPHelper::getDocumentDetail($this->params[0]); | |
| 79 | + $docDetail=KT_atom_service_helper::getDocumentDetail($this->params[0]); | |
| 80 | 80 | |
| 81 | 81 | //Create the atom response feed |
| 82 | 82 | $entry=$feed->newEntry(); | ... | ... |
ktatompub/lib/ktAPP.inc.php renamed to ktatompub/lib/KT_atom_server.inc.php
| 1 | -<?php | |
| 2 | -class KTAPP{ | |
| 1 | +<?php | |
| 2 | +class KT_atom_server{ | |
| 3 | 3 | private $services=array(); |
| 4 | 4 | private $errors=array(); |
| 5 | 5 | private $output=''; |
| 6 | - | |
| 6 | + private $queryArray=array(); | |
| 7 | + private $serviceName=''; | |
| 8 | + private $method=''; | |
| 9 | + private $workspace=''; | |
| 10 | + | |
| 11 | + | |
| 7 | 12 | public function __construct(){ |
| 8 | 13 | } |
| 9 | - | |
| 14 | + | |
| 10 | 15 | public function execute(){ |
| 11 | 16 | $reqMethod=trim(strtoupper($_SERVER['REQUEST_METHOD'])); |
| 12 | 17 | $queryArray=split('/',trim($_SERVER['QUERY_STRING'],'/')); |
| ... | ... | @@ -17,54 +22,58 @@ class KTAPP{ |
| 17 | 22 | $requestParams=array_slice($queryArray,2); |
| 18 | 23 | $this->queryArray=$queryArray; |
| 19 | 24 | $this->serviceName=$service; |
| 20 | - | |
| 25 | + $this->method=$reqMethod; | |
| 26 | + $this->workspace=$workspace; | |
| 27 | + | |
| 21 | 28 | if($workspace=='servicedocument'){ |
| 22 | 29 | $this->serviceDocument(); |
| 23 | 30 | return; |
| 24 | 31 | } |
| 25 | - | |
| 32 | + | |
| 26 | 33 | $service=$this->getRegisteredService($workspace,$serviceName); |
| 27 | - | |
| 28 | 34 | if(is_array($service)){ |
| 29 | 35 | $serviceClass=$service['serviceClass']; |
| 36 | + echo 'made it'; | |
| 30 | 37 | $serviceObject=new $serviceClass($reqMethod,$requestParams,$rawRequest); |
| 31 | 38 | $this->output=$serviceObject->render(); |
| 32 | 39 | }else{ |
| 33 | - echo "Could not find service:{$service['serviceFunc']} in $workspace"; //TODO: ERROR HERE | |
| 40 | + $serviceObject=new KT_atom_service($requestParams,$rawRequest); | |
| 41 | + $serviceObject->setStatus(KT_atom_service::STATUS_NOT_FOUND); | |
| 42 | + $this->output=$serviceObject->render(); | |
| 34 | 43 | } |
| 35 | 44 | } |
| 36 | 45 | |
| 37 | 46 | public function registerService($workspace=NULL,$serviceName=NULL,$serviceClass=NULL,$title=NULL){ |
| 38 | 47 | $workspace=strtolower(trim($workspace)); |
| 39 | 48 | $serviceName=strtolower(trim($serviceName)); |
| 40 | - | |
| 49 | + | |
| 41 | 50 | $serviceRecord=array( |
| 42 | 51 | 'fileName' =>$fileName, |
| 43 | 52 | 'serviceClass' =>$serviceClass, |
| 44 | 53 | 'title' =>$title |
| 45 | 54 | ); |
| 46 | - | |
| 55 | + | |
| 47 | 56 | $this->services[$workspace][$serviceName]=$serviceRecord; |
| 48 | 57 | } |
| 49 | - | |
| 58 | + | |
| 50 | 59 | public function getRegisteredService($workspace,$serviceName=NULL){ |
| 51 | 60 | $serviceName=strtolower(trim($serviceName)); |
| 52 | 61 | if(isset($this->services[$workspace][$serviceName]))return $this->services[$workspace][$serviceName]; |
| 53 | 62 | return false; |
| 54 | 63 | } |
| 55 | - | |
| 64 | + | |
| 56 | 65 | public function serviceDocument(){ |
| 57 | - $service=new KTAPPServiceDoc(KT_APP_BASE_URI); | |
| 58 | - | |
| 66 | + $service=new KT_atom_serviceDoc(KT_APP_BASE_URI); | |
| 67 | + | |
| 59 | 68 | foreach($this->services as $workspace=>$collection){ |
| 60 | 69 | //Creating the Default Workspace for use with standard atomPub Clients |
| 61 | 70 | $ws=$service->newWorkspace($workspace); |
| 62 | - | |
| 71 | + | |
| 63 | 72 | foreach($collection as $serviceName=>$serviceInstance){ |
| 64 | 73 | $col=$service->newCollection(KT_APP_BASE_URI.$workspace.'/'.$serviceName.'/',$serviceInstance['title'],$ws); |
| 65 | 74 | } |
| 66 | 75 | } |
| 67 | - | |
| 76 | + | |
| 68 | 77 | $this->output=$service->getAPPdoc(); |
| 69 | 78 | } |
| 70 | 79 | ... | ... |
ktatompub/lib/KtAPP_Service.inc.php renamed to ktatompub/lib/KT_atom_service.inc.php
| 1 | 1 | <?php |
| 2 | -class ktAPP_Service{ | |
| 2 | +class KT_atom_service{ | |
| 3 | 3 | const STATUS_OK ='200 OK'; |
| 4 | 4 | const STATUS_NOT_FOUND ='204 No Content'; |
| 5 | 5 | const STATUS_NOT_ALLOWED ='204 Not Allowed'; |
| 6 | 6 | const STATUS_NOT_AUTHENTICATED ='204 Not Authenticated'; |
| 7 | 7 | const STATUS_CREATED ='201 Created'; |
| 8 | 8 | const STATUS_UPDATED ='200 Updated'; |
| 9 | - const STATUS_NOT_MODIFIED ='304 Not Modified'; | |
| 9 | + const STATUS_NOT_MODIFIED ='304 Not Modified'; //For use with ETag & If-None-Match headers. | |
| 10 | 10 | const STATUS_PRECONDITION_FAILED='412 Precondition Failed'; //Could not update document because another a newer version exist on the server than the one you are trying to update |
| 11 | 11 | |
| 12 | 12 | public $responseFeed=NULL; |
| ... | ... | @@ -21,31 +21,37 @@ class ktAPP_Service{ |
| 21 | 21 | $this->method=$method; |
| 22 | 22 | $this->params=$params; |
| 23 | 23 | $this->rawContent=$content; |
| 24 | - $this->parsedXMLContent=json_decode(json_encode(@simplexml_load_string($this->rawContent)),true); | |
| 24 | + $this->parseHeaders(); | |
| 25 | + $this->parsedXMLContent=$this->xml2array($this->rawContent); | |
| 25 | 26 | $this->setStatus(self::STATUS_OK); |
| 26 | - $this->responseFeed=new KTAPPFeed(KT_APP_BASE_URI); | |
| 27 | + $this->responseFeed=new KT_atom_responseFeed(KT_APP_BASE_URI); | |
| 27 | 28 | switch(strtoupper($this->method)){ |
| 28 | 29 | case 'GET': $this->GET_action();break; |
| 29 | 30 | case 'PUT': $this->PUT_action();break; |
| 30 | 31 | case 'POST': $this->POST_action();break; |
| 31 | 32 | case 'DELETE': $this->DELETE_action();break; |
| 33 | + default: $this->UNSUPPORTED_action();break; | |
| 32 | 34 | } |
| 33 | 35 | } |
| 34 | 36 | |
| 35 | 37 | public function GET_action(){ |
| 36 | - $this->setStatus(ktAPP_Service::STATUS_OK); | |
| 38 | + $this->setStatus(KT_atom_service::STATUS_OK); | |
| 37 | 39 | } |
| 38 | 40 | |
| 39 | 41 | public function PUT_action(){ |
| 40 | - $this->setStatus(ktAPP_Service::STATUS_NOT_FOUND ); | |
| 42 | + $this->setStatus(KT_atom_service::STATUS_NOT_FOUND ); | |
| 41 | 43 | } |
| 42 | 44 | |
| 43 | 45 | public function POST_action(){ |
| 44 | - $this->setStatus(ktAPP_Service::STATUS_NOT_FOUND ); | |
| 46 | + $this->setStatus(KT_atom_service::STATUS_NOT_FOUND ); | |
| 45 | 47 | } |
| 46 | 48 | |
| 47 | 49 | public function DELETE_action(){ |
| 48 | - $this->setStatus(ktAPP_Service::STATUS_NOT_FOUND ); | |
| 50 | + $this->setStatus(KT_atom_service::STATUS_NOT_FOUND ); | |
| 51 | + } | |
| 52 | + | |
| 53 | + public function UNSUPPORTED_action(){ | |
| 54 | + $this->setStatus(KT_atom_service::STATUS_NOT_FOUND ); | |
| 49 | 55 | } |
| 50 | 56 | |
| 51 | 57 | |
| ... | ... | @@ -53,11 +59,26 @@ class ktAPP_Service{ |
| 53 | 59 | return $this->responseFeed->render(); |
| 54 | 60 | } |
| 55 | 61 | |
| 56 | - private function parseHeaders(){ | |
| 62 | + private function xml2array($xml){ | |
| 63 | + $array=json_decode(json_encode(@simplexml_load_string($xml)),true); //TODO - XML2ARRAY Translation | |
| 64 | + return $array; | |
| 65 | + } | |
| 57 | 66 | |
| 67 | + private function parseHeaders(){ | |
| 68 | + $headers=null; | |
| 69 | + if(function_exists('http_get_request_headers')){ //Try to use pcre_http library if it exists | |
| 70 | + $headers=http_get_request_headers(); | |
| 71 | + }else{ | |
| 72 | + if(function_exists('apache_request_headers')){ //If not: try to use apache specific headers | |
| 73 | + $headers=apache_request_headers(); | |
| 74 | + }else{ //If not: not supported - empty headers | |
| 75 | + $headers=array(); | |
| 76 | + } | |
| 77 | + } | |
| 78 | + $this->headers=$headers; | |
| 58 | 79 | } |
| 59 | 80 | |
| 60 | - private function setStatus($status=NULL){ | |
| 81 | + public function setStatus($status=NULL){ | |
| 61 | 82 | header("HTTP/1.1 ".$status); |
| 62 | 83 | } |
| 63 | 84 | |
| ... | ... | @@ -65,6 +86,5 @@ class ktAPP_Service{ |
| 65 | 86 | if($etagValue)header('ETag: '.$etagValue); |
| 66 | 87 | } |
| 67 | 88 | |
| 68 | - | |
| 69 | 89 | } |
| 70 | 90 | ?> |
| 71 | 91 | \ No newline at end of file | ... | ... |
ktatompub/lib/KTAPPServiceDoc.inc.php renamed to ktatompub/lib/KT_atom_serviceDoc.inc.php
| ... | ... | @@ -41,10 +41,10 @@ |
| 41 | 41 | /** |
| 42 | 42 | * Includes |
| 43 | 43 | */ |
| 44 | -include_once('KTAPDoc.inc.php'); | |
| 44 | +include_once('KT_atom_baseDoc.inc.php'); | |
| 45 | 45 | |
| 46 | 46 | |
| 47 | -class KTAPPServiceDoc extends KTAPDoc { | |
| 47 | +class KT_atom_serviceDoc extends KT_atom_baseDoc { | |
| 48 | 48 | |
| 49 | 49 | private $baseURI=NULL; |
| 50 | 50 | private $service=NULL; | ... | ... |
ktatompub/lib/KTAPPHelper.inc.php renamed to ktatompub/lib/KT_atom_service_helper.inc.php
| ... | ... | @@ -37,7 +37,7 @@ |
| 37 | 37 | * |
| 38 | 38 | */ |
| 39 | 39 | |
| 40 | -class KTAPPHelper{ | |
| 40 | +class KT_atom_service_helper{ | |
| 41 | 41 | private static $FOLDER_LIST_PROPERTIES=array('id','title','permissions','mime_icon_path'); |
| 42 | 42 | private static $FILE_LIST_PROPERTIES=array('id','title','document_type','created_by','created_date','checked_out_by','checked_out_date','modified_by','modified_date','owned_by','mime_type','mime_icon_path','mime_display'); |
| 43 | 43 | private static $FOLDER_RECURSION_LEVEL=100; |
| ... | ... | @@ -49,7 +49,7 @@ class KTAPPHelper{ |
| 49 | 49 | * @return void |
| 50 | 50 | */ |
| 51 | 51 | public function __construct(){ |
| 52 | - die('KTAPPHelper should not be instantiated. Only use as a static class'); | |
| 52 | + die('KT_atom_service_helper should not be instantiated. Only use as a static class'); | |
| 53 | 53 | } |
| 54 | 54 | |
| 55 | 55 | |
| ... | ... | @@ -181,11 +181,11 @@ class KTAPPHelper{ |
| 181 | 181 | |
| 182 | 182 | $session = $kt->start_session($username,$password, $ip); |
| 183 | 183 | if (PEAR::isError($session)){ |
| 184 | - $response['status_code']=KTAPP_FAILURE; | |
| 184 | + $response['status_code']=KT_atom_server_FAILURE; | |
| 185 | 185 | $response['session_id']=''; |
| 186 | 186 | }else{ |
| 187 | 187 | $session= $session->get_session(); |
| 188 | - $response['status_code'] = KTAPP_SUCCESS; | |
| 188 | + $response['status_code'] = KT_atom_server_SUCCESS; | |
| 189 | 189 | $response['session_id'] = $session; |
| 190 | 190 | } |
| 191 | 191 | return $response; |
| ... | ... | @@ -203,10 +203,10 @@ class KTAPPHelper{ |
| 203 | 203 | $session = $kt->get_active_session($session_id, null); |
| 204 | 204 | |
| 205 | 205 | if (PEAR::isError($session)){ |
| 206 | - $response['status_code']=KTAPP_FAILURE; | |
| 206 | + $response['status_code']=KT_atom_server_FAILURE; | |
| 207 | 207 | }else{ |
| 208 | 208 | $session->logout(); |
| 209 | - $response['status_code'] = KTAPP_SUCCESS; | |
| 209 | + $response['status_code'] = KT_atom_server_SUCCESS; | |
| 210 | 210 | } |
| 211 | 211 | return $response; |
| 212 | 212 | } | ... | ... |
ktatompub/lib/cmis/KTCMISAPPFeed.inc.php
| ... | ... | @@ -40,13 +40,13 @@ |
| 40 | 40 | /** |
| 41 | 41 | * Includes |
| 42 | 42 | */ |
| 43 | -include_once('../KTAPDoc.inc.php'); | |
| 43 | +include_once('../KT_atom_baseDoc.inc.php'); | |
| 44 | 44 | |
| 45 | 45 | /** |
| 46 | 46 | * This class generates an AtomPub CMIS feed |
| 47 | 47 | */ |
| 48 | 48 | |
| 49 | -class KTCMISAPPFeed extends KTAPDoc { | |
| 49 | +class KTCMISAPPFeed extends KT_atom_baseDoc { | |
| 50 | 50 | |
| 51 | 51 | private $baseURI = NULL; |
| 52 | 52 | private $id = NULL; | ... | ... |
ktatompub/lib/cmis/KTCMISAPPServiceDoc.inc.php
| ... | ... | @@ -39,13 +39,13 @@ |
| 39 | 39 | /** |
| 40 | 40 | * Includes |
| 41 | 41 | */ |
| 42 | -include_once('../KTAPDoc.inc.php'); | |
| 42 | +include_once('../KT_atom_baseDoc.inc.php'); | |
| 43 | 43 | |
| 44 | 44 | /** |
| 45 | 45 | * This class generates an AtomPub CMIS service document |
| 46 | 46 | */ |
| 47 | 47 | |
| 48 | -class KTCMISAPPServiceDoc extends KTAPDoc { | |
| 48 | +class KTCMISAPPServiceDoc extends KT_atom_baseDoc { | |
| 49 | 49 | |
| 50 | 50 | private $baseURI=NULL; |
| 51 | 51 | private $service=NULL; | ... | ... |
ktatompub/lib/ktAPP_ResponseFeed.inc.php deleted
| 1 | -<?php | |
| 2 | -class ktAPP_ResponseFeed extends KTAPPFeed { | |
| 3 | - | |
| 4 | -} | |
| 5 | - | |
| 6 | -class ktAPP_ResponseFeed_GET extends ktAPP_ResponseFeed{} | |
| 7 | -class ktAPP_ResponseFeed_PUT extends ktAPP_ResponseFeed{} | |
| 8 | -class ktAPP_ResponseFeed_POST extends ktAPP_ResponseFeed{} | |
| 9 | -class ktAPP_ResponseFeed_DELETE extends ktAPP_ResponseFeed{ | |
| 10 | -} | |
| 11 | -?> | |
| 12 | 0 | \ No newline at end of file |
ktatompub/phpinfo.php
0 โ 100644
ktatompub/services/cmis/NavigationService.inc.php deleted
| 1 | -<?php | |
| 2 | - | |
| 3 | -require_once KT_LIB_DIR . '/api/ktcmis/ktcmis.inc.php'; | |
| 4 | - | |
| 5 | -/** | |
| 6 | - * CMIS Service class which hooks into the KnowledgeTree interface | |
| 7 | - * for processing of CMIS queries and responses via atompub/webservices | |
| 8 | - */ | |
| 9 | - | |
| 10 | -class NavigationService extends KTNavigationService { | |
| 11 | - | |
| 12 | - /** | |
| 13 | - * Get descendents of the specified folder, up to the depth indicated | |
| 14 | - * | |
| 15 | - * @param string $repositoryId | |
| 16 | - * @param string $folderId | |
| 17 | - * @param boolean $includeAllowableActions | |
| 18 | - * @param boolean $includeRelationships | |
| 19 | - * @param string $typeID | |
| 20 | - * @param int $depth | |
| 21 | - * @param string $filter | |
| 22 | - * @return cmisObjectType[] | |
| 23 | - */ | |
| 24 | - public function getDescendants($repositoryId, $folderId, $includeAllowableActions, $includeRelationships, | |
| 25 | - $depth = 1, $typeID = 'Any', $filter = '') | |
| 26 | - { | |
| 27 | - $result = parent::getDescendants($repositoryId, $folderId, $includeAllowableActions, | |
| 28 | - $includeRelationships, $depth, $typeID, $filter); | |
| 29 | - | |
| 30 | - if ($result['status_code'] == 0) | |
| 31 | - { | |
| 32 | - return $result['results']; | |
| 33 | - } | |
| 34 | - } | |
| 35 | - | |
| 36 | - /** | |
| 37 | - * Get direct children of the specified folder | |
| 38 | - * | |
| 39 | - * @param string $repositoryId | |
| 40 | - * @param string $folderId | |
| 41 | - * @param boolean $includeAllowableActions | |
| 42 | - * @param boolean $includeRelationships | |
| 43 | - * @param string $typeID | |
| 44 | - * @param string $filter | |
| 45 | - * @param int $maxItems | |
| 46 | - * @param int $skipCount | |
| 47 | - * @return cmisObjectType[] | |
| 48 | - */ | |
| 49 | - public function getChildren($repositoryId, $folderId, $includeAllowableActions, $includeRelationships, | |
| 50 | - $typeID = 'Any', $filter = '', $maxItems = 0, $skipCount = 0) | |
| 51 | - { | |
| 52 | - $result = parent::getChildren($repositoryId, $folderId, $includeAllowableActions, $includeRelationships, | |
| 53 | - $typeID, $filter, $maxItems, $skipCount); | |
| 54 | - | |
| 55 | - if ($result['status_code'] == 0) | |
| 56 | - { | |
| 57 | - return $result['results']; | |
| 58 | - } | |
| 59 | - } | |
| 60 | - | |
| 61 | - /** | |
| 62 | - * Gets the parent of the selected folder | |
| 63 | - * | |
| 64 | - * @param string $repositoryId | |
| 65 | - * @param string $folderId | |
| 66 | - * @param boolean $includeAllowableActions | |
| 67 | - * @param boolean $includeRelationships | |
| 68 | - * @param boolean $returnToRoot | |
| 69 | - * @param string $filter | |
| 70 | - * @return cmisObjectType[] | |
| 71 | - */ | |
| 72 | - public function getFolderParent($repositoryId, $folderId, $includeAllowableActions, $includeRelationships, $returnToRoot, $filter = '') | |
| 73 | - { | |
| 74 | - $result = parent::getFolderParent($repositoryId, $folderId, $includeAllowableActions, $includeRelationships, $returnToRoot, $filter); | |
| 75 | - | |
| 76 | - if ($result['status_code'] == 0) | |
| 77 | - { | |
| 78 | - return $result['results']; | |
| 79 | - } | |
| 80 | - } | |
| 81 | - | |
| 82 | - /** | |
| 83 | - * Gets the parents for the selected object | |
| 84 | - * | |
| 85 | - * @param string $repositoryId | |
| 86 | - * @param string $folderId | |
| 87 | - * @param boolean $includeAllowableActions | |
| 88 | - * @param boolean $includeRelationships | |
| 89 | - * @param string $filter | |
| 90 | - * @return cmisObjectType[] | |
| 91 | - */ | |
| 92 | - public function getObjectParents($repositoryId, $objectId, $includeAllowableActions, $includeRelationships, $filter = '') | |
| 93 | - { | |
| 94 | - $result = parent::getObjectParents($repositoryId, $objectId, $includeAllowableActions, $includeRelationships, $filter); | |
| 95 | - | |
| 96 | - if ($result['status_code'] == 0) | |
| 97 | - { | |
| 98 | - return $result['results']; | |
| 99 | - } | |
| 100 | - } | |
| 101 | - | |
| 102 | - /** | |
| 103 | - * Returns a list of checked out documents from the selected repository | |
| 104 | - * | |
| 105 | - * @param string $repositoryId | |
| 106 | - * @param string $folderId The folder for which checked out docs are requested | |
| 107 | - * @param string $filter | |
| 108 | - * @param int $maxItems | |
| 109 | - * @param int $skipCount | |
| 110 | - * @return array $checkedout The collection of checked out documents | |
| 111 | - */ | |
| 112 | - function getCheckedoutDocs($repositoryId, $folderId = null, $filter = '', $maxItems = 0, $skipCount = 0) | |
| 113 | - { | |
| 114 | - $checkedout = parent::getObjectParents($repositoryId, $folderId, $filter, $maxItems, $skipCount); | |
| 115 | - | |
| 116 | - if ($result['status_code'] == 0) | |
| 117 | - { | |
| 118 | - return $result['results']; | |
| 119 | - } | |
| 120 | - } | |
| 121 | - | |
| 122 | -} | |
| 123 | - | |
| 124 | -?> |
ktatompub/services/cmis/ObjectFeed.inc.php deleted
| 1 | -<?php | |
| 2 | - | |
| 3 | -class CMISObjectFeed { | |
| 4 | - | |
| 5 | - /** | |
| 6 | - * Creates an AtomPub entry for a CMIS entry and adds it to the supplied feed | |
| 7 | - * | |
| 8 | - * @param object $feed The feed to which we add the entry | |
| 9 | - * @param array $cmisEntry The entry data | |
| 10 | - * @param string $parent The parent folder | |
| 11 | - */ | |
| 12 | - static public function createEntry(&$feed, $cmisEntry, $parent, $path) | |
| 13 | - { | |
| 14 | - preg_match('/^\/?cmis\/folder\/(.*)\/[^\/]*\/?$/', trim($_SERVER['QUERY_STRING'], '/'), $matches); | |
| 15 | - $path = $matches[1]; | |
| 16 | - $parent = preg_replace('/\/[^\/]*$/', '', $path); | |
| 17 | - | |
| 18 | - $entry = $feed->newEntry(); | |
| 19 | - $feed->newId('urn:uuid:' . $cmisEntry['properties']['Name']['value'] . '-' | |
| 20 | - . strtolower($cmisEntry['properties']['ObjectTypeId']['value']), $entry); | |
| 21 | - | |
| 22 | - /* | |
| 23 | -<link rel="edit" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/e98319fa-76e4-478f-8ce8-a3a0fd683e2c"/> | |
| 24 | -<link rel="cmis-allowableactions" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/e98319fa-76e4-478f-8ce8-a3a0fd683e2c/permissions"/> | |
| 25 | -<link rel="cmis-relationships" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/e98319fa-76e4-478f-8ce8-a3a0fd683e2c/associations"/> | |
| 26 | - */ | |
| 27 | - | |
| 28 | - // links | |
| 29 | -// $link = $feed->newElement('link'); | |
| 30 | -// $link->appendChild($feed->newAttr('rel','self')); | |
| 31 | -// $link->appendChild($feed->newAttr('href', CMIS_BASE_URI . strtolower($cmisEntry['properties']['ObjectTypeId']['value']) | |
| 32 | -// . '/' . $cmisEntry['properties']['ObjectId']['value'])); | |
| 33 | -// $entry->appendChild($link); | |
| 34 | - $link = $feed->newElement('link'); | |
| 35 | - $link->appendChild($feed->newAttr('rel','cmis-parent')); | |
| 36 | - $link->appendChild($feed->newAttr('href', CMIS_BASE_URI . 'folder/' . $path)); | |
| 37 | - $entry->appendChild($link); | |
| 38 | - | |
| 39 | - if (strtolower($cmisEntry['properties']['ObjectTypeId']['value']) == 'folder') | |
| 40 | - { | |
| 41 | - $link = $feed->newElement('link'); | |
| 42 | - $link->appendChild($feed->newAttr('rel','cmis-folderparent')); | |
| 43 | - $link->appendChild($feed->newAttr('href', CMIS_BASE_URI . 'folder/' . $path)); | |
| 44 | - $entry->appendChild($link); | |
| 45 | - $link = $feed->newElement('link'); | |
| 46 | - $link->appendChild($feed->newAttr('rel','cmis-children')); | |
| 47 | - $link->appendChild($feed->newAttr('href', CMIS_BASE_URI | |
| 48 | - . strtolower($cmisEntry['properties']['ObjectTypeId']['value']) | |
| 49 | - . '/' . $path . '/' . urlencode($cmisEntry['properties']['Name']['value']) | |
| 50 | - . '/children')); | |
| 51 | - $entry->appendChild($link); | |
| 52 | - $link = $feed->newElement('link'); | |
| 53 | - $link->appendChild($feed->newAttr('rel','cmis-descendants')); | |
| 54 | - $link->appendChild($feed->newAttr('href', CMIS_BASE_URI | |
| 55 | - . strtolower($cmisEntry['properties']['ObjectTypeId']['value']) | |
| 56 | - . '/' . $path . '/' . urlencode($cmisEntry['properties']['Name']['value']) | |
| 57 | - . '/descendants')); | |
| 58 | - $entry->appendChild($link); | |
| 59 | - } | |
| 60 | - | |
| 61 | - $link = $feed->newElement('link'); | |
| 62 | - $link->appendChild($feed->newAttr('rel','cmis-type')); | |
| 63 | - $link->appendChild($feed->newAttr('href', CMIS_BASE_URI . 'type/' . strtolower($cmisEntry['properties']['ObjectTypeId']['value']))); | |
| 64 | - $entry->appendChild($link); | |
| 65 | - $link = $feed->newElement('link'); | |
| 66 | - $link->appendChild($feed->newAttr('rel','cmis-repository')); | |
| 67 | - $link->appendChild($feed->newAttr('href', CMIS_BASE_URI . 'repository')); | |
| 68 | - $entry->appendChild($link); | |
| 69 | - // end links | |
| 70 | - | |
| 71 | - $entry->appendChild($feed->newElement('summary', $cmisEntry['properties']['Name']['value'])); | |
| 72 | - $entry->appendChild($feed->newElement('title', $cmisEntry['properties']['Name']['value'])); | |
| 73 | - | |
| 74 | - // main CMIS entry | |
| 75 | - $objectElement = $feed->newElement('cmis:object'); | |
| 76 | - $propertiesElement = $feed->newElement('cmis:properties'); | |
| 77 | - | |
| 78 | - foreach($cmisEntry['properties'] as $propertyName => $property) | |
| 79 | - { | |
| 80 | - $propElement = $feed->newElement('cmis:' . $property['type']); | |
| 81 | - $propElement->appendChild($feed->newAttr('cmis:name', $propertyName)); | |
| 82 | - $feed->newField('value', CMISUtil::boolToString($property['value']), $propElement); | |
| 83 | - $propertiesElement->appendChild($propElement); | |
| 84 | - } | |
| 85 | - | |
| 86 | - $objectElement->appendChild($propertiesElement); | |
| 87 | - $entry->appendChild($objectElement); | |
| 88 | - } | |
| 89 | - | |
| 90 | -} | |
| 91 | - | |
| 92 | -?> |
ktatompub/services/cmis/ObjectService.inc.php deleted
| 1 | -<?php | |
| 2 | - | |
| 3 | -require_once KT_LIB_DIR . '/api/ktcmis/ktcmis.inc.php'; | |
| 4 | - | |
| 5 | -/** | |
| 6 | - * CMIS Service class which hooks into the KnowledgeTree interface | |
| 7 | - * for processing of CMIS queries and responses via atompub/webservices | |
| 8 | - */ | |
| 9 | - | |
| 10 | -class ObjectService extends KTObjectService { | |
| 11 | - | |
| 12 | - /** | |
| 13 | - * Fetches the properties for the specified object | |
| 14 | - * | |
| 15 | - * @param string $repositoryId | |
| 16 | - * @param string $objectId | |
| 17 | - * @param boolean $includeAllowableActions | |
| 18 | - * @param boolean $includeRelationships | |
| 19 | - * @param boolean $returnVersion | |
| 20 | - * @param string $filter | |
| 21 | - * @return object CMIS object properties | |
| 22 | - */ | |
| 23 | - public function getProperties($repositoryId, $objectId, $includeAllowableActions, $includeRelationships, | |
| 24 | - $returnVersion = false, $filter = '') | |
| 25 | - { | |
| 26 | - $result = parent::getProperties($repositoryId, $objectId, $includeAllowableActions, | |
| 27 | - $returnVersion, $filter); | |
| 28 | - | |
| 29 | - if ($result['status_code'] == 0) | |
| 30 | - { | |
| 31 | - return $result['results']; | |
| 32 | - } | |
| 33 | - } | |
| 34 | - | |
| 35 | -} | |
| 36 | - | |
| 37 | -?> |
ktatompub/services/cmis/RepositoryService.inc.php deleted
| 1 | -<?php | |
| 2 | - | |
| 3 | -/** | |
| 4 | - * CMIS Service class which hooks into the KnowledgeTree interface | |
| 5 | - * for processing of CMIS queries and responses via atompub/webservices | |
| 6 | - */ | |
| 7 | - | |
| 8 | -require_once KT_LIB_DIR . '/api/ktcmis/ktcmis.inc.php'; | |
| 9 | - | |
| 10 | -class RepositoryService extends KTRepositoryService { | |
| 11 | - | |
| 12 | - /** | |
| 13 | - * Fetches a list of available repositories | |
| 14 | - * | |
| 15 | - * @return cmisRepositoryEntryType[] | |
| 16 | - */ | |
| 17 | - public function getRepositories() | |
| 18 | - { | |
| 19 | - $result = parent::getRepositories(); | |
| 20 | - | |
| 21 | - if ($result['status_code'] == 0) | |
| 22 | - { | |
| 23 | - return $result['results']; | |
| 24 | - } | |
| 25 | - } | |
| 26 | - | |
| 27 | - /** | |
| 28 | - * Fetches information about the selected repository | |
| 29 | - * | |
| 30 | - * @param string $repositoryId | |
| 31 | - * @return cmisRepositoryInfoType | |
| 32 | - */ | |
| 33 | - public function getRepositoryInfo($repositoryId) | |
| 34 | - { | |
| 35 | - $result = parent::getRepositoryInfo($repositoryId); | |
| 36 | - | |
| 37 | - if ($result['status_code'] == 0) | |
| 38 | - { | |
| 39 | - return $result['results']; | |
| 40 | - } | |
| 41 | - } | |
| 42 | - | |
| 43 | - /** | |
| 44 | - * Fetch the list of supported object types for the selected repository | |
| 45 | - * | |
| 46 | - * @param string $repositoryId The ID of the repository for which object types must be returned | |
| 47 | - * @param string $typeId The type to return, ALL if not set | |
| 48 | - * @param boolean $returnPropertyDefinitions Return property definitions as well if TRUE | |
| 49 | - * @param int $maxItems The maximum number of items to return | |
| 50 | - * @param int $skipCount The number of items to skip before starting to return results | |
| 51 | - * @param boolean $hasMoreItems TRUE if there are more items to return than were requested | |
| 52 | - * @return cmisTypeDefinitionType[] | |
| 53 | - */ | |
| 54 | - public function getTypes($repositoryId, $typeId = '', $returnPropertyDefinitions = false, | |
| 55 | - $maxItems = 0, $skipCount = 0, &$hasMoreItems = false) | |
| 56 | - { | |
| 57 | - $result = parent::getTypes($repositoryId, $typeId, $returnPropertyDefinitions, | |
| 58 | - $maxItems, $skipCount, $hasMoreItems); | |
| 59 | - | |
| 60 | - if ($result['status_code'] == 0) | |
| 61 | - { | |
| 62 | - return $result['results']; | |
| 63 | - } | |
| 64 | - } | |
| 65 | - | |
| 66 | - /** | |
| 67 | - * Fetch the object type definition for the requested type | |
| 68 | - * | |
| 69 | - * @param string $repositoryId | |
| 70 | - * @param string $typeId | |
| 71 | - * @return cmisTypeDefinitionType | |
| 72 | - */ | |
| 73 | - public function getTypeDefinition($repositoryId, $typeId) | |
| 74 | - { | |
| 75 | - $result = parent::getTypeDefinition($repositoryId, $typeId); | |
| 76 | - | |
| 77 | - if ($result['status_code'] == 0) | |
| 78 | - { | |
| 79 | - return $result['results']; | |
| 80 | - } | |
| 81 | - } | |
| 82 | - | |
| 83 | -} | |
| 84 | - | |
| 85 | -?> |
ktatompub/services/cmis/checkedout.inc.php deleted
| 1 | -<?php | |
| 2 | - | |
| 3 | -/** | |
| 4 | - * Retrieves the list of checked out documents and returns it as an AtomPub feed | |
| 5 | - * | |
| 6 | - * NOTE since we don't yet support getCheckedOutDocuments in the CMIS API, this code | |
| 7 | - * returns a static empty feed | |
| 8 | - * | |
| 9 | - * TODO when the CMIS API functionality exists, create the feed dynamically | |
| 10 | - */ | |
| 11 | - | |
| 12 | -include 'services/cmis/RepositoryService.inc.php'; | |
| 13 | -include 'services/cmis/NavigationService.inc.php'; | |
| 14 | - | |
| 15 | -$RepositoryService = new RepositoryService(); | |
| 16 | -$NavigationService = new NavigationService(); | |
| 17 | - | |
| 18 | -$NavigationService->startSession($username, $password); | |
| 19 | - | |
| 20 | -$repositories = $RepositoryService->getRepositories(); | |
| 21 | -$repositoryId = $repositories[0]['repositoryId']; | |
| 22 | - | |
| 23 | -$checkedout = $NavigationService->getCheckedoutDocs($repositoryId); | |
| 24 | - | |
| 25 | -$feed = new KTCMISAPPFeed(KT_APP_BASE_URI, 'Checked out Documents', null, null, null, 'urn:uuid:checkedout'); | |
| 26 | - | |
| 27 | -foreach($checkedout as $document) | |
| 28 | -{ | |
| 29 | - $entry = $feed->newEntry(); | |
| 30 | - $objectElement = $feed->newElement('cmis:object'); | |
| 31 | - $propertiesElement = $feed->newElement('cmis:properties'); | |
| 32 | - | |
| 33 | - foreach($cmisEntry['properties'] as $propertyName => $property) | |
| 34 | - { | |
| 35 | - $propElement = $feed->newElement('cmis:' . $property['type']); | |
| 36 | - $propElement->appendChild($feed->newAttr('cmis:name', $propertyName)); | |
| 37 | - $feed->newField('value', CMISUtil::boolToString($property['value']), $propElement); | |
| 38 | - $propertiesElement->appendChild($propElement); | |
| 39 | - } | |
| 40 | - | |
| 41 | - $objectElement->appendChild($propertiesElement); | |
| 42 | - $entry->appendChild($objectElement); | |
| 43 | -} | |
| 44 | - | |
| 45 | -$entry = null; | |
| 46 | -$feed->newField('hasMoreItems', 'false', $entry, true); | |
| 47 | - | |
| 48 | -$output = $feed->getAPPdoc(); | |
| 49 | - | |
| 50 | -?> |
ktatompub/services/cmis/document.inc.php deleted
| 1 | -<?php | |
| 2 | - | |
| 3 | -/** | |
| 4 | - * Document access/management functions for CMIS AtomPub | |
| 5 | - * Output returned as an AtomPub feed | |
| 6 | - */ | |
| 7 | -include 'services/cmis/ObjectFeed.inc.php'; | |
| 8 | - | |
| 9 | -class CMISDocumentFeed extends CMISObjectFeed { | |
| 10 | - | |
| 11 | - /** | |
| 12 | - * Retrieves data about a specific document | |
| 13 | - * | |
| 14 | - * @param object $ObjectService The CMIS service | |
| 15 | - * @param string $repositoryId | |
| 16 | - * @param string $documentId | |
| 17 | - * @return string CMIS AtomPub feed | |
| 18 | - */ | |
| 19 | - static public function getDocumentFeed($ObjectService, $repositoryId, $documentId) | |
| 20 | - { | |
| 21 | - $cmisEntry = $ObjectService->getProperties($repositoryId, $documentId, false, false); | |
| 22 | - | |
| 23 | - $feed = new KTCMISAPPFeed(KT_APP_BASE_URI, $cmisEntry['properties']['ObjectTypeId']['value'], null, null, null, | |
| 24 | - 'urn:uuid:' . $cmisEntry['properties']['ObjectId']['value']); | |
| 25 | - | |
| 26 | - CMISDocumentFeed::createEntry($feed, $cmisEntry, $cmisEntry['properties']['ParentId']['value']); | |
| 27 | - | |
| 28 | - // <cmis:hasMoreItems>false</cmis:hasMoreItems> | |
| 29 | - | |
| 30 | - $output = $feed->getAPPdoc(); | |
| 31 | - | |
| 32 | - $outputs = '<?xml version="1.0" encoding="UTF-8"?> | |
| 33 | -<feed xmlns="http://www.w3.org/2005/Atom" xmlns:cmis="http://www.cmis.org/2008/05"> | |
| 34 | -<entry> | |
| 35 | -<author><name>admin</name></author> | |
| 36 | -<content type="application/pdf" src="http://127.0.0.1:8080/alfresco/service/api/node/workspace/SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d/content.h4555-cmis-so.pdf"/><id>urn:uuid:2df9d676-f173-47bb-8ec1-41fa1186b66d</id> | |
| 37 | -<link rel="self" href="http://127.0.0.1:8080/alfresco/service/api/node/workspace/SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d"/> | |
| 38 | -<link rel="enclosure" type="application/pdf" href="http://127.0.0.1:8080/alfresco/service/api/node/workspace/SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d/content.h4555-cmis-so.pdf"/><link rel="edit" href="http://127.0.0.1:8080/alfresco/service/api/node/workspace/SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d"/> | |
| 39 | -<link rel="edit-media" type="application/pdf" href="http://127.0.0.1:8080/alfresco/service/api/node/workspace/SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d/content.h4555-cmis-so.pdf"/><link rel="cmis-allowableactions" href="http://127.0.0.1:8080/alfresco/service/api/node/workspace/SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d/permissions"/> | |
| 40 | -<link rel="cmis-relationships" href="http://127.0.0.1:8080/alfresco/service/api/node/workspace/SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d/associations"/> | |
| 41 | -<link rel="cmis-parents" href="http://127.0.0.1:8080/alfresco/service/api/node/workspace/SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d/parents"/> | |
| 42 | -<link rel="cmis-allversions" href="http://127.0.0.1:8080/alfresco/service/api/node/workspace/SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d/versions"/> | |
| 43 | -<link rel="cmis-stream" type="application/pdf" href="http://127.0.0.1:8080/alfresco/service/api/node/workspace/SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d/content.h4555-cmis-so.pdf"/><link rel="cmis-type" href="http://127.0.0.1:8080/alfresco/service/api/type/document"/> | |
| 44 | -<link rel="cmis-repository" href="http://127.0.0.1:8080/alfresco/service/api/repository"/> | |
| 45 | -<published>2009-06-23T09:40:47.889+02:00</published> | |
| 46 | -<summary></summary> | |
| 47 | -<title>h4555-cmis-so.pdf</title> | |
| 48 | -<updated>2009-06-23T09:40:58.524+02:00</updated> | |
| 49 | -<cmis:object> | |
| 50 | -<cmis:properties> | |
| 51 | -<cmis:propertyId cmis:name="ObjectId"><cmis:value>workspace://SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d</cmis:value></cmis:propertyId> | |
| 52 | -<cmis:propertyString cmis:name="BaseType"><cmis:value>document</cmis:value></cmis:propertyString> | |
| 53 | -<cmis:propertyString cmis:name="ObjectTypeId"><cmis:value>document</cmis:value></cmis:propertyString> | |
| 54 | -<cmis:propertyString cmis:name="CreatedBy"><cmis:value>admin</cmis:value></cmis:propertyString> | |
| 55 | -<cmis:propertyDateTime cmis:name="CreationDate"><cmis:value>2009-06-23T09:40:47.889+02:00</cmis:value></cmis:propertyDateTime> | |
| 56 | -<cmis:propertyString cmis:name="LastModifiedBy"><cmis:value>admin</cmis:value></cmis:propertyString> | |
| 57 | -<cmis:propertyDateTime cmis:name="LastModificationDate"><cmis:value>2009-06-23T09:40:58.524+02:00</cmis:value></cmis:propertyDateTime> | |
| 58 | -<cmis:propertyString cmis:name="Name"><cmis:value>h4555-cmis-so.pdf</cmis:value></cmis:propertyString> | |
| 59 | -<cmis:propertyBoolean cmis:name="IsImmutable"><cmis:value>false</cmis:value></cmis:propertyBoolean> | |
| 60 | -<cmis:propertyBoolean cmis:name="IsLatestVersion"><cmis:value>true</cmis:value></cmis:propertyBoolean> | |
| 61 | -<cmis:propertyBoolean cmis:name="IsMajorVersion"><cmis:value>false</cmis:value></cmis:propertyBoolean> | |
| 62 | -<cmis:propertyBoolean cmis:name="IsLatestMajorVersion"><cmis:value>false</cmis:value></cmis:propertyBoolean> | |
| 63 | -<cmis:propertyString cmis:name="VersionLabel"/> | |
| 64 | -<cmis:propertyId cmis:name="VersionSeriesId"><cmis:value>workspace://SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d</cmis:value></cmis:propertyId> | |
| 65 | -<cmis:propertyBoolean cmis:name="IsVersionSeriesCheckedOut"><cmis:value>false</cmis:value></cmis:propertyBoolean> | |
| 66 | -<cmis:propertyString cmis:name="VersionSeriesCheckedOutBy"/> | |
| 67 | -<cmis:propertyId cmis:name="VersionSeriesCheckedOutId"/> | |
| 68 | -<cmis:propertyString cmis:name="CheckinComment"/> | |
| 69 | -<cmis:propertyInteger cmis:name="ContentStreamLength"><cmis:value>343084</cmis:value></cmis:propertyInteger> | |
| 70 | -<cmis:propertyString cmis:name="ContentStreamMimeType"><cmis:value>application/pdf</cmis:value></cmis:propertyString> | |
| 71 | -<cmis:propertyString cmis:name="ContentStreamFilename"><cmis:value>h4555-cmis-so.pdf</cmis:value></cmis:propertyString> | |
| 72 | -<cmis:propertyString cmis:name="ContentStreamURI"><cmis:value>http://127.0.0.1:8080/alfresco/service/api/node/workspace/SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d/content.h4555-cmis-so.pdf</cmis:value></cmis:propertyString> | |
| 73 | -</cmis:properties> | |
| 74 | -</cmis:object> | |
| 75 | -<cmis:terminator/> | |
| 76 | -<app:edited>2009-06-23T09:40:58.524+02:00</app:edited> | |
| 77 | -<alf:icon>http://127.0.0.1:8080/alfresco/images/filetypes/pdf.gif</alf:icon> | |
| 78 | -</entry> | |
| 79 | -</feed>'; | |
| 80 | - | |
| 81 | - return $output; | |
| 82 | - } | |
| 83 | - | |
| 84 | -} | |
| 85 | - | |
| 86 | -include 'services/cmis/RepositoryService.inc.php'; | |
| 87 | -include 'services/cmis/ObjectService.inc.php'; | |
| 88 | - | |
| 89 | -$RepositoryService = new RepositoryService(); | |
| 90 | -$repositories = $RepositoryService->getRepositories(); | |
| 91 | -$repositoryId = $repositories[0]['repositoryId']; | |
| 92 | - | |
| 93 | -$ObjectService = new ObjectService(); | |
| 94 | -$ObjectService->startSession($username, $password); | |
| 95 | - | |
| 96 | -$output = CMISDocumentFeed::getDocumentFeed($ObjectService, $repositoryId, $query[2]); | |
| 97 | - | |
| 98 | -?> |
ktatompub/services/cmis/folder.inc.php deleted
| 1 | -<?php | |
| 2 | - | |
| 3 | -/** | |
| 4 | - * Folder access/management functions for CMIS AtomPub | |
| 5 | - * Output returned as an AtomPub feed | |
| 6 | - */ | |
| 7 | - | |
| 8 | - // NOTE the static responses in the code are example responses and partial responses | |
| 9 | - // against which the dynamic response is being checked while we are still uncertain | |
| 10 | - // whether everything is as it should be | |
| 11 | - | |
| 12 | -include 'services/cmis/ObjectFeed.inc.php'; | |
| 13 | - | |
| 14 | -class CMISFolderFeed extends CMISObjectFeed { | |
| 15 | - | |
| 16 | - /** | |
| 17 | - * Retrieves children/descendants of the specified folder | |
| 18 | - * TODO this currently only works in children mode, add descendants | |
| 19 | - * | |
| 20 | - * @param string $repositoryId | |
| 21 | - * @param string $folderId folder id for which children/descendants are requested | |
| 22 | - * @param string $feedType children or descendants | |
| 23 | - * @return string CMIS AtomPub feed | |
| 24 | - */ | |
| 25 | - static public function getFolderChildrenFeed($NavigationService, $repositoryId, $folderId, $folderName, $feedType) | |
| 26 | - { | |
| 27 | - if ($feedType == 'children') | |
| 28 | - { | |
| 29 | - $entries = $NavigationService->getChildren($repositoryId, $folderId, false, false); | |
| 30 | - } | |
| 31 | - else if ($feedType == 'descendants') | |
| 32 | - { | |
| 33 | - $entries = $NavigationService->getDescendants($repositoryId, $folderId, $includeAllowableActions, $includeRelationships); | |
| 34 | - } | |
| 35 | - else | |
| 36 | - { | |
| 37 | - // error, we shouldn't be here, if we are then the wrong function was called | |
| 38 | - } | |
| 39 | - | |
| 40 | - $feed = new KTCMISAPPFeed(KT_APP_BASE_URI, $folderName . ' ' . ucwords($feedType), null, null, null, | |
| 41 | - 'urn:uuid:' . $folderName . '-' . $feedType); | |
| 42 | - | |
| 43 | - foreach($entries as $cmisEntry) | |
| 44 | - { | |
| 45 | - CMISFolderFeed::createEntry($feed, $cmisEntry, $folderName); | |
| 46 | - } | |
| 47 | - | |
| 48 | - // <cmis:hasMoreItems>false</cmis:hasMoreItems> | |
| 49 | - | |
| 50 | - $output = $feed->getAPPdoc(); | |
| 51 | - $outputs = '<?xml version="1.0" encoding="utf-8"?> | |
| 52 | - <feed xmlns="http://www.w3.org/2005/Atom" xmlns:cmis="http://www.cmis.org/2008/05"> | |
| 53 | - <id>urn:uuid:28537649-8af2-4c74-aa92-5d8bbecac9ce-children</id> | |
| 54 | - <link rel="self" href="http://10.33.4.34/ktatompub/?/cmis/folder/F1/children"/> | |
| 55 | - <title>Root Folder Children</title> | |
| 56 | - <entry> | |
| 57 | - <id>urn:uuid:86224486-b7ae-4074-a793-82cd259b0026-folder</id> | |
| 58 | - <link rel="cmis-children" href="http://10.33.4.34/ktatompub/?cmis/folder/F2/children"/> | |
| 59 | - | |
| 60 | - <link rel="cmis-descendants" href="http://10.33.4.34/ktatompub/?cmis/folder/F2/descendants"/> | |
| 61 | - <link rel="cmis-type" href="http://10.33.4.34:8080/alfresco/service/api/type/folder"/> | |
| 62 | - <link rel="cmis-repository" href="http://10.33.4.34:8080/alfresco/service/api/repository"/> | |
| 63 | - <summary>DroppedDocuments</summary> | |
| 64 | - <title>DroppedDocuments</title> | |
| 65 | - <cmis:object> | |
| 66 | - <cmis:properties> | |
| 67 | - <cmis:propertyId cmis:name="ObjectId"> | |
| 68 | - | |
| 69 | - <cmis:value>F2</cmis:value> | |
| 70 | - </cmis:propertyId> | |
| 71 | - <cmis:propertyString cmis:name="ObjectTypeId"> | |
| 72 | - <cmis:value>Folder</cmis:value> | |
| 73 | - </cmis:propertyString> | |
| 74 | - <cmis:propertyString cmis:name="Name"> | |
| 75 | - <cmis:value>DroppedDocuments</cmis:value> | |
| 76 | - | |
| 77 | - </cmis:propertyString> | |
| 78 | - </cmis:properties> | |
| 79 | - </cmis:object> | |
| 80 | - </entry> | |
| 81 | - <entry> | |
| 82 | - <id>urn:uuid:86224486-b7ae-4074-a793-82cd259b0026-folder</id> | |
| 83 | - <link rel="cmis-children" href="http://10.33.4.34/ktatompub/?cmis/folder/F4/children"/> | |
| 84 | - <link rel="cmis-descendants" href="http://10.33.4.34/ktatompub/?cmis/folder/F4/descendants"/> | |
| 85 | - | |
| 86 | - <link rel="cmis-type" href="http://10.33.4.34:8080/alfresco/service/api/type/folder"/> | |
| 87 | - <link rel="cmis-repository" href="http://10.33.4.34:8080/alfresco/service/api/repository"/> | |
| 88 | - <summary>Test KT Folder</summary> | |
| 89 | - <title>Test KT Folder</title> | |
| 90 | - <cmis:object> | |
| 91 | - <cmis:properties> | |
| 92 | - <cmis:propertyId cmis:name="ObjectId"> | |
| 93 | - <cmis:value>F4</cmis:value> | |
| 94 | - | |
| 95 | - </cmis:propertyId> | |
| 96 | - <cmis:propertyString cmis:name="ObjectTypeId"> | |
| 97 | - <cmis:value>Folder</cmis:value> | |
| 98 | - </cmis:propertyString> | |
| 99 | - <cmis:propertyString cmis:name="Name"> | |
| 100 | - <cmis:value>Test KT Folder</cmis:value> | |
| 101 | - </cmis:propertyString> | |
| 102 | - </cmis:properties> | |
| 103 | - | |
| 104 | - </cmis:object> | |
| 105 | - </entry> | |
| 106 | - <entry> | |
| 107 | - <author><name>admin</name></author> | |
| 108 | - <content type="application/pdf" src="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d/content.h4555-cmis-so.pdf"/><id>urn:uuid:2df9d676-f173-47bb-8ec1-41fa1186b66d</id> | |
| 109 | - <link rel="self" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d"/> | |
| 110 | - | |
| 111 | - <link rel="enclosure" type="application/pdf" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d/content.h4555-cmis-so.pdf"/><link rel="edit" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d"/> | |
| 112 | - <link rel="edit-media" type="application/pdf" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d/content.h4555-cmis-so.pdf"/><link rel="cmis-allowableactions" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d/permissions"/> | |
| 113 | - <link rel="cmis-relationships" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d/associations"/> | |
| 114 | - <link rel="cmis-parents" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d/parents"/> | |
| 115 | - <link rel="cmis-allversions" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d/versions"/> | |
| 116 | - <link rel="cmis-stream" type="application/pdf" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d/content.h4555-cmis-so.pdf"/><link rel="cmis-type" href="http://10.33.4.34:8080/alfresco/service/api/type/document"/> | |
| 117 | - <link rel="cmis-repository" href="http://10.33.4.34:8080/alfresco/service/api/repository"/> | |
| 118 | - <published>2009-06-23T09:40:47.889+02:00</published> | |
| 119 | - <summary></summary> | |
| 120 | - <title>h4555-cmis-so.pdf</title> | |
| 121 | - <updated>2009-06-23T09:40:58.524+02:00</updated> | |
| 122 | - | |
| 123 | - <cmis:object> | |
| 124 | - <cmis:properties> | |
| 125 | - <cmis:propertyId cmis:name="ObjectId"><cmis:value>workspace://SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d</cmis:value></cmis:propertyId> | |
| 126 | - <cmis:propertyString cmis:name="BaseType"><cmis:value>document</cmis:value></cmis:propertyString> | |
| 127 | - <cmis:propertyString cmis:name="ObjectTypeId"><cmis:value>document</cmis:value></cmis:propertyString> | |
| 128 | - <cmis:propertyString cmis:name="CreatedBy"><cmis:value>admin</cmis:value></cmis:propertyString> | |
| 129 | - | |
| 130 | - <cmis:propertyDateTime cmis:name="CreationDate"><cmis:value>2009-06-23T09:40:47.889+02:00</cmis:value></cmis:propertyDateTime> | |
| 131 | - <cmis:propertyString cmis:name="LastModifiedBy"><cmis:value>admin</cmis:value></cmis:propertyString> | |
| 132 | - <cmis:propertyDateTime cmis:name="LastModificationDate"><cmis:value>2009-06-23T09:40:58.524+02:00</cmis:value></cmis:propertyDateTime> | |
| 133 | - <cmis:propertyString cmis:name="Name"><cmis:value>h4555-cmis-so.pdf</cmis:value></cmis:propertyString> | |
| 134 | - <cmis:propertyBoolean cmis:name="IsImmutable"><cmis:value>false</cmis:value></cmis:propertyBoolean> | |
| 135 | - | |
| 136 | - <cmis:propertyBoolean cmis:name="IsLatestVersion"><cmis:value>true</cmis:value></cmis:propertyBoolean> | |
| 137 | - <cmis:propertyBoolean cmis:name="IsMajorVersion"><cmis:value>false</cmis:value></cmis:propertyBoolean> | |
| 138 | - <cmis:propertyBoolean cmis:name="IsLatestMajorVersion"><cmis:value>false</cmis:value></cmis:propertyBoolean> | |
| 139 | - <cmis:propertyString cmis:name="VersionLabel"/> | |
| 140 | - <cmis:propertyId cmis:name="VersionSeriesId"><cmis:value>workspace://SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d</cmis:value></cmis:propertyId> | |
| 141 | - | |
| 142 | - <cmis:propertyBoolean cmis:name="IsVersionSeriesCheckedOut"><cmis:value>false</cmis:value></cmis:propertyBoolean> | |
| 143 | - <cmis:propertyString cmis:name="VersionSeriesCheckedOutBy"/> | |
| 144 | - <cmis:propertyId cmis:name="VersionSeriesCheckedOutId"/> | |
| 145 | - <cmis:propertyString cmis:name="CheckinComment"/> | |
| 146 | - <cmis:propertyInteger cmis:name="ContentStreamLength"><cmis:value>343084</cmis:value></cmis:propertyInteger> | |
| 147 | - <cmis:propertyString cmis:name="ContentStreamMimeType"><cmis:value>application/pdf</cmis:value></cmis:propertyString> | |
| 148 | - <cmis:propertyString cmis:name="ContentStreamFilename"><cmis:value>h4555-cmis-so.pdf</cmis:value></cmis:propertyString> | |
| 149 | - | |
| 150 | - <cmis:propertyString cmis:name="ContentStreamURI"><cmis:value>http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d/content.h4555-cmis-so.pdf</cmis:value></cmis:propertyString> | |
| 151 | - </cmis:properties> | |
| 152 | - </cmis:object> | |
| 153 | - | |
| 154 | - | |
| 155 | - </entry> | |
| 156 | - </feed>'; | |
| 157 | - | |
| 158 | - $outputs = '<?xml version="1.0" encoding="UTF-8"?> | |
| 159 | -<feed xmlns="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app" xmlns:cmis="http://www.cmis.org/2008/05" xmlns:alf="http://www.alfresco.org" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"> | |
| 160 | -<author><name>System</name></author> | |
| 161 | -<generator version="3.0.0 (Stable 1526)">Alfresco (Labs)</generator> | |
| 162 | -<icon>http://10.33.4.34:8080/alfresco/images/logo/AlfrescoLogo16.ico</icon> | |
| 163 | -<id>urn:uuid:28537649-8af2-4c74-aa92-5d8bbecac9ce-children</id> | |
| 164 | -<link rel="self" href="http://10.33.4.34:8080/alfresco/service/api/path/workspace/SpacesStore/Company%20Home/children"/> | |
| 165 | -<link rel="cmis-source" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/28537649-8af2-4c74-aa92-5d8bbecac9ce"/> | |
| 166 | -<link rel="first" href="http://10.33.4.34:8080/alfresco/service/api/path/workspace/SpacesStore/Company%20Home/children?pageNo=1&pageSize=0&guest=&format=atomfeed" type="application/atom+xml;type=feed"/> | |
| 167 | - | |
| 168 | -<link rel="last" href="http://10.33.4.34:8080/alfresco/service/api/path/workspace/SpacesStore/Company%20Home/children?pageNo=1&pageSize=0&guest=&format=atomfeed" type="application/atom+xml;type=feed"/> | |
| 169 | -<title>Company Home Children</title> | |
| 170 | -<updated>2009-06-18T10:20:29.937+02:00</updated> | |
| 171 | -<entry> | |
| 172 | -<author><name>System</name></author> | |
| 173 | -<content>e98319fa-76e4-478f-8ce8-a3a0fd683e2c</content> | |
| 174 | -<id>urn:uuid:e98319fa-76e4-478f-8ce8-a3a0fd683e2c</id> | |
| 175 | - | |
| 176 | -<link rel="self" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/e98319fa-76e4-478f-8ce8-a3a0fd683e2c"/> | |
| 177 | -<link rel="edit" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/e98319fa-76e4-478f-8ce8-a3a0fd683e2c"/> | |
| 178 | -<link rel="cmis-allowableactions" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/e98319fa-76e4-478f-8ce8-a3a0fd683e2c/permissions"/> | |
| 179 | -<link rel="cmis-relationships" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/e98319fa-76e4-478f-8ce8-a3a0fd683e2c/associations"/> | |
| 180 | -<link rel="cmis-parent" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/28537649-8af2-4c74-aa92-5d8bbecac9ce"/> | |
| 181 | -<link rel="cmis-folderparent" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/e98319fa-76e4-478f-8ce8-a3a0fd683e2c/parent"/> | |
| 182 | -<link rel="cmis-children" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/e98319fa-76e4-478f-8ce8-a3a0fd683e2c/children"/> | |
| 183 | -<link rel="cmis-descendants" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/e98319fa-76e4-478f-8ce8-a3a0fd683e2c/descendants"/> | |
| 184 | -<link rel="cmis-type" href="http://10.33.4.34:8080/alfresco/service/api/type/F/st_sites"/> | |
| 185 | -<link rel="cmis-repository" href="http://10.33.4.34:8080/alfresco/service/api/repository"/> | |
| 186 | -<published>2009-06-18T10:20:37.788+02:00</published> | |
| 187 | -<summary>Site Collaboration Spaces</summary> | |
| 188 | -<title>Sites</title> | |
| 189 | -<updated>2009-06-18T10:20:37.874+02:00</updated> | |
| 190 | - | |
| 191 | -<cmis:object> | |
| 192 | -<cmis:properties> | |
| 193 | -<cmis:propertyId cmis:name="ObjectId"><cmis:value>workspace://SpacesStore/e98319fa-76e4-478f-8ce8-a3a0fd683e2c</cmis:value></cmis:propertyId> | |
| 194 | -<cmis:propertyString cmis:name="BaseType"><cmis:value>folder</cmis:value></cmis:propertyString> | |
| 195 | -<cmis:propertyString cmis:name="ObjectTypeId"><cmis:value>F/st_sites</cmis:value></cmis:propertyString> | |
| 196 | -<cmis:propertyString cmis:name="CreatedBy"><cmis:value>System</cmis:value></cmis:propertyString> | |
| 197 | - | |
| 198 | -<cmis:propertyDateTime cmis:name="CreationDate"><cmis:value>2009-06-18T10:20:37.788+02:00</cmis:value></cmis:propertyDateTime> | |
| 199 | -<cmis:propertyString cmis:name="LastModifiedBy"><cmis:value>System</cmis:value></cmis:propertyString> | |
| 200 | -<cmis:propertyDateTime cmis:name="LastModificationDate"><cmis:value>2009-06-18T10:20:37.874+02:00</cmis:value></cmis:propertyDateTime> | |
| 201 | -<cmis:propertyString cmis:name="Name"><cmis:value>Sites</cmis:value></cmis:propertyString> | |
| 202 | -<cmis:propertyId cmis:name="ParentId"><cmis:value>workspace://SpacesStore/28537649-8af2-4c74-aa92-5d8bbecac9ce</cmis:value></cmis:propertyId> | |
| 203 | - | |
| 204 | -</cmis:properties> | |
| 205 | -</cmis:object> | |
| 206 | -<cmis:terminator/> | |
| 207 | -<app:edited>2009-06-18T10:20:37.874+02:00</app:edited> | |
| 208 | -<alf:icon>http://10.33.4.34:8080/alfresco/images/icons/space-icon-default-16.gif</alf:icon> | |
| 209 | -</entry> | |
| 210 | -<entry> | |
| 211 | -<author><name>System</name></author> | |
| 212 | -<content>8c80a0f7-74b4-4bd8-bb76-a2464e4b2d10</content> | |
| 213 | -<id>urn:uuid:8c80a0f7-74b4-4bd8-bb76-a2464e4b2d10</id> | |
| 214 | - | |
| 215 | -<link rel="self" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/8c80a0f7-74b4-4bd8-bb76-a2464e4b2d10"/> | |
| 216 | -<link rel="edit" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/8c80a0f7-74b4-4bd8-bb76-a2464e4b2d10"/> | |
| 217 | -<link rel="cmis-allowableactions" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/8c80a0f7-74b4-4bd8-bb76-a2464e4b2d10/permissions"/> | |
| 218 | -<link rel="cmis-relationships" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/8c80a0f7-74b4-4bd8-bb76-a2464e4b2d10/associations"/> | |
| 219 | -<link rel="cmis-parent" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/28537649-8af2-4c74-aa92-5d8bbecac9ce"/> | |
| 220 | -<link rel="cmis-folderparent" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/8c80a0f7-74b4-4bd8-bb76-a2464e4b2d10/parent"/> | |
| 221 | -<link rel="cmis-children" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/8c80a0f7-74b4-4bd8-bb76-a2464e4b2d10/children"/> | |
| 222 | -<link rel="cmis-descendants" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/8c80a0f7-74b4-4bd8-bb76-a2464e4b2d10/descendants"/> | |
| 223 | -<link rel="cmis-type" href="http://10.33.4.34:8080/alfresco/service/api/type/folder"/> | |
| 224 | -<link rel="cmis-repository" href="http://10.33.4.34:8080/alfresco/service/api/repository"/> | |
| 225 | -<published>2009-06-18T10:20:29.939+02:00</published> | |
| 226 | -<summary>User managed definitions</summary> | |
| 227 | -<title>Data Dictionary</title> | |
| 228 | -<updated>2009-06-18T10:20:30.004+02:00</updated> | |
| 229 | - | |
| 230 | -<cmis:object> | |
| 231 | -<cmis:properties> | |
| 232 | -<cmis:propertyId cmis:name="ObjectId"><cmis:value>workspace://SpacesStore/8c80a0f7-74b4-4bd8-bb76-a2464e4b2d10</cmis:value></cmis:propertyId> | |
| 233 | -<cmis:propertyString cmis:name="BaseType"><cmis:value>folder</cmis:value></cmis:propertyString> | |
| 234 | -<cmis:propertyString cmis:name="ObjectTypeId"><cmis:value>folder</cmis:value></cmis:propertyString> | |
| 235 | -<cmis:propertyString cmis:name="CreatedBy"><cmis:value>System</cmis:value></cmis:propertyString> | |
| 236 | - | |
| 237 | -<cmis:propertyDateTime cmis:name="CreationDate"><cmis:value>2009-06-18T10:20:29.939+02:00</cmis:value></cmis:propertyDateTime> | |
| 238 | -<cmis:propertyString cmis:name="LastModifiedBy"><cmis:value>System</cmis:value></cmis:propertyString> | |
| 239 | -<cmis:propertyDateTime cmis:name="LastModificationDate"><cmis:value>2009-06-18T10:20:30.004+02:00</cmis:value></cmis:propertyDateTime> | |
| 240 | -<cmis:propertyString cmis:name="Name"><cmis:value>Data Dictionary</cmis:value></cmis:propertyString> | |
| 241 | -<cmis:propertyId cmis:name="ParentId"><cmis:value>workspace://SpacesStore/28537649-8af2-4c74-aa92-5d8bbecac9ce</cmis:value></cmis:propertyId> | |
| 242 | - | |
| 243 | -</cmis:properties> | |
| 244 | -</cmis:object> | |
| 245 | -<cmis:terminator/> | |
| 246 | -<app:edited>2009-06-18T10:20:30.004+02:00</app:edited> | |
| 247 | -<alf:icon>http://10.33.4.34:8080/alfresco/images/icons/space-icon-default-16.gif</alf:icon> | |
| 248 | -</entry> | |
| 249 | -<entry> | |
| 250 | -<author><name>System</name></author> | |
| 251 | -<content>ba2524ef-7f3d-4ed4-84a0-8d99b6524737</content> | |
| 252 | -<id>urn:uuid:ba2524ef-7f3d-4ed4-84a0-8d99b6524737</id> | |
| 253 | - | |
| 254 | -<link rel="self" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/ba2524ef-7f3d-4ed4-84a0-8d99b6524737"/> | |
| 255 | -<link rel="edit" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/ba2524ef-7f3d-4ed4-84a0-8d99b6524737"/> | |
| 256 | -<link rel="cmis-allowableactions" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/ba2524ef-7f3d-4ed4-84a0-8d99b6524737/permissions"/> | |
| 257 | -<link rel="cmis-relationships" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/ba2524ef-7f3d-4ed4-84a0-8d99b6524737/associations"/> | |
| 258 | -<link rel="cmis-parent" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/28537649-8af2-4c74-aa92-5d8bbecac9ce"/> | |
| 259 | -<link rel="cmis-folderparent" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/ba2524ef-7f3d-4ed4-84a0-8d99b6524737/parent"/> | |
| 260 | -<link rel="cmis-children" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/ba2524ef-7f3d-4ed4-84a0-8d99b6524737/children"/> | |
| 261 | -<link rel="cmis-descendants" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/ba2524ef-7f3d-4ed4-84a0-8d99b6524737/descendants"/> | |
| 262 | -<link rel="cmis-type" href="http://10.33.4.34:8080/alfresco/service/api/type/folder"/> | |
| 263 | -<link rel="cmis-repository" href="http://10.33.4.34:8080/alfresco/service/api/repository"/> | |
| 264 | -<published>2009-06-18T10:20:30.312+02:00</published> | |
| 265 | -<summary>The guest root space</summary> | |
| 266 | -<title>Guest Home</title> | |
| 267 | - | |
| 268 | -<updated>2009-06-18T10:20:30.400+02:00</updated> | |
| 269 | -<cmis:object> | |
| 270 | -<cmis:properties> | |
| 271 | -<cmis:propertyId cmis:name="ObjectId"><cmis:value>workspace://SpacesStore/ba2524ef-7f3d-4ed4-84a0-8d99b6524737</cmis:value></cmis:propertyId> | |
| 272 | -<cmis:propertyString cmis:name="BaseType"><cmis:value>folder</cmis:value></cmis:propertyString> | |
| 273 | -<cmis:propertyString cmis:name="ObjectTypeId"><cmis:value>folder</cmis:value></cmis:propertyString> | |
| 274 | -<cmis:propertyString cmis:name="CreatedBy"><cmis:value>System</cmis:value></cmis:propertyString> | |
| 275 | - | |
| 276 | -<cmis:propertyDateTime cmis:name="CreationDate"><cmis:value>2009-06-18T10:20:30.312+02:00</cmis:value></cmis:propertyDateTime> | |
| 277 | -<cmis:propertyString cmis:name="LastModifiedBy"><cmis:value>System</cmis:value></cmis:propertyString> | |
| 278 | -<cmis:propertyDateTime cmis:name="LastModificationDate"><cmis:value>2009-06-18T10:20:30.400+02:00</cmis:value></cmis:propertyDateTime> | |
| 279 | -<cmis:propertyString cmis:name="Name"><cmis:value>Guest Home</cmis:value></cmis:propertyString> | |
| 280 | -<cmis:propertyId cmis:name="ParentId"><cmis:value>workspace://SpacesStore/28537649-8af2-4c74-aa92-5d8bbecac9ce</cmis:value></cmis:propertyId> | |
| 281 | - | |
| 282 | -</cmis:properties> | |
| 283 | -</cmis:object> | |
| 284 | -<cmis:terminator/> | |
| 285 | -<app:edited>2009-06-18T10:20:30.400+02:00</app:edited> | |
| 286 | -<alf:icon>http://10.33.4.34:8080/alfresco/images/icons/space-icon-default-16.gif</alf:icon> | |
| 287 | -</entry> | |
| 288 | -<entry> | |
| 289 | -<author><name>System</name></author> | |
| 290 | -<content>86224486-b7ae-4074-a793-82cd259b0026</content> | |
| 291 | -<id>urn:uuid:86224486-b7ae-4074-a793-82cd259b0026</id> | |
| 292 | - | |
| 293 | -<link rel="self" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/86224486-b7ae-4074-a793-82cd259b0026"/> | |
| 294 | -<link rel="edit" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/86224486-b7ae-4074-a793-82cd259b0026"/> | |
| 295 | -<link rel="cmis-allowableactions" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/86224486-b7ae-4074-a793-82cd259b0026/permissions"/> | |
| 296 | -<link rel="cmis-relationships" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/86224486-b7ae-4074-a793-82cd259b0026/associations"/> | |
| 297 | -<link rel="cmis-parent" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/28537649-8af2-4c74-aa92-5d8bbecac9ce"/> | |
| 298 | -<link rel="cmis-folderparent" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/86224486-b7ae-4074-a793-82cd259b0026/parent"/> | |
| 299 | -<link rel="cmis-children" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/86224486-b7ae-4074-a793-82cd259b0026/children"/> | |
| 300 | -<link rel="cmis-descendants" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/86224486-b7ae-4074-a793-82cd259b0026/descendants"/> | |
| 301 | -<link rel="cmis-type" href="http://10.33.4.34:8080/alfresco/service/api/type/folder"/> | |
| 302 | -<link rel="cmis-repository" href="http://10.33.4.34:8080/alfresco/service/api/repository"/> | |
| 303 | -<published>2009-06-18T10:20:30.402+02:00</published> | |
| 304 | -<summary>User Homes</summary> | |
| 305 | -<title>User Homes</title> | |
| 306 | -<updated>2009-06-18T10:20:30.428+02:00</updated> | |
| 307 | - | |
| 308 | -<cmis:object> | |
| 309 | -<cmis:properties> | |
| 310 | -<cmis:propertyId cmis:name="ObjectId"><cmis:value>workspace://SpacesStore/86224486-b7ae-4074-a793-82cd259b0026</cmis:value></cmis:propertyId> | |
| 311 | -<cmis:propertyString cmis:name="BaseType"><cmis:value>folder</cmis:value></cmis:propertyString> | |
| 312 | -<cmis:propertyString cmis:name="ObjectTypeId"><cmis:value>folder</cmis:value></cmis:propertyString> | |
| 313 | -<cmis:propertyString cmis:name="CreatedBy"><cmis:value>System</cmis:value></cmis:propertyString> | |
| 314 | - | |
| 315 | -<cmis:propertyDateTime cmis:name="CreationDate"><cmis:value>2009-06-18T10:20:30.402+02:00</cmis:value></cmis:propertyDateTime> | |
| 316 | -<cmis:propertyString cmis:name="LastModifiedBy"><cmis:value>System</cmis:value></cmis:propertyString> | |
| 317 | -<cmis:propertyDateTime cmis:name="LastModificationDate"><cmis:value>2009-06-18T10:20:30.428+02:00</cmis:value></cmis:propertyDateTime> | |
| 318 | -<cmis:propertyString cmis:name="Name"><cmis:value>User Homes</cmis:value></cmis:propertyString> | |
| 319 | -<cmis:propertyId cmis:name="ParentId"><cmis:value>workspace://SpacesStore/28537649-8af2-4c74-aa92-5d8bbecac9ce</cmis:value></cmis:propertyId> | |
| 320 | - | |
| 321 | -</cmis:properties> | |
| 322 | -</cmis:object> | |
| 323 | -<cmis:terminator/> | |
| 324 | -<app:edited>2009-06-18T10:20:30.428+02:00</app:edited> | |
| 325 | -<alf:icon>http://10.33.4.34:8080/alfresco/images/icons/space-icon-default-16.gif</alf:icon> | |
| 326 | -</entry> | |
| 327 | -<entry> | |
| 328 | -<author><name>System</name></author> | |
| 329 | -<content>0df9087f-e334-4890-a467-b60e3d6be92c</content> | |
| 330 | -<id>urn:uuid:0df9087f-e334-4890-a467-b60e3d6be92c</id> | |
| 331 | - | |
| 332 | -<link rel="self" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/0df9087f-e334-4890-a467-b60e3d6be92c"/> | |
| 333 | -<link rel="edit" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/0df9087f-e334-4890-a467-b60e3d6be92c"/> | |
| 334 | -<link rel="cmis-allowableactions" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/0df9087f-e334-4890-a467-b60e3d6be92c/permissions"/> | |
| 335 | -<link rel="cmis-relationships" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/0df9087f-e334-4890-a467-b60e3d6be92c/associations"/> | |
| 336 | -<link rel="cmis-parent" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/28537649-8af2-4c74-aa92-5d8bbecac9ce"/> | |
| 337 | -<link rel="cmis-folderparent" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/0df9087f-e334-4890-a467-b60e3d6be92c/parent"/> | |
| 338 | -<link rel="cmis-children" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/0df9087f-e334-4890-a467-b60e3d6be92c/children"/> | |
| 339 | -<link rel="cmis-descendants" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/0df9087f-e334-4890-a467-b60e3d6be92c/descendants"/> | |
| 340 | -<link rel="cmis-type" href="http://10.33.4.34:8080/alfresco/service/api/type/folder"/> | |
| 341 | -<link rel="cmis-repository" href="http://10.33.4.34:8080/alfresco/service/api/repository"/> | |
| 342 | -<published>2009-06-18T10:20:45.115+02:00</published> | |
| 343 | -<summary>Web Content Management Spaces</summary> | |
| 344 | -<title>Web Projects</title> | |
| 345 | -<updated>2009-06-18T10:20:45.137+02:00</updated> | |
| 346 | - | |
| 347 | -<cmis:object> | |
| 348 | -<cmis:properties> | |
| 349 | -<cmis:propertyId cmis:name="ObjectId"><cmis:value>workspace://SpacesStore/0df9087f-e334-4890-a467-b60e3d6be92c</cmis:value></cmis:propertyId> | |
| 350 | -<cmis:propertyString cmis:name="BaseType"><cmis:value>folder</cmis:value></cmis:propertyString> | |
| 351 | -<cmis:propertyString cmis:name="ObjectTypeId"><cmis:value>folder</cmis:value></cmis:propertyString> | |
| 352 | -<cmis:propertyString cmis:name="CreatedBy"><cmis:value>System</cmis:value></cmis:propertyString> | |
| 353 | - | |
| 354 | -<cmis:propertyDateTime cmis:name="CreationDate"><cmis:value>2009-06-18T10:20:45.115+02:00</cmis:value></cmis:propertyDateTime> | |
| 355 | -<cmis:propertyString cmis:name="LastModifiedBy"><cmis:value>System</cmis:value></cmis:propertyString> | |
| 356 | -<cmis:propertyDateTime cmis:name="LastModificationDate"><cmis:value>2009-06-18T10:20:45.137+02:00</cmis:value></cmis:propertyDateTime> | |
| 357 | -<cmis:propertyString cmis:name="Name"><cmis:value>Web Projects</cmis:value></cmis:propertyString> | |
| 358 | -<cmis:propertyId cmis:name="ParentId"><cmis:value>workspace://SpacesStore/28537649-8af2-4c74-aa92-5d8bbecac9ce</cmis:value></cmis:propertyId> | |
| 359 | - | |
| 360 | -</cmis:properties> | |
| 361 | -</cmis:object> | |
| 362 | -<cmis:terminator/> | |
| 363 | -<app:edited>2009-06-18T10:20:45.137+02:00</app:edited> | |
| 364 | -<alf:icon>http://10.33.4.34:8080/alfresco/images/icons/space-icon-default-16.gif</alf:icon> | |
| 365 | -</entry> | |
| 366 | -<entry> | |
| 367 | -<author><name>admin</name></author> | |
| 368 | -<content type="application/pdf" src="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d/content.h4555-cmis-so.pdf"/><id>urn:uuid:2df9d676-f173-47bb-8ec1-41fa1186b66d</id> | |
| 369 | -<link rel="self" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d"/> | |
| 370 | - | |
| 371 | -<link rel="enclosure" type="application/pdf" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d/content.h4555-cmis-so.pdf"/><link rel="edit" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d"/> | |
| 372 | -<link rel="edit-media" type="application/pdf" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d/content.h4555-cmis-so.pdf"/><link rel="cmis-allowableactions" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d/permissions"/> | |
| 373 | -<link rel="cmis-relationships" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d/associations"/> | |
| 374 | -<link rel="cmis-parents" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d/parents"/> | |
| 375 | -<link rel="cmis-allversions" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d/versions"/> | |
| 376 | -<link rel="cmis-stream" type="application/pdf" href="http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d/content.h4555-cmis-so.pdf"/><link rel="cmis-type" href="http://10.33.4.34:8080/alfresco/service/api/type/document"/> | |
| 377 | -<link rel="cmis-repository" href="http://10.33.4.34:8080/alfresco/service/api/repository"/> | |
| 378 | -<published>2009-06-23T09:40:47.889+02:00</published> | |
| 379 | -<summary></summary> | |
| 380 | -<title>h4555-cmis-so.pdf</title> | |
| 381 | -<updated>2009-06-23T09:40:58.524+02:00</updated> | |
| 382 | - | |
| 383 | -<cmis:object> | |
| 384 | -<cmis:properties> | |
| 385 | -<cmis:propertyId cmis:name="ObjectId"><cmis:value>workspace://SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d</cmis:value></cmis:propertyId> | |
| 386 | -<cmis:propertyString cmis:name="BaseType"><cmis:value>document</cmis:value></cmis:propertyString> | |
| 387 | -<cmis:propertyString cmis:name="ObjectTypeId"><cmis:value>document</cmis:value></cmis:propertyString> | |
| 388 | -<cmis:propertyString cmis:name="CreatedBy"><cmis:value>admin</cmis:value></cmis:propertyString> | |
| 389 | - | |
| 390 | -<cmis:propertyDateTime cmis:name="CreationDate"><cmis:value>2009-06-23T09:40:47.889+02:00</cmis:value></cmis:propertyDateTime> | |
| 391 | -<cmis:propertyString cmis:name="LastModifiedBy"><cmis:value>admin</cmis:value></cmis:propertyString> | |
| 392 | -<cmis:propertyDateTime cmis:name="LastModificationDate"><cmis:value>2009-06-23T09:40:58.524+02:00</cmis:value></cmis:propertyDateTime> | |
| 393 | -<cmis:propertyString cmis:name="Name"><cmis:value>h4555-cmis-so.pdf</cmis:value></cmis:propertyString> | |
| 394 | -<cmis:propertyBoolean cmis:name="IsImmutable"><cmis:value>false</cmis:value></cmis:propertyBoolean> | |
| 395 | - | |
| 396 | -<cmis:propertyBoolean cmis:name="IsLatestVersion"><cmis:value>true</cmis:value></cmis:propertyBoolean> | |
| 397 | -<cmis:propertyBoolean cmis:name="IsMajorVersion"><cmis:value>false</cmis:value></cmis:propertyBoolean> | |
| 398 | -<cmis:propertyBoolean cmis:name="IsLatestMajorVersion"><cmis:value>false</cmis:value></cmis:propertyBoolean> | |
| 399 | -<cmis:propertyString cmis:name="VersionLabel"/> | |
| 400 | -<cmis:propertyId cmis:name="VersionSeriesId"><cmis:value>workspace://SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d</cmis:value></cmis:propertyId> | |
| 401 | - | |
| 402 | -<cmis:propertyBoolean cmis:name="IsVersionSeriesCheckedOut"><cmis:value>false</cmis:value></cmis:propertyBoolean> | |
| 403 | -<cmis:propertyString cmis:name="VersionSeriesCheckedOutBy"/> | |
| 404 | -<cmis:propertyId cmis:name="VersionSeriesCheckedOutId"/> | |
| 405 | -<cmis:propertyString cmis:name="CheckinComment"/> | |
| 406 | -<cmis:propertyInteger cmis:name="ContentStreamLength"><cmis:value>343084</cmis:value></cmis:propertyInteger> | |
| 407 | -<cmis:propertyString cmis:name="ContentStreamMimeType"><cmis:value>application/pdf</cmis:value></cmis:propertyString> | |
| 408 | -<cmis:propertyString cmis:name="ContentStreamFilename"><cmis:value>h4555-cmis-so.pdf</cmis:value></cmis:propertyString> | |
| 409 | - | |
| 410 | -<cmis:propertyString cmis:name="ContentStreamURI"><cmis:value>http://10.33.4.34:8080/alfresco/service/api/node/workspace/SpacesStore/2df9d676-f173-47bb-8ec1-41fa1186b66d/content.h4555-cmis-so.pdf</cmis:value></cmis:propertyString> | |
| 411 | -</cmis:properties> | |
| 412 | -</cmis:object> | |
| 413 | -<cmis:terminator/> | |
| 414 | -<app:edited>2009-06-23T09:40:58.524+02:00</app:edited> | |
| 415 | -<alf:icon>http://10.33.4.34:8080/alfresco/images/filetypes/pdf.gif</alf:icon> | |
| 416 | -</entry> | |
| 417 | -<cmis:hasMoreItems>false</cmis:hasMoreItems> | |
| 418 | -<opensearch:totalResults>6</opensearch:totalResults> | |
| 419 | -<opensearch:startIndex>0</opensearch:startIndex> | |
| 420 | - | |
| 421 | -<opensearch:itemsPerPage>0</opensearch:itemsPerPage> | |
| 422 | -</feed>'; | |
| 423 | - | |
| 424 | - return $output; | |
| 425 | - } | |
| 426 | - | |
| 427 | - /** | |
| 428 | - * Retrieves data about a specific folder | |
| 429 | - * | |
| 430 | - * @param object $ObjectService The CMIS service | |
| 431 | - * @param string $repositoryId | |
| 432 | - * @param string $folderId | |
| 433 | - * @return string CMIS AtomPub feed | |
| 434 | - */ | |
| 435 | - static public function getFolderFeed($ObjectService, $repositoryId, $folderId) | |
| 436 | - { | |
| 437 | - $cmisEntry = $ObjectService->getProperties($repositoryId, $folderId, false, false); | |
| 438 | - | |
| 439 | - $feed = new KTCMISAPPFeed(KT_APP_BASE_URI, $cmisEntry['properties']['ObjectTypeId']['value'], null, null, null, | |
| 440 | - 'urn:uuid:' . $cmisEntry['properties']['ObjectId']['value']); | |
| 441 | - | |
| 442 | - CMISFolderFeed::createEntry($feed, $cmisEntry, $cmisEntry['properties']['ParentId']['value']); | |
| 443 | - | |
| 444 | - // <cmis:hasMoreItems>false</cmis:hasMoreItems> | |
| 445 | - | |
| 446 | - $output = $feed->getAPPdoc(); | |
| 447 | - | |
| 448 | - $outputs = '<?xml version="1.0" encoding="UTF-8"?> | |
| 449 | -<feed xmlns="http://www.w3.org/2005/Atom" xmlns:cmis="http://www.cmis.org/2008/05"> | |
| 450 | -<entry> | |
| 451 | -<author><name>System</name></author> | |
| 452 | -<content>28537649-8af2-4c74-aa92-5d8bbecac9ce</content> | |
| 453 | -<id>urn:uuid:28537649-8af2-4c74-aa92-5d8bbecac9ce</id> | |
| 454 | -<link rel="self" href="http://127.0.0.1:8080/alfresco/service/api/node/workspace/SpacesStore/28537649-8af2-4c74-aa92-5d8bbecac9ce"/> | |
| 455 | -<link rel="edit" href="http://127.0.0.1:8080/alfresco/service/api/node/workspace/SpacesStore/28537649-8af2-4c74-aa92-5d8bbecac9ce"/> | |
| 456 | -<link rel="cmis-allowableactions" href="http://127.0.0.1:8080/alfresco/service/api/node/workspace/SpacesStore/28537649-8af2-4c74-aa92-5d8bbecac9ce/permissions"/> | |
| 457 | -<link rel="cmis-relationships" href="http://127.0.0.1:8080/alfresco/service/api/node/workspace/SpacesStore/28537649-8af2-4c74-aa92-5d8bbecac9ce/associations"/> | |
| 458 | -<link rel="cmis-children" href="http://127.0.0.1:8080/alfresco/service/api/node/workspace/SpacesStore/28537649-8af2-4c74-aa92-5d8bbecac9ce/children"/> | |
| 459 | -<link rel="cmis-descendants" href="http://127.0.0.1:8080/alfresco/service/api/node/workspace/SpacesStore/28537649-8af2-4c74-aa92-5d8bbecac9ce/descendants"/> | |
| 460 | -<link rel="cmis-type" href="http://127.0.0.1:8080/alfresco/service/api/type/folder"/> | |
| 461 | -<link rel="cmis-repository" href="http://127.0.0.1:8080/alfresco/service/api/repository"/> | |
| 462 | -<published>2009-06-18T10:20:29.871+02:00</published> | |
| 463 | -<summary>The company root space</summary> | |
| 464 | -<title>Company Home</title> | |
| 465 | -<updated>2009-06-18T10:20:29.937+02:00</updated> | |
| 466 | -<cmis:object> | |
| 467 | -<cmis:properties> | |
| 468 | -<cmis:propertyId cmis:name="ObjectId"><cmis:value>workspace://SpacesStore/28537649-8af2-4c74-aa92-5d8bbecac9ce</cmis:value></cmis:propertyId> | |
| 469 | -<cmis:propertyString cmis:name="BaseType"><cmis:value>folder</cmis:value></cmis:propertyString> | |
| 470 | -<cmis:propertyString cmis:name="ObjectTypeId"><cmis:value>folder</cmis:value></cmis:propertyString> | |
| 471 | -<cmis:propertyString cmis:name="CreatedBy"><cmis:value>System</cmis:value></cmis:propertyString> | |
| 472 | -<cmis:propertyDateTime cmis:name="CreationDate"><cmis:value>2009-06-18T10:20:29.871+02:00</cmis:value></cmis:propertyDateTime> | |
| 473 | -<cmis:propertyString cmis:name="LastModifiedBy"><cmis:value>System</cmis:value></cmis:propertyString> | |
| 474 | -<cmis:propertyDateTime cmis:name="LastModificationDate"><cmis:value>2009-06-18T10:20:29.937+02:00</cmis:value></cmis:propertyDateTime> | |
| 475 | -<cmis:propertyString cmis:name="Name"><cmis:value>Company Home</cmis:value></cmis:propertyString> | |
| 476 | -<cmis:propertyId cmis:name="ParentId"/> | |
| 477 | -</cmis:properties> | |
| 478 | -</cmis:object> | |
| 479 | -<cmis:terminator/> | |
| 480 | -<app:edited>2009-06-18T10:20:29.937+02:00</app:edited> | |
| 481 | -<alf:icon>http://127.0.0.1:8080/alfresco/images/icons/space-icon-default-16.gif</alf:icon> | |
| 482 | -</entry> | |
| 483 | -</feed>'; | |
| 484 | - | |
| 485 | - return $output; | |
| 486 | - } | |
| 487 | - | |
| 488 | - static public function getFolderData($query, &$folderName, &$tree) | |
| 489 | - { | |
| 490 | - $ktapi = new KTAPI(); | |
| 491 | - $ktapi->start_session('admin', 'admin'); | |
| 492 | - | |
| 493 | - $numQ = count($query); | |
| 494 | - $numFolders = $numQ-3; | |
| 495 | - $folderId = 1; | |
| 496 | - | |
| 497 | - if ($query[$numQ-1] == 'children' || $query[$numQ-1] == 'descendants') | |
| 498 | - { | |
| 499 | - $tree = $query[$numQ-1]; | |
| 500 | - } | |
| 501 | - | |
| 502 | - $start = 0; | |
| 503 | - while($start < $numFolders-1) | |
| 504 | - { | |
| 505 | - $folderName = urldecode($query[$numQ-$numFolders+$start]); | |
| 506 | - $folder = $ktapi->get_folder_by_name($folderName, $folderId); | |
| 507 | - $folderId = $folder->get_folderid(); | |
| 508 | - ++$start; | |
| 509 | - } | |
| 510 | - | |
| 511 | - return CMISUtil::encodeObjectId('Folder', $folderId); | |
| 512 | - } | |
| 513 | -} | |
| 514 | - | |
| 515 | -include 'services/cmis/RepositoryService.inc.php'; | |
| 516 | -include 'services/cmis/NavigationService.inc.php'; | |
| 517 | -include 'services/cmis/ObjectService.inc.php'; | |
| 518 | - | |
| 519 | -$RepositoryService = new RepositoryService(); | |
| 520 | -$repositories = $RepositoryService->getRepositories(); | |
| 521 | -$repositoryId = $repositories[0]['repositoryId']; | |
| 522 | - | |
| 523 | -$folderId = CMISFolderFeed::getFolderData($query, $folderName, $tree); | |
| 524 | - | |
| 525 | -if (isset($tree) && (($tree == 'children') || ($tree == 'descendants'))) | |
| 526 | -{ | |
| 527 | - $NavigationService = new NavigationService(); | |
| 528 | - $NavigationService->startSession($username, $password); | |
| 529 | - | |
| 530 | - $output = CMISFolderFeed::getFolderChildrenFeed($NavigationService, $repositoryId, $folderId, $folderName, $tree); | |
| 531 | -} | |
| 532 | -else | |
| 533 | -{ | |
| 534 | - $ObjectService = new ObjectService(); | |
| 535 | - $ObjectService->startSession($username, $password); | |
| 536 | - | |
| 537 | - $output = CMISFolderFeed::getFolderFeed($ObjectService, $repositoryId, $folderId); | |
| 538 | -} | |
| 539 | - | |
| 540 | -?> |
ktatompub/services/cmis/index.php deleted
| 1 | -<?php | |
| 2 | - | |
| 3 | -/** | |
| 4 | - * Index page for CMIS AtomPub services | |
| 5 | - */ | |
| 6 | - | |
| 7 | -include_once('lib/cmis/KTCMISAPPServiceDoc.inc.php'); | |
| 8 | -include_once('lib/cmis/KTCMISAPPFeed.inc.php'); | |
| 9 | - | |
| 10 | -define ('CMIS_BASE_URI', trim(KT_APP_BASE_URI, '/') . 'cmis/'); | |
| 11 | -// hack for links not yet working in KT, use Alfresco installation to move things forward | |
| 12 | -//define ('CMIS_BASE_URI_ALF', 'http://127.0.0.1:8080/alfresco/service/api/'); | |
| 13 | - | |
| 14 | -// fetch username and password for auth; note that this apparently only works when PHP is run as an apache module | |
| 15 | -// TODO method to fetch username and password when running PHP as CGI, if possible | |
| 16 | -// HTTP Basic Auth: | |
| 17 | -$username = $_SERVER['PHP_AUTH_USER']; | |
| 18 | -$password = $_SERVER['PHP_AUTH_PW']; | |
| 19 | - | |
| 20 | -// TODO response if failed auth, need generic response which can be used by all code | |
| 21 | - | |
| 22 | -$arg = (isset($query[1]) ? $query[1] : ''); | |
| 23 | - | |
| 24 | -switch($arg) | |
| 25 | -{ | |
| 26 | - case 'checkedout': | |
| 27 | - include('services/cmis/checkedout.inc.php'); | |
| 28 | - break; | |
| 29 | - case 'document': | |
| 30 | - include('services/cmis/document.inc.php'); | |
| 31 | - break; | |
| 32 | - case 'folder': | |
| 33 | - include('services/cmis/folder.inc.php'); | |
| 34 | - break; | |
| 35 | - case 'type': | |
| 36 | - case 'types': | |
| 37 | - include('services/cmis/types.inc.php'); | |
| 38 | - break; | |
| 39 | - case 'repository': | |
| 40 | - default: | |
| 41 | - include('services/cmis/servicedocument.inc.php'); | |
| 42 | - break; | |
| 43 | -} | |
| 44 | - | |
| 45 | -?> |
ktatompub/services/cmis/servicedocument.inc.php deleted
| 1 | -<?php | |
| 2 | - | |
| 3 | -/** | |
| 4 | - * Creates the CMIS AtomPub service document | |
| 5 | - * | |
| 6 | - * NOTE Includes the results of a repositoryInfo call as well as service links | |
| 7 | - */ | |
| 8 | - | |
| 9 | -// NOTE currently we only support one repository, which will be the first one found in the repositories.xml config | |
| 10 | -// TODO multiple repositories as individual workspaces | |
| 11 | - | |
| 12 | -include 'services/cmis/RepositoryService.inc.php'; | |
| 13 | -$RepositoryService = new RepositoryService(); | |
| 14 | - | |
| 15 | -// fetch data for response | |
| 16 | -$repositories = $RepositoryService->getRepositories(); | |
| 17 | -// fetch for default first repo; NOTE that this will probably have to change at some point, quick and dirty for now | |
| 18 | -$repositoryInfo = $RepositoryService->getRepositoryInfo($repositories[0]['repositoryId']); | |
| 19 | - | |
| 20 | -// generate service document | |
| 21 | -$service = new KTCMISAPPServiceDoc(KT_APP_BASE_URI); | |
| 22 | -$ws = $service->newWorkspace($repositoryInfo['repositoryName']); | |
| 23 | -$ws->appendChild($service->newAttr('cmis:repositoryRelationship', $repositoryInfo['repositoryRelationship'])); | |
| 24 | - | |
| 25 | -// repository information | |
| 26 | -$element = $service->newElement('cmis:repositoryInfo'); | |
| 27 | -foreach($repositoryInfo as $key => $repoData) | |
| 28 | -{ | |
| 29 | - if ($key == 'rootFolderId') | |
| 30 | - { | |
| 31 | - $repoData = CMIS_BASE_URI . 'folder/' . $repoData; | |
| 32 | - } | |
| 33 | - | |
| 34 | - if (!is_array($repoData)) | |
| 35 | - { | |
| 36 | - $element->appendChild($service->newElement('cmis:' . $key, $repoData)); | |
| 37 | - } | |
| 38 | - else | |
| 39 | - { | |
| 40 | - $elementSub = $service->newElement('cmis:' . $key); | |
| 41 | - foreach($repoData as $key2 => $data) | |
| 42 | - { | |
| 43 | - $elementSub->appendChild($service->newElement('cmis:' . $key2, CMISUtil::boolToString($data))); | |
| 44 | - } | |
| 45 | - $element->appendChild($elementSub); | |
| 46 | - } | |
| 47 | -} | |
| 48 | -$ws->appendChild($element); | |
| 49 | - | |
| 50 | -// collection links | |
| 51 | -$col = $service->newCollection(CMIS_BASE_URI . 'folder/' . $repositoryInfo['rootFolderId'] . '/children', | |
| 52 | - 'Root Folder Children Collection', 'root-children', $ws); | |
| 53 | -$col = $service->newCollection(CMIS_BASE_URI . 'folder/' . $repositoryInfo['rootFolderId'] . '/descendants', | |
| 54 | - 'Root Folder Descendant Collection', 'root-descendants', $ws); | |
| 55 | -$col = $service->newCollection(CMIS_BASE_URI . 'checkedout', 'Checked Out Document Collection', 'checkedout', $ws); | |
| 56 | -$col = $service->newCollection(CMIS_BASE_URI . 'types', 'Object Type Collection', 'types-children', $ws); | |
| 57 | -$col = $service->newCollection(CMIS_BASE_URI . 'types', 'Object Type Collection', 'types-descendants', $ws); | |
| 58 | - | |
| 59 | -$output = $service->getAPPdoc(); | |
| 60 | - | |
| 61 | -?> | |
| 62 | 0 | \ No newline at end of file |
ktatompub/services/cmis/types.inc.php deleted
| 1 | -<?php | |
| 2 | - | |
| 3 | -/** | |
| 4 | - * Type access functions for CMIS AtomPub | |
| 5 | - */ | |
| 6 | - | |
| 7 | -include 'services/cmis/RepositoryService.inc.php'; | |
| 8 | - | |
| 9 | -$RepositoryService = new RepositoryService(); | |
| 10 | -// technically do not need to log in to access this information | |
| 11 | -// TODO consider requiring authentication even to access basic repository information | |
| 12 | -$RepositoryService->startSession($username, $password); | |
| 13 | - | |
| 14 | -// fetch repository id | |
| 15 | -$repositories = $RepositoryService->getRepositories(); | |
| 16 | -$repositoryId = $repositories[0]['repositoryId']; | |
| 17 | - | |
| 18 | -switch($arg) | |
| 19 | -{ | |
| 20 | - case 'type': | |
| 21 | - { | |
| 22 | - if (!isset($query[3])) | |
| 23 | - { | |
| 24 | - $type = ucwords($query[2]); | |
| 25 | - $types = $RepositoryService->getTypes($repositoryId, $type); | |
| 26 | - $output = CMISTypeFeed::getTypeFeed($type, $types); | |
| 27 | - } | |
| 28 | - else | |
| 29 | - { | |
| 30 | - // TODO dynamic dates, as needed everywhere | |
| 31 | - // NOTE children of types not yet implemented and we don't support any non-basic types at this time | |
| 32 | - $output = CMISTypeFeed::getTypeChildrenFeed($query[2]); | |
| 33 | - } | |
| 34 | - } | |
| 35 | - break; | |
| 36 | - case 'types': | |
| 37 | - $types = $RepositoryService->getTypes($repositoryId); | |
| 38 | - $type = (($query[2] == '') ? 'all' : $query[2]); | |
| 39 | - $output = CMISTypeFeed::getTypeFeed($type, $types); | |
| 40 | - break; | |
| 41 | -} | |
| 42 | - | |
| 43 | -/** | |
| 44 | - * Class to generate CMIS AtomPub feeds for Type responses | |
| 45 | - */ | |
| 46 | - | |
| 47 | -class CMISTypeFeed { | |
| 48 | - | |
| 49 | - /** | |
| 50 | - * Retrieves the list of types as a CMIS AtomPub feed | |
| 51 | - * | |
| 52 | - * @param string $typeDef Type requested - 'All Types' indicates a listing, else only a specific type | |
| 53 | - * @param array $types The types found | |
| 54 | - * @return string CMIS AtomPub feed | |
| 55 | - */ | |
| 56 | - static public function getTypeFeed($typeDef, $types) | |
| 57 | - { | |
| 58 | - $typesString = ''; | |
| 59 | - $typesHeading = ''; | |
| 60 | - switch($typeDef) | |
| 61 | - { | |
| 62 | - case 'all': | |
| 63 | - case 'children': | |
| 64 | - case 'descendants': | |
| 65 | - $typesString = 'types-' . $typeDef; | |
| 66 | - $typesHeading = 'All Types'; | |
| 67 | - break; | |
| 68 | - default: | |
| 69 | - $typesString = 'type-' . $typeDef; | |
| 70 | - $typesHeading = $typeDef; | |
| 71 | - break; | |
| 72 | - } | |
| 73 | - | |
| 74 | - $feed = new KTCMISAPPFeed(KT_APP_BASE_URI, $typesHeading, null, null, null, 'urn:uuid:' . $typesString); | |
| 75 | - | |
| 76 | - foreach($types as $type) | |
| 77 | - { | |
| 78 | - $entry = $feed->newEntry(); | |
| 79 | - $feed->newId('urn:uuid:type-' . strtolower($type['typeId']), $entry); | |
| 80 | - | |
| 81 | - // links | |
| 82 | - $link = $feed->newElement('link'); | |
| 83 | - $link->appendChild($feed->newAttr('rel','self')); | |
| 84 | - $link->appendChild($feed->newAttr('href', CMIS_BASE_URI . 'type/' . strtolower($type['typeId']))); | |
| 85 | - $entry->appendChild($link); | |
| 86 | - $link = $feed->newElement('link'); | |
| 87 | - $link->appendChild($feed->newAttr('rel','cmis-type')); | |
| 88 | - $link->appendChild($feed->newAttr('href', CMIS_BASE_URI . 'type/' . strtolower($type['typeId']))); | |
| 89 | - $entry->appendChild($link); | |
| 90 | - $link = $feed->newElement('link'); | |
| 91 | - $link->appendChild($feed->newAttr('rel','cmis-children')); | |
| 92 | - $link->appendChild($feed->newAttr('href', CMIS_BASE_URI . 'type/' . strtolower($type['typeId']) . '/children')); | |
| 93 | - $entry->appendChild($link); | |
| 94 | - $link = $feed->newElement('link'); | |
| 95 | - $link->appendChild($feed->newAttr('rel','cmis-descendants')); | |
| 96 | - $link->appendChild($feed->newAttr('href', CMIS_BASE_URI . 'type/' . strtolower($type['typeId']) . '/descendants')); | |
| 97 | - $entry->appendChild($link); | |
| 98 | - $link = $feed->newElement('link'); | |
| 99 | - $link->appendChild($feed->newAttr('rel','cmis-repository')); | |
| 100 | - $link->appendChild($feed->newAttr('href', CMIS_BASE_URI . 'repository')); | |
| 101 | - $entry->appendChild($link); | |
| 102 | - | |
| 103 | - $entry->appendChild($feed->newElement('summary', $type['typeId'] . ' Type')); | |
| 104 | - $entry->appendChild($feed->newElement('title', $type['typeId'])); | |
| 105 | - | |
| 106 | - // main CMIS entry | |
| 107 | - $feedElement = $feed->newElement('cmis:' . strtolower($type['typeId']) . 'Type'); | |
| 108 | - foreach($type as $property => $value) | |
| 109 | - { | |
| 110 | - $feed->newField($property, CMISUtil::boolToString($value), $feedElement); | |
| 111 | - } | |
| 112 | - | |
| 113 | - $entry->appendChild($feedElement); | |
| 114 | - } | |
| 115 | - | |
| 116 | - $output = $feed->getAPPdoc(); | |
| 117 | - | |
| 118 | - return $output; | |
| 119 | - } | |
| 120 | - | |
| 121 | - /** | |
| 122 | - * Retrieves a list of child types for the supplied type | |
| 123 | - * | |
| 124 | - * NOTE this currently returns a hard coded empty list, since we do not currently support child types | |
| 125 | - * TODO make dynamic if/when we support checking for child types (we don't actually need to support child types themselves) | |
| 126 | - * | |
| 127 | - * @param string $type | |
| 128 | - * @return string CMIS AtomPub feed | |
| 129 | - */ | |
| 130 | - static public function getTypeChildrenFeed($type) | |
| 131 | - { | |
| 132 | - $output = '<?xml version="1.0" encoding="UTF-8"?> | |
| 133 | -<feed xmlns="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app" xmlns:cmis="http://www.cmis.org/2008/05"> | |
| 134 | -<id>urn:uuid:type-' . $type . '-children</id> | |
| 135 | -<link rel="self" href="' . CMIS_BASE_URI . 'type/document/children"/> | |
| 136 | -<link rel="first" href="' . CMIS_BASE_URI . 'type/document/children?pageNo=1&pageSize=0&guest=" type="application/atom+xml;type=feed"/> | |
| 137 | -<link rel="last" href="' . CMIS_BASE_URI . 'type/document/children?pageNo=1&pageSize=0&guest=" type="application/atom+xml;type=feed"/> | |
| 138 | -<title>Child types of ' . $type . '</title> | |
| 139 | -<updated>2009-06-23T13:40:32.786+02:00</updated> | |
| 140 | -<cmis:hasMoreItems>false</cmis:hasMoreItems> | |
| 141 | -</feed>'; | |
| 142 | - | |
| 143 | - return $output; | |
| 144 | - } | |
| 145 | - | |
| 146 | -} | |
| 147 | - | |
| 148 | -?> | |
| 149 | 0 | \ No newline at end of file |
ktatompub/services/document.inc.php deleted
| 1 | -<?php | |
| 2 | -/** | |
| 3 | - * Framework for an Atom Publication Protocol Service | |
| 4 | - * | |
| 5 | - * KnowledgeTree Community Edition | |
| 6 | - * Document Management Made Simple | |
| 7 | - * Copyright (C) 2008, 2009 KnowledgeTree Inc. | |
| 8 | - * Portions copyright The Jam Warehouse Software (Pty) Limited | |
| 9 | - * | |
| 10 | - * This program is free software; you can redistribute it and/or modify it under | |
| 11 | - * the terms of the GNU General Public License version 3 as published by the | |
| 12 | - * Free Software Foundation. | |
| 13 | - * | |
| 14 | - * This program is distributed in the hope that it will be useful, but WITHOUT | |
| 15 | - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | |
| 16 | - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more | |
| 17 | - * details. | |
| 18 | - * | |
| 19 | - * You should have received a copy of the GNU General Public License | |
| 20 | - * along with this program. If not, see <http://www.gnu.org/licenses/>. | |
| 21 | - * | |
| 22 | - * You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco, | |
| 23 | - * California 94120-7775, or email info@knowledgetree.com. | |
| 24 | - * | |
| 25 | - * The interactive user interfaces in modified source and object code versions | |
| 26 | - * of this program must display Appropriate Legal Notices, as required under | |
| 27 | - * Section 5 of the GNU General Public License version 3. | |
| 28 | - * | |
| 29 | - * In accordance with Section 7(b) of the GNU General Public License version 3, | |
| 30 | - * these Appropriate Legal Notices must retain the display of the "Powered by | |
| 31 | - * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 32 | - * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices | |
| 33 | - * must display the words "Powered by KnowledgeTree" and retain the original | |
| 34 | - * copyright notice. | |
| 35 | - * Contributor( s): | |
| 36 | - * Mark Holtzhausen <mark@knowledgetree.com> | |
| 37 | - * | |
| 38 | - */ | |
| 39 | - | |
| 40 | - //Create a new response feed | |
| 41 | - $feed=new KTAPPFeed(KT_APP_BASE_URI); | |
| 42 | - | |
| 43 | - //Invoke the KtAPI to get detail about the referenced document | |
| 44 | - $docDetail=KTAPPHelper::getDocumentDetail($query[1]); | |
| 45 | - | |
| 46 | - //Create the atom response feed | |
| 47 | - $entry=$feed->newEntry(); | |
| 48 | - foreach($docDetail['results'] as $property=>$value){ | |
| 49 | - $feed->newField($property,$value,$entry); | |
| 50 | - } | |
| 51 | - //Add a downloaduri field manually | |
| 52 | - $feed->newField('downloaduri',urlencode(KT_APP_SYSTEM_URI.'/action.php?kt_path_info=ktcore.actions.document.view&fDocumentId='.$docDetail['results']['document_id']),$entry); | |
| 53 | - | |
| 54 | - //Generate and set the output | |
| 55 | - $output=$feed->getAPPdoc(); | |
| 56 | -?> | |
| 57 | 0 | \ No newline at end of file |
ktatompub/services/fulltree.inc.php deleted
| 1 | -<?php | |
| 2 | -/** | |
| 3 | - * Framework for an Atom Publication Protocol Service | |
| 4 | - * | |
| 5 | - * KnowledgeTree Community Edition | |
| 6 | - * Document Management Made Simple | |
| 7 | - * Copyright (C) 2008, 2009 KnowledgeTree Inc. | |
| 8 | - * Portions copyright The Jam Warehouse Software (Pty) Limited | |
| 9 | - * | |
| 10 | - * This program is free software; you can redistribute it and/or modify it under | |
| 11 | - * the terms of the GNU General Public License version 3 as published by the | |
| 12 | - * Free Software Foundation. | |
| 13 | - * | |
| 14 | - * This program is distributed in the hope that it will be useful, but WITHOUT | |
| 15 | - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | |
| 16 | - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more | |
| 17 | - * details. | |
| 18 | - * | |
| 19 | - * You should have received a copy of the GNU General Public License | |
| 20 | - * along with this program. If not, see <http://www.gnu.org/licenses/>. | |
| 21 | - * | |
| 22 | - * You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco, | |
| 23 | - * California 94120-7775, or email info@knowledgetree.com. | |
| 24 | - * | |
| 25 | - * The interactive user interfaces in modified source and object code versions | |
| 26 | - * of this program must display Appropriate Legal Notices, as required under | |
| 27 | - * Section 5 of the GNU General Public License version 3. | |
| 28 | - * | |
| 29 | - * In accordance with Section 7(b) of the GNU General Public License version 3, | |
| 30 | - * these Appropriate Legal Notices must retain the display of the "Powered by | |
| 31 | - * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 32 | - * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices | |
| 33 | - * must display the words "Powered by KnowledgeTree" and retain the original | |
| 34 | - * copyright notice. | |
| 35 | - * Contributor( s): | |
| 36 | - * Mark Holtzhausen <mark@knowledgetree.com> | |
| 37 | - * | |
| 38 | - */ | |
| 39 | - | |
| 40 | - //Create a new response feed | |
| 41 | - $feed=new KTAPPFeed(KT_APP_BASE_URI); | |
| 42 | - | |
| 43 | - //Invoke the KtAPI to get detail about the referenced document | |
| 44 | - $tree=KTAPPHelper::getFullTree(); | |
| 45 | - | |
| 46 | - //Create the atom response feed | |
| 47 | - foreach($tree as $item){ | |
| 48 | - $id=$item['id']; | |
| 49 | - $entry=$feed->newEntry(); | |
| 50 | - $feed->newField('id',$id,$entry); | |
| 51 | - foreach($item as $property=>$value){ | |
| 52 | - $feed->newField($property,$value,$entry); | |
| 53 | - } | |
| 54 | - } | |
| 55 | - | |
| 56 | - | |
| 57 | - //Generate and set the output | |
| 58 | - $output=$feed->getAPPdoc(); | |
| 59 | -?> | |
| 60 | 0 | \ No newline at end of file |
ktatompub/services/servicedocument.inc.php deleted
| 1 | -<?php | |
| 2 | -/** | |
| 3 | - * Framework for an Atom Publication Protocol Service | |
| 4 | - * | |
| 5 | - * KnowledgeTree Community Edition | |
| 6 | - * Document Management Made Simple | |
| 7 | - * Copyright (C) 2008, 2009 KnowledgeTree Inc. | |
| 8 | - * Portions copyright The Jam Warehouse Software (Pty) Limited | |
| 9 | - * | |
| 10 | - * This program is free software; you can redistribute it and/or modify it under | |
| 11 | - * the terms of the GNU General Public License version 3 as published by the | |
| 12 | - * Free Software Foundation. | |
| 13 | - * | |
| 14 | - * This program is distributed in the hope that it will be useful, but WITHOUT | |
| 15 | - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | |
| 16 | - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more | |
| 17 | - * details. | |
| 18 | - * | |
| 19 | - * You should have received a copy of the GNU General Public License | |
| 20 | - * along with this program. If not, see <http://www.gnu.org/licenses/>. | |
| 21 | - * | |
| 22 | - * You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco, | |
| 23 | - * California 94120-7775, or email info@knowledgetree.com. | |
| 24 | - * | |
| 25 | - * The interactive user interfaces in modified source and object code versions | |
| 26 | - * of this program must display Appropriate Legal Notices, as required under | |
| 27 | - * Section 5 of the GNU General Public License version 3. | |
| 28 | - * | |
| 29 | - * In accordance with Section 7(b) of the GNU General Public License version 3, | |
| 30 | - * these Appropriate Legal Notices must retain the display of the "Powered by | |
| 31 | - * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 32 | - * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices | |
| 33 | - * must display the words "Powered by KnowledgeTree" and retain the original | |
| 34 | - * copyright notice. | |
| 35 | - * Contributor( s): | |
| 36 | - * Mark Holtzhausen <mark@knowledgetree.com> | |
| 37 | - * | |
| 38 | - */ | |
| 39 | - | |
| 40 | - $service=new KTAPPServiceDoc(KT_APP_BASE_URI); | |
| 41 | - | |
| 42 | - //Creating the Default Workspace for use with standard atomPub Clients | |
| 43 | - $ws=$service->newWorkspace('DMS'); | |
| 44 | - $col=$service->newCollection(KT_APP_BASE_URI.'fulltree/','Full Document Tree',$ws); | |
| 45 | - $col=$service->newCollection(KT_APP_BASE_URI.'folder/','Folder Detail',$ws); | |
| 46 | - $col=$service->newCollection(KT_APP_BASE_URI.'document/','Document Detail',$ws); | |
| 47 | - $col=$service->newCollection(KT_APP_BASE_URI.'mimetypes/','Supported Mime Types',$ws); | |
| 48 | - | |
| 49 | - | |
| 50 | -/* NOT YET IMPLEMENTED - Conceptual Spec Only * / | |
| 51 | - //Creating an additional Enhanced Workspace for webservices via atomPub | |
| 52 | - $ws=$service->newWorkspace('REST'); | |
| 53 | - $col=$service->newCollection(KT_APP_BASE_URI.'REST/serviceList','Full Document Tree',$ws); | |
| 54 | - $col=$service->newCollection(KT_APP_BASE_URI.'REST/[controller]/[function]/[param1]/[param2]','RPC via REST',$ws); | |
| 55 | -/* */ | |
| 56 | - | |
| 57 | - | |
| 58 | - $output=$service->getAPPdoc(); | |
| 59 | -?> | |
| 60 | 0 | \ No newline at end of file |
ktatompub/xmlparsetest.php
| 1 | 1 | <?php |
| 2 | 2 | |
| 3 | 3 | class xml2array{ |
| 4 | - private $xml='<?xml version="1.0" encoding="utf-8"?>'; | |
| 5 | - private $namespaces=array(); | |
| 6 | - | |
| 7 | - public function __construct($xml=NULL){ | |
| 8 | - if($xml)$this->xml=simplexml_load_string($xml); | |
| 9 | - $this->namespaces=$this->xml->getNamespaces(true); | |
| 10 | - } | |
| 11 | - | |
| 12 | - public function parse2array(){ | |
| 13 | - return $this->parseTag($this->xml); | |
| 4 | + public static function parse($xml){ | |
| 5 | + return self::parsetag(simplexml_load_string($xml)); | |
| 14 | 6 | } |
| 15 | 7 | |
| 16 | - private function parsetag($xml,$ns=NULL){ | |
| 8 | + private static function parsetag($xml,$ns=NULL,$rootXML=NULL){ | |
| 9 | + if(!$rootXML)$rootXML=$xml; | |
| 17 | 10 | $tagName=$xml->getName(); |
| 18 | 11 | if($ns)$tagName=$ns.':'.$tagName; |
| 19 | - //$tagAttributes=(array)$xml->attributes(); $tagAttributes=isset($tagAttributes['@attributes'])?$tagAttributes['@attributes']:array(); | |
| 20 | 12 | $array=array(); |
| 21 | - $array[$tagName]['@attributes']=$this->getAttributes($xml); | |
| 22 | - if($this->hasChildren($xml)){ | |
| 23 | - $children=$this->getChildren($xml); | |
| 24 | - foreach($children as $childName=>$child){ | |
| 25 | - $childName=split(':',$childName); | |
| 26 | - $childParsed=$this->parsetag($child,$childName[0]); | |
| 27 | - $array[$tagName]=array_merge($array[$tagName],$childParsed); | |
| 13 | + $array[$tagName]['@attributes']=self::getAttributes($xml,$rootXML); | |
| 14 | + if(self::hasChildren($xml,$rootXML)){ | |
| 15 | + $children=self::getChildren($xml,$rootXML); | |
| 16 | + echo '<b>'.$tagName.'</b><br /><pre>'.print_r($children,true).'</pre>'; | |
| 17 | + foreach($children as $fullChildName=>$childCollection){ | |
| 18 | + //$child=$childCollection; | |
| 19 | + $childName=split(':',$fullChildName); | |
| 20 | + foreach($childCollection as $child){ | |
| 21 | + $childParsed=self::parsetag($child,$childName[0],$rootXML); | |
| 22 | + //$cIndex=count($array[$tagName][$childName]); | |
| 23 | + $array[$tagName][]=$childParsed; | |
| 24 | + } | |
| 28 | 25 | |
| 29 | 26 | } |
| 30 | 27 | }else{ |
| ... | ... | @@ -33,13 +30,14 @@ class xml2array{ |
| 33 | 30 | return $array; |
| 34 | 31 | } |
| 35 | 32 | |
| 36 | - private function hasChildren($xml){ | |
| 37 | - return count($this->getChildren($xml))>0; | |
| 33 | + private static function hasChildren($xml,$rootXML){ | |
| 34 | + return count(self::getChildren($xml,$rootXML))>0; | |
| 38 | 35 | } |
| 39 | 36 | |
| 40 | - private function getAttributes($xml){ | |
| 37 | + private static function getAttributes($xml,$rootXML){ | |
| 41 | 38 | $attr=array(); |
| 42 | - foreach($this->namespaces as $namespace=>$uri){ | |
| 39 | + $namespaces=$rootXML->getNamespaces(true); | |
| 40 | + foreach($namespaces as $namespace=>$uri){ | |
| 43 | 41 | $nsAttrs=(array)$xml->attributes($uri); |
| 44 | 42 | $nsAttrs=isset($nsAttrs['@attributes'])?$nsAttrs['@attributes']:array(); |
| 45 | 43 | foreach($nsAttrs as $nsAttr=>$nsAttrVal){ //TODO: Support for multiple same name tags |
| ... | ... | @@ -49,12 +47,16 @@ class xml2array{ |
| 49 | 47 | return $attr; |
| 50 | 48 | } |
| 51 | 49 | |
| 52 | - private function getChildren($xml){ | |
| 50 | + private static function getChildren($xml,$rootXML){ | |
| 53 | 51 | $children=array(); |
| 54 | - foreach($this->namespaces as $namespace=>$uri){ | |
| 52 | + $namespaces=$rootXML->getNamespaces(true); | |
| 53 | + foreach($namespaces as $namespace=>$uri){ | |
| 55 | 54 | $nsChildren=$xml->children($uri); |
| 56 | 55 | foreach($nsChildren as $nsChild){ //TODO: Support for multiple same name tags |
| 57 | - $children[$namespace.':'.$nsChild->getName()]=$nsChild; | |
| 56 | + $childRealName=$namespace.':'.$nsChild->getName(); | |
| 57 | + if(!isset($children[$childRealName]))$children[$childRealName]=array(); | |
| 58 | + if(!is_array($children[$childRealName]))$children[$childRealName]=array(); | |
| 59 | + $children[$childRealName][]=$nsChild; | |
| 58 | 60 | } |
| 59 | 61 | } |
| 60 | 62 | return $children; |
| ... | ... | @@ -63,6 +65,7 @@ class xml2array{ |
| 63 | 65 | } |
| 64 | 66 | |
| 65 | 67 | |
| 68 | + | |
| 66 | 69 | $xml='<?xml version="1.0" encoding="utf-8"?> |
| 67 | 70 | <service xmlns="http://www.w3.org/2007/app" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:cmis="http://www.cmis.org/2008/05" xmlns:alf="http://www.alfresco.org"> |
| 68 | 71 | <workspace cmis:repositoryRelationship="self"> |
| ... | ... | @@ -121,15 +124,15 @@ $xml='<?xml version="1.0" encoding="utf-8"?> |
| 121 | 124 | $sxml=simplexml_load_string($xml); |
| 122 | 125 | $struct=json_decode(json_encode($sxml),true); |
| 123 | 126 | |
| 124 | -$nxml=new xml2array($xml); | |
| 127 | + | |
| 125 | 128 | |
| 126 | 129 | echo '<pre>'.htmlentities($xml).'</pre>'; |
| 127 | 130 | //echo '<hr /><pre>'.print_r($struct,true).'</pre>'; |
| 128 | 131 | //echo '<hr /><pre>'.print_r($sxml,true).'</pre>'; |
| 129 | 132 | //cho '<hr /><pre>'.print_r(xml2array($xml),true).'</pre>'; |
| 130 | -echo '<hr /><pre>'.print_r($nxml->parse2array(),true).'</pre>'; | |
| 133 | +echo '<hr /><pre>'.print_r(xml2array::parse($xml),true).'</pre>'; | |
| 131 | 134 | |
| 132 | 135 | |
| 133 | -echo http_get_request_headers(); | |
| 136 | +//echo http_get_request_headers(); | |
| 134 | 137 | |
| 135 | 138 | ?> |
| 136 | 139 | \ No newline at end of file | ... | ... |
ktatompub/services/folder.inc.php renamed to webservice/atompub/auth.php
| ... | ... | @@ -32,23 +32,18 @@ |
| 32 | 32 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices |
| 33 | 33 | * must display the words "Powered by KnowledgeTree" and retain the original |
| 34 | 34 | * copyright notice. |
| 35 | - * Contributor( s): | |
| 35 | + * Contributor( s): | |
| 36 | 36 | * Mark Holtzhausen <mark@knowledgetree.com> |
| 37 | 37 | * |
| 38 | 38 | */ |
| 39 | 39 | |
| 40 | - //Create a new response feed | |
| 41 | - $feed=new KTAPPFeed(KT_APP_BASE_URI); | |
| 40 | +/** | |
| 41 | + * Automatic Login bypassing HTTP Basic Auth | |
| 42 | + * TODO: Thest HTTP Basic Auth - Try Library From Home | |
| 43 | + */ | |
| 42 | 44 | |
| 43 | - //Invoke the KtAPI to get detail about the referenced document | |
| 44 | - $folderDetail=KTAPPHelper::getFolderDetail($query[1]); | |
| 45 | +$SessionId=KT_atom_service_helper::login('admin','admin'); | |
| 46 | +$SessionId=$SessionId['session_id']; | |
| 45 | 47 | |
| 46 | - //Create the atom response feed | |
| 47 | - $entry=$feed->newEntry(); | |
| 48 | - foreach($folderDetail as $property=>$value){ | |
| 49 | - $feed->newField($property,$value,$entry); | |
| 50 | - } | |
| 51 | 48 | |
| 52 | - //Generate and set the output | |
| 53 | - $output=$feed->getAPPdoc(); | |
| 54 | 49 | ?> |
| 55 | 50 | \ No newline at end of file | ... | ... |
webservice/atompub/demodms/KT_atom_server.default_dms_services.inc.php
0 โ 100644
| 1 | +<?php | |
| 2 | +/** | |
| 3 | + * AtomPub Service: fulltree | |
| 4 | + * | |
| 5 | + * Returns a full tree listing starting at the root document | |
| 6 | + * Tree structure obtained by referencing parent id | |
| 7 | + * | |
| 8 | + */ | |
| 9 | +class KT_atom_service_fulltree extends KT_atom_service { | |
| 10 | + public function GET_action(){ | |
| 11 | + //Create a new response feed | |
| 12 | + $feed=new KT_atom_ResponseFeed_GET(KT_APP_BASE_URI); | |
| 13 | + | |
| 14 | + //Invoke the KtAPI to get detail about the referenced document | |
| 15 | + $tree=KT_atom_service_helper::getFullTree(); | |
| 16 | + | |
| 17 | + //Create the atom response feed | |
| 18 | + foreach($tree as $item){ | |
| 19 | + $id=$item['id']; | |
| 20 | + $entry=$feed->newEntry(); | |
| 21 | + $feed->newField('id',$id,$entry); | |
| 22 | + foreach($item as $property=>$value){ | |
| 23 | + $feed->newField($property,$value,$entry); | |
| 24 | + } | |
| 25 | + } | |
| 26 | + //Expose the responseFeed | |
| 27 | + $this->responseFeed=$feed; | |
| 28 | + } | |
| 29 | + | |
| 30 | + public function DELETE_action(){ | |
| 31 | + $feed = new KT_atom_ResponseFeed_DELETE(); | |
| 32 | + $this->responseFeed=$feed; | |
| 33 | + } | |
| 34 | +} | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | +/** | |
| 40 | + * AtomPub Service: folder | |
| 41 | + * | |
| 42 | + * Returns detail on a particular folder | |
| 43 | + * | |
| 44 | + */ | |
| 45 | +class KT_atom_service_folder extends KT_atom_service { | |
| 46 | + public function GET_action(){ | |
| 47 | + //Create a new response feed | |
| 48 | + $feed=new KT_atom_responseFeed(KT_APP_BASE_URI); | |
| 49 | + | |
| 50 | + //Invoke the KtAPI to get detail about the referenced document | |
| 51 | + $folderDetail=KT_atom_service_helper::getFolderDetail($this->params[0]?$this->params[0]:1); | |
| 52 | + | |
| 53 | + //Create the atom response feed | |
| 54 | + $entry=$feed->newEntry(); | |
| 55 | + foreach($folderDetail as $property=>$value){ | |
| 56 | + $feed->newField($property,$value,$entry); | |
| 57 | + } | |
| 58 | + | |
| 59 | + //Expose the responseFeed | |
| 60 | + $this->responseFeed=$feed; | |
| 61 | + } | |
| 62 | +} | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | +/** | |
| 68 | + * AtomPub Service: document | |
| 69 | + * | |
| 70 | + * Returns detail on a particular document | |
| 71 | + * | |
| 72 | + */ | |
| 73 | +class KT_atom_service_document extends KT_atom_service { | |
| 74 | + public function GET_action(){ | |
| 75 | + //Create a new response feed | |
| 76 | + $feed=new KT_atom_responseFeed(KT_APP_BASE_URI); | |
| 77 | + | |
| 78 | + //Invoke the KtAPI to get detail about the referenced document | |
| 79 | + $docDetail=KT_atom_service_helper::getDocumentDetail($this->params[0]); | |
| 80 | + | |
| 81 | + //Create the atom response feed | |
| 82 | + $entry=$feed->newEntry(); | |
| 83 | + foreach($docDetail['results'] as $property=>$value){ | |
| 84 | + $feed->newField($property,$value,$entry); | |
| 85 | + } | |
| 86 | + //Add a downloaduri field manually | |
| 87 | + $feed->newField('downloaduri',urlencode(KT_APP_SYSTEM_URI.'/action.php?kt_path_info=ktcore.actions.document.view&fDocumentId='.$docDetail['results']['document_id']),$entry); | |
| 88 | + | |
| 89 | + //Expose the responseFeed | |
| 90 | + $this->responseFeed=$feed; | |
| 91 | + } | |
| 92 | +} | |
| 93 | +?> | |
| 0 | 94 | \ No newline at end of file | ... | ... |
webservice/atompub/demodms/KT_atom_service_helper.inc.php
0 โ 100644
| 1 | +<?php | |
| 2 | +/** | |
| 3 | + * Framework for an Atom Publication Protocol Service | |
| 4 | + * | |
| 5 | + * KnowledgeTree Community Edition | |
| 6 | + * Document Management Made Simple | |
| 7 | + * Copyright (C) 2008, 2009 KnowledgeTree Inc. | |
| 8 | + * Portions copyright The Jam Warehouse Software (Pty) Limited | |
| 9 | + * | |
| 10 | + * This program is free software; you can redistribute it and/or modify it under | |
| 11 | + * the terms of the GNU General Public License version 3 as published by the | |
| 12 | + * Free Software Foundation. | |
| 13 | + * | |
| 14 | + * This program is distributed in the hope that it will be useful, but WITHOUT | |
| 15 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | |
| 16 | + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more | |
| 17 | + * details. | |
| 18 | + * | |
| 19 | + * You should have received a copy of the GNU General Public License | |
| 20 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. | |
| 21 | + * | |
| 22 | + * You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco, | |
| 23 | + * California 94120-7775, or email info@knowledgetree.com. | |
| 24 | + * | |
| 25 | + * The interactive user interfaces in modified source and object code versions | |
| 26 | + * of this program must display Appropriate Legal Notices, as required under | |
| 27 | + * Section 5 of the GNU General Public License version 3. | |
| 28 | + * | |
| 29 | + * In accordance with Section 7(b) of the GNU General Public License version 3, | |
| 30 | + * these Appropriate Legal Notices must retain the display of the "Powered by | |
| 31 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 32 | + * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices | |
| 33 | + * must display the words "Powered by KnowledgeTree" and retain the original | |
| 34 | + * copyright notice. | |
| 35 | + * Contributor( s): | |
| 36 | + * Mark Holtzhausen <mark@knowledgetree.com> | |
| 37 | + * | |
| 38 | + */ | |
| 39 | + | |
| 40 | +class KT_atom_service_helper{ | |
| 41 | + private static $FOLDER_LIST_PROPERTIES=array('id','title','permissions','mime_icon_path'); | |
| 42 | + private static $FILE_LIST_PROPERTIES=array('id','title','document_type','created_by','created_date','checked_out_by','checked_out_date','modified_by','modified_date','owned_by','mime_type','mime_icon_path','mime_display'); | |
| 43 | + private static $FOLDER_RECURSION_LEVEL=100; | |
| 44 | + private static $kt=NULL; | |
| 45 | + | |
| 46 | + /** | |
| 47 | + * Make sure the class is always treated statically and never instantiated. | |
| 48 | + * | |
| 49 | + * @return void | |
| 50 | + */ | |
| 51 | + public function __construct(){ | |
| 52 | + die('KT_atom_service_helper should not be instantiated. Only use as a static class'); | |
| 53 | + } | |
| 54 | + | |
| 55 | + | |
| 56 | + /** | |
| 57 | + * Get the KT singleton instance | |
| 58 | + * | |
| 59 | + * @return object | |
| 60 | + */ | |
| 61 | + public static function getKt(){ | |
| 62 | + if(!isset(self::$kt)){ | |
| 63 | + self::$kt=new KTAPI(); | |
| 64 | + self::$kt->get_active_session(session_id()); | |
| 65 | + } | |
| 66 | + return self::$kt; | |
| 67 | + } | |
| 68 | + | |
| 69 | + | |
| 70 | + /** | |
| 71 | + * Get the subfolders of the indicated folder | |
| 72 | + * | |
| 73 | + * @param integer $folderId | |
| 74 | + * @return array | |
| 75 | + */ | |
| 76 | + public static function getSubFolders($folderId=NULL){ | |
| 77 | + if(!(int)$folderId)$folderId=1; //Default to root folder | |
| 78 | + $folderInfo=self::getKT()->get_folder_contents($folderId,1); | |
| 79 | + $subfolders=array(); | |
| 80 | + foreach($folderInfo['results']['items'] as $item){ | |
| 81 | + if($item['item_type']=='F'){ | |
| 82 | + $subfolders[$item[id]]=self::extractFromArray($item,self::$FOLDER_LIST_PROPERTIES); | |
| 83 | + } | |
| 84 | + } | |
| 85 | + return $subfolders; | |
| 86 | + } | |
| 87 | + | |
| 88 | + | |
| 89 | + /** | |
| 90 | + * Get every folder & document in the repository | |
| 91 | + * | |
| 92 | + * @param integer $parent the id of the folder to start recursing from - defaults to root folder [1] | |
| 93 | + * @return array | |
| 94 | + */ | |
| 95 | + public static function getFullTree($parent=NULL){ | |
| 96 | + if(!(int)$parent)$parent=1; | |
| 97 | + $ktTree=self::getKT()->get_folder_contents($parent,1); | |
| 98 | + $appTree=array(); | |
| 99 | + foreach($ktTree['results']['items'] as $item){ | |
| 100 | + $newItem=array(); | |
| 101 | + $newItem['parent']=$parent; | |
| 102 | + $newItem['type']=$item['item_type']; | |
| 103 | + $newItem['title']=$item['title']; | |
| 104 | + $newItem['filename']=$item['filename']; | |
| 105 | + $newItem['id']=$item['id']; | |
| 106 | +// $newItem['fullrecord']=$item; | |
| 107 | + $appTree[]=$newItem; | |
| 108 | + if($newItem['type']=='F')$appTree=array_merge($appTree,self::getFullTree($item['id'])); | |
| 109 | + } | |
| 110 | + return $appTree; | |
| 111 | + } | |
| 112 | + | |
| 113 | + | |
| 114 | + /** | |
| 115 | + * Get detail about the folder | |
| 116 | + * | |
| 117 | + * @param integer $folderId The id of the folder to get detail on. | |
| 118 | + * @return array | |
| 119 | + */ | |
| 120 | + public static function getFolderDetail($folderId=NULL){ | |
| 121 | + $ktInfo=self::getKT()->get_folder_by_id($folderId); | |
| 122 | + return $ktInfo->get_detail(); | |
| 123 | + } | |
| 124 | + | |
| 125 | + | |
| 126 | + /** | |
| 127 | + * Get detail about the indicated document | |
| 128 | + * | |
| 129 | + * @param integer $docId The document Id | |
| 130 | + * @return array | |
| 131 | + */ | |
| 132 | + public static function getDocumentDetail($docId=NULL){ | |
| 133 | + $ktInfo=self::getKT()->get_document_detail($docId); | |
| 134 | + return $ktInfo; | |
| 135 | + } | |
| 136 | + | |
| 137 | + | |
| 138 | + /** | |
| 139 | + * Get a list of all the documents in a folder. | |
| 140 | + * | |
| 141 | + * @param integer $folderId The id of the folder | |
| 142 | + * @return array | |
| 143 | + */ | |
| 144 | + public static function getFileList($folderId=NULL){ | |
| 145 | + $folderContents=self::getKt()->get_folder_contents($folderId,1); | |
| 146 | + $folderFiles=array(); | |
| 147 | + foreach($folderContents['results']['items'] as $item){ | |
| 148 | + if($item['item_type']=='D'){ | |
| 149 | + $folderFiles[$item['id']]=self::extractFromArray($item,self::$FILE_LIST_PROPERTIES); | |
| 150 | + } | |
| 151 | + } | |
| 152 | + return $folderFiles; | |
| 153 | + } | |
| 154 | + | |
| 155 | + | |
| 156 | + /** | |
| 157 | + * Returns an array containing only the associated values from $array where the keys were found in $keyArray | |
| 158 | + * | |
| 159 | + * @param array $array The array to be processed | |
| 160 | + * @param array $keyArray The list of keys to extract from the array | |
| 161 | + * @return array | |
| 162 | + */ | |
| 163 | + public static function extractFromArray($array,$keyArray){ | |
| 164 | + $newArray=array(); | |
| 165 | + foreach($keyArray as $key){ | |
| 166 | + $newArray[$key]=isset($array[$key])?$array[$key]:NULL; | |
| 167 | + } | |
| 168 | + return $newArray; | |
| 169 | + } | |
| 170 | + | |
| 171 | + /** | |
| 172 | + * Log in to KT easily | |
| 173 | + * | |
| 174 | + * @param string $username | |
| 175 | + * @param string $password | |
| 176 | + * @param string $ip | |
| 177 | + * @return object Containing the status_code of the login and session id | |
| 178 | + */ | |
| 179 | + function login($username, $password, $ip=null){ | |
| 180 | + $kt = self::getKt(); | |
| 181 | + | |
| 182 | + $session = $kt->start_session($username,$password, $ip); | |
| 183 | + if (PEAR::isError($session)){ | |
| 184 | + $response['status_code']=KT_atom_server_FAILURE; | |
| 185 | + $response['session_id']=''; | |
| 186 | + }else{ | |
| 187 | + $session= $session->get_session(); | |
| 188 | + $response['status_code'] = KT_atom_server_SUCCESS; | |
| 189 | + $response['session_id'] = $session; | |
| 190 | + } | |
| 191 | + return $response; | |
| 192 | + } | |
| 193 | + | |
| 194 | + | |
| 195 | + /** | |
| 196 | + * Log out of KT using the session id | |
| 197 | + * | |
| 198 | + * @param string $session_id | |
| 199 | + * @return object Containing the status_code of the logout attempt | |
| 200 | + */ | |
| 201 | + function logout($session_id){ | |
| 202 | + $kt = self::getKt(); | |
| 203 | + $session = $kt->get_active_session($session_id, null); | |
| 204 | + | |
| 205 | + if (PEAR::isError($session)){ | |
| 206 | + $response['status_code']=KT_atom_server_FAILURE; | |
| 207 | + }else{ | |
| 208 | + $session->logout(); | |
| 209 | + $response['status_code'] = KT_atom_server_SUCCESS; | |
| 210 | + } | |
| 211 | + return $response; | |
| 212 | + } | |
| 213 | + | |
| 214 | + /** | |
| 215 | + * Check whether the session_id is logged into KT | |
| 216 | + * | |
| 217 | + * @param string $session_id | |
| 218 | + * @return boolean | |
| 219 | + */ | |
| 220 | + function isLoggedIn($session_id){ | |
| 221 | + $kt=self::getKt(); | |
| 222 | + $session=$kt->get_active_session($session_id); | |
| 223 | + return !PEAR::isError($session); | |
| 224 | + } | |
| 225 | + | |
| 226 | +} | |
| 227 | +?> | |
| 0 | 228 | \ No newline at end of file | ... | ... |
ktatompub/services/mimetypes.inc.php renamed to webservice/atompub/index.php
| ... | ... | @@ -32,25 +32,75 @@ |
| 32 | 32 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices |
| 33 | 33 | * must display the words "Powered by KnowledgeTree" and retain the original |
| 34 | 34 | * copyright notice. |
| 35 | - * Contributor( s): | |
| 35 | + * Contributor( s): | |
| 36 | 36 | * Mark Holtzhausen <mark@knowledgetree.com> |
| 37 | 37 | * |
| 38 | 38 | */ |
| 39 | 39 | |
| 40 | - //Create a new response feed | |
| 41 | - $mimetypes=KTMime::getAllMimeTypes(); | |
| 42 | - | |
| 43 | - //Invoke the KtAPI to get detail about the referenced document | |
| 44 | - $feed=new KTAPPFeed(KT_APP_BASE_URI); | |
| 45 | - | |
| 46 | - //Create the atom response feed | |
| 47 | - foreach($mimetypes as $mimeType){ | |
| 48 | - $entry=$feed->newEntry(); | |
| 49 | - foreach($mimeType as $property=>$value){ | |
| 50 | - $feed->newField($property,$value,$entry); | |
| 51 | - } | |
| 52 | - } | |
| 53 | - | |
| 54 | - //Generate and set the output | |
| 55 | - $output=$feed->getAPPdoc(); | |
| 40 | +ob_start(); | |
| 41 | + | |
| 42 | +/** | |
| 43 | + * Constants | |
| 44 | + */ | |
| 45 | + | |
| 46 | +/** | |
| 47 | + * To sidestep url rewrites but still retain the atomPub URL convention, | |
| 48 | + * the entry point is: index.php?/ | |
| 49 | + * eg. 1. Accessing the servicedocument: http://example.com/ktatompub/index.php?/servicedocument | |
| 50 | + * 2. Accessing the folder service: http://example.com/ktatompub/index.php?/folder/1 | |
| 51 | + * | |
| 52 | + * If URL rewrites are used, they should point any reference below | |
| 53 | + * this folder to index.php?/ | |
| 54 | + * | |
| 55 | + * Because index.php is accessed as the default document, the url can be shortened to http://example.com/ktatompub/?/ | |
| 56 | + */ | |
| 57 | + | |
| 58 | +define('KT_APP_BASE_URI',"http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/?/'); | |
| 59 | +define('KT_APP_SYSTEM_URI',"http://".$_SERVER['HTTP_HOST']); | |
| 60 | +define('KT_ATOM_LIB_FOLDER','../classes/atompub/'); | |
| 61 | + | |
| 62 | +// Define whether to use in debug mode for viewing generated structures | |
| 63 | +//define('KT_APP_WEB_OUTPUT',false); //defunct | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | +/** | |
| 68 | + * Includes | |
| 69 | + */ | |
| 70 | +include_once('../../ktapi/ktapi.inc.php'); | |
| 71 | +include_once(KT_ATOM_LIB_FOLDER.'KT_atom_server.inc.php'); | |
| 72 | +include_once('demodms/KT_atom_service_helper.inc.php'); //Containing helper bridge functions to KtAPI | |
| 73 | +include_once(KT_ATOM_LIB_FOLDER.'KT_atom_baseDoc.inc.php'); //Containing the parent class allowing easy XML manipulation | |
| 74 | +include_once(KT_ATOM_LIB_FOLDER.'KT_atom_serviceDoc.inc.php'); //Containing the servicedoc class allowing easy ServiceDocument generation | |
| 75 | +include_once(KT_ATOM_LIB_FOLDER.'KT_atom_responseFeed.inc.php'); //Containing the response feed class allowing easy atom feed generation | |
| 76 | +include_once(KT_ATOM_LIB_FOLDER.'KT_atom_service.inc.php'); | |
| 77 | +include_once('demodms/KT_atom_server.default_dms_services.inc.php'); | |
| 78 | +include_once('auth.php'); //Containing the authentication protocols | |
| 79 | + | |
| 80 | + | |
| 81 | +//Start the AtomPubProtocol Routing Engine | |
| 82 | +$APP=new KT_atom_server(); | |
| 83 | + | |
| 84 | +/** | |
| 85 | + * Register Services | |
| 86 | + * | |
| 87 | + * Registered services are classes extended from KT_atom_service | |
| 88 | + * The registration process takes the following parameters | |
| 89 | + * Workspace :The workspace within which the service collection will be grouped | |
| 90 | + * ServiceName :This is the name by which the service/collection is exposed | |
| 91 | + * ServiceClass :This is the class name of the class to be instantiated when this service is accessed | |
| 92 | + * Title :This is the title given to the service/collection in the servicedocument | |
| 93 | +*/ | |
| 94 | +$APP->registerService('DMS','fulltree','KT_atom_service_fulltree','Full Document Tree'); | |
| 95 | +$APP->registerService('DMS','folder','KT_atom_service_folder','Folder Detail'); | |
| 96 | +$APP->registerService('DMS','document','KT_atom_service_document','Document Detail'); | |
| 97 | + | |
| 98 | +//Execute the current url/header request | |
| 99 | +$APP->execute(); | |
| 100 | + | |
| 101 | +//echo '<pre>'.print_r($APP,true).'</pre>'; | |
| 102 | + | |
| 103 | +//Render the resulting feed response | |
| 104 | +$APP->render(); | |
| 105 | + | |
| 56 | 106 | ?> |
| 57 | 107 | \ No newline at end of file | ... | ... |
webservice/classes/atompub/KT_atom_baseDoc.inc.php
0 โ 100644
| 1 | +<?php | |
| 2 | +/** | |
| 3 | + * Framework for an Atom Publication Protocol Service | |
| 4 | + * | |
| 5 | + * KnowledgeTree Community Edition | |
| 6 | + * Document Management Made Simple | |
| 7 | + * Copyright (C) 2008, 2009 KnowledgeTree Inc. | |
| 8 | + * Portions copyright The Jam Warehouse Software (Pty) Limited | |
| 9 | + * | |
| 10 | + * This program is free software; you can redistribute it and/or modify it under | |
| 11 | + * the terms of the GNU General Public License version 3 as published by the | |
| 12 | + * Free Software Foundation. | |
| 13 | + * | |
| 14 | + * This program is distributed in the hope that it will be useful, but WITHOUT | |
| 15 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | |
| 16 | + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more | |
| 17 | + * details. | |
| 18 | + * | |
| 19 | + * You should have received a copy of the GNU General Public License | |
| 20 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. | |
| 21 | + * | |
| 22 | + * You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco, | |
| 23 | + * California 94120-7775, or email info@knowledgetree.com. | |
| 24 | + * | |
| 25 | + * The interactive user interfaces in modified source and object code versions | |
| 26 | + * of this program must display Appropriate Legal Notices, as required under | |
| 27 | + * Section 5 of the GNU General Public License version 3. | |
| 28 | + * | |
| 29 | + * In accordance with Section 7(b) of the GNU General Public License version 3, | |
| 30 | + * these Appropriate Legal Notices must retain the display of the "Powered by | |
| 31 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 32 | + * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices | |
| 33 | + * must display the words "Powered by KnowledgeTree" and retain the original | |
| 34 | + * copyright notice. | |
| 35 | + * Contributor( s): | |
| 36 | + * Mark Holtzhausen <mark@knowledgetree.com> | |
| 37 | + * | |
| 38 | + */ | |
| 39 | + | |
| 40 | +/** | |
| 41 | + * Includes | |
| 42 | + */ | |
| 43 | + | |
| 44 | +class KT_atom_baseDoc{ | |
| 45 | + const XML_ENCODING='utf-8'; | |
| 46 | + const XML_VERSION='1.0'; | |
| 47 | + | |
| 48 | + public $DOM=NULL; | |
| 49 | + | |
| 50 | + public function __construct(){ | |
| 51 | + $this->DOM=new DOMDocument(self::XML_VERSION ,self::XML_ENCODING); | |
| 52 | + } | |
| 53 | + | |
| 54 | + public function &newAttr($name=NULL){ | |
| 55 | + $node=$this->DOM->createAttribute($name); | |
| 56 | + if(func_num_args()>1){ | |
| 57 | + $val=func_get_arg(1); | |
| 58 | + $node->value=$val; | |
| 59 | + } | |
| 60 | + return $node; | |
| 61 | + } | |
| 62 | + | |
| 63 | + public function &newElement($name=NULL){ | |
| 64 | + if(func_num_args()>1){ | |
| 65 | + $val=func_get_arg(1); | |
| 66 | + $node=$this->DOM->createElement($name,$val); | |
| 67 | + }else{ | |
| 68 | + $node=$this->DOM->createElement($name); | |
| 69 | + } | |
| 70 | + return $node; | |
| 71 | + } | |
| 72 | + | |
| 73 | + public function &newCDATA($data=NULL){ | |
| 74 | + $this->DOM->createCDATASection($data); | |
| 75 | + } | |
| 76 | + | |
| 77 | + public function &newB64Stream($tagName=NULL,$tagAttrs=array(),$streamString=NULL){ | |
| 78 | + $e=$this->newElement($tagName,chunk_split(base64_encode($streamString),75)); | |
| 79 | + foreach($tagAttrs as $attr=>$val){ | |
| 80 | + $attr=$this->newAttr($attr,$val); | |
| 81 | + $e->appendChild($attr); | |
| 82 | + } | |
| 83 | + return $e; | |
| 84 | + } | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + public function formatXmlString($xml) { | |
| 89 | + // add marker linefeeds to aid the pretty-tokeniser (adds a linefeed between all tag-end boundaries) | |
| 90 | + $xml = preg_replace('/(>)(<)(\/*)/', "$1\n$2$3", $xml); | |
| 91 | + | |
| 92 | + // now indent the tags | |
| 93 | + $token = strtok($xml, "\n"); | |
| 94 | + $result = ''; // holds formatted version as it is built | |
| 95 | + $pad = 0; // initial indent | |
| 96 | + $matches = array(); // returns from preg_matches() | |
| 97 | + | |
| 98 | + // scan each line and adjust indent based on opening/closing tags | |
| 99 | + while ($token !== false) : | |
| 100 | + | |
| 101 | + // test for the various tag states | |
| 102 | + | |
| 103 | + // 1. open and closing tags on same line - no change | |
| 104 | + if (preg_match('/.+<\/\w[^>]*>$/', $token, $matches)) : | |
| 105 | + $indent=0; | |
| 106 | + // 2. closing tag - outdent now | |
| 107 | + elseif (preg_match('/^<\/\w/', $token, $matches)) : | |
| 108 | + $pad--; | |
| 109 | + // 3. opening tag - don't pad this one, only subsequent tags | |
| 110 | + elseif (preg_match('/^<\w[^>]*[^\/]>.*$/', $token, $matches)) : | |
| 111 | + $indent=1; | |
| 112 | + // 4. no indentation needed | |
| 113 | + else : | |
| 114 | + $indent = 0; | |
| 115 | + endif; | |
| 116 | + | |
| 117 | + // pad the line with the required number of leading spaces | |
| 118 | + $line = str_pad($token, strlen($token)+$pad, ' ', STR_PAD_LEFT); | |
| 119 | + $result .= $line . "\n"; // add to the cumulative result, with linefeed | |
| 120 | + $token = strtok("\n"); // get the next token | |
| 121 | + $pad += $indent; // update the pad size for subsequent lines | |
| 122 | + endwhile; | |
| 123 | + | |
| 124 | + return $result; | |
| 125 | + } | |
| 126 | +} | |
| 127 | + | |
| 128 | +?> | |
| 0 | 129 | \ No newline at end of file | ... | ... |
webservice/classes/atompub/KT_atom_responseFeed.inc.php
0 โ 100644
| 1 | +<?php | |
| 2 | +class KT_atom_responseFeed extends KT_atom_baseDoc { | |
| 3 | + | |
| 4 | + private $baseURI=NULL; | |
| 5 | + private $feed=NULL; | |
| 6 | + | |
| 7 | + | |
| 8 | + public function __construct($baseURI=NULL,$title=NULL,$link=NULL,$updated=NULL,$author=NULL,$id=NULL){ | |
| 9 | + parent::__construct(); | |
| 10 | + $this->constructHeader(); | |
| 11 | + $this->baseURI=$baseURI; | |
| 12 | + } | |
| 13 | + | |
| 14 | + private function constructHeader(){ | |
| 15 | + $feed=$this->newElement('feed'); | |
| 16 | + $feed->appendChild($this->newAttr('xmlns','http://www.w3.org/2005/Atom')); | |
| 17 | + $this->feed=&$feed; | |
| 18 | + $this->DOM->appendChild($this->feed); | |
| 19 | + } | |
| 20 | + | |
| 21 | + public function &newEntry(){ | |
| 22 | + $entry=$this->newElement('entry'); | |
| 23 | + $this->feed->appendChild($entry); | |
| 24 | + return $entry; | |
| 25 | + } | |
| 26 | + | |
| 27 | + public function &newField($name=NULL,$value=NULL,&$attachToNode=NULL){ | |
| 28 | + $field=$this->newElement($name,$value); | |
| 29 | + if(isset($attachToNode))$attachToNode->appendChild($field); | |
| 30 | + return $field; | |
| 31 | + } | |
| 32 | + | |
| 33 | + public function render(){ | |
| 34 | + return $this->formatXmlString(trim($this->DOM->saveXML())); | |
| 35 | + } | |
| 36 | + | |
| 37 | + | |
| 38 | +} | |
| 39 | + | |
| 40 | +class KT_atom_ResponseFeed_GET extends KT_atom_responseFeed{} | |
| 41 | +class KT_atom_ResponseFeed_PUT extends KT_atom_responseFeed{} | |
| 42 | +class KT_atom_ResponseFeed_POST extends KT_atom_responseFeed{} | |
| 43 | +class KT_atom_ResponseFeed_DELETE extends KT_atom_responseFeed{} | |
| 44 | + | |
| 45 | +?> | |
| 0 | 46 | \ No newline at end of file | ... | ... |
webservice/classes/atompub/KT_atom_server.inc.php
0 โ 100644
| 1 | +<?php | |
| 2 | +class KT_atom_server{ | |
| 3 | + private $services=array(); | |
| 4 | + private $errors=array(); | |
| 5 | + private $output=''; | |
| 6 | + private $queryArray=array(); | |
| 7 | + private $serviceName=''; | |
| 8 | + private $method=''; | |
| 9 | + private $workspace=''; | |
| 10 | + | |
| 11 | + | |
| 12 | + public function __construct(){ | |
| 13 | + } | |
| 14 | + | |
| 15 | + public function execute(){ | |
| 16 | + $reqMethod=trim(strtoupper($_SERVER['REQUEST_METHOD'])); | |
| 17 | + $queryArray=split('/',trim($_SERVER['QUERY_STRING'],'/')); | |
| 18 | + $rawRequest=@file_get_contents('php://input'); | |
| 19 | + | |
| 20 | + $workspace=strtolower(trim($queryArray[0])); | |
| 21 | + $serviceName=strtolower(trim($queryArray[1])); | |
| 22 | + $requestParams=array_slice($queryArray,2); | |
| 23 | + $this->queryArray=$queryArray; | |
| 24 | + $this->serviceName=$service; | |
| 25 | + $this->method=$reqMethod; | |
| 26 | + $this->workspace=$workspace; | |
| 27 | + | |
| 28 | + if($workspace=='servicedocument'){ | |
| 29 | + $this->serviceDocument(); | |
| 30 | + return; | |
| 31 | + } | |
| 32 | + | |
| 33 | + $service=$this->getRegisteredService($workspace,$serviceName); | |
| 34 | + if(is_array($service)){ | |
| 35 | + $serviceClass=$service['serviceClass']; | |
| 36 | + echo 'made it'; | |
| 37 | + $serviceObject=new $serviceClass($reqMethod,$requestParams,$rawRequest); | |
| 38 | + $this->output=$serviceObject->render(); | |
| 39 | + }else{ | |
| 40 | + $serviceObject=new KT_atom_service($requestParams,$rawRequest); | |
| 41 | + $serviceObject->setStatus(KT_atom_service::STATUS_NOT_FOUND); | |
| 42 | + $this->output=$serviceObject->render(); | |
| 43 | + } | |
| 44 | + } | |
| 45 | + | |
| 46 | + public function registerService($workspace=NULL,$serviceName=NULL,$serviceClass=NULL,$title=NULL){ | |
| 47 | + $workspace=strtolower(trim($workspace)); | |
| 48 | + $serviceName=strtolower(trim($serviceName)); | |
| 49 | + | |
| 50 | + $serviceRecord=array( | |
| 51 | + 'fileName' =>$fileName, | |
| 52 | + 'serviceClass' =>$serviceClass, | |
| 53 | + 'title' =>$title | |
| 54 | + ); | |
| 55 | + | |
| 56 | + $this->services[$workspace][$serviceName]=$serviceRecord; | |
| 57 | + } | |
| 58 | + | |
| 59 | + public function getRegisteredService($workspace,$serviceName=NULL){ | |
| 60 | + $serviceName=strtolower(trim($serviceName)); | |
| 61 | + if(isset($this->services[$workspace][$serviceName]))return $this->services[$workspace][$serviceName]; | |
| 62 | + return false; | |
| 63 | + } | |
| 64 | + | |
| 65 | + public function serviceDocument(){ | |
| 66 | + $service=new KT_atom_serviceDoc(KT_APP_BASE_URI); | |
| 67 | + | |
| 68 | + foreach($this->services as $workspace=>$collection){ | |
| 69 | + //Creating the Default Workspace for use with standard atomPub Clients | |
| 70 | + $ws=$service->newWorkspace($workspace); | |
| 71 | + | |
| 72 | + foreach($collection as $serviceName=>$serviceInstance){ | |
| 73 | + $col=$service->newCollection(KT_APP_BASE_URI.$workspace.'/'.$serviceName.'/',$serviceInstance['title'],$ws); | |
| 74 | + } | |
| 75 | + } | |
| 76 | + | |
| 77 | + $this->output=$service->getAPPdoc(); | |
| 78 | + } | |
| 79 | + | |
| 80 | + public function render(){ | |
| 81 | + ob_end_clean(); | |
| 82 | + header('Content-type: text/xml'); | |
| 83 | + echo $this->output; | |
| 84 | + } | |
| 85 | +} | |
| 86 | + | |
| 87 | +?> | |
| 0 | 88 | \ No newline at end of file | ... | ... |
webservice/classes/atompub/KT_atom_service.inc.php
0 โ 100644
| 1 | +<?php | |
| 2 | +class KT_atom_service{ | |
| 3 | + const STATUS_OK ='200 OK'; | |
| 4 | + const STATUS_NOT_FOUND ='204 No Content'; | |
| 5 | + const STATUS_NOT_ALLOWED ='204 Not Allowed'; | |
| 6 | + const STATUS_NOT_AUTHENTICATED ='204 Not Authenticated'; | |
| 7 | + const STATUS_CREATED ='201 Created'; | |
| 8 | + const STATUS_UPDATED ='200 Updated'; | |
| 9 | + const STATUS_NOT_MODIFIED ='304 Not Modified'; //For use with ETag & If-None-Match headers. | |
| 10 | + const STATUS_PRECONDITION_FAILED='412 Precondition Failed'; //Could not update document because another a newer version exist on the server than the one you are trying to update | |
| 11 | + | |
| 12 | + public $responseFeed=NULL; | |
| 13 | + public $responseHeader=NULL; | |
| 14 | + public $method=''; | |
| 15 | + public $params=''; | |
| 16 | + public $rawContent=''; | |
| 17 | + public $parsedXMLContent=''; | |
| 18 | + public $headers=array(); | |
| 19 | + | |
| 20 | + public function __construct($method,$params,$content){ | |
| 21 | + $this->method=$method; | |
| 22 | + $this->params=$params; | |
| 23 | + $this->rawContent=$content; | |
| 24 | + $this->parseHeaders(); | |
| 25 | + $this->parsedXMLContent=$this->xml2array($this->rawContent); | |
| 26 | + $this->setStatus(self::STATUS_OK); | |
| 27 | + $this->responseFeed=new KT_atom_responseFeed(KT_APP_BASE_URI); | |
| 28 | + switch(strtoupper($this->method)){ | |
| 29 | + case 'GET': $this->GET_action();break; | |
| 30 | + case 'PUT': $this->PUT_action();break; | |
| 31 | + case 'POST': $this->POST_action();break; | |
| 32 | + case 'DELETE': $this->DELETE_action();break; | |
| 33 | + default: $this->UNSUPPORTED_action();break; | |
| 34 | + } | |
| 35 | + } | |
| 36 | + | |
| 37 | + public function GET_action(){ | |
| 38 | + $this->setStatus(KT_atom_service::STATUS_OK); | |
| 39 | + } | |
| 40 | + | |
| 41 | + public function PUT_action(){ | |
| 42 | + $this->setStatus(KT_atom_service::STATUS_NOT_FOUND ); | |
| 43 | + } | |
| 44 | + | |
| 45 | + public function POST_action(){ | |
| 46 | + $this->setStatus(KT_atom_service::STATUS_NOT_FOUND ); | |
| 47 | + } | |
| 48 | + | |
| 49 | + public function DELETE_action(){ | |
| 50 | + $this->setStatus(KT_atom_service::STATUS_NOT_FOUND ); | |
| 51 | + } | |
| 52 | + | |
| 53 | + public function UNSUPPORTED_action(){ | |
| 54 | + $this->setStatus(KT_atom_service::STATUS_NOT_FOUND ); | |
| 55 | + } | |
| 56 | + | |
| 57 | + | |
| 58 | + public function render(){ | |
| 59 | + return $this->responseFeed->render(); | |
| 60 | + } | |
| 61 | + | |
| 62 | + private function xml2array($xml){ | |
| 63 | + $array=json_decode(json_encode(@simplexml_load_string($xml)),true); //TODO - XML2ARRAY Translation | |
| 64 | + return $array; | |
| 65 | + } | |
| 66 | + | |
| 67 | + private function parseHeaders(){ | |
| 68 | + $headers=null; | |
| 69 | + if(function_exists('http_get_request_headers')){ //Try to use pcre_http library if it exists | |
| 70 | + $headers=http_get_request_headers(); | |
| 71 | + }else{ | |
| 72 | + if(function_exists('apache_request_headers')){ //If not: try to use apache specific headers | |
| 73 | + $headers=apache_request_headers(); | |
| 74 | + }else{ //If not: not supported - empty headers | |
| 75 | + $headers=array(); | |
| 76 | + } | |
| 77 | + } | |
| 78 | + $this->headers=$headers; | |
| 79 | + } | |
| 80 | + | |
| 81 | + public function setStatus($status=NULL){ | |
| 82 | + header("HTTP/1.1 ".$status); | |
| 83 | + } | |
| 84 | + | |
| 85 | + private function setEtag($etagValue=NULL){ | |
| 86 | + if($etagValue)header('ETag: '.$etagValue); | |
| 87 | + } | |
| 88 | + | |
| 89 | +} | |
| 90 | +?> | |
| 0 | 91 | \ No newline at end of file | ... | ... |
ktatompub/lib/KTAPPFeed.inc.php renamed to webservice/classes/atompub/KT_atom_serviceDoc.inc.php
| ... | ... | @@ -32,7 +32,7 @@ |
| 32 | 32 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices |
| 33 | 33 | * must display the words "Powered by KnowledgeTree" and retain the original |
| 34 | 34 | * copyright notice. |
| 35 | - * Contributor( s): | |
| 35 | + * Contributor( s): | |
| 36 | 36 | * Mark Holtzhausen <mark@knowledgetree.com> |
| 37 | 37 | * |
| 38 | 38 | */ |
| ... | ... | @@ -41,75 +41,98 @@ |
| 41 | 41 | /** |
| 42 | 42 | * Includes |
| 43 | 43 | */ |
| 44 | -include_once('KTAPDoc.inc.php'); | |
| 45 | - | |
| 46 | -/* Remember to include support for feed attributes / nodes | |
| 47 | -<?xml version="1.0" encoding="utf-8"?> | |
| 48 | -<feed xmlns="http://www.w3.org/2005/Atom"> | |
| 49 | - | |
| 50 | - <title>Example Feed</title> | |
| 51 | - <link href="http://example.org/"/> | |
| 52 | - <updated>2003-12-13T18:30:02Z</updated> | |
| 53 | - <author> | |
| 54 | - <name>John Doe</name> | |
| 55 | - </author> | |
| 56 | - <id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id> | |
| 57 | - | |
| 58 | - <entry> | |
| 59 | - <title>Atom-Powered Robots Run Amok</title> | |
| 60 | - <link href="http://example.org/2003/12/13/atom03"/> | |
| 61 | - <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> | |
| 62 | - <updated>2003-12-13T18:30:02Z</updated> | |
| 63 | - <summary>Some text.</summary> | |
| 64 | - </entry> | |
| 65 | - | |
| 66 | -</feed> | |
| 67 | - | |
| 68 | -*/ | |
| 44 | +include_once('KT_atom_baseDoc.inc.php'); | |
| 69 | 45 | |
| 70 | 46 | |
| 71 | -class KTAPPFeed extends KTAPDoc { | |
| 72 | - | |
| 47 | +class KT_atom_serviceDoc extends KT_atom_baseDoc { | |
| 48 | + | |
| 73 | 49 | private $baseURI=NULL; |
| 74 | - private $feed=NULL; | |
| 75 | - | |
| 50 | + private $service=NULL; | |
| 76 | 51 | |
| 77 | - public function __construct($baseURI=NULL,$title=NULL,$link=NULL,$updated=NULL,$author=NULL,$id=NULL){ | |
| 52 | + | |
| 53 | + public function __construct($baseURI=NULL){ | |
| 78 | 54 | parent::__construct(); |
| 79 | - $this->constructHeader(); | |
| 55 | + $this->constructServiceDocumentHeaders(); | |
| 80 | 56 | $this->baseURI=$baseURI; |
| 81 | 57 | } |
| 82 | - | |
| 83 | - private function constructHeader(){ | |
| 84 | - $feed=$this->newElement('feed'); | |
| 85 | - $feed->appendChild($this->newAttr('xmlns','http://www.w3.org/2005/Atom')); | |
| 86 | - $this->feed=&$feed; | |
| 87 | - $this->DOM->appendChild($this->feed); | |
| 58 | + | |
| 59 | + private function constructServiceDocumentHeaders(){ | |
| 60 | + $service=$this->newElement('service'); | |
| 61 | + $service->appendChild($this->newAttr('xmlns','http://www.w3.org/2007/app')); | |
| 62 | + $service->appendChild($this->newAttr('xmlns:atom','http://www.w3.org/2005/Atom')); | |
| 63 | + $this->service=&$service; | |
| 64 | + $this->DOM->appendChild($this->service); | |
| 88 | 65 | } |
| 89 | - | |
| 90 | - public function &newEntry(){ | |
| 91 | - $entry=$this->newElement('entry'); | |
| 92 | - $this->feed->appendChild($entry); | |
| 93 | - return $entry; | |
| 66 | + | |
| 67 | + public function &newWorkspace($title=NULL){ | |
| 68 | + $ws=$this->newElement('workspace'); | |
| 69 | + $ws->appendChild($this->newElement('atom:title',$title)); | |
| 70 | + $this->service->appendChild($ws); | |
| 71 | + return $ws; | |
| 94 | 72 | } |
| 95 | - | |
| 96 | - public function &newField($name=NULL,$value=NULL,&$entry=NULL){ | |
| 97 | - $field=$this->newElement($name,$value); | |
| 98 | - if(isset($entry))$entry->appendChild($field); | |
| 99 | - return $field; | |
| 73 | + | |
| 74 | + public function &newCollection($url=NULL,$title=NULL,&$ws=NULL){ | |
| 75 | + $collection=$this->newElement('collection'); | |
| 76 | + $collection->appendChild($this->newAttr('href',$url)); | |
| 77 | + $collection->appendChild($this->newElement('atom:title',$title)); | |
| 78 | + if(isset($ws))$ws->appendChild($collection); | |
| 79 | + return $collection; | |
| 100 | 80 | } |
| 101 | - | |
| 81 | + | |
| 82 | + public function &newAccept($docType=NULL,&$collection=NULL){ | |
| 83 | + if($docType){ | |
| 84 | + $accept=$this->newElement('accept',$docType); | |
| 85 | + }else{ | |
| 86 | + $accept=$this->newElement('accept'); | |
| 87 | + } | |
| 88 | + if($collection)$collection->appendChild($accept); | |
| 89 | + return $accept; | |
| 90 | + } | |
| 91 | + | |
| 92 | + | |
| 102 | 93 | public function getAPPdoc(){ |
| 103 | 94 | return $this->formatXmlString(trim($this->DOM->saveXML())); |
| 104 | 95 | } |
| 96 | + | |
| 97 | +} | |
| 98 | + | |
| 99 | + | |
| 105 | 100 | |
| 106 | - public function render(){ | |
| 107 | - return $this->getAPPdoc(); | |
| 108 | - } | |
| 109 | 101 | |
| 110 | -} | |
| 111 | 102 | |
| 112 | 103 | |
| 113 | 104 | |
| 114 | 105 | |
| 106 | +/** | |
| 107 | +<?xml version="1.0" encoding="utf-8"?> | |
| 108 | +<service xmlns="http://www.w3.org/2007/app" xmlns:atom="http://www.w3.org/2005/Atom"> | |
| 109 | + <workspace> | |
| 110 | + <atom:title>Main Site</atom:title> | |
| 111 | + <collection href="http://example.org/blog/main" > | |
| 112 | + <atom:title>My Blog Entries</atom:title> | |
| 113 | + <categories href="http://example.com/cats/forMain.cats" /> | |
| 114 | + </collection> | |
| 115 | + <collection href="http://example.org/blog/pic" > | |
| 116 | + <atom:title>Pictures</atom:title> | |
| 117 | + <accept>image/png</accept> | |
| 118 | + <accept>image/jpeg</accept> | |
| 119 | + <accept>image/gif</accept> | |
| 120 | + </collection> | |
| 121 | + </workspace> | |
| 122 | + <workspace> | |
| 123 | + <atom:title>Sidebar Blog</atom:title> | |
| 124 | + <collection href="http://example.org/sidebar/list" > | |
| 125 | + <atom:title>Remaindered Links</atom:title> | |
| 126 | + <accept>application/atom+xml;type=entry</accept> | |
| 127 | + <categories fixed="yes"> | |
| 128 | + <atom:category scheme="http://example.org/extra-cats/" term="joke" /> | |
| 129 | + <atom:category scheme="http://example.org/extra-cats/" term="serious" /> | |
| 130 | + </categories> | |
| 131 | + </collection> | |
| 132 | + </workspace> | |
| 133 | +</service> | |
| 134 | + | |
| 135 | + */ | |
| 136 | + | |
| 137 | + | |
| 115 | 138 | ?> |
| 116 | 139 | \ No newline at end of file | ... | ... |