add Character name filter for Character listing (issue #316)
This commit is contained in:
parent
82b51e3d5b
commit
ebb624fb73
3 changed files with 33 additions and 21 deletions
|
|
@ -78,11 +78,13 @@
|
|||
|
||||
// Set sort order and page
|
||||
$sortorder = 'name';
|
||||
$charactername = null;
|
||||
$page = 1;
|
||||
if($this->request->getRequestMethod() == 'GET')
|
||||
{
|
||||
$sortorder = $this->request->getGetParam('sortorder');
|
||||
$sortorder = !empty($sortorder) ? $sortorder : 'name';
|
||||
$charactername = (!is_null($this->request->getGetParam('charactername'))) ? $this->request->getGetParam('charactername') : $charactername;
|
||||
$page = $this->request->getGetParam('page');
|
||||
$page = !empty($page) ? intval($page) : 1;
|
||||
}
|
||||
|
|
@ -90,8 +92,8 @@
|
|||
// Get registered Characters
|
||||
$limit = ($all != 'all') ? \nre\configs\AppConfig::$misc['lists_limit'] : null;
|
||||
$offset = ($all != 'all') ? max((intval($page) - 1), 0) * $limit : 0;
|
||||
$charactersCount = $this->Characters->getCharactersForSeminaryCount($seminary['id']);
|
||||
$characters = $this->Characters->getCharactersForSeminarySorted($seminary['id'], $sortorder, $limit, $offset);
|
||||
$charactersCount = $this->Characters->getCharactersForSeminaryCount($seminary['id'], $charactername);
|
||||
$characters = $this->Characters->getCharactersForSeminarySorted($seminary['id'], $sortorder, $charactername, $limit, $offset);
|
||||
foreach($characters as &$character)
|
||||
{
|
||||
$character['xplevel'] = $this->Xplevels->getXPLevelById($character['xplevel_id']);
|
||||
|
|
@ -114,6 +116,7 @@
|
|||
$this->set('charactersCount', $charactersCount);
|
||||
$this->set('characterfields', $characterfields);
|
||||
$this->set('sortorder', $sortorder);
|
||||
$this->set('charactername', $charactername);
|
||||
$this->set('all', $all);
|
||||
$this->set('page', $page);
|
||||
$this->set('limit', $limit);
|
||||
|
|
|
|||
|
|
@ -64,16 +64,18 @@
|
|||
* Get count of Characters for a Seminary.
|
||||
*
|
||||
* @param int $seminaryId ID of the Seminary
|
||||
* @param string $charactername Only get Characters with the given name (optional)
|
||||
* @return int Count of Characters
|
||||
*/
|
||||
public function getCharactersForSeminaryCount($seminaryId)
|
||||
public function getCharactersForSeminaryCount($seminaryId, $charactername=null)
|
||||
{
|
||||
$data = $this->db->query(
|
||||
'SELECT count(DISTINCT characters.id) AS c '.
|
||||
'FROM characters '.
|
||||
'LEFT JOIN charactertypes ON charactertypes.id = characters.charactertype_id '.
|
||||
'LEFT JOIN seminaries ON seminaries.id = charactertypes.seminary_id '.
|
||||
'WHERE seminaries.id = ?',
|
||||
'WHERE seminaries.id = ? '.
|
||||
(!is_null($charactername) ? sprintf('AND characters.name LIKE \'%%%s%%\'', $charactername) : null),
|
||||
'i',
|
||||
$seminaryId
|
||||
);
|
||||
|
|
@ -118,11 +120,12 @@
|
|||
*
|
||||
* @param int $seminaryId ID of the Seminary
|
||||
* @param string $sort Field to sort by
|
||||
* @param string $charactername Only get Characters with the given name (optional)
|
||||
* @param int $limit Limit amount of Characters (optional)
|
||||
* @param int $offset Offset (optional)
|
||||
* @return array Characters
|
||||
*/
|
||||
public function getCharactersForSeminarySorted($seminaryId, $sort, $limit=null, $offset=0)
|
||||
public function getCharactersForSeminarySorted($seminaryId, $sort, $charactername, $limit=null, $offset=0)
|
||||
{
|
||||
switch($sort)
|
||||
{
|
||||
|
|
@ -136,24 +139,25 @@
|
|||
);
|
||||
|
||||
return $this->db->query(
|
||||
'SELECT '.
|
||||
'characters.id, characters.created, characters.user_id, characters.name, characters.url, cache_characters.xps, cache_characters.quest_xps, cache_characters.avatar_id, '.
|
||||
'charactertypes.id AS charactertype_id, charactertypes.name AS charactertype_name, charactertypes.url AS charactertype_url, '.
|
||||
'xplevels.id AS xplevel_id, xplevels.level AS xplevel, '.
|
||||
'seminaries.id AS seminary_id, seminaries.url AS seminary_url, seminaries.title AS seminary_title, seminaries.url AS seminary_url '.
|
||||
'FROM characters '.
|
||||
'LEFT JOIN cache_characters ON cache_characters.character_id = characters.id '.
|
||||
'LEFT JOIN charactertypes ON charactertypes.id = characters.charactertype_id '.
|
||||
'LEFT JOIN xplevels ON xplevels.id = cache_characters.xplevel_id '.
|
||||
'LEFT JOIN seminaries ON seminaries.id = charactertypes.seminary_id '.
|
||||
'WHERE seminaries.id = ? '.
|
||||
(!is_null($charactername) ? sprintf(' AND characters.name LIKE \'%%%s%%\' ', $charactername) : null).
|
||||
sprintf(
|
||||
'SELECT '.
|
||||
'characters.id, characters.created, characters.user_id, characters.name, characters.url, cache_characters.xps, cache_characters.quest_xps, cache_characters.avatar_id, '.
|
||||
'charactertypes.id AS charactertype_id, charactertypes.name AS charactertype_name, charactertypes.url AS charactertype_url, '.
|
||||
'xplevels.id AS xplevel_id, xplevels.level AS xplevel, '.
|
||||
'seminaries.id AS seminary_id, seminaries.url AS seminary_url, seminaries.title AS seminary_title, seminaries.url AS seminary_url '.
|
||||
'FROM characters '.
|
||||
'LEFT JOIN cache_characters ON cache_characters.character_id = characters.id '.
|
||||
'LEFT JOIN charactertypes ON charactertypes.id = characters.charactertype_id '.
|
||||
'LEFT JOIN xplevels ON xplevels.id = cache_characters.xplevel_id '.
|
||||
'LEFT JOIN seminaries ON seminaries.id = charactertypes.seminary_id '.
|
||||
'WHERE seminaries.id = ? '.
|
||||
'ORDER BY %s.%s %s '.
|
||||
(!empty($limit) ? sprintf('LIMIT %d, %d', $offset, $limit) : null),
|
||||
'ORDER BY %s.%s %s ',
|
||||
($sort == 'xps' ? 'cache_characters' : 'characters'),
|
||||
$sort,
|
||||
$orders[$sort]
|
||||
),
|
||||
).
|
||||
(!empty($limit) ? sprintf('LIMIT %d, %d', $offset, $limit) : null),
|
||||
'i',
|
||||
$seminaryId
|
||||
);
|
||||
|
|
@ -173,6 +177,7 @@
|
|||
'LEFT JOIN characters_characterroles ON characters_characterroles.character_id = characters.id '.
|
||||
'LEFT JOIN characterroles ON characterroles.id = characters_characterroles.characterrole_id '.
|
||||
'WHERE seminaries.id = ? '.
|
||||
(!is_null($charactername) ? sprintf(' AND characters.name LIKE \'%%%s%%\' ', $charactername) : null).
|
||||
'ORDER BY characterroles.id IS NULL, characterroles.id ASC '.
|
||||
(!empty($limit) ? sprintf('LIMIT %d, %d', $offset, $limit) : null),
|
||||
'i',
|
||||
|
|
@ -194,6 +199,7 @@
|
|||
'LEFT JOIN characters_seminarycharacterfields ON characters_seminarycharacterfields.character_id = characters.id '.
|
||||
'LEFT JOIN seminarycharacterfields ON seminarycharacterfields.id = characters_seminarycharacterfields.seminarycharacterfield_id AND seminarycharacterfields.url = ? '.
|
||||
'WHERE seminaries.id = ? '.
|
||||
(!is_null($charactername) ? sprintf(' AND characters.name LIKE \'%%%s%%\' ', $charactername) : null).
|
||||
'ORDER BY characters_seminarycharacterfields.value ASC '.
|
||||
(!empty($limit) ? sprintf('LIMIT %d, %d', $offset, $limit) : null),
|
||||
'si',
|
||||
|
|
|
|||
|
|
@ -16,7 +16,8 @@
|
|||
|
||||
<form method="get">
|
||||
<fieldset class="filter">
|
||||
<p><small>Sortierung:</small></p>
|
||||
<legend><?=_('Filters')?></legend>
|
||||
<p><small><?=_('Sortorder')?>:</small></p>
|
||||
<select name="sortorder" onchange="this.form.submit();">
|
||||
<option value="name" <?php if($sortorder == 'name') : ?>selected="selected"<?php endif ?>><?=_('Character name')?></option>
|
||||
<option value="xps" <?php if($sortorder == 'xps') : ?>selected="selected"<?php endif ?>><?=_('XPs')?></option>
|
||||
|
|
@ -26,8 +27,10 @@
|
|||
<option value="<?=$characterfield['url']?>" <?php if($sortorder == $characterfield['url']) : ?>selected="selected"<?php endif ?>><?=$characterfield['title']?></option>
|
||||
<?php endforeach ?>
|
||||
</select>
|
||||
<noscript><input type="submit" value="<?=_('Sort list')?>" /></noscript>
|
||||
<label for="charactername"><?=_('Character name')?></label>:
|
||||
<input id="charactername" type="text" name="charactername" placeholder="<?=_('Character name')?>" value="<?=$charactername?>" />
|
||||
</fieldset>
|
||||
<input type="submit" value="<?=_('Apply filters')?>" />
|
||||
</form>
|
||||
|
||||
<ul id="characterlist" class="admnql">
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue