diff --git a/controllers/AchievementsController.inc b/controllers/AchievementsController.inc index 6f363012..ceeec968 100644 --- a/controllers/AchievementsController.inc +++ b/controllers/AchievementsController.inc @@ -61,15 +61,15 @@ // Get Character $character = SeminaryRoleController::$character; - // Get Achievements - $achievements = $this->Achievements->getAchievementsForSeminary($seminary['id']); - foreach($achievements as &$achievement) + // Get achieved Achievements + $achievedAchievements = $this->Achievements->getAchievedAchievementsForCharacter($character['id']); + + // Get unachieved Achievements + $unachievedAchievements = $this->Achievements->getUnachhievedAchievementsForCharacter($seminary['id'], $character['id'], true); + foreach($unachievedAchievements as &$achievement) { - // Get status for Character - $achieved = $this->Achievements->hasCharacterAchievedAchievement($achievement['id'], $character['id']); - // Get Character progress - if(!$achieved && $achievement['progress']) + if($achievement['progress']) { $conditions = array(); switch($achievement['condition']) @@ -143,18 +143,17 @@ $achievement['characterProgress'] = array_sum($characterProgresses) / count($characterProgresses); } - - // Get media - $achievement['media_index'] = 'unachieved_achievementsmedia_id'; - if($achieved) { - $achievement['media_index'] = 'achieved_achievementsmedia_id'; - } } + // Get ranking + $character['rank'] = $this->Achievements->getCountRank($seminary['id'], count($achievedAchievements)); + // Pass data to view $this->set('seminary', $seminary); - $this->set('achievements', $achievements); + $this->set('character', $character); + $this->set('achievedAchievements', $achievedAchievements); + $this->set('unachievedAchievements', $unachievedAchievements); } } 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 cabfa46b..cd24a7de 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 b658c97b..4444a9c3 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-16 15:53+0100\n" -"PO-Revision-Date: 2014-04-16 15:54+0100\n" +"POT-Creation-Date: 2014-04-17 01:08+0100\n" +"PO-Revision-Date: 2014-04-17 01:08+0100\n" "Last-Translator: \n" "Language-Team: \n" "Language: de_DE\n" @@ -102,26 +102,43 @@ msgstr "Fehler" msgid "Achievements" msgstr "Errungenschaften" -#: views/html/achievements/index.tpl:15 +#: views/html/achievements/index.tpl:53 +#, php-format +msgid "Own progress: %d %%" +msgstr "Persönlicher Fortschritt: %d %%" + +#: views/html/achievements/index.tpl:54 +#: views/html/charactergroups/group.tpl:18 +#: views/html/characters/character.tpl:28 views/html/seminarybar/index.tpl:7 +msgid "Rank" +msgstr "Platz" + +#: views/html/achievements/index.tpl:54 +#, php-format +msgid "You achieved %d of %d Achievements so far" +msgstr "Du hast bislang %d von insgesamt %d Errungenschaften erreicht" + +#: views/html/achievements/index.tpl:68 views/html/characters/character.tpl:39 +#: views/html/seminarybar/index.tpl:28 +#, php-format +msgid "achieved at: %s" +msgstr "erhalten am: %s" + +#: views/html/achievements/index.tpl:79 msgid "Secret Achievement" msgstr "Geheime Errungenschaft" -#: views/html/achievements/index.tpl:19 +#: views/html/achievements/index.tpl:84 msgid "Continue playing to unlock this secret Achievement" msgstr "Spiele weiter, um diesen geheimen Erfolg freizuschalten" #: views/html/charactergroups/group.tpl:7 #: views/html/charactergroups/groupsgroup.tpl:7 #: views/html/charactergroups/index.tpl:7 -#: views/html/characters/character.tpl:53 views/html/seminarymenu/index.tpl:3 +#: views/html/characters/character.tpl:51 views/html/seminarymenu/index.tpl:3 msgid "Character Groups" msgstr "Charaktergruppen" -#: views/html/charactergroups/group.tpl:18 -#: views/html/characters/character.tpl:28 views/html/seminarybar/index.tpl:7 -msgid "Rank" -msgstr "Platz" - #: views/html/charactergroups/group.tpl:20 msgid "Members" msgstr "Mitglieder" @@ -167,23 +184,18 @@ msgid "Total progress" msgstr "Fortschritt" #: views/html/characters/character.tpl:20 -#: views/html/characters/character.tpl:73 -#: views/html/characters/character.tpl:81 -#: views/html/characters/character.tpl:89 views/html/seminarybar/index.tpl:44 +#: views/html/characters/character.tpl:69 +#: views/html/characters/character.tpl:75 +#: views/html/characters/character.tpl:81 views/html/seminarybar/index.tpl:42 #: views/html/users/user.tpl:29 msgid "Level" msgstr "Level" -#: views/html/characters/character.tpl:39 views/html/seminarybar/index.tpl:28 -#, php-format -msgid "achieved at: %s" -msgstr "erhalten am: %s" - -#: views/html/characters/character.tpl:65 +#: views/html/characters/character.tpl:63 msgid "Ranking" msgstr "Ranking" -#: views/html/characters/character.tpl:97 +#: views/html/characters/character.tpl:89 msgid "Topic progress" msgstr "Thematischer Fortschritt" @@ -399,7 +411,7 @@ msgstr "Quests anzeigen" msgid "Last Quest" msgstr "Letzter Speicherpunkt" -#: views/html/seminarybar/index.tpl:48 +#: views/html/seminarybar/index.tpl:46 #, php-format msgid "Show %s-Profile" msgstr "%s-Profil anzeigen" @@ -555,6 +567,10 @@ msgstr "Name" msgid "Roles" msgstr "Rollen" +#, fuzzy +#~ msgid "achieved at %s" +#~ msgstr "erhalten am: %s" + #~ msgid "Usergroups" #~ msgstr "Benutzergruppen" diff --git a/models/AchievementsModel.inc b/models/AchievementsModel.inc index f25689b3..bf7f56f4 100644 --- a/models/AchievementsModel.inc +++ b/models/AchievementsModel.inc @@ -60,26 +60,6 @@ } - /** - * Get all Achievements of a Seminary. - * - * @param int $seminaryId ID of Seminary to get Achievements of - * @return array Achievements data - */ - public function getAchievementsForSeminary($seminaryId) - { - return $this->db->query( - 'SELECT achievements.id, achievementconditions.condition, title, url, description, progress, hidden, unachieved_achievementsmedia_id, achieved_achievementsmedia_id '. - 'FROM achievements '. - 'LEFT JOIN achievementconditions ON achievementconditions.id = achievements.achievementcondition_id '. - 'WHERE seminary_id = ? '. - 'ORDER BY achievements.pos ASC', - 'i', - $seminaryId - ); - } - - /** * Get all not yet achieved Achievements for a Seminary that can * only be achieved once (only by one Character). @@ -131,26 +111,60 @@ * @param int $characterId ID of Character * @return array Achievements data */ - public function getUnachhievedAchievementsForCharacter($seminaryId, $characterId) + public function getUnachhievedAchievementsForCharacter($seminaryId, $characterId, $includeOnlyOnce=false) { return $this->db->query( 'SELECT achievements.id, achievementconditions.condition, title, url, description, progress, hidden, only_once, all_conditions, unachieved_achievementsmedia_id, achieved_achievementsmedia_id '. 'FROM achievements '. 'LEFT JOIN achievementconditions ON achievementconditions.id = achievements.achievementcondition_id '. - 'WHERE achievements.seminary_id = ? AND only_once = 0 AND NOT EXISTS ('. + 'WHERE achievements.seminary_id = ? AND only_once <= ? AND NOT EXISTS ('. 'SELECT character_id '. 'FROM achievements_characters '. 'WHERE '. 'achievements_characters.achievement_id = achievements.id AND '. 'achievements_characters.character_id = ?'. - ')', - 'ii', + ') '. + 'ORDER BY achievements.pos ASC', + 'iii', $seminaryId, + $includeOnlyOnce, $characterId ); } + /** + * Get the rank for the number of achieved Achievements. + * + * @param int $seminaryId ID of Seminary + * @param int $xps Amount of achieved Achievements + * @return int Rank of Achievements count + */ + public function getCountRank($seminaryId, $count) + { + $data = $this->db->query( + 'SELECT count(*) AS c '. + 'FROM ('. + 'SELECT count(DISTINCT achievement_id) '. + 'FROM achievements_characters '. + 'LEFT JOIN achievements ON achievements.id = achievements_characters.achievement_id '. + 'WHERE achievements.seminary_id = ? '. + 'GROUP BY character_id '. + 'HAVING count(DISTINCT achievement_id) > ?'. + ') AS ranking', + 'ii', + $seminaryId, + $count + ); + if(!empty($data)) { + return $data[0]['c'] + 1; + } + + + return 1; + } + + /** * Get all date conditions for an Achievement. * @@ -492,15 +506,18 @@ public function hasCharacterAchievedAchievement($achievementId, $characterId) { $data = $this->db->query( - 'SELECT character_id '. + 'SELECT achievement_id, character_id, created '. 'FROM achievements_characters '. 'WHERE achievement_id = ? AND character_id = ?', 'ii', $achievementId, $characterId ); + if(!empty($data)) { + return $data[0]; + } - return !empty($data); + return false; } } diff --git a/views/html/achievements/index.tpl b/views/html/achievements/index.tpl index cee00f82..79672cdc 100644 --- a/views/html/achievements/index.tpl +++ b/views/html/achievements/index.tpl @@ -50,20 +50,34 @@ -
12. Platz: Du hast bislang 13 von insgesamt 75 Errungenschaften erreicht.
+=$character['rank']?>. =_('Rank')?>: =sprintf(_('You achieved %d of %d Achievements so far'), count($achievedAchievements), count($achievedAchievements)+count($unachievedAchievements))?>.
Freigeschaltetes Achievementerreicht am 17.06.104
Das Bild ist entsprechend farbig, ein eventueller Fortschrittsbalken mit 100% soll entfallen.
=(!$achievement['hidden']) ? $achievement['title'] : _('Secret Achievement')?>erreicht am 17.06.104
++ =$achievement['title']?> + =sprintf(_('achieved at: %s'), $dateFormatter->format(new \DateTime($achievement['created'])))?> +
+=\hhu\z\Utils::t($achievement['description'])?>
++ =(!$achievement['hidden']) ? $achievement['title'] : _('Secret Achievement')?> +
=\hhu\z\Utils::t($achievement['description'])?>