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

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

View file

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

View file

@ -24,7 +24,7 @@
*
* @var array
*/
public $models = array('achievements', 'seminaries', 'media');
public $models = array('achievements', 'seminaries', 'media', 'characters');
/**
* User permissions
*
@ -62,11 +62,14 @@
$character = SeminaryRoleController::$character;
// 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) {
$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
$achievedAchievements = $this->Achievements->getAchievedAchievementsForCharacter($character['id']);
@ -159,6 +162,7 @@
$this->set('seminary', $seminary);
$this->set('character', $character);
$this->set('seldomAchievements', $seldomAchievements);
$this->set('successfulCharacters', $successfulCharacters);
$this->set('achievedAchievements', $achievedAchievements);
$this->set('unachievedAchievements', $unachievedAchievements);
}

View file

@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: The Legend of Z\n"
"POT-Creation-Date: 2014-04-17 01:27+0100\n"
"PO-Revision-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:46+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: de_DE\n"
@ -111,33 +111,42 @@ msgstr "Die seltensten Errungenschaften"
msgid "Achievement has been achieved only %d times"
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
msgid "Own progress: %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/characters/character.tpl:28 views/html/seminarybar/index.tpl:7
msgid "Rank"
msgstr "Platz"
#: views/html/achievements/index.tpl:54
#: views/html/achievements/index.tpl:46
#, 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/achievements/index.tpl:60 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
#: views/html/achievements/index.tpl:71
msgid "Secret Achievement"
msgstr "Geheime Errungenschaft"
#: views/html/achievements/index.tpl:84
#: views/html/achievements/index.tpl:76
msgid "Continue playing to unlock this secret Achievement"
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.
*

View file

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