From 5000d34e8ec4216c0b522a269fbeed058bb22a94 Mon Sep 17 00:00:00 2001 From: jerome Date: Fri, 28 Aug 2009 10:06:14 +0000 Subject: [PATCH] webservices MDL-12886 update xmlrpc server/client to work with new web service description --- webservice/xmlrpc/lib.php | 46 ++++++++++++++++--- .../xmlrpc/testclient/zend_xmlrpc_client.php | 34 +++++++++++--- 2 files changed, 68 insertions(+), 12 deletions(-) diff --git a/webservice/xmlrpc/lib.php b/webservice/xmlrpc/lib.php index b5fb1d51f6..2a90c4192d 100644 --- a/webservice/xmlrpc/lib.php +++ b/webservice/xmlrpc/lib.php @@ -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; + } } } diff --git a/webservice/xmlrpc/testclient/zend_xmlrpc_client.php b/webservice/xmlrpc/testclient/zend_xmlrpc_client.php index f70ca558ee..e033a765ea 100644 --- a/webservice/xmlrpc/testclient/zend_xmlrpc_client.php +++ b/webservice/xmlrpc/testclient/zend_xmlrpc_client.php @@ -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 "

\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 "

\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 "

\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 "

\n"; //var_dump($users = $client->call('user.tmp_do_multiple_user_searches', array(array(array('search' => "jerome"),array('search' => "admin"))))); //print "

\n"; -- 2.39.5