Code

Updated error handling
[gosa.git] / gosa-core / include / class_jsonRPC.inc
index 689112171907eb70669e69b963cdfb2c4d1b767c..bf82d971cda725228084967a57319576340840a3 100644 (file)
@@ -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