/** * Displays the view page (usually showing a list of discussions). * @param mod_forumng $forum Forum * @param int $groupid Group ID */ function print_view_page($forum, $groupid) { global $PAGE; $out = mod_forumng_utils::get_renderer(); $forumngid = $forum->get_id(); $baseurl = 'list.php?' . $forum->get_link_params(mod_forumng::PARAM_PLAIN); $sortorder = optional_param('sort', '', PARAM_ALPHA); if (!$sortorder) { $sortlink = optional_param('sortlink', '', PARAM_ALPHA); if ($sortlink) { $sortorder = $sortlink; } else { $sortorder = 'd'; } } $page = optional_param('page', 0, PARAM_INT); if (!$page) { $page = 1; } $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 = mod_forumng::get_sort_code($sortchar); $list = $forum->get_discussion_list($groupid, $forum->can_view_hidden(), $page, $sort, $sortreverse); $normal = $list->get_normal_discussions(); $fg = new forumngtype_general(); // Remove discussions from list if the forumtype thinks we can't see them or they are not deleted. foreach ($normal as $key => $value) { if (!$fg->can_view_discussion($value) || !$value->is_deleted()) { unset($normal[$key]); } } $pagecount = get_page_count(count($normal), $page); // Intro. print $out->render_intro($forum); print display_paging_bar($baseurl, $pagecount, $page); if (count($normal) > 0) { print $out->render_discussion_list_start($forum, $groupid, $baseurl, $sort, $sortreverse); foreach ($normal as $discussion) { if ($discussion->is_deleted()) { print $out->render_discussion_list_item($discussion, $groupid, $discussion == end($normal)); } } print $out->render_discussion_list_end($forum, $groupid); } else { print '<p class="forumng-nodiscussions">' . get_string('nodeleteddiscussions', 'forumngfeature_deletedposts') . '</p>'; } print display_paging_bar($baseurl, $pagecount, $page); }
/** * Displays the view page (usually showing a list of discussions). * @param mod_forumng $forum Forum * @param int $groupid Group ID */ public function print_view_page($forum, $groupid) { global $SESSION, $PAGE, $USER; $out = mod_forumng_utils::get_renderer(); $forumngid = $forum->get_id(); $baseurl = 'view.php?' . $forum->get_link_params(mod_forumng::PARAM_PLAIN); if (isset($SESSION->forumng_discussionlist[$forumngid]) && property_exists($SESSION->forumng_discussionlist[$forumngid], 'groupid') && $SESSION->forumng_discussionlist[$forumngid]->groupid != $groupid) { unset($SESSION->forumng_discussionlist[$forumngid]->page); unset($SESSION->forumng_discussionlist[$forumngid]->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[$forumngid]->sort)) { $sortorder = $SESSION->forumng_discussionlist[$forumngid]->sort; } else { $sortorder = 'd'; } } else { if (optional_param('sortlink', '', PARAM_ALPHA)) { if (!isset($SESSION->forumng_discussionlist[$forumngid])) { $SESSION->forumng_discussionlist[$forumngid] = new stdClass(); } $SESSION->forumng_discussionlist[$forumngid]->sort = $sortorder; unset($SESSION->forumng_discussionlist[$forumngid]->page); } } $page = optional_param('page', 0, PARAM_INT); if (!$page) { if (isset($SESSION->forumng_discussionlist[$forumngid]->page)) { $page = $SESSION->forumng_discussionlist[$forumngid]->page; } else { $page = 1; } } else { if (!isset($SESSION->forumng_discussionlist[$forumngid])) { $SESSION->forumng_discussionlist[$forumngid] = new stdClass(); } $SESSION->forumng_discussionlist[$forumngid]->page = $page; $SESSION->forumng_discussionlist[$forumngid]->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 = mod_forumng::get_sort_code($sortchar); // Get tagid if used. $tag = optional_param('tag', null, PARAM_ALPHANUM); $list = $forum->get_discussion_list($groupid, $forum->can_view_hidden(), $page, $sort, $sortreverse, 0, true, $tag); $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 $out->render_intro($forum); // Flagged posts skip link. $flaggedposts = $forum->get_flagged_posts(); $flagdiscussions = $forum->get_flagged_discussions(); $flaggeddiscussions = array(); // Need to loop through flagged discussions removing any that can not be viewed by user. foreach ($flagdiscussions as $discussion) { if ($discussion->can_view($USER->id)) { // Add to flagged discussions. array_push($flaggeddiscussions, $discussion); } } if (count($flaggedposts) + count($flaggeddiscussions) > 0) { $output = html_writer::start_tag('div', array('class' => 'forumng-flagged-link')); $output .= $out->render_flagged_list_link($flaggeddiscussions, true); $output .= $out->render_flagged_list_link($flaggedposts); $output .= html_writer::end_tag('div'); echo $output; } // Draft posts $drafts = $forum->get_drafts(); if (count($drafts) > 0) { print $out->render_draft_list_start(); foreach ($drafts as $draft) { print $out->render_draft_list_item($forum, $draft, $draft == end($drafts)); } print $out->render_draft_list_end(); } // Print info about the start and end dates 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', mod_forumng_utils::display_date($startdate)); print "<div class='forumng-show-dates'>{$message}</div>"; } else { if (time() < $enddate) { $message = get_string('beforeenddate' . $stringend, 'forumng', mod_forumng_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', mod_forumng_utils::display_date($enddate)); print "<div class='forumng-show-dates'>{$message}</div>"; } // Show Alert info. if ($forum->has_reporting_email()) { print $out->box(get_string('alert_intro', 'forumng'), 'generalbox', 'forumng-reportingon'); } // Post button - temporarily disabled when in all-groups mode print $groupid == null ? '' : $forum->display_post_button($groupid); if ($taglist = $forum->get_tags_used($groupid)) { print $out->render_tag_filter($taglist, $forum, $tag); } // Provide link to skip sticky discussions. if (count($sticky) > 0 && count($normal) > 0) { print $out->render_skip_link(key($normal)); } print $list->display_paging_bar($baseurl); if (count($sticky) + count($normal) > 0) { print $out->render_discussion_list_start($forum, $groupid, $baseurl, $sort, $sortreverse); foreach ($sticky as $discussion) { print $out->render_discussion_list_item($discussion, $groupid, count($normal) == 0 && $discussion == end($sticky)); } if (count($sticky) > 0 && count($normal) > 0) { print $out->render_discussion_list_divider($forum, $groupid); } foreach ($normal as $discussion) { print $out->render_discussion_list_item($discussion, $groupid, $discussion == end($normal)); } print $out->render_discussion_list_end($forum, $groupid); } else { print '<p class="forumng-nodiscussions">' . $this->get_string($forum, 'nodiscussions') . '</p>'; } print $list->display_paging_bar($baseurl); print $forum->display_forumngfeature_discussion_lists($groupid); // Flagged discussions. if (count($flaggeddiscussions) > 0) { print $out->render_flagged_list_start(true); foreach ($flaggeddiscussions as $discussion) { print $out->render_flagged_discuss_list_item($discussion, $discussion === end($flaggeddiscussions)); } print $out->render_flagged_list_end(); } // Flagged posts. if (count($flaggedposts) > 0) { print $out->render_flagged_list_start(); foreach ($flaggedposts as $post) { print $out->render_flagged_list_item($post, $post === end($flaggedposts)); } print $out->render_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(); }