diff --git a/dmsctl.vbs b/dmsctl.vbs
index 4ce0202..e32f011 100644
--- a/dmsctl.vbs
+++ b/dmsctl.vbs
@@ -159,20 +159,20 @@ Else
If (NOT isServiceStarted(svcName)) Then
If (NOT startService(svcName)) Then
isSuccess = FALSE
- writeLog "The " & KTOFFICE & " KnowledgeTree service could not be started. Result Code: " & lastErrorCode
+ writeLog "The " & KTOFFICE & " KnowledgeTree service could not be started. Result Code: " & getServiceErrorMessage(lastErrorCode)
Else
writeLog "The " & KTOFFICE & " KnowledgeTree service was successfully started"
End If
writeLog "Successfully started " & KTOFFICE
Else
- writeLog KTOFFICE & " already started. Result Code: " & lastErrorCode
+ writeLog KTOFFICE & " already started. Result Code: " & getServiceErrorMessage(lastErrorCode)
End If
If (isSuccess) Then
Wscript.Echo "The " & KTOFFICE & " KnowledgeTree service was successfully started"
Else
- Wscript.Echo "The " & KTOFFICE & " KnowledgeTree service could not be started. Result Code: " & lastErrorCode
+ Wscript.Echo "The " & KTOFFICE & " KnowledgeTree service could not be started. Result Code: " & getServiceErrorMessage(lastErrorCode)
End If
Case "scheduler"
@@ -181,20 +181,20 @@ Else
If (NOT isServiceStarted(svcName)) Then
If (NOT startService(svcName)) Then
isSuccess = FALSE
- writeLog "The " & KTSCHEDULER & " KnowledgeTree service could not be started. Result Code: " & lastErrorCode
+ writeLog "The " & KTSCHEDULER & " KnowledgeTree service could not be started. Result Code: " & getServiceErrorMessage(lastErrorCode)
Else
writeLog "The " & KTSCHEDULER & " KnowledgeTree service was successfully started"
End If
writeLog "Successfully started " & KTSCHEDULER
Else
- writeLog KTSCHEDULER & " already started. Result Code: " & lastErrorCode
+ writeLog KTSCHEDULER & " already started. Result Code: " & getServiceErrorMessage(lastErrorCode)
End If
If (isSuccess) Then
Wscript.Echo "The " & KTSCHEDULER & " KnowledgeTree service was successfully started"
Else
- Wscript.Echo "The " & KTSCHEDULER & " KnowledgeTree service could not be started. Result Code: " & lastErrorCode
+ Wscript.Echo "The " & KTSCHEDULER & " KnowledgeTree service could not be started. Result Code: " & getServiceErrorMessage(lastErrorCode)
End If
Case "lucene"
@@ -203,20 +203,20 @@ Else
If (NOT isServiceStarted(svcName)) Then
If (NOT startService(svcName)) Then
isSuccess = false
- writeLog "The " & KTLUCENE & " KnowledgeTree service could not be started. Result Code: " & lastErrorCode
+ writeLog "The " & KTLUCENE & " KnowledgeTree service could not be started. Result Code: " & getServiceErrorMessage(lastErrorCode)
Else
writeLog "The " & KTLUCENE & " KnowledgeTree service was successfully started"
End If
writeLog "Successfully started " & KTLUCENE
Else
- writeLog KTLUCENE & " already started. Result Code: " & lastErrorCode
+ writeLog KTLUCENE & " already started. Result Code: " & getServiceErrorMessage(lastErrorCode)
End If
If (isSuccess) Then
Wscript.Echo "The " & KTLUCENE & " KnowledgeTree service was successfully started"
Else
- Wscript.Echo "The " & KTLUCENE & " KnowledgeTree service could not be started. Result Code: " & lastErrorCode
+ Wscript.Echo "The " & KTLUCENE & " KnowledgeTree service could not be started. Result Code: " & getServiceErrorMessage(lastErrorCode)
End If
End Select
Else
@@ -226,30 +226,36 @@ Else
If (NOT isServiceStarted(svcName)) Then
If (NOT startService(svcName)) Then
isSuccess = false
- End If
- writeLog "Successfully started " & KTOFFICE
+ writeLog "Couldn't start. " & KTOFFICE & " Result Code: " & getServiceErrorMessage(lastErrorCode)
Else
- writeLog KTOFFICE & " already started. Result Code: " & lastErrorCode
+ writeLog "Successfully started " & KTOFFICE
+ End If
+ Else
+ writeLog KTOFFICE & " already started. Result Code: " & getServiceErrorMessage(lastErrorCode)
End If
svcName = KTSCHEDULER
If (NOT isServiceStarted(svcName)) Then
If (NOT startService(svcName)) Then
isSuccess = false
- End If
- writeLog "Successfully started " & KTSCHEDULER
+ writeLog "Couldn't start " & KTSCHEDULER & " Result Code: " & getServiceErrorMessage(lastErrorCode)
Else
- writeLog KTSCHEDULER & " already started. Result Code: " & lastErrorCode
+ writeLog "Successfully started " & KTSCHEDULER
+ End If
+ Else
+ writeLog KTSCHEDULER & " already started. Result Code: " & getServiceErrorMessage(lastErrorCode)
End If
svcName = KTLUCENE
If (NOT isServiceStarted(svcName)) Then
If (NOT startService(svcName)) Then
isSuccess = false
- End If
- writeLog "Successfully started " & KTLUCENE
+ writeLog "Couldn't start " & KTLUCENE & " Result Code: " & getServiceErrorMessage(lastErrorCode)
Else
- writeLog KTLUCENE & " already started. Result Code: " & lastErrorCode
+ writeLog "Successfully started " & KTLUCENE
+ End If
+ Else
+ writeLog KTLUCENE & " already started. Result Code: " & getServiceErrorMessage(lastErrorCode)
End If
If (isSuccess) Then
@@ -267,20 +273,20 @@ Else
If (isServiceStarted(svcName)) Then
If (NOT stopService(svcName)) Then
isSuccess = false
- writeLog "The " & KTOFFICE & " KnowledgeTree service could not be stopped. Result Code: " & lastErrorCode
+ writeLog "The " & KTOFFICE & " KnowledgeTree service could not be stopped. Result Code: " & getServiceErrorMessage(lastErrorCode)
Else
writeLog "The " & KTOFFICE & " KnowledgeTree service was successfully stopped"
End If
writeLog "Successfully stopped " & KTOFFICE
Else
- writeLog KTOFFICE & " already stopped. Result Code: " & lastErrorCode
+ writeLog KTOFFICE & " already stopped. Result Code: " & getServiceErrorMessage(lastErrorCode)
End If
If (isSuccess) Then
Wscript.Echo "The " & KTOFFICE & " KnowledgeTree service was successfully stopped"
Else
- Wscript.Echo "The " & KTOFFICE & " KnowledgeTree service could not be stopped. Result Code: " & lastErrorCode
+ Wscript.Echo "The " & KTOFFICE & " KnowledgeTree service could not be stopped. Result Code: " & getServiceErrorMessage(lastErrorCode)
End If
Case "scheduler"
@@ -289,20 +295,20 @@ Else
If (isServiceStarted(svcName)) Then
If (NOT stopService(svcName)) Then
isSuccess = false
- writeLog "The " & KTSCHEDULER & " KnowledgeTree service could not be stopped. Result Code: " & lastErrorCode
+ writeLog "The " & KTSCHEDULER & " KnowledgeTree service could not be stopped. Result Code: " & getServiceErrorMessage(lastErrorCode)
Else
writeLog "The " & KTSCHEDULER & " KnowledgeTree service was successfully stopped"
End If
writeLog "Successfully stopped " & KTSCHEDULER
Else
- writeLog KTSCHEDULER & " already stopped. Result Code: " & lastErrorCode
+ writeLog KTSCHEDULER & " already stopped. Result Code: " & getServiceErrorMessage(lastErrorCode)
End If
If (isSuccess) Then
Wscript.Echo "The " & KTSCHEDULER & " KnowledgeTree service was successfully stopped"
Else
- Wscript.Echo "The " & KTSCHEDULER & " KnowledgeTree service could not be stopped. Result Code: " & lastErrorCode
+ Wscript.Echo "The " & KTSCHEDULER & " KnowledgeTree service could not be stopped. Result Code: " & getServiceErrorMessage(lastErrorCode)
End If
Case "lucene"
@@ -311,20 +317,20 @@ Else
If (isServiceStarted(svcName)) Then
If (NOT stopService(svcName)) Then
isSuccess = false
- writeLog "The " & KTLUCENE & " KnowledgeTree service could not be stopped. Result Code: " & lastErrorCode
+ writeLog "The " & KTLUCENE & " KnowledgeTree service could not be stopped. Result Code: " & getServiceErrorMessage(lastErrorCode)
Else
writeLog "The " & KTLUCENE & " KnowledgeTree service was successfully stopped"
End If
writeLog "Successfully stopped " & KTLUCENE
Else
- writeLog KTLUCENE & " already stopped. Result Code: " & lastErrorCode
+ writeLog KTLUCENE & " already stopped. Result Code: " & getServiceErrorMessage(lastErrorCode)
End If
If (isSuccess) Then
Wscript.Echo "The " & KTLUCENE & " KnowledgeTree service was successfully stopped"
Else
- Wscript.Echo "The " & KTLUCENE & " KnowledgeTree service could not be stopped. Result Code: " & lastErrorCode
+ Wscript.Echo "The " & KTLUCENE & " KnowledgeTree service could not be stopped. Result Code: " & getServiceErrorMessage(lastErrorCode)
End If
End Select
Else
@@ -335,30 +341,36 @@ Else
If (isServiceStarted(svcName)) Then
If (NOT stopService(svcName)) Then
isSuccess = false
- End If
- writeLog "Successfully stopped " & KTOFFICE
+ writeLog "Couldn't stop." & KTOFFICE & " Result Code: " & getServiceErrorMessage(lastErrorCode)
Else
- writeLog KTOFFICE & " already stopped. Result Code: " & lastErrorCode
+ writeLog "Successfully stopped " & KTOFFICE
+ End If
+ Else
+ writeLog KTOFFICE & " already stopped. Result Code: " & getServiceErrorMessage(lastErrorCode)
End If
svcName = KTSCHEDULER
If (isServiceStarted(svcName)) Then
If (NOT stopService(svcName)) Then
isSuccess = false
- End If
- writeLog "Successfully stopped " & KTSCHEDULER
+ writeLog "Couldn't stop." & KTSCHEDULER & " Result Code: " & getServiceErrorMessage(lastErrorCode)
Else
- writeLog KTSCHEDULER & " already stopped. Result Code: " & lastErrorCode
+ writeLog "Successfully stopped " & KTSCHEDULER
+ End If
+ Else
+ writeLog KTSCHEDULER & " already stopped. Result Code: " & getServiceErrorMessage(lastErrorCode)
End If
svcName = KTLUCENE
If (isServiceStarted(svcName)) Then
If (NOT stopService(svcName)) Then
isSuccess = false
- End If
- writeLog "Successfully stopped " & KTLUCENE
+ writeLog "Couldn't stop." & KTLUCENE & " Result Code: " & getServiceErrorMessage(lastErrorCode)
Else
- writeLog KTLUCENE & " already stopped. Result Code: " & lastErrorCode
+ writeLog "Successfully stopped " & KTLUCENE
+ End If
+ Else
+ writeLog KTLUCENE & " already stopped. Result Code: " & getServiceErrorMessage(lastErrorCode)
End If
If (isSuccess) Then
@@ -669,3 +681,59 @@ Public Sub writeLog(ByVal strMessage)
objTextFile.Close
End Sub
+Public Function getServiceErrorMessage(ByVal errCode)
+ Select Case errCode
+ Case SVC_SUCCESS
+ getServiceErrorMessage = "Success"
+ Case SVC_NOT_SUPPORTED
+ getServiceErrorMessage = "Not Supported"
+ Case SVC_ACCESS_DENIED
+ getServiceErrorMessage = "Access Denied"
+ Case SVC_DEPENDENT_SERVICES_RUNNING
+ getServiceErrorMessage = "Dependent Services Running"
+ Case SVC_INVALID_SERVICE_CONTROL
+ getServiceErrorMessage = "Invalid Service Control"
+ Case SVC_SERVICE_CANNOT_ACCEPT_CONTROL
+ getServiceErrorMessage = "Service Cannot Accept Control"
+ Case SVC_SERVICE_NOT_ACTIVE
+ getServiceErrorMessage = "Service Not Active"
+ Case SVC_SERVICE_REQUEST_TIMEOUT
+ getServiceErrorMessage = "Service Request Timeout"
+ Case SVC_UNKNOWN_FAILURE
+ getServiceErrorMessage = "Unknown Failure"
+ Case SVC_PATH_NOT_FOUND
+ getServiceErrorMessage = "Path Not Found"
+ Case SVC_SERVICE_ALREADY_RUNNING
+ getServiceErrorMessage = "Service Already Running"
+ Case SVC_SERVICE_DATABASE_LOCKED
+ getServiceErrorMessage = "Service Database Locked"
+ Case SVC_SERVICE_DEPENDENCY_DELETED
+ getServiceErrorMessage = "Service Dependency Deleted"
+ Case SVC_SERVICE_DEPENDENCY_FAILURE
+ getServiceErrorMessage = "Service Dependency Failure"
+ Case SVC_SERVICE_DISABLED
+ getServiceErrorMessage = "Service Disabled"
+ Case SVC_SERVICE_LOGON_FAILURE
+ getServiceErrorMessage = "Service Logon Failure"
+ Case SVC_SERVICE_MARKED_FOR_DELETION
+ getServiceErrorMessage = "Service Marked For Deletion"
+ Case SVC_SERVICES_NO_THREAD
+ getServiceErrorMessage = "Service No Thread"
+ Case SVC_STATUS_CIRCULAR_DEPENDENCY
+ getServiceErrorMessage = "Status Circular Dependency"
+ Case SVC_STATUS_DUPLICATE_NAME
+ getServiceErrorMessage = "Status Duplicate Name"
+ Case SVC_INVALID_NAME
+ getServiceErrorMessage = "Status Invalid Name"
+ Case SVC_STATUS_INVALID_PARAMETER
+ getServiceErrorMessage = "Status Invalid Parameter"
+ Case SVC_INVALID_SERVICES_ACCOUNT
+ getServiceErrorMessage = "Status Invalid Service Account"
+ Case SVC_STATUS_SERVICE_EXISTS
+ getServiceErrorMessage = "Status Service Exists"
+ Case SVC_SERVICE_ALREADY_PAUSED
+ getServiceErrorMessage = "Service Already Paused"
+ Case Else
+ getServiceErrorMessage = "Unknown Failure"
+ End Select
+End Function
diff --git a/webservice/clienttools/services/0.9/auth.php b/webservice/clienttools/services/0.9/auth.php
new file mode 100644
index 0000000..5d7275f
--- /dev/null
+++ b/webservice/clienttools/services/0.9/auth.php
@@ -0,0 +1,141 @@
+AuthInfo;
+
+ $username=$params['user'];
+ $passhash=$params['passhash'];
+ $token=$params['token'];
+ $app_type=$params['appType'];
+ $session_id=$params['session'];
+ $ip=$_SERVER['REMOTE_ADDR'];
+ $language=isset($params['language'])?$params['language']:'en';
+
+ $this->Response->setDebug('parameters',$params);
+
+ setcookie("kt_language", $language, 2147483647, '/');
+
+ $kt =& $this->KT;
+
+ if ($username != 'admin') {
+ //$this->addDebug('@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@','');
+
+ try{
+ if(class_exists('BaobabKeyUtil')){
+ if (!BaobabKeyUtil::checkIfLicensed(true)) {
+ $this->setResponse(array('authenticated'=> false, 'message'=> 'license_expired'));
+ $this->addError('Licence Expired');
+ return false;
+ }
+ }else{
+ $this->addError('Licence Utility could not be loaded. Appears to be a Community version.');
+ $this->setResponse(array('authenticated'=> false, 'message'=> 'Licence Utility could not be loaded. Appears to be a Community version.'));
+ return false;
+ }
+ }catch(Exception $e){
+ $this->addError('could not execute BaobabKeyUtil::checkIfLicensed');
+ $this->setResponse(array('authenticated'=> false, 'message'=> 'BaobabKeyUtil::checkIfLicensed error'));
+ return;
+ }
+ }
+
+ $user=$kt->get_user_object_by_username($username);
+ if(!PEAR::isError($user)){
+ $password=$user->getPassword();
+ $localPassHash=md5($password.$token);
+ if($localPassHash==$passhash){
+ $session=new stdClass();
+ $this->Response->setDebug('trying to start session with',array('username'=>$username,'password'=>$password));
+ $session = $kt->start_session($username, $params['pass'],NULL,$app_type);
+ if(!PEAR::isError($session)){
+ $this->Response->setStatus('session_id',$session->get_session());
+ }else{
+ $this->setResponse(array('authenticated'=> false, 'message'=> 'Invalid username and/or password.'));
+ $this->addDebug('failed login',print_r($session,true));
+ $this->addError('Unknown Login Error');
+ return false;
+ }
+ }else{
+ $this->addError('Incorrect Credentials');
+ //throw new Exception('Incorrect Credentials');
+ return false;
+ }
+ }else{
+ $this->addError('Incorrect Credentials');
+ //throw new Exception('Unrecognized User');
+ return false;
+ }
+ return true;
+ }
+
+ public function japiLogin(){
+ global $default;
+
+ $user=$this->KT->get_user_object_by_username($this->AuthInfo['user']);
+ $ret=array(
+ 'fullName' =>PEAR::isError($user)?'':$user->getName()
+ );
+ $this->setResponse($ret);
+ return true;
+ }
+
+ public function pickup_session(){
+ $params=$this->AuthInfo;
+ $app_type=$params['appType'];
+ $session_id=$params['session'];
+ $ip=$_SERVER['REMOTE_ADDR'];
+
+ $session = $this->KT->get_active_session($session_id, $ip, $app_type);
+
+ if (PEAR::isError($session)){
+ return false;
+ }
+ $this->Response->setStatus('session_id',$session->get_session());
+ return true;
+ }
+
+
+ public function ping(){
+ global $default;
+ $user=$this->KT->get_user_object_by_username($this->AuthInfo['user']);
+ $versions=$this->handler->getServerVersions();
+ $bestVer=$versions[count($versions)-1];
+ $clientVer=$this->handler->getVersion();
+ $ret=array(
+ 'response' =>'pong',
+ 'loginLocation' => '/index.html',
+ 'versionok' =>in_array($clientVer,$versions),
+ 'fullName' =>PEAR::isError($user)?'':$user->getName(),
+ 'serverVersions' =>$versions,
+ 'serverBestVersion' =>$bestVer,
+ 'clientVersion' =>$clientVer,
+ 'canUpgradeClient' =>($clientVer<$bestVer?true:false),
+ 'canUpgradeServer' =>($clientVer>$bestVer?true:false)
+
+ );
+ $this->setResponse($ret);
+ return true;
+ }
+
+ function logout($params){
+ $params=$this->AuthInfo;
+ $app_type=$params['appType'];
+ $session_id=$params['session'];
+ $ip=$_SERVER['REMOTE_ADDR'];
+
+ $session = $this->KT->get_active_session($session_id, $ip, $app_type);
+
+ if (PEAR::isError($session)){
+ return false;
+ }
+
+ $session->logout();
+ $this->setResponse(array('logout'=>true));
+ return true;
+ }
+
+}
+
+?>
\ No newline at end of file
diff --git a/webservice/clienttools/services/0.9/kt.php b/webservice/clienttools/services/0.9/kt.php
new file mode 100644
index 0000000..fc3a87c
--- /dev/null
+++ b/webservice/clienttools/services/0.9/kt.php
@@ -0,0 +1,1292 @@
+geti18nLanguages('knowledgeTree');
+ $aLanguageNames=$oReg->getLanguages('knowledgeTree');
+ $languages=array();
+
+ if(!empty($aRegisteredLangs)){
+ foreach (array_keys($aRegisteredLangs) as $sLang){
+ $languages[]=array(
+ 'isoCode'=>$sLang,
+ 'language'=>$aLanguageNames[$sLang]
+ );
+ }
+ }
+ $response=array('languages'=>$languages, 'count'=>count($languages), 'defaultLanguage'=>$default->defaultLanguage);
+ if(is_bool($passthru))if($passthru)return $response;
+ $this->setResponse($response);
+ }
+
+
+ function get_rootfolder_detail($params){
+ $params['folderId']='1';
+ $this->get_folder_detail($params);
+ }
+
+
+ function get_folder_detail($params) {
+ if(isset($params['node'])&&!isset($params['folderId'])){
+ $params['node']=split('_',$params['node']);
+ $params['folderId']=$params['node'][1];
+ }
+ $kt=&$this->KT;
+
+ $folder=&$kt->get_folder_by_id($params['folderId']);
+ if (PEAR::isError($folder))
+ {
+ $this->setError("Could not get folder by Id: {$params['folderId']}");
+ $this->setDebug('FolderError',array('kt'=>$kt,'folder'=>$folder));
+ return false;
+ }
+
+ $detail=$folder->get_detail();
+ if (PEAR::isError($detail)){
+ $this->setResponse("detail error {$params['node']}");
+ return false;
+ }
+
+ if(strtolower($detail['folder_name'])=='root folder'){
+ $detail['folder_name']='KnowledgeTree';
+ }
+
+ $qtip .= $this->xlate('Folder name').": {$detail['folder_name']}
";
+ $class='folder';
+
+ $permissions=$detail['permissions'];
+ $perms='';
+ $canWrite=false;
+
+ for ($j=0; $j < strlen($permissions); $j++){
+ switch (strtoupper($permissions{$j})){
+ case 'W':
+ $canWrite=true;
+ $perms .= $this->xlate('write, ');
+ break;
+ case 'R':
+ $perms .= $this->xlate('read, ');
+ break;
+ case 'A':
+ $perms .= $this->xlate('add folder, ');
+ break;
+ }
+ }
+
+ if (strlen($perms) > 2){
+ $perms=substr($perms, 0, strlen($perms)-2);
+ }
+
+ $qtip .= $this->xlate('Permissions:') . " {$perms}
";
+ $qtip .= $canWrite ? $this->xlate('You may add content to this folder') : $this->xlate('You may not add content to this folder');
+
+ $result[]=array(
+ 'text'=>$detail['folder_name'],
+ 'id'=>'F_'. $params['folderId'],
+ 'filename'=>$detail['folder_name'],
+ 'cls'=>'folder',
+ 'leaf'=>false,
+ 'document_type'=>'',
+ 'item_type'=>'F',
+ 'permissions'=>$permissions,
+ 'qtip'=> $qtip
+ );
+
+ $this->setResponse($result);
+ return true;
+ }
+
+
+ function get_folder_contents($params){
+ $kt=&$this->KT;
+
+ $params['control']='F_';
+ $params['node']=substr($params['node'], strlen($params['control']));
+
+ $folder=&$kt->get_folder_by_id($params['node']);
+ if(!$this->checkPearError($folder,"[error 1] Folder Not Found: {$params['control']}{$params['node']}",'',array()))return false;
+
+ $types=(isset($params['types']) ? $params['types'] : 'DF');
+ $listing=$folder->get_listing(1, $types);
+ $result=$this->_processListing($listing, 'folderContents', $params);
+
+ $this->setResponse($result);
+ return true;
+ }
+
+
+ /**
+ * Returns the contents of a folder formatted for a grid view.
+ *
+ * @param array $arr
+ * @return array
+ */
+ function get_folder_contents_for_grid($arr)
+ {
+ $kt=&$this->KT;
+
+ $arr['control']='F_';
+ $arr['node']=substr($arr['node'], strlen($arr['control']));
+
+ $folder=&$kt->get_folder_by_id($arr['node']);
+ if (PEAR::isError($folder)){
+ echo '
'.print_r($arr,true).'
';
+ $this->addError('Folder Not found');
+ return false;
+ }
+
+ $types=(isset($arr['types']) ? $arr['types'] : 'DF');
+
+ $listing=$folder->get_listing(1, $types);
+
+ $result=$this->_processListing($listing, 'grid', $arr);
+
+ $this->setResponse(array('totalCount'=>count($listing), 'items'=>$result));
+
+ return true;
+ }
+
+
+
+ private function _processListing($listing, $type, $arr){
+ $result=array();
+ $methodToIncludeItem='_processItemInclusion_'.$type;
+
+ foreach($listing as $item){
+ /* Trying to fix folder sizes */
+ if($item['filesize']<=0){
+ $item['filesize']='';
+ }else{
+ $item['filesize']=serviceHelper::size_readable($item['filesize']);
+ }
+
+ $filename=$item['filename'];
+ $itemType=$item['item_type'];
+
+ $includeMe=true;
+ $qtip='';
+ $canWrite=false;
+ $immutable=false;
+ $permissions=$item['permissions'];
+ $perms='';
+
+ for ($j=0; $j < strlen($permissions); $j++){
+ switch (strtoupper($permissions{$j})){
+ case 'W':
+ $canWrite=true;
+ $perms .= $this->xlate('write, ');
+ break;
+ case 'R':
+ $perms .= $this->xlate('read, ');
+ break;
+ case 'A':
+ $perms .= $this->xlate('add folder, ');
+ break;
+ }
+ }
+
+ if(strlen($perms) > 2){
+ $perms=substr($perms, 0, strlen($perms)-2);
+ }
+
+ if($itemType=='F'){
+ $qtip .= $this->xlate('Folder name').": {$filename}
";
+ $class='folder';
+ $qtip .= $this->xlate('Permissions:') . " {$perms}
";
+ $qtip .= $canWrite ? $this->xlate('You may add content to this folder') : $this->xlate('You may not add content to this folder');
+ }
+
+ //documents
+ else{
+ $qtip='';
+ $extpos=strrpos($filename, '.') ;
+
+ if($extpos === false){
+ $class='file-unknown';
+ }else{
+ $ext=substr($filename, $extpos); // Get Extension including the dot
+ $class='file-' . substr($filename, $extpos +1); // Get Extension without the dot
+ }
+
+ $extensions=explode(',', $arr['extensions']);
+ if(!in_array(strtolower($ext), $extensions) && !in_array('*',$extensions)){
+ $includeMe=false;
+ }else{
+ $qtip .= $this->xlate('Filename') . ": {$filename}
";
+ $qtip .= $this->xlate('File Size') . ": " . serviceHelper::fsize_desc($item['filesize']) . "
";
+ $qtip .= $this->xlate('Modified') . ": {$item['modified_date']}
";
+ $qtip .= $this->xlate('Owner') . ": {$item['created_by']}
";
+ $qtip .= $this->xlate('Version') . ": {$item['version']}
";
+ if (serviceHelper::bool2str(strtolower($item['is_immutable']))=='true'){
+ $canWrite=false;
+ $immutable=true;
+ }
+
+ if($immutable){
+ $qtip .= $this->xlate('Status: Immutable') . '
';
+ }else if (strtolower($item['checked_out_by']) != 'n/a' && ($item['checked_out_by'] != '')){
+ $qtip .= $this->xlate('Status: Checked out by') . " {$item['checked_out_by']}
";
+ }else{
+ $qtip .= $this->xlate('Status: Available') . '
';
+ }
+ $qtip .= $this->xlate('Permissions:') . " {$perms}
";
+
+ if($immutable){
+ $qtip .= $this->xlate('This document is not editable');
+ }else if ($canWrite){
+ $qtip .= $this->xlate('You may edit this document');
+ }else{
+ $qtip .= $this->xlate('This document is not editable');
+ }
+ }
+ }//end of if for files
+ if($includeMe){
+ $result[]=$this->$methodToIncludeItem($item, $class, $qtip);
+ }
+ }
+ return $result;
+ }
+
+
+
+
+ private function _processItemInclusion_folderContents($item, $class, $qtip){
+ return array (
+ 'text'=>htmlspecialchars($item['title']),
+ 'originaltext'=>$item['title'],
+ 'id'=>($item['item_type']=='F' ? $item['item_type']."_" : "").$item['id'],
+ 'filename'=>$item['filename'],
+ 'cls'=>$class,
+ 'leaf'=>($item['item_type']=='D'),
+ 'document_type'=>$item['document_type'],
+ 'item_type'=>$item['item_type'],
+ 'permissions'=>$item['permissions'],
+ 'content_id'=>$item['content_id'],
+ 'checked_out_by'=>$item['checked_out_by'],
+ 'qtip'=> $qtip
+ );
+ }
+
+
+ private function _processItemInclusion_search($item, $class, $qtip)
+ {
+ if ($item['filesize']=='n/a') {
+ $item['filesize']=-1;
+ }
+ return array (
+ 'text'=>htmlspecialchars($item['title']),
+ 'originaltext'=>$item['title'],
+ 'id'=>$item['document_id'],
+ 'filename'=>$item['filename'],
+ 'cls'=>$class,
+ 'leaf'=>true,
+ 'document_type'=>$item['document_type'],
+ 'item_type'=>'D',
+ 'permissions'=>$item['permissions'],
+ 'content_id'=>$item['content_id'],
+ 'filesize'=>$item['filesize'],
+ 'modified'=>$item['modified_date'],
+ 'created_date'=>$item['created_date'],
+ 'checked_out_by'=>$item['checked_out_by'],
+ 'relevance'=>$item['relevance'],
+ 'qtip'=> $qtip,
+ 'version'=>$item['version']
+ );
+ }
+
+ private function _processItemInclusion_grid($item, $class, $qtip)
+ {
+ //var_dump($item);
+
+ if ($item['filesize']=='n/a') {
+ $item['filesize']=-1;
+ }
+
+ return array (
+ 'text'=>htmlspecialchars($item['title']),
+ 'originaltext'=>$item['title'],
+ 'id'=>$item['id'],
+ 'filename'=>$item['filename'],
+ 'cls'=>$class,
+ 'owner'=>$item['created_by'],
+ 'document_type'=>$item['document_type'],
+ 'item_type'=>$item['item_type'],
+ 'permissions'=>$item['permissions'],
+ 'created_date'=>$item['created_date'],
+ 'content_id'=>$item['content_id'],
+ 'filesize'=>$item['filesize'],
+ 'modified'=>$item['modified_date'],
+ 'checked_out_by'=>$item['checked_out_by'],
+ 'version'=>$item['version']
+ );
+ }
+
+
+ public function get_metadata($params) {
+ $kt=&$this->KT;
+
+ if (substr($params['document_id'], 0, 2)=='D_') {
+ $params['document_id']=substr($params['document_id'], 2);
+ }
+
+ $document_id=(int)$params['document_id'];
+ if($document_id > 0) {
+ $document=$kt->get_document_by_id($params['document_id']);
+ $detail=$document->get_metadata();
+ $document_detail=$document->get_detail();
+ $title=$document_detail['title'];
+ $document_type=$document_detail['document_type'];
+
+ }else{
+ if(isset($params['document_type'])) {
+ $document_type=$params['document_type'];
+ }else{
+ $document_type='Default';
+ }
+ $detail=$kt->get_document_type_metadata($document_type);
+ $title="";
+ }
+
+ $result=array();
+ $items=array();
+ $index=0;
+ $items[]=array("name"=>"__title", "index"=>0, "value"=>$title, "control_type"=>"string");
+
+
+ // Commented out for timebeing - will be used by 'Save in Format'
+
+ if (isset($params['extensions'])) {
+
+ $fileParts=pathinfo($document_detail['filename']);
+
+ $items[]=array("name"=>"__document_extension", "index"=>0, "value"=>strtolower($fileParts['extension']), "control_type"=>"lookup", "selection"=>explode(',', str_replace('.', '', $params['extensions'])));
+ }
+
+ $document_types=$kt->get_documenttypes($params);
+ $items[]=array("name"=>"__document_type", "index"=>0, "value"=>$document_type, "control_type"=>"lookup", "selection"=>$document_types);
+
+ foreach ($detail as $fieldset) {
+ foreach ($fieldset['fields'] as $field) {
+
+ $prepArray = array(
+ 'fieldset' => $fieldset['fieldset'],
+ 'name' => $field['name'],
+
+ // Change for value. If blank value is set to 1, change value to ''
+ // Overcomes issue of n/a
+ 'value' => ($document_id > 0 ? ($field['blankvalue'] == '1' ? '' : $field['value']) : ''),
+
+ 'description' => $field['description'],
+ 'control_type' => $field['control_type'],
+ 'selection' => $field['selection'],
+ 'required' => $field['required'],
+ 'blankvalue' => $field['blankvalue'],
+ 'index' => $index
+ );
+
+ // Small Adjustment for multiselect to real type
+ if ($field['control_type'] == 'multiselect') {
+ $prepArray['control_type'] = $field['options']['type'];
+ }
+
+
+ if (isset($field['options']['ishtml'])) {
+ $prepArray['ishtml'] = $field['options']['ishtml'];
+ } else {
+ $prepArray['ishtml'] = '0';
+ }
+
+ if (isset($field['options']['maxlength'])) {
+ $prepArray['maxlength'] = $field['options']['maxlength'];
+ } else {
+ $prepArray['maxlength'] = '-1';
+ }
+
+ $items[] = $prepArray;
+ $index++;
+ }
+ }
+
+
+
+ $this->setResponse(array('id'=>$title, 'items'=>$items, 'count'=>count($items)));
+
+ return true;
+ }
+
+
+ public function get_documenttypes($params) {
+
+ $kt=&$this->KT;
+
+ $detail=$kt->get_documenttypes();
+ $result=array();
+ $items=array();
+ for($i=0;$i$detail[$i]
+ );
+ }
+ }
+ $this->setResponse(array('items'=>$items, 'count'=>count($items)));
+ return true;
+ }
+
+ function update_document_type($params) {
+ $kt=&$this->KT;
+ $document_id=(int)$params['document_id'];
+ if($document_id > 0) {
+ $document=$kt->get_document_by_id($document_id);
+ $document->change_document_type($params['document_type']);
+ $this->setResponse(array('status_code'=>0));
+ return true;
+
+ }else{
+ $this->addError("Invalid document Id : {$document_id}");
+ $this->setResponse(array('status_code'=>1));
+ return false;
+ }
+
+ }
+
+ /**
+ * Get a url for downloading the specified document
+ * Parameters:
+ * session_id
+ * app_type
+ * document_id
+ *
+ * @param unknown_type $params
+ */
+ function download_document($params,$returnResult=false) {
+
+ $kt=&$this->KT;
+ $params['session_id']=$params['session_id']?$params['session_id']:$this->AuthInfo['session'];
+ $params['app_type']=$params['app_type']?$params['app_type']:$this->AuthInfo['appType'];
+ $params['app_type']='air';
+ $multipart=isset($params['multipart'])?(bool)$params['multipart']:false;
+
+ $this->addDebug('parameters',$params);
+
+
+ $session_id=$params['session_id'];
+
+
+ $document=&$kt->get_document_by_id($params['document_id']);
+ // $docname='test.txt';
+ if (PEAR::isError($document))
+ {
+ $response['message']=$document->getMessage();
+ //$this->addDebug("download_document - cannot get $document_id - " . $document->getMessage(), $session_id);
+
+// $this->setResponse(new SOAP_Value('$this->response=',"{urn:$this->namespace}kt_response", $response));
+ $this->setResponse($response);
+ return;
+ }
+ $docname=$document->document->getFileName();
+ $result=$document->download();
+ if (PEAR::isError($result))
+ {
+ $response['message']=$result->getMessage();
+ $this->setResponse(array('status_code'=>1, 'message'=>$result->getMessage()));
+ return;
+ }
+
+ $session=&$kt->get_session();
+ $download_manager=new KTDownloadManager();
+ $download_manager->set_session($session->session);
+ $download_manager->cleanup();
+ $url=$download_manager->allow_download($document,NULL,$multipart);
+ //http://ktair.dev?code=750f7a09d40a3d855f2897f417baf0bbb9a1f615&d=16&u=evm2pdkkhfagon47eh2b9slqj6
+ /*
+ $this->addDebug('url before split',$url);
+ $url=split('\?',$url);
+ $this->addDebug('url after split',$url);
+ $url=$url[0].'/ktwebservice/download.php?'.$url[1];
+ $this->addDebug('url after recombo',$url);
+ */
+
+ $response['status_code']=0;
+ $response['message']=$url.'&apptype='.$params['app_type'];
+ $response['filename']=$docname;
+
+ $this->addDebug('effective params',$params);
+
+ if($returnResult){
+ return $response;
+ }else{
+ $this->setResponse($response);
+ }
+ }
+
+ /**
+ * Get download URLS for multiple documents
+ * params contains:
+ * app_type
+ * documents = array of doc_id
+ *
+ * @param unknown_type $params
+ */
+ public function download_multiple_documents($params){
+ $response=array();
+ foreach($params['documents'] as $docId){
+ $ret=$this->download_document(array('document_id'=>$docId,'app_type'=>$params['app_type'],'multipart'=>$params['multipart']),true);
+ $rec=array(
+ 'filename' =>$ret['filename'],
+ 'url' =>$ret['message'],
+ 'succeeded' =>$ret['status_code']==0?true:false
+ );
+ if(is_array($ret))$response[$docId]=$rec;
+ }
+ $this->setResponse($response);
+ }
+
+ /**
+ * Checkout a Document
+ * params contains:
+ * document_id the id of the document
+ * reason the checkout reason
+ *
+ * @param array $params
+ *
+ */
+ function checkout_document($params){
+ $responseType='kt_response';
+ $kt=&$this->KT;
+
+ $document=&$kt->get_document_by_id($params['document_id']);
+ if (PEAR::isError($document))
+ {
+ $this->addError("checkout_document - cannot get documentid {$params['document_id']} - " . $document->getMessage());
+ $this->setResponse(array('status_code'=>1, 'message'=>$document->getMessage()));
+ return;
+ }
+
+ $result=$document->checkout($params['reason']);
+ if (PEAR::isError($result))
+ {
+ $this->addError($result->getMessage());
+ $this->setResponse(array('status_code'=>1, 'message'=>$result->getMessage()));
+ return;
+ }
+
+ $url='';
+ if ($params['download'])
+ {
+ $download_manager=new KTDownloadManager();
+ $download_manager->set_session($params['session_id']);
+ $download_manager->cleanup();
+ $url=$download_manager->allow_download($document);
+ }
+
+ $this->setResponse(array('status_code'=>0, 'message'=>$url));
+ }
+
+
+ /**
+ * Checkin Document //TODO: Find out how upload works
+ * params contains:
+ * document_id
+ * filename
+ * reason
+ * tempfilename
+ *
+ * @param array $params
+ */
+ function checkin_document($params){
+ $session_id=$this->AuthInfo['session'];
+ $document_id=$params['document_id'];
+ $filename=$params['filename'];
+ $reason=$params['reason'];
+ $tempfilename=$params['tempfilename'];
+ $major_update=$params['major_update'];
+ $application=$this->AuthInfo['appType'];
+
+ $this->addDebug('Checkin',"checkin_document('$session_id',$document_id,'$filename','$reason','$tempfilename', '$application', $major_update)");
+ $kt=&$this->KT;
+
+ // 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))
+ {
+ $this->setResponse(array('status_code'=>12));
+ return;
+ }
+
+ $document=&$kt->get_document_by_id($document_id);
+ if (PEAR::isError($document))
+ {
+ $this->setResponse(array('status_code'=>13));
+ }
+
+ // checkin
+ $result=$document->checkin($filename, $reason, $tempfilename, $major_update);
+ if (PEAR::isError($result))
+ {
+ $this->setResponse(array('status_code'=>14));
+ }
+
+ // get status after checkin
+ //$this->response= $this->get_document_detail($session_id, $document_id);
+ $detail=$document->get_detail();
+ $detail['status_code']=0;
+ $detail['message']='';
+
+ $this->setResponse($detail);
+ }
+
+
+ /**
+ * Upload a document
+ *
+ * @param unknown_type $arr
+ */
+ function add_document_with_metadata($arr){
+ $session_id=$arr['session_id'];
+ //error_reporting(E_ALL);
+ $metadata=array();
+ $packed=$arr['metadata'];
+
+ foreach($meta as $item){
+ $fieldSet=$item['fieldset'];
+ unset($item['fieldset']);
+ $metadata[$fieldSet]['fieldset']=$fieldSet;
+ $metadata[$fieldSet]['fields'][]=$item;
+ }
+
+ $kt=&$this->KT;
+
+ $upload_manager=new KTUploadManager();
+ if (!$upload_manager->is_valid_temporary_file($arr['tempfilename'])) {
+ $this->addError('Temporary File Not Valid');
+ $this->setResponse(array('status_code'=>1, 'message'=>'Temporary File Not Valid'));
+ return false;
+ }
+ $this->addDebug('','Exited is_valid_temporary file');
+
+ $folder=&$kt->get_folder_by_id($arr['folder_id']);
+ if (PEAR::isError($folder)){
+ $this->addError('Could not find Folder '.$arr['folder_id']);
+ $this->setResponse(array('status_code'=>1, 'message'=>'Could not find Folder '.$arr['folder_id']));
+ return false;
+ }
+
+ $document=&$folder->add_document($arr['title'], $arr['filename'], $arr['documenttype'], $arr['tempfilename']);
+ if (PEAR::isError($document)){
+ $this->addError("Could not add Document [title:{$title},filename:{$filename},documenttype:{$documenttype},tempfilename:{$tempfilename}]");
+ $this->setResponse(array('status_code'=>1, 'message'=>'Could not add Document'));
+ return false;
+ }
+
+
+ $document_id=$document->get_documentid();
+
+ $update_result=$this->update_document_metadata($arr['session_id'], $document_id, $metadata, $arr['application'], array());
+
+ $status_code=$update_result['status_code'];
+ if ($status_code != 0)
+ {
+ $this->delete_document(array('session_id' => $arr['session_id'], 'document_id' => $document_id, 'reason' => 'Rollback because metadata could not be added', 'application' => $arr['application']));
+ $this->response= $update_result;
+ }
+
+
+ $result=$document->mergeWithLastMetadataVersion();
+ if (PEAR::isError($result))
+ {
+ // not much we can do, maybe just log!
+ }
+
+ $this->response= array('status_code'=>0, 'document_id'=>$document_id);
+ }
+
+ function create_empty_upload_file($params){
+ $config=KTConfig::getSingleton();
+ $this->addDebug('KTConfig Singleton',$config);
+ $uploadFolder=$config->get('webservice/uploadDirectory');
+
+ $result = array();
+
+ if ($file = fopen($uploadFolder."/".$params['filename'], 'w')) {
+ fclose($file);
+ $result['status_code'] = '0';
+ $result['filename'] = $uploadFolder."/".$params['filename'];
+ } else {
+ $result['status_code'] = '1';
+ $result['filename'] = $uploadFolder."/".$params['filename'];
+ }
+ $this->setResponse($result);
+ return true;
+ }
+
+ function get_all_client_policies(){
+ $config=KTConfig::getSingleton();
+ $this->addDebug('KTConfig Singleton',$config);
+
+ $policies=array('allowRememberPassword', 'captureReasonsCheckin', 'captureReasonsCheckout');
+
+ $returnPolicies=array();
+
+ foreach ($policies as $policy_name)
+ {
+ $policyInfo=array(
+ 'name'=>$policy_name,
+ 'value'=>serviceHelper::bool2str($config->get('addInPolicies/'.$policy_name)),
+ 'type'=>'boolean'
+ );
+
+ $returnPolicies[$policy_name] =$policyInfo;
+ }
+
+ $languages=$this->get_languages(true);
+
+ $metadata=array('totalProperty'=>'resultsCounter', 'root'=>'languages', 'fields'=>array('isoCode', 'language'));
+
+ $finalArray=array();
+ $finalArray['metaData']=$metadata;
+ $finalArray['policies']=$returnPolicies;
+ $finalArray['languages']=$languages['languages'];
+ $finalArray['defaultLanguage']=$languages['defaultLanguage'];
+ $finalArray['resultsCounter']=$languages['count'];
+
+
+ $this->setResponse($finalArray);
+ return true;
+ }
+
+ function get_all_explorer_policies(){
+ $config=KTConfig::getSingleton();
+ $this->addDebug('KTConfig Singleton',$config);
+
+ $policies=array('allowRememberPassword', 'explorerMetadataCapture', 'officeMetadataCapture', 'captureReasonsCheckin', 'captureReasonsCheckout', 'captureReasonsDelete', 'captureReasonsCancelCheckout', 'captureReasonsCopyInKT', 'captureReasonsMoveInKT');
+
+ $returnPolicies=array();
+ $test = $config->get('clientToolPolicies/allowRememberPassword');
+ global $default;
+ $default->log->error('I am here-'.$test);
+ foreach ($policies as $policy_name)
+ {
+ $policyInfo=array(
+ 'name'=>$policy_name,
+ 'value'=>serviceHelper::bool2str($config->get('clientToolPolicies/'.$policy_name)),
+ 'type'=>'boolean'
+ );
+
+ $returnPolicies[$policy_name] =$policyInfo;
+ }
+
+ $languages=$this->get_languages(true);
+
+ $metadata=array('totalProperty'=>'resultsCounter', 'root'=>'languages', 'fields'=>array('isoCode', 'language'));
+
+ $finalArray=array();
+ $finalArray['metaData']=$metadata;
+ $finalArray['policies']=$returnPolicies;
+ $finalArray['languages']=$languages['languages'];
+ $finalArray['defaultLanguage']=$languages['defaultLanguage'];
+ $finalArray['resultsCounter']=$languages['count'];
+
+
+ $this->setResponse($finalArray);
+ return true;
+ }
+
+ public function switchlang($params){
+ setcookie("kt_language", $params['lang'], 2147483647, '/');
+ }
+
+
+ function add_document_params($params){
+ $folder_id=$params['folder_id'];
+ $title=$params['title'];
+ $filename=$params['filename'];
+ $documenttype=$params['documenttype'];
+ $tempfilename=$params['tempfilename'];
+ $application=$params['application'];
+
+ $this->addDebug('','Entered add_document');
+ $kt=&$this->KT;
+
+ $upload_manager=new KTUploadManager();
+ if (!$upload_manager->is_valid_temporary_file($tempfilename)) {
+ $this->addError('Temporary File Not Valid');
+ $this->setResponse(array('status_code'=>1));
+ return false;
+ }
+ $this->addDebug('','Exited is_valid_temporary file');
+
+ $folder=&$kt->get_folder_by_id($folder_id);
+ if (PEAR::isError($folder)){
+ $this->addError('Could not find Folder '.$folder_id);
+ $this->setResponse(array('status_code'=>1));
+ return false;
+ }
+
+ $this->addDebug('','Exited get_folder_by_id');
+
+ $document=&$folder->add_document($title, $filename, $documenttype, $tempfilename);
+ if (PEAR::isError($document)){
+ $this->addError("Could add Document [title:{$title},filename:{$filename},documenttype:{$documenttype},tempfilename:{$tempfilename}]");
+ $this->setResponse(array('status_code'=>1));
+ return false;
+ }
+
+ $this->addDebug('','Exited folder add_document');
+
+ $detail=$document->get_detail();
+ $detail['status_code']=0;
+ $detail['message']='';
+
+ $this->setResponse($detail);
+ }
+
+ function delete_document($params){
+ $session_id = $params['session_id'];
+ $document_id = $params['document_id'];
+ $reason = $params['reason'];
+ $application = $params['application'];
+
+ $kt=&$this->KT;
+
+ $document=&$kt->get_document_by_id($document_id);
+ if (PEAR::isError($document)){
+ $this->addError("Invalid document {$document_id}");
+ $this->setResponse(array('status_code'=>1));
+ return false;
+ }
+
+ $result=$document->delete($reason);
+ if (PEAR::isError($result)) {
+ $this->addError("Could not delete document {$document_id}");
+ $this->setResponse(array('status_code'=>1));
+ return false;
+ }
+ $this->setResponse(array('status_code'=>0));
+ return true;
+ }
+
+
+
+ private function update_document_metadata($session_id, $document_id, $metadata, $application, $sysdata=null){
+ $this->addDebug('update_document_metadata','entered update_document_metadata');
+ $kt=&$this->KT;
+ $responseType='kt_document_detail';
+
+ $document=&$kt->get_document_by_id($document_id);
+ if (PEAR::isError($document)){
+ return array('status_code'=>1, 'error'=>'Error getting document');
+ }
+
+ $result=$document->update_metadata($metadata);
+ if (PEAR::isError($result)){
+ return array('status_code'=>1, 'error'=>'Error updating metadata');
+ }
+
+ $result=$document->update_sysdata($sysdata);
+ if (PEAR::isError($result)){
+ return array('status_code'=>1, 'error'=>'Error update_sysdata');
+ }
+
+ return array('status_code'=>0);
+ }
+
+ function get_client_policy($arr){
+ $policy_name=$arr['policy_name'];
+
+ $config=KTConfig::getSingleton();
+
+ $policy=array(
+ 'name'=>$policy_name,
+ 'value'=>serviceHelper::bool2str($config->get($policy_name)),
+ 'type'=>'boolean'
+ );
+
+ $response['policy']=$policy;
+ $response['message']='Knowledgetree client policies retrieval succeeded.';
+ $response['status_code']=0;
+
+ $this->setResponse($response);
+ return true;
+ }
+
+
+ function search($arr){
+ $kt=&$this->KT;
+
+ $listing=processSearchExpression("(GeneralText contains \"".$arr['query']."\")");
+
+ $result=$this->_processListing($listing, 'search', $arr);
+
+ if(!count($result)) {
+ $result[]=array(
+ 'text'=>$this->xlate("No results found"),
+ 'id'=>($listing[$i]['item_type']=='F' ? $listing[$i]['item_type']."_" : "").$listing[$i]['id'],
+ 'leaf'=>true,
+ 'relevance'=>0,
+ 'qtip'=> $this->xlate("Please retry your search")
+ );
+ }else{
+ $result=array_slice($result, 0, 200);
+ }
+
+ //$this->setResponse($result);
+ $this->setResponse(array('totalCount'=>count($listing), 'items'=>$result));
+
+ return true;
+ }
+
+
+ public function update_metadata($arr){
+ $metadata=array();
+ $meta=$arr['metadata'];
+
+ $this->addDebug('','Entered add_document_with_metadata');
+ $this->addDebug('metadata received',$meta);
+
+ $special=array();
+// foreach($apacked as $packed){
+// foreach($packed as $key=>$val) {
+// if(substr($val->name,0,2) != '__') {
+// if(!is_array($metadata[$val->fieldset])) {
+// $metadata[$val->fieldset]['fieldset']=$val->fieldset;
+// $metadata[$val->fieldset]['fields']=array();
+// }
+// $metadata[$val->fieldset]['fields'][]=array(
+// 'name'=>$val->name,
+// 'value'=>$val->value
+// );
+// }else{
+// $special[$val->name]=$val->value;
+// }
+// }
+// }
+
+ /**
+
+Fatal error: Cannot unset string offsets in on line 981
+ */
+
+// foreach($meta as $item){
+// $isSpecial=substr($item['name'],0,2)=='__';
+// if($isSpecial){
+// $special[$item['name']]=$item['value'];
+// }else{
+// $fieldSet=$item['fieldset'];
+// unset($item['fieldset']);
+// $metadata[$fieldSet]['fieldset']=$fieldSet;
+// $metadata[$fieldSet]['fields'][]=$item;
+// }
+// }
+
+ $metadata=array();
+ $special=array();
+
+ foreach($meta as $item){
+ if(substr($item['name'],0,2)=='__'){
+ $special[$item['name']]=$item['value'];
+ }else{
+ $metadata[$item['fieldset']]['fieldset']=$item['fieldset'];
+ $metadata[$item['fieldset']]['fields'][]=array('name'=>$item['name'],'value'=>$item['value']);
+ }
+ }
+
+
+
+ $this->addDebug('after processing',array('metadata'=>$metadata,'special'=>$special));
+
+ $document_id=$arr['document_id'];
+
+ $update_result=$this->update_document_metadata($arr['session_id'], $document_id, $metadata, $arr['application'], array());
+ $this->addDebug('','$this->response= from update_document_metadata');
+
+ $status_code=$update_result['status_code'];
+ if ($status_code != 0){
+ $this->setResponse($update_result);
+ }
+
+ $kt=&$this->KT;
+
+ if(!empty($special)) {
+ if($document_id > 0) {
+ $document=$kt->get_document_by_id($document_id);
+
+ if(isset($special['__title'])) {
+ $this->addDebug("Renaming to {$special['__title']}");
+ $res=$document->rename($special['__title']);
+ }
+ }
+ }
+
+ $this->setResponse(array('status_code'=>0, 'document_id'=>$document_id));
+ }
+
+
+
+ function check_document_title($arr){
+ $kt=&$this->KT;
+
+ $folder=$kt->get_folder_by_id($arr['folder_id']);
+ if(PEAR::isError($folder)) {
+ $this->setResponse(array('status_code'=>1, 'reason'=>'No such folder'));
+ return false;
+ }
+
+ $doc=$folder->get_document_by_name($arr['title']);
+ if(PEAR::isError($doc)) {
+ $this->setResponse(array('status_code'=>1, 'reason'=>'No document with that title '.$arr['title']));
+ return false;
+ }
+
+ $this->setResponse(array('status_code'=>0));
+ return true;
+ }
+
+
+ function cancel_checkout($params){
+ $kt=&$this->KT;
+
+ $document=&$kt->get_document_by_id($params['document_id']);
+ if (PEAR::isError($document)){
+ $this->setResponse(array('status_code'=>1, 'message'=>$document->getMessage()));
+ return false;
+ }
+
+ $result=$document->undo_checkout($params['reason']);
+ if (PEAR::isError($result)){
+ $this->setResponse(array('status_code'=>1, 'message'=>$result->getMessage()));
+ return false;
+ }
+ $response['status_code']=0;
+ $this->setResponse($response);
+ }
+
+
+ public function get_users_groups($params){
+ $kt=&$this->KT;
+ $query=$params['query'];
+ //$start=$params['start'];
+ //$page=$params['page'];
+
+ $results=KTAPI_User::getList('name LIKE "%'.$query.'%" AND id>0');
+ $returnArray=array();
+ if (count($results) > 0){
+ foreach ($results as $user){
+ $returnArray[]=array('emailid'=>'u_'.$user->getId(), 'name'=> $user->getName(), 'to'=>preg_replace('/('.$query.')/i', '${0}', $user->getName()));
+ }
+ }
+
+ $groups=KTAPI_Group::getList('name LIKE "%'.$query.'%"');
+ if (count($groups) > 0){
+ foreach ($groups as $group){
+ $returnArray[]=array('emailid'=>'g_'.$group->getId(), 'name'=> $group->getName(), 'to'=>preg_replace('/('.$query.')/i', '${0}', $group->getName()));
+ }
+ }
+
+ $sendArray=array ('emails'=>$returnArray, 'metaData'=>array('count'=>count($finalArray), 'root'=>'emails', fields=>array('name', 'to', 'emailid')));
+ $this->setResponse($sendArray);
+ return true;
+ }
+
+
+ function send_email($params){
+ $kt=&$this->KT;
+
+ $message=$params['message'];
+ $list=$params['users'];
+ $list=explode(',', $list);
+
+ $recipientsList=array();
+
+ foreach ($list as $recipient){
+ if (trim($recipient) != ''){ // check that value is present
+ // if @ sign is present, signifies email address
+ if(strpos($recipient, '@') === false) {
+ $recipient=trim($recipient);
+ switch (substr($recipient, 0, 2)){
+ case 'u_':
+ $id=substr($recipient, 2);
+ $user=KTAPI_User::getById($id);
+ if ($user != null){
+ $recipientsList[]=$user;
+ }
+ break;
+ case 'g_':
+ $id=substr($recipient, 2);
+ $group=KTAPI_Group::getById($id);
+ if ($group != null) {
+ $recipientsList[]=$group;
+ }
+ break;
+ }
+ }else{ // Email - just add to list
+ $recipientsList[]=trim($recipient);
+ }
+ }
+ }
+
+ $document=$kt->get_document_by_id($params['document']);
+ if (count($recipientsList)==0) {
+ $this->setResponse(array('status'=>'norecipients'));
+ return false;
+ }else{
+ $result = $document->email($recipientsList, $message, TRUE); // true to attach document
+ if (PEAR::isError($result)) {
+ $this->setResponse(array('status'=>$result->getMessage()));;
+ return false;
+ }
+ $this->setResponse(array('status'=>'documentemailed'));
+ }
+ return true;
+ }
+
+
+ function is_latest_version($params){
+ $kt=&$this->KT;
+
+ $documentId=$params['document_id'];
+ $contentId=$params['content_id'];
+
+ $result=$kt->is_latest_version($documentId, $contentId);
+
+ $this->setResponse($result);
+ return true;
+ }
+
+ function check_permission($params){
+ $kt=&$this->KT;
+
+ $user=$kt->get_user();
+ $document=$kt->get_document_by_id($params['document_id']);
+ $folder=&$kt->get_folder_by_id($document->ktapi_folder->folderid);
+ $folderDetail=$folder->get_detail();
+ $permissions=$folderDetail['permissions'];
+ if ($user->getId()==$document->document->getCheckedOutUserID()){
+ $permissions .= 'E';
+ }
+
+ $this->setResponse(array('status_code'=>0, 'permissions'=>$permissions));
+ return true;
+ }
+
+ function copydocument($params){
+ $kt=&$this->KT;
+
+ $response=$kt->copy_document($params['documentid'], $params['destfolderid'], $params['reason']);
+ if ($response['status_code']==0) {
+ $this->setResponse(array('status_code'=>0, 'status'=>'itemupdated', 'icon'=>'success', 'title'=>$this->xlate('Document Copied'), 'message'=>$this->xlate('Document has been successfully copied')));
+ return true;
+ }else{
+ $this->setResponse(array('status_code'=>1, 'status'=>'error', 'icon'=>'failure', 'title'=>$this->xlate('Unable to copy document'), 'message'=>$this->xlate('Unable to copy document')));
+ return false;
+ }
+ }
+
+ function movedocument($params){
+ $kt=$this->KT;
+
+ $response=$kt->move_document($params['documentid'], $params['destfolderid'], $params['reason']);
+ if ($response['status_code']==0) {
+ $this->setResponse(array('status_code'=>0, 'status'=>'itemupdated', 'icon'=>'success', 'title'=>$this->xlate('Document Moved'), 'message'=>$this->xlate('Document has been successfully moved')));
+ return true;
+ }else{
+ $this->setResponse(array('status_code'=>1, 'status'=>'error', 'icon'=>'failure', 'title'=>$this->xlate('Unable to move document'), 'message'=>$this->xlate('Unable to move document')));
+ return false;
+ }
+
+ }
+
+ function copyfolder($params){
+ $kt=&$this->KT;
+
+ $response=$kt->copy_folder($params['sourcefolderid'], $params['destfolderid'], $params['reason']);
+ if ($response['status_code']==0) {
+ $this->setResponse(array('status_code'=>0, 'status'=>'itemupdated', 'icon'=>'success', 'title'=>$this->xlate('Folder Copied'), 'message'=>$this->xlate('Folder has been successfully copied')));
+ return true;
+ }else{
+ $this->setResponse(array('status_code'=>1, 'status'=>'error', 'icon'=>'failure', 'title'=>$this->xlate('Unable to copy folder'), 'message'=>$this->xlate('Unable to copy folder')));
+ return false;
+ }
+
+ }
+
+ function movefolder($params){
+ $kt=&$this->KT;
+
+ $response=$kt->move_folder($params['sourcefolderid'], $params['destfolderid'], $params['reason']);
+ if ($response['status_code']==0) {
+ $this->setResponse(array('status_code'=>0, 'status'=>'itemupdated', 'icon'=>'success', 'title'=>$this->xlate('Folder Moved'), 'message'=>$this->xlate('Folder has been successfully moved')));
+ return true;
+ }else{
+ $this->setResponse(array('status_code'=>1, 'status'=>'error', 'icon'=>'failure', 'title'=>$this->xlate('Unable to move folder'), 'message'=>$this->xlate('Unable to move folder')));
+ return false;
+ }
+ }
+
+
+ function renamefolder($params){
+ $kt=&$this->KT;
+
+ $response=$kt->rename_folder($params['currentfolderid'], $params['newname']);
+ if ($response['status_code']==0) {
+ $this->setResponse(array('status_code'=>0, 'status'=>'folderupdated', 'icon'=>'success', 'title'=>$this->xlate('Folder Renamed'), 'message'=>$this->xlate('Folder has been successfully renamed')));
+ return true;
+ }else{
+ $this->setResponse(array('status_code'=>1, 'status'=>'error', 'icon'=>'failure', 'title'=>$this->xlate('Unable to rename folder'), 'message'=>$this->xlate('Unable to rename folder')));
+ return false;
+ }
+ }
+
+ function addfolder($params) {
+ $kt=&$this->KT;
+ $this->addDebug('parameters',$params);
+ $response=$kt->create_folder($params['currentfolderid'], $params['newname']);
+ $this->setResponse($response);
+ return true;
+ }
+
+ function deletefolder($params){
+ $kt=&$this->KT;
+
+ $response=$kt->delete_folder($params['folderid'], $params['reason']);
+ if ($response['status_code']==0) {
+ $this->setResponse(array('status_code'=>0, 'status'=>'folderdeleted', 'icon'=>'success', 'title'=>$this->xlate('Folder Deleted'), 'message'=>$this->xlate('Folder has been successfully deleted')));
+ return true;
+ }else{
+ $this->setResponse(array('status_code'=>1, 'status'=>'error', 'icon'=>'failure', 'title'=>$this->xlate('Unable to delete folder'), 'message'=>$this->xlate('Unable to delete folder')));
+ return false;
+ }
+ }
+
+ function candeletefolder($arr){
+ $kt=&$this->KT;
+
+ $folder=&$kt->get_folder_by_id($arr['folderid']);
+ if (PEAR::isError($folder)){
+ $this->setResponse('error 1');
+ return false;
+ }
+
+ $listing=$folder->get_listing(1, 'DF');
+ if (count($listing)==0) {
+ $this->setResponse(array('status_code'=>0, 'candelete'=>TRUE));
+ return true;
+ }else{
+ $this->setResponse(array('status_code'=>0, 'candelete'=>FALSE));
+ return true;
+ }
+ }
+}
+?>
\ No newline at end of file
diff --git a/webservice/clienttools/services/0.9/server.php b/webservice/clienttools/services/0.9/server.php
new file mode 100644
index 0000000..0ccb49c
--- /dev/null
+++ b/webservice/clienttools/services/0.9/server.php
@@ -0,0 +1,22 @@
+setResponse(array('online'=>true));
+ }
+
+ public function ping(){
+ $this->addResponse('pong',time());
+ }
+
+ public function getToken(){
+
+ }
+
+ public function phpInfo(){
+ ob_start();
+ phpinfo();
+ $this->addResponse('phpinfo',ob_get_clean());
+ }
+
+ }
+?>
\ No newline at end of file