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