Merged branch 'MDL-26777-wip' of git://github.com/mouneyrac/moodle.git
authorSam Hemelryk <sam@moodle.com>
Wed, 8 Jun 2011 09:52:59 +0000 (17:52 +0800)
committerSam Hemelryk <sam@moodle.com>
Wed, 8 Jun 2011 09:52:59 +0000 (17:52 +0800)
1  2 
lang/en/webservice.php
lib/db/services.php
webservice/externallib.php
webservice/lib.php
webservice/simpletest/testwebservice.php

Simple merge
@@@ -206,38 -206,14 +206,48 @@@ $functions = array
          'capabilities'=> 'moodle/course:create,moodle/course:visibility',
      ),
  
 +    // === message related functions ===
 +
 +    'moodle_message_send_messages' => array(
 +        'classname'   => 'moodle_message_external',
 +        'methodname'  => 'send_messages',
 +        'classpath'   => 'message/externallib.php',
 +        'description' => 'Send messages',
 +        'type'        => 'write',
 +        'capabilities'=> 'moodle/site:sendmessage',
 +    ),
 +
 +    // === notes related functions ===
 +
 +    'moodle_notes_create_notes' => array(
 +        'classname'   => 'moodle_notes_external',
 +        'methodname'  => 'create_notes',
 +        'classpath'   => 'notes/externallib.php',
 +        'description' => 'Create notes',
 +        'type'        => 'write',
 +        'capabilities'=> 'moodle/notes:manage',
 +    ),
 +
+     // === webservice related functions ===
+     'moodle_webservice_get_siteinfo' => array(
+         'classname'   => 'moodle_webservice_external',
+         'methodname'  => 'get_siteinfo',
+         'classpath'   => 'webservice/externallib.php',
+         'description' => 'Return some site info / user info / list web service functions',
+         'type'        => 'read',
+     ),
  );
 +
 +$services = array(
 +   'Moodle mobile web service'  => array(
 +        'functions' => array (
 +            'moodle_enrol_get_users_courses',
 +            'moodle_enrol_get_enrolled_users',
 +            'moodle_user_get_users_by_id'),
 +        'enabled' => 0,
 +        'restrictedusers' => 0,
 +        'shortname' => MOODLE_OFFICIAL_MOBILE_SERVICE
 +    ),
 +);
index 0000000,5081c04..2d8db51
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,134 +1,136 @@@
 -                    new external_value(PARAM_ALPHANUMEXT, 'service shortname'),
+ <?php
+ // This file is part of Moodle - http://moodle.org/
+ //
+ // Moodle is free software: you can redistribute it and/or modify
+ // it under the terms of the GNU General Public License as published by
+ // the Free Software Foundation, either version 3 of the License, or
+ // (at your option) any later version.
+ //
+ // Moodle is distributed in the hope that it will be useful,
+ // but WITHOUT ANY WARRANTY; without even the implied warranty of
+ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ // GNU General Public License for more details.
+ //
+ // You should have received a copy of the GNU General Public License
+ // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
+ /**
+  * external API for mobile web services
+  *
+  * @package    core
+  * @subpackage webservice
+  * @copyright  2011 Moodle Pty Ltd (http://moodle.com)
+  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+  */
+ class moodle_webservice_external extends external_api {
+     public static function get_siteinfo_parameters() {
+         return new external_function_parameters(
+             array('serviceshortnames' => new external_multiple_structure (
 -                        we return the mobile service functions', VALUE_DEFAULT, array()),
 -                )
++                new external_value(
++                    PARAM_ALPHANUMEXT,
++                    'service shortname'),
+                     'service shortnames - by default, if the list is empty and mobile web services are enabled,
 -     * Return user information including profil picture + basic site information
++                    we return the mobile service functions',
++                    VALUE_DEFAULT,
++                    array()
++                ),
++            )
+         );
+     }
+     /**
 -     * $param $serviceshortnames array of service shortnames - the functions of these services will be returned
 -     * @global type $USER
 -     * @global type $SITE
 -     * @global type $CFG
 -     * @return type
++     * Return user information including profile picture + basic site information
+      * Note:
+      * - no capability checking because we return just known information by logged user
 -         $params = self::validate_parameters(self::get_siteinfo_parameters(),
 -                array('serviceshortnames'=>$serviceshortnames));
++     * @param array $serviceshortnames of service shortnames - the functions of these services will be returned
++     * @return array
+      */
+     function get_siteinfo($serviceshortnames = array()) {
+         global $USER, $SITE, $CFG;
 -                            ), 'functions that are available')
