}
-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 /////////////////////////////////////////////////////////////////
$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));
}
}
-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;
//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--;
}
}
}