$data->name = fullname($USER); $post->message .= "\n\n(" . get_string('editedby', 'hsuforum', $data) . ')'; } unset($data); } $formheading = ''; if (!empty($parent)) { $formheading = get_string("yourreply", "hsuforum"); } else { if ($forum->type == 'qanda') { $formheading = get_string('yournewquestion', 'hsuforum'); } else { $formheading = get_string('yournewtopic', 'hsuforum'); } } if (hsuforum_is_subscribed($USER->id, $forum->id)) { $subscribe = true; } else { if (hsuforum_user_has_posted($forum->id, 0, $USER->id)) { $subscribe = false; } else { // user not posted yet - use subscription default specified in profile $subscribe = !empty($USER->autosubscribe); } } $postid = empty($post->id) ? null : $post->id; $draftid_editor = file_get_submitted_draft_itemid('message'); $currenttext = file_prepare_draft_area($draftid_editor, $modcontext->id, 'mod_hsuforum', 'post', $postid, mod_hsuforum_post_form::editor_options($modcontext, $postid), $post->message); $mform_post->set_data(array('attachments' => $draftitemid, 'subject' => $post->subject, 'message' => array('text' => $currenttext, 'format' => empty($post->messageformat) ? editors_get_preferred_format() : $post->messageformat, 'itemid' => $draftid_editor), 'subscribe' => $subscribe ? 1 : 0, 'mailnow' => !empty($post->mailnow), 'userid' => $post->userid, 'parent' => $post->parent, 'reveal' => $post->reveal, 'privatereply' => $post->privatereply, 'discussion' => $post->discussion, 'course' => $course->id) + $page_params + (isset($post->format) ? array('format' => $post->format) : array()) + (isset($discussion->timestart) ? array('timestart' => $discussion->timestart) : array()) + (isset($discussion->timeend) ? array('timeend' => $discussion->timeend) : array()) + (isset($post->groupid) ? array('groupid' => $post->groupid) : array()) + (isset($discussion->id) ? array('discussion' => $discussion->id) : array())); if ($fromform = $mform_post->get_data()) { if (empty($SESSION->fromurl)) {
case HSUFORUM_DISALLOWSUBSCRIBE: // 3 hsuforum_forcesubscribe($forum->id, HSUFORUM_DISALLOWSUBSCRIBE); redirect($returnto, get_string("noonecansubscribenow", "hsuforum"), 1); break; default: print_error(get_string('invalidforcesubscribe', 'hsuforum')); } } if (hsuforum_is_forcesubscribed($forum)) { redirect($returnto, get_string("everyoneisnowsubscribed", "hsuforum"), 1); } $info = new stdClass(); $info->name = fullname($user); $info->forum = format_string($forum->name); if (hsuforum_is_subscribed($user->id, $forum->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', 'hsuforum', format_string($forum->name)), new moodle_url($PAGE->url, array('sesskey' => sesskey())), new moodle_url('/mod/hsuforum/view.php', array('f' => $id))); echo $OUTPUT->footer(); exit; } require_sesskey(); if (hsuforum_unsubscribe($user->id, $forum->id)) { redirect($returnto, get_string("nownotsubscribed", "hsuforum", $info), 1); } else { print_error('cannotunsubscribe', 'hsuforum', $_SERVER["HTTP_REFERER"]); }
} } /// Do course wide subscribe/unsubscribe if (!is_null($subscribe) and !isguestuser()) { foreach ($modinfo->get_instances_of('hsuforum') as $forumid => $cm) { $forum = $forums[$forumid]; $modcontext = context_module::instance($cm->id); $cansub = false; if (has_capability('mod/hsuforum:viewdiscussion', $modcontext)) { $cansub = true; } if ($cansub && $cm->visible == 0 && !has_capability('mod/hsuforum:managesubscriptions', $modcontext)) { $cansub = false; } if (!hsuforum_is_forcesubscribed($forum)) { $subscribed = hsuforum_is_subscribed($USER->id, $forum); if ((has_capability('moodle/course:manageactivities', $coursecontext, $USER->id) || $forum->forcesubscribe != HSUFORUM_DISALLOWSUBSCRIBE) && $subscribe && !$subscribed && $cansub) { hsuforum_subscribe($USER->id, $forumid, $modcontext); } else { if (!$subscribe && $subscribed) { hsuforum_unsubscribe($USER->id, $forumid, $modcontext); } } } } $returnto = hsuforum_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', 'hsuforum', $shortname), 1); } else { redirect($returnto, get_string('nowallunsubscribed', 'hsuforum', $shortname), 1);
/** * Adds module specific settings to the settings block * * @param settings_navigation $settings The settings navigation object * @param navigation_node $forumnode The node to add module settings to */ function hsuforum_extend_settings_navigation(settings_navigation $settingsnav, navigation_node $forumnode) { global $USER, $PAGE, $CFG, $DB; $config = get_config('hsuforum'); $forumobject = $DB->get_record("hsuforum", 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/hsuforum:managesubscriptions', $PAGE->cm->context); $subscriptionmode = hsuforum_get_forcesubscribed($forumobject); $cansubscribe = $activeenrolled && $subscriptionmode != HSUFORUM_FORCESUBSCRIBE && ($subscriptionmode != HSUFORUM_DISALLOWSUBSCRIBE || $canmanage); $discussionid = optional_param('d', 0, PARAM_INT); $viewingdiscussion = ($PAGE->url->compare(new moodle_url('/mod/hsuforum/discuss.php'), URL_MATCH_BASE) and $discussionid); if (!is_guest($PAGE->cm->context)) { $forumnode->add(get_string('export', 'hsuforum'), new moodle_url('/mod/hsuforum/route.php', array('contextid' => $PAGE->cm->context->id, 'action' => 'export')), navigation_node::TYPE_SETTING, null, null, new pix_icon('i/export', get_string('export', 'hsuforum'))); } $forumnode->add(get_string('viewposters', 'hsuforum'), new moodle_url('/mod/hsuforum/route.php', array('contextid' => $PAGE->cm->context->id, 'action' => 'viewposters')), navigation_node::TYPE_SETTING, null, null, new pix_icon('t/preview', get_string('viewposters', 'hsuforum'))); if ($canmanage) { $mode = $forumnode->add(get_string('subscriptionmode', 'hsuforum'), null, navigation_node::TYPE_CONTAINER); $allowchoice = $mode->add(get_string('subscriptionoptional', 'hsuforum'), new moodle_url('/mod/hsuforum/subscribe.php', array('id' => $forumobject->id, 'mode' => HSUFORUM_CHOOSESUBSCRIBE, 'sesskey' => sesskey())), navigation_node::TYPE_SETTING); $forceforever = $mode->add(get_string("subscriptionforced", "hsuforum"), new moodle_url('/mod/hsuforum/subscribe.php', array('id' => $forumobject->id, 'mode' => HSUFORUM_FORCESUBSCRIBE, 'sesskey' => sesskey())), navigation_node::TYPE_SETTING); $forceinitially = $mode->add(get_string("subscriptionauto", "hsuforum"), new moodle_url('/mod/hsuforum/subscribe.php', array('id' => $forumobject->id, 'mode' => HSUFORUM_INITIALSUBSCRIBE, 'sesskey' => sesskey())), navigation_node::TYPE_SETTING); $disallowchoice = $mode->add(get_string('subscriptiondisabled', 'hsuforum'), new moodle_url('/mod/hsuforum/subscribe.php', array('id' => $forumobject->id, 'mode' => HSUFORUM_DISALLOWSUBSCRIBE, 'sesskey' => sesskey())), navigation_node::TYPE_SETTING); switch ($subscriptionmode) { case HSUFORUM_CHOOSESUBSCRIBE: // 0 $allowchoice->action = null; $allowchoice->add_class('activesetting'); break; case HSUFORUM_FORCESUBSCRIBE: // 1 $forceforever->action = null; $forceforever->add_class('activesetting'); break; case HSUFORUM_INITIALSUBSCRIBE: // 2 $forceinitially->action = null; $forceinitially->add_class('activesetting'); break; case HSUFORUM_DISALLOWSUBSCRIBE: // 3 $disallowchoice->action = null; $disallowchoice->add_class('activesetting'); break; } } else { if ($activeenrolled) { switch ($subscriptionmode) { case HSUFORUM_CHOOSESUBSCRIBE: // 0 $notenode = $forumnode->add(get_string('subscriptionoptional', 'hsuforum')); break; case HSUFORUM_FORCESUBSCRIBE: // 1 $notenode = $forumnode->add(get_string('subscriptionforced', 'hsuforum')); break; case HSUFORUM_INITIALSUBSCRIBE: // 2 $notenode = $forumnode->add(get_string('subscriptionauto', 'hsuforum')); break; case HSUFORUM_DISALLOWSUBSCRIBE: // 3 $notenode = $forumnode->add(get_string('subscriptiondisabled', 'hsuforum')); break; } } } if ($cansubscribe) { if (hsuforum_is_subscribed($USER->id, $forumobject)) { $linktext = get_string('unsubscribe', 'hsuforum'); } else { $linktext = get_string('subscribe', 'hsuforum'); } $url = new moodle_url('/mod/hsuforum/subscribe.php', array('id' => $forumobject->id, 'sesskey' => sesskey())); $forumnode->add($linktext, $url, navigation_node::TYPE_SETTING); } if ($viewingdiscussion) { require_once __DIR__ . '/lib/discussion/subscribe.php'; $subscribe = new hsuforum_lib_discussion_subscribe($forumobject, $PAGE->cm->context); if ($subscribe->can_subscribe()) { $subscribeurl = new moodle_url('/mod/hsuforum/route.php', array('contextid' => $PAGE->cm->context->id, 'action' => 'subscribedisc', 'discussionid' => $discussionid, 'sesskey' => sesskey(), 'returnurl' => $PAGE->url)); if ($subscribe->is_subscribed($discussionid)) { $linktext = get_string('unsubscribedisc', 'hsuforum'); } else { $linktext = get_string('subscribedisc', 'hsuforum'); } $forumnode->add($linktext, $subscribeurl, navigation_node::TYPE_SETTING); } } if (has_capability('mod/hsuforum:viewsubscribers', $PAGE->cm->context)) { $url = new moodle_url('/mod/hsuforum/subscribers.php', array('id' => $forumobject->id)); $forumnode->add(get_string('showsubscribers', 'hsuforum'), $url, navigation_node::TYPE_SETTING); $discsubscribers = ($viewingdiscussion or optional_param('action', '', PARAM_ALPHA) == 'discsubscribers'); if ($discsubscribers && !hsuforum_is_forcesubscribed($forumobject) && $discussionid) { $url = new moodle_url('/mod/hsuforum/route.php', array('contextid' => $PAGE->cm->context->id, 'action' => 'discsubscribers', 'discussionid' => $discussionid)); $forumnode->add(get_string('showdiscussionsubscribers', 'hsuforum'), $url, navigation_node::TYPE_SETTING, null, 'discsubscribers'); } } 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($config->enablerssfeeds) && !empty($config->enablerssfeeds); if ($enablerssfeeds && $forumobject->rsstype && $forumobject->rssarticles && $hascourseaccess) { if (!function_exists('rss_get_url')) { require_once "{$CFG->libdir}/rsslib.php"; } if ($forumobject->rsstype == 1) { $string = get_string('rsssubscriberssdiscussions', 'hsuforum'); } else { $string = get_string('rsssubscriberssposts', 'hsuforum'); } $url = new moodle_url(rss_get_url($PAGE->cm->context->id, $userid, "mod_hsuforum", $forumobject->id)); $forumnode->add($string, $url, settings_navigation::TYPE_SETTING, null, null, new pix_icon('i/rss', '')); } }
/** * Test subscription using disallow subscription on create. */ public function test_forum_disallow_subscribe_on_create() { global $CFG; $this->resetAfterTest(); $usercount = 5; $course = $this->getDataGenerator()->create_course(); $users = array(); for ($i = 0; $i < $usercount; $i++) { $user = $this->getDataGenerator()->create_user(); $users[] = $user; $this->getDataGenerator()->enrol_user($user->id, $course->id); } $options = array('course' => $course->id, 'forcesubscribe' => HSUFORUM_DISALLOWSUBSCRIBE); // Subscription prevented. $forum = $this->getDataGenerator()->create_module('hsuforum', $options); $result = hsuforum_subscribed_users($course, $forum); // No subscriptions by default. $this->assertEquals(0, count($result)); foreach ($users as $user) { $this->assertFalse(hsuforum_is_subscribed($user->id, $forum)); } }
/** * Order from cheapest operation to most expensive to keep things zippy! * * @return bool */ protected function _can_subscribe() { if ($this->get_forum()->forcesubscribe == HSUFORUM_DISALLOWSUBSCRIBE) { return false; } if ($this->get_forum()->type == 'single') { return false; } if (!has_capability('mod/hsuforum:viewdiscussion', $this->get_context(), $this->get_userid())) { return false; } if (hsuforum_is_subscribed($this->get_userid(), $this->get_forum())) { return false; } return true; }