* PHP version 5
*
* @category Action
- * @package Laconica
- * @author Evan Prodromou <evan@controlyourself.ca>
- * @author Robin Millette <millette@controlyourself.ca>
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @author Robin Millette <millette@status.net>
* @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
- * @link http://laconi.ca/
+ * @link http://status.net/
*
- * Laconica - a distributed open-source microblogging tool
- * Copyright (C) 2008, Controlez-Vous, Inc.
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2008, 2009, StatusNet, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-if (!defined('LACONICA')) {
+if (!defined('STATUSNET') && !defined('LACONICA')) {
exit(1);
}
* People search action class.
*
* @category Action
- * @package Laconica
- * @author Evan Prodromou <evan@controlyourself.ca>
- * @author Robin Millette <millette@controlyourself.ca>
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @author Robin Millette <millette@status.net>
* @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
- * @link http://laconi.ca/
+ * @link http://status.net/
*/
class PeoplesearchAction extends SearchAction
{
} else {
$this->element('p', 'error', _('No results.'));
+ $this->searchSuggestions($q);
+ $profile->free();
+ }
+ }
+
+ function showScripts()
+ {
+ parent::showScripts();
+ $this->autofocus('q');
+ }
+}
+
+/**
+ * People search results class
+ *
+ * Derivative of ProfileList with specialization for highlighting search terms.
+ *
+ * @category Widget
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @author Robin Millette <millette@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
+ * @link http://status.net/
+ *
+ * @see PeoplesearchAction
+ */
- $qe = urlencode($q);
- $message = _(<<<E_O_T
-* Make sure all words are spelled correctly.
-* Try different keywords.
-* Try more general keywords.
-* Try fewer keywords.
+class PeopleSearchResults extends ProfileList
+{
+ var $terms = null;
+ var $pattern = null;
-You can also try your search on other engines:
+ function __construct($profile, $terms, $action)
+ {
+ parent::__construct($profile, $action);
-* [Twingly](http://www.twingly.com/search?q=$qe&content=microblog&site=identi.ca)
-* [Tweet scan](http://www.tweetscan.com/indexi.php?s=$qe)
-* [Google](http://www.google.com/search?q=site%3Aidenti.ca+$qe)
-* [Yahoo](http://search.yahoo.com/search?p=site%3Aidenti.ca+$qe)
+ $this->terms = array_map('preg_quote',
+ array_map('htmlspecialchars', $terms));
-E_O_T
-);
- $this->elementStart('div', 'blankfiller');
- $this->raw(common_markup_to_html($message));
- $this->elementEnd('div');
- $profile->free();
- }
+ $this->pattern = '/('.implode('|',$terms).')/i';
+ }
+
+ function newProfileItem($profile)
+ {
+ return new PeopleSearchResultItem($profile, $this->action);
+ }
+}
+
+class PeopleSearchResultItem extends ProfileListItem
+{
+ function highlight($text)
+ {
+ return preg_replace($this->pattern, '<strong>\\1</strong>', htmlspecialchars($text));
}
}