Commit 1ed9ca498f9fa9eb51c648c32513feaf7843a20e
1 parent
9f554638
Updated the file upload to allow a unique file id to identify the upload
PT: 1940148 Committed by: Megan Watson
Showing
7 changed files
with
99 additions
and
19 deletions
config/dmsDefaults.php
| @@ -7,7 +7,7 @@ | @@ -7,7 +7,7 @@ | ||
| 7 | * KnowledgeTree Community Edition | 7 | * KnowledgeTree Community Edition |
| 8 | * Document Management Made Simple | 8 | * Document Management Made Simple |
| 9 | * Copyright (C) 2008, 2009 KnowledgeTree Inc. | 9 | * Copyright (C) 2008, 2009 KnowledgeTree Inc. |
| 10 | - * | 10 | + * |
| 11 | * | 11 | * |
| 12 | * This program is free software; you can redistribute it and/or modify it under | 12 | * This program is free software; you can redistribute it and/or modify it under |
| 13 | * the terms of the GNU General Public License version 3 as published by the | 13 | * the terms of the GNU General Public License version 3 as published by the |
| @@ -47,7 +47,7 @@ if (defined('DMS_DEFAULTS_INCLUDED')) | @@ -47,7 +47,7 @@ if (defined('DMS_DEFAULTS_INCLUDED')) | ||
| 47 | } | 47 | } |
| 48 | 48 | ||
| 49 | define('DMS_DEFAULTS_INCLUDED',1); | 49 | define('DMS_DEFAULTS_INCLUDED',1); |
| 50 | -define('LATEST_WEBSERVICE_VERSION',2); | 50 | +define('LATEST_WEBSERVICE_VERSION',3); |
| 51 | 51 | ||
| 52 | 52 | ||
| 53 | if (function_exists('apd_set_pprof_trace')) { | 53 | if (function_exists('apd_set_pprof_trace')) { |
| @@ -483,7 +483,7 @@ class KTInit { | @@ -483,7 +483,7 @@ class KTInit { | ||
| 483 | function initConfig() { | 483 | function initConfig() { |
| 484 | global $default; | 484 | global $default; |
| 485 | $oKTConfig = KTConfig::getSingleton(); | 485 | $oKTConfig = KTConfig::getSingleton(); |
| 486 | - | 486 | + |
| 487 | // Override the config setting - KT_DIR is resolved on page load | 487 | // Override the config setting - KT_DIR is resolved on page load |
| 488 | $oKTConfig->setdefaultns('KnowledgeTree', 'fileSystemRoot', KT_DIR); | 488 | $oKTConfig->setdefaultns('KnowledgeTree', 'fileSystemRoot', KT_DIR); |
| 489 | 489 |
ktwebservice/KTUploadManager.inc.php
| @@ -9,7 +9,7 @@ | @@ -9,7 +9,7 @@ | ||
| 9 | * KnowledgeTree Community Edition | 9 | * KnowledgeTree Community Edition |
| 10 | * Document Management Made Simple | 10 | * Document Management Made Simple |
| 11 | * Copyright (C) 2008, 2009 KnowledgeTree Inc. | 11 | * Copyright (C) 2008, 2009 KnowledgeTree Inc. |
| 12 | - * | 12 | + * |
| 13 | * | 13 | * |
| 14 | * This program is free software; you can redistribute it and/or modify it under | 14 | * This program is free software; you can redistribute it and/or modify it under |
| 15 | * the terms of the GNU General Public License version 3 as published by the | 15 | * the terms of the GNU General Public License version 3 as published by the |
| @@ -110,7 +110,7 @@ class KTUploadManager | @@ -110,7 +110,7 @@ class KTUploadManager | ||
| 110 | return ($tempdir == $this->temp_dir); | 110 | return ($tempdir == $this->temp_dir); |
| 111 | */ | 111 | */ |
| 112 | } | 112 | } |
| 113 | - | 113 | + |
| 114 | function store_base64_file($base64, $prefix= 'sa_') | 114 | function store_base64_file($base64, $prefix= 'sa_') |
| 115 | { | 115 | { |
| 116 | $tempfilename = $this->get_temp_filename($prefix); | 116 | $tempfilename = $this->get_temp_filename($prefix); |
| @@ -134,9 +134,9 @@ class KTUploadManager | @@ -134,9 +134,9 @@ class KTUploadManager | ||
| 134 | 134 | ||
| 135 | return $tempfilename; | 135 | return $tempfilename; |
| 136 | } | 136 | } |
| 137 | - | 137 | + |
| 138 | /** | 138 | /** |
| 139 | - * | 139 | + * |
| 140 | * @param string $content file content NOT base64 encoded (may be string, may be binary) | 140 | * @param string $content file content NOT base64 encoded (may be string, may be binary) |
| 141 | * @param string $prefix [optional] | 141 | * @param string $prefix [optional] |
| 142 | * @return $tempfilename the name of the temporary file created | 142 | * @return $tempfilename the name of the temporary file created |
| @@ -172,7 +172,7 @@ class KTUploadManager | @@ -172,7 +172,7 @@ class KTUploadManager | ||
| 172 | * @param string $tempfile | 172 | * @param string $tempfile |
| 173 | * @param string $action | 173 | * @param string $action |
| 174 | */ | 174 | */ |
| 175 | - function uploaded($filename, $tempfile, $action, $relatedid = null) | 175 | + function uploaded($filename, $tempfile, $action, $unique_file_id = null) |
| 176 | { | 176 | { |
| 177 | $filename=basename($filename); | 177 | $filename=basename($filename); |
| 178 | $now=date('Y-m-d H:i:s'); | 178 | $now=date('Y-m-d H:i:s'); |
| @@ -190,6 +190,11 @@ class KTUploadManager | @@ -190,6 +190,11 @@ class KTUploadManager | ||
| 190 | $newtempfile = str_replace('\\','/',$newtempfile); | 190 | $newtempfile = str_replace('\\','/',$newtempfile); |
| 191 | } | 191 | } |
| 192 | 192 | ||
| 193 | + if(!empty($unique_file_id) && !$this->check_unique_id($unique_file_id)){ | ||
| 194 | + // If the unique_file_id is not unique then return an error | ||
| 195 | + return PEAR::raiseError(_kt('Unique file id already exists.')); | ||
| 196 | + } | ||
| 197 | + | ||
| 193 | DBUtil::startTransaction(); | 198 | DBUtil::startTransaction(); |
| 194 | $id = DBUtil::autoInsert('uploaded_files', | 199 | $id = DBUtil::autoInsert('uploaded_files', |
| 195 | array( | 200 | array( |
| @@ -198,7 +203,7 @@ class KTUploadManager | @@ -198,7 +203,7 @@ class KTUploadManager | ||
| 198 | 'userid'=>$_SESSION['userID'], | 203 | 'userid'=>$_SESSION['userID'], |
| 199 | 'uploaddate'=>$now, | 204 | 'uploaddate'=>$now, |
| 200 | 'action'=>$action, | 205 | 'action'=>$action, |
| 201 | - // 'related_uploadid'=>$relatedid | 206 | + 'unique_file_id'=>$unique_file_id |
| 202 | ), | 207 | ), |
| 203 | array('noid'=>true) | 208 | array('noid'=>true) |
| 204 | ); | 209 | ); |
| @@ -232,6 +237,42 @@ class KTUploadManager | @@ -232,6 +237,42 @@ class KTUploadManager | ||
| 232 | } | 237 | } |
| 233 | 238 | ||
| 234 | /** | 239 | /** |
| 240 | + * Ensure the unique file id is unique for the uploaded file | ||
| 241 | + * | ||
| 242 | + * @param string $unique_file_id | ||
| 243 | + * @return bool | ||
| 244 | + */ | ||
| 245 | + private function check_unique_id($unique_file_id) | ||
| 246 | + { | ||
| 247 | + $unique = addslashes($unique_file_id); | ||
| 248 | + $sql = "SELECT tempfilename FROM uploaded_files WHERE unique_file_id = '$unique'"; | ||
| 249 | + $result = DBUtil::getResultArray($sql); | ||
| 250 | + | ||
| 251 | + if(PEAR::isError($result) || empty($result)){ | ||
| 252 | + return true; | ||
| 253 | + } | ||
| 254 | + | ||
| 255 | + return false; | ||
| 256 | + } | ||
| 257 | + | ||
| 258 | + function get_tempfile_from_unique_id($unique_file_id) | ||
| 259 | + { | ||
| 260 | + $unique = addslashes($unique_file_id); | ||
| 261 | + $sql = "SELECT tempfilename FROM uploaded_files WHERE unique_file_id = '$unique'"; | ||
| 262 | + $result = DBUtil::getResultArray($sql); | ||
| 263 | + | ||
| 264 | + if(PEAR::isError($result)){ | ||
| 265 | + return $result; | ||
| 266 | + } | ||
| 267 | + | ||
| 268 | + if(empty($result)){ | ||
| 269 | + PEAR::raiseError(_kt('No file has been uploaded with the unique file id: ').$unique_file_id); | ||
| 270 | + } | ||
| 271 | + | ||
| 272 | + return $result[0]['tempfilename']; | ||
| 273 | + } | ||
| 274 | + | ||
| 275 | + /** | ||
| 235 | * This is a list of all all managed files. | 276 | * This is a list of all all managed files. |
| 236 | * | 277 | * |
| 237 | * @param string $action | 278 | * @param string $action |
ktwebservice/upload.php
| @@ -9,7 +9,7 @@ | @@ -9,7 +9,7 @@ | ||
| 9 | * KnowledgeTree Community Edition | 9 | * KnowledgeTree Community Edition |
| 10 | * Document Management Made Simple | 10 | * Document Management Made Simple |
| 11 | * Copyright (C) 2008, 2009 KnowledgeTree Inc. | 11 | * Copyright (C) 2008, 2009 KnowledgeTree Inc. |
| 12 | - * | 12 | + * |
| 13 | * | 13 | * |
| 14 | * This program is free software; you can redistribute it and/or modify it under | 14 | * This program is free software; you can redistribute it and/or modify it under |
| 15 | * the terms of the GNU General Public License version 3 as published by the | 15 | * the terms of the GNU General Public License version 3 as published by the |
| @@ -70,6 +70,11 @@ if (!array_key_exists('action',$_POST)) | @@ -70,6 +70,11 @@ if (!array_key_exists('action',$_POST)) | ||
| 70 | respond(2, 'Action not specified.'); | 70 | respond(2, 'Action not specified.'); |
| 71 | } | 71 | } |
| 72 | 72 | ||
| 73 | +$unique_file_id = false; | ||
| 74 | +if(array_key_exists('unique_file_id', $_POST)){ | ||
| 75 | + $unique_file_id = $_POST['unique_file_id']; | ||
| 76 | +} | ||
| 77 | + | ||
| 73 | $action = $_POST['action']; | 78 | $action = $_POST['action']; |
| 74 | if (!in_array($action,array('C','A'))) | 79 | if (!in_array($action,array('C','A'))) |
| 75 | { | 80 | { |
| @@ -77,11 +82,16 @@ if (!in_array($action,array('C','A'))) | @@ -77,11 +82,16 @@ if (!in_array($action,array('C','A'))) | ||
| 77 | } | 82 | } |
| 78 | 83 | ||
| 79 | //$session_id = $_POST['session_id']; | 84 | //$session_id = $_POST['session_id']; |
| 80 | -if (count($_FILES) == 0) | 85 | +$file_count = count($_FILES); |
| 86 | +if ($file_count == 0) | ||
| 81 | { | 87 | { |
| 82 | respond(5, 'No files have been uploaded.'); | 88 | respond(5, 'No files have been uploaded.'); |
| 83 | } | 89 | } |
| 84 | 90 | ||
| 91 | +if($file_count > 1 && $unique_file_id !== false){ | ||
| 92 | + respond(5, 'Only one file can be uploaded with a unique file id.'); | ||
| 93 | +} | ||
| 94 | + | ||
| 85 | if ($action == 'C') | 95 | if ($action == 'C') |
| 86 | { | 96 | { |
| 87 | if (!array_key_exists('document_id',$_POST)) | 97 | if (!array_key_exists('document_id',$_POST)) |
| @@ -120,7 +130,7 @@ foreach($_FILES as $key =>$file) | @@ -120,7 +130,7 @@ foreach($_FILES as $key =>$file) | ||
| 120 | $extra = $filename.'-'.$tempfile.'-'.$error; | 130 | $extra = $filename.'-'.$tempfile.'-'.$error; |
| 121 | if ($error == UPLOAD_ERR_OK) | 131 | if ($error == UPLOAD_ERR_OK) |
| 122 | { | 132 | { |
| 123 | - $result = $upload_manager->uploaded($filename, $tempfile, $action); | 133 | + $result = $upload_manager->uploaded($filename, $tempfile, $action, $unique_file_id); |
| 124 | if (PEAR::isError($result)) | 134 | if (PEAR::isError($result)) |
| 125 | { | 135 | { |
| 126 | $lastMessage=$result->getMessage(); | 136 | $lastMessage=$result->getMessage(); |
ktwebservice/webservice.php
| @@ -9,7 +9,7 @@ | @@ -9,7 +9,7 @@ | ||
| 9 | * KnowledgeTree Community Edition | 9 | * KnowledgeTree Community Edition |
| 10 | * Document Management Made Simple | 10 | * Document Management Made Simple |
| 11 | * Copyright (C) 2008, 2009 KnowledgeTree Inc. | 11 | * Copyright (C) 2008, 2009 KnowledgeTree Inc. |
| 12 | - * | 12 | + * |
| 13 | * | 13 | * |
| 14 | * This program is free software; you can redistribute it and/or modify it under | 14 | * This program is free software; you can redistribute it and/or modify it under |
| 15 | * the terms of the GNU General Public License version 3 as published by the | 15 | * the terms of the GNU General Public License version 3 as published by the |
| @@ -97,7 +97,7 @@ define('KTWS_ERR_DB_PROBLEM', 99); | @@ -97,7 +97,7 @@ define('KTWS_ERR_DB_PROBLEM', 99); | ||
| 97 | 97 | ||
| 98 | if (!defined('LATEST_WEBSERVICE_VERSION')) | 98 | if (!defined('LATEST_WEBSERVICE_VERSION')) |
| 99 | { | 99 | { |
| 100 | - define('LATEST_WEBSERVICE_VERSION',2); | 100 | + define('LATEST_WEBSERVICE_VERSION', 3); |
| 101 | } | 101 | } |
| 102 | 102 | ||
| 103 | function bool2str($bool) | 103 | function bool2str($bool) |
| @@ -435,7 +435,7 @@ class KTWebService | @@ -435,7 +435,7 @@ class KTWebService | ||
| 435 | 'item' => "{urn:$this->namespace}kt_metadata_selection_item" | 435 | 'item' => "{urn:$this->namespace}kt_metadata_selection_item" |
| 436 | ) | 436 | ) |
| 437 | ); | 437 | ); |
| 438 | - | 438 | + |
| 439 | $this->__typedef["{urn:$this->namespace}kt_metadata_options"] = | 439 | $this->__typedef["{urn:$this->namespace}kt_metadata_options"] = |
| 440 | array( | 440 | array( |
| 441 | 'ishtml' => 'string', | 441 | 'ishtml' => 'string', |
| @@ -950,6 +950,20 @@ class KTWebService | @@ -950,6 +950,20 @@ class KTWebService | ||
| 950 | ); | 950 | ); |
| 951 | } | 951 | } |
| 952 | 952 | ||
| 953 | + if($this->version >= 3) | ||
| 954 | + { | ||
| 955 | + // add_document | ||
| 956 | + $this->__dispatch_map['add_document'] = | ||
| 957 | + array('in' => array('session_id'=>'string','folder_id'=>'int','title'=>'string','filename'=>'string','documentype' =>'string','tempfilename' =>'string', 'unique_file_id' => 'string' ), | ||
| 958 | + 'out' => array( 'return' => "{urn:$this->namespace}kt_document_detail" ), | ||
| 959 | + ); | ||
| 960 | + | ||
| 961 | + $this->__dispatch_map['add_document_with_metadata'] = | ||
| 962 | + 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", 'unique_file_id' => 'string' ), | ||
| 963 | + 'out' => array( 'return' => "{urn:$this->namespace}kt_document_detail" ) | ||
| 964 | + ); | ||
| 965 | + } | ||
| 966 | + | ||
| 953 | // get_document_detail_by_name | 967 | // get_document_detail_by_name |
| 954 | $this->__dispatch_map['get_document_detail_by_name'] = | 968 | $this->__dispatch_map['get_document_detail_by_name'] = |
| 955 | array('in' => array('session_id' => 'string', 'document_name' => 'string', 'what'=>'string' ), | 969 | array('in' => array('session_id' => 'string', 'document_name' => 'string', 'what'=>'string' ), |
| @@ -2260,8 +2274,20 @@ class KTWebService | @@ -2260,8 +2274,20 @@ class KTWebService | ||
| 2260 | * @param string $tempfilename | 2274 | * @param string $tempfilename |
| 2261 | * @return kt_document_detail. status_code can be KTWS_ERR_INVALID_SESSION, KTWS_ERR_INVALID_FOLDER, KTWS_ERR_INVALID_DOCUMENT or KTWS_SUCCESS | 2275 | * @return kt_document_detail. status_code can be KTWS_ERR_INVALID_SESSION, KTWS_ERR_INVALID_FOLDER, KTWS_ERR_INVALID_DOCUMENT or KTWS_SUCCESS |
| 2262 | */ | 2276 | */ |
| 2263 | - function add_document($session_id, $folder_id, $title, $filename, $documenttype, $tempfilename) | 2277 | + function add_document($session_id, $folder_id, $title, $filename, $documenttype, $tempfilename, $unique_file_id = null) |
| 2264 | { | 2278 | { |
| 2279 | + if(empty($tempfilename)){ | ||
| 2280 | + $upload_manager = new KTUploadManager(); | ||
| 2281 | + $tempfilename = $upload_manager->get_tempfile_from_unique_id($unique_file_id); | ||
| 2282 | + | ||
| 2283 | + if (PEAR::isError($tempfilename)) | ||
| 2284 | + { | ||
| 2285 | + $response = KTWebService::_status(KTWS_ERR_INVALID_DOCUMENT, "Invalid unique file id: {$tempfilename->getMessage()}."); | ||
| 2286 | + $this->debug("add_document - cannot add document - " . $tempfilename->getMessage(), $session_id); | ||
| 2287 | + return new SOAP_Value('return',"{urn:$this->namespace}kt_document_detail", $response); | ||
| 2288 | + } | ||
| 2289 | + } | ||
| 2290 | + | ||
| 2265 | $this->debug("add_document('$session_id',$folder_id,'$title','$filename','$documenttype','$tempfilename')"); | 2291 | $this->debug("add_document('$session_id',$folder_id,'$title','$filename','$documenttype','$tempfilename')"); |
| 2266 | $kt = &$this->get_ktapi($session_id ); | 2292 | $kt = &$this->get_ktapi($session_id ); |
| 2267 | if (is_array($kt)) | 2293 | if (is_array($kt)) |
| @@ -2347,9 +2373,9 @@ class KTWebService | @@ -2347,9 +2373,9 @@ class KTWebService | ||
| 2347 | return $update_result; | 2373 | return $update_result; |
| 2348 | } | 2374 | } |
| 2349 | 2375 | ||
| 2350 | - function add_document_with_metadata($session_id, $folder_id, $title, $filename, $documenttype, $tempfilename, $metadata, $sysdata) | 2376 | + function add_document_with_metadata($session_id, $folder_id, $title, $filename, $documenttype, $tempfilename, $metadata, $sysdata, $unique_file_id = null) |
| 2351 | { | 2377 | { |
| 2352 | - $add_result = $this->add_document($session_id, $folder_id, $title, $filename, $documenttype, $tempfilename); | 2378 | + $add_result = $this->add_document($session_id, $folder_id, $title, $filename, $documenttype, $tempfilename, $unique_file_id); |
| 2353 | 2379 | ||
| 2354 | $status_code = $add_result->value['status_code']; | 2380 | $status_code = $add_result->value['status_code']; |
| 2355 | if ($status_code != 0) | 2381 | if ($status_code != 0) |
sql/mysql/install/data.sql
| @@ -1778,7 +1778,8 @@ INSERT INTO `upgrades` VALUES | @@ -1778,7 +1778,8 @@ INSERT INTO `upgrades` VALUES | ||
| 1778 | (232,'upgrade*3.7.0.1*99*upgrade3.7.0.1','Upgrade from version 3.6.3 to 3.7.0.1','2009-11-13 00:00:00',1,'upgrade*3.7.0.1*99*upgrade3.7.0.1'), | 1778 | (232,'upgrade*3.7.0.1*99*upgrade3.7.0.1','Upgrade from version 3.6.3 to 3.7.0.1','2009-11-13 00:00:00',1,'upgrade*3.7.0.1*99*upgrade3.7.0.1'), |
| 1779 | (233,'sql*3.7.0.2*0*3.7.0.2/processor_queue.sql','Database upgrade to version 3.7.0.1: Processor Queue','2009-09-01 00:00:00',1,'upgrade*3.7.0.2*99*upgrade3.7.0.2'), | 1779 | (233,'sql*3.7.0.2*0*3.7.0.2/processor_queue.sql','Database upgrade to version 3.7.0.1: Processor Queue','2009-09-01 00:00:00',1,'upgrade*3.7.0.2*99*upgrade3.7.0.2'), |
| 1780 | (234,'upgrade*3.7.0.2*99*upgrade3.7.0.2','Upgrade from version 3.7.0.1 to 3.7.0.2','2009-11-19 00:00:00',1,'upgrade*3.7.0.2*99*upgrade3.7.0.2'), | 1780 | (234,'upgrade*3.7.0.2*99*upgrade3.7.0.2','Upgrade from version 3.7.0.1 to 3.7.0.2','2009-11-19 00:00:00',1,'upgrade*3.7.0.2*99*upgrade3.7.0.2'), |
| 1781 | -(233,'sql*3.7.0.3*0*3.7.0.3/clienttools_config.sql','Database upgrade to version 3.7.0.3: Clienttools Config','2009-12-10 00:00:00',1,'upgrade*3.7.0.3*99*upgrade3.7.0.3'); | 1781 | +(235,'sql*3.7.0.3*0*3.7.0.3/clienttools_config.sql','Database upgrade to version 3.7.0.3: Clienttools Config','2009-12-10 00:00:00',1,'upgrade*3.7.0.3*99*upgrade3.7.0.3'), |
| 1782 | +(236,'sql*3.7.0.3*0*3.7.0.3/uploaded_files.sql','Database upgrade to version 3.7.0.3: Uploaded Files','2009-12-10 00:00:00',1,'upgrade*3.7.0.3*99*upgrade3.7.0.3'); | ||
| 1782 | /*!40000 ALTER TABLE `upgrades` ENABLE KEYS */; | 1783 | /*!40000 ALTER TABLE `upgrades` ENABLE KEYS */; |
| 1783 | UNLOCK TABLES; | 1784 | UNLOCK TABLES; |
| 1784 | 1785 |
sql/mysql/install/structure.sql
| @@ -1591,6 +1591,7 @@ CREATE TABLE `uploaded_files` ( | @@ -1591,6 +1591,7 @@ CREATE TABLE `uploaded_files` ( | ||
| 1591 | `uploaddate` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, | 1591 | `uploaddate` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, |
| 1592 | `action` char(1) NOT NULL COMMENT 'A = Add, C = Checkin', | 1592 | `action` char(1) NOT NULL COMMENT 'A = Add, C = Checkin', |
| 1593 | `document_id` int(11) default NULL, | 1593 | `document_id` int(11) default NULL, |
| 1594 | + `unique_file_id` varchar(30), | ||
| 1594 | PRIMARY KEY (`tempfilename`), | 1595 | PRIMARY KEY (`tempfilename`), |
| 1595 | KEY `userid` (`userid`), | 1596 | KEY `userid` (`userid`), |
| 1596 | KEY `document_id` (`document_id`), | 1597 | KEY `document_id` (`document_id`), |
sql/mysql/upgrade/3.7.0.3/uploaded_files.sql
0 → 100644