UserdirectoryAction now ManagedAction and better SQL

This commit is contained in:
Mikael Nordfeldth 2015-02-18 13:37:06 +01:00
parent d445e0c877
commit 4ad7e8f459
1 changed files with 26 additions and 57 deletions

View File

@ -27,12 +27,7 @@
* @link http://status.net/ * @link http://status.net/
*/ */
if (!defined('STATUSNET')) if (!defined('GNUSOCIAL')) { exit(1); }
{
exit(1);
}
require_once INSTALLDIR . '/lib/publicgroupnav.php';
/** /**
* User directory * 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 * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/ * @link http://status.net/
*/ */
class UserdirectoryAction extends Action class UserdirectoryAction extends ManagedAction
{ {
/** /**
* The page we're on * The page we're on
@ -137,17 +132,8 @@ class UserdirectoryAction extends Action
return true; return true;
} }
/** protected function doPreparation()
* Take arguments for running
*
* @param array $args $_REQUEST args
*
* @return boolean success flag
*/
function prepare($args)
{ {
parent::prepare($args);
$this->page = ($this->arg('page')) ? ($this->arg('page') + 0) : 1; $this->page = ($this->arg('page')) ? ($this->arg('page') + 0) : 1;
$this->filter = $this->arg('filter', 'all'); $this->filter = $this->arg('filter', 'all');
$this->reverse = $this->boolean('reverse'); $this->reverse = $this->boolean('reverse');
@ -155,23 +141,6 @@ class UserdirectoryAction extends Action
$this->sort = $this->arg('sort', 'nickname'); $this->sort = $this->arg('sort', 'nickname');
common_set_returnto($this->selfUrl()); 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();
} }
/** /**
@ -291,10 +260,13 @@ class UserdirectoryAction extends Action
{ {
$profile = new Profile(); $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; $offset = ($this->page - 1) * PROFILES_PER_PAGE;
$limit = PROFILES_PER_PAGE + 1; $limit = PROFILES_PER_PAGE + 1;
if (isset($this->q)) { if (!empty($this->q)) {
// User is searching via query // User is searching via query
$search_engine = $profile->getSearchEngine('profile'); $search_engine = $profile->getSearchEngine('profile');
@ -319,34 +291,34 @@ class UserdirectoryAction extends Action
$profile->find(); $profile->find();
} else { } else {
// User is browsing via AlphaNav // 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': case 'all':
// NOOP // NOOP
break; break;
case '0-9': case '0-9':
$sql .= $profile->whereAdd(sprintf('LEFT(%1$s.%2$s, 1) BETWEEN %3$s AND %4$s',
' AND LEFT(profile.nickname, 1) BETWEEN \'0\' AND \'9\''; $profile->escapedTableName(),
'nickname',
$profile->_quote("0"),
$profile->_quote("9")));
break; break;
default: default:
$sql .= sprintf( $profile->whereAdd(sprintf('LEFT(LOWER(%1$s.%2$s), 1) = %3$s',
' AND LEFT(LOWER(profile.nickname), 1) = \'%s\'', $profile->escapedTableName(),
$this->filter 'nickname',
); $profile->_quote($this->filter)));
} }
$sql .= sprintf( $order = sprintf('%1$s.%2$s %3$s, %1$s.%4$s ASC',
' ORDER BY profile.%s %s, profile.nickname ASC LIMIT %d, %d', $profile->escapedTableName(),
$sort, $this->getSortKey('nickname'),
$this->reverse ? 'DESC' : 'ASC', $this->reverse ? 'DESC' : 'ASC',
$offset, 'nickname');
$limit $profile->orderBy($order);
); $profile->limit($offset, $limit);
$profile->query($sql); $profile->find();
} }
return $profile; return $profile;
@ -357,15 +329,12 @@ class UserdirectoryAction extends Action
* *
* @return string a column name for sorting * @return string a column name for sorting
*/ */
function getSortKey() function getSortKey($def='nickname')
{ {
switch ($this->sort) { switch ($this->sort) {
case 'nickname': case 'nickname':
return $this->sort;
break;
case 'created': case 'created':
return $this->sort; return $this->sort;
break;
default: default:
return 'nickname'; return 'nickname';
} }