Commit f72e4011f4fdb4fc391a169f99d4fbe2a2e91e4b

Authored by donaldjackson
1 parent c4a5b5c3

modified: ktapi.inc.php

Implemented new KTAPI changes
Showing 1 changed file with 1565 additions and 235 deletions
ktapi/ktapi.inc.php
@@ -169,6 +169,8 @@ class KTAPI @@ -169,6 +169,8 @@ class KTAPI
169 */ 169 */
170 protected $session = null; 170 protected $session = null;
171 171
  172 + protected $version = 3;
  173 +
172 /** 174 /**
173 * This returns the current session. 175 * This returns the current session.
174 * 176 *
@@ -445,7 +447,7 @@ class KTAPI @@ -445,7 +447,7 @@ class KTAPI
445 { 447 {
446 $documentid = $row['id']; 448 $documentid = $row['id'];
447 449
448 - $results[] = $idsOnly?$documentid:KTAPI_Document::get($this, $documentid); 450 + $results[] = $idsOnly ? $documentid : KTAPI_Document::get($this, $documentid);
449 } 451 }
450 } 452 }
451 return $results; 453 return $results;
@@ -729,7 +731,15 @@ class KTAPI @@ -729,7 +731,15 @@ class KTAPI
729 $rows = DBUtil::getResultArray($sql); 731 $rows = DBUtil::getResultArray($sql);
730 if (is_null($rows) || PEAR::isError($rows)) 732 if (is_null($rows) || PEAR::isError($rows))
731 { 733 {
732 - $results = new KTAPI_Error(KTAPI_ERROR_INTERNAL_ERROR, $rows); 734 + $response['status_code'] = 1;
  735 + if(is_null($rows))
  736 + {
  737 + $response['message'] = "No types";
  738 + } else {
  739 + $response['message'] = $rows->getMessage();
  740 + }
  741 +
  742 + return $response;
733 } 743 }
734 else 744 else
735 { 745 {
@@ -739,7 +749,9 @@ class KTAPI @@ -739,7 +749,9 @@ class KTAPI
739 $results[] = $row['name']; 749 $results[] = $row['name'];
740 } 750 }
741 } 751 }
742 - return $results; 752 + $response['status_code'] = 0;
  753 + $response['results'] = $results;
  754 + return $response;
743 } 755 }
744 756
745 /** 757 /**
@@ -990,22 +1002,32 @@ class KTAPI @@ -990,22 +1002,32 @@ class KTAPI
990 /** 1002 /**
991 * Creates a new anonymous session. 1003 * Creates a new anonymous session.
992 * 1004 *
993 - * @param string $ip 1005 + * @author KnowledgeTree Team
  1006 + * @access public
  1007 + * @param string $ip The users IP address
  1008 + * @return array Response
994 */ 1009 */
995 function anonymous_login($ip=null) 1010 function anonymous_login($ip=null)
996 { 1011 {
997 $session = $this->start_anonymous_session($ip); 1012 $session = $this->start_anonymous_session($ip);
998 if(PEAR::isError($session)){ 1013 if(PEAR::isError($session)){
999 - return new KTAPI_Error($session); 1014 + $response['status_code'] = 1;
  1015 + $response['message']= $session->getMessage();
  1016 + return $response;
1000 } 1017 }
1001 1018
1002 $session= $session->get_session(); 1019 $session= $session->get_session();
1003 - return $session; 1020 + $response['message'] = $session;
  1021 +
  1022 + $response['status_code'] = 0;
  1023 + return $response;
1004 } 1024 }
1005 1025
1006 /** 1026 /**
1007 * Creates a new session for the user. 1027 * Creates a new session for the user.
1008 * 1028 *
  1029 + * @author KnowledgeTree Team
  1030 + * @access public
1009 * @param string $username 1031 * @param string $username
1010 * @param string $password 1032 * @param string $password
1011 * @param string $ip 1033 * @param string $ip
@@ -1015,30 +1037,43 @@ class KTAPI @@ -1015,30 +1037,43 @@ class KTAPI
1015 { 1037 {
1016 $session = $this->start_session($username,$password, $ip); 1038 $session = $this->start_session($username,$password, $ip);
1017 if(PEAR::isError($session)){ 1039 if(PEAR::isError($session)){
1018 - return new KTAPI_Error($session); 1040 + $response['status_code'] = 1;
  1041 + $response['message']= $session->getMessage();
  1042 + return $response;
1019 } 1043 }
1020 1044
1021 $session = $session->get_session(); 1045 $session = $session->get_session();
1022 - return $session; 1046 + $response['status_code'] = 0;
  1047 + $response['message'] = $session;
  1048 + return $response;
1023 } 1049 }
1024 1050
1025 /** 1051 /**
1026 * Closes an active session. 1052 * Closes an active session.
1027 * 1053 *
  1054 + * @author KnowledgeTree Team
  1055 + * @access public
1028 * @return KTAPI_Error on failure 1056 * @return KTAPI_Error on failure
1029 */ 1057 */
1030 function logout() 1058 function logout()
1031 { 1059 {
1032 $session = &$this->get_session(); 1060 $session = &$this->get_session();
1033 if(PEAR::isError($session)){ 1061 if(PEAR::isError($session)){
1034 - return new KTAPI_Error($session); 1062 + $response['status_code'] = 1;
  1063 + $response['message']= $session->getMessage();
  1064 + return $response;
1035 } 1065 }
1036 $session->logout(); 1066 $session->logout();
  1067 +
  1068 + $response['status_code'] = 0;
  1069 + return $response;
1037 } 1070 }
1038 1071
1039 /** 1072 /**
1040 * Returns folder detail given a folder_id. 1073 * Returns folder detail given a folder_id.
1041 * 1074 *
  1075 + * @author KnowledgeTree Team
  1076 + * @access public
1042 * @param int $folder_id 1077 * @param int $folder_id
1043 * @return kt_folder_detail. 1078 * @return kt_folder_detail.
1044 */ 1079 */
@@ -1047,15 +1082,21 @@ class KTAPI @@ -1047,15 +1082,21 @@ class KTAPI
1047 $folder = &$this->get_folder_by_id($folder_id); 1082 $folder = &$this->get_folder_by_id($folder_id);
1048 if (PEAR::isError($folder)) 1083 if (PEAR::isError($folder))
1049 { 1084 {
1050 - return new KTAPI_Error($folder); 1085 + $response['status_code'] = 1;
  1086 + $response['message']= $folder->getMessage();
  1087 + return $response;
1051 } 1088 }
1052 $detail = $folder->get_detail(); 1089 $detail = $folder->get_detail();
  1090 + $detail['status_code'] = 0;
  1091 + $detail['message'] = '';
