use own method to get list of Quests for a Seminary ordered by open Character submissions
This commit is contained in:
parent
f232883f55
commit
9002e165a0
3 changed files with 44 additions and 23 deletions
|
|
@ -92,27 +92,13 @@
|
||||||
|
|
||||||
// Get Quests
|
// Get Quests
|
||||||
$limit = (is_null($all) && is_null($selectedQuestgroup) && is_null($selectedQuesttype)) ? \nre\configs\AppConfig::$misc['questlist_limit'] : null;
|
$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)
|
foreach($quests as &$quest)
|
||||||
{
|
{
|
||||||
// Get Questgroup
|
|
||||||
$quest['questgroup'] = $this->Questgroups->getQuestgroupById($quest['questgroup_id']);
|
|
||||||
|
|
||||||
// Get Questtype
|
// Get Questtype
|
||||||
$quest['questtype'] = $this->Questtypes->getQuesttypeById($quest['questtype_id']);
|
$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
|
// Get filter values
|
||||||
$questgroups = $this->Questgroups->getQuestgroupsForSeminary($seminary['id']);
|
$questgroups = $this->Questgroups->getQuestgroupsForSeminary($seminary['id']);
|
||||||
$questtypes = $this->Questtypes->getQuesttypes();
|
$questtypes = $this->Questtypes->getQuesttypes();
|
||||||
|
|
|
||||||
|
|
@ -354,22 +354,57 @@
|
||||||
* @param int $seminaryId ID of Seminary
|
* @param int $seminaryId ID of Seminary
|
||||||
* @return array Quests for this 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(
|
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 '.
|
'FROM questgroups '.
|
||||||
'INNER JOIN quests ON quests.questgroup_id = questgroups.id '.
|
'INNER JOIN quests ON quests.questgroup_id = questgroups.id '.
|
||||||
'WHERE questgroups.seminary_id = ? '.
|
'WHERE questgroups.seminary_id = ? '.
|
||||||
(!empty($questgroupId) ? ' AND questgroups.id = '.intval($questgroupId) : null).
|
'ORDER BY quests.title ASC',
|
||||||
(!empty($questtypeId) ? ' AND quests.questtype_id = '.intval($questtypeId) : null).
|
|
||||||
(!empty($limit) ? ' LIMIT '.intval($limit) : null),
|
|
||||||
'i',
|
'i',
|
||||||
$seminaryId
|
$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.
|
* Get all Quests that are linked to a Questtopic.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@
|
||||||
<ul class="admnql">
|
<ul class="admnql">
|
||||||
<?php foreach($quests as &$quest) : ?>
|
<?php foreach($quests as &$quest) : ?>
|
||||||
<li>
|
<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>
|
<p><small>
|
||||||
<?php switch($quest['questtype']['classname']) {
|
<?php switch($quest['questtype']['classname']) {
|
||||||
case null: echo _('Questtype Empty');
|
case null: echo _('Questtype Empty');
|
||||||
|
|
@ -71,7 +71,7 @@
|
||||||
case 'textinput': echo _('Questtype textinput');
|
case 'textinput': echo _('Questtype textinput');
|
||||||
break;
|
break;
|
||||||
} ?>, <?=sprintf(_('%d XPs'), $quest['xps'])?></small></p>
|
} ?>, <?=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>
|
</li>
|
||||||
<?php endforeach ?>
|
<?php endforeach ?>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue