/**
  * @static
  * @param stdClass $forum
  * @param context_module $context
  * @return hsuforum_lib_discussion_sort
  */
 public static function get_from_session($forum, context_module $context)
 {
     global $SESSION;
     require_once __DIR__ . '/subscribe.php';
     if (!empty($SESSION->hsuforum_lib_discussion_sort)) {
         /** @var $instance hsuforum_lib_discussion_sort */
         $instance = unserialize($SESSION->hsuforum_lib_discussion_sort);
     } else {
         $instance = new self();
     }
     $dsub = new hsuforum_lib_discussion_subscribe($forum, $context);
     if (!$dsub->can_subscribe()) {
         $instance->disable('subscribe');
     }
     return $instance;
 }
 /**
  * Discussion subscription toggle
  */
 public function subscribedisc_action()
 {
     global $PAGE;
     require_sesskey();
     require_once dirname(dirname(__DIR__)) . '/lib/discussion/subscribe.php';
     $discussionid = required_param('discussionid', PARAM_INT);
     $returnurl = required_param('returnurl', PARAM_LOCALURL);
     $subscribe = new \hsuforum_lib_discussion_subscribe($PAGE->activityrecord, $PAGE->context);
     if ($subscribe->is_subscribed($discussionid)) {
         $subscribe->unsubscribe($discussionid);
     } else {
         $subscribe->subscribe($discussionid);
     }
     if (!AJAX_SCRIPT) {
         redirect(new moodle_url($returnurl));
     }
 }
/**
 * 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', ''));
    }
}
 /**
  * Adds a link to subscribe to a disussion
  *
  * @param stdClass $cm
  * @param stdClass $discussion
  * @param hsuforum_lib_discussion_subscribe $subscribe
  * @return string
  * @author Mark Nielsen / Guy Thomas
  */
 public function discussion_subscribe_link($cm, $discussion, hsuforum_lib_discussion_subscribe $subscribe)
 {
     if (!$subscribe->can_subscribe()) {
         return;
     }
     $returnurl = $this->return_url($cm->id, $discussion->id);
     $url = new moodle_url('/mod/hsuforum/route.php', array('contextid' => context_module::instance($cm->id)->id, 'action' => 'subscribedisc', 'discussionid' => $discussion->id, 'sesskey' => sesskey(), 'returnurl' => $returnurl));
     $o = $this->toggle_element('subscribe', 'thread-title-' . $discussion->id, $url, $subscribe->is_subscribed($discussion->id), true, array('class' => 'hsuforum_discussion_subscribe'));
     return $o;
 }