MDL-52165 mod_forum: New Web Service mod_forum_can_add_discussion
[moodle.git] / mod / forum / externallib.php
index 20c7890..f45f7df 100644 (file)
@@ -1260,4 +1260,70 @@ class mod_forum_external extends external_api {
         );
     }
 
+    /**
+     * Returns description of method parameters
+     *
+     * @return external_function_parameters
+     * @since Moodle 3.1
+     */
+    public static function can_add_discussion_parameters() {
+        return new external_function_parameters(
+            array(
+                'forumid' => new external_value(PARAM_INT, 'Forum instance ID'),
+                'groupid' => new external_value(PARAM_INT, 'The group to check, default to active group.
+                                                Use -1 to check if the user can post in all the groups.', VALUE_DEFAULT, null)
+            )
+        );
+    }
+
+    /**
+     * Check if the current user can add discussions in the given forum (and optionally for the given group).
+     *
+     * @param int $forumid the forum instance id
+     * @param int $groupid the group to check, default to active group. Use -1 to check if the user can post in all the groups.
+     * @return array of warnings and the status (true if the user can add discussions)
+     * @since Moodle 3.1
+     * @throws moodle_exception
+     */
+    public static function can_add_discussion($forumid, $groupid = null) {
+        global $DB, $CFG;
+        require_once($CFG->dirroot . "/mod/forum/lib.php");
+
+        $params = self::validate_parameters(self::can_add_discussion_parameters(),
+                                            array(
+                                                'forumid' => $forumid,
+                                                'groupid' => $groupid,
+                                            ));
+        $warnings = array();
+
+        // Request and permission validation.
+        $forum = $DB->get_record('forum', array('id' => $params['forumid']), '*', MUST_EXIST);
+        list($course, $cm) = get_course_and_cm_from_instance($forum, 'forum');
+
+        $context = context_module::instance($cm->id);
+        self::validate_context($context);
+
+        $status = forum_user_can_post_discussion($forum, $params['groupid'], -1, $cm, $context);
+
+        $result = array();
+        $result['status'] = $status;
+        $result['warnings'] = $warnings;
+        return $result;
+    }
+
+    /**
+     * Returns description of method result value
+     *
+     * @return external_description
+     * @since Moodle 3.1
+     */
+    public static function can_add_discussion_returns() {
+        return new external_single_structure(
+            array(
+                'status' => new external_value(PARAM_BOOL, 'True if the user can add discussions, false otherwise.'),
+                'warnings' => new external_warnings()
+            )
+        );
+    }
+
 }