cd4e6b17 |
1 | <?php |
f93f848a |
2 | |
3 | // Subscribe to or unsubscribe from a forum. |
4 | |
cd4e6b17 |
5 | require_once("../../config.php"); |
6 | require_once("lib.php"); |
7 | |
8 | $id = required_param('id',PARAM_INT); // The forum to subscribe or unsubscribe to |
9 | $force = optional_param('force','',PARAM_ALPHA); // Force everyone to be subscribed to this forum? |
10 | $user = optional_param('user',0,PARAM_INT); |
11 | |
12 | $url = new moodle_url($CFG->wwwroot.'/mod/forum/subscribe.php', array('id'=>$id)); |
13 | if ($force !== '') { |
14 | $url->param('force', $force); |
15 | } |
16 | if ($user !== 0) { |
17 | $url->param('user', $user); |
18 | } |
19 | $PAGE->set_url($url); |
20 | |
21 | if (! $forum = $DB->get_record("forum", array("id" => $id))) { |
22 | print_error('invalidforumid', 'forum'); |
23 | } |
24 | |
25 | if (! $course = $DB->get_record("course", array("id" => $forum->course))) { |
26 | print_error('invalidcoursemodule'); |
27 | } |
28 | |
29 | if ($cm = get_coursemodule_from_instance("forum", $forum->id, $course->id)) { |
30 | $context = get_context_instance(CONTEXT_MODULE, $cm->id); |
31 | } else { |
32 | $cm->id = 0; |
33 | $context = get_context_instance(CONTEXT_MODULE, $cm->id); |
34 | } |
35 | |
36 | if ($user) { |
37 | if (!has_capability('mod/forum:managesubscriptions', $context)) { |
38 | print_error('nopermissiontosubscribe', 'forum'); |
f93f848a |
39 | } |
cd4e6b17 |
40 | if (!$user = $DB->get_record("user", array("id" => $user))) { |
41 | print_error('invaliduserid'); |
f93f848a |
42 | } |
cd4e6b17 |
43 | } else { |
44 | $user = $USER; |
45 | } |
46 | |
47 | if (isset($cm->groupmode) && empty($course->groupmodeforce)) { |
48 | $groupmode = $cm->groupmode; |
49 | } else { |
50 | $groupmode = $course->groupmode; |
51 | } |
52 | if ($groupmode && !forum_is_subscribed($user->id, $forum) && !has_capability('moodle/site:accessallgroups', $context)) { |
53 | if (!groups_get_all_groups($course->id, $USER->id)) { |
54 | print_error('cannotsubscribe', 'forum'); |
ec81373f |
55 | } |
cd4e6b17 |
56 | } |
ec81373f |
57 | |
cd4e6b17 |
58 | require_login($course->id, false, $cm); |
59 | |
60 | if (has_capability('moodle/legacy:guest', get_context_instance(CONTEXT_SYSTEM), 0, false)) { // Guests can't subscribe |
61 | $PAGE->set_title($course->shortname); |
62 | $PAGE->set_heading($course->fullname); |
63 | echo $OUTPUT->header(); |
64 | echo $OUTPUT->confirm(get_string('noguestsubscribe', 'forum').'<br /><br />'.get_string('liketologin'), |
65 | get_login_url(), new moodle_url()); |
66 | echo $OUTPUT->footer(); |
67 | exit; |
68 | } |
69 | |
70 | $returnto = optional_param('backtoindex',0,PARAM_INT) |
71 | ? "index.php?id=".$course->id |
72 | : "view.php?f=$id"; |
73 | |
74 | if ($force and has_capability('mod/forum:managesubscriptions', $context)) { |
75 | if (forum_is_forcesubscribed($forum)) { |
76 | forum_forcesubscribe($forum->id, 0); |
77 | redirect($returnto, get_string("everyonecannowchoose", "forum"), 1); |
3bc9bf97 |
78 | } else { |
cd4e6b17 |
79 | forum_forcesubscribe($forum->id, 1); |
80 | redirect($returnto, get_string("everyoneisnowsubscribed", "forum"), 1); |
3bc9bf97 |
81 | } |
cd4e6b17 |
82 | } |
3bc9bf97 |
83 | |
cd4e6b17 |
84 | if (forum_is_forcesubscribed($forum)) { |
85 | redirect($returnto, get_string("everyoneisnowsubscribed", "forum"), 1); |
86 | } |
818c1b05 |
87 | |
cd4e6b17 |
88 | $info->name = fullname($user); |
89 | $info->forum = format_string($forum->name); |
ec81373f |
90 | |
cd4e6b17 |
91 | if (forum_is_subscribed($user->id, $forum->id)) { |
92 | if (forum_unsubscribe($user->id, $forum->id)) { |
93 | add_to_log($course->id, "forum", "unsubscribe", "view.php?f=$forum->id", $forum->id, $cm->id); |
94 | redirect($returnto, get_string("nownotsubscribed", "forum", $info), 1); |
95 | } else { |
96 | print_error('cannotunsubscribe', 'forum', $_SERVER["HTTP_REFERER"]); |
f93f848a |
97 | } |
98 | |
cd4e6b17 |
99 | } else { // subscribe |
100 | if ($forum->forcesubscribe == FORUM_DISALLOWSUBSCRIBE && |
101 | !has_capability('mod/forum:managesubscriptions', $context)) { |
102 | print_error('disallowsubscribe', 'forum', $_SERVER["HTTP_REFERER"]); |
501cdbd8 |
103 | } |
cd4e6b17 |
104 | if (!has_capability('mod/forum:viewdiscussion', $context)) { |
105 | print_error('cannotsubscribe', 'forum', $_SERVER["HTTP_REFERER"]); |
501cdbd8 |
106 | } |
cd4e6b17 |
107 | if (forum_subscribe($user->id, $forum->id) ) { |
108 | add_to_log($course->id, "forum", "subscribe", "view.php?f=$forum->id", $forum->id, $cm->id); |
109 | redirect($returnto, get_string("nowsubscribed", "forum", $info), 1); |
110 | } else { |
111 | print_error('cannotsubscribe', 'forum', $_SERVER["HTTP_REFERER"]); |
f93f848a |
112 | } |
cd4e6b17 |
113 | } |
f93f848a |
114 | |