diff --git a/lang/en/message.php b/lang/en/message.php
index 9f7a5dcf7b5..d35daecbb32 100644
--- a/lang/en/message.php
+++ b/lang/en/message.php
@@ -57,6 +57,7 @@ $string['includeblockedusers'] = 'Include blocked users';
$string['incomingcontacts'] = 'Incoming contacts ({$a})';
$string['keywords'] = 'Keywords';
$string['keywordssearchresults'] = 'Search results: {$a} messages found';
+$string['keywordssearchresultstoomany'] = 'Search results: More than {$a} messages found. Refine your search.';
$string['loggedin'] = 'Online';
$string['loggedoff'] = 'Not online';
$string['managecontacts'] = 'Manage my contacts';
diff --git a/message/lib.php b/message/lib.php
index a4973e6d4b5..cd0b63856f2 100644
--- a/message/lib.php
+++ b/message/lib.php
@@ -53,6 +53,8 @@ define('VIEW_COURSE','course_');
define('SHOW_ACTION_LINKS_IN_CONTACT_LIST', false);
+define('MESSAGE_SEARCH_MAX_RESULTS', 200);
+
if (!isset($CFG->message_contacts_refresh)) { // Refresh the contacts list every 60 seconds
$CFG->message_contacts_refresh = 60;
}
@@ -673,7 +675,10 @@ function message_print_search_results($frm, $showicontext=false, $user1=null) {
}
if (!empty($users)) {
- echo ''.get_string('userssearchresults', 'message', count($users)).'';
+ echo html_writer::start_tag('p', array('class'=>'heading searchresultcount'));
+ echo get_string('userssearchresults', 'message', count($users));
+ echo html_writer::end_tag('p');
+
echo '
';
foreach ($users as $user) {
@@ -726,7 +731,9 @@ function message_print_search_results($frm, $showicontext=false, $user1=null) {
echo '
';
} else {
+ echo html_writer::start_tag('p', array('class'=>'heading searchresultcount'));
echo get_string('userssearchresults', 'message', 0).'
';
+ echo html_writer::end_tag('p');
}
}
@@ -785,15 +792,25 @@ function message_print_search_results($frm, $showicontext=false, $user1=null) {
}
/// print heading with number of results
- echo ''.get_string('keywordssearchresults', 'message', count($messages)).' ("'.s($messagesearchstring).'")
';
+ echo html_writer::start_tag('p', array('class'=>'heading searchresultcount'));
+ $countresults = count($messages);
+ if ($countresults==MESSAGE_SEARCH_MAX_RESULTS) {
+ echo get_string('keywordssearchresultstoomany', 'message', $countresults).' ("'.s($messagesearchstring).'")';
+ } else {
+ echo get_string('keywordssearchresults', 'message', $countresults).' ("'.s($messagesearchstring).'")';
+ }
+ echo html_writer::end_tag('p');
/// print table headings
echo '';
+
+ $headertdstart = html_writer::start_tag('td', array('class'=>'messagesearchresultscol'));
+ $headertdend = html_writer::end_tag('td');
echo '';
- echo '| '.get_string('from').' | ';
- echo ''.get_string('to').' | ';
- echo ''.get_string('message', 'message').' | ';
- echo ''.get_string('timesent', 'message').' | ';
+ echo $headertdstart.get_string('from').$headertdend;
+ echo $headertdstart.get_string('to').$headertdend;
+ echo $headertdstart.get_string('message', 'message').$headertdend;
+ echo $headertdstart.get_string('timesent', 'message').$headertdend;
echo "
\n";
$blockedcount = 0;
@@ -1149,12 +1166,21 @@ function message_search($searchterms, $fromme=true, $tome=true, $courseid='none'
$params = array();
$i = 0;
+ //preprocess search terms to check whether we have at least 1 eligible search term
+ //if we do we can drop words around it like 'a'
+ $dropshortwords = false;
+ foreach ($searchterms as $searchterm) {
+ if (strlen($searchterm) >= 2) {
+ $dropshortwords = true;
+ }
+ }
+
foreach ($searchterms as $searchterm) {
$i++;
$NOT = ''; /// Initially we aren't going to perform NOT LIKE searches, only MSSQL and Oracle
- if (strlen($searchterm) < 2) {
+ if ($dropshortwords && strlen($searchterm) < 2) {
continue;
}
/// Under Oracle and MSSQL, trim the + and - operators and perform
@@ -1203,10 +1229,10 @@ function message_search($searchterms, $fromme=true, $tome=true, $courseid='none'
if ($courseid == SITEID) { /// admin is searching all messages
$m_read = $DB->get_records_sql("SELECT m.id, m.useridto, m.useridfrom, m.fullmessage, m.timecreated
FROM {message_read} m
- WHERE $searchcond", $params);
+ WHERE $searchcond", $params, 0, MESSAGE_SEARCH_MAX_RESULTS);
$m_unread = $DB->get_records_sql("SELECT m.id, m.useridto, m.useridfrom, m.fullmessage, m.timecreated
FROM {message} m
- WHERE $searchcond", $params);
+ WHERE $searchcond", $params, 0, MESSAGE_SEARCH_MAX_RESULTS);
} else if ($courseid !== 'none') {
/// This has not been implemented due to security concerns
@@ -1231,10 +1257,10 @@ function message_search($searchterms, $fromme=true, $tome=true, $courseid='none'
$m_read = $DB->get_records_sql("SELECT m.id, m.useridto, m.useridfrom, m.fullmessage, m.timecreated
FROM {message_read} m
- WHERE $searchcond", $params);
+ WHERE $searchcond", $params, 0, MESSAGE_SEARCH_MAX_RESULTS);
$m_unread = $DB->get_records_sql("SELECT m.id, m.useridto, m.useridfrom, m.fullmessage, m.timecreated
FROM {message} m
- WHERE $searchcond", $params);
+ WHERE $searchcond", $params, 0, MESSAGE_SEARCH_MAX_RESULTS);
}