add title filter for Quest listing

This commit is contained in:
coderkun 2014-06-19 23:11:28 +02:00
commit 0076e9b629
3 changed files with 17 additions and 9 deletions

View file

@ -84,6 +84,7 @@
// Set filters
$selectedQuestgroup = null;
$selectedQuesttype = null;
$selectedTitle = null;
$page = 1;
if($this->request->getRequestMethod() == 'GET')
{
@ -91,6 +92,8 @@
$selectedQuestgroup = !empty($selectedQuestgroup) ? $selectedQuestgroup : null;
$selectedQuesttype = $this->request->getGetParam('questtype');
$selectedQuesttype = !empty($selectedQuesttype) ? $selectedQuesttype : null;
$selectedTitle = $this->request->getGetParam('title');
$selectedTitle = !empty($selectedTitle) ? $selectedTitle : null;
$page = $this->request->getGetParam('page');
$page = !empty($page) ? intval($page) : 1;
}
@ -98,8 +101,8 @@
// Get Quests
$limit = ($all != 'all') ? \nre\configs\AppConfig::$misc['lists_limit'] : null;
$offset = ($all != 'all') ? max((intval($page) - 1), 0) * $limit : 0;
$questsCount = $this->Quests->getCountForQuestsForSeminaryByOpenSubmissions($seminary['id'], $selectedQuestgroup, $selectedQuesttype);
$quests = $this->Quests->getQuestsForSeminaryByOpenSubmissions($seminary['id'], $selectedQuestgroup, $selectedQuesttype, $limit, $offset);
$questsCount = $this->Quests->getCountForQuestsForSeminaryByOpenSubmissions($seminary['id'], $selectedQuestgroup, $selectedQuesttype, $selectedTitle);
$quests = $this->Quests->getQuestsForSeminaryByOpenSubmissions($seminary['id'], $selectedQuestgroup, $selectedQuesttype, $selectedTitle, $limit, $offset);
foreach($quests as &$quest)
{
// Get Questtype
@ -121,6 +124,7 @@
$this->set('questtypes', $questtypes);
$this->set('selectedQuestgroup', $selectedQuestgroup);
$this->set('selectedQuesttype', $selectedQuesttype);
$this->set('selectedTitle', $selectedTitle);
$this->set('quests', $quests);
$this->set('questsCount', $questsCount);
$this->set('all', $all);

View file

@ -376,7 +376,7 @@
* @param int $questtypeId ID of Questtype (optional)
* @return int Count of Quests for this Seminary
*/
public function getCountForQuestsForSeminaryByOpenSubmissions($seminaryId, $questgroupId=null, $questtypeId=null)
public function getCountForQuestsForSeminaryByOpenSubmissions($seminaryId, $questgroupId=null, $questtypeId=null, $title=null)
{
$data = $this->db->query(
'SELECT count(DISTINCT quests.id) AS c '.
@ -384,7 +384,8 @@
'INNER JOIN quests ON quests.questgroup_id = questgroups.id '.
'WHERE questgroups.seminary_id = ? '.
(!empty($questgroupId) ? sprintf('AND questgroups.id = %d ', $questgroupId) : null).
(!empty($questtypeId) ? sprintf('AND quests.questtype_id = %d ', $questtypeId) : null),
(!empty($questtypeId) ? sprintf('AND quests.questtype_id = %d ', $questtypeId) : null).
(!empty($title) ? sprintf('AND quests.title LIKE \'%%%s%%\' ', $title) : null),
'i',
$seminaryId
);
@ -408,7 +409,7 @@
* @param int $offset Offset (optional)
* @return array Quests for this Seminary
*/
public function getQuestsForSeminaryByOpenSubmissions($seminaryId, $questgroupId=null, $questtypeId=null, $limit=null, $offset=0)
public function getQuestsForSeminaryByOpenSubmissions($seminaryId, $questgroupId=null, $questtypeId=null, $title=null, $limit=null, $offset=0)
{
return $this->db->query(
'SELECT DISTINCT quests.id, quests.questgroup_id, quests.questtype_id, quests.title, quests.url, quests.xps, quests.task, quests.wrong_text, quests.questsmedia_id, questgroups.title AS questgroup_title, questgroups.url AS questgroup_url, ('.
@ -425,6 +426,7 @@
'WHERE questgroups.seminary_id = ? '.
(!empty($questgroupId) ? sprintf('AND questgroups.id = %d ', $questgroupId) : null).
(!empty($questtypeId) ? sprintf('AND quests.questtype_id = %d ', $questtypeId) : null).
(!empty($title) ? sprintf('AND quests.title LIKE \'%%%s%%\' ', $title) : null).
'ORDER BY opensubmissionscount DESC '.
(!empty($limit) ? sprintf('LIMIT %d, %d', $offset, $limit) : null),
'ii',

View file

@ -10,7 +10,7 @@
<form method="get" class="logreg admnqf">
<fieldset>
<legend>Filter</legend>
<legend><?=_('Filter')?></legend>
<label for="questgroup"><?=_('Questgroup')?>:</label>
<select id="questgroup" name="questgroup">
<option value=""><?=_('all')?></option>
@ -44,6 +44,8 @@
</option>
<?php endforeach ?>
</select>
<label for="title"><?=_('Title')?>:</label>
<input type="text" id="title" name="title" placeholder="<?=_('Title')?>" value="<?=$selectedTitle?>" />
</fieldset>
<input type="submit" value="<?=_('Apply filters')?>" />
</form>
@ -77,8 +79,8 @@
</ul>
<?php if(is_null($all) && ($page*$limit) < $questsCount) : ?>
<nav class="admin">
<li><a id="show-more" href="<?=$linker->link(null,3,true,array('page'=>$page+1,'questgroup'=>$selectedQuestgroup,'questtype'=>$selectedQuesttype))?>"><?=_('Show more')?></a></li>
<li><a id="show-all" href="<?=$linker->link('all',3,true,array('questgroup'=>$selectedQuestgroup,'questtype'=>$selectedQuesttype))?>"><?=_('Show all')?></a></li>
<li><a id="show-more" href="<?=$linker->link(null,3,true,array('page'=>$page+1,'questgroup'=>$selectedQuestgroup,'questtype'=>$selectedQuesttype,'title'=>$selectedTitle))?>"><?=_('Show more')?></a></li>
<li><a id="show-all" href="<?=$linker->link('all',3,true,array('questgroup'=>$selectedQuestgroup,'questtype'=>$selectedQuesttype,'title'=>$selectedTitle))?>"><?=_('Show all')?></a></li>
</nav>
<?php endif ?>
@ -88,7 +90,7 @@
var linkSubmissions = "<?=$linker->link(array('submissions','SEMINARY','QUESTGROUP','QUEST'),1)?>";
var linkQuestgroup = "<?=$linker->link(array('questgroups','questgroup','SEMINARY','QUESTGROUP'))?>";
var linkQuest = "<?=$linker->link(array('quest','SEMINARY','QUESTGROUP','QUEST'),1)?>";
var linkPage = "<?=$linker->link(null,3,true,array('page'=>'PAGE','questgroup'=>$selectedQuestgroup,'questtype'=>$selectedQuesttype))?>";
var linkPage = "<?=$linker->link(null,3,true,array('page'=>'PAGE','questgroup'=>$selectedQuestgroup,'questtype'=>$selectedQuesttype,'title'=>$selectedTitle))?>";
$("#show-more").click(function(event) {
if(request) {