add ranking to Character page

This commit is contained in:
coderkun 2014-04-16 11:36:58 +02:00
commit 2c515f2bfe
6 changed files with 120 additions and 25 deletions

View file

@ -68,6 +68,17 @@
); );
/**
* Miscellaneous settings
*
* @static
* @var array
*/
public static $misc = array(
'ranking_range' => 2
);
/** /**
* Validation settings for user input * Validation settings for user input
* *

View file

@ -123,6 +123,32 @@
// Get Achievements // Get Achievements
$achievements = $this->Achievements->getAchievedAchievementsForCharacter($character['id']); $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 // Get Quest topics
$questtopics = $this->Questtopics->getQuesttopicsForSeminary($seminary['id']); $questtopics = $this->Questtopics->getQuesttopicsForSeminary($seminary['id']);
foreach($questtopics as &$questtopic) foreach($questtopics as &$questtopic)
@ -139,6 +165,7 @@
$this->set('user', $user); $this->set('user', $user);
$this->set('groups', $groups); $this->set('groups', $groups);
$this->set('achievements', $achievements); $this->set('achievements', $achievements);
$this->set('ranking', $ranking);
$this->set('questtopics', $questtopics); $this->set('questtopics', $questtopics);
} }

View file

@ -1,8 +1,8 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: The Legend of Z\n" "Project-Id-Version: The Legend of Z\n"
"POT-Creation-Date: 2014-04-15 20:19+0100\n" "POT-Creation-Date: 2014-04-16 11:36+0100\n"
"PO-Revision-Date: 2014-04-15 20:19+0100\n" "PO-Revision-Date: 2014-04-16 11:36+0100\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
"Language: de_DE\n" "Language: de_DE\n"
@ -162,7 +162,10 @@ msgstr "Verlorene Quest"
msgid "Total progress" msgid "Total progress"
msgstr "Fortschritt" 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 #: views/html/users/user.tpl:29
msgid "Level" msgid "Level"
msgstr "Level" msgstr "Level"
@ -172,6 +175,10 @@ msgstr "Level"
msgid "achieved at: %s" msgid "achieved at: %s"
msgstr "erhalten am: %s" msgstr "erhalten am: %s"
#: views/html/characters/character.tpl:65
msgid "Ranking"
msgstr "Ranking"
#: views/html/characters/character.tpl:97 #: views/html/characters/character.tpl:97
msgid "Topic progress" msgid "Topic progress"
msgstr "Thematischer Fortschritt" msgstr "Thematischer Fortschritt"

View file

@ -135,12 +135,14 @@
public function getCharacterByUrl($seminaryId, $characterUrl) public function getCharacterByUrl($seminaryId, $characterUrl)
{ {
$data = $this->db->query( $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 '. 'FROM v_characters AS characters '.
'LEFT JOIN charactertypes ON charactertypes.id = characters.charactertype_id '. 'LEFT JOIN charactertypes ON charactertypes.id = characters.charactertype_id '.
'LEFT JOIN avatars ON avatars.id = characters.avatar_id '. 'LEFT JOIN avatars ON avatars.id = characters.avatar_id '.
'LEFT JOIN avatarpictures ON avatarpictures.seminarymedia_id = avatars.avatarpicture_id '. 'LEFT JOIN avatarpictures ON avatarpictures.seminarymedia_id = avatars.avatarpicture_id '.
'LEFT JOIN seminarymedia ON seminarymedia.id = avatarpictures.seminarymedia_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 = ?', 'WHERE charactertypes.seminary_id = ? AND characters.url = ?',
'is', 'is',
$seminaryId, $characterUrl $seminaryId, $characterUrl
@ -164,12 +166,14 @@
public function getCharacterById($characterId) public function getCharacterById($characterId)
{ {
$data = $this->db->query( $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 '. 'FROM v_characters AS characters '.
'LEFT JOIN charactertypes ON charactertypes.id = characters.charactertype_id '. 'LEFT JOIN charactertypes ON charactertypes.id = characters.charactertype_id '.
'LEFT JOIN avatars ON avatars.id = characters.avatar_id '. 'LEFT JOIN avatars ON avatars.id = characters.avatar_id '.
'LEFT JOIN avatarpictures ON avatarpictures.seminarymedia_id = avatars.avatarpicture_id '. 'LEFT JOIN avatarpictures ON avatarpictures.seminarymedia_id = avatars.avatarpicture_id '.
'LEFT JOIN seminarymedia ON seminarymedia.id = avatarpictures.seminarymedia_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 = ?', 'WHERE characters.id = ?',
'i', 'i',
$characterId $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. * Get Characters that solved a Quest.
* *

View file

@ -62,33 +62,33 @@
</section> </section>
<section class="flr48"> <section class="flr48">
<h1><i class="fa fa-list fa-fw"></i>Ranking</h1> <h1><i class="fa fa-list fa-fw"></i><?=_('Ranking')?></h1>
<ul class="cranks"> <ul class="cranks">
<?php foreach($ranking['superior'] as $index => &$rankCharacter) : ?>
<li> <li>
<a href="#" title="Achievement-Titel"><img src="http://s7.directupload.net/images/140325/e2wdqhqa.png"></a> <?php if(array_key_exists('small_avatar', $rankCharacter)) : ?>
<p>7. <a href="#">Anduin</a></p> <a href="#" title="Achievement-Titel"><img src="<?=$linker->link(array('media','seminary',$seminary['url'],$rankCharacter['small_avatar']['url']))?>"></a>
<p><small>Level 27 (1500 XP)</small></p> <?php endif ?>
<p><?=$character['rank']-count($ranking['superior'])+$index?>. <a href="#"><?=$rankCharacter['name']?></a></p>
<p><small><?=_('Level')?> <?=$rankCharacter['xplevel']?> (<?=$rankCharacter['xps']?>XPs)</small></p>
</li> </li>
<?php endforeach ?>
<li> <li>
<a href="#" title="Achievement-Titel"><img src="http://s1.directupload.net/images/140325/upv2dg2r.png"></a> <?php if(array_key_exists('small_avatar_url', $character)) : ?>
<p>8. <a href="#">Jaina</a></p> <a href="#" title="Achievement-Titel"><img src="<?=$linker->link(array('media','seminary',$seminary['url'],$character['small_avatar_url']))?>"></a>
<p><small>Level 26 (1400 XP)</small></p> <?php endif ?>
<p class="fwb"><?=$character['rank']?>. <a href="#"><?=$character['name']?></a></p>
<p><small><?=_('Level')?> <?=$character['xplevel']['level']?> (<?=$character['xps']?>XPs)</small></p>
</li> </li>
<?php foreach($ranking['inferior'] as $index => &$rankCharacter) : ?>
<li> <li>
<a href="#" title="Achievement-Titel"><img src="http://s14.directupload.net/images/140325/x9ny5kgu.png"></a> <?php if(array_key_exists('small_avatar', $rankCharacter)) : ?>
<p class="fwb">9. <a href="#">Uther</a></p> <a href="#" title="Achievement-Titel"><img src="<?=$linker->link(array('media','seminary',$seminary['url'],$rankCharacter['small_avatar']['url']))?>"></a>
<p><small>Level 25 (1300 XP)</small></p> <?php endif ?>
</li> <p><?=$character['rank']+$index+1?>. <a href="#"><?=$rankCharacter['name']?></a></p>
<li> <p><small><?=_('Level')?> <?=$rankCharacter['xplevel']?> (<?=$rankCharacter['xps']?>XPs)</small></p>
<a href="#" title="Achievement-Titel"><img src="http://s7.directupload.net/images/140325/e2wdqhqa.png"></a>
<p>10. <a href="#">Lothar</a></p>
<p><small>Level 24 (1200 XP)</small></p>
</li>
<li>
<a href="#" title="Achievement-Titel"><img src="http://s1.directupload.net/images/140325/whre34td.png"></a>
<p>11. <a href="#">Morris</a></p>
<p><small>Level 23 (1100 XP)</small></p>
</li> </li>
<?php endforeach ?>
</ul> </ul>
</section> </section>
</div> </div>