update Quest page: show everything on one page

This commit is contained in:
coderkun 2014-04-24 18:06:57 +02:00
commit b98b22734e
10 changed files with 111 additions and 144 deletions

View file

@ -303,59 +303,6 @@
$this->view = QuesttypeView::loadAndFactory($layoutName, $controllerName, $action); $this->view = QuesttypeView::loadAndFactory($layoutName, $controllerName, $action);
} }
/**
* Mark the current Quest as solved and redirect to solved page.
*/
protected function setQuestSolved()
{
// Get seminary
$seminary = $this->Seminaries->getSeminaryByUrl($this->request->getParam(3));
// Get Questgroup
$questgroup = $this->Questgroups->getQuestgroupByUrl($seminary['id'], $this->request->getParam(4));
// Get Quest
$quest = $this->Quests->getQuestByUrl($seminary['id'], $questgroup['id'], $this->request->getParam(5));
// Character
$character = $this->Characters->getCharacterForUserAndSeminary($this->Auth->getUserId(), $seminary['id']);
// Set solved
$this->Quests->setQuestSolved($quest['id'], $character['id']);
// Redirect
$this->redirect($this->linker->link('Epilog', $sidequest != null ? 6 : 5, true, array('status'=>'solved')));
}
/**
* Mark the current Quest as unsolved and redirect to unsolved
* page.
*/
protected function setQuestUnsolved()
{
// Get seminary
$seminary = $this->Seminaries->getSeminaryByUrl($this->request->getParam(3));
// Get Questgroup
$questgroup = $this->Questgroups->getQuestgroupByUrl($seminary['id'], $this->request->getParam(4));
// Get Quest
$quest = $this->Quests->getQuestByUrl($seminary['id'], $questgroup['id'], $this->request->getParam(5));
// Character
$character = $this->Characters->getCharacterForUserAndSeminary($this->Auth->getUserId(), $seminary['id']);
// Set solved
$this->Quests->setQuestUnsolved($quest['id'], $character['id']);
// Redirect
$this->redirect($this->linker->link('Prolog', $sidequest != null ? 6 : 5, true, array('status'=>'unsolved')));
}
} }
?> ?>

View file

