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 1b1ca27a..ea696668 100644 Binary files a/locale/de_DE/LC_MESSAGES/The Legend of Z.mo and b/locale/de_DE/LC_MESSAGES/The Legend of Z.mo differ 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 0ee6ca56..d4860fa3 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-15 20:19+0100\n" -"PO-Revision-Date: 2014-04-15 20:19+0100\n" +"POT-Creation-Date: 2014-04-16 11:36+0100\n" +"PO-Revision-Date: 2014-04-16 11:36+0100\n" "Last-Translator: \n" "Language-Team: \n" "Language: de_DE\n" @@ -162,7 +162,10 @@ msgstr "Verlorene Quest" msgid "Total progress" msgstr "Fortschritt" -#: views/html/characters/character.tpl:20 views/html/seminarybar/index.tpl:44 +#: 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/users/user.tpl:29 msgid "Level" msgstr "Level" @@ -172,6 +175,10 @@ msgstr "Level" msgid "achieved at: %s" msgstr "erhalten am: %s" +#: views/html/characters/character.tpl:65 +msgid "Ranking" +msgstr "Ranking" + #: views/html/characters/character.tpl:97 msgid "Topic progress" msgstr "Thematischer Fortschritt" diff --git a/models/CharactersModel.inc b/models/CharactersModel.inc index 81b24018..a409ef0d 100644 --- a/models/CharactersModel.inc +++ b/models/CharactersModel.inc @@ -135,12 +135,14 @@ public function getCharacterByUrl($seminaryId, $characterUrl) { $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 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

+