From ada39e3f1e012bbdc700c480741184a84b1a944e Mon Sep 17 00:00:00 2001 From: coderkun Date: Thu, 24 Apr 2014 18:06:57 +0200 Subject: [PATCH] update Quest page: show everything on one page --- app/QuesttypeController.inc | 53 ----------- controllers/QuestsController.inc | 84 ++++++++---------- locale/de_DE/LC_MESSAGES/The Legend of Z.mo | Bin 10124 -> 10100 bytes locale/de_DE/LC_MESSAGES/The Legend of Z.po | 38 ++++---- .../ChoiceinputQuesttypeController.inc | 2 +- .../CrosswordQuesttypeController.inc | 2 +- .../DragndropQuesttypeController.inc | 2 +- .../MultiplechoiceQuesttypeController.inc | 2 +- .../TextinputQuesttypeController.inc | 2 +- views/html/quests/quest.tpl | 70 ++++++++++----- 10 files changed, 111 insertions(+), 144 deletions(-) diff --git a/app/QuesttypeController.inc b/app/QuesttypeController.inc index 9b13512e..fadfded0 100644 --- a/app/QuesttypeController.inc +++ b/app/QuesttypeController.inc @@ -303,59 +303,6 @@ $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'))); - } - } ?> diff --git a/controllers/QuestsController.inc b/controllers/QuestsController.inc index b0804a89..8a60b3bc 100644 --- a/controllers/QuestsController.inc +++ b/controllers/QuestsController.inc @@ -195,39 +195,29 @@ // Set status “entered” $this->Quests->setQuestEntered($quest['id'], $character['id']); - // Get (related) Questtext - $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']; - } - } + // Has Character solved quest? + $solved = $this->Quests->hasCharacterSolvedQuest($quest['id'], $character['id']); // Get Questtexts - if(is_null($questtexttypeUrl)) { - $questtexttypeUrl = 'Prolog'; + $questtexts = array(); + $questtexts['Prolog'] = $this->Questtexts->getQuesttextsOfQuest($quest['id'], 'Prolog'); + if($solved) { + $questtexts['Epilog'] = $this->Questtexts->getQuesttextsOfQuest($quest['id'], 'Epilog'); } - $questtexttypes = $this->Questtexts->getQuesttexttypes(); - 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) + foreach($questtexts as &$questtextList) { - // Questtext media - if(!is_null($questtext['questsmedia_id'])) { - $questtext['media'] = $this->Media->getSeminaryMediaById($questtext['questsmedia_id']); - } + foreach($questtextList as &$questtext) + { + // Questtext media + if(!is_null($questtext['questsmedia_id'])) { + $questtext['media'] = $this->Media->getSeminaryMediaById($questtext['questsmedia_id']); + } - // Related Questgroups - $questtext['relatedQuestsgroups'] = $this->Questgroups->getRelatedQuestsgroupsOfQuesttext($questtext['id']); + // Related Questgroups + $questtext['relatedQuestsgroups'] = $this->Questgroups->getRelatedQuestsgroupsOfQuesttext($questtext['id']); + } } - // Has Epilog? - $hasEpilog = ($this->Questtexts->getQuesttextCountOfQuest($quest['id'], 'Epilog') > 0); - // Quest status $questStatus = $this->request->getGetParam('status'); @@ -239,29 +229,31 @@ // Task $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 - $questtype = $this->Questtypes->getQuesttypeById($quest['questtype_id']); - - // 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']); - } + // Mark Quest as solved + $this->Quests->setQuestSolved($quest['id'], $character['id']); + $solved = true; } - // Has Character solved quest? - $solved = $this->Quests->hasCharacterSolvedQuest($quest['id'], $character['id']); + // Get (related) Questtext + $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 $nextQuests = null; $charactedHasChoosenNextQuest = false; $nextQuestgroup = null; - if($questtexttypeUrl == 'Epilog' || (is_null($questtype['classname']) && !$hasEpilog)) + if($solved) { // Next Quest $nextQuests = $this->Quests->getNextQuests($quest['id']); @@ -296,9 +288,9 @@ // Pass data to view $this->set('seminary', $seminary); $this->set('questgroup', $questgroup); - $this->set('questtexttype', $questtexttype); + //$this->set('questtexttype', $questtexttype); $this->set('questtexts', $questtexts); - $this->set('hasEpilog', $hasEpilog); + //$this->set('hasEpilog', $hasEpilog); $this->set('quest', $quest); $this->set('queststatus', $questStatus); $this->set('relatedquesttext', $relatedQuesttext); @@ -610,7 +602,7 @@ $this->Quests->setQuestSolved($quest['id'], $character['id']); // 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) { @@ -618,14 +610,14 @@ $this->Quests->setQuestUnsolved($quest['id'], $character['id']); // 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 { // Mark Quest as submitted $this->Quests->setQuestSubmitted($quest['id'], $character['id']); // 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) { diff --git a/locale/de_DE/LC_MESSAGES/The Legend of Z.mo b/locale/de_DE/LC_MESSAGES/The Legend of Z.mo index df2c161487e13f364061d59f3851f83fc6cedc1f..90a7e3fd3d8faa04c555988aaf8e3f9cd788a9cf 100644 GIT binary patch delta 2988 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 Yyv^;(GRz!l`9&pZi5W$c7pPqU027cI6951J diff --git a/locale/de_DE/LC_MESSAGES/The Legend of Z.po b/locale/de_DE/LC_MESSAGES/The Legend of Z.po index 445f46f9..161d34d7 100644 --- a/locale/de_DE/LC_MESSAGES/The Legend of Z.po +++ b/locale/de_DE/LC_MESSAGES/The Legend of Z.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: The Legend of Z\n" -"POT-Creation-Date: 2014-04-24 16:46+0100\n" -"PO-Revision-Date: 2014-04-24 16:46+0100\n" +"POT-Creation-Date: 2014-04-24 18:05+0100\n" +"PO-Revision-Date: 2014-04-24 18:06+0100\n" "Last-Translator: \n" "Language-Team: \n" "Language: de_DE\n" @@ -105,12 +105,12 @@ msgstr "Kommentar von %s am %s um %s Uhr" msgid "Comment" 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 msgid "solved" 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 msgid "unsolved" msgstr "Leider falsch!" @@ -486,7 +486,7 @@ msgstr "Einstiegstext" msgid "Wrong text" 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" msgstr "Aufgabe" @@ -502,12 +502,16 @@ msgstr "Filter anwenden" msgid "Reset filters" 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 msgid "Quest completed. You have earned %d XPs." 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" 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" msgstr "Lösung anzeigen" -#: views/html/quests/quest.tpl:65 -msgid "Skip task" -msgstr "Aufgabe überspringen" +#: views/html/quests/quest.tpl:74 +msgid "Epilog" +msgstr "Epilog" -#: views/html/quests/quest.tpl:71 -msgid "continue" -msgstr "fortfahren" - -#: views/html/quests/quest.tpl:78 +#: views/html/quests/quest.tpl:100 msgid "Continuation" 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" msgstr "Quest" @@ -743,6 +743,12 @@ msgstr "Registrieren" msgid "Roles" msgstr "Rollen" +#~ msgid "Skip task" +#~ msgstr "Aufgabe überspringen" + +#~ msgid "continue" +#~ msgstr "fortfahren" + #~ msgid "Character type" #~ msgstr "Charaktertyp" diff --git a/questtypes/choiceinput/ChoiceinputQuesttypeController.inc b/questtypes/choiceinput/ChoiceinputQuesttypeController.inc index d7b2556d..a7edf905 100644 --- a/questtypes/choiceinput/ChoiceinputQuesttypeController.inc +++ b/questtypes/choiceinput/ChoiceinputQuesttypeController.inc @@ -119,7 +119,7 @@ } // 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) { $list['answer'] = $this->Choiceinput->getCharacterSubmission($list['id'], $character['id']); diff --git a/questtypes/crossword/CrosswordQuesttypeController.inc b/questtypes/crossword/CrosswordQuesttypeController.inc index 9a2f7dcc..e5510786 100644 --- a/questtypes/crossword/CrosswordQuesttypeController.inc +++ b/questtypes/crossword/CrosswordQuesttypeController.inc @@ -181,7 +181,7 @@ $maxY = 0; 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']); } // Insert word diff --git a/questtypes/dragndrop/DragndropQuesttypeController.inc b/questtypes/dragndrop/DragndropQuesttypeController.inc index f3e973d7..4f359faa 100644 --- a/questtypes/dragndrop/DragndropQuesttypeController.inc +++ b/questtypes/dragndrop/DragndropQuesttypeController.inc @@ -144,7 +144,7 @@ $drops = $this->Dragndrop->getDrops($dndField['quest_id']); // 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) { diff --git a/questtypes/multiplechoice/MultiplechoiceQuesttypeController.inc b/questtypes/multiplechoice/MultiplechoiceQuesttypeController.inc index cb384167..09dbfe41 100644 --- a/questtypes/multiplechoice/MultiplechoiceQuesttypeController.inc +++ b/questtypes/multiplechoice/MultiplechoiceQuesttypeController.inc @@ -171,7 +171,7 @@ // 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) { $answer['useranswer'] = $this->Multiplechoice->getCharacterSubmission($answer['id'], $character['id']); diff --git a/questtypes/textinput/TextinputQuesttypeController.inc b/questtypes/textinput/TextinputQuesttypeController.inc index 11512432..aa666790 100644 --- a/questtypes/textinput/TextinputQuesttypeController.inc +++ b/questtypes/textinput/TextinputQuesttypeController.inc @@ -123,7 +123,7 @@ // Get Character answers $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']); foreach($regexs as &$regex) { diff --git a/views/html/quests/quest.tpl b/views/html/quests/quest.tpl index 3408da26..664d7d52 100644 --- a/views/html/quests/quest.tpl +++ b/views/html/quests/quest.tpl @@ -6,12 +6,12 @@

- 0) : ?> + 0) : ?>
-

+

- +

@@ -36,43 +36,65 @@

- - -
-

-

- -
-

-

- -
- - - +
-

+ + +
+

+

+
+ +
+

+

+
+ + + +

t($quest['task'])?>

- +

:

- -

+ 0) : ?> +
+

+
+ +

+ + + + +

+ 0 || !empty($questtext['abort_text'])) : ?> +
    + +
  • + + +
  • + +
+ + +
+
+ +