determine Characters with the most achieved Achievements (Issue #57)

This commit is contained in:
coderkun 2014-04-17 01:48:33 +02:00
commit b64577a221
6 changed files with 57 additions and 26 deletions

View file

@ -94,8 +94,8 @@
* @var array * @var array
*/ */
public static $misc = array( public static $misc = array(
'ranking_range' => 2, 'ranking_range' => 2,
'seldom_achievements_range' => 3 'achievements_range' => 3
); );

View file

@ -24,7 +24,7 @@
* *
* @var array * @var array
*/ */
public $models = array('achievements', 'seminaries', 'media'); public $models = array('achievements', 'seminaries', 'media', 'characters');
/** /**
* User permissions * User permissions
* *
@ -62,11 +62,14 @@
$character = SeminaryRoleController::$character; $character = SeminaryRoleController::$character;
// Get seldom Achievements // Get seldom Achievements
$seldomAchievements = $this->Achievements->getSeldomAchievements($seminary['id'], \nre\configs\AppConfig::$misc['seldom_achievements_range']); $seldomAchievements = $this->Achievements->getSeldomAchievements($seminary['id'], \nre\configs\AppConfig::$misc['achievements_range']);
foreach($seldomAchievements as &$achievement) { foreach($seldomAchievements as &$achievement) {
$achievement['achieved'] = $this->Achievements->hasCharacterAchievedAchievement($achievement['id'], $character['id']); $achievement['achieved'] = $this->Achievements->hasCharacterAchievedAchievement($achievement['id'], $character['id']);
} }
// Get Characters with the most Achievements
$successfulCharacters = $this->Characters->getCharactersWithMostAchievements($seminary['id'], \nre\configs\AppConfig::$misc['achievements_range']);
// Get achieved Achievements // Get achieved Achievements
$achievedAchievements = $this->Achievements->getAchievedAchievementsForCharacter($character['id']); $achievedAchievements = $this->Achievements->getAchievedAchievementsForCharacter($character['id']);
@ -159,6 +162,7 @@
$this->set('seminary', $seminary); $this->set('seminary', $seminary);
$this->set('character', $character); $this->set('character', $character);
$this->set('seldomAchievements', $seldomAchievements); $this->set('seldomAchievements', $seldomAchievements);
$this->set('successfulCharacters', $successfulCharacters);
$this->set('achievedAchievements', $achievedAchievements); $this->set('achievedAchievements', $achievedAchievements);
$this->set('unachievedAchievements', $unachievedAchievements); $this->set('unachievedAchievements', $unachievedAchievements);
} }

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-17 01:27+0100\n" "POT-Creation-Date: 2014-04-17 01:46+0100\n"
"PO-Revision-Date: 2014-04-17 01:27+0100\n" "PO-Revision-Date: 2014-04-17 01:46+0100\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
"Language: de_DE\n" "Language: de_DE\n"
@ -111,33 +111,42 @@ msgstr "Die seltensten Errungenschaften"
msgid "Achievement has been achieved only %d times" msgid "Achievement has been achieved only %d times"
msgstr "wurde erst %d mal gefunden" msgstr "wurde erst %d mal gefunden"
#: views/html/achievements/index.tpl:53 #: views/html/achievements/index.tpl:32
msgid "Most successful collectors"
msgstr "Die erfolgreichsten Sammler"
#: views/html/achievements/index.tpl:38
#, php-format
msgid "Character has achieved %d Achievements"
msgstr "hat %d Errungenschaften erhalten"
#: views/html/achievements/index.tpl:45
#, php-format #, php-format
msgid "Own progress: %d%%" msgid "Own progress: %d%%"
msgstr "Persönlicher Fortschritt: %d%%" msgstr "Persönlicher Fortschritt: %d%%"
#: views/html/achievements/index.tpl:54 #: views/html/achievements/index.tpl:46
#: views/html/charactergroups/group.tpl:18 #: views/html/charactergroups/group.tpl:18
#: views/html/characters/character.tpl:28 views/html/seminarybar/index.tpl:7 #: views/html/characters/character.tpl:28 views/html/seminarybar/index.tpl:7
msgid "Rank" msgid "Rank"
msgstr "Platz" msgstr "Platz"
#: views/html/achievements/index.tpl:54 #: views/html/achievements/index.tpl:46
#, php-format #, php-format
msgid "You achieved %d of %d Achievements so far" msgid "You achieved %d of %d Achievements so far"
msgstr "Du hast bislang %d von insgesamt %d Errungenschaften erreicht" msgstr "Du hast bislang %d von insgesamt %d Errungenschaften erreicht"
#: views/html/achievements/index.tpl:68 views/html/characters/character.tpl:39 #: views/html/achievements/index.tpl:60 views/html/characters/character.tpl:39
#: views/html/seminarybar/index.tpl:28 #: views/html/seminarybar/index.tpl:28
#, php-format #, php-format
msgid "achieved at: %s" msgid "achieved at: %s"
msgstr "erhalten am: %s" msgstr "erhalten am: %s"
#: views/html/achievements/index.tpl:79 #: views/html/achievements/index.tpl:71
msgid "Secret Achievement" msgid "Secret Achievement"
msgstr "Geheime Errungenschaft" msgstr "Geheime Errungenschaft"
#: views/html/achievements/index.tpl:84 #: views/html/achievements/index.tpl:76
msgid "Continue playing to unlock this secret Achievement" msgid "Continue playing to unlock this secret Achievement"
msgstr "Spiele weiter, um diesen geheimen Erfolg freizuschalten" msgstr "Spiele weiter, um diesen geheimen Erfolg freizuschalten"

View file

@ -174,6 +174,32 @@
} }
/**
* Get Characters with the most amount of Achievements.
*
* @param int $seminaryId ID of Seminary
* @param int $conut Amount of Characters to retrieve
* @return array List of Characters
*/
public function getCharactersWithMostAchievements($seminaryId, $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 charactertype_url, count(DISTINCT achievement_id) AS c '.
'FROM achievements_characters '.
'LEFT JOIN achievements ON achievements.id = achievements_characters.achievement_id '.
'LEFT JOIN v_characters AS characters ON characters.id = achievements_characters.character_id '.
'LEFT JOIN charactertypes ON charactertypes.id = characters.charactertype_id '.
'WHERE achievements.seminary_id = ? '.
'GROUP BY character_id '.
'ORDER BY count(DISTINCT achievement_id) DESC '.
'LIMIT ?',
'ii',
$seminaryId,
$count
);
}
/** /**
* Calculate only XPs for a Character achieved through Quests. * Calculate only XPs for a Character achieved through Quests.
* *

View file

@ -29,23 +29,15 @@
</section> </section>
<section class="rare hunter"> <section class="rare hunter">
<h3>Die erfolgreichsten Sammler</h3> <h3><?=_('Most successful collectors')?></h3>
<ol> <ol>
<?php foreach($successfulCharacters as $successfulCharacter) : ?>
<li class="cf"> <li class="cf">
<img src="http://zyren.inf-d.de/media/seminary/Die-Legende-von-Zyren/Mensch01-Portrait" /> <img src="<?=$linker->link(array('media','avatar',$seminary['url'],$successfulCharacter['charactertype_url'],$successfulCharacter['xplevel'],'portrait'))?>" />
<p class="fwb">VHS</p> <p class="fwb"><?=$successfulCharacter['name']?></p>
<p><small>hat 15 Errungenschaften gefunden</small></p> <p><small><?=sprintf(_('Character has achieved %d Achievements'), $successfulCharacter['c'])?></small></p>
</li>
<li class="cf">
<img src="http://zyren.inf-d.de/media/seminary/Die-Legende-von-Zyren/Mensch01-Portrait" />
<p class="fwb">Betamax</p>
<p><small>hat 14 Errungenschaften gefunden</small></p>
</li>
<li class="cf">
<img src="http://zyren.inf-d.de/media/seminary/Die-Legende-von-Zyren/Mensch01-Portrait" />
<p class="fwb">Laserdisc</p>
<p><small>hat 12 Errungenschaften gefunden</small></p>
</li> </li>
<?php endforeach ?>
</ol> </ol>
</section> </section>
</div> </div>