set dynamic value for Achievement list

This commit is contained in:
coderkun 2014-04-17 01:10:05 +02:00
commit 0992d000c8
5 changed files with 112 additions and 66 deletions

View file

@ -61,15 +61,15 @@
// Get Character // Get Character
$character = SeminaryRoleController::$character; $character = SeminaryRoleController::$character;
// Get Achievements // Get achieved Achievements
$achievements = $this->Achievements->getAchievementsForSeminary($seminary['id']); $achievedAchievements = $this->Achievements->getAchievedAchievementsForCharacter($character['id']);
foreach($achievements as &$achievement)
{
// Get status for Character
$achieved = $this->Achievements->hasCharacterAchievedAchievement($achievement['id'], $character['id']);
// Get unachieved Achievements
$unachievedAchievements = $this->Achievements->getUnachhievedAchievementsForCharacter($seminary['id'], $character['id'], true);
foreach($unachievedAchievements as &$achievement)
{
// Get Character progress // Get Character progress
if(!$achieved && $achievement['progress']) if($achievement['progress'])
{ {
$conditions = array(); $conditions = array();
switch($achievement['condition']) switch($achievement['condition'])
@ -143,18 +143,17 @@
$achievement['characterProgress'] = array_sum($characterProgresses) / count($characterProgresses); $achievement['characterProgress'] = array_sum($characterProgresses) / count($characterProgresses);
} }
}
// Get media // Get ranking
$achievement['media_index'] = 'unachieved_achievementsmedia_id'; $character['rank'] = $this->Achievements->getCountRank($seminary['id'], count($achievedAchievements));
if($achieved) {
$achievement['media_index'] = 'achieved_achievementsmedia_id';
}
}
// Pass data to view // Pass data to view
$this->set('seminary', $seminary); $this->set('seminary', $seminary);
$this->set('achievements', $achievements); $this->set('character', $character);
$this->set('achievedAchievements', $achievedAchievements);
$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-16 15:53+0100\n" "POT-Creation-Date: 2014-04-17 01:08+0100\n"
"PO-Revision-Date: 2014-04-16 15:54+0100\n" "PO-Revision-Date: 2014-04-17 01:08+0100\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
"Language: de_DE\n" "Language: de_DE\n"
@ -102,26 +102,43 @@ msgstr "Fehler"
msgid "Achievements" msgid "Achievements"
msgstr "Errungenschaften" msgstr "Errungenschaften"
#: views/html/achievements/index.tpl:15 #: views/html/achievements/index.tpl:53
#, php-format
msgid "Own progress: %d%%"
msgstr "Persönlicher Fortschritt: %d%%"
#: views/html/achievements/index.tpl:54
#: 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
#, 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/seminarybar/index.tpl:28
#, php-format
msgid "achieved at: %s"
msgstr "erhalten am: %s"
#: views/html/achievements/index.tpl:79
msgid "Secret Achievement" msgid "Secret Achievement"
msgstr "Geheime Errungenschaft" msgstr "Geheime Errungenschaft"
#: views/html/achievements/index.tpl:19 #: views/html/achievements/index.tpl:84
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"
#: views/html/charactergroups/group.tpl:7 #: views/html/charactergroups/group.tpl:7
#: views/html/charactergroups/groupsgroup.tpl:7 #: views/html/charactergroups/groupsgroup.tpl:7
#: views/html/charactergroups/index.tpl:7 #: views/html/charactergroups/index.tpl:7
#: views/html/characters/character.tpl:53 views/html/seminarymenu/index.tpl:3 #: views/html/characters/character.tpl:51 views/html/seminarymenu/index.tpl:3
msgid "Character Groups" msgid "Character Groups"
msgstr "Charaktergruppen" msgstr "Charaktergruppen"
#: views/html/charactergroups/group.tpl:18
#: views/html/characters/character.tpl:28 views/html/seminarybar/index.tpl:7
msgid "Rank"
msgstr "Platz"
#: views/html/charactergroups/group.tpl:20 #: views/html/charactergroups/group.tpl:20
msgid "Members" msgid "Members"
msgstr "Mitglieder" msgstr "Mitglieder"
@ -167,23 +184,18 @@ msgid "Total progress"
msgstr "Fortschritt" msgstr "Fortschritt"
#: views/html/characters/character.tpl:20 #: views/html/characters/character.tpl:20
#: views/html/characters/character.tpl:73 #: views/html/characters/character.tpl:69
#: views/html/characters/character.tpl:81 #: views/html/characters/character.tpl:75
#: views/html/characters/character.tpl:89 views/html/seminarybar/index.tpl:44 #: views/html/characters/character.tpl:81 views/html/seminarybar/index.tpl:42
#: views/html/users/user.tpl:29 #: views/html/users/user.tpl:29
msgid "Level" msgid "Level"
msgstr "Level" msgstr "Level"
#: views/html/characters/character.tpl:39 views/html/seminarybar/index.tpl:28 #: views/html/characters/character.tpl:63
#, php-format
msgid "achieved at: %s"
msgstr "erhalten am: %s"
#: views/html/characters/character.tpl:65
msgid "Ranking" msgid "Ranking"
msgstr "Ranking" msgstr "Ranking"
#: views/html/characters/character.tpl:97 #: views/html/characters/character.tpl:89
msgid "Topic progress" msgid "Topic progress"
msgstr "Thematischer Fortschritt" msgstr "Thematischer Fortschritt"
@ -399,7 +411,7 @@ msgstr "Quests anzeigen"
msgid "Last Quest" msgid "Last Quest"
msgstr "Letzter Speicherpunkt" msgstr "Letzter Speicherpunkt"
#: views/html/seminarybar/index.tpl:48 #: views/html/seminarybar/index.tpl:46
#, php-format #, php-format
msgid "Show %s-Profile" msgid "Show %s-Profile"
msgstr "%s-Profil anzeigen" msgstr "%s-Profil anzeigen"
@ -555,6 +567,10 @@ msgstr "Name"
msgid "Roles" msgid "Roles"
msgstr "Rollen" msgstr "Rollen"
#, fuzzy
#~ msgid "achieved at %s"
#~ msgstr "erhalten am: %s"
#~ msgid "Usergroups" #~ msgid "Usergroups"
#~ msgstr "Benutzergruppen" #~ msgstr "Benutzergruppen"

