/** * @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; }