case ANONFORUM_DISALLOWSUBSCRIBE: // 3 anonforum_forcesubscribe($anonforum->id, ANONFORUM_DISALLOWSUBSCRIBE); redirect($returnto, get_string("noonecansubscribenow", "anonforum"), 1); break; default: print_error(get_string('invalidforcesubscribe', 'anonforum')); } } if (anonforum_is_forcesubscribed($anonforum)) { redirect($returnto, get_string("everyoneisnowsubscribed", "anonforum"), 1); } $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);
// there should not be any links leading to this place, just redirect redirect(new moodle_url('/mod/anonforum/index.php', array('id' => $id)), get_string('subscribeenrolledonly', 'anonforum')); } // Can proceed now, the user is not guest and is enrolled foreach ($modinfo->get_instances_of('anonforum') as $anonforumid => $cm) { $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);
/** * Adds module specific settings to the settings block * * @param settings_navigation $settings The settings navigation object * @param navigation_node $anonforumnode The node to add module settings to */ function anonforum_extend_settings_navigation(settings_navigation $settingsnav, navigation_node $anonforumnode) { global $USER, $PAGE, $CFG, $DB, $OUTPUT; $anonforumobject = $DB->get_record("anonforum", array("id" => $PAGE->cm->instance)); if (empty($PAGE->cm->context)) { $PAGE->cm->context = context_module::instance($PAGE->cm->instance); } // for some actions you need to be enrolled, beiing admin is not enough sometimes here $enrolled = is_enrolled($PAGE->cm->context, $USER, '', false); $activeenrolled = is_enrolled($PAGE->cm->context, $USER, '', true); $canmanage = has_capability('mod/anonforum:managesubscriptions', $PAGE->cm->context); $subscriptionmode = anonforum_get_forcesubscribed($anonforumobject); $cansubscribe = $activeenrolled && $subscriptionmode != ANONFORUM_FORCESUBSCRIBE && ($subscriptionmode != ANONFORUM_DISALLOWSUBSCRIBE || $canmanage); if ($canmanage) { $mode = $anonforumnode->add(get_string('subscriptionmode', 'anonforum'), null, navigation_node::TYPE_CONTAINER); $allowchoice = $mode->add(get_string('subscriptionoptional', 'anonforum'), new moodle_url('/mod/anonforum/subscribe.php', array('id' => $anonforumobject->id, 'mode' => ANONFORUM_CHOOSESUBSCRIBE, 'sesskey' => sesskey())), navigation_node::TYPE_SETTING); $forceforever = $mode->add(get_string("subscriptionforced", "anonforum"), new moodle_url('/mod/anonforum/subscribe.php', array('id' => $anonforumobject->id, 'mode' => ANONFORUM_FORCESUBSCRIBE, 'sesskey' => sesskey())), navigation_node::TYPE_SETTING); $forceinitially = $mode->add(get_string("subscriptionauto", "anonforum"), new moodle_url('/mod/anonforum/subscribe.php', array('id' => $anonforumobject->id, 'mode' => ANONFORUM_INITIALSUBSCRIBE, 'sesskey' => sesskey())), navigation_node::TYPE_SETTING); $disallowchoice = $mode->add(get_string('subscriptiondisabled', 'anonforum'), new moodle_url('/mod/anonforum/subscribe.php', array('id' => $anonforumobject->id, 'mode' => ANONFORUM_DISALLOWSUBSCRIBE, 'sesskey' => sesskey())), navigation_node::TYPE_SETTING); switch ($subscriptionmode) { case ANONFORUM_CHOOSESUBSCRIBE: // 0 $allowchoice->action = null; $allowchoice->add_class('activesetting'); break; case ANONFORUM_FORCESUBSCRIBE: // 1 $forceforever->action = null; $forceforever->add_class('activesetting'); break; case ANONFORUM_INITIALSUBSCRIBE: // 2 $forceinitially->action = null; $forceinitially->add_class('activesetting'); break; case ANONFORUM_DISALLOWSUBSCRIBE: // 3 $disallowchoice->action = null; $disallowchoice->add_class('activesetting'); break; } } else { if ($activeenrolled) { switch ($subscriptionmode) { case ANONFORUM_CHOOSESUBSCRIBE: // 0 $notenode = $anonforumnode->add(get_string('subscriptionoptional', 'anonforum')); break; case ANONFORUM_FORCESUBSCRIBE: // 1 $notenode = $anonforumnode->add(get_string('subscriptionforced', 'anonforum')); break; case ANONFORUM_INITIALSUBSCRIBE: // 2 $notenode = $anonforumnode->add(get_string('subscriptionauto', 'anonforum')); break; case ANONFORUM_DISALLOWSUBSCRIBE: // 3 $notenode = $anonforumnode->add(get_string('subscriptiondisabled', 'anonforum')); break; } } } if ($cansubscribe) { if (anonforum_is_subscribed($USER->id, $anonforumobject)) { $linktext = get_string('unsubscribe', 'anonforum'); } else { $linktext = get_string('subscribe', 'anonforum'); } $url = new moodle_url('/mod/anonforum/subscribe.php', array('id' => $anonforumobject->id, 'sesskey' => sesskey())); $anonforumnode->add($linktext, $url, navigation_node::TYPE_SETTING); } if (has_capability('mod/anonforum:viewsubscribers', $PAGE->cm->context)) { $url = new moodle_url('/mod/anonforum/subscribers.php', array('id' => $anonforumobject->id)); $anonforumnode->add(get_string('showsubscribers', 'anonforum'), $url, navigation_node::TYPE_SETTING); } if ($enrolled && anonforum_tp_can_track_anonforums($anonforumobject)) { // keep tracking info for users with suspended enrolments if ($anonforumobject->trackingtype == ANONFORUM_TRACKING_OPTIONAL || !$CFG->anonforum_allowforcedreadtracking && $anonforumobject->trackingtype == ANONFORUM_TRACKING_FORCED) { if (anonforum_tp_is_tracked($anonforumobject)) { $linktext = get_string('notrackanonforum', 'anonforum'); } else { $linktext = get_string('trackanonforum', 'anonforum'); } $url = new moodle_url('/mod/anonforum/settracking.php', array('id' => $anonforumobject->id)); $anonforumnode->add($linktext, $url, navigation_node::TYPE_SETTING); } } if (!isloggedin() && $PAGE->course->id == SITEID) { $userid = guest_user()->id; } else { $userid = $USER->id; } $hascourseaccess = $PAGE->course->id == SITEID || can_access_course($PAGE->course, $userid); $enablerssfeeds = !empty($CFG->enablerssfeeds) && !empty($CFG->anonforum_enablerssfeeds); if ($enablerssfeeds && $anonforumobject->rsstype && $anonforumobject->rssarticles && $hascourseaccess) { if (!function_exists('rss_get_url')) { require_once "{$CFG->libdir}/rsslib.php"; } if ($anonforumobject->rsstype == 1) { $string = get_string('rsssubscriberssdiscussions', 'anonforum'); } else { $string = get_string('rsssubscriberssposts', 'anonforum'); } $url = new moodle_url(rss_get_url($PAGE->cm->context->id, $userid, "mod_anonforum", $anonforumobject->id)); $anonforumnode->add($string, $url, settings_navigation::TYPE_SETTING, null, null, new pix_icon('i/rss', '')); } }