diff --git a/controllers/AchievementsController.inc b/controllers/AchievementsController.inc index 503867d0..560de16b 100644 --- a/controllers/AchievementsController.inc +++ b/controllers/AchievementsController.inc @@ -70,8 +70,11 @@ // Get Characters with the most Achievements $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 - $achievedAchievements = $this->Achievements->getAchievedAchievementsForCharacter($character['id'], false); + $achievedAchievements = $this->Achievements->getAchievedAchievementsForCharacter($character['id']); // Get unachieved Achievements $unachievedAchievements = array_merge( @@ -176,6 +179,7 @@ $this->set('character', $character); $this->set('seldomAchievements', $seldomAchievements); $this->set('successfulCharacters', $successfulCharacters); + $this->set('achievementsCount', $achievementsCount); $this->set('achievedAchievements', $achievedAchievements); $this->set('unachievedAchievements', $unachievedAchievements); } diff --git a/models/AchievementsModel.inc b/models/AchievementsModel.inc index a569e087..d85be100 100644 --- a/models/AchievementsModel.inc +++ b/models/AchievementsModel.inc @@ -156,9 +156,11 @@ /** * Get all not yet achieved Achievements for a Character. * - * @param int $seminaryId ID of Seminary - * @param int $characterId ID of Character - * @return array Achievements data + * @param int $seminaryId ID of Seminary + * @param int $characterId ID of Character + * @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) { @@ -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. * diff --git a/views/html/achievements/index.tpl b/views/html/achievements/index.tpl index 13949eb8..49c0fcdf 100644 --- a/views/html/achievements/index.tpl +++ b/views/html/achievements/index.tpl @@ -50,12 +50,12 @@
=sprintf(_('Own progress: %d %%'), round(count($achievedAchievements) / (count($achievedAchievements)+count($unachievedAchievements)) * 100))?>
+=sprintf(_('Own progress: %d %%'), round(count($achievedAchievements) / $achievementsCount * 100))?>
=$character['rank']?>. =_('Rank')?>: =sprintf(_('You achieved %d of %d Achievements so far'), count($achievedAchievements), count($achievedAchievements)+count($unachievedAchievements))?>.
+=$character['rank']?>. =_('Rank')?>: =sprintf(_('You achieved %d of %d Achievements so far'), count($achievedAchievements), $achievementsCount)?>.