From 67af63a59daf2b61d3e88644a3133dc1bbc36dfd Mon Sep 17 00:00:00 2001 From: Conrad Vermeulen Date: Thu, 6 Dec 2007 06:08:50 +0000 Subject: [PATCH] WSA-87 "Comparison of folders when validating upload path does not work on windows correctly" Fixed. Refactored some functionality and made the path seperator consistent. Path was not being returned correctly in some cases. --- ktwebservice/KTUploadManager.inc.php | 14 +++++++++++--- ktwebservice/webservice.php | 483 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 2 files changed, 172 insertions(+), 325 deletions(-) diff --git a/ktwebservice/KTUploadManager.inc.php b/ktwebservice/KTUploadManager.inc.php index 9888b12..32dd4fd 100644 --- a/ktwebservice/KTUploadManager.inc.php +++ b/ktwebservice/KTUploadManager.inc.php @@ -64,7 +64,7 @@ class KTUploadManager function set_session($session) { $user = &$session->get_user(); - $this->userid=$user->getId(); + $this->userid=$_SESSION['userID']; $this->session = $session->get_session(); } @@ -119,7 +119,7 @@ class KTUploadManager $now=date('Y-m-d H:i:s'); $now_str=date('YmdHis'); - $newtempfile = realpath($this->temp_dir) . '/' . $this->userid . '-'. $now_str; + $newtempfile = realpath($this->temp_dir) . '/' . $_SESSION['userID'] . '-'. $now_str; if (OS_WINDOWS) { $tempfile = str_replace('/','\\',$tempfile); @@ -145,7 +145,15 @@ class KTUploadManager return $id; } global $php_errormsg; - $result = @move_uploaded_file($tempfile, $newtempfile); + if (is_uploaded_file($tempfile)) + { + $result = @move_uploaded_file($tempfile, $newtempfile); + } + else + { + $result = @rename($tempfile, $newtempfile); + } + $tmp = $php_errormsg; if ($result == false) diff --git a/ktwebservice/webservice.php b/ktwebservice/webservice.php index ef8223d..22ff192 100644 --- a/ktwebservice/webservice.php +++ b/ktwebservice/webservice.php @@ -59,7 +59,18 @@ if (defined('HAS_SEARCH_FUNCTIONALITY')) require_once(KT_DIR . '/search2/search/search.inc.php'); } -// TODO: Test getting files/metadata based on versioning works and implementation is consistent. +// TODO: allow downloading of metadata versions +// TODO: allow downloading of document versions +// TODO: chunking search results +// TODO: add basic permissions management - add permissions to folder based on user/groups +// TODO: refactor!!! download manager, split this file into a few smaller ones, etc +// TOdO: define more reason codes! +// TODO: get_folder must have a 'create' option +// TODO: redo metadata encoding +// TODO: unit tests - metadata - test return values in selectin - list/tree +// TODO: ktwsapi/php must be made compatible with v2/v3 + +// NOTE: some features are not implemented yet. most expected for v3. e.g. oem_document_no, custom_document_no, download($version)., get_metadata($version) // Status Codes as defined in the specification. @@ -67,16 +78,24 @@ define('KTWS_SUCCESS', 0); define('KTWS_ERR_INVALID_SESSION', 1); define('KTWS_ERR_AUTHENTICATION_ERROR', 2); define('KTWS_ERR_INSUFFICIENT_PERMISSIONS', 3); + define('KTWS_ERR_FILE_NOT_FOUND', 10); define('KTWS_ERR_INVALID_FILENAME', 20); + define('KTWS_ERR_INVALID_DOCUMENT', 21); define('KTWS_ERR_INVALID_FOLDER', 22); define('KTWS_ERR_INVALID_METADATA', 23); define('KTWS_ERR_INVALID_REASON', 24); define('KTWS_ERR_INVALID_DEPTH', 25); +define('KTWS_ERR_INVALID_DOCUMENT_TYPE', 26); + define('KTWS_ERR_PROBLEM', 98); define('KTWS_ERR_DB_PROBLEM', 99); +if (!defined('LATEST_WEBSERVICE_VERSION')) +{ + define('LATEST_WEBSERVICE_VERSION',2); +} function bool2str($bool) { @@ -120,7 +139,7 @@ class KTWebService var $version; var $ktapi; - + static $wsclass = 'KTWebService'; function KTWebService() { @@ -396,7 +415,6 @@ class KTWebService 'parent_id' => 'int' ); - $this->__typedef["{urn:$this->namespace}kt_metadata_selection"] = array( array( @@ -404,7 +422,6 @@ class KTWebService ) ); - $this->__typedef["{urn:$this->namespace}kt_metadata_field"] = array( 'name' => 'string', @@ -478,7 +495,6 @@ class KTWebService ); } - $this->__typedef["{urn:$this->namespace}kt_linked_document"] = array( 'document_id'=>'int', @@ -539,7 +555,6 @@ class KTWebService ); } - $this->__typedef["{urn:$this->namespace}kt_document_version_history"] = array( array( @@ -582,7 +597,6 @@ class KTWebService ) ); - $this->__typedef["{urn:$this->namespace}kt_client_policies_response"] = array( 'status_code' => 'int', @@ -593,7 +607,6 @@ class KTWebService /* methods */ if (defined('HAS_SEARCH_FUNCTIONALITY')) { - $this->__dispatch_map['search'] = array( 'in' => array('session_id' => 'string', 'search'=>'string' ,'options'=>'string'), 'out' => array('return' => "{urn:$this->namespace}kt_search_response" ), @@ -612,7 +625,6 @@ class KTWebService 'out' => array('return' => "{urn:$this->namespace}kt_response" ), ); - // logout $this->__dispatch_map['logout'] = array('in' => array('session_id' => 'string' ), @@ -625,12 +637,22 @@ class KTWebService 'out' => array('return' => "{urn:$this->namespace}kt_folder_detail"), ); + if ($this->version >=3) + { + $this->__dispatch_map['get_folder_detail']['in'] = array('session_id' => 'string', 'folder_id' => 'int', 'create'=>'boolean' ); + } + // get_folder_detail_by_name $this->__dispatch_map['get_folder_detail_by_name'] = array('in' => array('session_id' => 'string', 'folder_name' => 'string' ), 'out' => array('return' => "{urn:$this->namespace}kt_folder_detail"), ); + if ($this->version >=3) + { + $this->__dispatch_map['get_folder_detail_by_name']['in'] = array('session_id' => 'string', 'folder_id' => 'int', 'create'=>'boolean' ); + } + // get_folder_contents $this->__dispatch_map['get_folder_contents'] = array('in' => array('session_id'=>'string','folder_id'=>'int','depth'=>'int','what'=>'string'), @@ -653,7 +675,6 @@ class KTWebService ); } - // delete_folder $this->__dispatch_map['delete_folder'] = array('in' => array('session_id'=>'string','folder_id'=>'int','reason' =>'string'), @@ -708,7 +729,6 @@ class KTWebService $this->__dispatch_map['get_document_detail']['in'] = array('session_id' => 'string', 'document_id' => 'int', 'detail'=>'string' ); } - // checkin_document $this->__dispatch_map['checkin_document'] = array('in' => array('session_id'=>'string','document_id'=>'int','filename'=>'string','reason' =>'string','tempfilename' =>'string', 'major_update'=>'boolean' ), @@ -739,7 +759,6 @@ class KTWebService array('in' => array('session_id'=>'string','document_id'=>'int','filename'=>'string','reason' =>'string','tempfilename' =>'string', 'major_update'=>'boolean', 'metadata'=>"{urn:$this->namespace}kt_metadata_fieldsets",'sysdata'=>"{urn:$this->namespace}kt_sysdata" ), 'out' => array( 'return' => "{urn:$this->namespace}kt_document_detail" ) ); - } // add_document @@ -774,12 +793,8 @@ class KTWebService array('in' => array('session_id'=>'string','folder_id'=>'int','title'=>'string','filename'=>'string','documentype' =>'string','tempfilename' =>'string', 'metadata'=>"{urn:$this->namespace}kt_metadata_fieldsets",'sysdata'=>"{urn:$this->namespace}kt_sysdata" ), 'out' => array( 'return' => "{urn:$this->namespace}kt_document_detail" ) ); - - } - - // get_document_detail_by_name $this->__dispatch_map['get_document_detail_by_name'] = array('in' => array('session_id' => 'string', 'document_name' => 'string', 'what'=>'string' ), @@ -815,7 +830,6 @@ class KTWebService ); } - // checkout_small_document $this->__dispatch_map['checkout_small_document'] = array('in' => array('session_id'=>'string','document_id'=>'int','reason' =>'string','download' => 'boolean'), @@ -827,7 +841,6 @@ class KTWebService $this->__dispatch_map['checkout_small_document']['out'] = array('return' => "{urn:$this->namespace}kt_document_detail" ); } - // checkout_base64_document $this->__dispatch_map['checkout_base64_document'] = array('in' => array('session_id'=>'string','document_id'=>'int','reason' =>'string','download' => 'boolean'), @@ -840,7 +853,6 @@ class KTWebService $this->__dispatch_map['checkout_base64_document']['out'] = array('return' => "{urn:$this->namespace}kt_document_detail" ); } - // undo_document_checkout $this->__dispatch_map['undo_document_checkout'] = array('in' => array('session_id'=>'string','document_id'=>'int','reason' =>'string'), @@ -852,8 +864,6 @@ class KTWebService $this->__dispatch_map['undo_document_checkout']['out'] = array('return' => "{urn:$this->namespace}kt_document_detail" ); } - - // download_document $this->__dispatch_map['download_document'] = array('in' => array('session_id'=>'string','document_id'=>'int' ), @@ -873,13 +883,19 @@ class KTWebService 'alias' => 'download_small_document' ); + if ($this->version >= 3) + { + $this->__dispatch_map['download_document']['in'] = array('session_id'=>'string','document_id'=>'int', 'version'=>'string' ); + $this->__dispatch_map['download_small_document']['in'] = array('session_id'=>'string','document_id'=>'int', 'version'=>'string' ); + $this->__dispatch_map['download_base64_document']['in'] = array('session_id'=>'string','document_id'=>'int', 'version'=>'string' ); + } + // delete_document $this->__dispatch_map['delete_document'] = array('in' => array('session_id'=>'string','document_id'=>'int','reason'=>'string'), 'out' => array( 'return' => "{urn:$this->namespace}kt_response" ), ); - // change_document_owner $this->__dispatch_map['change_document_owner'] = array('in' => array('session_id'=>'string','document_id'=>'int','username'=>'string','reason'=>'string'), @@ -891,7 +907,6 @@ class KTWebService $this->__dispatch_map['change_document_owner']['out'] = array( 'return' => "{urn:$this->namespace}kt_document_detail" ); } - // copy_document $this->__dispatch_map['copy_document'] = array('in' => array('session_id'=>'string','document_id'=>'int','folder_id'=>'int','reason'=>'string','newtitle'=>'string','newfilename'=>'string'), @@ -931,7 +946,6 @@ class KTWebService $this->__dispatch_map['rename_document_filename']['out'] = array( 'return' => "{urn:$this->namespace}kt_document_detail" ); } - // change_document_type $this->__dispatch_map['change_document_type'] = array('in' => array('session_id'=>'string','document_id'=>'int', 'documenttype'=>'string' ), @@ -989,6 +1003,11 @@ class KTWebService 'out' => array( 'return' => "{urn:$this->namespace}kt_metadata_response" ), ); + if ($this->version >= 3) + { + $this->__dispatch_map['get_document_metadata']['in'] = array('session_id'=>'string','document_id'=>'int', 'version'=>'string'); + } + // get_document_type_metadata $this->__dispatch_map['get_document_type_metadata'] = array('in' => array('session_id'=>'string','document_type'=>'string' ), @@ -1007,17 +1026,14 @@ class KTWebService 'out' => array( 'return' => "{urn:$this->namespace}kt_document_detail" ) ); - } - //get_document_workflow_transitions $this->__dispatch_map['get_document_workflow_transitions'] = array('in' => array('session_id'=>'string','document_id'=>'int' ), 'out' => array( 'return' => "{urn:$this->namespace}kt_workflow_transitions_response" ), ); - //get_document_workflow_state $this->__dispatch_map['get_document_workflow_state'] = array('in' => array('session_id'=>'string','document_id'=>'int' ), @@ -1030,7 +1046,6 @@ class KTWebService 'out' => array( 'return' => "{urn:$this->namespace}kt_document_transaction_history_response" ), ); - // get_document_version_history $this->__dispatch_map['get_document_version_history'] = array('in' => array('session_id'=>'string','document_id'=>'int' ), @@ -1058,10 +1073,18 @@ class KTWebService if ($this->version >= 2) { $this->__dispatch_map['get_client_policies']['in'] = array('session_id'=>'string', 'client'=>'string'); - } + } - + function get() + { + static $ws = null; + if (is_null($ws)) + { + $classname = KTWebService::$wsclass; + $ws = new $classname(); + } + return $ws; } function debug($msg, $function = null, $level=0) @@ -1091,6 +1114,14 @@ class KTWebService } } + function _status($code, $message='') + { + if (PEAR::isError($message)) + { + $message = $message->getMessage(); + } + return array('status_code'=>$code, 'message'=>$message); + } /** * This is used by all exposed functions dependant on the sessionid. @@ -1111,12 +1142,7 @@ class KTWebService if ( PEAR::isError($session)) { - $response=array( - 'status_code'=>KTWS_ERR_INVALID_SESSION, - 'message'=>$session->getMessage() - ); - - return $response; + return KTWebService::_status(KTWS_ERR_INVALID_SESSION,$session); } $this->ktapi = $kt; return $kt; @@ -1130,10 +1156,7 @@ class KTWebService */ function anonymous_login($ip=null) { - $response = array( - 'status_code'=>KTWS_ERR_AUTHENTICATION_ERROR, - 'message'=>'', - ); + $response = KTWebService::_status(KTWS_ERR_AUTHENTICATION_ERROR); $kt = new KTAPI(); @@ -1165,10 +1188,7 @@ class KTWebService */ function login($username, $password, $ip=null) { - $response = array( - 'status_code'=>KTWS_ERR_AUTHENTICATION_ERROR, - 'message'=>'', - ); + $response = KTWebService::_status(KTWS_ERR_AUTHENTICATION_ERROR); $kt = new KTAPI(); @@ -1205,10 +1225,7 @@ class KTWebService return new SOAP_Value('return',"{urn:$this->namespace}kt_response", $kt); } - $response=array( - 'status_code'=>KTWS_ERR_INVALID_SESSION, - 'message'=>'' - ); + $response = KTWebService::_status(KTWS_ERR_INVALID_SESSION); $session = &$kt->get_session(); if (PEAR::isError($session)) @@ -1243,10 +1260,7 @@ class KTWebService $folder = &$kt->get_folder_by_id($folder_id); if (PEAR::isError($folder)) { - $response=array( - 'status_code'=>KTWS_ERR_INVALID_FOLDER, - 'message'=>$folder->getMessage() - ); + $response = KTWebService::_status(KTWS_ERR_INVALID_FOLDER,$folder); $this->debug("get_folder_detail - " . $folder->getMessage(), $session_id); return new SOAP_Value('return',"{urn:$this->namespace}kt_folder_detail", $response); } @@ -1277,10 +1291,7 @@ class KTWebService $folder = &$kt->get_folder_by_name($folder_name); if (PEAR::isError($folder)) { - $response=array( - 'status_code'=>KTWS_ERR_INVALID_FOLDER, - 'message'=>$folder->getMessage() - ); + $response = KTWebService::_status(KTWS_ERR_INVALID_FOLDER,$folder); $this->debug("get_folder_detail_by_name - cannot get folder $folder_name - " . $folder->getMessage(), $session_id); return new SOAP_Value('return',"{urn:$this->namespace}kt_folder_detail", $response); } @@ -1290,48 +1301,6 @@ class KTWebService $detail['message']=''; return new SOAP_Value('return',"{urn:$this->namespace}kt_folder_detail", $detail); - - } - - /** - * Encodes an array as kt_folder_item - * - * @param array $item - * @param string $name - * @return SOAP_Value of kt_folder_item - * @access private - * @static - */ - function _encode_folder_item($item, $name='item') - { - $item['id'] = (int) $item['id']; - - if (!empty($item['items'])) - { - $item['items'] = KTWebService::_encode_folder_items($item['items']); - } - - return new SOAP_Value($name,"{urn:$this->namespace}kt_folder_item", $item); - } - - /** - * Encodes an array as kt_folder_items - * - * @param array $items - * @param string $name - * @return SOAP_Value of kt_folder_items - * @access private - * @static - */ - function _encode_folder_items($items, $name='items') - { - $encoded=array(); - foreach($items as $item) - { - $encoded[] = KTWebService::_encode_folder_item($item); - } - - return new SOAP_Value($name,"{urn:$this->namespace}kt_folder_items", $encoded); } /** @@ -1343,12 +1312,17 @@ class KTWebService * @access private * @static */ - function _encode_folder_contents($contents, $name='return') + function _encode_folder_items($items) { - $contents['items'] = KTWebService::_encode_folder_items($contents['items']); - return new SOAP_Value($name,"{urn:$this->namespace}kt_folder_contents", $contents); - } + foreach($items as $key=>$item) + { + $item['id'] = (int) $item['id']; + $item['items'] = KTWebService::_encode_folder_items($item['items']); + $items[$key] = new SOAP_Value('item',"{urn:$this->namespace}kt_folder_item", $item); + } + return new SOAP_Value('items',"{urn:$this->namespace}kt_folder_items", $items); + } /** * Returns the contents of a folder. @@ -1371,10 +1345,8 @@ class KTWebService $folder = &$kt->get_folder_by_id($folder_id); if (PEAR::isError($folder)) { - $response=array( - 'status_code'=>KTWS_ERR_INVALID_FOLDER, - 'message'=>$folder->getMessage() - ); + $response = KTWebService::_status(KTWS_ERR_INVALID_FOLDER,$folder); + $this->debug("get_folder_contents - cannot get folderid $folder_id - " . $folder->getMessage(), $session_id); return new SOAP_Value('return',"{urn:$this->namespace}kt_folder_contents", $response); } @@ -1387,10 +1359,10 @@ class KTWebService 'folder_id' => $folder_id+0, 'folder_name'=>$folder->get_folder_name(), 'full_path'=>$folder->get_full_path(), - 'items'=>$listing + 'items'=>KTWebService::_encode_folder_items($listing) ); - return KTWebService::_encode_folder_contents($contents); + return new SOAP_Value($name,"{urn:$this->namespace}kt_folder_contents", $contents); } /** @@ -1414,10 +1386,8 @@ class KTWebService $folder = &$kt->get_folder_by_id($folder_id); if (PEAR::isError($folder)) { - $response=array( - 'status_code'=>KTWS_ERR_INVALID_FOLDER, - 'message'=>$folder->getMessage() - ); + $response = KTWebService::_status(KTWS_ERR_INVALID_FOLDER,$folder); + $this->debug("create_folder - cannot get folderid $folder_id - " . $folder->getMessage(), $session_id); return new SOAP_Value('return',"{urn:$this->namespace}kt_folder_detail", $response); @@ -1426,10 +1396,7 @@ class KTWebService $newfolder = &$folder->add_folder($folder_name); if (PEAR::isError($newfolder)) { - $response=array( - 'status_code'=>KTWS_ERR_INVALID_FOLDER, - 'message'=>$newfolder->getMessage() - ); + $response = KTWebService::_status(KTWS_ERR_INVALID_FOLDER,$newfolder); $this->debug("create_folder - cannot create folder $folder_name - " . $folder->getMessage(), $session_id); return new SOAP_Value('return',"{urn:$this->namespace}kt_folder_detail", $response); @@ -1459,10 +1426,7 @@ class KTWebService return new SOAP_Value('return',"{urn:$this->namespace}kt_response", $kt); } - $response=array( - 'status_code'=>KTWS_ERR_INVALID_FOLDER, - 'message'=>'' - ); + $response = KTWebService::_status(KTWS_ERR_INVALID_FOLDER); $folder = &$kt->get_folder_by_id($folder_id); if (PEAR::isError($folder)) @@ -1503,10 +1467,7 @@ class KTWebService return new SOAP_Value('return',"{urn:$this->namespace}kt_response", $kt); } - $response=array( - 'status_code'=>KTWS_ERR_INVALID_FOLDER, - 'message'=>'' - ); + $response = KTWebService::_status(KTWS_ERR_INVALID_FOLDER); $folder = &$kt->get_folder_by_id($folder_id); if (PEAR::isError($folder)) @@ -1548,10 +1509,7 @@ class KTWebService return new SOAP_Value('return',"{urn:$this->namespace}kt_response", $kt); } - $response=array( - 'status_code'=>KTWS_ERR_INVALID_FOLDER, - 'message'=>'' - ); + $response = KTWebService::_status(KTWS_ERR_INVALID_FOLDER); $src_folder = &$kt->get_folder_by_id($source_id); if (PEAR::isError($src_folder)) @@ -1603,10 +1561,7 @@ class KTWebService return new SOAP_Value('return',"{urn:$this->namespace}kt_response", $kt); } - $response=array( - 'status_code'=>KTWS_ERR_INVALID_FOLDER, - 'message'=>'' - ); + $response = KTWebService::_status(KTWS_ERR_INVALID_FOLDER); $src_folder = &$kt->get_folder_by_id($source_id); if (PEAR::isError($src_folder)) @@ -1653,10 +1608,7 @@ class KTWebService return new SOAP_Value('return',"{urn:$this->namespace}kt_document_types_response", $kt); } - $response=array( - 'status_code'=>KTWS_ERR_PROBLEM, - 'message'=>'' - ); + $response = KTWebService::_status(KTWS_ERR_PROBLEM); $result = $kt->get_documenttypes(); if (PEAR::isError($result)) @@ -1683,10 +1635,7 @@ class KTWebService return new SOAP_Value('return',"{urn:$this->namespace}kt_document_types_response", $kt); } - $response=array( - 'status_code'=>KTWS_ERR_PROBLEM, - 'message'=>'' - ); + $response = KTWebService::_status(KTWS_ERR_PROBLEM); $result = $kt->get_document_link_types(); if (PEAR::isError($result)) @@ -1723,10 +1672,8 @@ class KTWebService $document = $kt->get_document_by_id($document_id); if (PEAR::isError($document)) { - $response=array( - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, - 'message'=>$document->getMessage() - ); + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT,$document); + $this->debug("get_document_detail - cannot get documentid $document_id - " . $document->getMessage(), $session_id); return new SOAP_Value('return',"{urn:$this->namespace}kt_document_detail", $response); @@ -1837,10 +1784,9 @@ class KTWebService function get_document_detail_by_name($session_id, $folder_id, $document_name, $what='T', $detail='') { $this->debug("get_document_detail_by_name('$session_id','$document_name','$what','$detail')"); - $response=array( - 'status_code'=>KTWS_ERR_INVALID_FOLDER, - 'message'=>'' - ); + + $response = KTWebService::_status(KTWS_ERR_INVALID_FOLDER); + if (empty($document_name)) { $response['message'] = 'Document_name is empty.'; @@ -1891,8 +1837,6 @@ class KTWebService return $this->get_document_detail($session_id, $document->documentid, $detail); } - - /** * Adds a document to the repository. * @@ -1918,10 +1862,7 @@ class KTWebService $upload_manager = new KTUploadManager(); if (!$upload_manager->is_valid_temporary_file($tempfilename)) { - $response=array( - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, - 'message'=>"Invalid temporary file: $tempfilename. Not compatible with $upload_manager->temp_dir." - ); + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT,"Invalid temporary file: $tempfilename. Not compatible with $upload_manager->temp_dir."); $this->debug("add_document - Invalid temporary file: $tempfilename. Not compatible with $upload_manager->temp_dir.", $session_id); @@ -1931,10 +1872,7 @@ class KTWebService $folder = &$kt->get_folder_by_id($folder_id); if (PEAR::isError($folder)) { - $response=array( - 'status_code'=>KTWS_ERR_INVALID_FOLDER, - 'message'=>$folder->getMessage() - ); + $response = KTWebService::_status(KTWS_ERR_INVALID_FOLDER,$folder); $this->debug("add_document - cannot get folder $folder_id - " . $folder->getMessage(), $session_id); @@ -1944,13 +1882,8 @@ class KTWebService $document = &$folder->add_document($title, $filename, $documenttype, $tempfilename); if (PEAR::isError($document)) { - $response=array( - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, - 'message'=>$document->getMessage() - ); - + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT,$document); $this->debug("add_document - cannot add document - " . $document->getMessage(), $session_id); - return new SOAP_Value('return',"{urn:$this->namespace}kt_document_detail", $response); } @@ -2029,8 +1962,6 @@ class KTWebService return $update_result; } - - /** * Adds a document to the repository. * @@ -2054,10 +1985,7 @@ class KTWebService $folder = &$kt->get_folder_by_id($folder_id); if (PEAR::isError($folder)) { - $response=array( - 'status_code'=>KTWS_ERR_INVALID_FOLDER, - 'message'=>$folder->getMessage() - ); + $response = KTWebService::_status(KTWS_ERR_INVALID_FOLDER,$folder); $this->debug("add_small_document - cannot get folderid $folder_id - " . $folder->getMessage(), $session_id); return new SOAP_Value('return',"{urn:$this->namespace}kt_document_detail", $response); } @@ -2067,26 +1995,21 @@ class KTWebService if (PEAR::isError($tempfilename)) { $reason = $tempfilename->getMessage(); - $response=array( - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, - 'message'=>'Cannot write to temp file: ' + $tempfilename . ". Reason: $reason" - ); + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT,'Cannot write to temp file: ' + $tempfilename . ". Reason: $reason"); $this->debug("add_small_document - cannot write $tempfilename. Reason: $reason", $session_id); return new SOAP_Value('return',"{urn:$this->namespace}kt_document_detail", $response); } // simulate the upload - $upload_manager->uploaded($filename,$tempfilename, 'A'); + $tempfilename = $upload_manager->uploaded($filename,$tempfilename, 'A'); // add the document $document = &$folder->add_document($title, $filename, $documenttype, $tempfilename); if (PEAR::isError($document)) { - $response=array( - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, - 'message'=>$document->getMessage() - ); + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT,$document); + $this->debug("add_small_document - cannot add document - " . $document->getMessage(), $session_id); return new SOAP_Value('return',"{urn:$this->namespace}kt_document_detail", $response); } @@ -2118,12 +2041,9 @@ class KTWebService return new SOAP_Value('return',"{urn:$this->namespace}kt_document_detail", $kt); } - $response=array( - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, - 'message'=>'', - ); + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); - // we need to add some security to ensure that people don't frig the checkin process to access restricted files. + // we need to add some security to ensure that people don't frig the checkin process to access restricted files. // possibly should change 'tempfilename' to be a hash or id of some sort if this is troublesome. $upload_manager = new KTUploadManager(); if (!$upload_manager->is_valid_temporary_file($tempfilename)) @@ -2155,9 +2075,8 @@ class KTWebService return $this->get_document_detail($session_id, $document_id); } - - function checkin_small_document_with_metadata($session_id, $document_id, $filename, $reason, $base64, $major_update, $metadata, $sysdata) - { + function checkin_small_document_with_metadata($session_id, $document_id, $filename, $reason, $base64, $major_update, $metadata, $sysdata) + { $add_result = $this->checkin_small_document($session_id, $document_id, $filename, $reason, $base64, $major_update); $status_code = $add_result->value['status_code']; @@ -2187,10 +2106,10 @@ class KTWebService } return $update_result; - } + } - function checkin_document_with_metadata($session_id, $document_id, $filename, $reason, $tempfilename, $major_update, $metadata, $sysdata) - { + function checkin_document_with_metadata($session_id, $document_id, $filename, $reason, $tempfilename, $major_update, $metadata, $sysdata) + { $add_result = $this->checkin_document($session_id, $document_id, $filename, $reason, $tempfilename, $major_update); $status_code = $add_result->value['status_code']; @@ -2220,7 +2139,7 @@ class KTWebService } return $update_result; - } + } /** @@ -2243,27 +2162,21 @@ class KTWebService return new SOAP_Value('return',"{urn:$this->namespace}kt_document_detail", $kt); } - $response=array( - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, - 'message'=>'', - ); + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); $upload_manager = new KTUploadManager(); $tempfilename = $upload_manager->store_base64_file($base64, 'su_'); if (PEAR::isError($tempfilename)) { $reason = $tempfilename->getMessage(); - $response=array( - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, - 'message'=>'Cannot write to temp file: ' + $tempfilename . ". Reason: $reason" - ); + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT,'Cannot write to temp file: ' + $tempfilename . ". Reason: $reason"); $this->debug("checkin_small_document - cannot write $tempfilename. Reason: $reason", $session_id); return new SOAP_Value('return',"{urn:$this->namespace}kt_document_detail", $response); } // simulate the upload - $upload_manager->uploaded($filename,$tempfilename, 'C'); + $tempfilename = $upload_manager->uploaded($filename,$tempfilename, 'C'); $document = &$kt->get_document_by_id($document_id); if (PEAR::isError($document)) @@ -2302,10 +2215,7 @@ class KTWebService return new SOAP_Value('return',"{urn:$this->namespace}kt_response", $kt); } - $response=array( - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, - 'message'=>'' - ); + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); $document = &$kt->get_document_by_id($document_id); if (PEAR::isError($document)) @@ -2367,10 +2277,7 @@ class KTWebService return new SOAP_Value('return',"{urn:$this->namespace}kt_response", $kt); } - $response=array( - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, - 'message'=>'' - ); + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); $document = &$kt->get_document_by_id($document_id); if (PEAR::isError($document)) @@ -2441,10 +2348,7 @@ class KTWebService return new SOAP_Value('return',"{urn:$this->namespace}kt_response", $kt); } - $response=array( - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, - 'message'=>'' - ); + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); $document = &$kt->get_document_by_id($document_id); if (PEAR::isError($document)) @@ -2482,7 +2386,7 @@ class KTWebService * @return kt_response. status_code can be KTWS_ERR_INVALID_SESSION, KTWS_ERR_INVALID_DOCUMENT or KTWS_SUCCESS */ - function download_document($session_id, $document_id) + function download_document($session_id, $document_id, $version=null) { $this->debug("download_document('$session_id',$document_id)"); @@ -2492,10 +2396,7 @@ class KTWebService return new SOAP_Value('return',"{urn:$this->namespace}kt_response", $kt); } - $response=array( - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, - 'message'=>'' - ); + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); $document = &$kt->get_document_by_id($document_id); if (PEAR::isError($document)) @@ -2534,7 +2435,7 @@ class KTWebService * @return kt_response. status_code can be KTWS_ERR_INVALID_SESSION, KTWS_ERR_INVALID_DOCUMENT or KTWS_SUCCESS */ - function download_small_document($session_id, $document_id) + function download_small_document($session_id, $document_id, $version=null) { $this->debug("download_small_document('$session_id',$document_id)"); @@ -2544,10 +2445,7 @@ class KTWebService return new SOAP_Value('return',"{urn:$this->namespace}kt_response", $kt); } - $response=array( - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, - 'message'=>'' - ); + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); $document = &$kt->get_document_by_id($document_id); if (PEAR::isError($document)) @@ -2606,10 +2504,8 @@ class KTWebService { return new SOAP_Value('return',"{urn:$this->namespace}kt_response", $kt); } - $response=array( - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, - 'message'=>'' - ); + + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); $document = &$kt->get_document_by_id($document_id); if (PEAR::isError($document)) @@ -2656,10 +2552,8 @@ class KTWebService { return new SOAP_Value('return',"{urn:$this->namespace}$responseType", $kt); } - $response=array( - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, - 'message'=>'' - ); + + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); $document = &$kt->get_document_by_id($document_id); if (PEAR::isError($document)) @@ -2673,6 +2567,7 @@ class KTWebService $result = $document->change_document_type($documenttype); if (PEAR::isError($result)) { + $response['status_code'] = KTWS_ERR_INVALID_DOCUMENT_TYPE; $response['message'] = $result->getMessage(); $this->debug("change_document_type - cannot change type - " . $result->getMessage(), $session_id); @@ -2708,10 +2603,8 @@ class KTWebService { return new SOAP_Value('return',"{urn:$this->namespace}kt_response", $kt); } - $response=array( - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, - 'message'=>'' - ); + + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); $document = &$kt->get_document_by_id($document_id); if (PEAR::isError($document)) @@ -2766,10 +2659,8 @@ class KTWebService { return new SOAP_Value('return',"{urn:$this->namespace}kt_response", $kt); } - $response=array( - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, - 'message'=>'' - ); + + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); $document = &$kt->get_document_by_id($document_id); if (PEAR::isError($document)) @@ -2823,10 +2714,8 @@ class KTWebService { return new SOAP_Value('return',"{urn:$this->namespace}$responseType", $kt); } - $response=array( - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, - 'message'=>'' - ); + + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); $document = &$kt->get_document_by_id($document_id); if (PEAR::isError($document)) @@ -2876,10 +2765,8 @@ class KTWebService { return new SOAP_Value('return',"{urn:$this->namespace}$responseType", $kt); } - $response=array( - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, - 'message'=>'' - ); + + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); $document = &$kt->get_document_by_id($document_id); if (PEAR::isError($document)) @@ -2902,7 +2789,6 @@ class KTWebService return $this->get_document_detail($session_id, $document_id); } - return new SOAP_Value('return',"{urn:$this->namespace}$responseType", $response); } @@ -2932,10 +2818,7 @@ class KTWebService return new SOAP_Value('return',"{urn:$this->namespace}$responseType", $kt); } - $response=array( - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, - 'message'=>'' - ); + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); $document = &$kt->get_document_by_id($document_id); if (PEAR::isError($document)) @@ -2985,10 +2868,8 @@ class KTWebService { return new SOAP_Value('return',"{urn:$this->namespace}$responseType", $kt); } - $response=array( - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, - 'message'=>'' - ); + + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); $document = &$kt->get_document_by_id($document_id); if (PEAR::isError($document)) @@ -3035,10 +2916,8 @@ class KTWebService { return new SOAP_Value('return',"{urn:$this->namespace}$responseType", $kt); } - $response=array( - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, - 'message'=>'' - ); + + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); $document = &$kt->get_document_by_id($document_id); if (PEAR::isError($document)) @@ -3088,10 +2967,8 @@ class KTWebService { return new SOAP_Value('return',"{urn:$this->namespace}$responseType", $kt); } - $response=array( - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, - 'message'=>'' - ); + + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); $document = &$kt->get_document_by_id($document_id); if (PEAR::isError($document)) @@ -3127,9 +3004,8 @@ class KTWebService * @access private * @static */ - function _encode_metadata_fields($fields, $name='fields') + function _encode_metadata_fields($fields) { - foreach($fields as $key=>$field) { $selection = $field['selection']; @@ -3144,17 +3020,17 @@ class KTWebService { $sitem['parent_id'] = (int) $sitem['parent_id']; } - $selection[$skey] = new SOAP_Value($name,"{urn:$this->namespace}kt_metadata_selection_item", $sitem); + $selection[$skey] = new SOAP_Value('item',"{urn:$this->namespace}kt_metadata_selection_item", $sitem); } - $field['selection'] = new SOAP_Value($name,"{urn:$this->namespace}kt_metadata_selection", $selection); + $field['selection'] = new SOAP_Value('selection',"{urn:$this->namespace}kt_metadata_selection", $selection); $field['required'] = is_null($field['required'])?false:(bool) $field['required']; - $fields[$key] = new SOAP_Value($name,"{urn:$this->namespace}kt_metadata_field", $field); + $fields[$key] = new SOAP_Value('field',"{urn:$this->namespace}kt_metadata_field", $field); } - return new SOAP_Value($name,"{urn:$this->namespace}kt_metadata_fields", $fields); + return new SOAP_Value('fields',"{urn:$this->namespace}kt_metadata_fields", $fields); } /** @@ -3219,7 +3095,6 @@ class KTWebService } return new SOAP_Value($name,"{urn:$this->namespace}kt_metadata_response", $response); - } /** @@ -3229,7 +3104,6 @@ class KTWebService * @param string $document_type * @return kt_metadata_response */ - function get_document_type_metadata($session_id, $document_type) { $this->debug("get_document_type_metadata('$session_id','$document_type')"); @@ -3238,10 +3112,8 @@ class KTWebService { return new SOAP_Value('return',"{urn:$this->namespace}kt_metadata_response", $kt); } - $response=array( - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, - 'message'=>'' - ); + + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); $metadata = $kt->get_document_type_metadata($document_type); if (PEAR::isError($metadata)) @@ -3298,10 +3170,8 @@ class KTWebService { return new SOAP_Value('return',"{urn:$this->namespace}kt_metadata_response", $kt); } - $response=array( - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, - 'message'=>'' - ); + + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); $document = &$kt->get_document_by_id($document_id); if (PEAR::isError($document)) @@ -3366,10 +3236,8 @@ class KTWebService { return new SOAP_Value('return',"{urn:$this->namespace}$responseType", $kt); } - $response=array( - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, - 'message'=>'' - ); + + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); $document = &$kt->get_document_by_id($document_id); if (PEAR::isError($document)) @@ -3387,7 +3255,6 @@ class KTWebService return new SOAP_Value('return',"{urn:$this->namespace}$responseType", $response); } - if ($this->version >= 2) { $result = $document->update_sysdata($sysdata); @@ -3398,13 +3265,11 @@ class KTWebService return new SOAP_Value('return',"{urn:$this->namespace}$responseType", $response); } - return $this->get_document_detail($session_id, $document_id, 'M'); } $response['status_code'] = KTWS_SUCCESS; return new SOAP_Value('return',"{urn:$this->namespace}$responseType", $response); - } /** @@ -3422,10 +3287,7 @@ class KTWebService { return new SOAP_Value('return',"{urn:$this->namespace}kt_workflow_transitions_response", $kt); } - $response=array( - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, - 'message'=>'' - ); + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); $document = &$kt->get_document_by_id($document_id); if (PEAR::isError($document)) @@ -3471,10 +3333,7 @@ class KTWebService { return new SOAP_Value('return',"{urn:$this->namespace}kt_response", $kt); } - $response=array( - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, - 'message'=>'' - ); + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); $document = &$kt->get_document_by_id($document_id); if (PEAR::isError($document)) @@ -3514,7 +3373,6 @@ class KTWebService { $history[$key] = new SOAP_Value('item',"{urn:$this->namespace}kt_document_transaction_history_item", $item); } - return new SOAP_Value($name,"{urn:$this->namespace}kt_document_transaction_history", $history); } @@ -3533,10 +3391,7 @@ class KTWebService { return new SOAP_Value('return',"{urn:$this->namespace}kt_document_transaction_history_response", $kt); } - $response=array( - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, - 'message'=>'' - ); + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); $document = &$kt->get_document_by_id($document_id); if (PEAR::isError($document)) @@ -3576,7 +3431,6 @@ class KTWebService { $history[$key] = new SOAP_Value('item',"{urn:$this->namespace}kt_document_version_history_item", $item); } - return new SOAP_Value($name,"{urn:$this->namespace}kt_document_version_history", $history); } @@ -3596,10 +3450,7 @@ class KTWebService { return new SOAP_Value('return',"{urn:$this->namespace}kt_document_version_history_response", $kt); } - $response=array( - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, - 'message'=>'' - ); + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); $document = &$kt->get_document_by_id($document_id); if (PEAR::isError($document)) @@ -3624,7 +3475,6 @@ class KTWebService return new SOAP_Value('return',"{urn:$this->namespace}kt_document_version_history_response", $response); } - /** * Returns a list of linked documents * @@ -3678,7 +3528,6 @@ class KTWebService return new SOAP_Value($name,"{urn:$this->namespace}kt_linked_documents", $links); } - /** * Removes a link between documents * @@ -3696,10 +3545,7 @@ class KTWebService { return new SOAP_Value('return',"{urn:$this->namespace}kt_response", $kt); } - $response=array( - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, - 'message'=>'' - ); + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); $document = &$kt->get_document_by_id($parent_document_id); if (PEAR::isError($document)) @@ -3748,10 +3594,7 @@ class KTWebService { return new SOAP_Value('return',"{urn:$this->namespace}kt_response", $kt); } - $response=array( - 'status_code'=>KTWS_ERR_INVALID_DOCUMENT, - 'message'=>'' - ); + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT); $document = &$kt->get_document_by_id($parent_document_id); if (PEAR::isError($document)) @@ -3846,7 +3689,6 @@ class KTWebService ), ); - $response['policies'] = $this->_encode_client_policies($policies); $response['message'] = 'Knowledgetree client policies retrieval succeeded.'; $response['status_code'] = KTWS_SUCCESS; @@ -3871,11 +3713,9 @@ class KTWebService { return new SOAP_Value('return',"{urn:$this->namespace}kt_search_response", $kt); } - $response=array( - 'status_code'=>KTWS_ERR_PROBLEM, - 'message'=>'', - 'hits'=>array() - ); + + $response = KTWebService::_status(KTWS_ERR_PROBLEM); + $response['hits'] = array(); if (!defined('HAS_SEARCH_FUNCTIONALITY')) { @@ -3904,7 +3744,6 @@ class KTWebService return new SOAP_Value('return',"{urn:$this->namespace}kt_search_response", $response); } - /** * The main json request processing function. * @@ -4066,7 +3905,7 @@ class KTWebService } -$webservice = new KTWebService(); +$webservice = KTWebService::get(); $webservice->run(); ?> \ No newline at end of file -- libgit2 0.21.4