X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FDirectory%2Factions%2Fuserdirectory.php;h=55ce0de42086cbc4b80e33ca2d3deeab93594f3e;hb=e2d85a39e7f82ceef2cb2fe66a3a9a62ac9a363e;hp=005fb787d35a6ed096f7b9c5a8bd3ccf89b34e23;hpb=1256181d364f873c3e76a704349aa7c20e32237b;p=quix0rs-gnu-social.git diff --git a/plugins/Directory/actions/userdirectory.php b/plugins/Directory/actions/userdirectory.php index 005fb787d3..55ce0de420 100644 --- a/plugins/Directory/actions/userdirectory.php +++ b/plugins/Directory/actions/userdirectory.php @@ -27,12 +27,7 @@ * @link http://status.net/ */ -if (!defined('STATUSNET')) -{ - exit(1); -} - -require_once INSTALLDIR . '/lib/publicgroupnav.php'; +if (!defined('GNUSOCIAL')) { exit(1); } /** * User directory @@ -43,7 +38,7 @@ require_once INSTALLDIR . '/lib/publicgroupnav.php'; * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link http://status.net/ */ -class UserdirectoryAction extends Action +class UserdirectoryAction extends ManagedAction { /** * The page we're on @@ -87,24 +82,27 @@ class UserdirectoryAction extends Action */ function title() { - // @fixme: This looks kinda gross + // @todo fixme: This looks kinda gross if ($this->filter == 'all') { if ($this->page != 1) { - return(sprintf(_m('All users, page %d'), $this->page)); + // TRANS: Page title for user directory. %d is a page number. + return(sprintf(_m('User Directory, page %d'), $this->page)); } - return _m('All users'); - } - - if ($this->page == 1) { + // TRANS: Page title for user directory. + return _m('User directory'); + } else if ($this->page == 1) { return sprintf( - _m('Users with nicknames beginning with %s'), - $this->filter + // TRANS: Page title for user directory. %s is the applied filter. + _m('User directory - %s'), + strtoupper($this->filter) ); } else { return sprintf( - _m('Users with nicknames starting with %s, page %d'), - $this->filter, + // TRANS: Page title for user directory. + // TRANS: %1$s is the applied filter, %2$d is a page number. + _m('User directory - %1$s, page %2$d'), + strtoupper($this->filter), $this->page ); } @@ -117,7 +115,11 @@ class UserdirectoryAction extends Action */ function getInstructions() { - return _('User directory'); + // TRANS: %%site.name%% is the name of the StatusNet site. + return _m('Search for people on %%site.name%% by their name, ' + . 'location, or interests. Separate the terms by spaces; ' + . ' they must be 3 characters or more.' + ); } /** @@ -125,22 +127,13 @@ class UserdirectoryAction extends Action * * @return boolean true */ - function isReadOnly($args) + function isReadOnly(array $args=array()) { return true; } - /** - * Take arguments for running - * - * @param array $args $_REQUEST args - * - * @return boolean success flag - */ - function prepare($args) + protected function doPreparation() { - parent::prepare($args); - $this->page = ($this->arg('page')) ? ($this->arg('page') + 0) : 1; $this->filter = $this->arg('filter', 'all'); $this->reverse = $this->boolean('reverse'); @@ -148,23 +141,6 @@ class UserdirectoryAction extends Action $this->sort = $this->arg('sort', 'nickname'); common_set_returnto($this->selfUrl()); - - return true; - } - - /** - * Handle request - * - * Shows the page - * - * @param array $args $_REQUEST args; handled in prepare() - * - * @return void - */ - function handle($args) - { - parent::handle($args); - $this->showPage(); } /** @@ -184,18 +160,6 @@ class UserdirectoryAction extends Action $this->elementEnd('div'); } - /** - * Local navigation - * - * This page is part of the public group, so show that. - * - * @return void - */ - function showLocalNav() - { - $nav = new PublicGroupNav($this); - $nav->show(); - } /** * Content area @@ -208,9 +172,9 @@ class UserdirectoryAction extends Action { $this->showForm(); - $this->elementStart('div', array('id' => 'user_directory')); + $this->elementStart('div', array('id' => 'profile_directory')); - $alphaNav = new AlphaNav($this, true, array('All')); + $alphaNav = new AlphaNav($this, false, false, array('0-9', 'All')); $alphaNav->show(); $profile = null; @@ -235,9 +199,16 @@ class UserdirectoryAction extends Action $args = array(); if (isset($this->q)) { $args['q'] = $this->q; - } else { + } elseif (isset($this->filter) && $this->filter != 'all') { $args['filter'] = $this->filter; } + + if (isset($this->sort)) { + $args['sort'] = $this->sort; + } + if (!empty($this->reverse)) { + $args['reverse'] = $this->reverse; + } $this->pagination( $this->page > 1, @@ -265,12 +236,15 @@ class UserdirectoryAction extends Action $this->elementStart('fieldset'); - $this->element('legend', null, _('Search site')); + // TRANS: Fieldset legend. + $this->element('legend', null, _m('Search site')); $this->elementStart('ul', 'form_data'); $this->elementStart('li'); - $this->input('q', _('Keyword(s)'), $this->q); + // TRANS: Field label for user directory filter. + $this->input('q', _m('Keyword(s)'), $this->q); + // TRANS: Button text. $this->submit('search', _m('BUTTON','Search')); $this->elementEnd('li'); $this->elementEnd('ul'); @@ -286,10 +260,13 @@ class UserdirectoryAction extends Action { $profile = new Profile(); + // Comment this out or disable to get global profile searches + $profile->joinAdd(array('id', 'user:id')); + $offset = ($this->page - 1) * PROFILES_PER_PAGE; $limit = PROFILES_PER_PAGE + 1; - if (isset($this->q)) { + if (!empty($this->q)) { // User is searching via query $search_engine = $profile->getSearchEngine('profile'); @@ -314,25 +291,34 @@ class UserdirectoryAction extends Action $profile->find(); } else { // User is browsing via AlphaNav - $sort = $this->getSortKey(); - $sql = 'SELECT profile.* FROM profile, user WHERE profile.id = user.id'; - if ($this->filter != 'all') { - $sql .= sprintf( - ' AND LEFT(LOWER(profile.nickname), 1) = \'%s\'', - $this->filter - ); + switch ($this->filter) { + case 'all': + // NOOP + break; + case '0-9': + $profile->whereAdd(sprintf('LEFT(%1$s.%2$s, 1) BETWEEN %3$s AND %4$s', + $profile->escapedTableName(), + 'nickname', + $profile->_quote("0"), + $profile->_quote("9"))); + break; + default: + $profile->whereAdd(sprintf('LEFT(LOWER(%1$s.%2$s), 1) = %3$s', + $profile->escapedTableName(), + 'nickname', + $profile->_quote($this->filter))); } - $sql .= sprintf( - ' ORDER BY profile.%s %s, profile.nickname ASC LIMIT %d, %d', - $sort, - $this->reverse ? 'DESC' : 'ASC', - $offset, - $limit - ); + $order = sprintf('%1$s.%2$s %3$s, %1$s.%4$s ASC', + $profile->escapedTableName(), + $this->getSortKey('nickname'), + $this->reverse ? 'DESC' : 'ASC', + 'nickname'); + $profile->orderBy($order); + $profile->limit($offset, $limit); - $profile->query($sql); + $profile->find(); } return $profile; @@ -343,15 +329,12 @@ class UserdirectoryAction extends Action * * @return string a column name for sorting */ - function getSortKey() + function getSortKey($def='nickname') { switch ($this->sort) { case 'nickname': - return $this->sort; - break; case 'created': return $this->sort; - break; default: return 'nickname'; } @@ -362,11 +345,29 @@ class UserdirectoryAction extends Action */ function showEmptyListMessage() { - $message = sprintf(_m('No users starting with **%s**'), $this->filter); - - $this->elementStart('div', 'guide'); - $this->raw(common_markup_to_html($message)); - $this->elementEnd('div'); + if (!empty($this->filter) && ($this->filter != 'all')) { + $this->element( + 'p', + 'error', + sprintf( + // TRANS: Empty list message for user directory. + _m('No users starting with %s'), + $this->filter + ) + ); + } else { + // TRANS: Empty list message for user directory. + $this->element('p', 'error', _m('No results.')); + // TRANS: Standard search suggestions shown when a search does not give any results. + $message = _m("* Make sure all words are spelled correctly. +* Try different keywords. +* Try more general keywords. +* Try fewer keywords."); + $message .= "\n"; + + $this->elementStart('div', 'help instructions'); + $this->raw(common_markup_to_html($message)); + $this->elementEnd('div'); + } } - }