]> git.mjollnir.org Git - moodle.git/commitdiff
Paging discussions is in CVS just now :-)
authorstronk7 <stronk7>
Tue, 10 Aug 2004 09:37:02 +0000 (09:37 +0000)
committerstronk7 <stronk7>
Tue, 10 Aug 2004 09:37:02 +0000 (09:37 +0000)
mod/forum/lib.php
mod/forum/view.php

index 7f3c550db54bc1bb687a8ae600678c81862db326..b1ba8b399e8101180a3fdd9e9f7e6eacf59d8e59 100644 (file)
@@ -2321,7 +2321,7 @@ function forum_user_can_post($forum, $user=NULL) {
 
 function forum_print_latest_discussions($forum_id=0, $forum_numdiscussions=5,
                                         $forum_style="plain", $forum_sort="",
-                                        $currentgroup=0, $groupmode=-1) {
+                                        $currentgroup=0, $groupmode=-1, $page=-1) {
     global $CFG, $USER;
 
     if ($forum_id) {
@@ -2398,6 +2398,27 @@ function forum_print_latest_discussions($forum_id=0, $forum_numdiscussions=5,
         return;
     }
 
+    //If forum_numdiscussions <= 0 don't paging (to avoid some divided by 0 errors)
+    if ($forum_numdiscussions <= 0) {
+        $page = -1;
+        $forum_numdiscussions = 0;
+    }
+
+    //If we want paging
+    if ($page != -1) {
+        ///Get the number of discussions found
+        $numdiscussions = count($discussions);
+
+        ///Show the paging bar
+        echo "<center>";
+        print_paging_bar($numdiscussions, $page, $forum_numdiscussions, "view.php?f=$forum->id&");
+        echo "</center>";
+
+        //Calculate the page "window"
+        $pagestart = ($page * $forum_numdiscussions) + 1;
+        $pageend  = $pagestart + $forum_numdiscussions - 1;
+    }
+
     $replies = forum_count_discussion_replies($forum->id);
 
     $canreply = forum_user_can_post($forum);
@@ -2426,7 +2447,15 @@ function forum_print_latest_discussions($forum_id=0, $forum_numdiscussions=5,
     foreach ($discussions as $discussion) {
         $discussioncount++;
 
-        if ($forum_numdiscussions && ($discussioncount > $forum_numdiscussions)) {
+        //If we want paging
+        if ($page != -1) {
+            //And we aren't inside the page "window"
+            if ($discussioncount < $pagestart || $discussioncount > $pageend) {
+                //Skip this discussion
+                continue;
+            }
+        //Without paging, old approach
+        } else if ($forum_numdiscussions && ($discussioncount > $forum_numdiscussions)) {
             $olddiscussionlink = true;
             break;
         }
@@ -2486,6 +2515,14 @@ function forum_print_latest_discussions($forum_id=0, $forum_numdiscussions=5,
         echo "<a href=\"$CFG->wwwroot/mod/forum/view.php?f=$forum->id&showall=1\">";
         echo get_string("olderdiscussions", "forum")."</a> ...</p>";
     }
+
+    //If we want paging
+    if ($page != -1) {
+        ///Show the paging bar
+        echo "<center>";
+        print_paging_bar($numdiscussions, $page, $forum_numdiscussions, "view.php?f=$forum->id&");
+        echo "</center>";
+    }
 }
 
 function forum_print_discussion($course, $forum, $discussion, $post, $mode, $canreply=NULL) {
index 51a7792c15d5d753562c5bcb3fdc211bfaa45446..2835afa33ca481b940eb71d96c43148d3a53d505 100644 (file)
@@ -10,6 +10,7 @@
     optional_variable($search, "");    // search string
     optional_variable($showall, "");   // show all discussions on one page
     optional_variable($group, -1);     // choose the current group
+    optional_variable($page, "0");    // which page to show
 
     if ($id) {
         if (! $cm = get_record("course_modules", "id", $id)) {
             if (!empty($showall)) {
                 forum_print_latest_discussions($forum->id, 0, 'header', '', $currentgroup, $groupmode);
             } else {
-                forum_print_latest_discussions($forum->id, $CFG->forum_manydiscussions, 'header', '', $currentgroup, $groupmode);
+                forum_print_latest_discussions($forum->id, $CFG->forum_manydiscussions, 'header', '', $currentgroup, $groupmode, $page);
             }
             break;
 
             if (!empty($showall)) {
                 forum_print_latest_discussions($forum->id, 0, 'header', '', $currentgroup, $groupmode);
             } else {
-                forum_print_latest_discussions($forum->id, $CFG->forum_manydiscussions, 'header', '', $currentgroup, $groupmode);
+                forum_print_latest_discussions($forum->id, $CFG->forum_manydiscussions, 'header', '', $currentgroup, $groupmode, $page);
             }
             break;
 
             if (!empty($showall)) {
                 forum_print_latest_discussions($forum->id, 0, 'header', '', $currentgroup, $groupmode);
             } else {
-                forum_print_latest_discussions($forum->id, $CFG->forum_manydiscussions, 'header', '', $currentgroup, $groupmode);
+                forum_print_latest_discussions($forum->id, $CFG->forum_manydiscussions, 'header', '', $currentgroup, $groupmode, $page);
             }
             break;
     }