From 108ca6547059ba2fd11018882c1317f8c2a03e35 Mon Sep 17 00:00:00 2001 From: coderkun Date: Wed, 12 Feb 2014 10:31:05 +0100 Subject: [PATCH] show Questtexts for Quests --- controllers/QuestsController.inc | 25 +++++++++- models/QuestsModel.inc | 4 +- models/QuesttextsModel.inc | 80 ++++++++++++++++++++++++++++++++ views/html/quests/quest.tpl | 13 +++++- 4 files changed, 117 insertions(+), 5 deletions(-) create mode 100644 models/QuesttextsModel.inc diff --git a/controllers/QuestsController.inc b/controllers/QuestsController.inc index f8b41332..cccd1581 100644 --- a/controllers/QuestsController.inc +++ b/controllers/QuestsController.inc @@ -24,7 +24,7 @@ * * @var array */ - public $models = array('seminaries', 'questgroups', 'quests'); + public $models = array('seminaries', 'questgroups', 'quests', 'questtexts'); /** * User permissions * @@ -55,7 +55,7 @@ * @param string $questgroupUrl URL-Title of a Questgroup * @param string $questUrl URL-Title of a Quest */ - public function quest($seminaryUrl, $questgroupUrl, $questUrl) + public function quest($seminaryUrl, $questgroupUrl, $questUrl, $questtexttypeUrl=null, $questtextPos=1) { // Get seminary $seminary = $this->Seminaries->getSeminaryByUrl($seminaryUrl); @@ -66,11 +66,32 @@ // Get Quest $quest = $this->Quests->getQuestByUrl($seminary['id'], $questgroup['id'], $questUrl); + // Get Questtext + $questtext = null; + $questtexttypes = $this->Questtexts->getQuesttexttypes(); + $questtexttypes = array_map(function($t) { return $t['url']; }, $questtexttypes); + if(is_null($questtexttypeUrl)) { + $questtexttypeUrl = 'Prolog'; + } + if(in_array($questtexttypeUrl, $questtexttypes)) + { + $questtextPos = max(intval($questtextPos), 1); + $questtext = $this->Questtexts->getQuesttextByUrl($quest['id'], $questtexttypeUrl, $questtextPos); + } + + // Show task only for Prologes + $showTask = false; + if($questtext['type'] == 'Prolog') { + $showTask = true; + } + // Pass data to view $this->set('seminary', $seminary); $this->set('questgroup', $questgroup); + $this->set('questtext', $questtext); $this->set('quest', $quest); + $this->set('showtask', $showTask); } } diff --git a/models/QuestsModel.inc b/models/QuestsModel.inc index c4770488..2f991143 100644 --- a/models/QuestsModel.inc +++ b/models/QuestsModel.inc @@ -43,7 +43,7 @@ public function getQuestsForQuestgroup($questgroupId) { return $this->db->query( - 'SELECT id, questtype_id, title, url, xps, text '. + 'SELECT id, questtype_id, title, url, xps, task '. 'FROM quests '. 'WHERE questgroup_id = ?', 'i', @@ -64,7 +64,7 @@ public function getQuestByUrl($seminaryId, $questgroupId, $questUrl) { $data = $this->db->query( - 'SELECT quests.id, quests.questtype_id, quests.title, quests.url, quests.xps, quests.text '. + 'SELECT quests.id, quests.questtype_id, quests.title, quests.url, quests.xps, quests.task '. 'FROM quests '. 'LEFT JOIN questgroups ON questgroups.id = quests.questgroup_id '. 'LEFT JOIN questgroupshierarchy ON questgroupshierarchy.id = questgroups.questgroupshierarchy_id '. diff --git a/models/QuesttextsModel.inc b/models/QuesttextsModel.inc new file mode 100644 index 00000000..7387b3a2 --- /dev/null +++ b/models/QuesttextsModel.inc @@ -0,0 +1,80 @@ + + * @copyright 2014 Heinrich-Heine-Universität Düsseldorf + * @license http://www.gnu.org/licenses/gpl.html + * @link https://bitbucket.org/coderkun/the-legend-of-z + */ + + namespace hhu\z\models; + + + /** + * Model to interact with Questtexts-table. + * + * @author Oliver Hanraths + */ + class QuesttextsModel extends \hhu\z\Model + { + + + + + /** + * Construct a new QuesttextsModel. + */ + public function __construct() + { + parent::__construct(); + } + + + + + /** + * 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.out_text, questtexttypes.type '. + '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 registered Questtexttypes. + * + * @return array Registered Questtexttypes + */ + public function getQuesttexttypes() + { + return $this->db->query( + 'SELECT id, type, url '. + 'FROM questtexttypes' + ); + } + + } + +?> diff --git a/views/html/quests/quest.tpl b/views/html/quests/quest.tpl index 1dc1fc0d..836ce775 100644 --- a/views/html/quests/quest.tpl +++ b/views/html/quests/quest.tpl @@ -4,4 +4,15 @@

-

+
+

+ + + +
+ + +
+

+
+