X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Finclude%2Fclass_jsonRPC.inc;h=bf82d971cda725228084967a57319576340840a3;hb=9773098162a69430e5c427eb458578bb39e15560;hp=689112171907eb70669e69b963cdfb2c4d1b767c;hpb=5dfc748bde5b2fe59c9cf9a6353802fa07e6d4cc;p=gosa.git diff --git a/gosa-core/include/class_jsonRPC.inc b/gosa-core/include/class_jsonRPC.inc index 689112171..bf82d971c 100644 --- a/gosa-core/include/class_jsonRPC.inc +++ b/gosa-core/include/class_jsonRPC.inc @@ -93,12 +93,14 @@ class jsonRPC { // Try to login if($this->authModeDigest){ - curl_setopt($this->curlHandler, CURLOPT_USERPWD , "{$this->username}:{$this->userPassword}"); + if(!empty($this->username)) + curl_setopt($this->curlHandler, CURLOPT_USERPWD , "{$this->username}:{$this->userPassword}"); curl_setopt($this->curlHandler, CURLOPT_HTTPAUTH , CURLAUTH_ANYSAFE); }else{ curl_setopt($this->curlHandler, CURLOPT_COOKIESESSION , TRUE); curl_setopt($this->curlHandler, CURLOPT_COOKIEFILE, 'cookiefile.txt'); - $this->login($this->username, $this->userPassword); + if(!empty($this->username)) + $this->login($this->username, $this->userPassword); } } @@ -119,7 +121,11 @@ class jsonRPC { { if($this->lastStats['http_code'] != 200){ $error = $this->getHttpStatusCodeMessage($this->lastStats['http_code']); - if(isset($this->lastResult['error']['message'])){ + if(isset($this->lastResult['error']['error']) && is_array($this->lastResult['error']['error'])){ + $err = $this->lastResult['error']['error']; + $message = call_user_func_array(sprintf,$err); + $error .= $message; + }elseif(isset($this->lastResult['error']['message'])){ $error .= ": ".$this->lastResult['error']['message']; } return($error); @@ -180,10 +186,52 @@ class jsonRPC { print_a(array('CALLED:' => array($method => $params))); print_a(array('RESPONSE' => $response)); } - return($response['result']); + $return = $response['result']; + + // Inspect the result and replace predefined statements with their + // coresponding classes. + $return = $this->inspectJsonResult($return); + + return($return); } + + public function inspectJsonResult($result) + { + // Check for remove objects we've to create + if(isset($result['__jsonclass__']) && class_available('remoteObject')){ + + // Get all relevant class informations + $classDef = $result['__jsonclass__'][1]; + $type = $classDef[0]; + $ref_id = $classDef[1]; + $object_id = $classDef[2]; + $methods = $classDef[3]; + $properties = $classDef[4]; + + // Prepare values + $values = array(); + foreach($properties as $prop){ + $values[$prop] = NULL; + if(isset($res[$prop])) $values[$prop] = $res[$prop]; + } + + // Build up remote object + $object = new remoteObject($rpc, $type, $properties, $values, $methods, $object_id, $ref_id); + return($object); + } + return($result); + } + + + + + + + + + /*! \brief This method finally initiates the real RPC requests and handles * the result from the server. * @param string method The method to call