/** * Get the current subscription mode for the twf. * * @param int|stdClass $twfid * @param mixed $value * @return bool * @deprecated since Moodle 2.8 use \mod_twf\subscriptions::get_subscription_mode() instead */ function twf_get_forcesubscribed($twf) { debugging("twf_get_forcesubscribed() has been deprecated, please use \\mod_twf\\subscriptions::get_subscription_mode() instead.", DEBUG_DEVELOPER); global $DB; if (!isset($twf->forcesubscribe)) { $twf = $DB->get_field('twf', 'forcesubscribe', array('id' => $twf)); } return \mod_twf\subscriptions::get_subscription_mode($twfid, $value); }
public function test_subscription_modes() { global $DB; $this->resetAfterTest(true); // Create a course, with a twf. $course = $this->getDataGenerator()->create_course(); $options = array('course' => $course->id); $twf = $this->getDataGenerator()->create_module('twf', $options); \mod_twf\subscriptions::set_subscription_mode($twf->id, FORUM_FORCESUBSCRIBE); $twf = $DB->get_record('twf', array('id' => $twf->id)); $this->assertEquals(FORUM_FORCESUBSCRIBE, \mod_twf\subscriptions::get_subscription_mode($twf)); $this->assertTrue(\mod_twf\subscriptions::is_forcesubscribed($twf)); $this->assertFalse(\mod_twf\subscriptions::is_subscribable($twf)); $this->assertFalse(\mod_twf\subscriptions::subscription_disabled($twf)); \mod_twf\subscriptions::set_subscription_mode($twf->id, FORUM_DISALLOWSUBSCRIBE); $twf = $DB->get_record('twf', array('id' => $twf->id)); $this->assertEquals(FORUM_DISALLOWSUBSCRIBE, \mod_twf\subscriptions::get_subscription_mode($twf)); $this->assertTrue(\mod_twf\subscriptions::subscription_disabled($twf)); $this->assertFalse(\mod_twf\subscriptions::is_subscribable($twf)); $this->assertFalse(\mod_twf\subscriptions::is_forcesubscribed($twf)); \mod_twf\subscriptions::set_subscription_mode($twf->id, FORUM_INITIALSUBSCRIBE); $twf = $DB->get_record('twf', array('id' => $twf->id)); $this->assertEquals(FORUM_INITIALSUBSCRIBE, \mod_twf\subscriptions::get_subscription_mode($twf)); $this->assertTrue(\mod_twf\subscriptions::is_subscribable($twf)); $this->assertFalse(\mod_twf\subscriptions::subscription_disabled($twf)); $this->assertFalse(\mod_twf\subscriptions::is_forcesubscribed($twf)); \mod_twf\subscriptions::set_subscription_mode($twf->id, FORUM_CHOOSESUBSCRIBE); $twf = $DB->get_record('twf', array('id' => $twf->id)); $this->assertEquals(FORUM_CHOOSESUBSCRIBE, \mod_twf\subscriptions::get_subscription_mode($twf)); $this->assertTrue(\mod_twf\subscriptions::is_subscribable($twf)); $this->assertFalse(\mod_twf\subscriptions::subscription_disabled($twf)); $this->assertFalse(\mod_twf\subscriptions::is_forcesubscribed($twf)); }
/** * Adds module specific settings to the settings block * * @param settings_navigation $settings The settings navigation object * @param navigation_node $twfnode The node to add module settings to */ function twf_extend_settings_navigation(settings_navigation $settingsnav, navigation_node $twfnode) { global $USER, $PAGE, $CFG, $DB, $OUTPUT; $twfobject = $DB->get_record("twf", array("id" => $PAGE->cm->instance)); if (empty($PAGE->cm->context)) { $PAGE->cm->context = context_module::instance($PAGE->cm->instance); } $params = $PAGE->url->params(); if (!empty($params['d'])) { $discussionid = $params['d']; } // 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/twf:managesubscriptions', $PAGE->cm->context); $subscriptionmode = \mod_twf\subscriptions::get_subscription_mode($twfobject); $cansubscribe = $activeenrolled && !\mod_twf\subscriptions::is_forcesubscribed($twfobject) && (!\mod_twf\subscriptions::subscription_disabled($twfobject) || $canmanage); if ($canmanage) { $mode = $twfnode->add(get_string('subscriptionmode', 'twf'), null, navigation_node::TYPE_CONTAINER); $allowchoice = $mode->add(get_string('subscriptionoptional', 'twf'), new moodle_url('/mod/twf/subscribe.php', array('id' => $twfobject->id, 'mode' => FORUM_CHOOSESUBSCRIBE, 'sesskey' => sesskey())), navigation_node::TYPE_SETTING); $forceforever = $mode->add(get_string("subscriptionforced", "twf"), new moodle_url('/mod/twf/subscribe.php', array('id' => $twfobject->id, 'mode' => FORUM_FORCESUBSCRIBE, 'sesskey' => sesskey())), navigation_node::TYPE_SETTING); $forceinitially = $mode->add(get_string("subscriptionauto", "twf"), new moodle_url('/mod/twf/subscribe.php', array('id' => $twfobject->id, 'mode' => FORUM_INITIALSUBSCRIBE, 'sesskey' => sesskey())), navigation_node::TYPE_SETTING); $disallowchoice = $mode->add(get_string('subscriptiondisabled', 'twf'), new moodle_url('/mod/twf/subscribe.php', array('id' => $twfobject->id, 'mode' => FORUM_DISALLOWSUBSCRIBE, 'sesskey' => sesskey())), navigation_node::TYPE_SETTING); switch ($subscriptionmode) { case FORUM_CHOOSESUBSCRIBE: // 0 $allowchoice->action = null; $allowchoice->add_class('activesetting'); break; case FORUM_FORCESUBSCRIBE: // 1 $forceforever->action = null; $forceforever->add_class('activesetting'); break; case FORUM_INITIALSUBSCRIBE: // 2 $forceinitially->action = null; $forceinitially->add_class('activesetting'); break; case FORUM_DISALLOWSUBSCRIBE: // 3 $disallowchoice->action = null; $disallowchoice->add_class('activesetting'); break; } } else { if ($activeenrolled) { switch ($subscriptionmode) { case FORUM_CHOOSESUBSCRIBE: // 0 $notenode = $twfnode->add(get_string('subscriptionoptional', 'twf')); break; case FORUM_FORCESUBSCRIBE: // 1 $notenode = $twfnode->add(get_string('subscriptionforced', 'twf')); break; case FORUM_INITIALSUBSCRIBE: // 2 $notenode = $twfnode->add(get_string('subscriptionauto', 'twf')); break; case FORUM_DISALLOWSUBSCRIBE: // 3 $notenode = $twfnode->add(get_string('subscriptiondisabled', 'twf')); break; } } } if ($cansubscribe) { if (\mod_twf\subscriptions::is_subscribed($USER->id, $twfobject, null, $PAGE->cm)) { $linktext = get_string('unsubscribe', 'twf'); } else { $linktext = get_string('subscribe', 'twf'); } $url = new moodle_url('/mod/twf/subscribe.php', array('id' => $twfobject->id, 'sesskey' => sesskey())); $twfnode->add($linktext, $url, navigation_node::TYPE_SETTING); if (isset($discussionid)) { if (\mod_twf\subscriptions::is_subscribed($USER->id, $twfobject, $discussionid, $PAGE->cm)) { $linktext = get_string('unsubscribediscussion', 'twf'); } else { $linktext = get_string('subscribediscussion', 'twf'); } $url = new moodle_url('/mod/twf/subscribe.php', array('id' => $twfobject->id, 'sesskey' => sesskey(), 'd' => $discussionid, 'returnurl' => $PAGE->url->out())); $twfnode->add($linktext, $url, navigation_node::TYPE_SETTING); } } if (has_capability('mod/twf:viewsubscribers', $PAGE->cm->context)) { $url = new moodle_url('/mod/twf/subscribers.php', array('id' => $twfobject->id)); $twfnode->add(get_string('showsubscribers', 'twf'), $url, navigation_node::TYPE_SETTING); } if ($enrolled && twf_tp_can_track_twfs($twfobject)) { // keep tracking info for users with suspended enrolments if ($twfobject->trackingtype == FORUM_TRACKING_OPTIONAL || !$CFG->twf_allowforcedreadtracking && $twfobject->trackingtype == FORUM_TRACKING_FORCED) { if (twf_tp_is_tracked($twfobject)) { $linktext = get_string('notracktwf', 'twf'); } else { $linktext = get_string('tracktwf', 'twf'); } $url = new moodle_url('/mod/twf/settracking.php', array('id' => $twfobject->id, 'sesskey' => sesskey())); $twfnode->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->twf_enablerssfeeds); if ($enablerssfeeds && $twfobject->rsstype && $twfobject->rssarticles && $hascourseaccess) { if (!function_exists('rss_get_url')) { require_once "{$CFG->libdir}/rsslib.php"; } if ($twfobject->rsstype == 1) { $string = get_string('rsssubscriberssdiscussions', 'twf'); } else { $string = get_string('rsssubscriberssposts', 'twf'); } $url = new moodle_url(rss_get_url($PAGE->cm->context->id, $userid, "mod_twf", $twfobject->id)); $twfnode->add($string, $url, settings_navigation::TYPE_SETTING, null, null, new pix_icon('i/rss', '')); } }