]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - actions/peoplesearch.php
trac685 Twitter bridge - Shell script to sync all users' Twitter friends
[quix0rs-gnu-social.git] / actions / peoplesearch.php
index 045d99e39ac41f9e9adc2f691b1ac0497083c08c..4e0ec3f0c41d3db8baf61156908096e600222a4e 100644 (file)
 
 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) ' . 
+
+               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();
@@ -104,13 +66,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 +106,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 +120,9 @@ class PeoplesearchAction extends Action {
        }
 
        function highlight($text, $terms) {
-               $pattern = '/('.implode('|',array_map('htmlspecialchars', $terms)).')/i';
-               $result = preg_replace($pattern, '<strong>\\1</strong>', $text);
+               $terms = array_map('preg_quote', array_map('htmlspecialchars', $terms));
+               $pattern = '/('.implode('|',$terms).')/i';
+               $result = preg_replace($pattern, '<strong>\\1</strong>', htmlspecialchars($text));
                return $result;
        }
 }