]> git.mjollnir.org Git - moodle.git/commitdiff
New paging system for glosaries.
authorstronk7 <stronk7>
Wed, 24 Nov 2004 23:37:46 +0000 (23:37 +0000)
committerstronk7 <stronk7>
Wed, 24 Nov 2004 23:37:46 +0000 (23:37 +0000)
100% compatible with Moodle's one.
Supports more options. Perhaps we could use it
sitewide.

Merged from MOODLE_14_STABLE

mod/glossary/lib.php
mod/glossary/view.php

index 4dc39cf522b140d0f9b6732b1fa48c86524bb4e0..7b003ebcbdf649f7fc33ab92fd14a4fbc49352c4 100644 (file)
@@ -675,7 +675,6 @@ function  glossary_print_entry_aliases($course, $cm, $glossary, $entry,$mode="",
         }
         if ($return != '') {
             $return .= '</select>';
-//            $return = "<table border=\"0\" align=$align><tr><td>$return</td></tr></table>";
         }
     } 
     if ($type == 'print') {
@@ -701,11 +700,11 @@ function glossary_print_entry_icons($course, $cm, $glossary, $entry,$mode="",$ho
     $return .= "</font> ";
 
     
-    if ( ($glossary->allowcomments && !isguest()) || isteacher($glossary->course)) {
+    if ( (!empty($USER->id) && $glossary->allowcomments && !isguest()) || $isteacher) {
         $return .= " <a title=\"" . get_string("addcomment","glossary") . "\" href=\"comment.php?id=$cm->id&amp;eid=$entry->id\"><img src=\"comment.gif\" height=\"11\" width=\"11\" border=\"0\" alt=\"\" /></a> ";
     }
 
-    if ($isteacher or ($glossary->studentcanpost and $entry->userid == $USER->id)) {
+    if ($isteacher or (!empty($USER->id) and $glossary->studentcanpost and $entry->userid == $USER->id)) {
         // only teachers can export entries so check it out
         if ($isteacher and !$ismainglossary and !$importedentry) {
             $mainglossary = get_record("glossary","mainglossary",1,"course",$course->id);
@@ -2043,4 +2042,142 @@ function glossary_print_rating_menu($entryid, $userid, $scale) {
     choose_from_menu($scale, $entryid, $rating->rating, "$strrate...");
 }
 
+
+function glossary_get_paging_bar($totalcount, $page, $perpage, $baseurl, $maxpageallowed=99999, $maxdisplay=20, $separator="&nbsp;", $specialtext="", $specialvalue=-1, $previousandnext = true) {
+// Returns the html code to represent any pagging bar. Paramenters are:
+//
+//  Mandatory:
+//     $totalcount: total number of records to be displayed
+//     $page: page currently selected (0 based)
+//     $perpage: number of records per page
+//     $baseurl: url to link in each page, the string 'page=XX' will be added automatically.
+//  Optional:
+//     $maxpageallowed: maximum number of page allowed.
+//     $maxdisplay: maximum number of page links to show in the bar
+//     $separator: string to be used between pages in the bar
+//     $specialtext: string to be showed as an special link
+//     $specialvalue: value (page) to be used in the special link
+//     $previousandnext: to decide if we want the previous and next links
+//
+// The function dinamically show the first and last pages, and "scroll" over pages.
+// Fully compatible with Moodle's print_paging_bar() function. Perhaps some day this
+// could replace the general one. ;-)
+
+    $code = '';
+
+    $showspecial = false;
+    $specialselected = false;
+
+    //Check if we have to show the special link
+    if (!empty($specialtext)) {
+        $showspecial = true;
+    }
+    //Check if we are with the special link selected
+    if ($showspecial && $page == $specialvalue) {
+        $specialselected = true;
+    } 
+
+    //If there are results (more than 1 page)
+    if ($totalcount > $perpage) {
+        $code .= "<center>";
+        $code .= "<p>".get_string("page").":";
+
+        $maxpage = (int)(($totalcount-1)/$perpage);
+
+        //Lower and upper limit of page
+        if ($page < 0) {
+            $page = 0;
+        }
+        if ($page > $maxpageallowed) {
+            $page = $maxpageallowed;
+        }
+        if ($page > $maxpage) {
+            $page = $maxpage;
+        }
+
+        //Calculate the window of pages
+        $pagefrom = $page - ((int)($maxdisplay / 2));
+        if ($pagefrom < 0) {
+            $pagefrom = 0;
+        }
+        $pageto = $pagefrom + $maxdisplay - 1;
+        if ($pageto > $maxpageallowed) {
+            $pageto = $maxpageallowed;
+        }
+        if ($pageto > $maxpage) {
+            $pageto = $maxpage;
+        }
+
+        //Some movements can be necessary if don't see enought pages
+        if ($pageto - $pagefrom < $maxdisplay - 1) {
+            if ($pageto - $maxdisplay + 1 > 0) {
+                $pagefrom = $pageto - $maxdisplay + 1;
+            }
+        }
+
+        //Calculate first and last if necessary
+        $firstpagecode = '';
+        $lastpagecode = '';
+        if ($pagefrom > 0) {
+            $firstpagecode = "$separator<a href=\"{$baseurl}page=0\">1</a>";
+            if ($pagefrom > 1) {
+                $firstpagecode .= "$separator...";
+            }
+        }
+        if ($pageto < $maxpage) {
+            if ($pageto < $maxpage -1) {
+                $lastpagecode = "$separator...";
+            }
+            $lastpagecode .= "$separator<a href=\"{$baseurl}page=$maxpage\">".($maxpage+1)."</a>";
+        }
+
+        //Previous
+        if ($page > 0 && $previousandnext) {
+            $pagenum = $page - 1;
+            $code .= "&nbsp;(<a  href=\"{$baseurl}page=$pagenum\">".get_string("previous")."</a>)&nbsp;";
+        }
+
+        //Add first
+        $code .= $firstpagecode;
+
+        $pagenum = $pagefrom;
+
+        //List of maxdisplay pages
+        while ($pagenum <= $pageto) {
+            $pagetoshow = $pagenum +1;
+            if ($pagenum == $page && !$specialselected) {
+                $code .= "$separator$pagetoshow";
+            } else {
+                $code .= "$separator<a href=\"{$baseurl}page=$pagenum\">$pagetoshow</a>";
+            }
+            $pagenum++;
+        }
+
+        //Add last
+        $code .= $lastpagecode;
+
+        //Next
+        if ($page < $maxpage && $page < $maxpageallowed && $previousandnext) {
+            $pagenum = $page + 1;
+            $code .= "$separator(<a href=\"{$baseurl}page=$pagenum\">".get_string("next")."</a>)";
+        }
+
+        //Add special
+        if ($showspecial) {
+            $code .= '<br />';
+            if ($specialselected) {
+                $code .= $specialtext;
+            } else {
+                $code .= "$separator<a href=\"{$baseurl}page=$specialvalue\">$specialtext</a>";
+            }
+        }
+
+        //End html
+        $code .= "</p>";
+        $code .= "</center>";
+    }
+
+    return $code;
+}
+
 ?>
index 9a3a7410097629ca6f28dac06e14803cde82308e..3a7915f8bca22c52d92f8571fbd7fc2da862827b 100644 (file)
@@ -21,6 +21,7 @@
     $sortkey    = optional_param('sortkey');     // Sorted view: CREATION | UPDATE | FIRSTNAME | LASTNAME...
     $sortorder  = optional_param('sortorder');   // it defines the order of the sorting (ASC or DESC)
     $offset     = optional_param('offset',0);    // entries to bypass (for paging purpouses)
+    $page       = optional_param('page',0);      // Page to show (for paging purpouses)
     $show       = optional_param('show');        // [ concept | alias ] => mode=term hook=$show
 
     if (!empty($id)) {
         $entriesbypage = $CFG->glossary_entbypage;
     }
 
+/// If we have received a page, recalculate offset
+    if ($page != 0 && $offset == 0) {
+        $offset = $page * $entriesbypage;
+    }
+
 /// setting the default values for the display mode of the current glossary
 /// only if the glossary is viewed by the first time
     if ( $dp = get_record('glossary_formats','name', $glossary->displayformat) ) {
 
     if ($allentries) {
 
-        /// printing the paging links
+        $paging = glossary_get_paging_bar($count, $page, $entriesbypage, "view.php?id=$id&mode=$mode&hook=$hook&sortkey=$sortkey&sortorder=$sortorder&fullsearch=$fullsearch&",9999,10,'&nbsp;&nbsp;', get_string("allentries","glossary"), -1);
 
-        $paging = get_string("allentries","glossary");
-        if ( $offset < 0 ) {
-            $paging = '<strong>' . $paging . '</strong>';
-        } else {
-            $paging = "<a href=\"view.php?id=$id&amp;mode=$mode&amp;hook=$hook&amp;offset=-1&amp;sortkey=$sortkey&amp;sortorder=$sortorder&amp;fullsearch=$fullsearch\">" . $paging . '</a>';
-        }
-        if ($count > $entriesbypage ) {
-            for ($i = 0; ($i*$entriesbypage) < $count  ; $i++   ) {
-                if ( $paging != '' ) {
-                    if ($i % 20 == 0 and $i) {
-                        $paging .= '<br />';
-                    } else {
-                        $paging .= ' | ';
-                    }
-                }
-                $pagenumber = (string) ($i + 1 );
-                if ($offset / $entriesbypage == $i) {
-                    $paging .= '<strong>' . $pagenumber . '</strong>';
-                } else {
-                    $paging .= "<a href=\"view.php?id=$id&amp;mode=$mode&amp;hook=$hook&amp;offset=" . ($i*$entriesbypage) . "&amp;sortkey=$sortkey&amp;sortorder=$sortorder&amp;fullsearch=$fullsearch\">" . $pagenumber . '</a>';
-                }
-            }
-            $paging  = "<font size=\"1\"><center>" . get_string ("jumpto") . " $paging</center></font>";
-        } else {
-            $paging = '';
-        }
+        echo '<div style="font-size: smaller;">';
         echo $paging;
+        echo '</div>';
 
         $ratings = NULL;
         $ratingsmenuused = false;
     }
 
     if ( $paging ) {
-        echo "<hr />$paging";
+        echo '<hr />';
+        echo '<div style="font-size: smaller;">';
+        echo $paging;
+        echo '</div>';
     }
     echo '<p>';
     echo '</center>';