1053 return $detail; 1092 return $detail;
1054 } 1093 }
1055 1094
1056 /** 1095 /**
1057 * Retrieves all shortcuts linking to a specific document 1096 * Retrieves all shortcuts linking to a specific document
1058 * 1097 *
  1098 + * @author KnowledgeTree Team
  1099 + * @access public
1059 * @param ing $document_id 1100 * @param ing $document_id
1060 * @return kt_document_shortcuts 1101 * @return kt_document_shortcuts
1061 * 1102 *
@@ -1064,20 +1105,29 @@ class KTAPI @@ -1064,20 +1105,29 @@ class KTAPI
1064 { 1105 {
1065 $folder = $this->get_folder_by_id($folder_id); 1106 $folder = $this->get_folder_by_id($folder_id);
1066 if(PEAR::isError($folder)){ 1107 if(PEAR::isError($folder)){
1067 - return new KTAPI_Error($folder); 1108 + $response['status_code'] = 1;
  1109 + $response['message']= $folder->getMessage();
  1110 + return $response;
1068 } 1111 }
1069 1112
1070 $shortcuts = $folder->get_shortcuts(); 1113 $shortcuts = $folder->get_shortcuts();
1071 if(PEAR::isError($shortcuts)){ 1114 if(PEAR::isError($shortcuts)){
1072 - return new KTAPI_Error($shortcuts); 1115 + $response['status_code'] = 1;
  1116 + $response['message']= $shortcuts->getMessage();
  1117 + return $response;
1073 } 1118 }
1074 1119
1075 - return $shortcuts; 1120 + $response['status_code'] = 0;
  1121 + $response['message'] = '';
  1122 + $response['shortcuts'] = $shortcuts;
  1123 + return $response;
1076 } 1124 }
1077 1125
1078 /** 1126 /**
1079 * Returns folder detail given a folder name which could include a full path. 1127 * Returns folder detail given a folder name which could include a full path.
1080 * 1128 *
  1129 + * @author KnowledgeTree Team
  1130 + * @access public
1081 * @param string $folder_name 1131 * @param string $folder_name
1082 * @return kt_folder_detail. 1132 * @return kt_folder_detail.
1083 */ 1133 */
@@ -1085,16 +1135,22 @@ class KTAPI @@ -1085,16 +1135,22 @@ class KTAPI
1085 { 1135 {
1086 $folder = &$this->get_folder_by_name($folder_name); 1136 $folder = &$this->get_folder_by_name($folder_name);
1087 if(PEAR::isError($folder)){ 1137 if(PEAR::isError($folder)){
1088 - return new KTAPI_Error($folder); 1138 + $response['status_code'] = 1;
  1139 + $response['message']= $folder->getMessage();
  1140 + return $response;
1089 } 1141 }
1090 1142
1091 $detail = $folder->get_detail(); 1143 $detail = $folder->get_detail();
  1144 + $detail['status_code'] = 0;
  1145 + $detail['message'] = '';
1092 return $detail; 1146 return $detail;
1093 } 1147 }
1094 1148
1095 /** 1149 /**
1096 * Returns the contents of a folder. 1150 * Returns the contents of a folder.
1097 * 1151 *
  1152 + * @author KnowledgeTree Team
  1153 + * @access public
1098 * @param int $folder_id 1154 * @param int $folder_id
1099 * @param int $depth 1155 * @param int $depth
1100 * @param string $what 1156 * @param string $what
@@ -1104,7 +1160,9 @@ class KTAPI @@ -1104,7 +1160,9 @@ class KTAPI
1104 { 1160 {
1105 $folder = &$this->get_folder_by_id($folder_id); 1161 $folder = &$this->get_folder_by_id($folder_id);
1106 if(PEAR::isError($folder)){ 1162 if(PEAR::isError($folder)){
1107 - return new KTAPI_Error($folder); 1163 + $response['status_code'] = 1;
  1164 + $response['message']= $folder->getMessage();
  1165 + return $response;
1108 } 1166 }
1109 $listing = $folder->get_listing($depth, $what); 1167 $listing = $folder->get_listing($depth, $what);
1110 1168
@@ -1115,6 +1173,9 @@ class KTAPI @@ -1115,6 +1173,9 @@ class KTAPI
1115 'items'=>$listing 1173 'items'=>$listing
1116 ); 1174 );
1117 1175
  1176 + $contents['status_code'] = 0;
  1177 + $contents['message'] = '';
  1178 +
1118 return $contents; 1179 return $contents;
1119 } 1180 }
1120 1181
@@ -1130,10 +1191,14 @@ class KTAPI @@ -1130,10 +1191,14 @@ class KTAPI
1130 $folder = &$this->get_folder_by_id($folder_id); 1191 $folder = &$this->get_folder_by_id($folder_id);
1131 if (PEAR::isError($folder)) 1192 if (PEAR::isError($folder))
1132 { 1193 {
1133 - return new KTAPI_Error($folder); 1194 + $response['status_code'] = 1;
  1195 + $response['message']= $folder->getMessage();
  1196 + return $response;
1134 } 1197 }
1135 $newfolder = &$folder->add_folder($folder_name); 1198 $newfolder = &$folder->add_folder($folder_name);
1136 $detail = $newfolder->get_detail(); 1199 $detail = $newfolder->get_detail();
  1200 + $detail['status_code'] = 0;
  1201 + $detail['message'] = '';
1137 return $detail; 1202 return $detail;
1138 } 1203 }
1139 1204
@@ -1149,22 +1214,30 @@ class KTAPI @@ -1149,22 +1214,30 @@ class KTAPI
1149 $folder = &$this->get_folder_by_id($target_folder_id); 1214 $folder = &$this->get_folder_by_id($target_folder_id);
1150 if (PEAR::isError($folder)) 1215 if (PEAR::isError($folder))
1151 { 1216 {
1152 - return new KTAPI_Error($folder); 1217 + $response['status_code'] = 1;
  1218 + $response['message']= $folder->getMessage();
  1219 + return $response;
1153 } 1220 }
1154 1221
1155 $source_folder = &$kt->get_folder_by_id($source_folder_id); 1222 $source_folder = &$kt->get_folder_by_id($source_folder_id);
1156 if (PEAR::isError($source_folder)) 1223 if (PEAR::isError($source_folder))
1157 { 1224 {
1158 - return new KTAPI_Error($source_folder); 1225 + $response['status_code'] = 1;
  1226 + $response['message']= $source_folder->getMessage();
  1227 + return $response;
1159 } 1228 }
1160 1229
1161 $shortcut = &$folder->add_folder_shortcut($source_folder_id); 1230 $shortcut = &$folder->add_folder_shortcut($source_folder_id);
1162 if (PEAR::isError($shortcut)) 1231 if (PEAR::isError($shortcut))
1163 { 1232 {
1164 - return new KTAPI_Error($shortcut); 1233 + $response['status_code'] = 1;
  1234 + $response['message']= $shortcut->getMessage();
  1235 + return $response;
1165 } 1236 }
1166 1237
1167 $detail = $shortcut->get_detail(); 1238 $detail = $shortcut->get_detail();
  1239 + $detail['status_code'] = 0;
  1240 + $detail['message'] = '';
1168 return $detail; 1241 return $detail;
1169 } 1242 }
1170 1243
@@ -1180,22 +1253,30 @@ class KTAPI @@ -1180,22 +1253,30 @@ class KTAPI
1180 $folder = &$this->get_folder_by_id($target_folder_id); 1253 $folder = &$this->get_folder_by_id($target_folder_id);
1181 if (PEAR::isError($folder)) 1254 if (PEAR::isError($folder))
1182 { 1255 {
1183 - return new KTAPI_Error($folder); 1256 + $response['status_code'] = 1;
  1257 + $response['message']= $folder->getMessage();
  1258 + return $response;
1184 } 1259 }
1185 1260
1186 $source_document = &$kt->get_document_by_id($source_document_id); 1261 $source_document = &$kt->get_document_by_id($source_document_id);
1187 if (PEAR::isError($source_document)) 1262 if (PEAR::isError($source_document))
1188 { 1263 {
1189 - return new KTAPI_Error($source_document); 1264 + $response['status_code'] = 1;
  1265 + $response['message']= $source_document->getMessage();
  1266 + return $response;
1190 } 1267 }
1191 1268
1192 $shortcut = &$folder->add_document_shortcut($source_document_id); 1269 $shortcut = &$folder->add_document_shortcut($source_document_id);
1193 if (PEAR::isError($shortcut)) 1270 if (PEAR::isError($shortcut))
1194 { 1271 {
1195 - return new KTAPI_Error($shortcut); 1272 + $response['status_code'] = 1;
  1273 + $response['message']= $shortcut->getMessage();
  1274 + return $response;
1196 } 1275 }
1197 1276
1198 $detail = $shortcut->get_detail(); 1277 $detail = $shortcut->get_detail();
  1278 + $detail['status_code'] = 0;
  1279 + $detail['message'] = '';
1199 return $detail; 1280 return $detail;
1200 } 1281 }
1201 1282
@@ -1211,14 +1292,21 @@ class KTAPI @@ -1211,14 +1292,21 @@ class KTAPI
1211 $folder = &$this->get_folder_by_id($folder_id); 1292 $folder = &$this->get_folder_by_id($folder_id);
1212 if (PEAR::isError($folder)) 1293 if (PEAR::isError($folder))
1213 { 1294 {
1214 - return new KTAPI_Error($folder); 1295 + $response['status_code'] = 1;
  1296 + $response['message']= $folder->getMessage();
  1297 + return $response;
1215 } 1298 }
1216 1299
1217 $result = $folder->delete($reason); 1300 $result = $folder->delete($reason);
1218 if (PEAR::isError($result)) 1301 if (PEAR::isError($result))
1219 { 1302 {
1220 - return new KTAPI_Error($result); 1303 + $response['status_code'] = 1;
  1304 + $response['message']= $result->getMessage();
  1305 + return $response;
1221 } 1306 }
  1307 +
  1308 + $response['status_code'] = 0;
  1309 + return $response;
1222 } 1310 }
1223 1311
1224 /** 1312 /**
@@ -1233,13 +1321,20 @@ class KTAPI @@ -1233,13 +1321,20 @@ class KTAPI
1233 $folder = &$this->get_folder_by_id($folder_id); 1321 $folder = &$this->get_folder_by_id($folder_id);
1234 if (PEAR::isError($folder)) 1322 if (PEAR::isError($folder))
1235 { 1323 {
1236 - return new KTAPI_Error($folder); 1324 + $response['status_code'] = 1;
  1325 + $response['message']= $folder->getMessage();
  1326 + return $response;
1237 } 1327 }
1238 $result = $folder->rename($newname); 1328 $result = $folder->rename($newname);
1239 if (PEAR::isError($result)) 1329 if (PEAR::isError($result))
1240 { 1330 {
1241 - return new KTAPI_Error($result); 1331 + $response['status_code'] = 1;
  1332 + $response['message']= $result->getMessage();
  1333 + return $response;
1242 } 1334 }
  1335 +
  1336 + $response['status_code'] = 0;
  1337 + return $response;
1243 } 1338 }
1244 1339
1245 /** 1340 /**
@@ -1255,280 +1350,1502 @@ class KTAPI @@ -1255,280 +1350,1502 @@ class KTAPI
1255 $src_folder = &$this->get_folder_by_id($source_id); 1350 $src_folder = &$this->get_folder_by_id($source_id);
1256 if (PEAR::isError($src_folder)) 1351 if (PEAR::isError($src_folder))
1257 { 1352 {
1258 - return new KTAPI_Error($src_folder); 1353 + $response['status_code'] = 1;
  1354 + $response['message']= $src_folder->getMessage();
  1355 + return $response;
1259 } 1356 }
1260 1357
1261 $tgt_folder = &$this->get_folder_by_id($target_id); 1358 $tgt_folder = &$this->get_folder_by_id($target_id);
1262 if (PEAR::isError($tgt_folder)) 1359 if (PEAR::isError($tgt_folder))
1263 { 1360 {
1264 - return new KTAPI_Error($tgt_folder); 1361 + $response['status_code'] = 1;
  1362 + $response['message']= $tgt_folder->getMessage();
  1363 + return $response;
1265 } 1364 }
1266 1365
1267 $result= $src_folder->copy($tgt_folder, $reason); 1366 $result= $src_folder->copy($tgt_folder, $reason);
1268 if (PEAR::isError($result)) 1367 if (PEAR::isError($result))
1269 { 1368 {
1270 - return new KTAPI_Error($result); 1369 + $response['status_code'] = 1;
  1370 + $response['message']= $result->getMessage();
  1371 + return $response;
1271 } 1372 }
1272 1373
1273 - $sourceName = $src_folder->get_folder_name();  
1274 - $targetPath = $tgt_folder->get_full_path(); 1374 + if($this->version >= 2){
  1375 + $sourceName = $src_folder->get_folder_name();
  1376 + $targetPath = $tgt_folder->get_full_path();
  1377 +
  1378 + $response = $this->get_folder_detail_by_name($targetPath . '/' . $sourceName);
  1379 + return $response;
  1380 + }
1275 1381
1276 - $response = $this->get_folder_detail_by_name($targetPath . '/' . $sourceName); 1382 + $response['status_code'] = 0;
1277 return $response; 1383 return $response;
1278 } 1384 }
1279 -  
1280 -  
1281 - /**  
1282 - * Returns a list of available transitions on a give document with a workflow.  
1283 - *  
1284 - * @param int $document_id  
1285 - * @return array  
1286 - */  
1287 - function get_document_workflow_transitions($document_id)  
1288 - {  
1289 -  
1290 - $document = &$this->get_document_by_id($document_id);  
1291 - if (PEAR::isError($document))  
1292 - {  
1293 - return new KTAPI_Error($document);  
1294 - }  
1295 1385
1296 - $result = $document->get_workflow_transitions();  
1297 - if (PEAR::isError($result)) 1386 + /**
  1387 + * Moves a folder to another location.
  1388 + *
  1389 + * @param int $sourceid
  1390 + * @param int $targetid
  1391 + * @param string $reason
  1392 + * @return kt_response.
  1393 + */
  1394 + function move_folder($source_id, $target_id, $reason)
  1395 + {
  1396 + $src_folder = &$this->get_folder_by_id($source_id);
  1397 + if (PEAR::isError($src_folder))
1298 { 1398 {
1299 - return new KTAPI_Error($result); 1399 + $response['status_code'] = 1;
  1400 + $response['message']= $src_folder->getMessage();
  1401 + return $response;
1300 } 1402 }
1301 1403
1302 - return $result;  
1303 - }  
1304 -  
1305 - /**  
1306 - * Returns the current state that the document is in.  
1307 - *  
1308 - * @param int $document_id  
1309 - * @return array  
1310 - */  
1311 - function get_document_workflow_state($document_id)  
1312 - {  
1313 - $document = &$this->get_document_by_id($document_id);  
1314 - if (PEAR::isError($document)) 1404 + $tgt_folder = &$this->get_folder_by_id($target_id);
  1405 + if (PEAR::isError($tgt_folder))
1315 { 1406 {
1316 - return new KTAPI_Error($document); 1407 + $response['status_code'] = 1;
  1408 + $response['message']= $tgt_folder->getMessage();
  1409 + return $response;
1317 } 1410 }
1318 1411
1319 - $result = $document->get_workflow_state(); 1412 + $result = $src_folder->move($tgt_folder, $reason);
1320 if (PEAR::isError($result)) 1413 if (PEAR::isError($result))
1321 { 1414 {
1322 - return new KTAPI_Error($result); 1415 + $response['status_code'] = 1;
  1416 + $response['message']= $result->getMessage();
  1417 + return $response;
1323 } 1418 }
1324 1419
1325 - return $result;  
1326 - }  
1327 -  
1328 - /**  
1329 - * Returns the document transaction history.  
1330 - *  
1331 - * @param int $document_id  
1332 - * @return array  
1333 - */  
1334 - function get_document_transaction_history($document_id)  
1335 - {  
1336 -  
1337 - $document = &$this->get_document_by_id($document_id);  
1338 - if (PEAR::isError($document))  
1339 - {  
1340 - return new KTAPI_Error($document); 1420 + if($this->version >= 2){
  1421 + $response = $this->get_folder_detail($source_id);
  1422 + return $response;
1341 } 1423 }
1342 1424
1343 - $result = $document->get_transaction_history(); 1425 + $response['status_code'] = 0;
  1426 + return $response;
  1427 +
  1428 + }
  1429 +
  1430 + /**
  1431 + * Returns a list of document types.
  1432 + *
  1433 + * @param string $session_id
  1434 + * @return kt_document_types_response. . status_code can be KTWS_ERR_INVALID_SESSION, KTWS_SUCCESS
  1435 + */
  1436 + public function get_document_types($session_id)
  1437 + {
  1438 + $result = $this->get_documenttypes();
1344 if (PEAR::isError($result)) 1439 if (PEAR::isError($result))
1345 { 1440 {
1346 - return new KTAPI_Error($result); 1441 + $response['status_code'] = 1;
  1442 + $response['message']= $result->getMessage();
  1443 + return $response;
1347 } 1444 }
1348 1445
1349 - return $result;  
1350 - }  
1351 -  
1352 - /**  
1353 - * Returns the version history.  
1354 - *  
1355 - * @param int $document_id  
1356 - * @return kt_document_version_history_response  
1357 - */  
1358 - function get_document_version_history($document_id)  
1359 - {  
1360 - $document = &$this->get_document_by_id($document_id);  
1361 - if (PEAR::isError($document)) 1446 + $response['status_code']= 0;
  1447 + $response['document_types']= $result;
  1448 +
  1449 + return $response;
  1450 +
  1451 + }
  1452 +
  1453 +
  1454 + /**
  1455 + * Returns document detail given a document_id.
  1456 + *
  1457 + * @param int $document_id
  1458 + * @return kt_document_detail.
  1459 + */
  1460 + function get_document_detail($document_id, $detailstr='')
  1461 + {
  1462 + $document = $this->get_document_by_id($document_id);
  1463 + if (PEAR::isError($document))
1362 { 1464 {
1363 - return new KTAPI_Error($document); 1465 + $response['status_code'] = 1;
  1466 + $response['message']= $document->getMessage();
1364 } 1467 }
1365 1468
1366 - $result = $document->get_version_history();  
1367 - if (PEAR::isError($result)) 1469 + $detail = $document->get_detail();
  1470 + if (PEAR::isError($detail))
1368 { 1471 {
1369 - return new KTAPI_Error($result); 1472 + $response['status_code'] = 1;
  1473 + $response['message']= $detail->getMessage();
1370 } 1474 }
1371 1475
1372 - return $result;  
1373 - }  
1374 -  
1375 - /**  
1376 - * Returns a list of linked documents  
1377 - *  
1378 - * @param string $session_id  
1379 - * @param int $document_id  
1380 - * @return array  
1381 - *  
1382 - *  
1383 - */  
1384 - function get_document_links($document_id)  
1385 - {  
1386 - $document = &$this->get_document_by_id($document_id);  
1387 - if (PEAR::isError($document)) 1476 + $detail['status_code'] = 0;
  1477 + $detail['message'] = '';
  1478 +
  1479 + if ($this->version >= 2)
1388 { 1480 {
1389 - return new KTAPI_Error($document); 1481 + $detail['metadata'] = array();
  1482 + $detail['links'] = array();
  1483 + $detail['transitions'] = array();
  1484 + $detail['version_history'] = array();
  1485 + $detail['transaction_history'] = array();
  1486 +
  1487 + if (stripos($detailstr,'M') !== false)
  1488 + {
  1489 + $response = $this->get_document_metadata($document_id);
  1490 + $detail['metadata'] = $response['metadata'];
  1491 + $detail['name'] = 'metadata';
  1492 + }
  1493 +
  1494 + if (stripos($detailstr,'L') !== false)
  1495 + {
  1496 + $response = $this->get_document_links($document_id);
  1497 + $detail['links'] = $response['links'];
  1498 + $detail['name'] = 'links';
  1499 + }
  1500 +
  1501 + if (stripos($detailstr,'T') !== false)
  1502 + {
  1503 + $response = $this->get_document_workflow_transitions($document_id);
  1504 + $detail['transitions'] = $response['transitions'] ;
  1505 + $detail['name'] = 'transitions';
  1506 + }
  1507 +
  1508 + if (stripos($detailstr,'V') !== false)
  1509 + {
  1510 + $response = $this->get_document_version_history($document_id);
  1511 + $detail['version_history'] = $response['history'];
  1512 + $detail['name'] = 'version_history';
  1513 + }
  1514 +
  1515 + if (stripos($detailstr,'H') !== false)
  1516 + {
  1517 + $response = $this->get_document_transaction_history($document_id);
  1518 + $detail['transaction_history'] = $response['history'];
  1519 + $detail['name'] = 'transaction_history';
  1520 + }
1390 } 1521 }
1391 1522
1392 - $links = $document->get_linked_documents();  
1393 -  
1394 - return $links;  
1395 - } 1523 + return $detail;
  1524 + }
  1525 +
  1526 + function get_document_detail_by_filename($folder_id, $filename, $detail='')
  1527 + {
  1528 + return $this->get_document_detail_by_name($folder_id, $filename, 'F', $detail);
  1529 + }
  1530 +
  1531 + function get_document_detail_by_title($folder_id, $title, $detail='')
  1532 + {
  1533 + return $this->get_document_detail_by_name($folder_id, $title, 'T', $detail);
  1534 + }
  1535 +
