X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FDirectory%2Factions%2Fuserdirectory.php;h=55ce0de42086cbc4b80e33ca2d3deeab93594f3e;hb=d6b28c64830f632bb2f4b6f3c9369b9e56ad217a;hp=6532f03c02d7637bca0e50aee0363d9829cd2150;hpb=36b331d469b6dcd1101783f21265f7be624bc58f;p=quix0rs-gnu-social.git diff --git a/plugins/Directory/actions/userdirectory.php b/plugins/Directory/actions/userdirectory.php index 6532f03c02..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,21 +82,26 @@ 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) { + // TRANS: Page title for user directory. %d is a page number. return(sprintf(_m('User Directory, page %d'), $this->page)); } + // TRANS: Page title for user directory. return _m('User directory'); } else if ($this->page == 1) { return sprintf( + // TRANS: Page title for user directory. %s is the applied filter. _m('User directory - %s'), strtoupper($this->filter) ); } else { return sprintf( - _m('User directory - %s, page %d'), + // 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 ); @@ -116,8 +116,7 @@ class UserdirectoryAction extends Action function getInstructions() { // TRANS: %%site.name%% is the name of the StatusNet site. - return _m( - 'Search for people on %%site.name%% by their name, ' + 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.' ); @@ -128,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'); @@ -151,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(); } /** @@ -199,7 +172,7 @@ class UserdirectoryAction extends Action { $this->showForm(); - $this->elementStart('div', array('id' => 'user_directory')); + $this->elementStart('div', array('id' => 'profile_directory')); $alphaNav = new AlphaNav($this, false, false, array('0-9', 'All')); $alphaNav->show(); @@ -226,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, @@ -256,12 +236,15 @@ class UserdirectoryAction extends Action $this->elementStart('fieldset'); + // TRANS: Fieldset legend. $this->element('legend', null, _m('Search site')); $this->elementStart('ul', 'form_data'); $this->elementStart('li'); + // 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'); @@ -277,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'); @@ -305,34 +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'; - switch($this->filter) - { + switch ($this->filter) { case 'all': // NOOP break; case '0-9': - $sql .= - ' AND LEFT(profile.nickname, 1) BETWEEN \'0\' AND \'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: - $sql .= sprintf( - ' AND LEFT(LOWER(profile.nickname), 1) = \'%s\'', - $this->filter - ); + $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'; } @@ -367,23 +350,24 @@ class UserdirectoryAction extends Action '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.')); - $message = _m(<<elementStart('div', 'help instructions'); $this->raw(common_markup_to_html($message)); $this->elementEnd('div'); } } - }