Esempio n. 1
0
/**
 * 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));
 }
Esempio n. 3
0
/**
 * 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', ''));
    }
}