From 63d99fcb1df04443ad14fe019f0f757b8d6a9b7f Mon Sep 17 00:00:00 2001 From: moodler Date: Thu, 14 Aug 2003 06:34:56 +0000 Subject: [PATCH] Added (default) option to search for whole words with forums. (SQL regular expressions from David Delgado - thanks!) --- mod/forum/lib.php | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/mod/forum/lib.php b/mod/forum/lib.php index 4528ba341f..9a866850ba 100644 --- a/mod/forum/lib.php +++ b/mod/forum/lib.php @@ -474,7 +474,7 @@ function forum_get_child_posts($parent) { } -function forum_search_posts($search, $courseid, $page=0, $recordsperpage=50) { +function forum_search_posts($search, $courseid, $page=0, $recordsperpage=50, $wholewords=true) { /// Returns a list of posts that were found global $CFG; @@ -495,11 +495,13 @@ function forum_search_posts($search, $courseid, $page=0, $recordsperpage=50) { $limit = "LIMIT $recordsperpage,$page"; } - //to allow caseinsensitive search for postgesql - if($CFG->dbtype == "postgres7") { - $LIKE = "ILIKE"; + /// Some differences in syntax for PostgreSQL + if ($CFG->dbtype == "postgres7") { + $LIKE = "ILIKE"; // case-insensitive + $REGEXP = "~"; } else { $LIKE = "LIKE"; + $REGEXP = "REGEXP"; } $messagesearch = ""; @@ -511,12 +513,17 @@ function forum_search_posts($search, $courseid, $page=0, $recordsperpage=50) { if ($messagesearch) { $messagesearch .= " AND "; } - $messagesearch .= " p.message $LIKE '%$searchterm%' "; - if ($subjectsearch) { $subjectsearch .= " AND "; } - $subjectsearch .= " p.subject $LIKE '%$searchterm%' "; + + if ($wholewords) { + $messagesearch .= " p.message $REGEXP '(^|[^a-zA-Z0-9])$searchterm([^a-zA-Z0-9]|$)' "; + $subjectsearch .= " p.subject $REGEXP '(^|[^a-zA-Z0-9])$searchterm([^a-zA-Z0-9]|$)' "; + } else { + $messagesearch .= " p.message $LIKE '%$searchterm%' "; + $subjectsearch .= " p.subject $LIKE '%$searchterm%' "; + } } @@ -534,6 +541,7 @@ function forum_search_posts($search, $courseid, $page=0, $recordsperpage=50) { ORDER BY p.modified DESC $limit"); } + function forum_get_ratings($postid, $sort="u.firstname ASC") { /// Returns a list of ratings for a particular post - sorted. global $CFG; -- 2.39.5