MDL-55162 mod_assign: New WS mod_assign_view_assign
authorJuan Leyva <juanleyvadelgado@gmail.com>
Fri, 8 Jul 2016 11:51:41 +0000 (12:51 +0100)
committerJuan Leyva <juanleyvadelgado@gmail.com>
Tue, 12 Jul 2016 13:39:24 +0000 (14:39 +0100)
mod/assign/db/services.php
mod/assign/externallib.php
mod/assign/locallib.php
mod/assign/tests/externallib_test.php
mod/assign/version.php
mod/assign/view.php

index 068e80d..0a33665 100644 (file)
@@ -220,4 +220,14 @@ $functions = array(
                 'ajax'          => true,
                 'capabilities'  => 'mod/assign:view, mod/assign:viewgrades'
         ),
+        'mod_assign_view_assign' => array(
+            'classname'     => 'mod_assign_external',
+            'methodname'    => 'view_assign',
+            'classpath'     => 'mod/assign/externallib.php',
+            'description'   => 'Update the module completion status.',
+            'type'          => 'write',
+            'capabilities'  => 'mod/assign:view',
+            'services'      => array(MOODLE_OFFICIAL_MOBILE_SERVICE)
+        ),
+
 );
index 9bdc7cc..5065760 100644 (file)
@@ -2856,4 +2856,79 @@ class mod_assign_external extends external_api {
             'user' => $userdescription,
         ));
     }
+
+    /**
+     * Utility function for validating an assign.
+     *
+     * @param int $assignid assign instance id
+     * @return array array containing the assign, course, context and course module objects
+     * @since  Moodle 3.2
+     */
+    protected static function validate_assign($assignid) {
+        global $DB;
+
+        // Request and permission validation.
+        $assign = $DB->get_record('assign', array('id' => $assignid), 'id', MUST_EXIST);
+        list($course, $cm) = get_course_and_cm_from_instance($assign, 'assign');
+
+        $context = context_module::instance($cm->id);
+        // Please, note that is not required to check mod/assign:view because is done by validate_context->require_login.
+        self::validate_context($context);
+        $assign = new assign($context, $cm, $course);
+
+        return array($assign, $course, $cm, $context);
+    }
+
+    /**
+     * Describes the parameters for view_assign.
+     *
+     * @return external_external_function_parameters
+     * @since Moodle 3.2
+     */
+    public static function view_assign_parameters() {
+        return new external_function_parameters (
+            array(
+                'assignid' => new external_value(PARAM_INT, 'assign instance id'),
+            )
+        );
+    }
+
+    /**
+     * Update the module completion status.
+     *
+     * @param int $assignid assign instance id
+     * @return array of warnings and status result
+     * @since Moodle 3.2
+     */
+    public static function view_assign($assignid) {
+        $warnings = array();
+        $params = array(
+            'assignid' => $assignid,
+        );
+        $params = self::validate_parameters(self::view_assign_parameters(), $params);
+
+        list($assign, $course, $cm, $context) = self::validate_assign($params['assignid']);
+
+        $assign->set_module_viewed();
+
+        $result = array();
+        $result['status'] = true;
+        $result['warnings'] = $warnings;
+        return $result;
+    }
+
+    /**
+     * Describes the view_assign return value.
+     *
+     * @return external_single_structure
+     * @since Moodle 3.2
+     */
+    public static function view_assign_returns() {
+        return new external_single_structure(
+            array(
+                'status' => new external_value(PARAM_BOOL, 'status: true if success'),
+                'warnings' => new external_warnings(),
+            )
+        );
+    }
 }
index 2aa605d..a97f203 100644 (file)
@@ -8068,6 +8068,15 @@ class assign {
         return;
     }
 
+    /**
+     * Update the module completion status (set it viewed).
+     *
+     * @since Moodle 3.2
+     */
+    public function set_module_viewed() {
+        $completion = new completion_info($this->get_course());
+        $completion->set_module_viewed($this->get_course_module());
+    }
 }
 
 /**
index 22cd561..4f8e7ea 100644 (file)
@@ -2391,4 +2391,32 @@ class mod_assign_external_testcase extends externallib_advanced_testcase {
             'teacher' => $teacher
         );
     }
+
+    /**
+     * Test test_view_assign
+     */
+    public function test_view_assign() {
+        global $CFG;
+
+        $CFG->enablecompletion = 1;
+        $this->resetAfterTest();
+
+        $this->setAdminUser();
+        // Setup test data.
+        $course = $this->getDataGenerator()->create_course(array('enablecompletion' => 1));
+        $assign = $this->getDataGenerator()->create_module('assign', array('course' => $course->id),
+                                                            array('completion' => 2, 'completionview' => 1));
+        $context = context_module::instance($assign->cmid);
+        $cm = get_coursemodule_from_instance('assign', $assign->id);
+
+        $result = mod_assign_external::view_assign($assign->id);
+        $result = external_api::clean_returnvalue(mod_assign_external::view_assign_returns(), $result);
+        $this->assertTrue($result['status']);
+        $this->assertEmpty($result['warnings']);
+
+        // Check completion status.
+        $completion = new completion_info($course);
+        $completiondata = $completion->get_data($cm);
+        $this->assertEquals(1, $completiondata->completionstate);
+    }
 }
index 23e28b2..c43996a 100644 (file)
@@ -25,6 +25,6 @@
 defined('MOODLE_INTERNAL') || die();
 
 $plugin->component = 'mod_assign'; // Full name of the plugin (used for diagnostics).
-$plugin->version  = 2016070400;    // The current module version (Date: YYYYMMDDXX).
+$plugin->version  = 2016070401;    // The current module version (Date: YYYYMMDDXX).
 $plugin->requires = 2016051900;    // Requires this Moodle version.
 $plugin->cron     = 60;
index 01d0edd..8c3ddfe 100644 (file)
@@ -44,8 +44,8 @@ $urlparams = array('id' => $id,
 $url = new moodle_url('/mod/assign/view.php', $urlparams);
 $PAGE->set_url($url);
 
-$completion=new completion_info($course);
-$completion->set_module_viewed($cm);
+// Update module completion status.
+$assign->set_module_viewed();
 
 // Get the assign class to
 // render the page.