diff --git a/controllers/QuestgroupsController.inc b/controllers/QuestgroupsController.inc index b89c98a6..8abef8aa 100644 --- a/controllers/QuestgroupsController.inc +++ b/controllers/QuestgroupsController.inc @@ -87,15 +87,20 @@ $hierarchy['questgroups'] = $this->Questgroups->getQuestgroupsForHierarchy($hierarchy['id'], $questgroup['id']); // Get additional data - for($i=0; $i &$group) { - // Get Character XPs - $hierarchy['questgroups'][$i]['character_xps'] = $this->Questgroups->getAchievedXPsForQuestgroup($hierarchy['questgroups'][$i]['id'], $character['id']); - // Check permission of Questgroups - if($i >= 1) { - $hierarchy['questgroups'][$i]['access'] = $this->Questgroups->hasCharacterSolvedQuestgroup($hierarchy['questgroups'][$i-1]['id'], $character['id']); + if($i >= 1) + { + if(!$this->Questgroups->hasCharacterSolvedQuestgroup($hierarchy['questgroups'][$i-1]['id'], $character['id'])) + { + $hierarchy['questgroups'] = array_slice($hierarchy['questgroups'], 0, $i); + break; + } } + + // Get Character XPs + $group['character_xps'] = $this->Questgroups->getAchievedXPsForQuestgroup($group['id'], $character['id']); } } } @@ -115,23 +120,40 @@ // Get Quests - $quests = null; + $quests = array(); if(count($childQuestgroupshierarchy) == 0) { - $quests = $this->Quests->getQuestsForQuestgroup($questgroup['id']); - foreach($quests as $i => &$quest) - { - // Set status - $quest['solved'] = $this->Quests->hasCharacterSolvedQuest($quest['id'], $character['id']); - - // Check permission - if($i > 0) { - $quest['access'] = $this->Quests->hasCharacterSolvedQuest($quests[$i-1]['id'], $character['id']); + $currentQuest = null; + do { + // Get next Quest + if(is_null($currentQuest)) { + $currentQuest = $this->Quests->getFirstQuestOfQuestgroup($questgroup['id']); + } + else { + $nextQuests = $this->Quests->getNextQuests($currentQuest['id']); + $currentQuest = null; + foreach($nextQuests as &$nextQuest) { + if($this->Quests->hasCharacterEnteredQuest($nextQuest['id'], $character['id'])) { + $currentQuest = $nextQuest; + break; + } + } } - // Attach related Questgroups - $quest['relatedQuestgroups'] = $this->Questgroups->getRelatedQuestsgroupsOfQuest($quest['id']); + // Add additional data + if(!is_null($currentQuest)) + { + // Set status + $currentQuest['solved'] = $this->Quests->hasCharacterSolvedQuest($currentQuest['id'], $character['id']); + + // Attach related Questgroups + $currentQuest['relatedQuestgroups'] = $this->Questgroups->getRelatedQuestsgroupsOfQuest($currentQuest['id']); + + // Add Quest to Quests + $quests[] = $currentQuest; + } } + while(!is_null($currentQuest) && $currentQuest['solved']); } diff --git a/controllers/QuestsController.inc b/controllers/QuestsController.inc index f0829c54..9750a83c 100644 --- a/controllers/QuestsController.inc +++ b/controllers/QuestsController.inc @@ -124,6 +124,9 @@ } } + // Set status “entered” + $this->Quests->setQuestEntered($quest['id'], $character['id']); + // Get (related) Questtext $relatedQuesttext = $this->Questtexts->getRelatedQuesttextForQuestgroup($questgroup['id']); if(!empty($relatedQuesttext)) { @@ -138,7 +141,7 @@ $questtexttypes = $this->Questtexts->getQuesttexttypes(); $questtexttypes = array_map(function($t) { return $t['url']; }, $questtexttypes); $questtextCount = $this->Questtexts->getQuesttextsCountForQuest($quest['id'], $questtexttypeUrl); - if(/*$questtextCount > 0 && */in_array($questtexttypeUrl, $questtexttypes)) + if(in_array($questtexttypeUrl, $questtexttypes)) { $questtextPos = max(intval($questtextPos), 1); try { diff --git a/controllers/SeminariesController.inc b/controllers/SeminariesController.inc index bf935d3d..61b83a67 100644 --- a/controllers/SeminariesController.inc +++ b/controllers/SeminariesController.inc @@ -103,6 +103,16 @@ // Get additional data foreach($hierarchy['questgroups'] as $i => &$questgroup) { + // Check permission of Questgroups + if($i >= 1) + { + if(!$this->Questgroups->hasCharacterSolvedQuestgroup($hierarchy['questgroups'][$i-1]['id'], $character['id'])) + { + $hierarchy['questgroups'] = array_slice($hierarchy['questgroups'], 0, $i); + break; + } + } + // Get first Questgroup text $text = $this->Questgroups->getFirstQuestgroupText($questgroup['id']); if(!empty($text)) @@ -114,11 +124,6 @@ // Get Character XPs $hierarchy['questgroups'][$i]['character_xps'] = $this->Questgroups->getAchievedXPsForQuestgroup($questgroup['id'], $character['id']); - // Check permission of Questgroups - if($i >= 1) { - $questgroup['access'] = $this->Questgroups->hasCharacterSolvedQuestgroup($hierarchy['questgroups'][$i-1]['id'], $character['id']); - } - // Get Media $questgroup['picture'] = null; try { 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 1192a653..52384406 100644 Binary files a/locale/de_DE/LC_MESSAGES/The Legend of Z.mo and b/locale/de_DE/LC_MESSAGES/The Legend of Z.mo differ 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 56d1ec82..a99e4954 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-03-22 21:17+0100\n" -"PO-Revision-Date: 2014-03-22 21:18+0100\n" +"POT-Creation-Date: 2014-03-30 04:06+0100\n" +"PO-Revision-Date: 2014-03-30 04:06+0100\n" "Last-Translator: \n" "Language-Team: \n" "Language: de_DE\n" @@ -23,25 +23,20 @@ msgstr "Fehler" #: ../../../views/html/charactergroups/group.tpl:3 #: ../../../views/html/charactergroups/groupsgroup.tpl:3 #: ../../../views/html/charactergroups/index.tpl:3 -#: ../../../views/html/characters/character.tpl:19 -#: ../../../views/html/seminaries/seminary.tpl:42 +#: ../../../views/html/characters/character.tpl:50 +#: ../../../views/html/seminaries/seminary.tpl:44 msgid "Character Groups" msgstr "Charaktergruppen" -#: ../../../views/html/charactergroups/group.tpl:12 -#: ../../../views/html/characters/character.tpl:2 +#: ../../../views/html/charactergroups/group.tpl:25 #: ../../../views/html/characters/index.tpl:2 -#: ../../../views/html/seminaries/seminary.tpl:41 +#: ../../../views/html/seminaries/seminary.tpl:43 #: ../../../views/html/users/user.tpl:11 msgid "Characters" msgstr "Charaktere" -#: ../../../views/html/charactergroups/group.tpl:15 -msgid "Group Leader" -msgstr "Gruppenleiter" - -#: ../../../views/html/charactergroups/group.tpl:21 -#: ../../../views/html/questgroups/questgroup.tpl:35 +#: ../../../views/html/charactergroups/group.tpl:63 +#: ../../../views/html/questgroups/questgroup.tpl:43 msgid "Quests" msgstr "Quests" @@ -51,7 +46,7 @@ msgid "Character Groups Quests" msgstr "Charactergruppen-Quests" #: ../../../views/html/charactergroupsquests/quest.tpl:12 -#: ../../../views/html/seminaries/seminary.tpl:2 +#: ../../../views/html/seminaries/seminary.tpl:8 msgid "Description" msgstr "Beschreibung" @@ -67,29 +62,25 @@ msgstr "Gewonnene Quest" msgid "Lost Quest" msgstr "Verlorene Quest" -#: ../../../views/html/characters/character.tpl:7 +#: ../../../views/html/characters/character.tpl:14 #: ../../../views/html/characters/index.tpl:6 #: ../../../views/html/users/user.tpl:14 msgid "Level" msgstr "Level" -#: ../../../views/html/characters/character.tpl:8 -msgid "User" -msgstr "Benutzer" - #: ../../../views/html/introduction/index.tpl:1 #: ../../../views/html/menu/index.tpl:2 msgid "Introduction" msgstr "Einführung" -#: ../../../views/html/menu/index.tpl:3 ../../../views/html/users/create.tpl:1 +#: ../../../views/html/menu/index.tpl:4 ../../../views/html/users/create.tpl:1 #: ../../../views/html/users/delete.tpl:1 ../../../views/html/users/edit.tpl:1 #: ../../../views/html/users/index.tpl:1 ../../../views/html/users/login.tpl:1 #: ../../../views/html/users/user.tpl:1 msgid "Users" msgstr "Benutzer" -#: ../../../views/html/menu/index.tpl:4 +#: ../../../views/html/menu/index.tpl:5 #: ../../../views/html/seminaries/create.tpl:1 #: ../../../views/html/seminaries/delete.tpl:1 #: ../../../views/html/seminaries/edit.tpl:1 @@ -97,49 +88,43 @@ msgstr "Benutzer" msgid "Seminaries" msgstr "Kurse" -#: ../../../views/html/menu/index.tpl:10 ../../../views/html/users/login.tpl:2 +#: ../../../views/html/menu/index.tpl:11 ../../../views/html/users/login.tpl:2 #: ../../../views/html/users/login.tpl:11 msgid "Login" msgstr "Login" -#: ../../../views/html/menu/index.tpl:12 +#: ../../../views/html/menu/index.tpl:13 msgid "Logout" msgstr "Logout" -#: ../../../views/html/questgroups/questgroup.tpl:26 -#: ../../../views/html/questgroups/questgroup.tpl:51 -#: ../../../views/html/seminaries/seminary.tpl:28 -msgid "locked" -msgstr "gesperrt" - -#: ../../../views/html/quests/quest.tpl:20 -#: ../../../views/html/quests/submissions.tpl:27 +#: ../../../views/html/quests/quest.tpl:15 +#: ../../../views/html/quests/submissions.tpl:22 msgid "solved" msgstr "gelöst" -#: ../../../views/html/quests/quest.tpl:22 -#: ../../../views/html/quests/submissions.tpl:18 +#: ../../../views/html/quests/quest.tpl:17 +#: ../../../views/html/quests/submissions.tpl:13 msgid "unsolved" msgstr "ungelöst" -#: ../../../views/html/quests/quest.tpl:59 +#: ../../../views/html/quests/quest.tpl:52 msgid "Task" msgstr "Aufgabe" -#: ../../../views/html/quests/quest.tpl:67 +#: ../../../views/html/quests/quest.tpl:60 msgid "Task successfully solved" msgstr "Du hast die Aufgabe erfolgreich gelöst" -#: ../../../views/html/quests/quest.tpl:67 +#: ../../../views/html/quests/quest.tpl:60 msgid "Show correct answer" msgstr "Richtige Lösung anzeigen" -#: ../../../views/html/quests/quest.tpl:68 +#: ../../../views/html/quests/quest.tpl:61 msgid "Go on" msgstr "Hier geht es weiter" -#: ../../../views/html/quests/quest.tpl:73 -#: ../../../views/html/quests/quest.tpl:75 +#: ../../../views/html/quests/quest.tpl:66 +#: ../../../views/html/quests/quest.tpl:68 msgid "Quest" msgstr "Quest" @@ -165,7 +150,7 @@ msgid "create" msgstr "erstellen" #: ../../../views/html/seminaries/delete.tpl:2 -#: ../../../views/html/seminaries/seminary.tpl:38 +#: ../../../views/html/seminaries/seminary.tpl:40 msgid "Delete seminary" msgstr "Kurs löschen" @@ -185,7 +170,7 @@ msgid "cancel" msgstr "abbrechen" #: ../../../views/html/seminaries/edit.tpl:2 -#: ../../../views/html/seminaries/seminary.tpl:37 +#: ../../../views/html/seminaries/seminary.tpl:39 msgid "Edit seminary" msgstr "Kurs bearbeiten" @@ -199,7 +184,7 @@ msgid "Create new seminary" msgstr "Neuen Kurs erstellen" #: ../../../views/html/seminaries/index.tpl:10 -#: ../../../views/html/seminaries/seminary.tpl:45 +#: ../../../views/html/seminaries/seminary.tpl:47 #, php-format msgid "created by %s on %s" msgstr "erstellt von %s am %s" @@ -254,6 +239,15 @@ msgstr "registriert am %s" msgid "Roles" msgstr "Rollen" +#~ msgid "locked" +#~ msgstr "gesperrt" + +#~ msgid "Group Leader" +#~ msgstr "Gruppenleiter" + +#~ msgid "User" +#~ msgstr "Benutzer" + #~ msgid "as" #~ msgstr "als" diff --git a/models/QuestgroupsModel.inc b/models/QuestgroupsModel.inc index f933c3da..33a7d1b0 100644 --- a/models/QuestgroupsModel.inc +++ b/models/QuestgroupsModel.inc @@ -256,11 +256,34 @@ $questgroup = $this->getQuestgroupById($questgroupId); // Chack all Quests - $quests = $this->Quests->getQuestsForQuestgroup($questgroup['id']); - foreach($quests as &$quest) { - if(!$this->Quests->hasCharacterSolvedQuest($quest['id'], $characterId)) { + $currentQuest = $this->Quests->getFirstQuestOfQuestgroup($questgroup['id']); + if(!is_null($currentQuest)) + { + if(!$this->Quests->hasCharacterSolvedQuest($currentQuest['id'], $characterId)) { return false; } + + // Get next Quests + while(!is_null($currentQuest) && !empty($nextQuests = $this->Quests->getNextQuests($currentQuest['id']))) + { + // Get choosed Quest + $currentQuest = null; + foreach($nextQuests as &$nextQuest) { + if($this->Quests->hasCharacterEnteredQuest($nextQuest['id'], $characterId)) { + $currentQuest = $nextQuest; + } + } + + // Check Quest + if(is_null($currentQuest)) { + return false; + } + + // Check status + if(!$this->Quests->hasCharacterSolvedQuest($currentQuest['id'], $characterId)) { + return false; + } + } } // Check all child Questgroups @@ -328,7 +351,7 @@ * sub-Questgroups. * * @param int $questgroupId ID of Questgroup - * @return Sum of XPs + * @return int Sum of XPs */ public function getAchievableXPsForQuestgroup($questgroupId) { @@ -340,16 +363,9 @@ $questgroup['hierarchy'] = $this->Questgroupshierarchy->getHierarchyForQuestgroup($questgroup['id']); // Quests of current Questgroup - $quests = $this->Quests->getQuestsForQuestgroup($questgroup['id']); - foreach($quests as &$quest) - { - $xps += $quest['xps']; - - // Related Questgroups - $relatedQuestgroups = $this->getRelatedQuestsgroupsOfQuest($quest['id']); - foreach($relatedQuestgroups as $group) { - $xps += $this->getAchievableXPsForQuestgroup($group['id']); - } + $quest = $this->Quests->getFirstQuestOfQuestgroup($questgroup['id']); + if(!is_null($quest)) { + $xps += $this->getAchievableXPsForQuest($quest); } // XPs of child Questgroups @@ -372,13 +388,45 @@ } + /** + * Summarize XPs of the given Quest, its following Quests and + * its related Questgroups. + * + * @param array $quest Quest to summarize XPs for + * @return int Sum of XPs + */ + public function getAchievableXPsForQuest($quest) + { + // XPs for the given Quest + $xps = $quest['xps']; + + // Related Questgroups + $relatedQuestgroups = $this->getRelatedQuestsgroupsOfQuest($quest['id']); + foreach($relatedQuestgroups as &$relatedQuestgroup) { + $xps += $this->getAchievableXPsForQuestgroup($relatedQuestgroup['id']); + } + + // Next Quests + $nextQuests = $this->Quests->getNextQuests($quest['id']); + $nextXPs = array(0); + foreach($nextQuests as &$nextQuest) + { + $nextXPs[] = $this->getAchievableXPsForQuest($nextQuest); + } + $xps += max($nextXPs); + + + return $xps; + } + + /** * Summarize XPs of all Quests for a Questgroup and its * sub-Questgroups solved by a Character. * * @param int $questgroupId ID of Questgroup * @param int $characterId ID of Character - * @return Sum of XPs + * @return int Sum of XPs */ public function getAchievedXPsForQuestgroup($questgroupId, $characterId) { @@ -389,18 +437,9 @@ $questgroup = $this->getQuestgroupById($questgroupId); // Quests of current Questgroup - $quests = $this->Quests->getQuestsForQuestgroup($questgroup['id']); - foreach($quests as &$quest) - { - if($this->Quests->hasCharacterSolvedQuest($quest['id'], $characterId)) { - $xps += $quest['xps']; - } - - // Related Questgroups - $relatedQuestgroups = $this->getRelatedQuestsgroupsOfQuest($quest['id']); - foreach($relatedQuestgroups as $group) { - $xps += $this->getAchievedXPsForQuestgroup($group['id'], $characterId); - } + $quest = $this->Quests->getFirstQuestOfQuestgroup($questgroup['id']); + if(!is_null($quest)) { + $xps += $this->getAchievedXPsForQuest($quest, $characterId); } // XPs of child Questgroups @@ -423,6 +462,47 @@ } + /** + * Summarize XPs of the given Quest, its following Quests and + * its related Questgroups solved by a Character. + * + * @param int $quest Quest to summarize XPs for + * @param int $characterId ID of Character + * @return int Sum of XPs + */ + public function getAchievedXPsForQuest($quest, $characterId) + { + $xps = 0; + + // XPs for the given Quest + if($this->Quests->hasCharacterSolvedQuest($quest['id'], $characterId)) + { + $xps += $quest['xps']; + + // Next Quests + $nextQuests = $this->Quests->getNextQuests($quest['id']); + foreach($nextQuests as &$nextQuest) + { + if($this->Quests->hasCharacterEnteredQuest($nextQuest['id'], $characterId)) + { + $xps += $this->getAchievedXPsForQuest($nextQuest, $characterId); + break; + } + } + } + + // Related Questgroups + $relatedQuestgroups = $this->getRelatedQuestsgroupsOfQuest($quest['id']); + foreach($relatedQuestgroups as &$relatedQuestgroup) { + $xps += $this->getAchievedXPsForQuestgroup($relatedQuestgroup['id'], $characterId); + } + + + // Return summarized XPs + return $xps; + } + + /** diff --git a/models/QuestsModel.inc b/models/QuestsModel.inc index c09a0e03..7b8ed968 100644 --- a/models/QuestsModel.inc +++ b/models/QuestsModel.inc @@ -19,6 +19,24 @@ */ class QuestsModel extends \hhu\z\Model { + /** + * Quest-status: Entered + * + * @var int; + */ + const QUEST_STATUS_ENTERED = 1; + /** + * Quest-status: Solved + * + * @var int; + */ + const QUEST_STATUS_SOLVED = 0; + /** + * Quest-status: Unsolved + * + * @var int; + */ + const QUEST_STATUS_UNSOLVED = -1; @@ -34,45 +52,6 @@ - /** - * Get all Quests for the given Questgroup. - * - * @param int $questgroupId ID of a Questgroup - * @return array Quests of the given Questgroup - */ - public function getQuestsForQuestgroup($questgroupId) - { - $quests = array(); - - // Get first Quest - $quest = $this->db->query( - 'SELECT id, questtype_id, title, url, xps, task '. - 'FROM quests '. - 'LEFT JOIN quests_previousquests ON quests_previousquests.quest_id = quests.id '. - 'WHERE questgroup_id = ? AND quests_previousquests.previous_quest_id IS NULL', - 'i', - $questgroupId - ); - if(empty($quest)) { - return $quests; - } - $quest = $quest[0]; - array_push($quests, $quest); - - // Get next Quests - // TODO Multiple next Quests - while(($nextQuests = $this->getNextQuests($quest['id'])) != null) - { - $quest = $nextQuests[0]; - array_push($quests, $quest); - } - - - // Return Quests - return $quests; - } - - /** * Get a Quest and its data by its URL. * @@ -127,6 +106,31 @@ } + /** + * Get the first Quest of a Qusetgroup. + * + * @param int $questId ID of Questgroup + * @return array Data of first Quest + */ + public function getFirstQuestOfQuestgroup($questgroupId) + { + $data = $this->db->query( + 'SELECT id, questtype_id, title, url, xps, task '. + 'FROM quests '. + 'LEFT JOIN quests_previousquests ON quests_previousquests.quest_id = quests.id '. + 'WHERE questgroup_id = ? AND quests_previousquests.previous_quest_id IS NULL', + 'i', + $questgroupId + ); + if(!empty($data)) { + return $data[0]; + } + + + return null; + } + + /** * Get Quests that follow-up a Quest. * @@ -167,6 +171,18 @@ } + /** + * Mark a Quest as entered for a Character. + * + * @param int $questId ID of Quest to mark as entered + * @param int $characterId ID of Character that entered the Quest + */ + public function setQuestEntered($questId, $characterId) + { + $this->setQuestStatus($questId, $characterId, static::QUEST_STATUS_ENTERED); + } + + /** * Mark a Quest as solved for a Character. * @@ -175,16 +191,7 @@ */ public function setQuestSolved($questId, $characterId) { - $this->db->query( - 'INSERT INTO quests_characters '. - '(quest_id, character_id, status) '. - 'VALUES '. - '(?, ?, ?)', - 'iii', - $questId, - $characterId, - 0 - ); + $this->setQuestStatus($questId, $characterId, static::QUEST_STATUS_SOLVED); } @@ -196,16 +203,31 @@ */ public function setQuestUnsolved($questId, $characterId) { - $this->db->query( - 'INSERT INTO quests_characters '. - '(quest_id, character_id, status) '. - 'VALUES '. - '(?, ?, ?)', - 'iii', + $this->setQuestStatus($questId, $characterId, static::QUEST_STATUS_UNSOLVED); + } + + + /** + * Determine if the given Character has entered a Quest. + * + * @param int $questId ID of Quest to check + * @param int $characterId ID of Character to check + * @result boolean Whether Character has entered the Quest or not + */ + public function hasCharacterEnteredQuest($questId, $characterId) + { + $count = $this->db->query( + 'SELECT count(id) AS c '. + 'FROM quests_characters '. + 'WHERE quest_id = ? AND character_id = ? AND status IN (?,?,?)', + 'iiiii', $questId, $characterId, - -1 + static::QUEST_STATUS_ENTERED, static::QUEST_STATUS_SOLVED, static::QUEST_STATUS_UNSOLVED ); + + + return (!empty($count) && intval($count[0]['c']) > 0); } @@ -221,10 +243,11 @@ $count = $this->db->query( 'SELECT count(id) AS c '. 'FROM quests_characters '. - 'WHERE quest_id = ? AND character_id = ? AND status IN (-1,0)', - 'ii', + 'WHERE quest_id = ? AND character_id = ? AND status IN (?,?)', + 'iiii', $questId, - $characterId + $characterId, + static::QUEST_STATUS_SOLVED, static::QUEST_STATUS_UNSOLVED ); @@ -244,10 +267,11 @@ $count = $this->db->query( 'SELECT count(id) AS c '. 'FROM quests_characters '. - 'WHERE quest_id = ? AND character_id = ? AND status = 0', - 'ii', + 'WHERE quest_id = ? AND character_id = ? AND status = ?', + 'iii', $questId, - $characterId + $characterId, + static::QUEST_STATUS_SOLVED ); @@ -267,10 +291,11 @@ 'SELECT character_id, created, text '. 'FROM questtypes_submit_characters '. 'WHERE quest_id = ? AND EXISTS ('. - 'SELECT character_id FROM quests_characters WHERE quest_id = questtypes_submit_characters.quest_id AND status = 0'. + 'SELECT character_id FROM quests_characters WHERE quest_id = questtypes_submit_characters.quest_id AND status = ?'. ')', - 'i', - $questId + 'ii', + $questId, + static::QUEST_STATUS_SOLVED ); } @@ -287,10 +312,35 @@ 'SELECT character_id, created, text '. 'FROM questtypes_submit_characters '. 'WHERE quest_id = ? AND NOT EXISTS ('. - 'SELECT character_id FROM quests_characters WHERE quest_id = questtypes_submit_characters.quest_id AND status = 0'. + 'SELECT character_id FROM quests_characters WHERE quest_id = questtypes_submit_characters.quest_id AND status = ?'. ')', - 'i', - $questId + 'ii', + $questId, + static::QUEST_STATUS_SOLVED + ); + } + + + + + /** + * Mark a Quest for a Character. + * + * @param int $questId ID of Quest to mark + * @param int $characterId ID of Character to mark the Quest for + * @param int $status Quest status to mark + */ + private function setQuestStatus($questId, $characterId, $status) + { + $this->db->query( + 'INSERT INTO quests_characters '. + '(quest_id, character_id, status) '. + 'VALUES '. + '(?, ?, ?) ', + 'iii', + $questId, + $characterId, + $status ); } diff --git a/views/html/questgroups/questgroup.tpl b/views/html/questgroups/questgroup.tpl index f4c9b002..ff4af3ab 100644 --- a/views/html/questgroups/questgroup.tpl +++ b/views/html/questgroups/questgroup.tpl @@ -23,7 +23,6 @@ @@ -49,7 +44,6 @@ diff --git a/views/html/quests/quest.tpl b/views/html/quests/quest.tpl index 6045f06a..9f736e0b 100644 --- a/views/html/quests/quest.tpl +++ b/views/html/quests/quest.tpl @@ -32,7 +32,7 @@
  • -
  • +
  • @@ -70,7 +70,7 @@ - : + : Spiel vorbei diff --git a/views/html/seminaries/seminary.tpl b/views/html/seminaries/seminary.tpl index 04322475..c3a77cae 100644 --- a/views/html/seminaries/seminary.tpl +++ b/views/html/seminaries/seminary.tpl @@ -18,7 +18,6 @@

    : -

    @@ -30,9 +29,6 @@

    Auf ins Abenteuer! - -

    -