From 4d831ced8f87134ced12abe6991c101002f547af 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 zcmZ2%^~bvYo)F7a1_lO(as~zl83qQ1E6fZGiy0Ugde}jt3=9%n3=BLB3=EQ73=BdH z3=C>q3=F&s3=EcB3=9Gc3=HmE3=HB73=9!m3=Dh>3=9Qa3=Fai3=H*L3=CQf3=DI* z7#PGD7#L1K`S-aP7_=D}7`V6@7(^Ht>KV+qAsW5885p=27#O0s85r0Y7#LEy85oQh z7#MQ6Ar{T&hB#mYHv@w(0|UchZUzQ^1_p-fQ2IGH0|Pe$1H*SH&CCOFC_fJa11AFm zgDejN11kdqgE|kyqq;mGbL$xxym%NGrC>u<%0EbMr#@V!RObvb+ooEDQ_`s=N#gJoO9= z3|hPl3>*v$4CcHH45ADS3=U9!7%#|$3=HwS3=Arupyg#?P-S3Xmu>&8(A#QvO41x>{41s)*5J~1^V5kQLbuJ$y=t`gx4SWz6cJV=6 z+|LJb;B-DnNG#xk1npX=1-qg2K|V+n9fw+Yix1+kr+f?y`V0&VU-=jq3_w2Thlq#q zGt`6QER7%HfFgc~kL&oM7V|@VI322CH%W2|z49Edb%)5r70Wqaef}bwNmw=?XG1Xo8|j z5Ry0(1tC6}A_$4&B~W^`AS97)g7S|ELZaZTAjH8pp!D5(K?VjU1_p*lf{?g*DhP4N zcc=mmA&3Kbg&;l=7J^u$Bm{AgrVu2t8Vf;u<_o36gcukOFfuU23qj0N5P_sELlKCB z-9;ec_2D9rpvVw`#A$;FB*^U2g0vs5EO%0tR)5s0Shq(aDn3`261V) z7{q{dF^JEr#TXc*85kIv#2`MHC&s{_#K6F?9!g⪑J~7z2Yk0|Nt(I3#VEh(kia zK^zjIVd5YM*E2B0Kn2ppAwJC&hgj4r4spN~aY)cE0c&7jSSt>R!yQomUU5j&oDhdN zKA&IyWYEHK-B#NfWLL5Fv z77`^ZWg&@pqXCq07OLST)Pm2l3=E7QA3-swrUTW6Hj^DWh3iEa7#NJ9GL8(83=AsB zK^3(p0|P@SRL&Y&v4bjLP@QSY0C6@*It@fHFfhb0FfjNrKq3ev1S*X{kp?Q}f*BYX zOc)?e2FYcE2vDUR&cMLn4B;^3f~qD4NC6CL0f2-9K?DN>LmUGnT%#BuCBGY}x`WC& zFfcH9K-uZg)`vXy;ivD-n}VGIlm@eB+MP7IKI1ri3e znLv$z1Q3UTfgvAMoiRX?H%Lg40g?s$K}{nU5CN)&7#J9QLFt`=fguv4ih+S41JoE} zfMn221_p)_s5mHJltI}b3e<=L(LM|e46zIh3?U2*3|?3)UwnR1=SRV{4@~h2ocFm%_}KZD9%?% zODx*_LcpGp-CV)I(8|DKvYwD4jJ-Kbh>KM*wW#>;w!ECox76<`t)>7ANMGfCOBNic0g+Q}c?GGZNEE UQu7p2i;7Y+lQTB|l-6Pd0FJu}F#rGn delta 2571 zcmexkz1XV$o)F7a1_lO(QU(SF83qQ1Bg_m8a~T*Ia@awl3=9uA85npN7#JRMGB5}+ zFfhF1WMJTBU|?Y6Vqg$pU|`_qVqg$wU|>+-VqoB7U|_J|VqlPEU|?|PVqnl>U|>k) zVqg$sU|^U4fx(D@ zfx(0uVo^Fb!~qrD3=F~y3=G}e3=I4X3=H$3^m=Xv25trhhW$|bG&jVd*SQ%OI2jli zo^mrVure?(yyu2^^efohdIkm|9tH+^1_lOY9tH*p1_lOa9tH+U1_p*09*Dv+9!LmG z=7BhH0T0BW)jSLgpg`IP5+s^~>z!|9e%TWG3sQRZo3=Av`3=D5U>gyR87(VeZ zFmNz1F#Lzo9J~-83-U5BsDMI*mw`bQ6r{Wm3v+oH7?eR##tR97nNa>psQR#1HBx)-8AQtxUK^!)nkAXp-fq`K;9|MB{0|Uc#s5l2dB&sC%8S24tros>L zu>n8SVt$AZJ^3L9Jg=o5eh^=1KxK{o{;L3UpNk{DkKKpZ3^2nj+RC~YhV zNt9MlzMmi@Btiut4o!g4se%j)ObiSRS%Q!#$*mWJH~>V062$~Th{aO{AwHN5HE@+6 z#3366A&GOhAjC&kq4YgL28IKS3=Geq=B*HBU=U?sVAv@PaqxLzh&}g(AtCTV7!sBB z93qgQ787A$&}Cp?uo8jfh71u%+;u?d9U_o?{6Ykh7XFJse8?jTi866f1_pBm1_pUi zNJxZ>LUL2KC^(-pv_SbYMIjb%5(S4qJ;MP}h=G?xAuhcSHQ>D{B#4>C7#O4(7#O(3 zAU;qNV_;BXU|=wZ(otd%ht-NPFsL&yFia7HB(6PTkPtW_1_{x7Vh{&Ef%4yrfjnBz z!0=TJVv(pg!~rtmkf7BOhiEVrhs2=+lGok`Ra7lVo7fU|?W)E(r+<0VzmGXhZ2RDTo6b zr66glQwoyic1khSgUjT*Qjo;*SPBvXf21Hj;gE*JwWu@$gAS;2k!E0!163;03=Db< z3=Az$db2ddA&;aX4t*^R$*#Yld_5URNZLVZ4;e_>2$HFXXv~m-gg~JTgkK{AiSt${ z-6aF@dA|%e)iNxA8nj7<0bE(_k%2h)unfef7i1ub_6C&x0#z>{3o&0xmVtqhfq}sR z6#qU93=A#|3=Fmmkl@dT)VyFa1XRw0%5DY*1{($jhD-(qhCBua22%zGhDfjqh{K8) zAVCWf0!0NVlt64ymP}?~UJp0S_2G_lwr>RDFvb!7#PACAgLjV z0TNc8P<^0Qgc}1SynI3RE>s*;S^F_CFoZEcS_&ZH6c7PwEr7~M5L*nCffyix45|S@ zVy+C3NJsz`W1xDI0g`+{1#Tb%Bol%vdM}V-1_lOWD4h?bL75oT07wJXwG5CNC7l5h zVHsdG;tUK~pyUVUFfe$7nkNhl43^-qab#d%C}4opbfD@Q)P{(Is&rz2R5+mA1{Gom zU|?Vfg>n=bAPFCosG&mO(m05Lfx!+c5CNq@jUrGB%Zve%y+Ms8Q2EGU%>YT&v71G? ww3#=D@jhYRoFZt=$Zn=!Xli9@Jb9UrB9v{i`J50J>*n9$b67TCl~HE|098)bN&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'])))?> +

    +

    +
  • + + +
  • + + + +

    + +