add an optional deadline to Achievements
This commit is contained in:
parent
5088eb0640
commit
e8709b1e49
5 changed files with 52 additions and 17 deletions
|
|
@ -62,19 +62,19 @@
|
||||||
$character = SeminaryController::$character;
|
$character = SeminaryController::$character;
|
||||||
|
|
||||||
// Get seldom Achievements
|
// Get seldom Achievements
|
||||||
$seldomAchievements = $this->Achievements->getSeldomAchievements($seminary['id'], \nre\configs\AppConfig::$misc['achievements_range']);
|
$seldomAchievements = $this->Achievements->getSeldomAchievements($seminary['id'], \nre\configs\AppConfig::$misc['achievements_range'], false);
|
||||||
foreach($seldomAchievements as &$achievement) {
|
foreach($seldomAchievements as &$achievement) {
|
||||||
$achievement['achieved'] = $this->Achievements->hasCharacterAchievedAchievement($achievement['id'], $character['id']);
|
$achievement['achieved'] = $this->Achievements->hasCharacterAchievedAchievement($achievement['id'], $character['id']);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get Characters with the most Achievements
|
// Get Characters with the most Achievements
|
||||||
$successfulCharacters = $this->Characters->getCharactersWithMostAchievements($seminary['id'], \nre\configs\AppConfig::$misc['achievements_range']);
|
$successfulCharacters = $this->Characters->getCharactersWithMostAchievements($seminary['id'], \nre\configs\AppConfig::$misc['achievements_range'], false);
|
||||||
|
|
||||||
// Get achieved Achievements
|
// Get achieved Achievements
|
||||||
$achievedAchievements = $this->Achievements->getAchievedAchievementsForCharacter($character['id']);
|
$achievedAchievements = $this->Achievements->getAchievedAchievementsForCharacter($character['id'], false);
|
||||||
|
|
||||||
// Get unachieved Achievements
|
// Get unachieved Achievements
|
||||||
$unachievedAchievements = $this->Achievements->getUnachhievedAchievementsForCharacter($seminary['id'], $character['id'], true);
|
$unachievedAchievements = $this->Achievements->getUnachhievedAchievementsForCharacter($seminary['id'], $character['id'], true, false);
|
||||||
foreach($unachievedAchievements as &$achievement)
|
foreach($unachievedAchievements as &$achievement)
|
||||||
{
|
{
|
||||||
// Get Character progress
|
// Get Character progress
|
||||||
|
|
|
||||||
|
|
@ -119,6 +119,12 @@
|
||||||
// Get Achievements
|
// Get Achievements
|
||||||
$achievements = $this->Achievements->getAchievedAchievementsForCharacter($character['id']);
|
$achievements = $this->Achievements->getAchievedAchievementsForCharacter($character['id']);
|
||||||
|
|
||||||
|
// Get Achievements with deadline (milestones)
|
||||||
|
$milestones = $this->Achievements->getDeadlineAchievements($seminary['id']);
|
||||||
|
foreach($milestones as &$milestone) {
|
||||||
|
$milestone['achieved'] = $this->Achievements->hasCharacterAchievedAchievement($milestone['id'], $character['id']);
|
||||||
|
}
|
||||||
|
|
||||||
// Get ranking
|
// Get ranking
|
||||||
$ranking = array(
|
$ranking = array(
|
||||||
'superior' => $this->Characters->getSuperiorCharacters($seminary['id'], $character['xps'], \nre\configs\AppConfig::$misc['ranking_range']),
|
'superior' => $this->Characters->getSuperiorCharacters($seminary['id'], $character['xps'], \nre\configs\AppConfig::$misc['ranking_range']),
|
||||||
|
|
@ -141,6 +147,7 @@
|
||||||
$this->set('user', $user);
|
$this->set('user', $user);
|
||||||
$this->set('groups', $groups);
|
$this->set('groups', $groups);
|
||||||
$this->set('achievements', $achievements);
|
$this->set('achievements', $achievements);
|
||||||
|
$this->set('milestones', $milestones);
|
||||||
$this->set('ranking', $ranking);
|
$this->set('ranking', $ranking);
|
||||||
$this->set('questtopics', $questtopics);
|
$this->set('questtopics', $questtopics);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,7 @@
|
||||||
public function getUnachievedOnlyOnceAchievementsForSeminary($seminaryId)
|
public function getUnachievedOnlyOnceAchievementsForSeminary($seminaryId)
|
||||||
{
|
{
|
||||||
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, deadline, 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 = 1 AND NOT EXISTS ('.
|
'WHERE achievements.seminary_id = ? AND only_once = 1 AND NOT EXISTS ('.
|
||||||
|
|
@ -84,6 +84,25 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all Achievements that have a deadline.
|
||||||
|
*
|
||||||
|
* @param int $seminaryId ID of Seminary
|
||||||
|
* @return array Achievements data
|
||||||
|
*/
|
||||||
|
public function getDeadlineAchievements($seminaryId)
|
||||||
|
{
|
||||||
|
return $this->db->query(
|
||||||
|
'SELECT achievements.id, achievementconditions.condition, title, url, description, progress, hidden, only_once, all_conditions, deadline, unachieved_achievementsmedia_id, achieved_achievementsmedia_id '.
|
||||||
|
'FROM achievements '.
|
||||||
|
'LEFT JOIN achievementconditions ON achievementconditions.id = achievements.achievementcondition_id '.
|
||||||
|
'WHERE achievements.seminary_id = ? AND deadline IS NOT NULL',
|
||||||
|
'i',
|
||||||
|
$seminaryId
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get seldom Achievements.
|
* Get seldom Achievements.
|
||||||
*
|
*
|
||||||
|
|
@ -91,13 +110,14 @@
|
||||||
* @param int $count Number of Achievements to retrieve
|
* @param int $count Number of Achievements to retrieve
|
||||||
* @return array List of seldom Achievements
|
* @return array List of seldom Achievements
|
||||||
*/
|
*/
|
||||||
public function getSeldomAchievements($seminaryId, $count)
|
public function getSeldomAchievements($seminaryId, $count, $alsoWithDeadline=true)
|
||||||
{
|
{
|
||||||
return $this->db->query(
|
return $this->db->query(
|
||||||
'SELECT id, title, url, description, progress, hidden, unachieved_achievementsmedia_id, achieved_achievementsmedia_id, count(DISTINCT character_id) AS c '.
|
'SELECT id, title, url, description, progress, hidden, unachieved_achievementsmedia_id, achieved_achievementsmedia_id, count(DISTINCT character_id) AS c '.
|
||||||
'FROM achievements_characters '.
|
'FROM achievements_characters '.
|
||||||
'LEFT JOIN achievements ON achievements.id = achievements_characters.achievement_id '.
|
'LEFT JOIN achievements ON achievements.id = achievements_characters.achievement_id '.
|
||||||
'WHERE achievements.seminary_id = ? AND only_once = 0 '.
|
'WHERE achievements.seminary_id = ? AND only_once = 0 '.
|
||||||
|
(!$alsoWithDeadline ? 'AND achievements.deadline IS NULL ' : null).
|
||||||
'GROUP BY achievement_id '.
|
'GROUP BY achievement_id '.
|
||||||
'ORDER BY count(DISTINCT character_id) ASC '.
|
'ORDER BY count(DISTINCT character_id) ASC '.
|
||||||
'LIMIT ?',
|
'LIMIT ?',
|
||||||
|
|
@ -114,13 +134,14 @@
|
||||||
* @param int $characterId ID of Character
|
* @param int $characterId ID of Character
|
||||||
* @return array Achievements data
|
* @return array Achievements data
|
||||||
*/
|
*/
|
||||||
public function getAchievedAchievementsForCharacter($characterId)
|
public function getAchievedAchievementsForCharacter($characterId, $alsoWithDeadline=true)
|
||||||
{
|
{
|
||||||
return $this->db->query(
|
return $this->db->query(
|
||||||
'SELECT achievements.id, achievements_characters.created, achievements.title, achievements.url, achievements.description, achievements.progress, unachieved_achievementsmedia_id, achieved_achievementsmedia_id '.
|
'SELECT achievements.id, achievements_characters.created, achievements.title, achievements.url, achievements.description, achievements.progress, unachieved_achievementsmedia_id, achieved_achievementsmedia_id '.
|
||||||
'FROM achievements '.
|
'FROM achievements '.
|
||||||
'INNER JOIN achievements_characters ON achievements_characters.achievement_id = achievements.id '.
|
'INNER JOIN achievements_characters ON achievements_characters.achievement_id = achievements.id '.
|
||||||
'WHERE achievements_characters.character_id = ? '.
|
'WHERE achievements_characters.character_id = ? '.
|
||||||
|
(!$alsoWithDeadline ? 'AND achievements.deadline IS NULL ' : null).
|
||||||
'ORDER BY achievements_characters.created DESC',
|
'ORDER BY achievements_characters.created DESC',
|
||||||
'i',
|
'i',
|
||||||
$characterId
|
$characterId
|
||||||
|
|
@ -135,10 +156,10 @@
|
||||||
* @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, $includeOnlyOnce=false)
|
public function getUnachhievedAchievementsForCharacter($seminaryId, $characterId, $includeOnlyOnce=false, $alsoWithDeadline=true)
|
||||||
{
|
{
|
||||||
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, deadline, 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 <= ? AND NOT EXISTS ('.
|
'WHERE achievements.seminary_id = ? AND only_once <= ? AND NOT EXISTS ('.
|
||||||
|
|
@ -148,6 +169,7 @@
|
||||||
'achievements_characters.achievement_id = achievements.id AND '.
|
'achievements_characters.achievement_id = achievements.id AND '.
|
||||||
'achievements_characters.character_id = ?'.
|
'achievements_characters.character_id = ?'.
|
||||||
') '.
|
') '.
|
||||||
|
(!$alsoWithDeadline ? 'AND achievements.deadline IS NULL ' : null).
|
||||||
'ORDER BY achievements.pos ASC',
|
'ORDER BY achievements.pos ASC',
|
||||||
'iii',
|
'iii',
|
||||||
$seminaryId,
|
$seminaryId,
|
||||||
|
|
|
||||||
|
|
@ -181,7 +181,7 @@
|
||||||
* @param int $conut Amount of Characters to retrieve
|
* @param int $conut Amount of Characters to retrieve
|
||||||
* @return array List of Characters
|
* @return array List of Characters
|
||||||
*/
|
*/
|
||||||
public function getCharactersWithMostAchievements($seminaryId, $count)
|
public function getCharactersWithMostAchievements($seminaryId, $count, $alsoWithDeadline=true)
|
||||||
{
|
{
|
||||||
return $this->db->query(
|
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 '.
|
'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 '.
|
||||||
|
|
@ -189,7 +189,8 @@
|
||||||
'LEFT JOIN achievements ON achievements.id = achievements_characters.achievement_id '.
|
'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 v_characters AS characters ON characters.id = achievements_characters.character_id '.
|
||||||
'LEFT JOIN charactertypes ON charactertypes.id = characters.charactertype_id '.
|
'LEFT JOIN charactertypes ON charactertypes.id = characters.charactertype_id '.
|
||||||
'WHERE achievements.seminary_id = ? '.
|
'WHERE achievements.seminary_id = ? AND deadline IS NULL '.
|
||||||
|
(!$alsoWithDeadline ? 'AND achievements.deadline IS NULL ' : null).
|
||||||
'GROUP BY character_id '.
|
'GROUP BY character_id '.
|
||||||
'ORDER BY count(DISTINCT achievement_id) DESC '.
|
'ORDER BY count(DISTINCT achievement_id) DESC '.
|
||||||
'LIMIT ?',
|
'LIMIT ?',
|
||||||
|
|
|
||||||
|
|
@ -27,13 +27,18 @@
|
||||||
<p class="value"><?=$character['rank']?>.</p>
|
<p class="value"><?=$character['rank']?>.</p>
|
||||||
<p><small><?=_('Rank')?></small></p>
|
<p><small><?=_('Rank')?></small></p>
|
||||||
</div>
|
</div>
|
||||||
<h2><i class="fa fa-bookmark fa-fw"></i>Meilensteine</h2>
|
<h2><i class="fa fa-bookmark fa-fw"></i><?=_('Milestones')?></h2>
|
||||||
<ul class="crewards">
|
<ul class="crewards">
|
||||||
<li><p class="unlocked fwb"><i class="fa fa-check-circle fa-fw"></i>Aktivität</p><p>Erreiche bis zum 31.05.2014 23:59 Uhr mindestens Level 6 (140 XP)</p></li>
|
<?php foreach($milestones as &$milestone) : ?>
|
||||||
<li><p class="unlocked fwb"><i class="fa fa-check-circle fa-fw"></i>Beteiligungsnachweis</p><p>Erreiche bis zum 31.07.2014 23:59 Uhr mindestens Level 10 (557 XP)</p></li>
|
<li>
|
||||||
<li><p class="unlocked fwb"><i class="fa fa-check-circle fa-fw"></i>0.3 Notenbonus</p><p>Erreiche bis zum 31.08.2014 23:59 Uhr mindestens Level 11 (721 XP)</p></li>
|
<?php if($milestone['achieved']) : ?>
|
||||||
<li><p class="fwb"><i class="fa fa-lock fa-fw"></i>0.7 Notenbonus</p><p>Erreiche bis zum 31.08.2014 23:59 Uhr mindestens Level 12 (902 XP)</p></li>
|
<p class="unlocked fwb"><i class="fa fa-check-circle fa-fw"></i><?=$milestone['title']?></p>
|
||||||
<li><p class="fwb"><i class="fa fa-lock fa-fw"></i>1.0 Notenbonus</p><p>Erreiche bis zum 31.08.2014 23:59 Uhr mindestens Level 13 (1127 XP)</p></li>
|
<?php else : ?>
|
||||||
|
<p class="fwb"><i class="fa fa-lock fa-fw"></i><?=$milestone['title']?></p>
|
||||||
|
<?php endif ?>
|
||||||
|
<p><?=\hhu\z\Utils::t($milestone['description'])?></p>
|
||||||
|
</li>
|
||||||
|
<?php endforeach ?>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="cportrait">
|
<div class="cportrait">
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue