if (!defined('LACONICA')) { exit(1); }
require_once(INSTALLDIR.'/lib/searchaction.php');
-define(PROFILES_PER_PAGE, 10);
+define('PROFILES_PER_PAGE', 10);
class PeoplesearchAction extends SearchAction {
-
+
function get_instructions() {
return _('Search for people on %%site.name%% by their name, location, or interests. ' .
'Separate the terms by spaces; they must be 3 characters or more.');
function get_title() {
return _('People search');
}
-
+
function show_results($q, $page) {
-
+
$profile = new Profile();
# lcase it for comparison
$q = strtolower($q);
- $profile->whereAdd('MATCH(nickname, fullname, location, bio, homepage) ' .
+
+ if(common_config('db','type')=='mysql') {
+ $profile->whereAdd('MATCH(nickname, fullname, location, bio, homepage) ' .
'against (\''.addslashes($q).'\')');
+ } else {
+ $profile->whereAdd('textsearch @@ plainto_tsquery(\''.addslashes($q).'\')');
+ }
# Ask for an extra to see if there's more.
-
+
$profile->limit((($page-1)*PROFILES_PER_PAGE), PROFILES_PER_PAGE + 1);
$cnt = $profile->find();
} else {
common_element('p', 'error', _('No results'));
}
-
+
common_pagination($page > 1, $cnt > PROFILES_PER_PAGE,
$page, 'peoplesearch', array('q' => $q));
}
-
+
function show_profile($profile, $terms) {
common_element_start('li', array('class' => 'profile_single',
'id' => 'profile-' . $profile->id));
}
function highlight($text, $terms) {
- $pattern = '/('.implode('|',array_map('htmlspecialchars', $terms)).')/i';
+ $terms = array_map('preg_quote', array_map('htmlspecialchars', $terms));
+ $pattern = '/('.implode('|',$terms).')/i';
$result = preg_replace($pattern, '<strong>\\1</strong>', htmlspecialchars($text));
return $result;
}