diff --git a/user/external.php b/user/external.php
index d7f08b791ff..fcd488a10b1 100644
--- a/user/external.php
+++ b/user/external.php
@@ -81,12 +81,12 @@ final class user_external extends moodle_external {
global $DB;
$user = $DB->get_record('user', array('username'=>$username, 'mnethostid'=>$mnethostid));
/// PLEASE UNCOMMENT HERE ONCE AUTHENTICATION IS IMPLEMENTED - $USER/context need to be set here
- //if (require_capability('moodle/user:delete', get_context_instance(CONTEXT_SYSTEM))) {
+// if (has_capability('moodle/user:delete', get_context_instance(CONTEXT_SYSTEM))) {
return delete_user($user); //this function is in moodlelib.php
- //}
- //else {
- // throw new moodle_exception('couldnotdeleteuser');
- //}
+// }
+// else {
+// throw new moodle_exception('couldnotdeleteuser');
+// }
}
/**
diff --git a/webservice/rest/locallib.php b/webservice/rest/locallib.php
new file mode 100644
index 00000000000..d5848133f4c
--- /dev/null
+++ b/webservice/rest/locallib.php
@@ -0,0 +1,110 @@
+ _mod_forum_)
+ $classname = substr($classname,1, strlen($classname) - 1); //remove first _ (e.g. _mod_forum => mod_forum)
+ $classname .= 'external';
+
+ require_once($CFG->dirroot.$apipath.'external.php');
+ $wsapi = new $classname();
+ $description = $wsapi->get_function_webservice_description($functionname); //retrieve the web service description for this function
+
+///This following line is only REST protocol
+ $params = retrieve_params ($description); //retrieve the REST params
+
+///Generic part to any protocols
+ if ($params === false) {
+ //return an error message, the REST params doesn't match with the web service description
+ }
+ $res = call_user_func_array ( $classname.'::'.$functionname, $params);
+
+///Transform result into xml in order to send the REST response
+ $return = mdl_conn_rest_object_to_xml ($res,key($description['return']));
+
+ return "$return";
+}
+
+
+/**
+ *
+ * @author Jerome Mouneyrac
+ * @param $description
+ * @return
+ */
+function retrieve_params ($description) {
+ //retrieve REST param matching the description (warning: PHP assign the first instanciation as the first position in the table)
+ foreach ($description['wsparams'] as $paramname => $paramtype) {
+ $value = optional_param($paramname,null,$paramtype);
+ if (!empty($value)) {
+ $params[$paramname] = $value;
+ }
+ }
+
+ return $params;
+}
+
+/**
+ * auxiliar function for simplexml_object_to_xml
+ * @author Ferran Recio, David Castro Garcia
+ * @param $obj
+ * @param $tag
+ * @param $atts assoc array (key => value)
+ * @return string
+ */
+function mdl_conn_rest_object_to_xml ($obj, $tag,$atts=false) {
+ $res = '';
+ $tag_atts = '';
+ if ($atts) {
+ $main_atts = array();
+ foreach ($atts as $att=>$val) {
+ $main_atts[] = "$att=\"".urlencode($val)."\"";
+ }
+ if (count($main_atts)) $tag_atts = ' '.implode(' ',$main_atts);
+ }
+
+ //if is an object
+ if (is_object($obj)) {
+ $parts = get_object_vars($obj);
+ foreach ($parts as $tag2 => $val) {
+ $res.= mdl_conn_rest_object_to_xml ($val, $tag2);
+ }
+ return "<$tag$tag_atts>\n$res$tag>\n";
+ }
+ //if it's an array all elements will be inside te same tag but with a new atribute key
+ if (is_array($obj)){
+ if (!$atts) $atts = array();
+ //we came from another array
+ if (isset($atts['keys'])) $atts = array();
+ foreach ($obj as $key=>$val) {
+ $array_atts = $atts;
+ $array_atts['key'] = $key;
+ $res.= mdl_conn_rest_object_to_xml ($val, $tag,$array_atts);
+ }
+ return $res;
+ }
+ //any other type, just encapsule it
+ $obj = htmlentities($obj);
+ return "<$tag$tag_atts>$obj$tag>\n";
+
+}
+
+?>
\ No newline at end of file
diff --git a/webservice/rest/server.php b/webservice/rest/server.php
index 20eb8afbff3..a07085464d7 100644
--- a/webservice/rest/server.php
+++ b/webservice/rest/server.php
@@ -13,7 +13,7 @@
*/
require_once(dirname(dirname(dirname(__FILE__))) . '/config.php');
-require_once('lib.php');
+require_once('locallib.php');
if (empty($CFG->enablewebservices)) {
die;
@@ -23,6 +23,6 @@ if (empty($CFG->enablewebservices)) {
$rest_arguments = get_file_argument('server.php');
header ("Content-type: text/xml");
-
+//TODO implement authentication (probably in the locallib.php)
echo call_moodle_function($rest_arguments);
?>
\ No newline at end of file
diff --git a/webservice/soap/server.php b/webservice/soap/server.php
index 703cca879a5..03371edcfeb 100644
--- a/webservice/soap/server.php
+++ b/webservice/soap/server.php
@@ -20,9 +20,14 @@ if (empty($CFG->enablewebservices)) {
$classpath = optional_param(classpath,null,PARAM_ALPHA);
require_once(dirname(__FILE__) . '/../../'.$classpath.'/external.php');
+//TODO retrieve the token from the url
+// if the token doesn't exist create a server with a connection.wsdl
+// and set a class containing only get_token() (need to create connection.wsdl and class soapiniconnection)
+// if token exist, do the authentication here
+
/// run the server
-$server = new SoapServer("moodle.wsdl");
-$server->setClass($classpath."_external");
+$server = new SoapServer("moodle.wsdl"); //TODO: need to call the wsdl generation on the fly
+$server->setClass($classpath."_external"); //TODO: pass $user as parameter
$server->handle();
?>
\ No newline at end of file