use own method to get list of Quests for a Seminary ordered by open Character submissions
This commit is contained in:
parent
98a3a06ffa
commit
294731e8e2
3 changed files with 44 additions and 23 deletions
|
|
@ -92,27 +92,13 @@
|
|||
|
||||
// Get Quests
|
||||
$limit = (is_null($all) && is_null($selectedQuestgroup) && is_null($selectedQuesttype)) ? \nre\configs\AppConfig::$misc['questlist_limit'] : null;
|
||||
$quests = $this->Quests->getQuestsForSeminary($seminary['id'], $selectedQuestgroup, $selectedQuesttype, $limit);
|
||||
$quests = $this->Quests->getQuestsForSeminaryByOpenSubmissions($seminary['id'], $selectedQuestgroup, $selectedQuesttype, $limit);
|
||||
foreach($quests as &$quest)
|
||||
{
|
||||
// Get Questgroup
|
||||
$quest['questgroup'] = $this->Questgroups->getQuestgroupById($quest['questgroup_id']);
|
||||
|
||||
// Get Questtype
|
||||
$quest['questtype'] = $this->Questtypes->getQuesttypeById($quest['questtype_id']);
|
||||
|
||||
// Add open submissions count
|
||||
$quest['opensubmissionscount'] = count($this->Characters->getCharactersSubmittedQuest($quest['id']));
|
||||
}
|
||||
|
||||
// Sort Quests
|
||||
usort($quests, function($a, $b) {
|
||||
if($a['opensubmissionscount'] == $b['opensubmissionscount']) {
|
||||
return 0;
|
||||
}
|
||||
return ($a['opensubmissionscount'] < $b['opensubmissionscount']) ? 1 : -1;
|
||||
});
|
||||
|
||||
// Get filter values
|
||||
$questgroups = $this->Questgroups->getQuestgroupsForSeminary($seminary['id']);
|
||||
$questtypes = $this->Questtypes->getQuesttypes();
|
||||
|
|
|
|||
|
|
@ -354,22 +354,57 @@
|
|||
* @param int $seminaryId ID of Seminary
|
||||
* @return array Quests for this Seminary
|
||||
*/
|
||||
public function getQuestsForSeminary($seminaryId, $questgroupId=null, $questtypeId=null, $limit=null)
|
||||
public function getQuestsForSeminary($seminaryId)
|
||||
{
|
||||
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 '.
|
||||
'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 '.
|
||||
'FROM questgroups '.
|
||||
'INNER JOIN quests ON quests.questgroup_id = questgroups.id '.
|
||||
'WHERE questgroups.seminary_id = ?'.
|
||||
(!empty($questgroupId) ? ' AND questgroups.id = '.intval($questgroupId) : null).
|
||||
(!empty($questtypeId) ? ' AND quests.questtype_id = '.intval($questtypeId) : null).
|
||||
(!empty($limit) ? ' LIMIT '.intval($limit) : null),
|
||||
'WHERE questgroups.seminary_id = ? '.
|
||||
'ORDER BY quests.title ASC',
|
||||
'i',
|
||||
$seminaryId
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get all Quests for a Seminary order by their count of open
|
||||
* submissions.
|
||||
*
|
||||
* @param int $seminaryId ID of Seminary
|
||||
* @param int $questgroupId ID of Questgroup (optional)
|
||||
* @param int $questtypeId ID of Questtype (optional)
|
||||
* @param int $limit Limit amount of Quests (optional)
|
||||
* @param int $offset Offset (optional)
|
||||
* @return array Quests for this Seminary
|
||||
*/
|
||||
public function getQuestsForSeminaryByOpenSubmissions($seminaryId, $questgroupId=null, $questtypeId=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, ('.
|
||||
'SELECT count(DISTINCT quests_characters.character_id) '.
|
||||
'FROM quests_characters '.
|
||||
'WHERE quests_characters.quest_id = quests.id AND quests_characters.status = ? AND NOT EXISTS ('.
|
||||
'SELECT id '.
|
||||
'FROM quests_characters AS qc '.
|
||||
'WHERE qc.quest_id = quests_characters.quest_id AND qc.character_id = quests_characters.character_id AND qc.created > quests_characters.created'.
|
||||
')'.
|
||||
') AS opensubmissionscount '.
|
||||
'FROM questgroups '.
|
||||
'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).
|
||||
'ORDER BY opensubmissionscount DESC '.
|
||||
(!empty($limit) ? sprintf('LIMIT %d, %d', $offset, $limit) : null),
|
||||
'ii',
|
||||
self::QUEST_STATUS_SUBMITTED,
|
||||
$seminaryId
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get all Quests that are linked to a Questtopic.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@
|
|||
<ul class="admnql">
|
||||
<?php foreach($quests as &$quest) : ?>
|
||||
<li>
|
||||
<p class="fwb"><a href="<?=$linker->link(array('quest',$seminary['url'],$quest['questgroup']['url'],$quest['url']),1)?>"><?=$quest['title']?></a><span><a href="<?=$linker->link(array('submissions',$seminary['url'],$quest['questgroup']['url'],$quest['url']),1)?>"><?=$quest['opensubmissionscount']?> <?=_('open submissions')?></a></span></p>
|
||||
<p class="fwb"><a href="<?=$linker->link(array('quest',$seminary['url'],$quest['questgroup_url'],$quest['url']),1)?>"><?=$quest['title']?></a><span><a href="<?=$linker->link(array('submissions',$seminary['url'],$quest['questgroup_url'],$quest['url']),1)?>"><?=$quest['opensubmissionscount']?> <?=_('open submissions')?></a></span></p>
|
||||
<p><small>
|
||||
<?php switch($quest['questtype']['classname']) {
|
||||
case null: echo _('Questtype Empty');
|
||||
|
|
@ -71,7 +71,7 @@
|
|||
case 'textinput': echo _('Questtype textinput');
|
||||
break;
|
||||
} ?>, <?=sprintf(_('%d XPs'), $quest['xps'])?></small></p>
|
||||
<p><small><a href="<?=$linker->link(array('questgroups','questgroup',$seminary['url'],$quest['questgroup']['url']))?>"><?=$quest['questgroup']['title']?></a></small></p>
|
||||
<p><small><a href="<?=$linker->link(array('questgroups','questgroup',$seminary['url'],$quest['questgroup_url']))?>"><?=$quest['questgroup_title']?></a></small></p>
|
||||
</li>
|
||||
<?php endforeach ?>
|
||||
</ul>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue