public function display($forum)
 {
     // Work out current status
     $manualmark = !forum::mark_read_automatically();
     $current = get_string($manualmark ? 'manualmark_manual' : 'manualmark_auto', 'forumng');
     // Make a help button
     $change = get_string('manualmark_change', 'forumng');
     $helpbutton = helpbutton('manualmark', $change, 'forumng', true, false, '', true);
     // Get the button form
     $params = $forum->get_link_params_array();
     return parent::get_button($forum, $change, 'feature/manualmark/change.php', true, $params, $helpbutton, 'forumng-manualmark', $current . ' ', 'forumng-button-to-link');
 }
 /**
  * Displays the discussion page.
  * @param forum_discussion $discussion Discussion
  */
 public function print_discussion_page($discussion)
 {
     $previousread = (int) $discussion->get_time_read();
     // 'Read date' option (used when viewing all posts so that they keep
     // their read/unread colouring)
     $timeread = optional_param('timeread', 0, PARAM_INT);
     if ($timeread) {
         $discussion->pretend_time_read($timeread);
         $previousread = $timeread;
     }
     // 'Expand all' option (always chosen for non-JS browsers)
     $expandall = optional_param('expand', 0, PARAM_INT) || forum_utils::is_bad_browser();
     // 'Expand all' option (always chosen for non-JS browsers)
     $collapseall = optional_param('collapse', 0, PARAM_INT);
     // Magic expand tracker (for use in JS only, never set server-side).
     // This tracks expanded posts, and makes the Back button 'work' in
     // the sense that it will expand these posts again.
     print '<form method="post" action="."><div>' . '<input type="hidden" id="expanded_posts" name="expanded_posts" ' . 'value="" /></div></form>';
     // Get content for all posts in the discussion
     $options = array();
     if ($expandall) {
         $options[forum_post::OPTION_CHILDREN_EXPANDED] = true;
     }
     if ($collapseall) {
         $options[forum_post::OPTION_CHILDREN_COLLAPSED] = true;
     }
     $content = $this->display_discussion($discussion, $options);
     // Some post display options use the read time to construct links
     // (usually for non-JS version) so that unread state is maintained.
     $options[forum_post::OPTION_READ_TIME] = $previousread;
     // Display expand all option if there are any 'Expand' links in content
     $fakedate = '&amp;timeread=' . $previousread;
     print '<div id="forumng-expandall">';
     $showexpandall = preg_match('~<a [^>]*href="discuss\\.php\\?d=[0-9]+[^"]*&amp;expand=1#p[0-9]+">~', $content);
     $showcollapseall = preg_match('~<div class="forumng-post forumng-full.*<div class="forumng-post forumng-full~s', $content);
     if ($showexpandall) {
         print '<a href="' . $discussion->get_url(forum::PARAM_HTML) . '&amp;expand=1' . $fakedate . '">' . get_string('expandall', 'forumng') . '</a>';
         if ($showcollapseall) {
             print ' &#x2022; ';
         }
     }
     if ($showcollapseall) {
         print '<a href="' . $discussion->get_url(forum::PARAM_HTML) . '&amp;collapse=1' . $fakedate . '">' . get_string('collapseall', 'forumng') . '</a> ';
     }
     print '</div>';
     // Display content
     print $content;
     // Print reply/edit forms for AJAX
     print $this->display_ajax_forms($discussion->get_forum());
     // Link back to forum
     print $discussion->display_link_back_to_forum();
     // Display discussion features (row of buttons)
     print $discussion->display_discussion_features();
     // Display the subscription options to this disucssion if available
     print $discussion->display_subscribe_options();
     // Atom/RSS links
     print $discussion->display_feed_links();
     // Set read data [shouldn't this logic be somewhere else as it is not
     // part of display?]
     if (forum::mark_read_automatically()) {
         $discussion->mark_read();
     }
 }
 public function should_display($discussion)
 {
     return !forum::mark_read_automatically() && $discussion->get_forum()->can_mark_read() && $discussion->get_num_unread_posts();
 }
<?php

require_once '../../../../config.php';
require_once '../../forum.php';
// This script toggles the user's 'automatically mark read' preference.
$id = required_param('id', PARAM_INT);
$cloneid = optional_param('clone', 0, PARAM_INT);
try {
    $forum = forum::get_from_cmid($id, $cloneid);
    $groupid = forum::get_activity_group($forum->get_course_module(), false);
    $forum->require_view($groupid);
    $manualmark = !forum::mark_read_automatically();
    if ($manualmark) {
        unset_user_preference('forumng_manualmark');
    } else {
        set_user_preference('forumng_manualmark', 1);
    }
    redirect($forum->get_url(forum::PARAM_PLAIN));
} catch (Exception $e) {
    forum_utils::handle_exception($e);
}