/**
  * Test the course_module_viewed event.
  */
 public function test_course_module_viewed()
 {
     // Setup test data.
     $course = $this->getDataGenerator()->create_course();
     $forum = $this->getDataGenerator()->create_module('hsuforum', array('course' => $course->id));
     $context = context_module::instance($forum->cmid);
     $params = array('context' => $context, 'objectid' => $forum->id);
     $event = \mod_hsuforum\event\course_module_viewed::create($params);
     // Trigger and capture the event.
     $sink = $this->redirectEvents();
     $event->trigger();
     $events = $sink->get_events();
     $this->assertCount(1, $events);
     $event = reset($events);
     // Checking that the event contains the expected values.
     $this->assertInstanceOf('\\mod_hsuforum\\event\\course_module_viewed', $event);
     $this->assertEquals($context, $event->get_context());
     $expected = array($course->id, 'hsuforum', 'view forum', "view.php?f={$forum->id}", $forum->id, $forum->cmid);
     $this->assertEventLegacyLogData($expected, $event);
     $url = new \moodle_url('/mod/hsuforum/view.php', array('f' => $forum->id));
     $this->assertEquals($url, $event->get_url());
     $this->assertEventContextNotUsed($event);
     $this->assertNotEmpty($event->get_name());
 }
$PAGE->set_url($url);
$discussion = $DB->get_record('hsuforum_discussions', array('id' => $d), '*', MUST_EXIST);
$course = $DB->get_record('course', array('id' => $discussion->course), '*', MUST_EXIST);
$forum = $DB->get_record('hsuforum', array('id' => $discussion->forum), '*', MUST_EXIST);
$cm = get_coursemodule_from_instance('hsuforum', $forum->id, $course->id, false, MUST_EXIST);
require_course_login($course, true, $cm);
// move this down fix for MDL-6926
require_once $CFG->dirroot . '/mod/hsuforum/lib.php';
$modcontext = context_module::instance($cm->id);
require_capability('mod/hsuforum:viewdiscussion', $modcontext, NULL, true, 'noviewdiscussionspermission', 'hsuforum');
if ($forum->type == 'single') {
    // If we are viewing a simple single forum then we need to log forum as viewed.
    $completion = new \completion_info($course);
    $completion->set_module_viewed($cm);
    $params = array('context' => $modcontext, 'objectid' => $forum->id);
    $event = \mod_hsuforum\event\course_module_viewed::create($params);
    $event->add_record_snapshot('course_modules', $cm);
    $event->add_record_snapshot('course', $course);
    $event->add_record_snapshot('hsuforum', $forum);
    $event->trigger();
}
if (!empty($CFG->enablerssfeeds) && !empty($config->enablerssfeeds) && $forum->rsstype && $forum->rssarticles) {
    require_once "{$CFG->libdir}/rsslib.php";
    $rsstitle = format_string($course->shortname, true, array('context' => context_course::instance($course->id))) . ': ' . format_string($forum->name);
    rss_add_http_header($modcontext, 'mod_hsuforum', $forum, $rsstitle);
}
/// move discussion if requested
if ($move > 0 and confirm_sesskey()) {
    $return = $CFG->wwwroot . '/mod/hsuforum/discuss.php?d=' . $discussion->id;
    require_capability('mod/hsuforum:movediscussions', $modcontext);
    if ($forum->type == 'single') {
 /**
  * Render all discussions view, including add discussion button, etc...
  *
  * @param stdClass $forum - forum row
  * @return string
  */
 public function render_discussionsview($forum)
 {
     global $CFG, $DB, $PAGE, $SESSION;
     ob_start();
     // YAK! todo, fix this rubbish.
     require_once $CFG->dirroot . '/mod/hsuforum/lib.php';
     require_once $CFG->libdir . '/completionlib.php';
     require_once $CFG->libdir . '/accesslib.php';
     $output = '';
     $modinfo = get_fast_modinfo($forum->course);
     $forums = $modinfo->get_instances_of('hsuforum');
     if (!isset($forums[$forum->id])) {
         print_error('invalidcoursemodule');
     }
     $cm = $forums[$forum->id];
     $id = $cm->id;
     // Forum instance id (id in course modules table)
     $f = $forum->id;
     // Forum ID
     $config = get_config('hsuforum');
     if ($id) {
         if (!($course = $DB->get_record("course", array("id" => $cm->course)))) {
             print_error('coursemisconf');
         }
     } else {
         if ($f) {
             if (!($course = $DB->get_record("course", array("id" => $forum->course)))) {
                 print_error('coursemisconf');
             }
             // move require_course_login here to use forced language for course
             // fix for MDL-6926
             require_course_login($course, true, $cm);
         } else {
             print_error('missingparameter');
         }
     }
     $context = \context_module::instance($cm->id);
     if (!empty($CFG->enablerssfeeds) && !empty($config->enablerssfeeds) && $forum->rsstype && $forum->rssarticles) {
         require_once "{$CFG->libdir}/rsslib.php";
         $rsstitle = format_string($course->shortname, true, array('context' => \context_course::instance($course->id))) . ': ' . format_string($forum->name);
         rss_add_http_header($context, 'mod_hsuforum', $forum, $rsstitle);
     }
     // Mark viewed if required
     $completion = new \completion_info($course);
     $completion->set_module_viewed($cm);
     /// Some capability checks.
     if (empty($cm->visible) and !has_capability('moodle/course:viewhiddenactivities', $context)) {
         notice(get_string("activityiscurrentlyhidden"));
     }
     if (!has_capability('mod/hsuforum:viewdiscussion', $context)) {
         notice(get_string('noviewdiscussionspermission', 'hsuforum'));
     }
     $params = array('context' => $context, 'objectid' => $forum->id);
     $event = \mod_hsuforum\event\course_module_viewed::create($params);
     $event->add_record_snapshot('course_modules', $cm);
     $event->add_record_snapshot('course', $course);
     $event->add_record_snapshot('hsuforum', $forum);
     $event->trigger();
     if (!defined(AJAX_SCRIPT) || !AJAX_SCRIPT) {
         // Return here if we post or set subscription etc (but not if we are calling this via ajax).
         $SESSION->fromdiscussion = qualified_me();
     }
     $PAGE->requires->js_init_call('M.mod_hsuforum.init', null, false, $this->get_js_module());
     $output .= $this->svg_sprite();
     $this->view($course, $cm, $forum, $context);
     // Don't allow non logged in users, or guest to try to manage subscriptions.
     if (isloggedin() && !isguestuser()) {
         $url = new \moodle_url('/mod/hsuforum/index.php', ['id' => $course->id]);
         $manageforumsubscriptions = get_string('manageforumsubscriptions', 'mod_hsuforum');
         $output .= \html_writer::link($url, $manageforumsubscriptions);
     }
     $output = ob_get_contents() . $output;
     ob_end_clean();
     return $output;
 }