Newer
Older
<?php
/*+***********************************************************************************
* The contents of this file are subject to the vtiger CRM Public License Version 1.0
* ("License"); You may not use this file except in compliance with the License
* The Original Code is: vtiger CRM Open Source
* The Initial Developer of the Original Code is vtiger.
* Portions created by vtiger are Copyright (C) vtiger.
* All Rights Reserved.
*************************************************************************************/
function setBuiltIn($json){
}
class OperationManager{
private $format;
private $formatsData=array(
"json"=>array(
"includePath"=>"include/Zend/Json.php",
"class"=>"Zend_Json",
"encodeMethod"=>"encode",
"decodeMethod"=>"decode",
"postCreate"=>"setBuiltIn"
)
);
private $operationMeta = null;
private $formatObjects ;
private $inParamProcess ;
private $sessionManager;
private $pearDB;
private $operationName;
private $type;
private $handlerPath;
private $handlerMethod;
private $preLogin;
private $operationId;
private $operationParams;
function __construct($adb,$operationName,$format, $sessionManager)
{
$this->format = strtolower($format);
$this->sessionManager = $sessionManager;
$this->formatObjects = array();
foreach($this->formatsData as $frmt=>$frmtData){
require_once($frmtData["includePath"]);
$instance = new $frmtData["class"]();
$this->formatObjects[$frmt]["encode"] = array(&$instance,$frmtData["encodeMethod"]);
$this->formatObjects[$frmt]["decode"] = array(&$instance,$frmtData["decodeMethod"]);
if($frmtData["postCreate"]){
call_user_func($frmtData["postCreate"],$instance);
}
}
$this->pearDB = $adb;
$this->operationName = $operationName;
$this->inParamProcess = array();
$this->inParamProcess["encoded"] = &$this->formatObjects[$this->format]["decode"];
$this->fillOperationDetails($operationName);
}
function OperationManager($adb,$operationName,$format, $sessionManager){
// PHP4-style constructor.
// This will NOT be invoked, unless a sub-class that extends `foo` calls it.
// In that case, call the new-style constructor to keep compatibility.
self::__construct($adb,$operationName,$format, $sessionManager);
}
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
function isPreLoginOperation(){
return $this->preLogin == 1;
}
private function fillOperationDetails($operationName){
$sql = "select * from vtiger_ws_operation where name=?";
$result = $this->pearDB->pquery($sql,array($operationName));
if($result){
$rowCount = $this->pearDB->num_rows($result);
if($rowCount > 0){
$row = $this->pearDB->query_result_rowdata($result,0);
$this->type = $row['type'];
$this->handlerMethod = $row['handler_method'];
$this->handlerPath = $row['handler_path'];
$this->preLogin = $row['prelogin'];
$this->operationName = $row['name'];
$this->operationId = $row['operationid'];
$this->fillOperationParameters();
return;
}
}
throw new WebServiceException(WebServiceErrorCode::$UNKNOWNOPERATION,"Unknown operation requested");
}
private function fillOperationParameters(){
$sql = "select * from vtiger_ws_operation_parameters where operationid=? order by sequence";
$result = $this->pearDB->pquery($sql,array($this->operationId));
$this->operationParams = array();
if($result){
$rowCount = $this->pearDB->num_rows($result);
if($rowCount > 0){
for ($i=0;$i<$rowCount;++$i){
$row = $this->pearDB->query_result_rowdata($result,$i);
array_push($this->operationParams,array($row['name']=>$row['type']));
}
}
}
}
public function getOperationInput(){
$type = strtolower($this->type);
switch($type){
case 'get': $input = &$_GET;
return $input;
case 'post': $input = &$_POST;
return $input;
default: $input = &$_REQUEST;
return $input;
}
}
function sanitizeOperation($input){
return $this->sanitizeInputForType($input);
}
function sanitizeInputForType($input){
$sanitizedInput = array();
foreach($this->operationParams as $ind=>$columnDetails){
foreach ($columnDetails as $columnName => $type) {
$sanitizedInput[$columnName] = $this->handleType($type,vtws_getParameter($input,$columnName));;
}
}
return $sanitizedInput;
}
function handleType($type,$value){
$result = null;
$value = $value ? stripslashes($value) : "";
if(isset($this->inParamProcess[$type]) && $this->inParamProcess[$type]){
$result = call_user_func($this->inParamProcess[$type],$value);
}else{
$result = $value;
}
return $result;
}
function runOperation($params,$user){
global $API_VERSION;
try{
$operation = strtolower($this->operationName);
if(!$this->preLogin){
$params["user"] = $user;
return call_user_func_array($this->handlerMethod,$params);
}else{
/* PHP 8.x fix to match target handler arguments (named parameter) */
if ($this->handlerMethod == "vtws_login") {
if (isset($params["accessKey"])) {
$params["pwd"] = $params["accessKey"];
unset($params["accessKey"]);
}
}
$userDetails = call_user_func_array($this->handlerMethod,$params);
if(is_array($userDetails)){
return $userDetails;
}else{
$this->sessionManager->set("authenticatedUserId", $userDetails->id);
global $adb;
$webserviceObject = VtigerWebserviceObject::fromName($adb,"Users");
$userId = vtws_getId($webserviceObject->getEntityId(),$userDetails->id);
$vtigerVersion = vtws_getVtigerVersion();
$userInfo = array(
'username' => $userDetails->user_name,
'first_name' => $userDetails->first_name,
'last_name' => $userDetails->last_name,
'email' => $userDetails->email1,
'time_zone' => $userDetails->time_zone,
'hour_format' => $userDetails->hour_format,
'date_format' => $userDetails->date_format,
'is_admin' => $userDetails->is_admin,
'call_duration' => $userDetails->callduration,
'other_event_duration' => $userDetails->othereventduration,
'sessionName'=>$this->sessionManager->getSessionId(),
'userId'=>$userId,
'version'=>$API_VERSION,
'vtigerVersion'=>$vtigerVersion
);
return $userInfo;

Satish
committed
} catch (DuplicateException $e) {
throw $e;
}catch(WebServiceException $e){
throw $e;
}catch(Exception $e){
throw new WebServiceException(WebServiceErrorCode::$INTERNALERROR,"Unknown Error while processing request");
}
}
function encode($param){
return call_user_func($this->formatObjects[$this->format]["encode"],$param);
}
function getOperationIncludes(){
$includes = array();
array_push($includes,$this->handlerPath);
return $includes;
}
}