set dynamic value for Achievement list

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

View file

@ -61,15 +61,15 @@
// Get Character
$character = SeminaryRoleController::$character;
// Get Achievements
$achievements = $this->Achievements->getAchievementsForSeminary($seminary['id']);
foreach($achievements as &$achievement)
// Get achieved Achievements
$achievedAchievements = $this->Achievements->getAchievedAchievementsForCharacter($character['id']);
// Get unachieved Achievements
$unachievedAchievements = $this->Achievements->getUnachhievedAchievementsForCharacter($seminary['id'], $character['id'], true);
foreach($unachievedAchievements as &$achievement)
{
// Get status for Character
$achieved = $this->Achievements->hasCharacterAchievedAchievement($achievement['id'], $character['id']);
// Get Character progress
if(!$achieved && $achievement['progress'])
if($achievement['progress'])
{
$conditions = array();
switch($achievement['condition'])
@ -143,18 +143,17 @@
$achievement['characterProgress'] = array_sum($characterProgresses) / count($characterProgresses);
}
// Get media
$achievement['media_index'] = 'unachieved_achievementsmedia_id';
if($achieved) {
$achievement['media_index'] = 'achieved_achievementsmedia_id';
}
}
// Get ranking
$character['rank'] = $this->Achievements->getCountRank($seminary['id'], count($achievedAchievements));
// Pass data to view
$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 ""
msgstr ""
"Project-Id-Version: The Legend of Z\n"
"POT-Creation-Date: 2014-04-16 15:53+0100\n"
"PO-Revision-Date: 2014-04-16 15:54+0100\n"
"POT-Creation-Date: 2014-04-17 01:08+0100\n"
"PO-Revision-Date: 2014-04-17 01:08+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: de_DE\n"
@ -102,26 +102,43 @@ msgstr "Fehler"
msgid "Achievements"
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"
msgstr "Geheime Errungenschaft"
#: views/html/achievements/index.tpl:19
#: views/html/achievements/index.tpl:84
msgid "Continue playing to unlock this secret Achievement"
msgstr "Spiele weiter, um diesen geheimen Erfolg freizuschalten"
#: views/html/charactergroups/group.tpl:7
#: views/html/charactergroups/groupsgroup.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"
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
msgid "Members"
msgstr "Mitglieder"
@ -167,23 +184,18 @@ msgid "Total progress"
msgstr "Fortschritt"
#: views/html/characters/character.tpl:20
#: views/html/characters/character.tpl:73
#: views/html/characters/character.tpl:81
#: views/html/characters/character.tpl:89 views/html/seminarybar/index.tpl:44
#: views/html/characters/character.tpl:69
#: views/html/characters/character.tpl:75
#: views/html/characters/character.tpl:81 views/html/seminarybar/index.tpl:42
#: views/html/users/user.tpl:29
msgid "Level"
msgstr "Level"
#: views/html/characters/character.tpl:39 views/html/seminarybar/index.tpl:28
#, php-format
msgid "achieved at: %s"
msgstr "erhalten am: %s"
#: views/html/characters/character.tpl:65
#: views/html/characters/character.tpl:63
msgid "Ranking"
msgstr "Ranking"
#: views/html/characters/character.tpl:97
#: views/html/characters/character.tpl:89
msgid "Topic progress"
msgstr "Thematischer Fortschritt"
@ -399,7 +411,7 @@ msgstr "Quests anzeigen"
msgid "Last Quest"
msgstr "Letzter Speicherpunkt"
#: views/html/seminarybar/index.tpl:48
#: views/html/seminarybar/index.tpl:46
#, php-format
msgid "Show %s-Profile"
msgstr "%s-Profil anzeigen"
@ -555,6 +567,10 @@ msgstr "Name"
msgid "Roles"
msgstr "Rollen"
#, fuzzy
#~ msgid "achieved at %s"
#~ msgstr "erhalten am: %s"
#~ msgid "Usergroups"
#~ 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
* only be achieved once (only by one Character).
@ -131,26 +111,60 @@
* @param int $characterId ID of Character
* @return array Achievements data
*/
public function getUnachhievedAchievementsForCharacter($seminaryId, $characterId)
public function getUnachhievedAchievementsForCharacter($seminaryId, $characterId, $includeOnlyOnce=false)
{
return $this->db->query(
'SELECT achievements.id, achievementconditions.condition, title, url, description, progress, hidden, only_once, all_conditions, unachieved_achievementsmedia_id, achieved_achievementsmedia_id '.
'FROM achievements '.
'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 '.
'FROM achievements_characters '.
'WHERE '.
'achievements_characters.achievement_id = achievements.id AND '.
'achievements_characters.character_id = ?'.
')',
'ii',
') '.
'ORDER BY achievements.pos ASC',
'iii',
$seminaryId,
$includeOnlyOnce,
$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.
*
@ -492,15 +506,18 @@
public function hasCharacterAchievedAchievement($achievementId, $characterId)
{
$data = $this->db->query(
'SELECT character_id '.
'SELECT achievement_id, character_id, created '.
'FROM achievements_characters '.
'WHERE achievement_id = ? AND character_id = ?',
'ii',
$achievementId, $characterId
);
if(!empty($data)) {
return $data[0];
}
return !empty($data);
return false;
}
}

View file

@ -50,20 +50,34 @@
</section>
</div>
<h3>Persönlicher Fortschritt: 75%</h3>
<p><b>12. Platz:</b> Du hast bislang 13 von insgesamt 75 Errungenschaften erreicht.</p>
<h3><?=sprintf(_('Own progress: %d%%'), round(count($achievedAchievements) / (count($achievedAchievements)+count($unachievedAchievements)) * 100))?></h3>
<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">
<li class="cf">
<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="desc">Das Bild ist entsprechend farbig, ein eventueller Fortschrittsbalken mit 100% soll entfallen.</p>
</li>
<?php foreach($achievements as &$achievement) : ?>
<?php foreach($achievedAchievements as &$achievement) : ?>
<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']))?>" />
<?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']) : ?>
<p class="desc"><?=\hhu\z\Utils::t($achievement['description'])?></p>
<?php else : ?>