X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=actions%2Fpeoplesearch.php;h=adacc095440c8f0e2d23c255350ecf14de21604b;hb=0bba990e2f4506da877224285442c81f68662743;hp=045d99e39ac41f9e9adc2f691b1ac0497083c08c;hpb=09e1b247f9e32b79fc10e6fb6f9340bcf556df41;p=quix0rs-gnu-social.git
diff --git a/actions/peoplesearch.php b/actions/peoplesearch.php
index 045d99e39a..adacc09544 100644
--- a/actions/peoplesearch.php
+++ b/actions/peoplesearch.php
@@ -19,74 +19,31 @@
if (!defined('LACONICA')) { exit(1); }
-define(PROFILES_PER_PAGE, 10);
+require_once(INSTALLDIR.'/lib/searchaction.php');
+define('PROFILES_PER_PAGE', 10);
-# XXX common parent for people and content search?
-
-class PeoplesearchAction extends Action {
-
- function handle($args) {
- parent::handle($args);
- $this->show_form();
- }
+class PeoplesearchAction extends SearchAction {
function get_instructions() {
- return _t('Search for people on %%site.name%% by their name, location, or interests. ' .
+ 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 show_top($error=NULL) {
- if ($error) {
- common_element('p', 'error', $error);
- } else {
- $instr = $this->get_instructions();
- $output = common_markup_to_html($instr);
- common_element_start('div', 'instructions');
- common_raw($output);
- common_element_end('div');
- }
- }
-
- function show_form($error=NULL) {
- $q = $this->trimmed('q');
- $page = $this->trimmed('page', 1);
-
- common_show_header(_t('Find people'), NULL, $error, array($this, 'show_top'));
- common_element_start('form', array('method' => 'post',
- 'id' => 'login',
- 'action' => common_local_url('peoplesearch')));
- common_element_start('p');
- common_element('input', array('name' => 'q',
- 'id' => 'q',
- 'type' => 'text',
- 'class' => 'input_text',
- 'value' => ($q) ? $q : ''));
- common_text(' ');
- common_element('input', array('type' => 'submit',
- 'id' => 'search',
- 'name' => 'search',
- 'class' => 'submit',
- 'value' => _t('Search')));
-
- common_element_end('p');
- common_element_end('form');
- if ($q) {
- $this->show_results($q, $page);
- }
- common_show_footer();
+
+ 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) ' .
+ $profile->whereAdd('MATCH(nickname, fullname, location, bio, homepage) ' .
'against (\''.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();
@@ -104,13 +61,13 @@ class PeoplesearchAction extends Action {
}
common_element_end('ul');
} else {
- common_element('p', 'error', _t('No results'));
+ 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));
@@ -144,8 +101,9 @@ class PeoplesearchAction extends Action {
common_element_end('p');
if ($profile->homepage) {
common_element_start('p', 'website');
- common_element('a', array('href' => $profile->homepage),
- $this->highlight($profile->homepage));
+ common_element_start('a', array('href' => $profile->homepage));
+ common_raw($this->highlight($profile->homepage, $terms));
+ common_element_end('a');
common_element_end('p');
}
if ($profile->bio) {
@@ -157,8 +115,9 @@ class PeoplesearchAction extends Action {
}
function highlight($text, $terms) {
- $pattern = '/('.implode('|',array_map('htmlspecialchars', $terms)).')/i';
- $result = preg_replace($pattern, '\\1', $text);
+ $terms = array_map('preg_quote', array_map('htmlspecialchars', $terms));
+ $pattern = '/('.implode('|',$terms).')/i';
+ $result = preg_replace($pattern, '\\1', htmlspecialchars($text));
return $result;
}
}