+/**
+ * People search action class.
+ *
+ * @category Action
+ * @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/
+ */
+class PeoplesearchAction extends SearchAction
+{
+ function getInstructions()
+ {
+ // TRANS: Instructions for the "People search" page.
+ // TRANS: %%site.name%% is the name of the StatusNet site.
+ 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 title()
+ {
+ // TRANS: Title of a page where users can search for other users.
+ return _('People search');
+ }
+
+ function showResults($q, $page)
+ {
+ $profile = new Profile();
+ $search_engine = $profile->getSearchEngine('profile');
+ $search_engine->set_sort_mode('chron');
+ // Ask for an extra to see if there's more.
+ $search_engine->limit((($page-1)*PROFILES_PER_PAGE), PROFILES_PER_PAGE + 1);
+ if (false === $search_engine->query($q)) {
+ $cnt = 0;
+ }
+ else {
+ $cnt = $profile->find();
+ }
+ if ($cnt > 0) {
+ $terms = preg_split('/[\s,]+/', $q);
+ $results = new PeopleSearchResults($profile, $terms, $this);
+ $results->show();
+ $profile->free();
+ $this->pagination($page > 1, $cnt > PROFILES_PER_PAGE,
+ $page, 'peoplesearch', array('q' => $q));
+
+ } else {
+ // TRANS: Message on the "People search" page where a query has no results.
+ $this->element('p', 'error', _('No results.'));
+ $this->searchSuggestions($q);
+ $profile->free();
+ }
+ }
+
+ function showScripts()
+ {
+ parent::showScripts();
+ $this->autofocus('q');
+ }
+}