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);
}
Exemple #3
0
/**
 * 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', ''));
    }
}