From ce44a3c3b83dda7cbe61c22dd2b4957153fcd86f Mon Sep 17 00:00:00 2001 From: coderkun Date: Thu, 17 Apr 2014 01:48:33 +0200 Subject: [PATCH] determine Characters with the most achieved Achievements (Issue #57) --- configs/AppConfig.inc | 4 +-- controllers/AchievementsController.inc | 8 ++++-- locale/de_DE/LC_MESSAGES/The Legend of Z.mo | Bin 7831 -> 8006 bytes locale/de_DE/LC_MESSAGES/The Legend of Z.po | 25 +++++++++++++------ models/CharactersModel.inc | 26 ++++++++++++++++++++ views/html/achievements/index.tpl | 20 +++++---------- 6 files changed, 57 insertions(+), 26 deletions(-) diff --git a/configs/AppConfig.inc b/configs/AppConfig.inc index 1bfbc2d6..f7ed6931 100644 --- a/configs/AppConfig.inc +++ b/configs/AppConfig.inc @@ -94,8 +94,8 @@ * @var array */ public static $misc = array( - 'ranking_range' => 2, - 'seldom_achievements_range' => 3 + 'ranking_range' => 2, + 'achievements_range' => 3 ); diff --git a/controllers/AchievementsController.inc b/controllers/AchievementsController.inc index 00adea6d..d99671b6 100644 --- a/controllers/AchievementsController.inc +++ b/controllers/AchievementsController.inc @@ -24,7 +24,7 @@ * * @var array */ - public $models = array('achievements', 'seminaries', 'media'); + public $models = array('achievements', 'seminaries', 'media', 'characters'); /** * User permissions * @@ -62,11 +62,14 @@ $character = SeminaryRoleController::$character; // Get seldom Achievements - $seldomAchievements = $this->Achievements->getSeldomAchievements($seminary['id'], \nre\configs\AppConfig::$misc['seldom_achievements_range']); + $seldomAchievements = $this->Achievements->getSeldomAchievements($seminary['id'], \nre\configs\AppConfig::$misc['achievements_range']); foreach($seldomAchievements as &$achievement) { $achievement['achieved'] = $this->Achievements->hasCharacterAchievedAchievement($achievement['id'], $character['id']); } + // Get Characters with the most Achievements + $successfulCharacters = $this->Characters->getCharactersWithMostAchievements($seminary['id'], \nre\configs\AppConfig::$misc['achievements_range']); + // Get achieved Achievements $achievedAchievements = $this->Achievements->getAchievedAchievementsForCharacter($character['id']); @@ -159,6 +162,7 @@ $this->set('seminary', $seminary); $this->set('character', $character); $this->set('seldomAchievements', $seldomAchievements); + $this->set('successfulCharacters', $successfulCharacters); $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 48535d0652cd85986ab72c60a0375df4c87e3bed..da63f7b3b151c186d6df09f02dc48db8f943fe82 100644 GIT binary patch delta 2804 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 WjLbJL5I)Pexlh!BdGjNQ6gB|R7uetc 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 c041d6c7..8f3f73a2 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-17 01:27+0100\n" -"PO-Revision-Date: 2014-04-17 01:27+0100\n" +"POT-Creation-Date: 2014-04-17 01:46+0100\n" +"PO-Revision-Date: 2014-04-17 01:46+0100\n" "Last-Translator: \n" "Language-Team: \n" "Language: de_DE\n" @@ -111,33 +111,42 @@ msgstr "Die seltensten Errungenschaften" msgid "Achievement has been achieved only %d times" msgstr "wurde erst %d mal gefunden" -#: views/html/achievements/index.tpl:53 +#: views/html/achievements/index.tpl:32 +msgid "Most successful collectors" +msgstr "Die erfolgreichsten Sammler" + +#: views/html/achievements/index.tpl:38 +#, php-format +msgid "Character has achieved %d Achievements" +msgstr "hat %d Errungenschaften erhalten" + +#: views/html/achievements/index.tpl:45 #, php-format msgid "Own progress: %d %%" msgstr "Persönlicher Fortschritt: %d %%" -#: views/html/achievements/index.tpl:54 +#: views/html/achievements/index.tpl:46 #: 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 +#: views/html/achievements/index.tpl:46 #, 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/achievements/index.tpl:60 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 +#: views/html/achievements/index.tpl:71 msgid "Secret Achievement" msgstr "Geheime Errungenschaft" -#: views/html/achievements/index.tpl:84 +#: views/html/achievements/index.tpl:76 msgid "Continue playing to unlock this secret Achievement" msgstr "Spiele weiter, um diesen geheimen Erfolg freizuschalten" diff --git a/models/CharactersModel.inc b/models/CharactersModel.inc index 25dc6a76..b3eac8b7 100644 --- a/models/CharactersModel.inc +++ b/models/CharactersModel.inc @@ -174,6 +174,32 @@ } + /** + * Get Characters with the most amount of Achievements. + * + * @param int $seminaryId ID of Seminary + * @param int $conut Amount of Characters to retrieve + * @return array List of Characters + */ + public function getCharactersWithMostAchievements($seminaryId, $count) + { + return $this->db->query( + 'SELECT characters.id, characters.created, characters.charactertype_id, characters.name, characters.url, characters.user_id, characters.xps, characters.xplevel, characters.avatar_id, charactertypes.name AS charactertype_name, charactertypes.url AS charactertype_url, count(DISTINCT achievement_id) AS c '. + 'FROM achievements_characters '. + 'LEFT JOIN achievements ON achievements.id = achievements_characters.achievement_id '. + 'LEFT JOIN v_characters AS characters ON characters.id = achievements_characters.character_id '. + 'LEFT JOIN charactertypes ON charactertypes.id = characters.charactertype_id '. + 'WHERE achievements.seminary_id = ? '. + 'GROUP BY character_id '. + 'ORDER BY count(DISTINCT achievement_id) DESC '. + 'LIMIT ?', + 'ii', + $seminaryId, + $count + ); + } + + /** * Calculate only XPs for a Character achieved through Quests. * diff --git a/views/html/achievements/index.tpl b/views/html/achievements/index.tpl index 9253052c..3bd61f20 100644 --- a/views/html/achievements/index.tpl +++ b/views/html/achievements/index.tpl @@ -29,23 +29,15 @@
-

Die erfolgreichsten Sammler

+

    +
  1. - -

    VHS

    -

    hat 15 Errungenschaften gefunden

    -
  2. -
  3. - -

    Betamax

    -

    hat 14 Errungenschaften gefunden

    -
  4. -
  5. - -

    Laserdisc

    -

    hat 12 Errungenschaften gefunden

    + +

    +

  6. +