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 zcmX}ue@vBC9LMp)ZzK@~OGLpd38I96kU$D4p^*h)MA|R%cDZn`TrR~05?On)Wm`XN zEuixMKI^+Ai&hv1e=X}rioae$j z<)BoQnOJjJq)rkK%MZiL>xq%*Nkw8m8Q0 zOgd)bVqA&0Ve7=XV_u|_%Y}nD6VIYz$bsUs{8#Plu>hs&} z`4DQRpP&-Hh%WpMwK=CUTP0XDgZfhiQ^o~ZjhfMV)NbC0deCO%UNdCR51~r_4eCLE zqbm0=F2X5HSDUp6l~^;XqTSZ#QI&Yfu@?qVCE10__yg;Q7|Hn&D$;;1 zY(uT}8>l6C5A$#Y_4ZuBe4NJ1E-O&)eUO9p$~I)ej(LlY)^Z3-a1WA``2qF%{ek*k zNMLlG&qEDdimJ#O)B`u56856*??P4L6`X@_q9$?xGx0=N*8e;m#xPMleIcfyHeDq$ z2~&$IaT98ZHrewo)J%I(1HFq%U^lANhf$yZ7?r>&)Y4wC*MG%njBl>eQAQCglx|#r zT9Q0mjMdf3k2%<)}oPQJXA?+Kf9<34Dqa*PKRG;wRLEE~6@bV=nc- zgHAesqB3wTE@F@N$RK0vIn=gPW*h$1`$FHd;MmZREJges)j77^J*C!wY#$RgGd8wgt8 zXk237SX{KTmXqfQC9l1q)+u(C0dBb z34Nh95Uqq(iLKOf(a*B>tRwV2q!;5! zLfb{{QKFLQ)(NeVSj70@_Vfhd<1-w+#65)Gnumxdh{>jHp}jlVHrtN2M>X*Xv5@c+ zn+Re?&(WK@ zipV3{34L{_W%d;&^r!jUA(z|Z^Lx9!O|Gma*Q$wrn>RRoJmI6r)SC8Crz_Ou@pwa_ z=B|Lt(;f(TJ)P~t!Nj*?B8!*x#inG#@RF3TA|ie6zPj|(Sf4x4$^AEGmPO63@_Sw0 bj^_42ONZC*@rC$>tKQw#78ou_ZHfI4^v4BF delta 2673 zcmYk;YfP6_9Ki7-ps1uMm&C;I23`nJ$N&>75i2igmYPu(im8>C#2aht-!$ji&=)af zuS&i zEJCke7RM{m>(^l#^M~i?_=RoQA9rCcHplTHG{H6;hn-l6KcF{Cr)*;}6Rkvf9M_=N zuR#-SMiY4jhvMs)uq5qt%=9Q)x-RtiSD1#~=tO7G1ka%f|AgcauAvj8GrJB#A5k{? zh>FmOrz1b1mXA_gl1cri(AgbN96=K}5j~Brya!F-GP=^M$WIu-Nyo+LN*AIDZ^2R6 zghluon%Hq9*Kji0J%swZq6-{w_x_CDs2}yA8;a5K3@pTY^hSHo3hl*-*otn_<7i@6 z(2Ax}2F*Y#krl^9XhljAbj-LiT8$};XCe0pwP+&C;`y~`0_)M0G@=viL=$=$-Lx&} z!rqS_!LB|b9K%~U{vxlO_e~t6<7PXIX8u_`aT=}2IrJI-ftGpz7nfiO`nJ?zDLx-< zL*Mf==pOkMUFkpQBOJ)d3d}+(k_dC@_`0n?<_O#4xEY=J9kdc1=ncO>6FrTV^ekF| z-*5!}g|2Kk*^j|V(FMqK|Y;ZwAQA;NkcpPK z0KI+!`Y6lexDtItHE1G>(d)OOkKhHI#Qfn^JNP*!cR8BjRrFaF@Zlz_impNv-HX00 zEoee-pnISlP4sBA3!V5R`n_+^dAc!SNqgv6>PzS&xQ5;(c9y27Fsdq@R29x@v)4s%^;cxHhOX&+<}(awzikB0v8b` zXGjp%W-z>Z^S2v(F7HD|Fe;jpCLSnmhmyd4RtS3OxW%r<|cdm z=|n0T?k3o)$zRcr<95Q0x0U#>ZJ^^Gu*wtS!A5i+r8)n@blg0fi6UYPVY`o5Of(Ry z2=+{Pil`t8i4Au)=mBW$%#^YJL*uhM6TZG^3q*pck@ ze)!(n9w6=~mJ;)cDa7QK`hoj9MrO37betR1(l@27qGd;R5p=wn{dJ#?eYusX9cS|z G`uz*g7uetc 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. +