correctly set Achievements count (Issue #286)

This commit is contained in:
coderkun 2014-05-15 21:30:43 +02:00
commit 9f321bd695
3 changed files with 41 additions and 7 deletions

View file

@ -70,8 +70,11 @@
// Get Characters with the most Achievements // Get Characters with the most Achievements
$successfulCharacters = $this->Characters->getCharactersWithMostAchievements($seminary['id'], \nre\configs\AppConfig::$misc['achievements_range'], false); $successfulCharacters = $this->Characters->getCharactersWithMostAchievements($seminary['id'], \nre\configs\AppConfig::$misc['achievements_range'], false);
// Get total count of Achievements for Seminary
$achievementsCount = $this->Achievements->getAchievementsCountForSeminary($seminary['id'], false);
// Get achieved Achievements // Get achieved Achievements
$achievedAchievements = $this->Achievements->getAchievedAchievementsForCharacter($character['id'], false); $achievedAchievements = $this->Achievements->getAchievedAchievementsForCharacter($character['id']);
// Get unachieved Achievements // Get unachieved Achievements
$unachievedAchievements = array_merge( $unachievedAchievements = array_merge(
@ -176,6 +179,7 @@
$this->set('character', $character); $this->set('character', $character);
$this->set('seldomAchievements', $seldomAchievements); $this->set('seldomAchievements', $seldomAchievements);
$this->set('successfulCharacters', $successfulCharacters); $this->set('successfulCharacters', $successfulCharacters);
$this->set('achievementsCount', $achievementsCount);
$this->set('achievedAchievements', $achievedAchievements); $this->set('achievedAchievements', $achievedAchievements);
$this->set('unachievedAchievements', $unachievedAchievements); $this->set('unachievedAchievements', $unachievedAchievements);
} }

View file

@ -156,9 +156,11 @@
/** /**
* Get all not yet achieved Achievements for a Character. * Get all not yet achieved Achievements for a Character.
* *
* @param int $seminaryId ID of Seminary * @param int $seminaryId ID of Seminary
* @param int $characterId ID of Character * @param int $characterId ID of Character
* @return array Achievements data * @param boolean $includeOnlyOnce Include Achievements that can only be achieved by one Character
* @param boolean $alsoWithDeadline Include milestone Achievements
* @return array Achievements data
*/ */
public function getUnachhievedAchievementsForCharacter($seminaryId, $characterId, $includeOnlyOnce=false, $alsoWithDeadline=true) public function getUnachhievedAchievementsForCharacter($seminaryId, $characterId, $includeOnlyOnce=false, $alsoWithDeadline=true)
{ {
@ -183,6 +185,34 @@
} }
/**
* Get the amount of Achievement for a Seminary.
*
* @param int $seminaryId ID of Seminary
* @param boolean $includeOnlyOnce Include Achievements that can only be achieved by one Character
* @param boolean $alsoWithDeadline Include milestone Achievements
* @return int Count of Achievements
*/
public function getAchievementsCountForSeminary($seminaryId, $includeOnlyOnce=false, $alsoWithDeadline=true)
{
$data = $this->db->query(
'SELECT count(id) AS c '.
'FROM achievements '.
'WHERE seminary_id = ? AND only_once <= ?'.
(!$alsoWithDeadline ? ' AND achievements.deadline IS NULL ' : null),
'ii',
$seminaryId,
$includeOnlyOnce
);
if(!empty($data)) {
return $data[0]['c'];
}
return 0;
}
/** /**
* Get the rank for the number of achieved Achievements. * Get the rank for the number of achieved Achievements.
* *

View file

@ -50,12 +50,12 @@
</div> </div>
<h2><?=_('Personal Achievements')?></h2> <h2><?=_('Personal Achievements')?></h2>
<div class="libindxpr cf"> <div class="libindxpr cf">
<p><small><?=sprintf(_('Own progress: %d%%'), round(count($achievedAchievements) / (count($achievedAchievements)+count($unachievedAchievements)) * 100))?></small></p> <p><small><?=sprintf(_('Own progress: %d%%'), round(count($achievedAchievements) / $achievementsCount * 100))?></small></p>
<div class="xpbar"> <div class="xpbar">
<span style="width:<?=round(count($achievedAchievements) / (count($achievedAchievements)+count($unachievedAchievements)) * 100)?>%"></span> <span style="width:<?=round(count($achievedAchievements) / $achievementsCount * 100)?>%"></span>
</div> </div>
</div> </div>
<p><small><b><?=$character['rank']?>. <?=_('Rank')?>:</b> <?=sprintf(_('You achieved %d of %d Achievements so far'), count($achievedAchievements), count($achievedAchievements)+count($unachievedAchievements))?>.</small></p> <p><small><b><?=$character['rank']?>. <?=_('Rank')?>:</b> <?=sprintf(_('You achieved %d of %d Achievements so far'), count($achievedAchievements), $achievementsCount)?>.</small></p>
<ul class="achmnts"> <ul class="achmnts">
<?php foreach($achievedAchievements as &$achievement) : ?> <?php foreach($achievedAchievements as &$achievement) : ?>
<li class="cf"> <li class="cf">