1396 1536
1397 /** 1537 /**
1398 - * Moves a folder to another location. 1538 + * Returns document detail given a document name which could include a full path.
1399 * 1539 *
1400 - * @param int $sourceid  
1401 - * @param int $targetid  
1402 - * @param string $reason  
1403 - * @return kt_response. 1540 + * @param string $document_name
  1541 + * @param string @what
  1542 + * @return kt_document_detail.
1404 */ 1543 */
1405 - function move_folder($source_id, $target_id, $reason) 1544 + function get_document_detail_by_name($folder_id, $document_name, $what='T', $detail='')
1406 { 1545 {
1407 - $src_folder = &$this->get_folder_by_id($source_id);  
1408 - if (PEAR::isError($src_folder)) 1546 + $response['status_code'] = 1;
  1547 + if (empty($document_name))
1409 { 1548 {
1410 - return new KTAPI_Error($src_folder); 1549 + $response['message'] = 'Document_name is empty.';
  1550 + return $response;
1411 } 1551 }
1412 1552
1413 - $tgt_folder = &$this->get_folder_by_id($target_id);  
1414 - if (PEAR::isError($tgt_folder)) 1553 + if (!in_array($what, array('T','F')))
1415 { 1554 {
1416 - return new KTAPI_Error($tgt_folder); 1555 + $response['message'] = 'Invalid what code';
  1556 + return $response;
1417 } 1557 }
1418 1558
1419 - $result = $src_folder->move($tgt_folder, $reason);  
1420 - if (PEAR::isError($result)) 1559 + if ($folder_id < 1) $folder_id = 1;
  1560 + $root = &$this->get_folder_by_id($folder_id);
  1561 + if (PEAR::isError($root))
1421 { 1562 {
1422 - return new KTAPI_Error($result); 1563 + $response['message'] = $root->getMessage();
  1564 + return $response;
1423 } 1565 }
1424 1566
1425 - $response = $this->get_folder_detail($source_id);  
1426 - return $response;  
1427 - }  
1428 -  
1429 - /**  
1430 - * Removes a link between documents  
1431 - *  
1432 - * @param int $parent_document_id  
1433 - * @param int $child_document_id  
1434 - * @return kt_response  
1435 - */  
1436 - function unlink_documents($parent_document_id, $child_document_id)  
1437 - {  
1438 - $document = &$this->get_document_by_id($parent_document_id);  
1439 - if (PEAR::isError($document)) 1567 + if ($what == 'T')
1440 { 1568 {
1441 - return new KTAPI_Error($document); 1569 + $document = &$root->get_document_by_name($document_name);
1442 } 1570 }
1443 -  
1444 - $child_document = &$this->get_document_by_id($child_document_id);  
1445 - if (PEAR::isError($child_document)) 1571 + else
1446 { 1572 {
1447 - return new KTAPI_Error($child_document); 1573 + $document = &$root->get_document_by_filename($document_name);
1448 } 1574 }
1449 -  
1450 - $result = $document->unlink_document($child_document);  
1451 - if (PEAR::isError($result)) 1575 + if (PEAR::isError($document))
1452 { 1576 {
1453 - return new KTAPI_Error($result); 1577 + $response['message'] = $document->getMessage();
  1578 + return $response;
1454 } 1579 }
1455 1580
1456 - return true;  
1457 - }  
1458 -  
1459 - /**  
1460 - * Creates a link between documents  
1461 - *  
1462 - * @param int $parent_document_id  
1463 - * @param int $child_document_id  
1464 - * @param string $type  
1465 - * @return boolean  
1466 - */  
1467 - function link_documents($parent_document_id, $child_document_id, $type)  
1468 - { 1581 + return $this->get_document_detail($document->documentid, $detail);
  1582 + }
1469 1583
1470 - $document = &$this->get_document_by_id($parent_document_id);  
1471 - if (PEAR::isError($document))  
1472 - {  
1473 - return new KTAPI_Error($document); 1584 + /**
  1585 + * Retrieves all shortcuts linking to a specific document
  1586 + *
  1587 + * @param ing $document_id
  1588 + * @return kt_document_shortcuts.
  1589 + *
  1590 + */
  1591 + function get_document_shortcuts($document_id)
  1592 + {
  1593 + $document = $this->get_document_by_id($document_id);
  1594 + if(PEAR::isError($document)){
  1595 + $response['status_code'] = 1;
  1596 + $response['message'] = $document->getMessage();
  1597 + return $response;
1474 } 1598 }
1475 1599
1476 - $child_document = &$this->get_document_by_id($child_document_id);  
1477 - if (PEAR::isError($child_document))  
1478 - {  
1479 - return new KTAPI_Error($child_document); 1600 + $shortcuts = $document->get_shortcuts();
  1601 + if(PEAR::isError($shortcuts)){
  1602 + $response['status_code'] = 1;
  1603 + $response['message'] = $shortcuts->getMessage();
  1604 + return $response;
1480 } 1605 }
1481 1606
1482 - $result = $document->link_document($child_document, $type);  
1483 - if (PEAR::isError($result)) 1607 + $response['status_code'] = 0;
  1608 + $response['message'] = '';
  1609 + $response['shortcuts'] = $shortcuts;
  1610 + return $response;
  1611 + }
  1612 +
  1613 + /**
  1614 + * Adds a document to the repository.
  1615 + *
  1616 + * @param int $folder_id
  1617 + * @param string $title
  1618 + * @param string $filename
  1619 + * @param string $documenttype
  1620 + * @param string $tempfilename
  1621 + * @return kt_document_detail.
  1622 + */
  1623 + function add_document($folder_id, $title, $filename, $documenttype, $tempfilename)
  1624 + {
  1625 + // we need to add some security to ensure that people don't frig the checkin process to access restricted files.
  1626 + // possibly should change 'tempfilename' to be a hash or id of some sort if this is troublesome.
  1627 + $upload_manager = new KTUploadManager();
  1628 + if (!$upload_manager->is_valid_temporary_file($tempfilename))
1484 { 1629 {
1485 - return new KTAPI_Error($result); 1630 + $response['status_code'] = 1;
  1631 + $response['message'] = "Invalid temporary file: $tempfilename. Not compatible with $upload_manager->temp_dir.";
  1632 + return $response;
1486 } 1633 }
1487 1634
1488 - return true;  
1489 - }  
1490 -  
1491 - /**  
1492 - * Retrieves the server policies for this server  
1493 - *  
1494 - * @return array  
1495 - */  
1496 - function get_client_policies($client=null)  
1497 - {  
1498 - $config = KTConfig::getSingleton(); 1635 + $folder = &$this->get_folder_by_id($folder_id);
  1636 + if (PEAR::isError($folder))
  1637 + {
  1638 + $response['status_code'] = 1;
  1639 + $response['message'] = $folder->getMessage();
  1640 + return $response;
  1641 + }
1499 1642
1500 - $policies = array(  
1501 - array(  
1502 - 'name' => 'explorer_metadata_capture',  
1503 - 'value' => bool2str($config->get('clientToolPolicies/explorerMetadataCapture')),  
1504 - 'type' => 'boolean'  
1505 - ),  
1506 - array(  
1507 - 'name' => 'office_metadata_capture',  
1508 - 'value' => bool2str($config->get('clientToolPolicies/officeMetadataCapture')),  
1509 - 'type' => 'boolean'  
1510 - ),  
1511 - array(  
1512 - 'name' => 'capture_reasons_delete',  
1513 - 'value' => bool2str($config->get('clientToolPolicies/captureReasonsDelete')),  
1514 - 'type' => 'boolean'  
1515 - ),  
1516 - array(  
1517 - 'name' => 'capture_reasons_checkin',  
1518 - 'value' => bool2str($config->get('clientToolPolicies/captureReasonsCheckin')),  
1519 - 'type' => 'boolean'  
1520 - ),  
1521 - array(  
1522 - 'name' => 'capture_reasons_checkout',  
1523 - 'value' => bool2str($config->get('clientToolPolicies/captureReasonsCheckout')),  
1524 - 'type' => 'boolean'  
1525 - ),  
1526 - array(  
1527 - 'name' => 'capture_reasons_cancelcheckout',  
1528 - 'value' => bool2str($config->get('clientToolPolicies/captureReasonsCancelCheckout')),  
1529 - 'type' => 'boolean'  
1530 - ),  
1531 - array( 1643 + $document = &$folder->add_document($title, $filename, $documenttype, $tempfilename);
  1644 + if (PEAR::isError($document))
  1645 + {
  1646 + $response['status_code'] = 1;
  1647 + $response['message'] = $document->getMessage();
  1648 + return $response;
  1649 + }
  1650 +
  1651 + $detail = $document->get_detail();
  1652 + $detail['status_code'] = 0;
  1653 + $detail['message'] = '';
  1654 + return $detail;
  1655 + }
  1656 +
  1657 + function add_small_document_with_metadata($folder_id, $title, $filename, $documenttype, $base64, $metadata, $sysdata)
  1658 + {
  1659 + $add_result = $this->add_small_document($folder_id, $title, $filename, $documenttype, $base64);
  1660 +
  1661 + if($add_result['status_code'] != 0){
  1662 + return $add_result;
  1663 + }
  1664 +
  1665 + $document_id = $add_result->value['document_id'];
  1666 +
  1667 + $update_result = $this->update_document_metadata($document_id, $metadata, $sysdata);
  1668 + if($update_result['status_code'] != 0){
  1669 + $this->delete_document($document_id, 'Rollback because metadata could not be added');
  1670 + return $update_result;
  1671 + }
  1672 +
  1673 + $document = $this->get_document_by_id($document_id);
  1674 + $result = $document->removeUpdateNotification();
  1675 + if (PEAR::isError($result))
  1676 + {
  1677 + // not much we can do, maybe just log!
  1678 + }
  1679 + $result = $document->mergeWithLastMetadataVersion();
  1680 + if (PEAR::isError($result))
  1681 + {
  1682 + // not much we can do, maybe just log!
  1683 + }
  1684 +
  1685 + return $update_result;
  1686 + }
  1687 +
  1688 + function add_document_with_metadata($folder_id, $title, $filename, $documenttype, $tempfilename, $metadata, $sysdata)
  1689 + {
  1690 + $add_result = $this->add_document($folder_id, $title, $filename, $documenttype, $tempfilename);
  1691 +
  1692 + if($add_result['status_code'] != 0){
  1693 + return $add_result;
  1694 + }
  1695 +
  1696 + $document_id = $add_result->value['document_id'];
  1697 +
  1698 + $update_result = $this->update_document_metadata($document_id, $metadata, $sysdata);
  1699 + if($update_result['status_code'] != 0){
  1700 + $this->delete_document($document_id, 'Rollback because metadata could not be added');
  1701 + return $update_result;
  1702 + }
  1703 +
  1704 + $document = $this->get_document_by_id($document_id);
  1705 + $result = $document->removeUpdateNotification();
  1706 + if (PEAR::isError($result))
  1707 + {
  1708 + // not much we can do, maybe just log!
  1709 + }
  1710 +
  1711 + $result = $document->mergeWithLastMetadataVersion();
  1712 + if (PEAR::isError($result))
  1713 + {
  1714 + // not much we can do, maybe just log!
  1715 + }
  1716 +
  1717 + return $update_result;
  1718 + }
  1719 +
  1720 +
  1721 + /**
  1722 + * Find documents matching the document oem (integration) no
  1723 + *
  1724 + * @param string $oem_no
  1725 + * @param string $detail
  1726 + * @return kt_document_collection_response
  1727 + */
  1728 + function get_documents_detail_by_oem_no($oem_no, $detail)
  1729 + {
  1730 + $documents = $this->get_documents_by_oem_no($oem_no);
  1731 +
  1732 + $collection = array();
  1733 + foreach($documents as $documentId)
  1734 + {
  1735 + $detail = $this->get_document_detail($documentId, $detail);
  1736 + if ($detail['status_code'] != 0)
  1737 + {
  1738 + continue;
  1739 + }
  1740 + $collection[] = $detail->value;
  1741 + }
  1742 +
  1743 + $response=array();
  1744 + $response['status_code'] = 0;
  1745 + $response['message'] = empty($collection) ? _kt('No documents were found matching the specified document no') : '';
  1746 + $response['collection'] = $collection;
  1747 + return $collection;
  1748 + }
  1749 +
  1750 + /**
  1751 + * Adds a document to the repository.
  1752 + *
  1753 + * @param int $folder_id
  1754 + * @param string $title
  1755 + * @param string $filename
  1756 + * @param string $documenttype
  1757 + * @param string $base64
  1758 + * @return kt_document_detail.
  1759 + */
  1760 + function add_small_document($folder_id, $title, $filename, $documenttype, $base64)
  1761 + {
  1762 + $folder = &$this->get_folder_by_id($folder_id);
  1763 + if (PEAR::isError($folder))
  1764 + {
  1765 + $response['status_code'] = 1;
  1766 + $response['message'] = $folder->getMessage();
  1767 + return $response;
  1768 + }
  1769 +
  1770 + $upload_manager = new KTUploadManager();
  1771 + $tempfilename = $upload_manager->store_base64_file($base64);
  1772 + if (PEAR::isError($tempfilename))
  1773 + {
  1774 + $reason = $tempfilename->getMessage();
  1775 + $response['status_code'] = 1;
  1776 + $response['message'] = 'Cannot write to temp file: ' . $tempfilename . ". Reason: $reason";
  1777 + return $response;
  1778 + }
  1779 +
  1780 + // simulate the upload
  1781 + $tempfilename = $upload_manager->uploaded($filename,$tempfilename, 'A');
  1782 +
  1783 + // add the document
  1784 + $document = &$folder->add_document($title, $filename, $documenttype, $tempfilename);
  1785 + if (PEAR::isError($document))
  1786 + {
  1787 + $response['status_code'] = 1;
  1788 + $response['message'] = $document->getMessage();
  1789 + return $response;
  1790 + }
  1791 +
  1792 + $detail = $document->get_detail();
  1793 + $detail['status_code'] = 0;
  1794 + $detail['message'] = '';
  1795 + return $detail;
  1796 + }
  1797 +
  1798 + /**
  1799 + * Does a document checkin.
  1800 + *
  1801 + * @param int $folder_id
  1802 + * @param string $title
  1803 + * @param string $filename
  1804 + * @param string $documenttype
  1805 + * @param string $tempfilename
  1806 + * @return kt_document_detail. status_code can be KTWS_ERR_INVALID_SESSION, KTWS_ERR_INVALID_FOLDER, KTWS_ERR_INVALID_DOCUMENT or KTWS_SUCCESS
  1807 + */
  1808 + function checkin_document($document_id, $filename, $reason, $tempfilename, $major_update )
  1809 + {
  1810 + // we need to add some security to ensure that people don't frig the checkin process to access restricted files.
  1811 + // possibly should change 'tempfilename' to be a hash or id of some sort if this is troublesome.
  1812 + $upload_manager = new KTUploadManager();
  1813 + if (!$upload_manager->is_valid_temporary_file($tempfilename))
  1814 + {
  1815 + $response['status_code'] = 1;
  1816 + $response['message'] = 'Invalid temporary file';
  1817 + return $response;
  1818 + }
  1819 +
  1820 + $document = &$this->get_document_by_id($document_id);
  1821 + if (PEAR::isError($document))
  1822 + {
  1823 + $response['status_code'] = 1;
  1824 + $response['message'] = $document->getMessage();
  1825 + return $response;
  1826 + }
  1827 +
  1828 + // checkin
  1829 + $result = $document->checkin($filename, $reason, $tempfilename, $major_update);
  1830 + if (PEAR::isError($result))
  1831 + {
  1832 + $response['status_code'] = 1;
  1833 + $response['message'] = $result->getMessage();
  1834 + return $response;
  1835 + }
  1836 +
  1837 + // get status after checkin
  1838 + return $this->get_document_detail($document_id);
  1839 + }
  1840 +
  1841 + function checkin_small_document_with_metadata($document_id, $filename, $reason, $base64, $major_update, $metadata, $sysdata)
  1842 + {
  1843 + $add_result = $this->checkin_small_document($document_id, $filename, $reason, $base64, $major_update);
  1844 +
  1845 + if($add_result['status_code'] != 0){
  1846 + return $add_result;
  1847 + }
  1848 +
  1849 + $update_result = $this->update_document_metadata($document_id, $metadata, $sysdata);
  1850 +
  1851 + if($update_result['status_code'] != 0){
  1852 + return $update_result;
  1853 + }
  1854 +
  1855 + $document = $this->get_document_by_id($document_id);
  1856 + $result = $document->removeUpdateNotification();
  1857 + if (PEAR::isError($result))
  1858 + {
  1859 + // not much we can do, maybe just log!
  1860 + }
  1861 + $result = $document->mergeWithLastMetadataVersion();
  1862 + if (PEAR::isError($result))
  1863 + {
  1864 + // not much we can do, maybe just log!
  1865 + }
  1866 +
  1867 + return $update_result;
  1868 + }
  1869 +
  1870 + function checkin_document_with_metadata($document_id, $filename, $reason, $tempfilename, $major_update, $metadata, $sysdata)
  1871 + {
  1872 + $add_result = $this->checkin_document($document_id, $filename, $reason, $tempfilename, $major_update);
  1873 +
  1874 + if($add_result['status_code'] != 0){
  1875 + return $add_result;
  1876 + }
  1877 +
  1878 + $update_result = $this->update_document_metadata($session_id, $document_id, $metadata, $sysdata);
  1879 + if($update_result['status_code'] != 0){
  1880 + return $update_result;
  1881 + }
  1882 +
  1883 + $document = $this->get_document_by_id($document_id);
  1884 + $result = $document->removeUpdateNotification();
  1885 + if (PEAR::isError($result))
  1886 + {
  1887 + // not much we can do, maybe just log!
  1888 + }
  1889 + $result = $document->mergeWithLastMetadataVersion();
  1890 + if (PEAR::isError($result))
  1891 + {
  1892 + // not much we can do, maybe just log!
  1893 + }
  1894 +
  1895 + return $update_result;
  1896 + }
  1897 +
  1898 +
  1899 + /**
  1900 + * Does a document checkin.
  1901 + *
  1902 + * @param int $document_id
  1903 + * @param string $filename
  1904 + * @param string $reason
  1905 + * @param string $base64
  1906 + * @param boolean $major_update
  1907 + * @return kt_document_detail.
  1908 + */
  1909 + function checkin_small_document($document_id, $filename, $reason, $base64, $major_update )
  1910 + {
  1911 + $upload_manager = new KTUploadManager();
  1912 + $tempfilename = $upload_manager->store_base64_file($base64, 'su_');
  1913 + if (PEAR::isError($tempfilename))
  1914 + {
  1915 + $reason = $tempfilename->getMessage();
  1916 + $response['status_code'] = 1;
  1917 + $response['message'] = 'Cannot write to temp file: ' . $tempfilename . ". Reason: $reason";
  1918 + return $response;
  1919 + }
  1920 +
  1921 + // simulate the upload
  1922 + $tempfilename = $upload_manager->uploaded($filename,$tempfilename, 'C');
  1923 +
  1924 + $document = &$this->get_document_by_id($document_id);
  1925 + if (PEAR::isError($document))
  1926 + {
  1927 + $response['status_code'] = 1;
  1928 + $response['message'] = $document->getMessage();
  1929 + return $response;
  1930 + }
  1931 +
  1932 + $result = $document->checkin($filename, $reason, $tempfilename, $major_update);
  1933 + if (PEAR::isError($result))
  1934 + {
  1935 + $response['status_code'] = 1;
  1936 + $response['message'] = $result->getMessage();
  1937 + return $response;
  1938 + }
  1939 + // get status after checkin
  1940 + return $this->get_document_detail($document_id);
  1941 + }
  1942 +
  1943 + /**
  1944 + * Does a document checkout.
  1945 + *
  1946 + * @param int $document_id
  1947 + * @param string $reason
  1948 + * @return kt_document_detail.
  1949 + */
  1950 + function checkout_document($document_id, $reason, $download=true)
  1951 + {
  1952 + $document = &$this->get_document_by_id($document_id);
  1953 + if (PEAR::isError($document))
  1954 + {
  1955 + $response['status_code'] = 1;
  1956 + $response['message'] = $document->getMessage();
  1957 + return $response;
  1958 + }
  1959 +
  1960 + $result = $document->checkout($reason);
  1961 + if (PEAR::isError($result))
  1962 + {
  1963 + $response['status_code'] = 1;
  1964 + $response['message'] = $result->getMessage();
  1965 + return $response;
  1966 + }
  1967 +
  1968 + $session = &$this->get_session();
  1969 +
  1970 + $url = '';
  1971 + if ($download)
  1972 + {
  1973 + $download_manager = new KTDownloadManager();
  1974 + $download_manager->set_session($session->session);
  1975 + $download_manager->cleanup();
  1976 + $url = $download_manager->allow_download($document);
  1977 + }
  1978 +
  1979 + if ($this->version >= 2)
  1980 + {
  1981 + $result = $this->get_document_detail($session_id, $document_id);
  1982 + $result['message'] = $url;
  1983 +
  1984 + return $result;
  1985 + }
  1986 +
  1987 + $response['status_code'] = 0;
  1988 + $response['message'] = $url;
  1989 +
  1990 + return $response;
  1991 + }
  1992 +
  1993 + /**
  1994 + * Does a document checkout.
  1995 + *
  1996 + * @param int $document_id
  1997 + * @param string $reason
  1998 + * @param boolean $download
  1999 + * @return kt_document_detail
  2000 + */
  2001 + function checkout_small_document($document_id, $reason, $download)
  2002 + {
  2003 + $document = &$this->get_document_by_id($document_id);
  2004 + if (PEAR::isError($document))
  2005 + {
  2006 + $response['status_code'] = 1;
  2007 + $response['message'] = $document->getMessage();
  2008 + return $response;
  2009 + }
  2010 +
  2011 + $result = $document->checkout($reason);
  2012 + if (PEAR::isError($result))
  2013 + {
  2014 + $response['status_code'] = 1;
  2015 + $response['message'] = $result->getMessage();
  2016 + return $response;
  2017 + }
  2018 +
  2019 + $content='';
  2020 + if ($download)
  2021 + {
  2022 + $document = $document->document;
  2023 +
  2024 + $oStorage =& KTStorageManagerUtil::getSingleton();
  2025 + $filename = $oStorage->temporaryFile($document);
  2026 +
  2027 + $fp=fopen($filename,'rb');
  2028 + if ($fp === false)
  2029 + {
  2030 + $response['status_code'] = 1;
  2031 + $response['message'] = 'The file is not in the storage system. Please contact an administrator!';
  2032 + return $response;
  2033 + }
  2034 + $content = fread($fp, filesize($filename));
  2035 + fclose($fp);
  2036 + $content = base64_encode($content);
  2037 + }
  2038 +
  2039 + if ($this->version >= 2)
  2040 + {
  2041 + $result = $this->get_document_detail($document_id);
  2042 + $result['message'] = $content;
  2043 +
  2044 + return $result;
  2045 + }
  2046 +
  2047 + $response['status_code'] = 0;
  2048 + $response['message'] = $content;
  2049 + return $response;
  2050 + }
  2051 +
  2052 + /**
  2053 + * Undoes a document checkout.
  2054 + *
  2055 + * @param int $document_id
  2056 + * @param string $reason
  2057 + * @return kt_document_detail.
  2058 + */
  2059 + function undo_document_checkout($document_id, $reason)
  2060 + {
  2061 + $document = &$this->get_document_by_id($document_id);
  2062 + if (PEAR::isError($document))
  2063 + {
  2064 + $response['status_code'] = 1;
  2065 + $response['message'] = $document->getMessage();
  2066 + return $response;
  2067 + }
  2068 +
  2069 + $result = $document->undo_checkout($reason);
  2070 + if (PEAR::isError($result))
  2071 + {
  2072 + $response['status_code'] = 1;
  2073 + $response['message'] = $result->getMessage();
  2074 + return $response;
  2075 + }
  2076 +
  2077 + if ($this->version >= 2)
  2078 + {
  2079 + return $this->get_document_detail($document_id);
  2080 + }
  2081 +
  2082 + $response['status_code'] = 0;
  2083 + return $response;
  2084 + }
  2085 +
  2086 + /**
  2087 + * Returns a reference to a file to be downloaded.
  2088 + *
  2089 + * @param int $document_id
  2090 + * @return kt_response.
  2091 + */
  2092 + function download_document($document_id, $version=null)
  2093 + {
  2094 + $document = &$this->get_document_by_id($document_id);
  2095 + if (PEAR::isError($document))
  2096 + {
  2097 + $response['status_code'] = 1;
  2098 + $response['message'] = $document->getMessage();
  2099 + return $response;
  2100 + }
  2101 +
  2102 + $result = $document->download();
  2103 + if (PEAR::isError($result))
  2104 + {
  2105 + $response['status_code'] = 1;
  2106 + $response['message'] = $result->getMessage();
  2107 + return $response;
  2108 + }
  2109 +
  2110 + $session = &$this->get_session();
  2111 + $download_manager = new KTDownloadManager();
  2112 + $download_manager->set_session($session->session);
  2113 + $download_manager->cleanup();
  2114 + $url = $download_manager->allow_download($document);
  2115 +
  2116 + $response['status_code'] = 0;
  2117 + $response['message'] = $url;
  2118 +
  2119 + return $response;
  2120 + }
  2121 +
  2122 + /**
  2123 + * Returns a reference to a file to be downloaded.
  2124 + *
  2125 + * @param int $document_id
  2126 + * @return kt_response.
  2127 + */
  2128 + function download_small_document($document_id, $version=null)
  2129 + {
  2130 + $document = &$this->get_document_by_id($document_id);
  2131 + if (PEAR::isError($document))
  2132 + {
  2133 + $response['status_code'] = 1;
  2134 + $response['message'] = $document->getMessage();
  2135 + return $response;
  2136 + }
  2137 +
  2138 + $result = $document->download();
  2139 + if (PEAR::isError($result))
  2140 + {
  2141 + $response['status_code'] = 1;
  2142 + $response['message'] = $result->getMessage();
  2143 + return $response;
  2144 + }
  2145 +
  2146 + $content='';
  2147 +
  2148 + $document = $document->document;
  2149 +
  2150 + $oStorage =& KTStorageManagerUtil::getSingleton();
  2151 + $filename = $oStorage->temporaryFile($document);
  2152 +
  2153 + $fp=fopen($filename,'rb');
  2154 + if ($fp === false)
  2155 + {
  2156 + $response['status_code'] = 1;
  2157 + $response['message'] = 'The file is not in the storage system. Please contact an administrator!';
  2158 + return $response;
  2159 + }
  2160 + $content = fread($fp, filesize($filename));
  2161 + fclose($fp);
  2162 + $content = base64_encode($content);
  2163 +
  2164 +
  2165 + $response['status_code'] = 0;
  2166 + $response['message'] = $content;
  2167 +
  2168 + return $response;
  2169 + }
  2170 +
  2171 + /**
  2172 + * Deletes a document.
  2173 + *
  2174 + * @param int $document_id
  2175 + * @param string $reason
  2176 + * @return kt_response
  2177 + */
  2178 + function delete_document($document_id, $reason)
  2179 + {
  2180 + $document = &$this->get_document_by_id($document_id);
  2181 + if (PEAR::isError($document))
  2182 + {
  2183 + $response['status_code'] = 1;
  2184 + $response['message'] = $document->getMessage();
  2185 + return $response;
  2186 + }
  2187 +
  2188 + $result = $document->delete($reason);
  2189 + if (PEAR::isError($result))
  2190 + {
  2191 + $response['status_code'] = 1;
  2192 + $response['message'] = $result->getMessage();
  2193 + return $response;
  2194 + }
  2195 +
  2196 + $response['status_code'] = 0;
  2197 + return $response;
  2198 +
  2199 + }
  2200 +
  2201 + /**
  2202 + * Change the document type.
  2203 + *
  2204 + * @param int $document_id
  2205 + * @param string $documenttype
  2206 + * @return array
  2207 + */
  2208 + function change_document_type($document_id, $documenttype)
  2209 + {
  2210 + $document = &$this->get_document_by_id($document_id);
  2211 + if (PEAR::isError($document))
  2212 + {
  2213 + $response['status_code'] = 1;
  2214 + $response['message'] = $document->getMessage();
  2215 + return $response;
  2216 + }
  2217 +
  2218 + $result = $document->change_document_type($documenttype);
  2219 + if (PEAR::isError($result))
  2220 + {
  2221 + $response['status_code'] = 1;
  2222 + $response['message'] = $result->getMessage();
  2223 + return $response;
  2224 + }
  2225 +
  2226 + return $this->get_document_detail($document_id);
  2227 +
  2228 + }
  2229 +
  2230 + /**
  2231 + * Copy a document to another folder.
  2232 + *
  2233 + * @param int $document_id
  2234 + * @param int $folder_id
  2235 + * @param string $reason
  2236 + * @param string $newtitle
  2237 + * @param string $newfilename
  2238 + * @return array
  2239 + */
  2240 + function copy_document($document_id,$folder_id,$reason,$newtitle=null,$newfilename=null)
  2241 + {
  2242 + $document = &$this->get_document_by_id($document_id);
  2243 + if (PEAR::isError($document))
  2244 + {
  2245 + $response['status_code'] = 1;
  2246 + $response['message'] = $document->getMessage();
  2247 + return $response;
  2248 + }
  2249 +
  2250 + $tgt_folder = &$this->get_folder_by_id($folder_id);
  2251 + if (PEAR::isError($tgt_folder))
  2252 + {
  2253 + $response['status_code'] = 1;
  2254 + $response['message'] = $tgt_folder->getMessage();
  2255 + return $response;
  2256 + }
  2257 +
  2258 + $result = $document->copy($tgt_folder, $reason, $newtitle, $newfilename);
  2259 + if (PEAR::isError($result))
  2260 + {
  2261 + $response['status_code'] = 1;
  2262 + $response['message'] = $result->getMessage();
  2263 + return $response;
  2264 + }
  2265 +
  2266 + $new_document_id = $result->documentid;
  2267 + return $this->get_document_detail($new_document_id, '');
  2268 +
  2269 + }
  2270 +
  2271 + /**
  2272 + * Move a folder to another location.
  2273 + *
  2274 + * @param int $document_id
  2275 + * @param int $folder_id
  2276 + * @param string $reason
  2277 + * @param string $newtitle
  2278 + * @param string $newfilename
  2279 + * @return array
  2280 + */
  2281 + function move_document($document_id,$folder_id,$reason,$newtitle=null,$newfilename=null)
  2282 + {
  2283 + $document = &$this->get_document_by_id($document_id);
  2284 + if (PEAR::isError($document))
  2285 + {
  2286 + $response['status_code'] = 1;
  2287 + $response['message'] = $document->getMessage();
  2288 + return $response;
  2289 + }
  2290 +
  2291 + if ($document->ktapi_folder->folderid != $folder_id)
  2292 + {
  2293 + // we only have to do something if the source and target folders are different
  2294 +
  2295 + $tgt_folder = &$this->get_folder_by_id($folder_id);
  2296 + if (PEAR::isError($tgt_folder))
  2297 + {
  2298 + $response['status_code'] = 1;
  2299 + $response['message'] = $tgt_folder->getMessage();
  2300 + return $response;
  2301 + }
  2302 +
  2303 + $result = $document->move($tgt_folder, $reason, $newtitle, $newfilename);
  2304 + if (PEAR::isError($result))
  2305 + {
  2306 + $response['status_code'] = 1;
  2307 + $response['message'] = $result->getMessage();
  2308 + return $response;
  2309 + }
  2310 +
  2311 + }
  2312 +
  2313 +
  2314 + return $this->get_document_detail($document_id, '');
  2315 +
  2316 + }
  2317 +
  2318 + /**
  2319 + * Changes the document title.
  2320 + *
  2321 + * @param int $document_id
  2322 + * @param string $newtitle
  2323 + * @return arry
  2324 + */
  2325 + function rename_document_title($document_id,$newtitle)
  2326 + {
  2327 + $document = &$this->get_document_by_id($document_id);
  2328 + if (PEAR::isError($document))
  2329 + {
  2330 + $response['status_code'] = 1;
  2331 + $response['message'] = $document->getMessage();
  2332 + return $response;
  2333 + }
  2334 +
  2335 + $result = $document->rename($newtitle);
  2336 + if (PEAR::isError($result))
  2337 + {
  2338 + $response['status_code'] = 1;
  2339 + $response['message'] = $result->getMessage();
  2340 + return $response;
  2341 + }
  2342 +
  2343 +
  2344 + return $this->get_document_detail($document_id);
  2345 +
  2346 + }
  2347 +
  2348 + /**
  2349 + * Renames the document filename.
  2350 + *
  2351 + * @param int $document_id
  2352 + * @param string $newfilename
  2353 + * @return array
  2354 + */
  2355 + function rename_document_filename($document_id,$newfilename)
  2356 + {
  2357 + $document = &$this->get_document_by_id($document_id);
  2358 + if (PEAR::isError($document))
  2359 + {
  2360 + $response['status_code'] = 1;
  2361 + $response['message'] = $document->getMessage();
  2362 + return $response;
  2363 + }
  2364 +
  2365 + $result = $document->renameFile($newfilename);
  2366 + if (PEAR::isError($result))
  2367 + {
  2368 + $response['status_code'] = 1;
  2369 + $response['message'] = $result->getMessage();
  2370 + return $response;
  2371 + }
  2372 +
  2373 + return $this->get_document_detail($document_id);
  2374 +
  2375 + }
  2376 +
  2377 + /**
  2378 + * Changes the owner of a document.
  2379 + *
  2380 + * @param int $document_id
  2381 + * @param string $username
  2382 + * @param string $reason
  2383 + * @return array
  2384 + */
  2385 + function change_document_owner($document_id, $username, $reason)
  2386 + {
  2387 + $document = &$this->get_document_by_id($document_id);
  2388 + if (PEAR::isError($document))
  2389 + {
  2390 + $response['status_code'] = 1;
  2391 + $response['message'] = $document->getMessage();
  2392 + return $response;
  2393 + }
  2394 +
  2395 + $result = $document->change_owner($username, $reason);
  2396 + if (PEAR::isError($result))
  2397 + {
  2398 + $response['status_code'] = 1;
  2399 + $response['message'] = $result->getMessage();
  2400 + return $response;
  2401 + }
  2402 +
  2403 +
  2404 +
  2405 + return $this->get_document_detail($document_id);
  2406 +
  2407 + }
  2408 +
  2409 + /**
  2410 + * Start a workflow on a document
  2411 + *
  2412 + * @param int $document_id
  2413 + * @param string $workflow
  2414 + * @return array
  2415 + */
  2416 + function start_document_workflow($document_id,$workflow)
  2417 + {
  2418 + $document = &$this->get_document_by_id($document_id);
  2419 + if (PEAR::isError($document))
  2420 + {
  2421 + $response['status_code'] = 1;
  2422 + $response['message'] = $document->getMessage();
  2423 + return $response;
  2424 + }
  2425 +
  2426 + $result = &$document->start_workflow($workflow);
  2427 + if (PEAR::isError($result))
  2428 + {
  2429 + $response['status_code'] = 1;
  2430 + $response['message'] = $result->getMessage();
  2431 + return $response;
  2432 + }
  2433 +
  2434 +
  2435 + return $this->get_document_detail($document_id);
  2436 + }
  2437 +
  2438 + /**
  2439 + * Removes the workflow process on a document.
  2440 + *
  2441 + * @param int $document_id
  2442 + * @return array
  2443 + */
  2444 + function delete_document_workflow($document_id)
  2445 + {
  2446 + $document = &$this->get_document_by_id($document_id);
  2447 + if (PEAR::isError($document))
  2448 + {
  2449 + $response['status_code'] = 1;
  2450 + $response['message'] = $document->getMessage();
  2451 + return $response;
  2452 + }
  2453 +
  2454 + $result = $document->delete_workflow();
  2455 + if (PEAR::isError($result))
  2456 + {
  2457 + $response['status_code'] = 1;
  2458 + $response['message'] = $result->getMessage();
  2459 + return $response;
  2460 + }
  2461 +
  2462 +
  2463 + return $this->get_document_detail($document_id);
  2464 + }
  2465 +
  2466 + /**
  2467 + * Starts a transitions on a document with a workflow.
  2468 + *
  2469 + * @param int $document_id
  2470 + * @param string $transition
  2471 + * @param string $reason
  2472 + * @return array
  2473 + */
  2474 + function perform_document_workflow_transition($document_id,$transition,$reason)
  2475 + {
  2476 + $document = &$this->get_document_by_id($document_id);
  2477 + if (PEAR::isError($document))
  2478 + {
  2479 + $response['status_code'] = 1;
  2480 + $response['message'] = $document->getMessage();
  2481 + return $response;
  2482 + }
  2483 +
  2484 + $result = $document->perform_workflow_transition($transition,$reason);
  2485 + if (PEAR::isError($result))
  2486 + {
  2487 + $response['status_code'] = 1;
  2488 + $response['message'] = $result>getMessage();
  2489 + return $response;
  2490 + }
  2491 +
  2492 + return $this->get_document_detail($document_id);
  2493 +
  2494 + }
  2495 +
  2496 +
  2497 +
  2498 + /**
  2499 + * Returns the metadata on a document.
  2500 + *
  2501 + * @param int $document_id
  2502 + * @return array
  2503 + */
  2504 + function get_document_metadata($document_id)
  2505 + {
  2506 + $document = &$this->get_document_by_id($document_id);
  2507 + if (PEAR::isError($document))
  2508 + {
  2509 + $response['status_code'] = 1;
  2510 + $response['message'] = $document->getMessage();
  2511 + return $response;
  2512 + }
  2513 +
  2514 + $metadata = $document->get_metadata();
  2515 +
  2516 + $num_metadata=count($metadata);
  2517 + for($i=0;$i<$num_metadata;$i++)
  2518 + {
  2519 + $num_fields = count($metadata[$i]['fields']);
  2520 + for($j=0;$j<$num_fields;$j++)
  2521 + {
  2522 + $selection=$metadata[$i]['fields'][$j]['selection'];
  2523 + $new = array();
  2524 +
  2525 + foreach($selection as $item)
  2526 + {
  2527 + $new[] = array(
  2528 + 'id'=>null,
  2529 + 'name'=>$item,
  2530 + 'value'=>$item,
  2531 + 'parent_id'=>null
  2532 + );
  2533 + }
  2534 + $metadata[$i]['fields'][$j]['selection'] = $new;
  2535 + }
  2536 + }
  2537 +
  2538 + $response['status_code'] = 0;
  2539 + $response['result'] = $metadata;
  2540 + return $response;
  2541 + }
  2542 +
  2543 + /**
  2544 + * Updates document metadata.
  2545 + *
  2546 + * @param int $document_id
  2547 + * @param array $metadata
  2548 + * @return array
  2549 + */
  2550 + function update_document_metadata($document_id,$metadata, $sysdata=null)
  2551 + {
  2552 +
  2553 + $document = &$this->get_document_by_id($document_id);
  2554 + if (PEAR::isError($document))
  2555 + {
  2556 + $response['status_code'] = 1;
  2557 + $response['message'] = $document->getMessage();
  2558 + return $response;
  2559 + }
  2560 +
  2561 + $result = $document->update_metadata($metadata);
  2562 + if (PEAR::isError($result))
  2563 + {
  2564 + $response['status_code'] = 1;
  2565 + $response['message'] = $result->getMessage();
  2566 + return $response;
  2567 + }
  2568 +
  2569 +
  2570 + $result = $document->update_sysdata($sysdata);
  2571 + if (PEAR::isError($result))
  2572 + {
  2573 + $response['status_code'] = 1;
  2574 + $response['message'] = $result->getMessage();
  2575 + return $response;
  2576 + }
  2577 +
  2578 + return $this->get_document_detail($document_id, 'M');
  2579 +
  2580 + }
  2581 +
  2582 + /**
  2583 + * Returns a list of available transitions on a give document with a workflow.
  2584 + *
  2585 + * @param int $document_id
  2586 + * @return array
  2587 + */
  2588 + function get_document_workflow_transitions($document_id)
  2589 + {
  2590 +
  2591 + $document = &$this->get_document_by_id($document_id);
  2592 + if (PEAR::isError($document))
  2593 + {
  2594 + $response['status_code'] = 1;
  2595 + $response['message'] = $document->getMessage();
  2596 + return $response;
  2597 + }
  2598 +
  2599 + $result = $document->get_workflow_transitions();
  2600 + if (PEAR::isError($result))
  2601 + {
  2602 + $response['status_code'] = 1;
  2603 + $response['message'] = $result->getMessage();
  2604 + return $response;
  2605 + }
  2606 +
  2607 + $response['status_code'] = 0;
  2608 + $response['transitions'] = $result;
  2609 + return $response;
  2610 + }
  2611 +
  2612 + /**
  2613 + * Returns the current state that the document is in.
  2614 + *
  2615 + * @param int $document_id
  2616 + * @return array
  2617 + */
  2618 + function get_document_workflow_state($document_id)
  2619 + {
  2620 + $document = &$this->get_document_by_id($document_id);
  2621 + if (PEAR::isError($document))
  2622 + {
  2623 + $response['status_code'] = 1;
  2624 + $response['message'] = $document->getMessage();
  2625 + return $response;
  2626 + }
  2627 +
  2628 + $result = $document->get_workflow_state();
  2629 + if (PEAR::isError($result))
  2630 + {
  2631 + $response['status_code'] = 1;
  2632 + $response['message'] = $result->getMessage();
  2633 + return $response;
  2634 + }
  2635 +
  2636 + $response['status_code'] = 0;
  2637 + $response['message'] = $result;
  2638 + return $response;
  2639 + }
  2640 +
  2641 + /**
  2642 + * Returns the document transaction history.
  2643 + *
  2644 + * @param int $document_id
  2645 + * @return array
  2646 + */
  2647 + function get_document_transaction_history($document_id)
  2648 + {
  2649 +
  2650 + $document = &$this->get_document_by_id($document_id);
  2651 + if (PEAR::isError($document))
  2652 + {
  2653 + $response['status_code'] = 1;
  2654 + $response['message'] = $document->getMessage();
  2655 + return $response;
  2656 + }
  2657 +
  2658 + $result = $document->get_transaction_history();
  2659 + if (PEAR::isError($result))
  2660 + {
  2661 + $response['status_code'] = 1;
  2662 + $response['message'] = $result->getMessage();
  2663 + return $response;
  2664 + }
  2665 +
  2666 + $response['status_code'] = 0;
  2667 + $response['history'] = $result;
  2668 + return $response;
  2669 + }
  2670 +
  2671 + /**
  2672 + * Returns the version history.
  2673 + *
  2674 + * @param int $document_id
  2675 + * @return kt_document_version_history_response
  2676 + */
  2677 + function get_document_version_history($document_id)
  2678 + {
  2679 + $document = &$this->get_document_by_id($document_id);
  2680 + if (PEAR::isError($document))
  2681 + {
  2682 + $response['status_code'] = 1;
  2683 + $response['message'] = $document->getMessage();
  2684 + return $response;
  2685 + }
  2686 +
  2687 + $result = $document->get_version_history();
  2688 + if (PEAR::isError($result))
  2689 + {
  2690 + $response['status_code'] = 1;
  2691 + $response['message'] = $result->getMessage();
  2692 + return $response;
  2693 + }
  2694 +
  2695 + $response['status_code'] = 0;
  2696 + $response['history'] = $result;
  2697 + return $response;
  2698 + }
  2699 +
  2700 + /**
  2701 + * Returns a list of linked documents
  2702 + *
  2703 + * @param string $session_id
  2704 + * @param int $document_id
  2705 + * @return array
  2706 + *
  2707 + *
  2708 + */
  2709 + function get_document_links($document_id)
  2710 + {
  2711 + $response['status_code'] = 1;
  2712 + $response['message'] = '';
  2713 + $response['parent_document_id'] = (int) $document_id;
  2714 + $response['links'] = array();
  2715 +
  2716 + $document = &$this->get_document_by_id($document_id);
  2717 + if (PEAR::isError($document))
  2718 + {
  2719 + $response['status_code'] = 1;
  2720 + $response['message'] = $document->getMessage();
  2721 + return $response;
  2722 + }
  2723 +
  2724 + $links = $document->get_linked_documents();
  2725 +
  2726 + $response['status_code'] = 0;
  2727 + $response['links'] = $links;
  2728 + return $response;
  2729 + }
  2730 +
  2731 +
  2732 + /**
  2733 + * Removes a link between documents
  2734 + *
  2735 + * @param int $parent_document_id
  2736 + * @param int $child_document_id
  2737 + * @return kt_response
  2738 + */
  2739 + function unlink_documents($parent_document_id, $child_document_id)
  2740 + {
  2741 + $document = &$this->get_document_by_id($parent_document_id);
  2742 + if (PEAR::isError($document))
  2743 + {
  2744 + $response['status_code'] = 1;
  2745 + $response['message'] = $document->getMessage();
  2746 + return $response;
  2747 + }
  2748 +
  2749 + $child_document = &$this->get_document_by_id($child_document_id);
  2750 + if (PEAR::isError($child_document))
  2751 + {
  2752 + $response['status_code'] = 1;
  2753 + $response['message'] = $child_document->getMessage();
  2754 + return $response;
  2755 + }
  2756 +
  2757 + $result = $document->unlink_document($child_document);
  2758 + if (PEAR::isError($result))
  2759 + {
  2760 + $response['status_code'] = 1;
  2761 + $response['message'] = $result->getMessage();
  2762 + return $response;
  2763 + }
  2764 +
  2765 + $response['status_code'] = 0;
  2766 + return $response;
  2767 + }
  2768 +
  2769 + /**
  2770 + * Creates a link between documents
  2771 + *
  2772 + * @param int $parent_document_id
  2773 + * @param int $child_document_id
  2774 + * @param string $type
  2775 + * @return boolean
  2776 + */
  2777 + function link_documents($parent_document_id, $child_document_id, $type)
  2778 + {
  2779 +
  2780 + $document = &$this->get_document_by_id($parent_document_id);
  2781 + if (PEAR::isError($document))
  2782 + {
  2783 + $response['status_code'] = 1;
  2784 + $response['message'] = $document->getMessage();
  2785 + return $response;
  2786 + }
  2787 +
  2788 + $child_document = &$this->get_document_by_id($child_document_id);
  2789 + if (PEAR::isError($child_document))
  2790 + {
  2791 + $response['status_code'] = 1;
  2792 + $response['message'] = $child_document->getMessage();
  2793 + return $response;
  2794 + }
  2795 +
  2796 + $result = $document->link_document($child_document, $type);
  2797 + if (PEAR::isError($result))
  2798 + {
  2799 + $response['status_code'] = 1;
  2800 + $response['message'] = $result->getMessage();
  2801 + return $response;
  2802 + }
  2803 +
  2804 + $response['status_code'] = 0;
  2805 + return $response;
  2806 + }
  2807 +
  2808 + /**
  2809 + * Retrieves the server policies for this server
  2810 + *
  2811 + * @return array
  2812 + */
  2813 + function get_client_policies($client=null)
  2814 + {
  2815 + $config = KTConfig::getSingleton();
  2816 +
  2817 + $policies = array(
  2818 + array(
  2819 + 'name' => 'explorer_metadata_capture',
  2820 + 'value' => bool2str($config->get('clientToolPolicies/explorerMetadataCapture')),
  2821 + 'type' => 'boolean'
  2822 + ),
  2823 + array(
  2824 + 'name' => 'office_metadata_capture',
  2825 + 'value' => bool2str($config->get('clientToolPolicies/officeMetadataCapture')),
  2826 + 'type' => 'boolean'
  2827 + ),
  2828 + array(
  2829 + 'name' => 'capture_reasons_delete',
  2830 + 'value' => bool2str($config->get('clientToolPolicies/captureReasonsDelete')),
  2831 + 'type' => 'boolean'
  2832 + ),
  2833 + array(
  2834 + 'name' => 'capture_reasons_checkin',
  2835 + 'value' => bool2str($config->get('clientToolPolicies/captureReasonsCheckin')),
  2836 + 'type' => 'boolean'
  2837 + ),
  2838 + array(
  2839 + 'name' => 'capture_reasons_checkout',
  2840 + 'value' => bool2str($config->get('clientToolPolicies/captureReasonsCheckout')),
  2841 + 'type' => 'boolean'
  2842 + ),
  2843 + array(
  2844 + 'name' => 'capture_reasons_cancelcheckout',
  2845 + 'value' => bool2str($config->get('clientToolPolicies/captureReasonsCancelCheckout')),
  2846 + 'type' => 'boolean'
  2847 + ),
  2848 + array(
1532 'name' => 'capture_reasons_copyinkt', 2849 'name' => 'capture_reasons_copyinkt',
1533 'value' => bool2str($config->get('clientToolPolicies/captureReasonsCopyInKT')), 2850 'value' => bool2str($config->get('clientToolPolicies/captureReasonsCopyInKT')),
1534 'type' => 'boolean' 2851 'type' => 'boolean'
@@ -1545,11 +2862,14 @@ class KTAPI @@ -1545,11 +2862,14 @@ class KTAPI
1545 ), 2862 ),
1546 ); 2863 );
1547 2864
1548 -  
1549 2865
1550 - return $response['policies']; 2866 + $response['policies'] = $policies;
  2867 + $response['message'] = _kt('Knowledgetree client policies retrieval succeeded.');
  2868 + $response['status_code'] = 0;
  2869 +
  2870 + return $response;
1551 } 2871 }
1552 - 2872 +
1553 /** 2873 /**
1554 * This is the search interface 2874 * This is the search interface
1555 * 2875 *
@@ -1559,16 +2879,26 @@ class KTAPI @@ -1559,16 +2879,26 @@ class KTAPI
1559 */ 2879 */
1560 function search($query, $options) 2880 function search($query, $options)
1561 { 2881 {
  2882 + $response['status_code'] = 1;
  2883 + $response['hits'] = array();
  2884 +
1562 $results = processSearchExpression($query); 2885 $results = processSearchExpression($query);
1563 if (PEAR::isError($results)) 2886 if (PEAR::isError($results))
1564 { 2887 {
1565 - return new KTAPI_Error($results); 2888 + $response['message'] = _kt('Could not process query.') . $results->getMessage();
  2889 + return $response;
1566 } 2890 }
1567 -  
1568 - return $results; 2891 +
  2892 + $response['message'] = '';
  2893 + $response['status_code'] = 0;
  2894 + $response['hits'] = $results;
  2895 +
  2896 + return $response;
1569 } 2897 }
1570 2898
1571 } 2899 }
  2900 +
  2901 +
1572 2902
1573 /** 2903 /**
1574 * This class handles the saved search functionality within the API 2904 * This class handles the saved search functionality within the API