original_string: public static function view_forum_discussion($discussionid) {
          global $DB, $CFG, $USER;
          require_once($CFG->dirroot . "/mod/forum/lib.php");
  
          $params = self::validate_parameters(self::view_forum_discussion_parameters(),
                                              array(
                                                  'discussionid' => $discussionid
                                              ));
          $warnings = array();
  
          $discussion = $DB->get_record('forum_discussions', array('id' => $params['discussionid']), '*', MUST_EXIST);
          $forum = $DB->get_record('forum', array('id' => $discussion->forum), '*', MUST_EXIST);
          list($course, $cm) = get_course_and_cm_from_instance($forum, 'forum');
  
          // Validate the module context. It checks everything that affects the module visibility (including groupings, etc..).
          $modcontext = context_module::instance($cm->id);
          self::validate_context($modcontext);
  
          require_capability('mod/forum:viewdiscussion', $modcontext, null, true, 'noviewdiscussionspermission', 'forum');
  
          // Call the forum/lib API.
          forum_discussion_view($modcontext, $forum, $discussion);
  
          // Mark as read if required.
          if (!$CFG->forum_usermarksread && forum_tp_is_tracked($forum)) {
              forum_tp_mark_discussion_read($USER, $discussion->id);
          }
  
          $result = array();
          $result['status'] = true;
          $result['warnings'] = $warnings;
          return $result;
      }
code: public static function view_forum_discussion($discussionid) {
          global $DB, $CFG, $USER;
          require_once($CFG->dirroot . "/mod/forum/lib.php");
  
          $params = self::validate_parameters(self::view_forum_discussion_parameters(),
                                              array(
                                                  'discussionid' => $discussionid
                                              ));
          $warnings = array();
  
          $discussion = $DB->get_record('forum_discussions', array('id' => $params['discussionid']), '*', MUST_EXIST);
          $forum = $DB->get_record('forum', array('id' => $discussion->forum), '*', MUST_EXIST);
          list($course, $cm) = get_course_and_cm_from_instance($forum, 'forum');
  
          // Validate the module context. It checks everything that affects the module visibility (including groupings, etc..).
          $modcontext = context_module::instance($cm->id);
          self::validate_context($modcontext);
  
          require_capability('mod/forum:viewdiscussion', $modcontext, null, true, 'noviewdiscussionspermission', 'forum');
  
          // Call the forum/lib API.
          forum_discussion_view($modcontext, $forum, $discussion);
  
          // Mark as read if required.
          if (!$CFG->forum_usermarksread && forum_tp_is_tracked($forum)) {
              forum_tp_mark_discussion_read($USER, $discussion->id);
          }
  
          $result = array();
          $result['status'] = true;
          $result['warnings'] = $warnings;
          return $result;
      }
code_tokens: public static function view_forum_discussion ( $ discussionid ) { global $ DB , $ CFG , $ USER ; require_once ( $ CFG -> dirroot . "/mod/forum/lib.php" ) ; $ params = self :: validate_parameters ( self :: view_forum_discussion_parameters ( ) , array ( 'discussionid' => $ discussionid ) ) ; $ warnings = array ( ) ; $ discussion = $ DB -> get_record ( 'forum_discussions' , array ( 'id' => $ params [ 'discussionid' ] ) , '*' , MUST_EXIST ) ; $ forum = $ DB -> get_record ( 'forum' , array ( 'id' => $ discussion -> forum ) , '*' , MUST_EXIST ) ; list ( $ course , $ cm ) = get_course_and_cm_from_instance ( $ forum , 'forum' ) ; // Validate the module context. It checks everything that affects the module visibility (including groupings, etc..). $ modcontext = context_module :: instance ( $ cm -> id ) ; self :: validate_context ( $ modcontext ) ; require_capability ( 'mod/forum:viewdiscussion' , $ modcontext , null , true , 'noviewdiscussionspermission' , 'forum' ) ; // Call the forum/lib API. forum_discussion_view ( $ modcontext , $ forum , $ discussion ) ; // Mark as read if required. if ( ! $ CFG -> forum_usermarksread && forum_tp_is_tracked ( $ forum ) ) { forum_tp_mark_discussion_read ( $ USER , $ discussion -> id ) ; } $ result = array ( ) ; $ result [ 'status' ] = true ; $ result [ 'warnings' ] = $ warnings ; return $ result ; }
docstring: Trigger the discussion viewed event.
  
  @param int $discussionid the discussion id
  @return array of warnings and status result
  @since Moodle 2.9
  @throws moodle_exception
docstring_tokens: Trigger the discussion viewed event .