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