@ -195,39 +195,29 @@
// Set status “entered” // Set status “entered”
$this->Quests->setQuestEntered($quest['id'], $character['id']); $this->Quests->setQuestEntered($quest['id'], $character['id']);
// Get (related) Questtext // Has Character solved quest?
$relatedQuesttext = $this->Questtexts->getRelatedQuesttextForQuestgroup($questgroup['id']); $solved = $this->Quests->hasCharacterSolvedQuest($quest['id'], $character['id']);
if(!empty($relatedQuesttext)) {
$relatedQuesttext['quest'] = $this->Quests->getQuestById($relatedQuesttext['quest_id']);
if(!empty($relatedQuesttext['quest'])) {
$relatedQuesttext['quest']['questgroup_url'] = $this->Questgroups->getQuestgroupById($relatedQuesttext['quest']['questgroup_id'])['url'];
}
}
// Get Questtexts // Get Questtexts
if(is_null($questtexttypeUrl)) { $questtexts = array();
$questtexttypeUrl = 'Prolog'; $questtexts['Prolog'] = $this->Questtexts->getQuesttextsOfQuest($quest['id'], 'Prolog');
if($solved) {
$questtexts['Epilog'] = $this->Questtexts->getQuesttextsOfQuest($quest['id'], 'Epilog');
} }
$questtexttypes = $this->Questtexts->getQuesttexttypes(); foreach($questtexts as &$questtextList)
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)
{ {
// Questtext media foreach($questtextList as &$questtext)
if(!is_null($questtext['questsmedia_id'])) { {
$questtext['media'] = $this->Media->getSeminaryMediaById($questtext['questsmedia_id']); // Questtext media
} if(!is_null($questtext['questsmedia_id'])) {
$questtext['media'] = $this->Media->getSeminaryMediaById($questtext['questsmedia_id']);
}
// Related Questgroups // Related Questgroups
$questtext['relatedQuestsgroups'] = $this->Questgroups->getRelatedQuestsgroupsOfQuesttext($questtext['id']); $questtext['relatedQuestsgroups'] = $this->Questgroups->getRelatedQuestsgroupsOfQuesttext($questtext['id']);
}
} }
// Has Epilog?
$hasEpilog = ($this->Questtexts->getQuesttextCountOfQuest($quest['id'], 'Epilog') > 0);
// Quest status // Quest status
$questStatus = $this->request->getGetParam('status'); $questStatus = $this->request->getGetParam('status');
@ -239,29 +229,31 @@
// Task // Task
$task = null; $task = null;
if($questtexttypeUrl == 'Prolog') $questtype = $this->Questtypes->getQuesttypeById($quest['questtype_id']);
if(!is_null($questtype['classname'])) {
$task = $this->renderTask($questtype['classname'], $seminary, $questgroup, $quest, $character);
}
else
{ {
// Questtype // Mark Quest as solved
$questtype = $this->Questtypes->getQuesttypeById($quest['questtype_id']); $this->Quests->setQuestSolved($quest['id'], $character['id']);
$solved = true;
// Render task
if(!is_null($questtype['classname'])) {
$task = $this->renderTask($questtype['classname'], $seminary, $questgroup, $quest, $character);
}
else {
// Mark Quest as solved
$this->Quests->setQuestSolved($quest['id'], $character['id']);
}
} }
// Has Character solved quest? // Get (related) Questtext
$solved = $this->Quests->hasCharacterSolvedQuest($quest['id'], $character['id']); $relatedQuesttext = $this->Questtexts->getRelatedQuesttextForQuestgroup($questgroup['id']);
if(!empty($relatedQuesttext)) {
$relatedQuesttext['quest'] = $this->Quests->getQuestById($relatedQuesttext['quest_id']);
if(!empty($relatedQuesttext['quest'])) {
$relatedQuesttext['quest']['questgroup_url'] = $this->Questgroups->getQuestgroupById($relatedQuesttext['quest']['questgroup_id'])['url'];
}
}
// Next Quest/Questgroup // Next Quest/Questgroup
$nextQuests = null; $nextQuests = null;
$charactedHasChoosenNextQuest = false; $charactedHasChoosenNextQuest = false;
$nextQuestgroup = null; $nextQuestgroup = null;
if($questtexttypeUrl == 'Epilog' || (is_null($questtype['classname']) && !$hasEpilog)) if($solved)
{ {
// Next Quest // Next Quest
$nextQuests = $this->Quests->getNextQuests($quest['id']); $nextQuests = $this->Quests->getNextQuests($quest['id']);
@ -296,9 +288,9 @@
// Pass data to view // Pass data to view
$this->set('seminary', $seminary); $this->set('seminary', $seminary);
$this->set('questgroup', $questgroup); $this->set('questgroup', $questgroup);
$this->set('questtexttype', $questtexttype); //$this->set('questtexttype', $questtexttype);
$this->set('questtexts', $questtexts); $this->set('questtexts', $questtexts);
$this->set('hasEpilog', $hasEpilog); //$this->set('hasEpilog', $hasEpilog);
$this->set('quest', $quest); $this->set('quest', $quest);
$this->set('queststatus', $questStatus); $this->set('queststatus', $questStatus);
$this->set('relatedquesttext', $relatedQuesttext); $this->set('relatedquesttext', $relatedQuesttext);
@ -610,7 +602,7 @@
$this->Quests->setQuestSolved($quest['id'], $character['id']); $this->Quests->setQuestSolved($quest['id'], $character['id']);
// Redirect // Redirect
$this->redirect($this->linker->link('Epilog', 5, true, array('status'=>'solved'))); $this->redirect($this->linker->link(array(), 5, true, array('status'=>'solved'), false, 'task'));
} }
elseif($status === false) elseif($status === false)
{ {
@ -618,14 +610,14 @@
$this->Quests->setQuestUnsolved($quest['id'], $character['id']); $this->Quests->setQuestUnsolved($quest['id'], $character['id']);
// Redirect // Redirect
$this->redirect($this->linker->link('Prolog', 5, true, array('status'=>'unsolved'))); $this->redirect($this->linker->link(array(), 5, true, array('status'=>'unsolved'), false, 'task'));
} }
else { else {
// Mark Quest as submitted // Mark Quest as submitted
$this->Quests->setQuestSubmitted($quest['id'], $character['id']); $this->Quests->setQuestSubmitted($quest['id'], $character['id']);
// Redirect // Redirect
$this->redirect($this->linker->link('Prolog', 5, true)); $this->redirect($this->linker->link(array(), 5, true, false, 'task'));
} }
} }
catch(\hhu\z\exceptions\SubmissionNotValidException $e) { catch(\hhu\z\exceptions\SubmissionNotValidException $e) {

View file

@ -1,8 +1,8 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: The Legend of Z\n" "Project-Id-Version: The Legend of Z\n"
"POT-Creation-Date: 2014-04-24 16:46+0100\n" "POT-Creation-Date: 2014-04-24 18:05+0100\n"
"PO-Revision-Date: 2014-04-24 16:46+0100\n" "PO-Revision-Date: 2014-04-24 18:06+0100\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
"Language: de_DE\n" "Language: de_DE\n"
@ -105,12 +105,12 @@ msgstr "Kommentar von %s am %s um %s Uhr"
msgid "Comment" msgid "Comment"
msgstr "Kommentar" msgstr "Kommentar"
#: questtypes/submit/html/submission.tpl:30 views/html/quests/quest.tpl:42 #: questtypes/submit/html/submission.tpl:30 views/html/quests/quest.tpl:45
#: views/html/quests/submissions.tpl:28 #: views/html/quests/submissions.tpl:28
msgid "solved" msgid "solved"
msgstr "Richtig!" msgstr "Richtig!"
#: questtypes/submit/html/submission.tpl:31 views/html/quests/quest.tpl:46 #: questtypes/submit/html/submission.tpl:31 views/html/quests/quest.tpl:50
#: views/html/quests/submissions.tpl:19 #: views/html/quests/submissions.tpl:19
msgid "unsolved" msgid "unsolved"
msgstr "Leider falsch!" msgstr "Leider falsch!"
@ -486,7 +486,7 @@ msgstr "Einstiegstext"
msgid "Wrong text" msgid "Wrong text"
msgstr "Text für falsche Antwort" msgstr "Text für falsche Antwort"
#: views/html/quests/create.tpl:40 views/html/quests/quest.tpl:55 #: views/html/quests/create.tpl:40 views/html/quests/quest.tpl:41
msgid "Task" msgid "Task"
msgstr "Aufgabe" msgstr "Aufgabe"
@ -502,12 +502,16 @@ msgstr "Filter anwenden"
msgid "Reset filters" msgid "Reset filters"
msgstr "Filter zurücksetzen" msgstr "Filter zurücksetzen"
#: views/html/quests/quest.tpl:43 #: views/html/quests/quest.tpl:11
msgid "Prolog"
msgstr "Prolog"
#: views/html/quests/quest.tpl:46
#, php-format #, php-format
msgid "Quest completed. You have earned %d XPs." msgid "Quest completed. You have earned %d XPs."
msgstr "Quest abgeschlossen. Du hast %d XP erhalten." msgstr "Quest abgeschlossen. Du hast %d XP erhalten."
#: views/html/quests/quest.tpl:61 #: views/html/quests/quest.tpl:62
msgid "Task already successfully solved" msgid "Task already successfully solved"
msgstr "Du hast die Aufgabe bereits erfolgreich gelöst" msgstr "Du hast die Aufgabe bereits erfolgreich gelöst"
@ -515,19 +519,15 @@ msgstr "Du hast die Aufgabe bereits erfolgreich gelöst"
msgid "Show answer" msgid "Show answer"
msgstr "Lösung anzeigen" msgstr "Lösung anzeigen"
#: views/html/quests/quest.tpl:65 #: views/html/quests/quest.tpl:74
msgid "Skip task" msgid "Epilog"
msgstr "Aufgabe überspringen" msgstr "Epilog"
#: views/html/quests/quest.tpl:71 #: views/html/quests/quest.tpl:100
msgid "continue"
msgstr "fortfahren"
#: views/html/quests/quest.tpl:78
msgid "Continuation" msgid "Continuation"
msgstr "Fortsetzung" msgstr "Fortsetzung"
#: views/html/quests/quest.tpl:84 views/html/quests/quest.tpl:97 #: views/html/quests/quest.tpl:106 views/html/quests/quest.tpl:119
msgid "Quest" msgid "Quest"
msgstr "Quest" msgstr "Quest"
@ -743,6 +743,12 @@ msgstr "Registrieren"
msgid "Roles" msgid "Roles"
msgstr "Rollen" msgstr "Rollen"
#~ msgid "Skip task"
#~ msgstr "Aufgabe überspringen"
#~ msgid "continue"
#~ msgstr "fortfahren"
#~ msgid "Character type" #~ msgid "Character type"
#~ msgstr "Charaktertyp" #~ msgstr "Charaktertyp"

View file

@ -119,7 +119,7 @@
} }
// Get Character answers // Get Character answers
if($this->request->getGetParam('show-answer') == 'true' || !$this->Quests->hasCharacterSolvedQuest($quest['id'], $character['id'])) if($this->request->getGetParam('show-answer') == 'true' || !$this->Quests->hasCharacterSolvedQuest($quest['id'], $character['id']) || $this->request->getGetParam('status') == 'solved')
{ {
foreach($choiceLists as &$list) { foreach($choiceLists as &$list) {
$list['answer'] = $this->Choiceinput->getCharacterSubmission($list['id'], $character['id']); $list['answer'] = $this->Choiceinput->getCharacterSubmission($list['id'], $character['id']);

View file

@ -181,7 +181,7 @@
$maxY = 0; $maxY = 0;
foreach($words as $index => &$word) foreach($words as $index => &$word)
{ {
if($this->request->getGetParam('show-answer') == 'true' || !$this->Quests->hasCharacterSolvedQuest($quest['id'], $character['id'])) { if($this->request->getGetParam('show-answer') == 'true' || !$this->Quests->hasCharacterSolvedQuest($quest['id'], $character['id']) || $this->request->getGetParam('status') == 'solved') {
$word['answer'] = $this->Crossword->getCharacterSubmission($word['id'], $character['id']); $word['answer'] = $this->Crossword->getCharacterSubmission($word['id'], $character['id']);
} }
// Insert word // Insert word

View file

@ -144,7 +144,7 @@
$drops = $this->Dragndrop->getDrops($dndField['quest_id']); $drops = $this->Dragndrop->getDrops($dndField['quest_id']);
// Get Character answers // Get Character answers
if($this->request->getGetParam('show-answer') == 'true' || !$this->Quests->hasCharacterSolvedQuest($quest['id'], $character['id'])) if($this->request->getGetParam('show-answer') == 'true' || !$this->Quests->hasCharacterSolvedQuest($quest['id'], $character['id']) || $this->request->getGetParam('status') == 'solved')
{ {
foreach($drops as &$drop) foreach($drops as &$drop)
{ {

View file

@ -171,7 +171,7 @@
// Get previous user answers // Get previous user answers
if($this->request->getGetParam('show-answer') == 'true' || !$this->Quests->hasCharacterSolvedQuest($quest['id'], $character['id'])) if($this->request->getGetParam('show-answer') == 'true' || !$this->Quests->hasCharacterSolvedQuest($quest['id'], $character['id']) || $this->request->getGetParam('status') == 'solved')
{ {
foreach($question['answers'] as &$answer) { foreach($question['answers'] as &$answer) {
$answer['useranswer'] = $this->Multiplechoice->getCharacterSubmission($answer['id'], $character['id']); $answer['useranswer'] = $this->Multiplechoice->getCharacterSubmission($answer['id'], $character['id']);

View file

@ -123,7 +123,7 @@
// Get Character answers // Get Character answers
$regexs = null; $regexs = null;
if(!$solved || $this->request->getGetParam('show-answer') == 'true') if(!$solved || $this->request->getGetParam('show-answer') == 'true' || $this->request->getGetParam('status') == 'solved')
{ {
$regexs = $this->Textinput->getTextinputRegexs($quest['id']); $regexs = $this->Textinput->getTextinputRegexs($quest['id']);
foreach($regexs as &$regex) { foreach($regexs as &$regex) {

View file

@ -6,12 +6,12 @@
<?=$questgroupshierarchypath?> <?=$questgroupshierarchypath?>
<h1><?=$quest['title']?></h1> <h1><?=$quest['title']?></h1>
<?php if(count($questtexts) > 0) : ?> <?php if(array_key_exists('Prolog', $questtexts) && count($questtexts['Prolog']) > 0) : ?>
<section> <section>
<h1 id="questtext"><?=$questtexttype['type']?></h1> <h1 id="questtext"><?=_('Prolog')?></h1>
<div id="qtextbox"> <div id="qtextbox">
<?php $mediaShown = false; ?> <?php $mediaShown = false; ?>
<?php foreach($questtexts as &$questtext) : ?> <?php foreach($questtexts['Prolog'] as &$questtext) : ?>
<p class="qtext cf"> <p class="qtext cf">
<?php if(array_key_exists('media', $questtext)) : ?> <?php if(array_key_exists('media', $questtext)) : ?>
<a href="<?=$linker->link(array('media','seminary',$seminary['url'],$media['url']))?>"><img src="<?=$linker->link(array('media','seminary',$seminary['url'],$questtext['media']['url']))?>" /></a> <a href="<?=$linker->link(array('media','seminary',$seminary['url'],$media['url']))?>"><img src="<?=$linker->link(array('media','seminary',$seminary['url'],$questtext['media']['url']))?>" /></a>
@ -36,43 +36,65 @@
</section> </section>
<?php endif ?> <?php endif ?>
<?php if(!is_null($queststatus)) : ?> <?php if(!is_null($task)) : ?>
<?php if($queststatus == 'solved') : ?>
<section class="success">
<p class="fwb"><i class="fa fa-check-circle fa-fw"></i><?=_('solved')?></p>
<p><small><?=sprintf(_('Quest completed. You have earned %d XPs.'), $quest['xps'])?></small></p>
<?php elseif($queststatus == 'unsolved') : ?>
<section class="error">
<p class="fwb"><i class="fa fa-times-circle fa-fw"></i><?=_('unsolved')?></p>
<p><small><?=\hhu\z\Utils::t($quest['wrong_text'])?></small></p>
<?php endif ?>
</section>
<?php endif ?>
<?php if($questtexttype['type'] == 'Prolog') : ?>
<section> <section>
<?php if(!is_null($task)) : ?>
<h1 id="task"><?=_('Task')?></h1> <h1 id="task"><?=_('Task')?></h1>
<?php if(!is_null($queststatus)) : ?>
<?php if($queststatus == 'solved') : ?>
<div class="success">
<p class="fwb"><i class="fa fa-check-circle fa-fw"></i><?=_('solved')?></p>
<p><small><?=sprintf(_('Quest completed. You have earned %d XPs.'), $quest['xps'])?></small></p>
</div>
<?php elseif($queststatus == 'unsolved') : ?>
<div class="error">
<p class="fwb"><i class="fa fa-times-circle fa-fw"></i><?=_('unsolved')?></p>
<p><small><?=\hhu\z\Utils::t($quest['wrong_text'])?></small></p>
</div>
<?php endif ?>
<?php endif ?>
<?php if($queststatus != 'solved') : ?>
<p><?=$t->t($quest['task'])?></p> <p><?=$t->t($quest['task'])?></p>
<?=$task?> <?=$task?>
<?php if($solved) : ?> <?php if($solved && empty($queststatus)) : ?>
<div class="solvdmsg"> <div class="solvdmsg">
<p><?=_('Task already successfully solved')?>: <p><?=_('Task already successfully solved')?>:
<nav class="admin"> <nav class="admin">
<?php if($solved) : ?>
<li><a href="<?=$linker->link(null,0,false,array('show-answer'=>'true'),true,'task')?>"><?=_('Show answer')?></a></li> <li><a href="<?=$linker->link(null,0,false,array('show-answer'=>'true'),true,'task')?>"><?=_('Show answer')?></a></li>
<li><a href="<?=$linker->link('Epilog',5)?>"><?=_('Skip task')?></a></l>
<?php endif ?>
</nav> </nav>
</div> </div>
<?php endif ?> <?php endif ?>
<?php elseif($hasEpilog) : ?>
<p><a href="<?=$linker->link('Epilog',5)?>"><?=_('continue')?></a></p>
<?php endif ?> <?php endif ?>
</section> </section>
<?php endif ?> <?php endif ?>
<?php if(array_key_exists('Epilog', $questtexts) && count($questtexts['Epilog']) > 0) : ?>
<section>
<h1 id="questtext"><?=_('Epilog')?></h1>
<div id="qtextbox">
<?php foreach($questtexts['Epilog'] as &$questtext) : ?>
<p class="qtext cf">
<?php if(array_key_exists('media', $questtext)) : ?>
<a href="<?=$linker->link(array('media','seminary',$seminary['url'],$media['url']))?>"><img src="<?=$linker->link(array('media','seminary',$seminary['url'],$questtext['media']['url']))?>" /></a>
<?php endif ?>
<?=\hhu\z\Utils::t($questtext['text'])?>
</p>
<?php if(count($questtext['relatedQuestsgroups']) > 0 || !empty($questtext['abort_text'])) : ?>
<ul>
<?php foreach($questtext['relatedQuestsgroups'] as &$relatedQuestgroup) : ?>
<li><a href="<?=$linker->link(array('questgroups','questgroup',$seminary['url'],$relatedQuestgroup['url']))?>"><?=$relatedQuestgroup['entry_text']?></a></li>
<?php endforeach ?>
<?php if(!empty($questtext['abort_text'])) : ?>
<li><a href="<?=$linker->link(array('quest',$seminary['url'],$relatedquesttext['quest']['questgroup_url'],$relatedquesttext['quest']['url'],$relatedquesttext['type_url']),1)?>"><?=$questtext['abort_text']?></a></li>
<?php endif ?>
</ul>
<?php endif ?>
<?php endforeach ?>
</div>
</section>
<?php endif ?>
<?php if(!is_null($nextquests) || !is_null($nextquestgroup)) : ?> <?php if(!is_null($nextquests) || !is_null($nextquestgroup)) : ?>
<section> <section>
<h1><?=_('Continuation')?></h1> <h1><?=_('Continuation')?></h1>