/**
  * Displays a flagged item.
  * @param forum_post $post
  * @param bool $last
  * @return string HTML code for table row
  */
 public function display_flagged_list_item($post, $last)
 {
     global $CFG;
     // Classes for Moodle table styles
     static $rownum = 0;
     $classes = ' r' . $rownum;
     $rownum = 1 - $rownum;
     if ($last) {
         $classes .= ' lastrow';
     }
     $result = '<tr class="' . $classes . '">';
     // Post cell
     $result .= '<td class="cell c0">';
     // Get post URL
     $discussion = $post->get_discussion();
     $link = '<a href="discuss.php?' . $discussion->get_link_params(forum::PARAM_HTML) . '#p' . $post->get_id() . '">';
     // Get post summary
     $summary = self::get_post_summary($post->get_subject(), $post->get_message(), $post->get_format());
     $result .= $link . $summary . '</a>';
     $result .= '<small> ' . get_string('postby', 'forumng', $post->get_forum()->display_user_link($post->get_user())) . '</small>';
     // Show flag icon. (Note: I tried to use &nbsp; before this so the
     // icon never ends up on a line of its own, but it does not work.)
     $result .= ' <form class="forumng-flag" action="flagpost.php" method="post"><div>' . '<input type="hidden" name="p" value="' . $post->get_id() . '" />' . '<input type="hidden" name="back" value="view" />' . '<input type="hidden" name="flag" value="0" />' . '<input type="image" title="' . get_string('clearflag', 'forumng') . '" src="' . $CFG->modpixpath . '/forumng/flag.on.png" alt="' . get_string('flagon', 'forumng') . '" /></div></form></td>';
     // Discussion cell
     $result .= '<td class="cell c1"><a href="discuss.php?' . $discussion->get_link_params(forum::PARAM_HTML) . $discussion->get_id() . '">' . format_string($discussion->get_subject()) . '</a></td>';
     // Date cell
     $result .= '<td class="cell c2 lastcol">' . forum_utils::display_date($post->get_created()) . '</td></tr>';
     return $result;
 }
 /**
  * Displays the view page (usually showing a list of discussions).
  * @param forum $forum Forum
  * @param int $groupid Group ID
  */
 public function print_view_page($forum, $groupid)
 {
     global $SESSION;
     $forumid = $forum->get_id();
     $baseurl = 'view.php?' . $forum->get_link_params(forum::PARAM_PLAIN);
     if (isset($SESSION->forumng_discussionlist[$forumid]) && property_exists($SESSION->forumng_discussionlist[$forumid], 'groupid') && $SESSION->forumng_discussionlist[$forumid]->groupid != $groupid) {
         unset($SESSION->forumng_discussionlist[$forumid]->page);
         unset($SESSION->forumng_discussionlist[$forumid]->groupid);
     }
     //Remember the sort order and page number in session variables
     //Unset the page session variable when the sort links are clicked
     // or groupid has been changed (using the group dropdown box)
     $sortorder = optional_param('sort', '', PARAM_ALPHA);
     if (!$sortorder) {
         if (isset($SESSION->forumng_discussionlist[$forumid]->sort)) {
             $sortorder = $SESSION->forumng_discussionlist[$forumid]->sort;
         } else {
             $sortorder = 'd';
         }
     } else {
         if (optional_param('sortlink', '', PARAM_ALPHA)) {
             $SESSION->forumng_discussionlist[$forumid]->sort = $sortorder;
             unset($SESSION->forumng_discussionlist[$forumid]->page);
         }
     }
     $page = optional_param('page', 0, PARAM_INT);
     if (!$page) {
         if (isset($SESSION->forumng_discussionlist[$forumid]->page)) {
             $page = $SESSION->forumng_discussionlist[$forumid]->page;
         } else {
             $page = 1;
         }
     } else {
         $SESSION->forumng_discussionlist[$forumid]->page = $page;
         $SESSION->forumng_discussionlist[$forumid]->groupid = $groupid;
     }
     $baseurl .= '&page=' . $page;
     $sortchar = substr($sortorder, 0, 1);
     if (strlen($sortorder) == 2) {
         $sortreverse = substr($sortorder, 1, 1) == 'r' ? true : false;
     } else {
         $sortreverse = false;
     }
     $baseurl .= '&sort=' . $sortchar;
     $baseurl .= $sortreverse ? 'r' : '';
     $sort = forum::get_sort_code($sortchar);
     $list = $forum->get_discussion_list($groupid, $forum->can_view_hidden(), $forum->can_manage_discussions(), $page, $sort, $sortreverse);
     $sticky = $list->get_sticky_discussions();
     $normal = $list->get_normal_discussions();
     // Remove discussions from list if the forumtype thinks we can't see
     // them
     foreach ($sticky as $key => $value) {
         if (!$this->can_view_discussion($value)) {
             unset($sticky[$key]);
         }
     }
     foreach ($normal as $key => $value) {
         if (!$this->can_view_discussion($value)) {
             unset($normal[$key]);
         }
     }
     // Intro
     print $forum->display_intro();
     // Draft posts
     $drafts = $forum->get_drafts();
     if (count($drafts) > 0) {
         print $forum->display_draft_list_start();
         foreach ($drafts as $draft) {
             print $draft->display_draft_list_item($forum, $draft == end($drafts));
         }
         print $forum->display_draft_list_end();
     }
     //print info about the start and end dtates of the forum from the form setting;
     $stringend = has_capability('mod/forumng:ignorepostlimits', $forum->get_context()) ? 'capable' : '';
     $startdate = $forum->get_postingfrom();
     $enddate = $forum->get_postinguntil();
     // Before start date
     if (time() < $startdate) {
         $message = get_string('beforestartdate' . $stringend, 'forumng', forum_utils::display_date($startdate));
         print "<div class='forumng-show-dates'>{$message}</div>";
     } else {
         if (time() < $enddate) {
             $message = get_string('beforeenddate' . $stringend, 'forumng', forum_utils::display_date($enddate));
             print "<div class='forumng-show-dates'>{$message}</div>";
         }
     }
     // After end date
     if ($enddate && time() >= $enddate) {
         $message = get_string('afterenddate' . $stringend, 'forumng', forum_utils::display_date($enddate));
         print "<div class='forumng-show-dates'>{$message}</div>";
     }
     // Post button - temporarily disabled when in all-groups mode
     print $groupid == NULL ? '' : $forum->display_post_button($groupid);
     print $list->display_paging_bar($baseurl);
     if (count($sticky) + count($normal) > 0) {
         print $forum->display_discussion_list_start($groupid, $baseurl, $sort, $sortreverse);
         foreach ($sticky as $discussion) {
             print $discussion->display_discussion_list_item($groupid);
         }
         if (count($sticky) > 0 && count($normal) > 0) {
             print $forum->display_discussion_list_divider($groupid);
         }
         foreach ($normal as $discussion) {
             print $discussion->display_discussion_list_item($groupid, $discussion == end($normal));
         }
         print $forum->display_discussion_list_end($groupid);
     } else {
         print '<p class="forumng-nodiscussions">' . $this->get_string($forum, 'nodiscussions') . '</p>';
     }
     print $list->display_paging_bar($baseurl);
     print $forum->display_discussion_list_features($groupid);
     // Flagged posts
     $flagged = $forum->get_flagged_posts();
     if (count($flagged) > 0) {
         print $forum->display_flagged_list_start();
         foreach ($flagged as $post) {
             print $post->display_flagged_list_item($post === end($flagged));
         }
         print $forum->display_flagged_list_end();
     }
     // Subscribe and view subscribers links
     print $forum->display_subscribe_options();
     // Atom/RSS links
     print $forum->display_feed_links($groupid);
     // display the warning message for invalid archive setting
     print $forum->display_archive_warning();
     // Display sharing information
     print $forum->display_sharing_info();
 }
 $navigation[] = array('name' => $pagename, 'type' => 'forumng');
 $buttontext = '';
 if (class_exists('ouflags') && ou_get_is_mobile()) {
     ou_mobile_configure_theme();
 }
 $PAGEWILLCALLSKIPMAINDESTINATION = true;
 print_header_simple(format_string($forum->get_name()) . ': ' . $pagename, "", build_navigation($navigation, $cm), "", "", true, $buttontext, navmenu($course, $cm));
 $forum->print_js();
 print skip_main_destination();
 // If replying, print original post here
 if (!$isdiscussion && !$edit && !$islock) {
     print '<div class="forumng-replyto">' . $replyto->display(true, array(forum_post::OPTION_NO_COMMANDS => true, forum_post::OPTION_FIRST_UNREAD => false)) . '</div>';
 }
 // If draft has been saved, print that here
 if ($draft) {
     print '<div class="forumng-draftexists">' . get_string('draftexists', 'forumng', forum_utils::display_date($draft->get_saved())) . '</div>';
 }
 // Set up initial data
 $initialvalues = new stdClass();
 if ($edit) {
     // Work out initial values for all form fields
     if ($isdiscussion) {
         $initialvalues->timestart = $discussion->get_time_start();
         $initialvalues->timeend = $discussion->get_time_end();
         $initialvalues->sticky = $discussion->is_sticky() ? 1 : 0;
         $initialvalues->groupid = $discussion->get_group_id();
     }
     $initialvalues->subject = $post->get_subject();
     $initialvalues->message = $post->get_message();
     $initialvalues->format = $post->get_format();
     $initialvalues->setimportant = $post->is_important();