MDL-50537 core_webservice: New external functions utility class
authorJuan Leyva <juanleyvadelgado@gmail.com>
Wed, 29 Jul 2015 14:09:18 +0000 (16:09 +0200)
committerJuan Leyva <juanleyvadelgado@gmail.com>
Wed, 9 Sep 2015 12:08:01 +0000 (14:08 +0200)
lib/externallib.php
lib/upgrade.txt

index 035ba63..fc87c50 100644 (file)
@@ -346,7 +346,7 @@ class external_api {
      * @param stdClass $context
      * @since Moodle 2.0
      */
-    protected static function validate_context($context) {
+    public static function validate_context($context) {
         global $CFG;
 
         if (empty($context)) {
@@ -876,3 +876,46 @@ class external_settings {
         return $this->file;
     }
 }
+
+/**
+ * Utility functions for the external API.
+ *
+ * @package    core_webservice
+ * @copyright  2015 Juan Leyva
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ * @since Moodle 3.0
+ */
+class external_util {
+
+    /**
+     * Validate a list of courses, returning the complete course objects for valid courses.
+     *
+     * @param  array $courseids A list of course ids
+     * @return array            An array of courses and the validation warnings
+     */
+    public static function validate_courses($courseids) {
+        // Delete duplicates.
+        $courseids = array_unique($courseids);
+        $courses = array();
+        $warnings = array();
+
+        foreach ($courseids as $cid) {
+            // Check the user can function in this context.
+            try {
+                $context = context_course::instance($cid);
+                external_api::validate_context($context);
+                $courses[$cid] = get_course($cid);
+            } catch (Exception $e) {
+                $warnings[] = array(
+                    'item' => 'course',
+                    'itemid' => $cid,
+                    'warningcode' => '1',
+                    'message' => 'No access rights in course context'
+                );
+            }
+        }
+
+        return array($courses, $warnings);
+    }
+
+}
index 0030bab..874ea3d 100644 (file)
@@ -133,6 +133,7 @@ information provided here is intended especially for developers.
 * The actionmenu hideMenu() function now expects an EventFacade object to be passed to it,
   i.e. a call to M.core.actionmenu.instance.hideMenu() should be change to M.core.actionmenu.instance.hideMenu(e)
 * In the html_editors (tinyMCE, Atto), the manage files button can be hidden by changing the 'enable_filemanagement' option to false.
+* external_api::validate_context now is public, it can be called from other classes.
 
 === 2.9.1 ===