++        $params = self::validate_parameters(self::get_siteinfo_parameters(),
++                      array('serviceshortnames'=>$serviceshortnames));
+         $profileimageurl = moodle_url::make_pluginfile_url(
+                 get_context_instance(CONTEXT_USER, $USER->id)->id, 'user', 'icon', NULL, '/', 'f1');
+         require_once($CFG->dirroot . "/webservice/lib.php");
+         $webservice = new webservice();
+         //If no service listed always return the mobile one by default
+         if (empty($params['serviceshortnames']) and $CFG->enablewebservices) {
+            $mobileservice = $webservice->get_external_service_by_shortname(MOODLE_OFFICIAL_MOBILE_SERVICE);
+            if ($mobileservice->enabled) {
+                $params['serviceshortnames'] = array(MOODLE_OFFICIAL_MOBILE_SERVICE); //return mobile service by default
+            }
+         }
+         //retrieve the functions related to the services
+         $functions = $webservice->get_external_functions_by_enabled_services($params['serviceshortnames']);
+         //built up the returned values of the list of functions
+         $componentversions = array();
+         $avalaiblefunctions = array();
+         foreach ($functions as $function) {
+             $functioninfo = array();
+             $functioninfo['name'] = $function->name;
+             if ($function->component == 'moodle') {
+                 $version = $CFG->version; //moodle version
+             } else {
+                 $versionpath = get_component_directory($function->component).'/version.php';
+                 if (is_readable($versionpath)) {
+                     //we store the component version once retrieved (so we don't load twice the version.php)
+                     if (!isset($componentversions[$function->component])) {
+                         include($versionpath);
+                         $componentversions[$function->component] = $plugin->version;
+                         $version = $plugin->version;
+                     } else {
+                         $version = $componentversions[$function->component];
+                     }
+                 } else {
+                     //function component should always have a version.php,
+                     //otherwise the function should have been described with component => 'moodle'
+                     throw new moodle_exception('missingversionfile', 'webservice', '', $function->component);
+                 }
+             }
+             $functioninfo['version'] = $version;
+             $avalaiblefunctions[] = $functioninfo;
+         }
+         return array(
+             'sitename' => $SITE->fullname,
+             'siteurl' => $CFG->wwwroot,
+             'username' => $USER->username,
+             'firstname' => $USER->firstname,
+             'lastname' => $USER->lastname,
+             'fullname' => fullname($USER),
+             'userid' => $USER->id,
+             'userpictureurl' => $profileimageurl->out(false),
+             'functions' => $avalaiblefunctions
+         );
+     }
+     public static function get_siteinfo_returns() {
+         return new external_single_structure(
+             array(
+                 'sitename'       => new external_value(PARAM_RAW, 'site name'),
+                 'username'       => new external_value(PARAM_RAW, 'username'),
+                 'firstname'      => new external_value(PARAM_TEXT, 'first name'),
+                 'lastname'       => new external_value(PARAM_TEXT, 'last name'),
+                 'fullname'       => new external_value(PARAM_TEXT, 'user full name'),
+                 'userid'         => new external_value(PARAM_INT, 'user id'),
+                 'siteurl'        => new external_value(PARAM_RAW, 'site url'),
+                 'userpictureurl' => new external_value(PARAM_URL, 'the user profile picture'),
+                 'functions'      => new external_multiple_structure(
+                     new external_single_structure(
+                         array(
+                             'name' => new external_value(PARAM_RAW, 'function name'),
+                             'version' => new external_value(PARAM_FLOAT, 'The version number of moodle site/local plugin linked to the function')
++                        ), 'functions that are available')
+                     ),
+             )
+         );
+     }
+ }
Simple merge