From 4485fba10bb2618e020961bb63c137c326e24457 Mon Sep 17 00:00:00 2001 From: coderkun Date: Tue, 1 Apr 2014 12:17:20 +0200 Subject: [PATCH] show all Questtexts at once in a box --- controllers/QuestgroupsController.inc | 10 ++- controllers/QuestsController.inc | 40 ++++++------ models/QuesttextsModel.inc | 87 ++++++++------------------- views/html/quests/quest.tpl | 44 +++++++------- 4 files changed, 74 insertions(+), 107 deletions(-) diff --git a/controllers/QuestgroupsController.inc b/controllers/QuestgroupsController.inc index 8abef8aa..92c86be2 100644 --- a/controllers/QuestgroupsController.inc +++ b/controllers/QuestgroupsController.inc @@ -147,7 +147,15 @@ $currentQuest['solved'] = $this->Quests->hasCharacterSolvedQuest($currentQuest['id'], $character['id']); // Attach related Questgroups - $currentQuest['relatedQuestgroups'] = $this->Questgroups->getRelatedQuestsgroupsOfQuest($currentQuest['id']); + $currentQuest['relatedQuestgroups'] = array(); + $relatedQuestgroups = $this->Questgroups->getRelatedQuestsgroupsOfQuest($currentQuest['id']); + foreach($relatedQuestgroups as &$relatedQuestgroup) + { + $firstQuest = $this->Quests->getFirstQuestOfQuestgroup($relatedQuestgroup['id']); + if(!empty($firstQuest) && $this->Quests->hasCharacterEnteredQuest($firstQuest['id'], $character['id'])) { + $currentQuest['relatedQuestgroups'][] = $relatedQuestgroup; + } + } // Add Quest to Quests $quests[] = $currentQuest; diff --git a/controllers/QuestsController.inc b/controllers/QuestsController.inc index 51e1664c..9218a912 100644 --- a/controllers/QuestsController.inc +++ b/controllers/QuestsController.inc @@ -136,27 +136,26 @@ } } - // Get Questtext - $questtext = null; + // Get Questtexts if(is_null($questtexttypeUrl)) { $questtexttypeUrl = 'Prolog'; } $questtexttypes = $this->Questtexts->getQuesttexttypes(); - $questtexttypes = array_map(function($t) { return $t['url']; }, $questtexttypes); - $questtextCount = $this->Questtexts->getQuesttextsCountForQuest($quest['id'], $questtexttypeUrl); - if(in_array($questtexttypeUrl, $questtexttypes)) + //$questtexttypesUrls = array_map(function($t) { return $t['url']; }, $questtexttypes); + if(($questtexttypeIndex = array_search($questtexttypeUrl, array_map(function($t) { return $t['url']; }, $questtexttypes))) === false) { + throw new ParamsNotValidException($questtexttypeUrl); + } + $questtexttype = $questtexttypes[$questtexttypeIndex]; + $questtexts = $this->Questtexts->getQuesttextsOfQuest($quest['id'], $questtexttypeUrl); + foreach($questtexts as &$questtext) { - $questtextPos = max(intval($questtextPos), 1); - try { - $questtext = $this->Questtexts->getQuesttextByUrl($quest['id'], $questtexttypeUrl, $questtextPos); - $questtext['count'] = $questtextCount; - $questtext['relatedQuestsgroups'] = $this->Questgroups->getRelatedQuestsgroupsOfQuesttext($questtext['id']); - } - catch(\nre\exceptions\IdNotFoundException $e) { - if(!($questtexttypeUrl == 'Prolog' || $questtexttypeUrl == 'Epilog' && $questtextPos == 1)) { - throw $e; - } + // Questtext media + if(!is_null($questtext['questsmedia_id'])) { + $questtext['media'] = $this->Media->getMediaById($questtext['questsmedia_id']); } + + // Related Questgroups + $questtext['relatedQuestsgroups'] = $this->Questgroups->getRelatedQuestsgroupsOfQuesttext($questtext['id']); } // Quest status @@ -175,12 +174,9 @@ } } - // Media + // Quest media $questmedia = null; - if(!is_null($questtext) && array_key_exists('questmedia_id', $questtext) && !empty($questtext['questsmedia_id'])) { - $questmedia = $this->Media->getMediaById($questtext['questsmedia_id']); - } - elseif(!is_null($quest['questsmedia_id'])) { + if(!is_null($quest['questsmedia_id'])) { $questmedia = $this->Media->getMediaById($quest['questsmedia_id']); } @@ -227,6 +223,7 @@ { // Related (Main-) Quest $nextQuest = $relatedQuesttext['quest']; + $nextQuest['entered'] = true; $nextQuests = array($nextQuest); } } @@ -236,7 +233,8 @@ // Pass data to view $this->set('seminary', $seminary); $this->set('questgroup', $questgroup); - $this->set('questtext', $questtext); + $this->set('questtexttype', $questtexttype); + $this->set('questtexts', $questtexts); $this->set('quest', $quest); $this->set('queststatus', $questStatus); $this->set('queststatustext', $questStatusText); diff --git a/models/QuesttextsModel.inc b/models/QuesttextsModel.inc index 3a84a9a5..1fd82319 100644 --- a/models/QuesttextsModel.inc +++ b/models/QuesttextsModel.inc @@ -34,77 +34,38 @@ - /** - * Get a Questtext for a Quest by its URL. - * - * @throws IdNotFoundException - * @param int $questId ID of the Quest to get text for - * @param string $questtexttypeUrl URL of the Questtexttype - * @param int $pos Position of Questtexttype - * @return array Questtexttype data - */ - public function getQuesttextByUrl($questId, $questtexttypeUrl, $pos) - { - $data = $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 = ? AND questtexttypes.url = ? AND questtexts.pos = ?', - 'isi', - $questId, $questtexttypeUrl, $pos - ); - if(empty($data)) { - throw new \nre\exceptions\IdNotFoundException($questtexttypeUrl); - } - - - return $data = $data[0]; - } - - /** * 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. - * * @param int $questId ID of the Quest * @param string $questtexttypeUrl URL of the Questtexttype - * @return int Conut of Questtexts for Quest + * @return array All Questtexts for a Quest */ - public function getQuesttextsCountForQuest($questId, $questtexttypUrl) + public function getQuesttextsOfQuest($questId, $questtexttypeUrl=null) { - $count = 0; - $data = $this->db->query( - 'SELECT COUNT(questtexts.id) AS c '. - 'FROM questtexts '. - 'LEFT JOIN questtexttypes ON questtexttypes.id = questtexts.questtexttype_id '. - 'WHERE questtexts.quest_id = ? AND questtexttypes.url = ?', - 'is', - $questId, $questtexttypUrl - ); - if(!empty($data)) { - $count = $data[0]['c']; + if(is_null($questtexttypeUrl)) + { + 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 + ); + } + else + { + 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 = ? and questtexttypes.url = ?', + 'is', + $questId, + $questtexttypeUrl + ); } - - - return $count; } diff --git a/views/html/quests/quest.tpl b/views/html/quests/quest.tpl index fe27c287..53a5bd06 100644 --- a/views/html/quests/quest.tpl +++ b/views/html/quests/quest.tpl @@ -18,30 +18,30 @@ - + 0) : ?>
-

+

+ + +
-

-
- - - - - 1) : ?>< - / - > - +
@@ -64,7 +64,7 @@
  • : - +