From 0992d000c87d73c9d5b39ae19248b9ecb332373d Mon Sep 17 00:00:00 2001 From: coderkun Date: Thu, 17 Apr 2014 01:10:05 +0200 Subject: [PATCH] set dynamic value for Achievement list --- controllers/AchievementsController.inc | 27 ++++---- locale/de_DE/LC_MESSAGES/The Legend of Z.mo | Bin 7459 -> 7676 bytes locale/de_DE/LC_MESSAGES/The Legend of Z.po | 58 ++++++++++------ models/AchievementsModel.inc | 69 ++++++++++++-------- views/html/achievements/index.tpl | 24 +++++-- 5 files changed, 112 insertions(+), 66 deletions(-) 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 cabfa46b9f92800b5bc2981812c631cdd57e5e9c..cd24a7de766f06323de98d8d9e4d389515443bb7 100644 GIT binary patch delta 2796 zcmYM#e@szl)q^ zl8Yvg!sz<`G*o{!>ihFB1$~&o_@<1;RIJ5W*kJo@sG0A=BJ4vS4xt`&9v{asR3&cN z{v_)A1(a2ZHlPw|#u>N~RgnP3lvxiAl`d*OIEc#dZPY;TqY@lO&G1uX408%Kz&}5uoP=io70a< z>=>$&C#)w?oAj*hUqn^pGAiL~*6T4Ek8tA#a+(P)N@NoC#i`U&2~0=LBnLInLR3Pf zsLi?rHM4crHvBe;y@Pt5!@H)vRgFq`HR^t>orX#gLapgRRLPHE1)fE{9e-dY>M61c z^9CgmFsc$iqTa5X$fL~tL_cO`@DvSPhN?gv>Vd7OOxsZp2%=`b z9}DmhY6iz~A)dDWgq-FcmlDiicG_Dt$e5-9Rnay~*ZaT2-Uy;*+JhSCJyZh6P^CSA zn&Bzb(wwvXZ%|8f36;oI)c60vIhf3}%W%H61y!LamN33~orc!%1Zs0#u--;xn$3rr zK^`ihBGlT~pb}kaZ9)ya7WH?VQ3Gv9RWyLAbRTL74q*KKKT1On`VdvR&rlCIhnn#P zti~U(9{)x5m08O4lu!$5DYl|2u@{xdK70ZXA*VUXMU}W{y*r2cE5o@gXeAb*Hs2;x z0H^UEARtcj92DTe|?b3zbutB z*IJ0$Eaj*NG@>feYWtf}dtj$EfT}ukZhdl2pb|A8ky_iD~tg*v}e~ofaQPL$nZ^2_4IcK|+hFcjzfXY3t}rV0Peo zLJOorzeZZLQsO0|hEU2nUP%x$?KGZEbW9KS5e}i%*Re5y*@>FgHlm7XCbR=|G!W0L z!4V`_6SIoYf@>3OC;AE1GeSH#y7khQ)6)(qv3FlZ?TBRJMM8_E!$)}W7QcD;0F8)-I?c;@c66?S1X0mA2i6yNG9q zYI~3MjxYRf+wVnQv-tMbtwKVtzy`v7P8XtFw0DF>$BI4M!tRq}S>6d!x6rRwbp@I#t#6Rdq)fWfwkZkG5r}PbqZ0$k^B6 z?yf+{^_=EjFB%Diysl{U;aEF!kEbl}cS8P1)Y;P&>Gp?%8fu_7>~w`AK{w*>iRwm^ b=k=%1;G^E@qe+Vroi>W)@VEq~6Mmer&O4E!(nM zxshwkS~@o^+jMyUiE_%8b8c2P8#DjtlBu)S51Px(O&7gC4~Mh+eO~80-us;I`JVHr zw;K1yykt0ax6!(ZJmO@)>=WFY#)bCFWU~ysh++I2r(jCDSqL*R2lMfEY`_`VjB~IP zr{XR*K8R(E&*2?rp8ZEhKg_<(jII^nB&@)BSc{ry6DomMF&p2-O#IY&1o_wr=NVL@ z=aHQ43Qoik)IzUgi1{td@}k@*#A&z~r{f0H7hgs`*2_f+?nOQ53sjN%-FN``*araMbf3#msP)+W?*)`h4)ed}>I-ba->fqKvdRLO=>hw*o04$GsSDq*>^26ZT7 zZoCpzi8ZK1JDi<3f$?VKV{wlw&orqo?m|tx8?}NxsEH1t66r@B&aY7`8geFaFvaXD z>Up1$O#}x}37mVC zu^uiZ_#x^{9YY>rr%@G6q7uIB#v>Tj`+uE|CW=rOe{WHxEl2&J4z)E+ZoCAwHLFnH zYsXyd!a4Y+^DwG17f^{^L~Y$<$}$@ZrQZJ)bd=#MsLXp%iR?t}c^@jl{mw(EiThE% z`wBJDAgYq5Q6(NimHray_cxrQ$eL{u*?4-u3_4nAAtSG zPOQWo&IBrvUr~wvfqGqUx^X3ckE@akol8+?qcxBE>xW(3PzAQ3#;>FH{4M7@sFi6KdxTCm z5g-;2&l1lOb;P5Dni6}FP-)dl2~|n0o_LygSOePjG5l((J6o5nuCoobIyDlur38o8 zZ|%MN(z3mW=s!usiI@EQW{=?pqJdEHbu#WH^b)Tp))G1mPZ6qB3!$bX`T(JNtsoW? zYO2#pqKzmc)HaUc`J1A?&aaM;ikwfVEg`fC9Yl=K$_Mz0?)Gc5h~5iCH8G3eWw0j*wfl%7LWh04t)jEW z4Q8Saz7F+xtDw_LEOa;4Id!o0KdkwLUT>XSpGK}a)sH74>1BaL+my?J#Kx?~l(hNz gbL(PtHN6MIGhM$n@qIXbV&Z1b$Ek^-ypojv0aZ@cN&o-= 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 @@ -

Persönlicher Fortschritt: 75%

-

12. Platz: Du hast bislang 13 von insgesamt 75 Errungenschaften erreicht.

+

+

. : .

  • Freigeschaltetes Achievementerreicht am 17.06.104

    Das Bild ist entsprechend farbig, ein eventueller Fortschrittsbalken mit 100% soll entfallen.

  • - +
  • - + -

    erreicht am 17.06.104

    +

    + + format(new \DateTime($achievement['created'])))?> +

    +

    +
  • + + +
  • + + + +

    + +