]> git.mjollnir.org Git - moodle.git/commitdiff
Improvements to course searching
authormoodler <moodler>
Tue, 19 Aug 2003 05:32:20 +0000 (05:32 +0000)
committermoodler <moodler>
Tue, 19 Aug 2003 05:32:20 +0000 (05:32 +0000)
 - can search for full words or non words with +word -word
 - no longer groups by category, sorts by full name
 - prints paging as well as total number
 - search help

course/lib.php
course/search.php
lib/datalib.php

index bd5fdb947bd6d59ede07b2b89bbdae21c21a9469..d20343e07d430fb059b806ffeb1595e69a92c8bc 100644 (file)
@@ -1122,17 +1122,32 @@ function print_my_moodle() {
 }
 
 
-function print_course_search($value="") {
+function print_course_search($value="", $return=false, $format="plain") {
 
     global $CFG;
 
     $strsearchcourses= get_string("searchcourses");
 
-    echo "<center><p align=\"center\" class=\"coursesearchbox\">";
-    echo "<form name=\"coursesearch\" action=\"$CFG->wwwroot/course/search.php\" method=\"get\">";
-    echo "<input type=\"text\" size=30 name=\"search\" value=\"$value\">";
-    echo "<input type=\"submit\" value=\"$strsearchcourses\">";
-    echo "</form></p></center>";
+    if ($format == "plain") {
+        $output  = "<center><p align=\"center\" class=\"coursesearchbox\">";
+        $output .= "<form name=\"coursesearch\" action=\"$CFG->wwwroot/course/search.php\" method=\"get\">";
+        $output .= "<input type=\"text\" size=30 name=\"search\" value=\"$value\">";
+        $output .= "<input type=\"submit\" value=\"$strsearchcourses\">";
+        $output .= "</form></p></center>";
+    } else if ($format == "navbar") {
+        $output = "<table border=0 cellpadding=0 cellspacing=0><tr><td nowrap>";
+        $output .= "<form name=\"coursesearch\" action=\"$CFG->wwwroot/course/search.php\" method=\"get\">";
+        $output .= "<input type=\"text\" size=20 name=\"search\" value=\"$value\">";
+        $output .= "<input type=\"submit\" value=\"$strsearchcourses\">";
+        $output .= "<input name=id type=hidden value=\"$course->id\">";
+        $output .= "</form>";
+        $output .= "</td></tr></table>";
+    }
+
+    if ($return) {
+        return $output;
+    }
+    echo $output;
 }
 
 /// MODULE FUNCTIONS /////////////////////////////////////////////////////////////////
index 2ceba51239f74e161f887372d16254a31a71c43b..b60cd5f6ac321bee93450e865427d605af7ed791 100644 (file)
 
     $search = trim(strip_tags($search));
 
+    if ($search) {
+        $searchterms = explode(" ", $search);    // Search for words independently
+        foreach ($searchterms as $key => $searchterm) {
+            if (strlen($searchterm) < 2) {
+                unset($searchterms[$key]);
+            }
+        }
+        $search = trim(implode(" ", $searchterms));
+    }
+
     $site = get_site();
 
     if (empty($THEME->custompix)) {
     if (!$search) {
         print_header("$site->fullname : $strsearch", $site->fullname, 
                      "<a href=\"index.php\">$strcourses</a> -> $strsearch", "", "");
-        print_course_search();
+        print_simple_box_start("center");
+        echo "<center>";
+        echo "<br />";
+        print_course_search("", false, "plain");
+        echo "<br /><p>";
+        print_string("searchhelp");
+        echo "</p>";
+        echo "</center>";
+        print_simple_box_end();
         print_footer();
         exit;
     }
 
+    $searchform = print_course_search($search, true, "navbar");
+
     print_header("$site->fullname : $strsearchresults", $site->fullname, 
-                 "<a href=\"index.php\">$strcourses</a> -> $strsearchresults -> '$search'", "", "");
+                 "<a href=\"index.php\">$strcourses</a> -> <a href=\"search.php\">$strsearch</a> -> '$search'", "", "", "", $searchform);
 
-    print_heading("$strsearchresults");
 
     $lastcategory = -1;
-    if ($courses = get_courses_search($search, "category ASC, sortorder DESC", $page*$perpage, $perpage)) {
+    if ($courses = get_courses_search($searchterms, "fullname ASC", 
+                                      $page*$perpage, $perpage, $totalcount)) {
+
+        print_heading("$strsearchresults: $totalcount");
+
+        echo "<center>";
+        print_paging_bar($totalcount, $page, $perpage, "search.php?search=$search&perpage=$perpage&");
+        echo "</center>";
+
         foreach ($courses as $course) {
-            if ($course->category != $lastcategory) {
-                $lastcategory = $course->category;
-                echo "<br /><p align=\"center\">";
-                echo "<a href=\"category.php?id=$course->category\">";
-                echo $displaylist[$course->category];
-                echo "</a></p>";
-            }
             $course->fullname = highlight("$search", $course->fullname);
             $course->summary = highlight("$search", $course->summary);
+            $course->summary .= "<br /><p align=\"right\">";
+            $course->summary .= "$strcategory: <a href=\"category.php?id=$course->category\">";
+            $course->summary .= $displaylist[$course->category];
+            $course->summary .= "</a></p>";
             print_course($course);
             print_spacer(5,5);
         }
 
-        if (count($courses) == $perpage) {
-            $options = array();
-            $options["search"] = $search;
-            $options["page"] = $page+1;
-            $options["perpage"] = $perpage;
-            echo "<center>";
-            echo "<br />";
-            print_single_button("search.php", $options, get_string("findmorecourses"));
-            echo "</center>";
-        } else {
-            print_heading(get_string("nomorecourses", "", $search));
-        }
+        echo "<center>";
+        print_paging_bar($totalcount, $page, $perpage, "search.php?search=$search&perpage=$perpage&");
+        echo "</center>";
+
     } else {
         print_heading(get_string("nocoursesfound", "", $search));
     }
index 324e775066f6dc7c5efd0265fd0e5b0f8b1ac94e..d0fb17d1731c8d56aac3967553b100a42efeaa35 100644 (file)
@@ -1144,7 +1144,7 @@ function get_my_courses($userid, $sort="c.fullname ASC") {
 }
 
 
-function get_courses_search($search, $sort="fullname ASC", $page=0, $recordsperpage=50) {
+function get_courses_search($searchterms, $sort="fullname ASC", $page=0, $recordsperpage=50, &$totalcount) {
 /// Returns a list of courses that match a search
 
     global $CFG;
@@ -1162,39 +1162,55 @@ function get_courses_search($search, $sort="fullname ASC", $page=0, $recordsperp
 
     //to allow caseinsensitive search for postgesql
     if ($CFG->dbtype == "postgres7") {
-       $LIKE = "ILIKE";
+        $LIKE = "ILIKE";
+        $NOTLIKE = "NOT ILIKE";   // case-insensitive
+        $REGEXP = "~*";
+        $NOTREGEXP = "!~*";
     } else {
-       $LIKE = "LIKE";
+        $LIKE = "LIKE";
+        $NOTLIKE = "NOT LIKE";
+        $REGEXP = "REGEXP";
+        $NOTREGEXP = "NOT REGEXP";
     }
 
     $fullnamesearch = "";
     $summarysearch = "";
 
-    $searchterms = explode(" ", $search);     // Search for words independently
-
     foreach ($searchterms as $searchterm) {
         if ($fullnamesearch) {
             $fullnamesearch .= " AND ";
         }
-        $fullnamesearch .= " fullname $LIKE '%$searchterm%' ";
-
         if ($summarysearch) {
             $summarysearch .= " AND ";
         }
-        $summarysearch .= " summary $LIKE '%$searchterm%' ";
+
+        if (substr($searchterm,0,1) == "+") {
+            $searchterm = substr($searchterm,1);
+            $summarysearch .= " summary $REGEXP '(^|[^a-zA-Z0-9])$searchterm([^a-zA-Z0-9]|$)' ";
+            $fullnamesearch .= " fullname $REGEXP '(^|[^a-zA-Z0-9])$searchterm([^a-zA-Z0-9]|$)' ";
+        } else if (substr($searchterm,0,1) == "-") {
+            $searchterm = substr($searchterm,1);
+            $summarysearch .= " summary $NOTREGEXP '(^|[^a-zA-Z0-9])$searchterm([^a-zA-Z0-9]|$)' ";
+            $fullnamesearch .= " fullname $NOTREGEXP '(^|[^a-zA-Z0-9])$searchterm([^a-zA-Z0-9]|$)' ";
+        } else {
+            $summarysearch .= " summary $LIKE '%$searchterm%' ";
+            $fullnamesearch .= " fullname $LIKE '%$searchterm%' ";
+        }
+
     }
 
+    $selectsql = "{$CFG->prefix}course WHERE ($fullnamesearch OR $summarysearch)";
+
+    $totalcount = count_records_sql("SELECT COUNT(*) FROM $selectsql");
 
-    $courses = get_records_sql("SELECT * 
-                                  FROM {$CFG->prefix}course
-                                 WHERE ($fullnamesearch OR $summarysearch)
-                              ORDER BY $sort $limit");
+    $courses = get_records_sql("SELECT * FROM $selectsql ORDER BY $sort $limit"); 
 
     if ($courses) {  /// Remove unavailable courses from the list
         foreach ($courses as $key => $course) {
             if (!$course->visible) {
                 if (!isteacher($course->id)) {
                     unset($courses[$key]);
+                    $totalcount--;
                 }
             }
         }