View file

@ -60,26 +60,6 @@
} }
/**
* Get all Achievements of a Seminary.
*
* @param int $seminaryId ID of Seminary to get Achievements of
* @return array Achievements data
*/
public function getAchievementsForSeminary($seminaryId)
{
return $this->db->query(
'SELECT achievements.id, achievementconditions.condition, title, url, description, progress, hidden, unachieved_achievementsmedia_id, achieved_achievementsmedia_id '.
'FROM achievements '.
'LEFT JOIN achievementconditions ON achievementconditions.id = achievements.achievementcondition_id '.
'WHERE seminary_id = ? '.
'ORDER BY achievements.pos ASC',
'i',
$seminaryId
);
}
/** /**
* Get all not yet achieved Achievements for a Seminary that can * Get all not yet achieved Achievements for a Seminary that can
* only be achieved once (only by one Character). * only be achieved once (only by one Character).
@ -131,26 +111,60 @@
* @param int $characterId ID of Character * @param int $characterId ID of Character
* @return array Achievements data * @return array Achievements data
*/ */
public function getUnachhievedAchievementsForCharacter($seminaryId, $characterId) public function getUnachhievedAchievementsForCharacter($seminaryId, $characterId, $includeOnlyOnce=false)
{ {
return $this->db->query( return $this->db->query(
'SELECT achievements.id, achievementconditions.condition, title, url, description, progress, hidden, only_once, all_conditions, unachieved_achievementsmedia_id, achieved_achievementsmedia_id '. 'SELECT achievements.id, achievementconditions.condition, title, url, description, progress, hidden, only_once, all_conditions, unachieved_achievementsmedia_id, achieved_achievementsmedia_id '.
'FROM achievements '. 'FROM achievements '.
'LEFT JOIN achievementconditions ON achievementconditions.id = achievements.achievementcondition_id '. 'LEFT JOIN achievementconditions ON achievementconditions.id = achievements.achievementcondition_id '.
'WHERE achievements.seminary_id = ? AND only_once = 0 AND NOT EXISTS ('. 'WHERE achievements.seminary_id = ? AND only_once <= ? AND NOT EXISTS ('.
'SELECT character_id '. 'SELECT character_id '.
'FROM achievements_characters '. 'FROM achievements_characters '.
'WHERE '. 'WHERE '.
'achievements_characters.achievement_id = achievements.id AND '. 'achievements_characters.achievement_id = achievements.id AND '.
'achievements_characters.character_id = ?'. 'achievements_characters.character_id = ?'.
')', ') '.
'ii', 'ORDER BY achievements.pos ASC',
'iii',
$seminaryId, $seminaryId,
$includeOnlyOnce,
$characterId $characterId
); );
} }
/**
* Get the rank for the number of achieved Achievements.
*
* @param int $seminaryId ID of Seminary
* @param int $xps Amount of achieved Achievements
* @return int Rank of Achievements count
*/
public function getCountRank($seminaryId, $count)
{
$data = $this->db->query(
'SELECT count(*) AS c '.
'FROM ('.
'SELECT count(DISTINCT achievement_id) '.
'FROM achievements_characters '.
'LEFT JOIN achievements ON achievements.id = achievements_characters.achievement_id '.
'WHERE achievements.seminary_id = ? '.
'GROUP BY character_id '.
'HAVING count(DISTINCT achievement_id) > ?'.
') AS ranking',
'ii',
$seminaryId,
$count
);
if(!empty($data)) {
return $data[0]['c'] + 1;
}
return 1;
}
/** /**
* Get all date conditions for an Achievement. * Get all date conditions for an Achievement.
* *
@ -492,15 +506,18 @@
public function hasCharacterAchievedAchievement($achievementId, $characterId) public function hasCharacterAchievedAchievement($achievementId, $characterId)
{ {
$data = $this->db->query( $data = $this->db->query(
'SELECT character_id '. 'SELECT achievement_id, character_id, created '.
'FROM achievements_characters '. 'FROM achievements_characters '.
'WHERE achievement_id = ? AND character_id = ?', 'WHERE achievement_id = ? AND character_id = ?',
'ii', 'ii',
$achievementId, $characterId $achievementId, $characterId
); );
if(!empty($data)) {
return $data[0];
}
return !empty($data); return false;
} }
} }

View file

@ -50,20 +50,34 @@
</section> </section>
</div> </div>
<h3>Persönlicher Fortschritt: 75%</h3> <h3><?=sprintf(_('Own progress: %d%%'), round(count($achievedAchievements) / (count($achievedAchievements)+count($unachievedAchievements)) * 100))?></h3>
<p><b>12. Platz:</b> Du hast bislang 13 von insgesamt 75 Errungenschaften erreicht.</p> <p><b><?=$character['rank']?>. <?=_('Rank')?>:</b> <?=sprintf(_('You achieved %d of %d Achievements so far'), count($achievedAchievements), count($achievedAchievements)+count($unachievedAchievements))?>.</p>
<ul class="achmnts"> <ul class="achmnts">
<li class="cf"> <li class="cf">
<img src="http://legende-von-zyren.de/img/achieve/36b.jpg" /> <img src="http://legende-von-zyren.de/img/achieve/36b.jpg" />
<p class="fwb">Freigeschaltetes Achievement<span class="unlcked">erreicht am 17.06.104</span></p> <p class="fwb">Freigeschaltetes Achievement<span class="unlcked">erreicht am 17.06.104</span></p>
<p class="desc">Das Bild ist entsprechend farbig, ein eventueller Fortschrittsbalken mit 100% soll entfallen.</p> <p class="desc">Das Bild ist entsprechend farbig, ein eventueller Fortschrittsbalken mit 100% soll entfallen.</p>
</li> </li>
<?php foreach($achievements as &$achievement) : ?> <?php foreach($achievedAchievements as &$achievement) : ?>
<li class="cf"> <li class="cf">
<?php if(!is_null($achievement[$achievement['media_index']])) : ?> <?php if(!is_null($achievement['achieved_achievementsmedia_id'])) : ?>
<img src="<?=$linker->link(array('media','achievement',$seminary['url'],$achievement['url']))?>" /> <img src="<?=$linker->link(array('media','achievement',$seminary['url'],$achievement['url']))?>" />
<?php endif ?> <?php endif ?>
<p class="fwb"><?=(!$achievement['hidden']) ? $achievement['title'] : _('Secret Achievement')?><span class="unlcked">erreicht am 17.06.104</span></p> <p class="fwb">
<?=$achievement['title']?>
<span class="unlcked"><?=sprintf(_('achieved at: %s'), $dateFormatter->format(new \DateTime($achievement['created'])))?></span>
</p>
<p class="desc"><?=\hhu\z\Utils::t($achievement['description'])?></p>
</li>
<?php endforeach?>
<?php foreach($unachievedAchievements as &$achievement) : ?>
<li class="cf">
<?php if(!is_null($achievement['unachieved_achievementsmedia_id'])) : ?>
<img src="<?=$linker->link(array('media','achievement',$seminary['url'],$achievement['url']))?>" />
<?php endif ?>
<p class="fwb">
<?=(!$achievement['hidden']) ? $achievement['title'] : _('Secret Achievement')?>
</p>
<?php if(!$achievement['hidden']) : ?> <?php if(!$achievement['hidden']) : ?>
<p class="desc"><?=\hhu\z\Utils::t($achievement['description'])?></p> <p class="desc"><?=\hhu\z\Utils::t($achievement['description'])?></p>
<?php else : ?> <?php else : ?>