]> git.mjollnir.org Git - moodle.git/commitdiff
webservices MDL-12886 update xmlrpc server/client to work with new web service descri...
authorjerome <jerome>
Fri, 28 Aug 2009 10:06:14 +0000 (10:06 +0000)
committerjerome <jerome>
Fri, 28 Aug 2009 10:06:14 +0000 (10:06 +0000)
webservice/xmlrpc/lib.php
webservice/xmlrpc/testclient/zend_xmlrpc_client.php

index b5fb1d51f64a6a7d6c5cecf7d8e699aaeddd964a..2a90c4192d5c145515b9721da2fbbe82d4306fe5 100644 (file)
@@ -36,7 +36,7 @@ final class xmlrpc_server extends webservice_server {
         $this->set_protocolname("XML-RPC");
         $this->set_protocolid("xmlrpc");
     }
-  
+
     public function run() {
         $enable = $this->get_enable();
         if (empty($enable)) {
@@ -53,14 +53,19 @@ final class xmlrpc_server extends webservice_server {
         if (empty($token)) {
             $server = new Zend_XmlRpc_Server();
             $server->setClass("ws_authentication", "authentication");
-            echo $server->handle();
+            // Create a request object
+            $request = new Zend_XmlRpc_Request_Http();
+            $params = $request->getParams();
+            $this->convertXmlrpcParams($params);
+            $request->setParams($params);
+            echo $server->handle($request);
         } else { // if token exist, do the authentication here
-            /// TODO: following function will need to be modified
+        /// TODO: following function will need to be modified
             $user = webservice_lib::mock_check_token($token);
             if (empty($user)) {
                 throw new moodle_exception('wrongidentification');
             } else {
-                /// TODO: probably change this
+            /// TODO: probably change this
                 global $USER;
                 $USER = $user;
             }
@@ -70,9 +75,38 @@ final class xmlrpc_server extends webservice_server {
             require_once(dirname(__FILE__) . '/../../'.$classpath.'/external.php');
 
             /// run the server
-            $server = new Zend_XmlRpc_Server(); 
+            $server = new Zend_XmlRpc_Server();
             $server->setClass($classpath."_external", $classpath);
-            echo $server->handle();
+            $request = new Zend_XmlRpc_Request_Http();
+            $params = $request->getParams();
+            $this->convertXmlrpcParams($params);
+            $request->setParams($params);         
+            echo $server->handle($request);
+        }
+    }
+
+    private function convertXmlrpcParams(&$params) {
+        if (is_array($params)) {
+        //get the first key
+            $key = key($params);
+
+            reset($params);
+
+            //if first key == 0 so do not change the params
+            if (strcmp($key, "0") == 0) {
+                foreach ($params as &$param) {
+                    $this->convertXmlrpcParams($param);
+                }
+            }
+
+            //first key is a string, params need to be converted into an object
+            //first go into
+            else {
+                foreach ($params as $paramkey => &$param) {
+                    $this->convertXmlrpcParams($param);
+                }
+                $params = (object) $params;
+            }
         }
     }
 
index f70ca558ee9ed45eb6bbc4a851170073ae1c1353..e033a765ea3152bd44a9bbb9d6f8b841d63e78e7 100644 (file)
@@ -30,22 +30,44 @@ require_once('../../../config.php');
 
 include "Zend/Loader.php";
 Zend_Loader::registerAutoload();
+
 
 //1. authentication
 $client = new Zend_XmlRpc_Client($CFG->wwwroot."/webservice/xmlrpc/server.php");
-$token = $client->call('authentication.get_token', array(array('username' => "wsuser", 'password' => "wspassword")));
+$params = new stdClass();
+$params->username = 'wsuser';
+$params->password = 'wspassword';
+$token = $client->call('authentication.get_token', $params);
 var_dump($token);
 
 //2. test functions
 $client = new Zend_XmlRpc_Client($CFG->wwwroot."/webservice/xmlrpc/server.php?classpath=user&token=".$token);
-var_dump($users = $client->call('user.get_users', array(array('search' => "admin"))));
+$params = new stdClass();
+$params->search = "admin";
+var_dump($users = $client->call('user.get_users', $params));
 print "<br/><br/>\n";
-var_dump($users = $client->call('user.create_users', array(array(array('firstname' => "firstname6",'username' => "mockuser66",'lastname' => "lastname6",'email' => "mockuser6@mockuser6.com",'password' => "password6")))));
+$user = new stdClass();
+$user->password = "password6";
+$user->email = "mockuser6@mockuser6.com";
+$user->username = "mockuser66";
+$user->firstname = "firstname6";
+$user->lastname = "lastname6";
+$params = new stdClass();
+$params->users = array($user);
+var_dump($users = $client->call('user.create_users', $params));
 print "<br/><br/>\n";
-var_dump($users = $client->call('user.update_users', array(array(array('username' => "mockuser66",'newusername' => "mockuser6b",'firstname' => "firstname6b")))));
+$usertoupdate = new stdClass();
+$usertoupdate->email = "mockuser6@mockuser6.com";
+$usertoupdate->username = "mockuser66";
+$usertoupdate->newusername = 'mockuser6b';
+$usertoupdate->firstname = "firstname6b";
+$params = new stdClass();
+$params->users = array($usertoupdate);
+var_dump($users = $client->call('user.update_users', $params));
 print "<br/><br/>\n";
-var_dump($users = $client->call('user.delete_users', array(array(array('username' => "mockuser6b")))));
+$params = new stdClass();
+$params->usernames = array("mockuser6b");
+var_dump($users = $client->call('user.delete_users', $params));
 //print "<br/><br/>\n";
 //var_dump($users = $client->call('user.tmp_do_multiple_user_searches', array(array(array('search' => "jerome"),array('search' => "admin")))));
 //print "<br/><br/>\n";