diff --git a/configs/AppConfig.inc b/configs/AppConfig.inc index 0f29e4e2..ba1ec019 100644 --- a/configs/AppConfig.inc +++ b/configs/AppConfig.inc @@ -193,7 +193,7 @@ array('^charactergroups/([^/]+)/([^/]+)/([^/]+)/(manage|edit|delete)/?$', 'charactergroups/$4group/$1/$2/$3', true), array('^charactergroupsquests/([^/]+)/([^/]+)/create/?$', 'charactergroupsquests/create/$1/$2', true), array('^charactergroupsquests/([^/]+)/([^/]+)/([^/]+)/?$', 'charactergroupsquests/quest/$1/$2/$3', true), - array('^charactergroupsquests/([^/]+)/([^/]+)/([^/]+)/(edit|delete)/?$', 'charactergroupsquests/$4/$1/$2/$3', true), + array('^charactergroupsquests/([^/]+)/([^/]+)/([^/]+)/(edit|delete|manage)/?$', 'charactergroupsquests/$4/$1/$2/$3', true), array('^achievements/([^/]+)/?$', 'achievements/index/$1', true), array('^library/([^/]+)/?$', 'library/index/$1', true), array('^library/([^/]+)/([^/]+)/?$', 'library/topic/$1/$2', true), @@ -230,7 +230,7 @@ array('^charactergroups/(manage|edit|delete)group/([^/]+)/([^/]+)/([^/]+)$', 'charactergroups/$2/$3/$4/$1', true), array('^charactergroupsquests/create/([^/]+)/([^/]+)/?$', 'charactergroupsquests/$1/$2/create', true), array('^charactergroupsquests/quest/(.*)$', 'charactergroupsquests/$1', true), - array('^charactergroupsquests/(edit|delete)/([^/]+)/([^/]+)/([^/]+)$', 'charactergroupsquests/$2/$3/$4/$1', true), + array('^charactergroupsquests/(edit|delete|manage)/([^/]+)/([^/]+)/([^/]+)$', 'charactergroupsquests/$2/$3/$4/$1', true), array('^achievements/index/(.*)$', 'achievements/$1', true), array('^library/(index|topic)/(.*)$', 'library/$2', true) ); diff --git a/controllers/CharactergroupsquestsController.inc b/controllers/CharactergroupsquestsController.inc index df8fa687..cceaed46 100644 --- a/controllers/CharactergroupsquestsController.inc +++ b/controllers/CharactergroupsquestsController.inc @@ -79,7 +79,78 @@ $questgroup['entered'] = $this->Questgroups->hasCharacterEnteredQuestgroup($questgroup['id'], self::$character['id']); // Get Character groups-groups - $groups = $this->Charactergroupsquests->getGroupsForQuest($quest['id']); + $groups = $this->Charactergroups->getGroupsForQuest($quest['id']); + + // Media + $questmedia = null; + if(!is_null($quest['questsmedia_id'])) { + $questmedia = $this->Media->getSeminaryMediaById($quest['questsmedia_id']); + } + + + // Pass data to view + $this->set('seminary', $seminary); + $this->set('groupsgroup', $groupsgroup); + $this->set('quest', $quest); + $this->set('questgroup', $questgroup); + $this->set('groups', $groups); + $this->set('media', $questmedia); + } + + + /** + * Action: manage. + * + * Manage a Character groups Quest for a Character groups-group + * of a Seminary. + * + * @throws IdNotFoundException + * @param string $seminaryUrl URL-Title of a Seminary + * @param string $groupsgroupUrl URL-Title of a Character groups-group + * @param string $questUrl URL-Title of a Character groups Quest + */ + public function manage($seminaryUrl, $groupsgroupUrl, $questUrl) + { + // Get seminary + $seminary = $this->Seminaries->getSeminaryByUrl($seminaryUrl); + + // Get Character groups-group + $groupsgroup = $this->Charactergroups->getGroupsgroupByUrl($seminary['id'], $groupsgroupUrl); + + // Get Character groups-group Quests + $quest = $this->Charactergroupsquests->getQuestByUrl($groupsgroup['id'], $questUrl); + + // Get Questgroup + $questgroup = $this->Questgroups->getQuestgroupById($quest['questgroups_id']); + $questgroup['entered'] = $this->Questgroups->hasCharacterEnteredQuestgroup($questgroup['id'], self::$character['id']); + + // Get Character groups + $groups = $this->Charactergroups->getGroupsForGroupsgroup($groupsgroup['id']); + + // Set XPs of Character groups for this Character groups Quest + if($this->request->getRequestMethod() == 'POST' && !is_null($this->request->getPostParam('setxps'))) + { + $xps = $this->request->getPostParam('xps'); + foreach($groups as &$group) + { + if(array_key_exists($group['url'], $xps) && $xps[$group['url']] != 'null') + { + $xpsFactor = intval($xps[$group['url']]) / $quest['xps']; + $this->Charactergroupsquests->setXPsOfGroupForQuest($quest['id'], $group['id'], $xpsFactor); + } + else { + $this->Charactergroupsquests->deleteGroupForQuest($quest['id'], $group['id']); + } + } + + // Redirect to Quest page + $this->redirect($this->linker->link(array('quest', $seminary['url'], $groupsgroup['url'], $quest['url']), 1)); + } + + // Set XPs for Groups + foreach($groups as &$group) { + $group['quest_group'] = $this->Charactergroupsquests->getXPsOfGroupForQuest($quest['id'], $group['id']); + } // Media $questmedia = null; 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 7d47da29..ed08606f 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 f86d7747..7041bc19 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-30 01:43+0100\n" -"PO-Revision-Date: 2014-04-30 01:43+0100\n" +"POT-Creation-Date: 2014-05-01 01:48+0100\n" +"PO-Revision-Date: 2014-05-01 01:48+0100\n" "Last-Translator: \n" "Language-Team: \n" "Language: de_DE\n" @@ -195,6 +195,7 @@ msgstr "Spiele weiter, um diesen geheimen Erfolg freizuschalten" #: views/html/charactergroupsquests/create.tpl:8 #: views/html/charactergroupsquests/delete.tpl:8 #: views/html/charactergroupsquests/edit.tpl:8 +#: views/html/charactergroupsquests/manage.tpl:8 #: views/html/charactergroupsquests/quest.tpl:8 #: views/html/characters/character.tpl:85 views/html/seminarymenu/index.tpl:3 msgid "Character Groups" @@ -344,6 +345,22 @@ msgstr "Gruppengruppe bearbeiten" msgid "Manage Character group" msgstr "Gruppe verwalten" +#: views/html/charactergroups/group.tpl:31 +#: views/html/charactergroups/group.tpl:44 +#: views/html/charactergroupsquests/manage.tpl:21 +#: views/html/charactergroupsquests/manage.tpl:36 +#: views/html/charactergroupsquests/quest.tpl:29 +#: views/html/charactergroupsquests/quest.tpl:62 +#: views/html/characters/character.tpl:67 +#: views/html/characters/character.tpl:73 +#: views/html/characters/character.tpl:79 +#: views/html/characters/character.tpl:97 views/html/quests/index.tpl:37 +#: views/html/seminaries/index.tpl:29 views/html/seminarybar/index.tpl:6 +#: views/html/seminarybar/index.tpl:42 +#, php-format +msgid "%d XPs" +msgstr "%d XP" + #: views/html/charactergroups/group.tpl:32 #: views/html/charactergroups/managegroup.tpl:25 msgid "Members" @@ -369,6 +386,16 @@ msgstr "Charaktere" msgid "%s-Quests" msgstr "%squests" +#: views/html/charactergroups/group.tpl:58 +#: views/html/charactergroupsquests/create.tpl:58 +#: views/html/charactergroupsquests/create.tpl:59 +#: views/html/charactergroupsquests/edit.tpl:58 +#: views/html/charactergroupsquests/edit.tpl:59 +#: views/html/characters/index.tpl:22 views/html/characters/manage.tpl:17 +#: views/html/quests/create.tpl:29 views/html/quests/create.tpl:30 +msgid "XPs" +msgstr "XP" + #: views/html/charactergroups/groupsgroup.tpl:21 msgid "Create new Character group" msgstr "Neue Gruppe" @@ -458,18 +485,8 @@ msgstr "Die XP-Angabe ist ungültig" msgid "Title" msgstr "Titel" -#: views/html/charactergroupsquests/create.tpl:58 -#: views/html/charactergroupsquests/create.tpl:59 -#: views/html/charactergroupsquests/edit.tpl:58 -#: views/html/charactergroupsquests/edit.tpl:59 -#: views/html/characters/index.tpl:22 views/html/characters/manage.tpl:17 -#: views/html/quests/create.tpl:29 views/html/quests/create.tpl:30 -msgid "XPs" -msgstr "XP" - #: views/html/charactergroupsquests/create.tpl:60 #: views/html/charactergroupsquests/edit.tpl:60 -#: views/html/charactergroupsquests/quest.tpl:21 #: views/html/quests/create.tpl:17 views/html/quests/index.tpl:14 msgid "Questgroup" msgstr "Questgruppe" @@ -478,7 +495,7 @@ msgstr "Questgruppe" #: views/html/charactergroupsquests/create.tpl:67 #: views/html/charactergroupsquests/edit.tpl:66 #: views/html/charactergroupsquests/edit.tpl:67 -#: views/html/charactergroupsquests/quest.tpl:24 +#: views/html/charactergroupsquests/quest.tpl:34 msgid "Description" msgstr "Beschreibung" @@ -486,7 +503,7 @@ msgstr "Beschreibung" #: views/html/charactergroupsquests/create.tpl:69 #: views/html/charactergroupsquests/edit.tpl:68 #: views/html/charactergroupsquests/edit.tpl:69 -#: views/html/charactergroupsquests/quest.tpl:32 +#: views/html/charactergroupsquests/quest.tpl:37 msgid "Rules" msgstr "Regeln" @@ -521,15 +538,24 @@ msgstr "Soll die %s-Quest „%s“ wirklich gelöscht werden?" msgid "Edit %s-Quest" msgstr "%s-Quest bearbeiten" -#: views/html/charactergroupsquests/quest.tpl:20 -msgid "Maximum reward" -msgstr "Maximale Belohnung" +#: views/html/charactergroupsquests/manage.tpl:34 +msgid "Not attended" +msgstr "Nicht teilgenommen" -#: views/html/charactergroupsquests/quest.tpl:39 +#: views/html/charactergroupsquests/manage.tpl:43 +msgid "Set XPs" +msgstr "Setze XP" + +#: views/html/charactergroupsquests/quest.tpl:16 +#, php-format +msgid "Manage %s-Quest" +msgstr "%s-Quest Verwalten" + +#: views/html/charactergroupsquests/quest.tpl:44 msgid "Won Quest" msgstr "Gewonnene Quest" -#: views/html/charactergroupsquests/quest.tpl:45 +#: views/html/charactergroupsquests/quest.tpl:50 msgid "Lost Quest" msgstr "Verlorene Quest" @@ -553,16 +579,6 @@ msgstr "Meilensteine" msgid "Ranking" msgstr "Ranking" -#: views/html/characters/character.tpl:67 -#: views/html/characters/character.tpl:73 -#: views/html/characters/character.tpl:79 -#: views/html/characters/character.tpl:97 views/html/quests/index.tpl:37 -#: views/html/seminaries/index.tpl:29 views/html/seminarybar/index.tpl:6 -#: views/html/seminarybar/index.tpl:42 -#, php-format -msgid "%d XPs" -msgstr "%d XP" - #: views/html/characters/character.tpl:106 views/html/seminarybar/index.tpl:14 msgid "Last Quest" msgstr "Letzter Speicherpunkt" @@ -1021,16 +1037,15 @@ msgstr "Registrieren" msgid "Roles" msgstr "Rollen" +#~ msgid "Maximum reward" +#~ msgstr "Maximale Belohnung" + #~ msgid "Set properties" #~ msgstr "Setze Eigenschaften" #~ msgid "Selection" #~ msgstr "Auswahl" -#, fuzzy -#~ msgid "%d XPs" -#~ msgstr "%d XP" - #~ msgid "Properties" #~ msgstr "Eigenschaften" diff --git a/models/CharactergroupsModel.inc b/models/CharactergroupsModel.inc index ed89cb21..20a3e3a7 100644 --- a/models/CharactergroupsModel.inc +++ b/models/CharactergroupsModel.inc @@ -200,7 +200,8 @@ return $this->db->query( 'SELECT id, name, url, xps, motto, seminaryupload_id '. 'FROM v_charactergroups '. - 'WHERE charactergroupsgroup_id = ?', + 'WHERE charactergroupsgroup_id = ? '. + 'ORDER BY name', 'i', $groupsgroupId ); @@ -278,6 +279,33 @@ } + /** + * Get the Character groups for a Quest. + * + * @param int $questId ID of the Character groups Quest + * @return array Character groups + */ + public function getGroupsForQuest($questId) + { + $groups = $this->db->query( + 'SELECT charactergroups.id, charactergroups.name, charactergroups.url, charactergroupsquests_groups.created, charactergroupsquests_groups.xps_factor, charactergroupsquests.xps '. + 'FROM charactergroupsquests_groups '. + 'LEFT JOIN charactergroups ON charactergroups.id = charactergroupsquests_groups.charactergroup_id '. + 'LEFT JOIN charactergroupsquests ON charactergroupsquests.id = charactergroupsquests_groups.charactergroupsquest_id '. + 'WHERE charactergroupsquests_groups.charactergroupsquest_id = ? '. + 'ORDER BY xps_factor DESC', + 'i', + $questId + ); + foreach($groups as &$group) { + $group['xps'] = round($group['xps'] * $group['xps_factor'], 1); + } + + + return $groups; + } + + /** * Check if a Character group name already exists. * diff --git a/models/CharactergroupsquestsModel.inc b/models/CharactergroupsquestsModel.inc index d977cc09..5ebe100a 100644 --- a/models/CharactergroupsquestsModel.inc +++ b/models/CharactergroupsquestsModel.inc @@ -105,32 +105,6 @@ } - /** - * Get the Character groups for a Quest. - * - * @param int $questId ID of the Character groups Quest - * @return array Character groups - */ - public function getGroupsForQuest($questId) - { - $groups = $this->db->query( - 'SELECT charactergroups.id, charactergroups.name, charactergroups.url, charactergroupsquests_groups.created, charactergroupsquests_groups.xps_factor, charactergroupsquests.xps '. - 'FROM charactergroupsquests_groups '. - 'LEFT JOIN charactergroups ON charactergroups.id = charactergroupsquests_groups.charactergroup_id '. - 'LEFT JOIN charactergroupsquests ON charactergroupsquests.id = charactergroupsquests_groups.charactergroupsquest_id '. - 'WHERE charactergroupsquests_groups.charactergroupsquest_id = ?', - 'i', - $questId - ); - foreach($groups as &$group) { - $group['xps'] = round($group['xps'] * $group['xps_factor'], 1); - } - - - return $groups; - } - - /** * Get Character groups Quests for a Character group. * @@ -156,6 +130,78 @@ } + /** + * Get XPs of a Character group for a Character groups Quest. + * + * @param int $questId ID of Character groups Quest + * @param int $groupId ID of Character group to get XPs of + * @return array XP-record + */ + public function getXPsOfGroupForQuest($questId, $groupId) + { + $data = $this->db->query( + 'SELECT charactergroupsquests_groups.created, charactergroupsquests_groups.xps_factor, charactergroupsquests.xps '. + 'FROM charactergroupsquests_groups '. + 'LEFT JOIN charactergroupsquests ON charactergroupsquests.id = charactergroupsquests_groups.charactergroupsquest_id '. + 'WHERE charactergroupsquests_groups.charactergroupsquest_id = ? AND charactergroupsquests_groups.charactergroup_id = ?', + 'ii', + $questId, + $groupId + ); + if(empty($data)) { + return null; + } + + $data = $data[0]; + $data['xps'] = round($data['xps'] * $data['xps_factor'], 1); + + + return $data; + } + + + /** + * Set XPs of a Character group for a Character groups Quest. + * + * @param int $questId ID of Character groups Quest + * @param int $groupId ID of Character group to set XPs of + * @param float $xpsFactor XPs-factor + */ + public function setXPsOfGroupForQuest($questId, $groupId, $xpsFactor) + { + $this->db->query( + 'INSERT INTO charactergroupsquests_groups '. + '(charactergroupsquest_id, charactergroup_id, xps_factor) '. + 'VALUES '. + '(?, ?, ?) '. + 'ON DUPLICATE KEY UPDATE '. + 'xps_factor = ?', + 'iidd', + $questId, + $groupId, + $xpsFactor, + $xpsFactor + ); + } + + + /** + * Remove a Character group from a Character groups Quest. + * + * @param int $questId ID of Character groups Quest + * @param int $groupId ID of Character group to remove + */ + public function deleteGroupForQuest($questId, $groupId) + { + $this->db->query( + 'DELETE FROM charactergroupsquests_groups '. + 'WHERE charactergroupsquest_id = ? AND charactergroup_id = ?', + 'ii', + $questId, $groupId + ); + } + + /** * Check if a Character groups Quest title already exists. * diff --git a/views/html/charactergroups/group.tpl b/views/html/charactergroups/group.tpl index a27313f4..00197e32 100644 --- a/views/html/charactergroups/group.tpl +++ b/views/html/charactergroups/group.tpl @@ -28,7 +28,7 @@
=$character['xps']?> XP
+=sprintf(_('%d XPs'), $character['xps'])?>
@@ -55,7 +55,7 @@=$dateFormatter->format(new \DateTime($quest['created']))?> =$quest['title']?> - =$quest['group_xps']?> / =$quest['xps']?> XP + =$quest['group_xps']?> / =$quest['xps']?> =_('XPs')?>
diff --git a/views/html/charactergroupsquests/manage.tpl b/views/html/charactergroupsquests/manage.tpl new file mode 100644 index 00000000..f705596c --- /dev/null +++ b/views/html/charactergroupsquests/manage.tpl @@ -0,0 +1,45 @@ + +
-
-
-
- =\hhu\z\Utils::t($quest['description'])?>
-
=\hhu\z\Utils::t($quest['description'])?>
=\hhu\z\Utils::t($quest['rules'])?>
@@ -54,7 +59,7 @@