* @link http://status.net/
*/
-if (!defined('STATUSNET'))
-{
- exit(1);
-}
-
-require_once INSTALLDIR . '/lib/publicgroupnav.php';
+if (!defined('GNUSOCIAL')) { exit(1); }
/**
* User directory
* @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
*/
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
);
function getInstructions()
{
// TRANS: %%site.name%% is the name of the StatusNet site.
- return _(
- '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.'
);
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');
$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();
}
/**
{
$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();
$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,
$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');
{
$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');
$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;
*
* @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';
}
'p',
'error',
sprintf(
+ // TRANS: Empty list message for user directory.
_m('No users starting with %s'),
$this->filter
)
);
} else {
- $this->element('p', 'error', _('No results.'));
- $message = _m(<<<E_O_T
-* Make sure all words are spelled correctly.
+ // 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.
-E_O_T
-);
+* Try fewer keywords.");
+ $message .= "\n";
+
$this->elementStart('div', 'help instructions');
$this->raw(common_markup_to_html($message));
$this->elementEnd('div');
}
}
-
}