Skip to content

Commit 3d1894c

Browse files
Fix allowforcesubscribe capability on subscription manage page (index.php)
1 parent 3f253f0 commit 3d1894c

File tree

5 files changed

+25
-16
lines changed

5 files changed

+25
-16
lines changed

Diff for: classes/output/moodleoverflow_email.php

+4-2
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,8 @@ public function __set($name, $value) {
251251
public function get_unsubscribediscussionlink() {
252252

253253
// Check whether the moodleoverflow is subscribable.
254-
$subscribable = \mod_moodleoverflow\subscriptions::is_subscribable($this->moodleoverflow);
254+
$subscribable = \mod_moodleoverflow\subscriptions::is_subscribable($this->moodleoverflow,
255+
\context_module::instance($this->cm->id));
255256
if (!$subscribable) {
256257
return null;
257258
}
@@ -431,7 +432,8 @@ public function get_replylink() {
431432
* @return string
432433
*/
433434
public function get_unsubscribemoodleoverflowlink() {
434-
if (!\mod_moodleoverflow\subscriptions::is_subscribable($this->moodleoverflow)) {
435+
if (!\mod_moodleoverflow\subscriptions::is_subscribable($this->moodleoverflow,
436+
\context_module::instance($this->cm->id))) {
435437
return null;
436438
}
437439
$link = new \moodle_url(

Diff for: classes/subscriptions.php

+5-3
Original file line numberDiff line numberDiff line change
@@ -355,10 +355,11 @@ public static function subscription_disabled($moodleoverflow) {
355355
* Checks wheter the specified moodleoverflow can be subscribed to.
356356
*
357357
* @param object $moodleoverflow The moodleoverflow ID
358+
* @param \context_module $context The module context.
358359
*
359360
* @return boolean
360361
*/
361-
public static function is_subscribable($moodleoverflow) {
362+
public static function is_subscribable($moodleoverflow, $context) {
362363

363364
// Check if the user is an authenticated user.
364365
$authenticated = (isloggedin() AND !isguestuser());
@@ -367,7 +368,8 @@ public static function is_subscribable($moodleoverflow) {
367368
$disabled = self::subscription_disabled($moodleoverflow);
368369

369370
// Check if the moodleoverflow forces the user to be subscribed.
370-
$forced = self::is_forcesubscribed($moodleoverflow);
371+
$forced = self::is_forcesubscribed($moodleoverflow) &&
372+
has_capability('mod/moodleoverflow:allowforcesubscribe', $context);
371373

372374
// Return the result.
373375
return ($authenticated AND !$forced AND !$disabled);
@@ -938,7 +940,7 @@ public static function moodleoverflow_get_subscribe_link($moodleoverflow, $conte
938940
$messages = $messages + $defaultmessages;
939941

940942
// Check whether the user is forced to be subscribed to the moodleoverflow.
941-
$isforced = self::is_forcesubscribed($moodleoverflow);
943+
$isforced = self::is_forcesubscribed($moodleoverflow) && has_capability('mod/moodleoverflow:allowforcesubscribe', $context);
942944
$isdisabled = self::subscription_disabled($moodleoverflow);
943945

944946
// Return messages depending on the subscription state.

Diff for: index.php

+4-3
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@
139139
}
140140

141141
// Get information about the subscription state.
142-
$cansubscribe = \mod_moodleoverflow\subscriptions::is_subscribable($moodleoverflow);
142+
$cansubscribe = \mod_moodleoverflow\subscriptions::is_subscribable($moodleoverflow, $modulecontext);
143143
$moodleoverflow->cansubscribe = $cansubscribe || has_capability('mod/moodleoverflow:managesubscriptions', $modulecontext);
144144
$moodleoverflow->issubscribed = \mod_moodleoverflow\subscriptions::is_subscribed($USER->id, $moodleoverflow, $modulecontext);
145145
$showsubscriptioncolumns = $showsubscriptioncolumns || $moodleoverflow->issubscribed || $moodleoverflow->cansubscribe;
@@ -192,12 +192,13 @@
192192
}
193193

194194
// Check the subscription state.
195-
$forcesubscribed = \mod_moodleoverflow\subscriptions::is_forcesubscribed($moodleoverflow);
195+
$forcesubscribed = \mod_moodleoverflow\subscriptions::is_forcesubscribed($moodleoverflow) &&
196+
has_capability('mod/moodleoverflow:allowforcesubscribe', $modulecontext);
196197
if (!$forcesubscribed) {
197198

198199
// Check the current state.
199200
$subscribed = \mod_moodleoverflow\subscriptions::is_subscribed($USER->id, $moodleoverflow, $modulecontext);
200-
$subscribable = \mod_moodleoverflow\subscriptions::is_subscribable($moodleoverflow);
201+
$subscribable = \mod_moodleoverflow\subscriptions::is_subscribable($moodleoverflow, $modulecontext);
201202

202203
// Check whether to subscribe or unsubscribe the user.
203204
if ($cap['manageactivities'] OR $subscribable AND $subscribe AND !$subscribed AND $cansub) {

Diff for: locallib.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,7 @@ function moodleoverflow_print_latest_discussions($moodleoverflow, $cm, $page = -
332332
$preparedarray[$i]['discussionsubicon'] = false;
333333
if ((!is_guest($context, $USER) && isloggedin()) && has_capability('mod/moodleoverflow:viewdiscussion', $context)) {
334334
// Discussion subscription.
335-
if (\mod_moodleoverflow\subscriptions::is_subscribable($moodleoverflow)) {
335+
if (\mod_moodleoverflow\subscriptions::is_subscribable($moodleoverflow, $context)) {
336336
$preparedarray[$i]['discussionsubicon'] = \mod_moodleoverflow\subscriptions::get_discussion_subscription_icon(
337337
$moodleoverflow, $context, $discussion->discussion);
338338
}

Diff for: tests/subscriptions_test.php

+11-7
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ public function test_subscription_modes() {
116116
$course = $this->getDataGenerator()->create_course();
117117
$options = array('course' => $course->id);
118118
$moodleoverflow = $this->getDataGenerator()->create_module('moodleoverflow', $options);
119+
$modulecontext = context_module::instance($moodleoverflow->cmid);
119120

120121
// Create a user enrolled in the course as a student.
121122
list ($user) = $this->helper_create_users($course, 1);
@@ -129,27 +130,27 @@ public function test_subscription_modes() {
129130
$this->assertEquals(MOODLEOVERFLOW_FORCESUBSCRIBE,
130131
\mod_moodleoverflow\subscriptions::get_subscription_mode($moodleoverflow));
131132
$this->assertTrue(\mod_moodleoverflow\subscriptions::is_forcesubscribed($moodleoverflow));
132-
$this->assertFalse(\mod_moodleoverflow\subscriptions::is_subscribable($moodleoverflow));
133+
$this->assertFalse(\mod_moodleoverflow\subscriptions::is_subscribable($moodleoverflow, $modulecontext));
133134
$this->assertFalse(\mod_moodleoverflow\subscriptions::subscription_disabled($moodleoverflow));
134135

135136
// Test the disallowed subscription.
136137
\mod_moodleoverflow\subscriptions::set_subscription_mode($moodleoverflow->id, MOODLEOVERFLOW_DISALLOWSUBSCRIBE);
137138
$moodleoverflow = $DB->get_record('moodleoverflow', array('id' => $moodleoverflow->id));
138139
$this->assertTrue(\mod_moodleoverflow\subscriptions::subscription_disabled($moodleoverflow));
139-
$this->assertFalse(\mod_moodleoverflow\subscriptions::is_subscribable($moodleoverflow));
140+
$this->assertFalse(\mod_moodleoverflow\subscriptions::is_subscribable($moodleoverflow, $modulecontext));
140141
$this->assertFalse(\mod_moodleoverflow\subscriptions::is_forcesubscribed($moodleoverflow));
141142

142143
// Test the initial subscription.
143144
\mod_moodleoverflow\subscriptions::set_subscription_mode($moodleoverflow->id, MOODLEOVERFLOW_INITIALSUBSCRIBE);
144145
$moodleoverflow = $DB->get_record('moodleoverflow', array('id' => $moodleoverflow->id));
145-
$this->assertTrue(\mod_moodleoverflow\subscriptions::is_subscribable($moodleoverflow));
146+
$this->assertTrue(\mod_moodleoverflow\subscriptions::is_subscribable($moodleoverflow, $modulecontext));
146147
$this->assertFalse(\mod_moodleoverflow\subscriptions::subscription_disabled($moodleoverflow));
147148
$this->assertFalse(\mod_moodleoverflow\subscriptions::is_forcesubscribed($moodleoverflow));
148149

149150
// Test the choose subscription.
150151
\mod_moodleoverflow\subscriptions::set_subscription_mode($moodleoverflow->id, MOODLEOVERFLOW_CHOOSESUBSCRIBE);
151152
$moodleoverflow = $DB->get_record('moodleoverflow', array('id' => $moodleoverflow->id));
152-
$this->assertTrue(\mod_moodleoverflow\subscriptions::is_subscribable($moodleoverflow));
153+
$this->assertTrue(\mod_moodleoverflow\subscriptions::is_subscribable($moodleoverflow, $modulecontext));
153154
$this->assertFalse(\mod_moodleoverflow\subscriptions::subscription_disabled($moodleoverflow));
154155
$this->assertFalse(\mod_moodleoverflow\subscriptions::is_forcesubscribed($moodleoverflow));
155156
}
@@ -1376,7 +1377,8 @@ public function test_is_subscribable_logged_out($options) {
13761377
$options['course'] = $course->id;
13771378
$moodleoverflow = $this->getDataGenerator()->create_module('moodleoverflow', $options);
13781379

1379-
$this->assertFalse(\mod_moodleoverflow\subscriptions::is_subscribable($moodleoverflow));
1380+
$this->assertFalse(\mod_moodleoverflow\subscriptions::is_subscribable($moodleoverflow,
1381+
context_module::instance($moodleoverflow->cmid)));
13801382
}
13811383

13821384
/**
@@ -1399,7 +1401,8 @@ public function test_is_subscribable_is_guest($options) {
13991401
$options['course'] = $course->id;
14001402
$moodleoverflow = $this->getDataGenerator()->create_module('moodleoverflow', $options);
14011403

1402-
$this->assertFalse(\mod_moodleoverflow\subscriptions::is_subscribable($moodleoverflow));
1404+
$this->assertFalse(\mod_moodleoverflow\subscriptions::is_subscribable($moodleoverflow,
1405+
context_module::instance($moodleoverflow->cmid)));
14031406
}
14041407

14051408
/**
@@ -1449,6 +1452,7 @@ public function test_is_subscribable_loggedin($options, $expect) {
14491452
$this->getDataGenerator()->enrol_user($user->id, $course->id);
14501453
$this->setUser($user);
14511454

1452-
$this->assertEquals($expect, \mod_moodleoverflow\subscriptions::is_subscribable($moodleoverflow));
1455+
$this->assertEquals($expect, \mod_moodleoverflow\subscriptions::is_subscribable($moodleoverflow,
1456+
context_module::instance($moodleoverflow->cmid)));
14531457
}
14541458
}

0 commit comments

Comments
 (0)