From 2c515f2bfeeb8c9a86c896a7eac556e61eff1cad Mon Sep 17 00:00:00 2001 From: coderkun Date: Wed, 16 Apr 2014 11:36:58 +0200 Subject: [PATCH] add ranking to Character page --- configs/AppConfig.inc | 11 ++++ controllers/CharactersController.inc | 27 ++++++++++ locale/de_DE/LC_MESSAGES/The Legend of Z.mo | Bin 7126 -> 7166 bytes locale/de_DE/LC_MESSAGES/The Legend of Z.po | 13 +++-- models/CharactersModel.inc | 54 +++++++++++++++++++- views/html/characters/character.tpl | 40 +++++++-------- 6 files changed, 120 insertions(+), 25 deletions(-) diff --git a/configs/AppConfig.inc b/configs/AppConfig.inc index 45ccb0fe..adca33d5 100644 --- a/configs/AppConfig.inc +++ b/configs/AppConfig.inc @@ -68,6 +68,17 @@ ); + /** + * Miscellaneous settings + * + * @static + * @var array + */ + public static $misc = array( + 'ranking_range' => 2 + ); + + /** * Validation settings for user input * diff --git a/controllers/CharactersController.inc b/controllers/CharactersController.inc index 70a651dd..6299dfe7 100644 --- a/controllers/CharactersController.inc +++ b/controllers/CharactersController.inc @@ -123,6 +123,32 @@ // Get Achievements $achievements = $this->Achievements->getAchievedAchievementsForCharacter($character['id']); + // Get ranking + $ranking = array( + 'superior' => $this->Characters->getSuperiorCharacters($seminary['id'], $character['xps'], \nre\configs\AppConfig::$misc['ranking_range']), + 'inferior' => $this->Characters->getInferiorCharacters($seminary['id'], $character['xps'], \nre\configs\AppConfig::$misc['ranking_range']) + ); + foreach($ranking['superior'] as &$rankCharacter) + { + if(!is_null($rankCharacter['avatar_id'])) + { + $avatar = $this->Avatars->getAvatarById($rankCharacter['avatar_id']); + if(!is_null($avatar['small_avatarpicture_id'])) { + $rankCharacter['small_avatar'] = $this->Media->getSeminaryMediaById($avatar['small_avatarpicture_id']); + } + } + } + foreach($ranking['inferior'] as &$rankCharacter) + { + if(!is_null($rankCharacter['avatar_id'])) + { + $avatar = $this->Avatars->getAvatarById($rankCharacter['avatar_id']); + if(!is_null($avatar['small_avatarpicture_id'])) { + $rankCharacter['small_avatar'] = $this->Media->getSeminaryMediaById($avatar['small_avatarpicture_id']); + } + } + } + // Get Quest topics $questtopics = $this->Questtopics->getQuesttopicsForSeminary($seminary['id']); foreach($questtopics as &$questtopic) @@ -139,6 +165,7 @@ $this->set('user', $user); $this->set('groups', $groups); $this->set('achievements', $achievements); + $this->set('ranking', $ranking); $this->set('questtopics', $questtopics); } 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 1b1ca27ad7273e1c519ddb5637e377ca714944d2..ea6966685377ae2d1fb8addd1978bc04909e406d 100644 GIT binary patch delta 2492 zcmZA3Z%mbC7{~D|I3C3GDE>+LV;ql&oFjNRVxV9unx#c*DVjnlrlOKG%bCvRv)Y)N z>(9oBRV&+cZXvBUX0TSPHCL`)L@#2Q7WATCWBYC4R{kLVdQSJ@fdUGA(t(4SECZ!jErr& za1=g=n%F_q?{?rcJcGH6Z(n$ai>R6YgN$jJH1q=z)M8Bbb^&r(j9VC!sQ#7Su0{1< zi6LBzTvpF*G;VWSa027oekw)ShO@8>^#lDl6MsU@{Fb-JGEMa_Mhq^?s4oUrUvsmk!^2sUg}E5!ZOtU=#_`L$ND}E{f3Xi!Fho{LI1lwa zf%+V4kX^BLScXklh_7Q3KXQXXD*8^x^HFN=i%~PHz$#pfbg=`d&*l~6vQysfLk;u; zlA8^pe&-r0v0>Ev5wg`pW0;R|B;mkTP>Jzi11gb2I2+$U9iBeqvh&=ubU&jK9P;)R z)Xc7-2FT$@H1IUk3YMVyr%+q4$lJB3^JjHb)Ug5ca62Y2aJx{a^+!}e_j(;ZP1F)WIk%+*TV+vVq->?KjL pT3dFvHuszu_f2M2Wi*wluBdF^lrv+b-t$sUL3pIoJ5y^y{{l#q%ToXV delta 2462 zcmXxleN0t#9LMpmm&?PwCW%-)icnyJ)CE*7U{oSyshLGWC<#5Fg&Ehi+H}*~Bx_5{ z(rEnQay@LOn~io$vvOYNbZym|x@vRnZY}Z;-E3^lTD9u^f$#n8e9!B5&OPV+zP~5< zH~K>~o|+LHHcE^rCH7~S=|*WbCrT`2b{%fU8Mqy%;hQ)e4`2a~VlIA#HTWamh=K6r zbrH_vx*ca?40%3oJE?HkTbvs30P4f%Q4Rir`FIVl$MDoii;=@>+(uMlZAja;3NvvH zs$+eq?{33Fd>xBu-wyf%r%*jjA#K?e)CaDi2IC*U4)Tzm3vIi9XOr#t%ph_Zo(?ui~7K4crzwZJsoya5B<8DNCWGm|ZAyk7O z`t@ZkMueYE^;6+q|yWBT0!1XX{3PzB_ z4s+6TU!WRJq7pxgYUlen6=m`h7U3mSPxKWT!sHZ&ANk2HFb_B27%JhvQ1`=Rscl$- z%!bX!TX8YY#zBnW9`___d&YmGqPfpvQ>thA7{xN=C+kFQmjUFkA-^6$HS{s6$0t$W zIfqItg?j%gs;2?6F2N8g;VQgI`@fNjGU>)!Fos$@BgkPNaMI9yj!H1;*I%Q0b`I6R zII7`4Q6rbbNA-LjY6?pIx&k!?wV0#*zlcgPH`=iVd)-%2tMyYGH%u@?4K$e9Kq7vDG8uGpF`=|sy!T4M%C#YxyE}=$X3f+{os1fMG2==1(?H*JD z3FH+!j_Ub&R7X-+i&wA=3;FnM7Tw%tadx1-*N+;}K~$nIlq{X>;Se`CY?pfw^}=aXgWn>%(AtS~ zS?v`yv}s>`C_f(aJ3Ks59(FZm+KejQ#65&2auK1jfY8L(5o-yhSWajWXgKB(gM`Y1 zL^ZLI=p@z<8f%7HYsu{XiSy*?UaxDc9wqJ~?j&v}W)b?ocn6`e*Els2>C)vDHt9rZ zb?0M?*Oy?2*B?;(OYW(Vm6^wb04AAw32w7SWKkLDz7}@u5*`TKcQu< zy||vxyfhP9sVXbff6eM#LaXH|;z{BWVt}Y3RCd%~(ca_$9CDBJLBc3MOh&e>MOikdb->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 charactertypes_url, seminarymedia.url AS avatar_url, seminarymedia.description AS avatar_description '. + '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 charactertypes_url, seminarymedia.url AS avatar_url, seminarymedia.description AS avatar_description, small_seminarymedia.url AS small_avatar_url, small_seminarymedia.description AS small_avatar_description '. 'FROM v_characters AS characters '. 'LEFT JOIN charactertypes ON charactertypes.id = characters.charactertype_id '. 'LEFT JOIN avatars ON avatars.id = characters.avatar_id '. 'LEFT JOIN avatarpictures ON avatarpictures.seminarymedia_id = avatars.avatarpicture_id '. 'LEFT JOIN seminarymedia ON seminarymedia.id = avatarpictures.seminarymedia_id '. + 'LEFT JOIN avatarpictures AS small_avatarpictures ON small_avatarpictures.seminarymedia_id = avatars.small_avatarpicture_id '. + 'LEFT JOIN seminarymedia AS small_seminarymedia ON small_seminarymedia.id = small_avatarpictures.seminarymedia_id '. 'WHERE charactertypes.seminary_id = ? AND characters.url = ?', 'is', $seminaryId, $characterUrl @@ -164,12 +166,14 @@ public function getCharacterById($characterId) { $data = $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 charactertypes_url, seminarymedia.url AS avatar_url, seminarymedia.description AS avatar_description '. + '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 charactertypes_url, seminarymedia.url AS avatar_url, seminarymedia.description AS avatar_description, small_seminarymedia.url AS small_avatar_url, small_seminarymedia.description AS small_avatar_description '. 'FROM v_characters AS characters '. 'LEFT JOIN charactertypes ON charactertypes.id = characters.charactertype_id '. 'LEFT JOIN avatars ON avatars.id = characters.avatar_id '. 'LEFT JOIN avatarpictures ON avatarpictures.seminarymedia_id = avatars.avatarpicture_id '. 'LEFT JOIN seminarymedia ON seminarymedia.id = avatarpictures.seminarymedia_id '. + 'LEFT JOIN avatarpictures AS small_avatarpictures ON small_avatarpictures.seminarymedia_id = avatars.small_avatarpicture_id '. + 'LEFT JOIN seminarymedia AS small_seminarymedia ON small_seminarymedia.id = small_avatarpictures.seminarymedia_id '. 'WHERE characters.id = ?', 'i', $characterId @@ -258,6 +262,52 @@ } + /** + * Get the superior $count Characters in the ranking. + * + * @param int $seminaryId ID of Seminary + * @param int $xps XP-value of Character + * @param int $count Count of Characters to determine + * @return array List of superior Characters + */ + public function getSuperiorCharacters($seminaryId, $xps, $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 charactertypes_url '. + 'FROM v_characters AS characters '. + 'INNER JOIN charactertypes ON charactertypes.id = characters.charactertype_id '. + 'WHERE charactertypes.seminary_id = ? AND characters.xps > ? '. + 'ORDER BY characters.xps ASC '. + 'LIMIT ?', + 'idd', + $seminaryId, $xps, $count + ); + } + + + /** + * Get the inferior $count Characters in the ranking. + * + * @param int $seminaryId ID of Seminary + * @param int $xps XP-value of Character + * @param int $count Count of Characters to determine + * @return array List of inferior Characters + */ + public function getInferiorCharacters($seminaryId, $xps, $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 charactertypes_url '. + 'FROM v_characters AS characters '. + 'INNER JOIN charactertypes ON charactertypes.id = characters.charactertype_id '. + 'WHERE charactertypes.seminary_id = ? AND characters.xps < ? '. + 'ORDER BY characters.xps DESC '. + 'LIMIT ?', + 'idd', + $seminaryId, $xps, $count + ); + } + + /** * Get Characters that solved a Quest. * diff --git a/views/html/characters/character.tpl b/views/html/characters/character.tpl index dedab4c8..74ba7cae 100644 --- a/views/html/characters/character.tpl +++ b/views/html/characters/character.tpl @@ -62,33 +62,33 @@
-

Ranking

+

    + &$rankCharacter) : ?>
  • - -

    7. Anduin

    -

    Level 27 (1500 XP)

    + + + +

    .

    +

    ( XPs)

  • +
  • - -

    8. Jaina

    -

    Level 26 (1400 XP)

    + + + +

    .

    +

    ( XPs)

  • + &$rankCharacter) : ?>
  • - -

    9. Uther

    -

    Level 25 (1300 XP)

    -
  • -
  • - -

    10. Lothar

    -

    Level 24 (1200 XP)

    -
  • -
  • - -

    11. Morris

    -

    Level 23 (1100 XP)

    + + + +

    .

    +

    ( XPs)

  • +