implement Questtexts and Sidequests
This commit is contained in:
parent
108ca65470
commit
46364ac6f2
10 changed files with 355 additions and 15 deletions
|
|
@ -31,6 +31,15 @@
|
|||
$this->addSubAgent('Questgroupshierarchypath', 'index', $request->getParam(3), $request->getParam(4), true);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Action: quest.
|
||||
*/
|
||||
public function sidequest(\nre\core\Request $request, \nre\core\Response $response)
|
||||
{
|
||||
$this->addSubAgent('Questgroupshierarchypath', 'index', $request->getParam(3), $request->getParam(4), true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -76,8 +76,14 @@
|
|||
|
||||
// Get Quests
|
||||
$quests = null;
|
||||
if(count($childQuestgroupshierarchy) == 0) {
|
||||
if(count($childQuestgroupshierarchy) == 0)
|
||||
{
|
||||
$quests = $this->Quests->getQuestsForQuestgroup($questgroup['id']);
|
||||
|
||||
// Attach sidequests
|
||||
foreach($quests as &$quest) {
|
||||
$quest['sidequests'] = $this->Quests->getSidequestsForQuest($quest['id']);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -51,9 +51,11 @@
|
|||
* Show a quest and its task.
|
||||
*
|
||||
* @throws IdNotFoundException
|
||||
* @param string $seminaryUrl URL-Title of a Seminary
|
||||
* @param string $questgroupUrl URL-Title of a Questgroup
|
||||
* @param string $questUrl URL-Title of a Quest
|
||||
* @param string $seminaryUrl URL-Title of a Seminary
|
||||
* @param string $questgroupUrl URL-Title of a Questgroup
|
||||
* @param string $questUrl URL-Title of a Quest
|
||||
* @param string $questtexttypeUrl URL-Title of a Questtexttype
|
||||
* @param int $questtextPos Position of Questtext
|
||||
*/
|
||||
public function quest($seminaryUrl, $questgroupUrl, $questUrl, $questtexttypeUrl=null, $questtextPos=1)
|
||||
{
|
||||
|
|
@ -73,10 +75,16 @@
|
|||
if(is_null($questtexttypeUrl)) {
|
||||
$questtexttypeUrl = 'Prolog';
|
||||
}
|
||||
if(in_array($questtexttypeUrl, $questtexttypes))
|
||||
$questtextCount = $this->Questtexts->getQuesttextsCountForQuest($quest['id'], $questtexttypeUrl);
|
||||
if($questtextCount > 0)
|
||||
{
|
||||
$questtextPos = max(intval($questtextPos), 1);
|
||||
$questtext = $this->Questtexts->getQuesttextByUrl($quest['id'], $questtexttypeUrl, $questtextPos);
|
||||
if(in_array($questtexttypeUrl, $questtexttypes))
|
||||
{
|
||||
$questtextPos = max(intval($questtextPos), 1);
|
||||
$questtext = $this->Questtexts->getQuesttextByUrl($quest['id'], $questtexttypeUrl, $questtextPos);
|
||||
$questtext['count'] = $questtextCount;
|
||||
$questtext['sidequests'] = $this->Quests->getSidequestsForQuesttext($questtext['id']);
|
||||
}
|
||||
}
|
||||
|
||||
// Show task only for Prologes
|
||||
|
|
@ -94,6 +102,71 @@
|
|||
$this->set('showtask', $showTask);
|
||||
}
|
||||
|
||||
/**
|
||||
* Action: sidequest.
|
||||
*
|
||||
* Show a sidequest and its task.
|
||||
*
|
||||
* @throws IdNotFoundException
|
||||
* @param string $seminaryUrl URL-Title of a Seminary
|
||||
* @param string $questgroupUrl URL-Title of a Questgroup
|
||||
* @param string $questUrl URL-Title of a Quest
|
||||
* @param string $sidequestUrl URL-Title of a Sidequest
|
||||
* @param string $questtexttypeUrl URL-Title of a Questtexttype
|
||||
* @param int $questtextPos Position of Questtext
|
||||
*/
|
||||
public function sidequest($seminaryUrl, $questgroupUrl, $questUrl, $sidequestUrl, $sidequesttexttypeUrl=null, $sidequesttextPos=1)
|
||||
{
|
||||
// Get seminary
|
||||
$seminary = $this->Seminaries->getSeminaryByUrl($seminaryUrl);
|
||||
|
||||
// Get Questgroup
|
||||
$questgroup = $this->Questgroups->getQuestgroupByUrl($seminary['id'], $questgroupUrl);
|
||||
|
||||
// Get Quest
|
||||
$quest = $this->Quests->getQuestByUrl($seminary['id'], $questgroup['id'], $questUrl);
|
||||
|
||||
// Get Sidequest
|
||||
$sidequest = $this->Quests->getSidequestByUrl($seminary['id'], $questgroup['id'], $quest['id'], $sidequestUrl);
|
||||
|
||||
// Get Questtext
|
||||
$questtext = $this->Questtexts->getQuesttextForSidequest($sidequest['id']);
|
||||
|
||||
// Get Sidequesttext
|
||||
$sidequesttext = null;
|
||||
$questtexttypes = $this->Questtexts->getQuesttexttypes();
|
||||
$questtexttypes = array_map(function($t) { return $t['url']; }, $questtexttypes);
|
||||
if(is_null($sidequesttexttypeUrl)) {
|
||||
$sidequesttexttypeUrl = 'Prolog';
|
||||
}
|
||||
$sidequesttextCount = $this->Questtexts->getQuesttextsCountForSidequest($sidequest['id'], $sidequesttexttypeUrl);
|
||||
if($sidequesttextCount > 0)
|
||||
{
|
||||
if(in_array($sidequesttexttypeUrl, $questtexttypes))
|
||||
{
|
||||
$sidequesttextPos = max(intval($sidequesttextPos), 1);
|
||||
$sidequesttext = $this->Questtexts->getSidequesttextByUrl($sidequest['id'], $sidequesttexttypeUrl, $sidequesttextPos);
|
||||
$sidequesttext['count'] = $sidequesttextCount;
|
||||
}
|
||||
}
|
||||
|
||||
// Show task only for Prologes
|
||||
$showTask = false;
|
||||
if($sidequesttext['type'] == 'Prolog') {
|
||||
$showTask = true;
|
||||
}
|
||||
|
||||
|
||||
// Pass data to view
|
||||
$this->set('seminary', $seminary);
|
||||
$this->set('questgroup', $questgroup);
|
||||
$this->set('sidequesttext', $sidequesttext);
|
||||
$this->set('quest', $quest);
|
||||
$this->set('questtext', $questtext);
|
||||
$this->set('sidequest', $sidequest);
|
||||
$this->set('showtask', $showTask);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -1,8 +1,8 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: The Legend of Z\n"
|
||||
"POT-Creation-Date: 2014-02-09 12:48+0100\n"
|
||||
"PO-Revision-Date: 2014-02-09 12:48+0100\n"
|
||||
"POT-Creation-Date: 2014-02-12 23:09+0100\n"
|
||||
"PO-Revision-Date: 2014-02-12 23:10+0100\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: de_DE\n"
|
||||
|
|
@ -30,6 +30,7 @@ msgstr "Benutzer"
|
|||
#: ../../../views/html/seminaries/create.tpl:1
|
||||
#: ../../../views/html/questgroups/questgroup.tpl:1
|
||||
#: ../../../views/html/quests/quest.tpl:1
|
||||
#: ../../../views/html/quests/sidequest.tpl:1
|
||||
msgid "Seminaries"
|
||||
msgstr "Kurse"
|
||||
|
||||
|
|
@ -156,10 +157,27 @@ msgstr "Soll der Kurs „%s“ wirklich gelöscht werden?"
|
|||
msgid "New seminary"
|
||||
msgstr "Neuer Kurs"
|
||||
|
||||
#: ../../../views/html/questgroups/questgroup.tpl:23
|
||||
msgid "Quests"
|
||||
msgstr "Quests"
|
||||
|
||||
#: ../../../views/html/questgroups/questgroup.tpl:29
|
||||
msgid "containing optional Quests"
|
||||
msgstr "Enthaltene optionale Quests"
|
||||
|
||||
#: ../../../views/html/introduction/index.tpl:1
|
||||
msgid "Introduction"
|
||||
msgstr "Einführung"
|
||||
|
||||
#: ../../../views/html/quests/quest.tpl:33
|
||||
#: ../../../views/html/quests/sidequest.tpl:20
|
||||
msgid "Task"
|
||||
msgstr "Aufgabe"
|
||||
|
||||
#: ../../../views/html/quests/sidequest.tpl:8
|
||||
msgid "This Quest is optional"
|
||||
msgstr "Diese Quest ist optional"
|
||||
|
||||
#~ msgid "created by %s on %s at %s"
|
||||
#~ msgstr "erstellt von %s am %s um %s Uhr"
|
||||
|
||||
|
|
|
|||
|
|
@ -80,6 +80,79 @@
|
|||
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 sidequests.id, sidequests.questtype_id, sidequests.title, sidequests.url, sidequests.xps, sidequests.task '.
|
||||
'FROM sidequests '.
|
||||
'LEFT JOIN questtexts ON questtexts.id = sidequests.questtext_id '.
|
||||
'LEFT JOIN quests ON quests.id = questtexts.quest_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 sidequests.url = ? AND quests.id = ? AND questgroups.id = ? AND seminaries.id = ?',
|
||||
'siii',
|
||||
$sidequestUrl,
|
||||
$questId,
|
||||
$questgroupId,
|
||||
$seminaryId
|
||||
);
|
||||
if(empty($data)) {
|
||||
throw new \nre\exceptions\IdNotFoundException();
|
||||
}
|
||||
|
||||
|
||||
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 sidequests.id, sidequests.questtext_id, sidequests.title, sidequests.url, sidequests.entry_text '.
|
||||
'FROM sidequests '.
|
||||
'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 sidequests '.
|
||||
'WHERE questtext_id = ?',
|
||||
'i',
|
||||
$questtextId
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -46,10 +46,10 @@
|
|||
public function getQuesttextByUrl($questId, $questtexttypeUrl, $pos)
|
||||
{
|
||||
$data = $this->db->query(
|
||||
'SELECT questtexts.id, questtexts.text, questtexts.out_text, questtexttypes.type '.
|
||||
'SELECT questtexts.id, questtexts.text, questtexts.pos, questtexts.out_text, 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 = ?',
|
||||
'WHERE questtexts.quest_id = ? AND questtexttypes.url = ? AND questtexts.pos = ?',
|
||||
'isi',
|
||||
$questId, $questtexttypeUrl, $pos
|
||||
);
|
||||
|
|
@ -62,6 +62,115 @@
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get a Questtext for a Sidequest by its URL.
|
||||
*
|
||||
* @throws IdNotFoundException
|
||||
* @param int $sidequestId ID of the Sidequest to get text for
|
||||
* @param string $questtexttypeUrl URL of the Questtexttype
|
||||
* @param int $pos Position of Questtexttype
|
||||
* @return array Questtexttype data
|
||||
*/
|
||||
public function getSidequesttextByUrl($sidequestId, $questtexttypeUrl, $pos)
|
||||
{
|
||||
$data = $this->db->query(
|
||||
'SELECT sidequesttexts.id, sidequesttexts.text, sidequesttexts.pos, questtexttypes.id AS type_id, questtexttypes.type, questtexttypes.url AS type_url '.
|
||||
'FROM sidequesttexts '.
|
||||
'LEFT JOIN questtexttypes ON questtexttypes.id = sidequesttexts.questtexttype_id '.
|
||||
'WHERE sidequesttexts.sidequest_id = ? AND questtexttypes.url = ? AND sidequesttexts.pos = ?',
|
||||
'isi',
|
||||
$sidequestId, $questtexttypeUrl, $pos
|
||||
);
|
||||
if(empty($data)) {
|
||||
throw new \nre\exceptions\IdNotFoundException($questtexttypeUrl);
|
||||
}
|
||||
|
||||
|
||||
return $data = $data[0];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
public function getQuesttextsCountForQuest($questId, $questtexttypUrl)
|
||||
{
|
||||
$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'];
|
||||
}
|
||||
|
||||
|
||||
return $count;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get count of Questtexts for a Sidequest.
|
||||
*
|
||||
* @param int $sidequestId ID of the Sidequest
|
||||
* @param string $questtexttypeUrl URL of the Questtexttype
|
||||
* @return int Conut of Questtexts for Sideuest
|
||||
*/
|
||||
public function getQuesttextsCountForSidequest($questId, $questtexttypUrl)
|
||||
{
|
||||
$count = 0;
|
||||
$data = $this->db->query(
|
||||
'SELECT COUNT(sidequesttexts.id) AS c '.
|
||||
'FROM sidequesttexts '.
|
||||
'LEFT JOIN questtexttypes ON questtexttypes.id = sidequesttexts.questtexttype_id '.
|
||||
'WHERE sidequesttexts.sidequest_id = ? AND questtexttypes.url = ?',
|
||||
'is',
|
||||
$questId, $questtexttypUrl
|
||||
);
|
||||
if(!empty($data)) {
|
||||
$count = $data[0]['c'];
|
||||
}
|
||||
|
||||
|
||||
return $count;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get corresponding Questtext for a Sidequest.
|
||||
*
|
||||
* @throws IdNotFoundException
|
||||
* @param int $sidequestId ID of the Sidequest to get the Questtext for
|
||||
* @param array Questtext data
|
||||
*/
|
||||
public function getQuesttextForSidequest($sidequestId)
|
||||
{
|
||||
$data = $this->db->query(
|
||||
'SELECT questtexts.id, questtexts.text, questtexts.pos, questtexttypes.id AS type_id, questtexttypes.type, questtexttypes.url AS type_url '.
|
||||
'FROM sidequests '.
|
||||
'LEFT JOIN questtexts ON questtexts.id = sidequests.questtext_id '.
|
||||
'LEFT JOIN questtexttypes ON questtexttypes.id = questtexts.questtexttype_id '.
|
||||
'WHERE sidequests.id = ?',
|
||||
'i',
|
||||
$sidequestId
|
||||
);
|
||||
if(empty($data)) {
|
||||
throw new \nre\exceptions\IdNotFoundException();
|
||||
}
|
||||
|
||||
|
||||
return $data[0];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get all registered Questtexttypes.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -20,10 +20,21 @@
|
|||
<?php endforeach ?>
|
||||
|
||||
<?php if(isset($quests) && !is_null($quests)) : ?>
|
||||
<h3>Quests</h3>
|
||||
<h3><?=_('Quests')?></h3>
|
||||
<ul>
|
||||
<?php foreach($quests as &$quest) : ?>
|
||||
<li><a href="<?=$linker->link(array('quests','quest',$seminary['url'],$questgroup['url'],$quest['url']))?>"><?=$quest['title']?></a></li>
|
||||
<li>
|
||||
<a href="<?=$linker->link(array('quests','quest',$seminary['url'],$questgroup['url'],$quest['url']))?>"><?=$quest['title']?></a>
|
||||
<br />
|
||||
<?=_('containing optional Quests')?>:
|
||||
<?php if(count($quest['sidequests']) > 0) : ?>
|
||||
<ul>
|
||||
<?php foreach($quest['sidequests'] as &$sidequest) : ?>
|
||||
<li><?=$sidequest['title']?></li>
|
||||
<?php endforeach ?>
|
||||
</ul>
|
||||
<?php endif ?>
|
||||
</li>
|
||||
<?php endforeach ?>
|
||||
</ul>
|
||||
<?php endif ?>
|
||||
|
|
|
|||
|
|
@ -5,14 +5,32 @@
|
|||
|
||||
<h3><?=$quest['title']?></h3>
|
||||
<section>
|
||||
<h1><?=$questtext['type']?></h1>
|
||||
<p><?=$questtext['text']?></p>
|
||||
<?php if(!empty($questtext['out_text'])) : ?>
|
||||
<a href=""><?=$questtext['out_text']?></a>
|
||||
|
||||
<?php if(!empty($questtext['sidequests'])) : ?>
|
||||
<ul>
|
||||
<?php foreach($questtext['sidequests'] as &$sidequest) : ?>
|
||||
<li><a href="<?=$linker->link(array('sidequest',$seminary['url'],$questgroup['url'],$quest['url'],$sidequest['url']),1)?>"><?=$sidequest['entry_text']?></a></li>
|
||||
<?php endforeach ?>
|
||||
<?php if(!empty($questtext['out_text'])) : ?>
|
||||
<li><a href="<?=$linker->link($questtext['pos']+1, 6)?>"><?=$questtext['out_text']?></a>
|
||||
<?php endif ?>
|
||||
</ul>
|
||||
<?php endif ?>
|
||||
|
||||
<?php if(!empty($questtext['out_text']) && empty($questtext['sidequests'])) : ?>
|
||||
<a href="<?=$linker->link($questtext['pos']+1, 6)?>"><?=$questtext['out_text']?></a>
|
||||
<?php endif ?>
|
||||
|
||||
<?php if($questtext['pos'] > 1) : ?><a href="<?=$linker->link(array($questtext['type_url'],$questtext['pos']-1),5)?>"><</a><?php endif ?>
|
||||
<?=$questtext['pos']?>/<?=$questtext['count']?>
|
||||
<?php if($questtext['pos'] < $questtext['count'] && empty($questtext['out_text'])) : ?><a href="<?=$linker->link(array($questtext['type_url'],$questtext['pos']+1),5)?>">></a><?php endif ?>
|
||||
</section>
|
||||
|
||||
<?php if($showtask) : ?>
|
||||
<section>
|
||||
<h1><?=_('Task')?></h1>
|
||||
<p><?=$quest['task']?></p>
|
||||
</section>
|
||||
<?php endif ?>
|
||||
|
|
|
|||
23
views/html/quests/sidequest.tpl
Normal file
23
views/html/quests/sidequest.tpl
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
<h1><?=_('Seminaries')?></h1>
|
||||
<h2><?=$seminary['title']?></h2>
|
||||
|
||||
<?=$questgroupshierarchypath?>
|
||||
|
||||
<h3><a href="<?=$linker->link(array('quest',$seminary['url'],$questgroup['url'],$quest['url'],$questtext['type_url'],$questtext['pos']),1)?>"><?=$quest['title']?></a></h3>
|
||||
<h4><?=$sidequest['title']?></h4>
|
||||
<p><?=_('This Quest is optional')?>.</p>
|
||||
<section>
|
||||
<h1><?=$sidequesttext['type']?></h1>
|
||||
<p><?=$sidequesttext['text']?></p>
|
||||
|
||||
<?php if($sidequesttext['pos'] > 1) : ?><a href="<?=$linker->link(array($sidequesttext['type_url'],$sidequesttext['pos']-1),6)?>"><</a><?php endif ?>
|
||||
<?=$sidequesttext['pos']?>/<?=$sidequesttext['count']?>
|
||||
<?php if($sidequesttext['pos'] < $sidequesttext['count'] && empty($sidequesttext['out_text'])) : ?><a href="<?=$linker->link(array($sidequesttext['type_url'],$sidequesttext['pos']+1),6)?>">></a><?php endif ?>
|
||||
</section>
|
||||
|
||||
<?php if($showtask) : ?>
|
||||
<section>
|
||||
<h1><?=_('Task')?></h1>
|
||||
<p><?=$sidequest['task']?></p>
|
||||
</section>
|
||||
<?php endif ?>
|
||||
Loading…
Add table
Add a link
Reference in a new issue