$anonforum = $anonforums[$anonforumid]; $modcontext = context_module::instance($cm->id); $cansub = false; if (has_capability('mod/anonforum:viewdiscussion', $modcontext)) { $cansub = true; } if ($cansub && $cm->visible == 0 && !has_capability('mod/anonforum:managesubscriptions', $modcontext)) { $cansub = false; } if (!anonforum_is_forcesubscribed($anonforum)) { $subscribed = anonforum_is_subscribed($USER->id, $anonforum); if ((has_capability('moodle/course:manageactivities', $coursecontext, $USER->id) || $anonforum->forcesubscribe != ANONFORUM_DISALLOWSUBSCRIBE) && $subscribe && !$subscribed && $cansub) { anonforum_subscribe($USER->id, $anonforumid); } else { if (!$subscribe && $subscribed) { anonforum_unsubscribe($USER->id, $anonforumid); } } } } $returnto = anonforum_go_back_to("index.php?id={$course->id}"); $shortname = format_string($course->shortname, true, array('context' => context_course::instance($course->id))); if ($subscribe) { redirect($returnto, get_string('nowallsubscribed', 'anonforum', $shortname), 1); } else { redirect($returnto, get_string('nowallunsubscribed', 'anonforum', $shortname), 1); } } /// First, let's process the general anonymous forums and build up a display if ($generalanonforums) { foreach ($generalanonforums as $anonforum) {
/** * Given a new post, subscribes or unsubscribes as appropriate. * Returns some text which describes what happened. * * @global objec * @param object $post * @param object $anonforum */ function anonforum_post_subscription($post, $anonforum) { global $USER; $action = ''; $subscribed = anonforum_is_subscribed($USER->id, $anonforum); if ($anonforum->forcesubscribe == ANONFORUM_FORCESUBSCRIBE) { // database ignored return ""; } elseif ($anonforum->forcesubscribe == ANONFORUM_DISALLOWSUBSCRIBE && !has_capability('moodle/course:manageactivities', context_course::instance($anonforum->course), $USER->id)) { if ($subscribed) { $action = 'unsubscribe'; // sanity check, following MDL-14558 } else { return ""; } } else { // go with the user's choice if (isset($post->subscribe)) { // no change if (!empty($post->subscribe) && $subscribed || empty($post->subscribe) && !$subscribed) { return ""; } elseif (!empty($post->subscribe) && !$subscribed) { $action = 'subscribe'; } elseif (empty($post->subscribe) && $subscribed) { $action = 'unsubscribe'; } } } $info = new stdClass(); $info->anonforum = $anonforum->name; if (empty($post->anonymouspost)) { $info->name = fullname($USER); } else { $info->name = get_string('anonymoususer', 'anonforum'); } switch ($action) { case 'subscribe': anonforum_subscribe($USER->id, $post->anonforum); return "<p>" . get_string("nowsubscribed", "anonforum", $info) . "</p>"; case 'unsubscribe': anonforum_unsubscribe($USER->id, $post->anonforum); return "<p>" . get_string("nownotsubscribed", "anonforum", $info) . "</p>"; } }
} $info = new stdClass(); $info->name = fullname($user); $info->anonforum = format_string($anonforum->name); if (anonforum_is_subscribed($user->id, $anonforum->id)) { if (is_null($sesskey)) { // we came here via link in email $PAGE->set_title($course->shortname); $PAGE->set_heading($course->fullname); echo $OUTPUT->header(); echo $OUTPUT->confirm(get_string('confirmunsubscribe', 'anonforum', format_string($anonforum->name)), new moodle_url($PAGE->url, array('sesskey' => sesskey())), new moodle_url('/mod/anonforum/view.php', array('f' => $id))); echo $OUTPUT->footer(); exit; } require_sesskey(); if (anonforum_unsubscribe($user->id, $anonforum->id)) { if (empty($anonforum->anonymous)) { $params = array('context' => $context, 'courseid' => $course->id, 'anonymous' => 1, 'other' => array('forumid' => $anonforum->id, '$cm->id' => $cm->id, 'action' => 'unsubscribe')); $event = mod_anonforum\event\subscription_deleted::create($params); $event->add_record_snapshot('anonforum', $anonforum); $event->trigger(); } redirect($returnto, get_string("nownotsubscribed", "anonforum", $info), 1); } else { print_error('cannotunsubscribe', 'anonforum', $_SERVER["HTTP_REFERER"]); } } else { // subscribe if ($anonforum->forcesubscribe == ANONFORUM_DISALLOWSUBSCRIBE && !has_capability('mod/anonforum:managesubscriptions', $context)) { print_error('disallowsubscribe', 'anonforum', $_SERVER["HTTP_REFERER"]); }
// It has to be one or the other, not both or neither. if (!($subscribe xor $unsubscribe)) { print_error('invalidaction'); } if ($subscribe) { $users = $subscriberselector->get_selected_users(); foreach ($users as $user) { if (!anonforum_subscribe($user->id, $id)) { print_error('cannotaddsubscriber', 'anonforum', '', $user->id); } } } else { if ($unsubscribe) { $users = $existingselector->get_selected_users(); foreach ($users as $user) { if (!anonforum_unsubscribe($user->id, $id)) { print_error('cannotremovesubscriber', 'anonforum', '', $user->id); } } } } $subscriberselector->invalidate_selected_users(); $existingselector->invalidate_selected_users(); $subscriberselector->set_existing_subscribers($existingselector->find_users('')); } $strsubscribers = get_string("subscribers", "anonforum"); $PAGE->navbar->add($strsubscribers); $PAGE->set_title($strsubscribers); $PAGE->set_heading($COURSE->fullname); if (has_capability('mod/anonforum:managesubscriptions', $context)) { $PAGE->set_button(anonforum_update_subscriptions_button($course->id, $id));