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) : ?>
+ =$questtext['type']?>
+ =$questtexttype['type']?>
+
+
+
=\hhu\z\Utils::t($questtext['text'])?>
-
-
-
-
- 1) : ?><
- =$questtext['pos']?>/=$questtext['count']?>
- >
-
+
+ =\hhu\z\Utils::t($questtext['text'])?>
+