MDL-65665 forum: WS does not respect subscribe on reply user preference

This commit is contained in:
Mihail Geshoski
2019-06-14 08:47:55 +08:00
parent 48efb6d287
commit fd7738bc17
2 changed files with 46 additions and 4 deletions
+35
View File
@@ -825,4 +825,39 @@ class subscriptions {
return true;
}
/**
* Gets the default subscription value for the logged in user.
*
* @param \stdClass $forum The forum record
* @param \context $context The course context
* @param \cm_info $cm cm_info
* @param int|null $discussionid The discussion we are checking against
* @return bool Default subscription
* @throws coding_exception
*/
public static function get_user_default_subscription($forum, $context, $cm, $discussionid = null) {
global $USER;
$manageactivities = has_capability('moodle/course:manageactivities', $context);
if (self::subscription_disabled($forum) && !$manageactivities) {
// User does not have permission to subscribe to this discussion at all.
$discussionsubscribe = false;
} else if (self::is_forcesubscribed($forum)) {
// User does not have permission to unsubscribe from this discussion at all.
$discussionsubscribe = true;
} else {
if (isset($discussion) && self::is_subscribed($USER->id, $forum, $discussionid, $cm)) {
// User is subscribed to the discussion - continue the subscription.
$discussionsubscribe = true;
} else if (!isset($discussionid) && self::is_subscribed($USER->id, $forum, null, $cm)) {
// Starting a new discussion, and the user is subscribed to the forum - subscribe to the discussion.
$discussionsubscribe = true;
} else {
// User is not subscribed to either forum or discussion. Follow user preference.
$discussionsubscribe = $USER->autosubscribe ? $USER->autosubscribe : false;
}
}
return $discussionsubscribe;
}
}
+11 -4
View File
@@ -823,9 +823,14 @@ class mod_forum_external extends external_api {
$context = context_module::instance($cm->id);
self::validate_context($context);
$coursecontext = \context_course::instance($course->id);
$discussionsubscribe = \mod_forum\subscriptions::get_user_default_subscription($forum, $coursecontext,
$cm, null);
// Validate options.
$options = array(
'discussionsubscribe' => true,
'discussionsubscribe' => $discussionsubscribe,
'private' => false,
'inlineattachmentsid' => 0,
'attachmentsid' => null
);
@@ -896,9 +901,11 @@ class mod_forum_external extends external_api {
$completion->update_state($cm, COMPLETION_COMPLETE);
}
$settings = new stdClass();
$settings->discussionsubscribe = $options['discussionsubscribe'];
forum_post_subscription($settings, $forum, $discussion);
if ($options['discussionsubscribe']) {
$settings = new stdClass();
$settings->discussionsubscribe = $options['discussionsubscribe'];
forum_post_subscription($settings, $forum, $discussion);
}
} else {
throw new moodle_exception('couldnotadd', 'forum');
}