X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Finclude%2Fclass_jsonRPC.inc;h=bf82d971cda725228084967a57319576340840a3;hb=9773098162a69430e5c427eb458578bb39e15560;hp=f7b7a501f4f4961c3e0a75c7242093e53bc2e7dc;hpb=26927538c086cd0b415129427dc8da7cd44a639c;p=gosa.git diff --git a/gosa-core/include/class_jsonRPC.inc b/gosa-core/include/class_jsonRPC.inc index f7b7a501f..bf82d971c 100644 --- a/gosa-core/include/class_jsonRPC.inc +++ b/gosa-core/include/class_jsonRPC.inc @@ -17,6 +17,34 @@ class jsonRPC { private $authModeDigest = FALSE; + /*! \brief This function is used by the property editor and checks the + * given rpc connection informations. + */ + public static function testConnectionProperties($message,$class,$name,$value, $type) + { + global $config; + + // Get currently used connection usernamem and password. + // We use the temporary values, due to the fact, that we do not want to test + // the current values, we want to test the modified values. + $user = $config->configRegistry->getProperty('core','gosaRpcUser'); + $username = $user->getValue($temporaryValue = TRUE); + $passwd = $config->configRegistry->getProperty('core','gosaRpcPassword'); + $passwdString = $passwd->getValue($temporaryValue = TRUE); + + $connection = new jsonRPC($config, $value, $username, $passwdString); + if(!$connection->success() && $message){ + msg_dialog::display(_("Warning"), + sprintf(_("The rpc connection (%s) specified for '%s:%s' is invalid! Error was: %s."), + bold($value),bold($class),bold($name), bold($connection->get_error())), + WARNING_DIALOG); + + } + + return($connection->success()); + } + + /*! \brief Constructs a new jsonRPC handle which is connected to a given URL. * It can either connect using a rpc method or via auth method digest. * @param object The gosa configuration object (class_config) @@ -65,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); } } @@ -91,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); @@ -152,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