correctly link back to Quest choosen by Character at the end of an optional Questline

This commit is contained in:
coderkun 2014-06-02 22:04:01 +02:00
commit b0e3dd1169
3 changed files with 36 additions and 11 deletions

View file

@ -57,7 +57,8 @@
if(is_null($questgroup['hierarchy'])) if(is_null($questgroup['hierarchy']))
{ {
// Get related Questgroup // Get related Questgroup
$questtext = $this->Questtexts->getRelatedQuesttextForQuestgroup($currentQuestgroup['id']); $questtexts = $this->Questtexts->getRelatedQuesttextsForQuestgroup($currentQuestgroup['id']);
$questtext = $this->Questtexts->pickQuesttextLastEnteredByCharacter(\hhu\z\controllers\SeminaryController::$character['id'], $questtexts);
$quest = $this->Quests->getQuestById($questtext['quest_id']); $quest = $this->Quests->getQuestById($questtext['quest_id']);
$currentQuestgroup = $this->Questgroups->getQuestgroupById($quest['questgroup_id']); $currentQuestgroup = $this->Questgroups->getQuestgroupById($quest['questgroup_id']);
$currentQuestgroup['hierarchy'] = $this->Questgroupshierarchy->getHierarchyForQuestgroup($currentQuestgroup['id']); $currentQuestgroup['hierarchy'] = $this->Questgroupshierarchy->getHierarchyForQuestgroup($currentQuestgroup['id']);

View file

@ -259,9 +259,10 @@
$solved = true; $solved = true;
} }
// Get (related) Questtext // Get (related) Questtexts
$relatedQuesttext = $this->Questtexts->getRelatedQuesttextForQuestgroup($questgroup['id']); $relatedQuesttexts = $this->Questtexts->getRelatedQuesttextsForQuestgroup($questgroup['id']);
if(!empty($relatedQuesttext)) { $relatedQuesttext = $this->Questtexts->pickQuesttextLastEnteredByCharacter($character['id'], $relatedQuesttexts);
if(!is_null($relatedQuesttext)) {
$relatedQuesttext['quest'] = $this->Quests->getQuestById($relatedQuesttext['quest_id']); $relatedQuesttext['quest'] = $this->Quests->getQuestById($relatedQuesttext['quest_id']);
if(!empty($relatedQuesttext['quest'])) { if(!empty($relatedQuesttext['quest'])) {
$relatedQuesttext['quest']['questgroup_url'] = $this->Questgroups->getQuestgroupById($relatedQuesttext['quest']['questgroup_id'])['url']; $relatedQuesttext['quest']['questgroup_url'] = $this->Questgroups->getQuestgroupById($relatedQuesttext['quest']['questgroup_id'])['url'];

View file

@ -129,15 +129,15 @@
/** /**
* Get corresponding Questtext for a Sidequest. * Get corresponding Questtexts for a Questgroup.
* *
* @throws IdNotFoundException * @throws IdNotFoundException
* @param int $sidequestId ID of the Sidequest to get the Questtext for * @param int $questgroupId ID of Questgroup to get the Questtexst for
* @param array Questtext data * @param array List of Questtexts
*/ */
public function getRelatedQuesttextForQuestgroup($questgroupId) public function getRelatedQuesttextsForQuestgroup($questgroupId)
{ {
$data = $this->db->query( return $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 '. 'SELECT questtexts.id, questtexts.text, questtexts.pos, questtexts.quest_id, questtexttypes.id AS type_id, questtexttypes.type, questtexttypes.url AS type_url '.
'FROM questgroups_questtexts '. 'FROM questgroups_questtexts '.
'LEFT JOIN questtexts ON questtexts.id = questgroups_questtexts.questtext_id '. 'LEFT JOIN questtexts ON questtexts.id = questgroups_questtexts.questtext_id '.
@ -146,8 +146,31 @@
'i', 'i',
$questgroupId $questgroupId
); );
if(!empty($data)) { }
return $data[0];
public function pickQuesttextLastEnteredByCharacter($characterId, $questtexts)
{
if(count($questtexts) == 0) {
return null;
}
$data = $this->db->query(
sprintf(
'SELECT quest_id '.
'FROM quests_characters '.
'WHERE character_id = ? AND quest_id IN (%s) AND status = ? '.
'ORDER BY created DESC '.
'LIMIT 1',
implode(',', array_map(function($q) { return intval($q['quest_id']); }, $questtexts))
),
'ii',
$characterId,
\hhu\z\models\QuestsModel::QUEST_STATUS_ENTERED
);
foreach($questtexts as &$questtext) {
if($questtext['quest_id'] == $data[0]['quest_id']) {
return $questtext;
}
} }