new structure for optional Questgroups instead of single Quests
This commit is contained in:
parent
3d5436f8f3
commit
ba8dd2ebc0
12 changed files with 353 additions and 252 deletions
|
|
@ -24,7 +24,7 @@
|
|||
*
|
||||
* @var array
|
||||
*/
|
||||
public $models = array('questgroupshierarchy', 'quests');
|
||||
public $models = array('questgroupshierarchy', 'quests', 'questtexts');
|
||||
|
||||
|
||||
|
||||
|
|
@ -54,10 +54,11 @@
|
|||
if(is_null($parentQuestgroupId))
|
||||
{
|
||||
$questgroups = $this->db->query(
|
||||
'SELECT id, questgroupshierarchy_id, pos, title, url, questgroupspicture_id '.
|
||||
'FROM questgroups '.
|
||||
'WHERE questgroups.questgroupshierarchy_id = ? AND parent_questgroup_id IS NULL '.
|
||||
'ORDER BY questgroups.pos ASC',
|
||||
'SELECT questgroups.id, questgroups_questgroupshierarchy.questgroupshierarchy_id, questgroups_questgroupshierarchy.pos, questgroups.title, questgroups.url, questgroups.questgroupspicture_id '.
|
||||
'FROM questgroups_questgroupshierarchy '.
|
||||
'INNER JOIN questgroups ON questgroups.id = questgroups_questgroupshierarchy.questgroup_id '.
|
||||
'WHERE questgroups_questgroupshierarchy.questgroupshierarchy_id = ? AND questgroups_questgroupshierarchy.parent_questgroup_id IS NULL '.
|
||||
'ORDER BY questgroups_questgroupshierarchy.pos ASC',
|
||||
'i',
|
||||
$hierarchyId
|
||||
);
|
||||
|
|
@ -65,10 +66,11 @@
|
|||
else
|
||||
{
|
||||
$questgroups = $this->db->query(
|
||||
'SELECT id, questgroupshierarchy_id, pos, title, url, questgroupspicture_id '.
|
||||
'FROM questgroups '.
|
||||
'WHERE questgroups.questgroupshierarchy_id = ? AND parent_questgroup_id = ? '.
|
||||
'ORDER BY questgroups.pos ASC',
|
||||
'SELECT questgroups.id, questgroups_questgroupshierarchy.questgroupshierarchy_id, questgroups_questgroupshierarchy.pos, questgroups.title, questgroups.url, questgroups.questgroupspicture_id '.
|
||||
'FROM questgroups_questgroupshierarchy '.
|
||||
'INNER JOIN questgroups ON questgroups.id = questgroups_questgroupshierarchy.questgroup_id '.
|
||||
'WHERE questgroups_questgroupshierarchy.questgroupshierarchy_id = ? AND questgroups_questgroupshierarchy.parent_questgroup_id = ? '.
|
||||
'ORDER BY questgroups_questgroupshierarchy.pos ASC',
|
||||
'ii',
|
||||
$hierarchyId, $parentQuestgroupId
|
||||
);
|
||||
|
|
@ -97,7 +99,7 @@
|
|||
public function getQuestgroupById($questgroupId)
|
||||
{
|
||||
$data = $this->db->query(
|
||||
'SELECT id, questgroupshierarchy_id, parent_questgroup_id, pos, title, url, questgroupspicture_id '.
|
||||
'SELECT id, title, url, questgroupspicture_id '.
|
||||
'FROM questgroups '.
|
||||
'WHERE questgroups.id = ?',
|
||||
'i',
|
||||
|
|
@ -123,10 +125,9 @@
|
|||
public function getQuestgroupByUrl($seminaryId, $questgroupUrl)
|
||||
{
|
||||
$data = $this->db->query(
|
||||
'SELECT questgroups.id, questgroups.questgroupshierarchy_id, questgroups.parent_questgroup_id, questgroups.pos, questgroups.title, questgroups.url, questgroups.questgroupspicture_id '.
|
||||
'SELECT id, title, url, questgroupspicture_id '.
|
||||
'FROM questgroups '.
|
||||
'LEFT JOIN questgroupshierarchy ON questgroupshierarchy.id = questgroups.questgroupshierarchy_id '.
|
||||
'WHERE questgroupshierarchy.seminary_id = ? AND questgroups.url = ?',
|
||||
'WHERE seminary_id = ? AND url = ?',
|
||||
'is',
|
||||
$seminaryId, $questgroupUrl
|
||||
);
|
||||
|
|
@ -197,11 +198,14 @@
|
|||
public function getNextQuestgroup($questgroupId)
|
||||
{
|
||||
$currentQuestgroup = $this->getQuestgroupById($questgroupId);
|
||||
$nextQuestgroup = $this->_getNextQuestgroup($currentQuestgroup['parent_questgroup_id'], $currentQuestgroup['pos']);
|
||||
while(is_null($nextQuestgroup) && !is_null($currentQuestgroup['parent_questgroup_id']))
|
||||
{
|
||||
$currentQuestgroup = $this->getQuestgroupById($currentQuestgroup['parent_questgroup_id']);
|
||||
$nextQuestgroup = $this->_getNextQuestgroup($currentQuestgroup['parent_questgroup_id'], $currentQuestgroup['pos']);
|
||||
$currentQuestgroup['hierarchy'] = $this->Questgroupshierarchy->getHierarchyForQuestgroup($currentQuestgroup['id']);
|
||||
if(empty($currentQuestgroup['hierarchy'])) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$nextQuestgroup = $this->_getNextQuestgroup($currentQuestgroup['hierarchy']['parent_questgroup_id'], $currentQuestgroup['hierarchy']['questgroup_pos']);
|
||||
if(is_null($nextQuestgroup) && !is_null($currentQuestgroup['hierarchy']['parent_questgroup_id'])) {
|
||||
$nextQuestgroup = $this->getNextQuestgroup($currentQuestgroup['hierarchy']['parent_questgroup_id']);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -223,11 +227,14 @@
|
|||
public function getPreviousQuestgroup($questgroupId)
|
||||
{
|
||||
$currentQuestgroup = $this->getQuestgroupById($questgroupId);
|
||||
$previousQuestgroup = $this->_getPreviousQuestgroup($currentQuestgroup['parent_questgroup_id'], $currentQuestgroup['pos']);
|
||||
while(is_null($previousQuestgroup) && !is_null($currentQuestgroup['parent_questgroup_id']))
|
||||
{
|
||||
$currentQuestgroup = $this->getQuestgroupById($currentQuestgroup['parent_questgroup_id']);
|
||||
$previousQuestgroup = $this->_getPreviousQuestgroup($currentQuestgroup['parent_questgroup_id'], $currentQuestgroup['pos']);
|
||||
$currentQuestgroup['hierarchy'] = $this->Questgroupshierarchy->getHierarchyForQuestgroup($currentQuestgroup['id']);
|
||||
if(empty($currentQuestgroup['hierarchy'])) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$previousQuestgroup = $this->_getPreviousQuestgroup($currentQuestgroup['hierarchy']['parent_questgroup_id'], $currentQuestgroup['hierarchy']['questgroup_pos']);
|
||||
if(is_null($previousQuestgroup) && !is_null($currentQuestgroup['hierarchy']['parent_questgroup_id'])) {
|
||||
$previousQuestgroup = $this->getPreviousQuestgroup($currentQuestgroup['hierarchy']['parent_questgroup_id']);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -245,22 +252,74 @@
|
|||
*/
|
||||
public function hasCharacterSolvedQuestgroup($questgroupId, $characterId)
|
||||
{
|
||||
$currentQuestgroup = $this->getQuestgroupById($questgroupId);
|
||||
$childQuestgroupshierarchy = $this->Questgroupshierarchy->getChildQuestgroupshierarchy($currentQuestgroup['questgroupshierarchy_id']);
|
||||
$lastChildQuestgroupshierarchy = array_pop($childQuestgroupshierarchy);
|
||||
while(!is_null($lastChildQuestgroupshierarchy))
|
||||
{
|
||||
$questgroups = $this->getQuestgroupsForHierarchy($lastChildQuestgroupshierarchy['id'], $currentQuestgroup['id']);
|
||||
$currentQuestgroup = array_pop($questgroups);
|
||||
$childQuestgroupshierarchy = $this->Questgroupshierarchy->getChildQuestgroupshierarchy($currentQuestgroup['questgroupshierarchy_id']);
|
||||
$lastChildQuestgroupshierarchy = array_pop($childQuestgroupshierarchy);
|
||||
// Get data of Questgroup
|
||||
$questgroup = $this->getQuestgroupById($questgroupId);
|
||||
|
||||
// Chack all Quests
|
||||
$quests = $this->Quests->getQuestsForQuestgroup($questgroup['id']);
|
||||
foreach($quests as &$quest) {
|
||||
if(!$this->Quests->hasCharacterSolvedQuest($quest['id'], $characterId)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
$quests = $this->Quests->getMainquestsForQuestgroup($currentQuestgroup['id']);
|
||||
$lastQuest = array_pop($quests);
|
||||
// Check all child Questgroups
|
||||
$questgroup['hierarchy'] = $this->Questgroupshierarchy->getHierarchyForQuestgroup($questgroup['id']);
|
||||
if(!empty($questgroup['hierarchy']))
|
||||
{
|
||||
$childQuestgroupshierarchy = $this->Questgroupshierarchy->getChildQuestgroupshierarchy($questgroup['hierarchy']['id']);
|
||||
foreach($childQuestgroupshierarchy as &$hierarchy)
|
||||
{
|
||||
// Get Questgroups
|
||||
$questgroups = $this->getQuestgroupsForHierarchy($hierarchy['id'], $questgroup['id']);
|
||||
foreach($questgroups as &$group) {
|
||||
if(!$this->hasCharacterSolvedQuestgroup($group['id'], $characterId)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return $this->Quests->hasCharacterSolvedQuest($lastQuest['id'], $characterId);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get all related Questgroups of a Questtext.
|
||||
*
|
||||
* @param int $questtextId ID of the questtext
|
||||
* @return array Sidequests for the questtext
|
||||
*/
|
||||
public function getRelatedQuestsgroupsOfQuesttext($questtextId)
|
||||
{
|
||||
return $this->db->query(
|
||||
'SELECT questgroups.id, questgroups_questtexts.questtext_id, questgroups.title, questgroups.url, questgroups_questtexts.entry_text '.
|
||||
'FROM questgroups_questtexts '.
|
||||
'INNER JOIN questgroups ON questgroups.id = questgroups_questtexts.questgroup_id '.
|
||||
'WHERE questgroups_questtexts.questtext_id = ?',
|
||||
'i',
|
||||
$questtextId
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get all related Questgroups of a Quest.
|
||||
*
|
||||
* @param int $questId ID of the quest
|
||||
* @return array Sidequests for the quest
|
||||
*/
|
||||
public function getRelatedQuestsgroupsOfQuest($questId)
|
||||
{
|
||||
$questgroups = array();
|
||||
$questtexts = $this->Questtexts->getQuesttextsOfQuest($questId);
|
||||
foreach($questtexts as &$questtext) {
|
||||
$questgroups = array_merge($questgroups, $this->getRelatedQuestsgroupsOfQuesttext($questtext['id']));
|
||||
}
|
||||
|
||||
|
||||
return $questgroups;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -278,20 +337,32 @@
|
|||
|
||||
// Current Questgroup
|
||||
$questgroup = $this->getQuestgroupById($questgroupId);
|
||||
$questgroup['hierarchy'] = $this->Questgroupshierarchy->getHierarchyForQuestgroup($questgroup['id']);
|
||||
|
||||
// Quests of current Questgroup
|
||||
$quests = $this->Quests->getMainquestsForQuestgroup($questgroup['id']);
|
||||
foreach($quests as &$quest) {
|
||||
$quests = $this->Quests->getQuestsForQuestgroup($questgroup['id']);
|
||||
foreach($quests as &$quest)
|
||||
{
|
||||
$xps += $quest['xps'];
|
||||
|
||||
// Related Questgroups
|
||||
$relatedQuestgroups = $this->getRelatedQuestsgroupsOfQuest($quest['id']);
|
||||
foreach($relatedQuestgroups as $group) {
|
||||
$xps += $this->getAchievableXPsForQuestgroup($group['id']);
|
||||
}
|
||||
}
|
||||
|
||||
// XPs of child Questgroups
|
||||
$childQuestgroupshierarchy = $this->Questgroupshierarchy->getChildQuestgroupshierarchy($questgroup['questgroupshierarchy_id']);
|
||||
foreach($childQuestgroupshierarchy as &$hierarchy)
|
||||
$questgroupHierarchy = $this->Questgroupshierarchy->getHierarchyForQuestgroup($questgroup['id']);
|
||||
if(!empty($questgroupHierarchy))
|
||||
{
|
||||
$questgroups = $this->getQuestgroupsForHierarchy($hierarchy['id'], $questgroup['id']);
|
||||
foreach($questgroups as &$questgroup) {
|
||||
$xps += $this->getAchievableXPsForQuestgroup($questgroup['id']);
|
||||
$childQuestgroupshierarchy = $this->Questgroupshierarchy->getChildQuestgroupshierarchy($questgroupHierarchy['id']);
|
||||
foreach($childQuestgroupshierarchy as &$hierarchy)
|
||||
{
|
||||
$questgroups = $this->getQuestgroupsForHierarchy($hierarchy['id'], $questgroup['id']);
|
||||
foreach($questgroups as &$questgroup) {
|
||||
$xps += $this->getAchievableXPsForQuestgroup($questgroup['id']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -318,16 +389,26 @@
|
|||
$questgroup = $this->getQuestgroupById($questgroupId);
|
||||
|
||||
// Quests of current Questgroup
|
||||
$quests = $this->Quests->getMainquestsForQuestgroup($questgroup['id']);
|
||||
$quests = $this->Quests->getQuestsForQuestgroup($questgroup['id']);
|
||||
foreach($quests as &$quest)
|
||||
{
|
||||
if($this->Quests->hasCharacterSolvedQuest($quest['id'], $characterId)) {
|
||||
$xps += $quest['xps'];
|
||||
}
|
||||
|
||||
// Related Questgroups
|
||||
$relatedQuestgroups = $this->getRelatedQuestsgroupsOfQuest($quest['id']);
|
||||
foreach($relatedQuestgroups as $group) {
|
||||
$xps += $this->getAchievedXPsForQuestgroup($group['id'], $characterId);
|
||||
}
|
||||
}
|
||||
|
||||
// XPs of child Questgroups
|
||||
$childQuestgroupshierarchy = $this->Questgroupshierarchy->getChildQuestgroupshierarchy($questgroup['questgroupshierarchy_id']);
|
||||
$questgroupHierarchy = $this->Questgroupshierarchy->getHierarchyForQuestgroup($questgroup['id']);
|
||||
if(empty($questgroupHierarchy)) {
|
||||
return $xps;
|
||||
}
|
||||
$childQuestgroupshierarchy = $this->Questgroupshierarchy->getChildQuestgroupshierarchy($questgroupHierarchy['id']);
|
||||
foreach($childQuestgroupshierarchy as &$hierarchy)
|
||||
{
|
||||
$questgroups = $this->getQuestgroupsForHierarchy($hierarchy['id'], $questgroup['id']);
|
||||
|
|
@ -357,7 +438,8 @@
|
|||
{
|
||||
$data = $this->db->query(
|
||||
'SELECT * '.
|
||||
'FROM questgroups '.
|
||||
'FROM questgroups_questgroupshierarchy '.
|
||||
'INNER JOIN questgroups ON questgroups.id = questgroups_questgroupshierarchy.questgroup_id '.
|
||||
'WHERE parent_questgroup_id = ? AND pos = ? + 1',
|
||||
'ii',
|
||||
$parentQuestgroupId, $questgroupPos
|
||||
|
|
@ -367,7 +449,8 @@
|
|||
{
|
||||
$data = $this->db->query(
|
||||
'SELECT * '.
|
||||
'FROM questgroups '.
|
||||
'FROM questgroups_questgroupshierarchy '.
|
||||
'INNER JOIN questgroups ON questgroups.id = questgroups_questgroupshierarchy.questgroup_id '.
|
||||
'WHERE parent_questgroup_id IS NULL AND pos = ? + 1',
|
||||
'i',
|
||||
$questgroupPos
|
||||
|
|
@ -395,7 +478,8 @@
|
|||
{
|
||||
$data = $this->db->query(
|
||||
'SELECT * '.
|
||||
'FROM questgroups '.
|
||||
'FROM questgroups_questgroupshierarchy '.
|
||||
'INNER JOIN questgroups ON questgroups.id = questgroups_questgroupshierarchy.questgroup_id '.
|
||||
'WHERE parent_questgroup_id = ? AND pos = ? - 1',
|
||||
'ii',
|
||||
$parentQuestgroupId, $questgroupPos
|
||||
|
|
@ -405,7 +489,8 @@
|
|||
{
|
||||
$data = $this->db->query(
|
||||
'SELECT * '.
|
||||
'FROM questgroups '.
|
||||
'FROM questgroups_questgroupshierarchy '.
|
||||
'INNER JOIN questgroups ON questgroups.id = questgroups_questgroupshierarchy.questgroup_id '.
|
||||
'WHERE parent_questgroup_id IS NULL AND pos = ? - 1',
|
||||
'i',
|
||||
$questgroupPos
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@
|
|||
* @param int $seminaryId ID of the seminary to get hierarchy for
|
||||
* @return array Toplevel hierarchy
|
||||
*/
|
||||
public function getHierarchyForSeminary($seminaryId)
|
||||
public function getHierarchyOfSeminary($seminaryId)
|
||||
{
|
||||
return $this->db->query(
|
||||
'SELECT id, seminary_id, parent_questgroupshierarchy_id, pos, title_singular, title_plural, url '.
|
||||
|
|
@ -80,6 +80,31 @@
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the Questgroup-Hierarchy for a Questgroup.
|
||||
*
|
||||
* @param int $questgroupId ID of Questgroup
|
||||
* @return array Hierarchy for Questgroup
|
||||
*/
|
||||
public function getHierarchyForQuestgroup($questgroupId)
|
||||
{
|
||||
$data = $this->db->query(
|
||||
'SELECT questgroups_questgroupshierarchy.parent_questgroup_id, questgroups_questgroupshierarchy.pos AS questgroup_pos, questgroupshierarchy.id, questgroupshierarchy.seminary_id, questgroupshierarchy.parent_questgroupshierarchy_id, questgroupshierarchy.pos, questgroupshierarchy.title_singular, questgroupshierarchy.title_plural, questgroupshierarchy.url '.
|
||||
'FROM questgroups_questgroupshierarchy '.
|
||||
'INNER JOIN questgroupshierarchy ON questgroupshierarchy.id = questgroups_questgroupshierarchy.questgroupshierarchy_id '.
|
||||
'WHERE questgroups_questgroupshierarchy.questgroup_id = ?',
|
||||
'i',
|
||||
$questgroupId
|
||||
);
|
||||
if(!empty($data)) {
|
||||
return $data[0];
|
||||
}
|
||||
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the child hierarchy entries of a Questgroup hierarchy.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -40,16 +40,36 @@
|
|||
* @param int $questgroupId ID of a Questgroup
|
||||
* @return array Quests of the given Questgroup
|
||||
*/
|
||||
public function getMainquestsForQuestgroup($questgroupId)
|
||||
public function getQuestsForQuestgroup($questgroupId)
|
||||
{
|
||||
return $this->db->query(
|
||||
$quests = array();
|
||||
|
||||
// Get first Quest
|
||||
$quest = $this->db->query(
|
||||
'SELECT id, questtype_id, title, url, xps, task '.
|
||||
'FROM quests '.
|
||||
'INNER JOIN mainquests ON mainquests.quest_id = quests.id '.
|
||||
'WHERE questgroup_id = ?',
|
||||
'LEFT JOIN quests_previousquests ON quests_previousquests.quest_id = quests.id '.
|
||||
'WHERE questgroup_id = ? AND quests_previousquests.previous_quest_id IS NULL',
|
||||
'i',
|
||||
$questgroupId
|
||||
);
|
||||
if(empty($quest)) {
|
||||
return $quests;
|
||||
}
|
||||
$quest = $quest[0];
|
||||
array_push($quests, $quest);
|
||||
|
||||
// Get next Quests
|
||||
// TODO Multiple next Quests
|
||||
while(($nextQuests = $this->getNextQuests($quest['id'])) != null)
|
||||
{
|
||||
$quest = $nextQuests[0];
|
||||
array_push($quests, $quest);
|
||||
}
|
||||
|
||||
|
||||
// Return Quests
|
||||
return $quests;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -65,12 +85,10 @@
|
|||
public function getQuestByUrl($seminaryId, $questgroupId, $questUrl)
|
||||
{
|
||||
$data = $this->db->query(
|
||||
'SELECT quests.id, quests.questtype_id, quests.title, quests.url, quests.xps, quests.task, quests.right_text, quests.wrong_text, quests.questsmedia_id, ('.
|
||||
'SELECT count(mainquests.quest_id) FROM mainquests WHERE mainquests.quest_id = quests.id) AS is_mainquest '.
|
||||
'SELECT quests.id, quests.questgroup_id, quests.questtype_id, quests.title, quests.url, quests.xps, quests.task, quests.right_text, quests.wrong_text, quests.questsmedia_id '.
|
||||
'FROM quests '.
|
||||
'LEFT JOIN questgroups ON questgroups.id = quests.questgroup_id '.
|
||||
'LEFT JOIN questgroupshierarchy ON questgroupshierarchy.id = questgroups.questgroupshierarchy_id '.
|
||||
'WHERE questgroupshierarchy.seminary_id = ? AND questgroups.id = ? AND quests.url = ?',
|
||||
'WHERE questgroups.seminary_id = ? AND questgroups.id = ? AND quests.url = ?',
|
||||
'iis',
|
||||
$seminaryId, $questgroupId, $questUrl
|
||||
);
|
||||
|
|
@ -78,8 +96,6 @@
|
|||
throw new \nre\exceptions\IdNotFoundException($questUrl);
|
||||
}
|
||||
|
||||
$data[0]['is_mainquest'] = ($data[0]['is_mainquest'] == 1);
|
||||
|
||||
|
||||
return $data[0];
|
||||
}
|
||||
|
|
@ -95,11 +111,9 @@
|
|||
public function getQuestById($questId)
|
||||
{
|
||||
$data = $this->db->query(
|
||||
'SELECT quests.id, quests.questtype_id, quests.title, quests.url, quests.xps, quests.task, quests.right_text, quests.wrong_text, quests.questsmedia_id, ('.
|
||||
'SELECT count(mainquests.quest_id) FROM mainquests WHERE mainquests.quest_id = quests.id) AS is_mainquest '.
|
||||
'SELECT quests.id, quests.questgroup_id, quests.questtype_id, quests.title, quests.url, quests.xps, quests.task, quests.right_text, quests.wrong_text, quests.questsmedia_id '.
|
||||
'FROM quests '.
|
||||
'LEFT JOIN questgroups ON questgroups.id = quests.questgroup_id '.
|
||||
'LEFT JOIN questgroupshierarchy ON questgroupshierarchy.id = questgroups.questgroupshierarchy_id '.
|
||||
'WHERE quests.id = ?',
|
||||
'i',
|
||||
$questId
|
||||
|
|
@ -108,89 +122,11 @@
|
|||
throw new \nre\exceptions\IdNotFoundException($questId);
|
||||
}
|
||||
|
||||
$data[0]['is_mainquest'] = ($data[0]['is_mainquest'] == 1);
|
||||
|
||||
|
||||
return $data[0];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get a Sidequest and its data by its URL.
|
||||
*
|
||||
* @throws IdNotFoundException
|
||||
* @param int $seminaryId ID of the corresponding Seminary
|
||||
* @param int $questgroupId ID of the corresponding Questgroup
|
||||
* @param int $questId ID of the Quest
|
||||
* @param string $sidequestUrl URL-title of a Sidequest
|
||||
* @return array Sidequest data
|
||||
*/
|
||||
public function getSidequestByUrl($seminaryId, $questgroupId, $questId, $sidequestUrl)
|
||||
{
|
||||
$data = $this->db->query(
|
||||
'SELECT quests.id, quests.questtype_id, quests.title, quests.url, quests.xps, quests.task, quests.right_text, quests.wrong_text, quests.questsmedia_id '.
|
||||
'FROM quests '.
|
||||
'INNER JOIN sidequests ON sidequests.quest_id = quests.id '.
|
||||
'LEFT JOIN questtexts ON questtexts.id = sidequests.questtext_id '.
|
||||
'LEFT JOIN mainquests ON mainquests.quest_id = questtexts.mainquest_id '.
|
||||
'LEFT JOIN questgroups ON questgroups.id = quests.questgroup_id '.
|
||||
'LEFT JOIN questgroupshierarchy ON questgroupshierarchy.id = questgroups.questgroupshierarchy_id '.
|
||||
'LEFT JOIN seminaries ON seminaries.id = questgroupshierarchy.seminary_id '.
|
||||
'WHERE quests.url = ? AND mainquests.id = ? AND questgroups.id = ? AND seminaries.id = ?',
|
||||
'siii',
|
||||
$sidequestUrl,
|
||||
$questId,
|
||||
$questgroupId,
|
||||
$seminaryId
|
||||
);
|
||||
if(empty($data)) {
|
||||
throw new \nre\exceptions\IdNotFoundException($sidequestUrl);
|
||||
}
|
||||
|
||||
|
||||
return $data[0];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get all sidequests for a Quest.
|
||||
*
|
||||
* @param int $questId ID of the quest
|
||||
* @return array Sidequests for the quest
|
||||
*/
|
||||
public function getSidequestsForQuest($questId)
|
||||
{
|
||||
return $this->db->query(
|
||||
'SELECT quests.id, sidequests.questtext_id, quests.title, quests.url, sidequests.entry_text '.
|
||||
'FROM quests '.
|
||||
'INNER JOIN sidequests ON sidequests.quest_id = quests.id '.
|
||||
'LEFT JOIN questtexts ON questtexts.id = sidequests.questtext_id '.
|
||||
'WHERE questtexts.quest_id = ?',
|
||||
'i',
|
||||
$questId
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get all sidequests for a Questtext.
|
||||
*
|
||||
* @param int $questtextId ID of the questtext
|
||||
* @return array Sidequests for the questtext
|
||||
*/
|
||||
public function getSidequestsForQuesttext($questtextId)
|
||||
{
|
||||
return $this->db->query(
|
||||
'SELECT id, questtext_id, title, url, entry_text '.
|
||||
'FROM quests '.
|
||||
'INNER JOIN sidequests ON sidequests.quest_id = quests.id '.
|
||||
'WHERE questtext_id = ?',
|
||||
'i',
|
||||
$questtextId
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get Quests that follow-up a Quest.
|
||||
*
|
||||
|
|
@ -200,13 +136,11 @@
|
|||
public function getNextQuests($questId)
|
||||
{
|
||||
return $this->db->query(
|
||||
'SELECT quests.id, quests.title, quests.url, questgroups.title AS questgroup_title, questgroups.url AS questgroup_url '.
|
||||
'FROM mainquests_previousmainquests '.
|
||||
'LEFT JOIN mainquests ON mainquests.quest_id = mainquests_previousmainquests.mainquest_id '.
|
||||
'INNER JOIN quests ON quests.id = mainquests.quest_id '.
|
||||
'LEFT JOIN questgroups ON questgroups.id = quests.questgroup_id '.
|
||||
'LEFT JOIN questgroupshierarchy ON questgroupshierarchy.id = questgroups.questgroupshierarchy_id '.
|
||||
'WHERE mainquests_previousmainquests.previous_mainquest_id = ?',
|
||||
'SELECT quests.id, quests.questtype_id, quests.title, quests.url, quests.xps, quests.task, questgroups.title AS questgroup_title, questgroups.url AS questgroup_url '.
|
||||
'FROM quests_previousquests '.
|
||||
'INNER JOIN quests ON quests.id = quests_previousquests.quest_id '.
|
||||
'INNER JOIN questgroups ON questgroups.id = quests.questgroup_id '.
|
||||
'WHERE quests_previousquests.previous_quest_id = ?',
|
||||
'i',
|
||||
$questId
|
||||
);
|
||||
|
|
@ -223,12 +157,10 @@
|
|||
{
|
||||
return $this->db->query(
|
||||
'SELECT quests.id, quests.title, quests.url, questgroups.title AS questgroup_title, questgroups.url AS questgroup_url '.
|
||||
'FROM mainquests_previousmainquests '.
|
||||
'LEFT JOIN mainquests ON mainquests.quest_id = mainquests_previousmainquests.previous_mainquest_id '.
|
||||
'INNER JOIN quests ON quests.id = mainquests.quest_id '.
|
||||
'LEFT JOIN questgroups ON questgroups.id = quests.questgroup_id '.
|
||||
'LEFT JOIN questgroupshierarchy ON questgroupshierarchy.id = questgroups.questgroupshierarchy_id '.
|
||||
'WHERE mainquests_previousmainquests.mainquest_id = ?',
|
||||
'FROM quests_previousquests '.
|
||||
'INNER JOIN quests ON quests.id = quests_previousquests.previous_quest_id '.
|
||||
'INNER JOIN questgroups ON questgroups.id = quests.questgroup_id '.
|
||||
'WHERE quests_previousquests.quest_id = ?',
|
||||
'i',
|
||||
$questId
|
||||
);
|
||||
|
|
@ -277,6 +209,29 @@
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Determine if the given Character has tried to solve a Quest.
|
||||
*
|
||||
* @param int $questId ID of Quest to check
|
||||
* @param int $characterId ID of Character to check
|
||||
* @result boolean Whether Character has tried to solved the Quest or not
|
||||
*/
|
||||
public function hasCharacterTriedQuest($questId, $characterId)
|
||||
{
|
||||
$count = $this->db->query(
|
||||
'SELECT count(id) AS c '.
|
||||
'FROM quests_characters '.
|
||||
'WHERE quest_id = ? AND character_id = ? AND status IN (-1,0)',
|
||||
'ii',
|
||||
$questId,
|
||||
$characterId
|
||||
);
|
||||
|
||||
|
||||
return (!empty($count) && intval($count[0]['c']) > 0);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Determine if the given Character has solved the given Quest.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -62,6 +62,25 @@
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get all Questtexts for a Quest.
|
||||
*
|
||||
* @param int $questId ID of the Quest
|
||||
* @return array All Questtexts for a Quest
|
||||
*/
|
||||
public function getQuesttextsOfQuest($questId)
|
||||
{
|
||||
return $this->db->query(
|
||||
'SELECT questtexts.id, questtexts.text, questtexts.pos, questtexts.out_text, questtexts.abort_text, questtexts.questsmedia_id, questtexttypes.id AS type_id, questtexttypes.type, questtexttypes.url AS type_url '.
|
||||
'FROM questtexts '.
|
||||
'LEFT JOIN questtexttypes ON questtexttypes.id = questtexts.questtexttype_id '.
|
||||
'WHERE questtexts.quest_id = ?',
|
||||
'i',
|
||||
$questId
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get count of Questtexts for a Quest.
|
||||
*
|
||||
|
|
@ -96,24 +115,23 @@
|
|||
* @param int $sidequestId ID of the Sidequest to get the Questtext for
|
||||
* @param array Questtext data
|
||||
*/
|
||||
public function getQuesttextForSidequest($sidequestId)
|
||||
public function getRelatedQuesttextForQuestgroup($questgroupId)
|
||||
{
|
||||
$data = $this->db->query(
|
||||
'SELECT questtexts.id, questtexts.text, questtexts.pos, questtexts.quest_id, questtexttypes.id AS type_id, questtexttypes.type, questtexttypes.url AS type_url '.
|
||||
'FROM quests '.
|
||||
'INNER JOIN sidequests ON sidequests.quest_id = quests.id '.
|
||||
'LEFT JOIN questtexts ON questtexts.id = sidequests.questtext_id '.
|
||||
'FROM questgroups_questtexts '.
|
||||
'LEFT JOIN questtexts ON questtexts.id = questgroups_questtexts.questtext_id '.
|
||||
'LEFT JOIN questtexttypes ON questtexttypes.id = questtexts.questtexttype_id '.
|
||||
'WHERE quests.id = ?',
|
||||
'WHERE questgroups_questtexts.questgroup_id = ?',
|
||||
'i',
|
||||
$sidequestId
|
||||
$questgroupId
|
||||
);
|
||||
if(empty($data)) {
|
||||
throw new \nre\exceptions\IdNotFoundException($sidequestId);
|
||||
if(!empty($data)) {
|
||||
return $data[0];
|
||||
}
|
||||
|
||||
|
||||
return $data[0];
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue