show only unlocked Questsgroups and Quests and summarize XPs recursive regarding choosed path by character
This commit is contained in:
parent
efc60f51d9
commit
283d24ff78
10 changed files with 317 additions and 176 deletions
|
|
@ -87,16 +87,21 @@
|
|||
$hierarchy['questgroups'] = $this->Questgroups->getQuestgroupsForHierarchy($hierarchy['id'], $questgroup['id']);
|
||||
|
||||
// Get additional data
|
||||
for($i=0; $i<count($hierarchy['questgroups']); $i++)
|
||||
foreach($hierarchy['questgroups'] as $i => &$group)
|
||||
{
|
||||
// Get Character XPs
|
||||
$hierarchy['questgroups'][$i]['character_xps'] = $this->Questgroups->getAchievedXPsForQuestgroup($hierarchy['questgroups'][$i]['id'], $character['id']);
|
||||
|
||||
// Check permission of Questgroups
|
||||
if($i >= 1) {
|
||||
$hierarchy['questgroups'][$i]['access'] = $this->Questgroups->hasCharacterSolvedQuestgroup($hierarchy['questgroups'][$i-1]['id'], $character['id']);
|
||||
if($i >= 1)
|
||||
{
|
||||
if(!$this->Questgroups->hasCharacterSolvedQuestgroup($hierarchy['questgroups'][$i-1]['id'], $character['id']))
|
||||
{
|
||||
$hierarchy['questgroups'] = array_slice($hierarchy['questgroups'], 0, $i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Get Character XPs
|
||||
$group['character_xps'] = $this->Questgroups->getAchievedXPsForQuestgroup($group['id'], $character['id']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -115,24 +120,41 @@
|
|||
|
||||
|
||||
// Get Quests
|
||||
$quests = null;
|
||||
$quests = array();
|
||||
if(count($childQuestgroupshierarchy) == 0)
|
||||
{
|
||||
$quests = $this->Quests->getQuestsForQuestgroup($questgroup['id']);
|
||||
foreach($quests as $i => &$quest)
|
||||
$currentQuest = null;
|
||||
do {
|
||||
// Get next Quest
|
||||
if(is_null($currentQuest)) {
|
||||
$currentQuest = $this->Quests->getFirstQuestOfQuestgroup($questgroup['id']);
|
||||
}
|
||||
else {
|
||||
$nextQuests = $this->Quests->getNextQuests($currentQuest['id']);
|
||||
$currentQuest = null;
|
||||
foreach($nextQuests as &$nextQuest) {
|
||||
if($this->Quests->hasCharacterEnteredQuest($nextQuest['id'], $character['id'])) {
|
||||
$currentQuest = $nextQuest;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Add additional data
|
||||
if(!is_null($currentQuest))
|
||||
{
|
||||
// Set status
|
||||
$quest['solved'] = $this->Quests->hasCharacterSolvedQuest($quest['id'], $character['id']);
|
||||
|
||||
// Check permission
|
||||
if($i > 0) {
|
||||
$quest['access'] = $this->Quests->hasCharacterSolvedQuest($quests[$i-1]['id'], $character['id']);
|
||||
}
|
||||
$currentQuest['solved'] = $this->Quests->hasCharacterSolvedQuest($currentQuest['id'], $character['id']);
|
||||
|
||||
// Attach related Questgroups
|
||||
$quest['relatedQuestgroups'] = $this->Questgroups->getRelatedQuestsgroupsOfQuest($quest['id']);
|
||||
$currentQuest['relatedQuestgroups'] = $this->Questgroups->getRelatedQuestsgroupsOfQuest($currentQuest['id']);
|
||||
|
||||
// Add Quest to Quests
|
||||
$quests[] = $currentQuest;
|
||||
}
|
||||
}
|
||||
while(!is_null($currentQuest) && $currentQuest['solved']);
|
||||
}
|
||||
|
||||
|
||||
// Pass data to view
|
||||
|
|
|
|||
|
|
@ -124,6 +124,9 @@
|
|||
}
|
||||
}
|
||||
|
||||
// Set status “entered”
|
||||
$this->Quests->setQuestEntered($quest['id'], $character['id']);
|
||||
|
||||
// Get (related) Questtext
|
||||
$relatedQuesttext = $this->Questtexts->getRelatedQuesttextForQuestgroup($questgroup['id']);
|
||||
if(!empty($relatedQuesttext)) {
|
||||
|
|
@ -138,7 +141,7 @@
|
|||
$questtexttypes = $this->Questtexts->getQuesttexttypes();
|
||||
$questtexttypes = array_map(function($t) { return $t['url']; }, $questtexttypes);
|
||||
$questtextCount = $this->Questtexts->getQuesttextsCountForQuest($quest['id'], $questtexttypeUrl);
|
||||
if(/*$questtextCount > 0 && */in_array($questtexttypeUrl, $questtexttypes))
|
||||
if(in_array($questtexttypeUrl, $questtexttypes))
|
||||
{
|
||||
$questtextPos = max(intval($questtextPos), 1);
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -103,6 +103,16 @@
|
|||
// Get additional data
|
||||
foreach($hierarchy['questgroups'] as $i => &$questgroup)
|
||||
{
|
||||
// Check permission of Questgroups
|
||||
if($i >= 1)
|
||||
{
|
||||
if(!$this->Questgroups->hasCharacterSolvedQuestgroup($hierarchy['questgroups'][$i-1]['id'], $character['id']))
|
||||
{
|
||||
$hierarchy['questgroups'] = array_slice($hierarchy['questgroups'], 0, $i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Get first Questgroup text
|
||||
$text = $this->Questgroups->getFirstQuestgroupText($questgroup['id']);
|
||||
if(!empty($text))
|
||||
|
|
@ -114,11 +124,6 @@
|
|||
// Get Character XPs
|
||||
$hierarchy['questgroups'][$i]['character_xps'] = $this->Questgroups->getAchievedXPsForQuestgroup($questgroup['id'], $character['id']);
|
||||
|
||||
// Check permission of Questgroups
|
||||
if($i >= 1) {
|
||||
$questgroup['access'] = $this->Questgroups->hasCharacterSolvedQuestgroup($hierarchy['questgroups'][$i-1]['id'], $character['id']);
|
||||
}
|
||||
|
||||
// Get Media
|
||||
$questgroup['picture'] = null;
|
||||
try {
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -1,8 +1,8 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: The Legend of Z\n"
|
||||
"POT-Creation-Date: 2014-03-22 21:17+0100\n"
|
||||
"PO-Revision-Date: 2014-03-22 21:18+0100\n"
|
||||
"POT-Creation-Date: 2014-03-30 04:06+0100\n"
|
||||
"PO-Revision-Date: 2014-03-30 04:06+0100\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: de_DE\n"
|
||||
|
|
@ -23,25 +23,20 @@ msgstr "Fehler"
|
|||
#: ../../../views/html/charactergroups/group.tpl:3
|
||||
#: ../../../views/html/charactergroups/groupsgroup.tpl:3
|
||||
#: ../../../views/html/charactergroups/index.tpl:3
|
||||
#: ../../../views/html/characters/character.tpl:19
|
||||
#: ../../../views/html/seminaries/seminary.tpl:42
|
||||
#: ../../../views/html/characters/character.tpl:50
|
||||
#: ../../../views/html/seminaries/seminary.tpl:44
|
||||
msgid "Character Groups"
|
||||
msgstr "Charaktergruppen"
|
||||
|
||||
#: ../../../views/html/charactergroups/group.tpl:12
|
||||
#: ../../../views/html/characters/character.tpl:2
|
||||
#: ../../../views/html/charactergroups/group.tpl:25
|
||||
#: ../../../views/html/characters/index.tpl:2
|
||||
#: ../../../views/html/seminaries/seminary.tpl:41
|
||||
#: ../../../views/html/seminaries/seminary.tpl:43
|
||||
#: ../../../views/html/users/user.tpl:11
|
||||
msgid "Characters"
|
||||
msgstr "Charaktere"
|
||||
|
||||
#: ../../../views/html/charactergroups/group.tpl:15
|
||||
msgid "Group Leader"
|
||||
msgstr "Gruppenleiter"
|
||||
|
||||
#: ../../../views/html/charactergroups/group.tpl:21
|
||||
#: ../../../views/html/questgroups/questgroup.tpl:35
|
||||
#: ../../../views/html/charactergroups/group.tpl:63
|
||||
#: ../../../views/html/questgroups/questgroup.tpl:43
|
||||
msgid "Quests"
|
||||
msgstr "Quests"
|
||||
|
||||
|
|
@ -51,7 +46,7 @@ msgid "Character Groups Quests"
|
|||
msgstr "Charactergruppen-Quests"
|
||||
|
||||
#: ../../../views/html/charactergroupsquests/quest.tpl:12
|
||||
#: ../../../views/html/seminaries/seminary.tpl:2
|
||||
#: ../../../views/html/seminaries/seminary.tpl:8
|
||||
msgid "Description"
|
||||
msgstr "Beschreibung"
|
||||
|
||||
|
|
@ -67,29 +62,25 @@ msgstr "Gewonnene Quest"
|
|||
msgid "Lost Quest"
|
||||
msgstr "Verlorene Quest"
|
||||
|
||||
#: ../../../views/html/characters/character.tpl:7
|
||||
#: ../../../views/html/characters/character.tpl:14
|
||||
#: ../../../views/html/characters/index.tpl:6
|
||||
#: ../../../views/html/users/user.tpl:14
|
||||
msgid "Level"
|
||||
msgstr "Level"
|
||||
|
||||
#: ../../../views/html/characters/character.tpl:8
|
||||
msgid "User"
|
||||
msgstr "Benutzer"
|
||||
|
||||
#: ../../../views/html/introduction/index.tpl:1
|
||||
#: ../../../views/html/menu/index.tpl:2
|
||||
msgid "Introduction"
|
||||
msgstr "Einführung"
|
||||
|
||||
#: ../../../views/html/menu/index.tpl:3 ../../../views/html/users/create.tpl:1
|
||||
#: ../../../views/html/menu/index.tpl:4 ../../../views/html/users/create.tpl:1
|
||||
#: ../../../views/html/users/delete.tpl:1 ../../../views/html/users/edit.tpl:1
|
||||
#: ../../../views/html/users/index.tpl:1 ../../../views/html/users/login.tpl:1
|
||||
#: ../../../views/html/users/user.tpl:1
|
||||
msgid "Users"
|
||||
msgstr "Benutzer"
|
||||
|
||||
#: ../../../views/html/menu/index.tpl:4
|
||||
#: ../../../views/html/menu/index.tpl:5
|
||||
#: ../../../views/html/seminaries/create.tpl:1
|
||||
#: ../../../views/html/seminaries/delete.tpl:1
|
||||
#: ../../../views/html/seminaries/edit.tpl:1
|
||||
|
|
@ -97,49 +88,43 @@ msgstr "Benutzer"
|
|||
msgid "Seminaries"
|
||||
msgstr "Kurse"
|
||||
|
||||
#: ../../../views/html/menu/index.tpl:10 ../../../views/html/users/login.tpl:2
|
||||
#: ../../../views/html/menu/index.tpl:11 ../../../views/html/users/login.tpl:2
|
||||
#: ../../../views/html/users/login.tpl:11
|
||||
msgid "Login"
|
||||
msgstr "Login"
|
||||
|
||||
#: ../../../views/html/menu/index.tpl:12
|
||||
#: ../../../views/html/menu/index.tpl:13
|
||||
msgid "Logout"
|
||||
msgstr "Logout"
|
||||
|
||||
#: ../../../views/html/questgroups/questgroup.tpl:26
|
||||
#: ../../../views/html/questgroups/questgroup.tpl:51
|
||||
#: ../../../views/html/seminaries/seminary.tpl:28
|
||||
msgid "locked"
|
||||
msgstr "gesperrt"
|
||||
|
||||
#: ../../../views/html/quests/quest.tpl:20
|
||||
#: ../../../views/html/quests/submissions.tpl:27
|
||||
#: ../../../views/html/quests/quest.tpl:15
|
||||
#: ../../../views/html/quests/submissions.tpl:22
|
||||
msgid "solved"
|
||||
msgstr "gelöst"
|
||||
|
||||
#: ../../../views/html/quests/quest.tpl:22
|
||||
#: ../../../views/html/quests/submissions.tpl:18
|
||||
#: ../../../views/html/quests/quest.tpl:17
|
||||
#: ../../../views/html/quests/submissions.tpl:13
|
||||
msgid "unsolved"
|
||||
msgstr "ungelöst"
|
||||
|
||||
#: ../../../views/html/quests/quest.tpl:59
|
||||
#: ../../../views/html/quests/quest.tpl:52
|
||||
msgid "Task"
|
||||
msgstr "Aufgabe"
|
||||
|
||||
#: ../../../views/html/quests/quest.tpl:67
|
||||
#: ../../../views/html/quests/quest.tpl:60
|
||||
msgid "Task successfully solved"
|
||||
msgstr "Du hast die Aufgabe erfolgreich gelöst"
|
||||
|
||||
#: ../../../views/html/quests/quest.tpl:67
|
||||
#: ../../../views/html/quests/quest.tpl:60
|
||||
msgid "Show correct answer"
|
||||
msgstr "Richtige Lösung anzeigen"
|
||||
|
||||
#: ../../../views/html/quests/quest.tpl:68
|
||||
#: ../../../views/html/quests/quest.tpl:61
|
||||
msgid "Go on"
|
||||
msgstr "Hier geht es weiter"
|
||||
|
||||
#: ../../../views/html/quests/quest.tpl:73
|
||||
#: ../../../views/html/quests/quest.tpl:75
|
||||
#: ../../../views/html/quests/quest.tpl:66
|
||||
#: ../../../views/html/quests/quest.tpl:68
|
||||
msgid "Quest"
|
||||
msgstr "Quest"
|
||||
|
||||
|
|
@ -165,7 +150,7 @@ msgid "create"
|
|||
msgstr "erstellen"
|
||||
|
||||
#: ../../../views/html/seminaries/delete.tpl:2
|
||||
#: ../../../views/html/seminaries/seminary.tpl:38
|
||||
#: ../../../views/html/seminaries/seminary.tpl:40
|
||||
msgid "Delete seminary"
|
||||
msgstr "Kurs löschen"
|
||||
|
||||
|
|
@ -185,7 +170,7 @@ msgid "cancel"
|
|||
msgstr "abbrechen"
|
||||
|
||||
#: ../../../views/html/seminaries/edit.tpl:2
|
||||
#: ../../../views/html/seminaries/seminary.tpl:37
|
||||
#: ../../../views/html/seminaries/seminary.tpl:39
|
||||
msgid "Edit seminary"
|
||||
msgstr "Kurs bearbeiten"
|
||||
|
||||
|
|
@ -199,7 +184,7 @@ msgid "Create new seminary"
|
|||
msgstr "Neuen Kurs erstellen"
|
||||
|
||||
#: ../../../views/html/seminaries/index.tpl:10
|
||||
#: ../../../views/html/seminaries/seminary.tpl:45
|
||||
#: ../../../views/html/seminaries/seminary.tpl:47
|
||||
#, php-format
|
||||
msgid "created by %s on %s"
|
||||
msgstr "erstellt von %s am %s"
|
||||
|
|
@ -254,6 +239,15 @@ msgstr "registriert am %s"
|
|||
msgid "Roles"
|
||||
msgstr "Rollen"
|
||||
|
||||
#~ msgid "locked"
|
||||
#~ msgstr "gesperrt"
|
||||
|
||||
#~ msgid "Group Leader"
|
||||
#~ msgstr "Gruppenleiter"
|
||||
|
||||
#~ msgid "User"
|
||||
#~ msgstr "Benutzer"
|
||||
|
||||
#~ msgid "as"
|
||||
#~ msgstr "als"
|
||||
|
||||
|
|
|
|||
|
|
@ -256,11 +256,34 @@
|
|||
$questgroup = $this->getQuestgroupById($questgroupId);
|
||||
|
||||
// Chack all Quests
|
||||
$quests = $this->Quests->getQuestsForQuestgroup($questgroup['id']);
|
||||
foreach($quests as &$quest) {
|
||||
if(!$this->Quests->hasCharacterSolvedQuest($quest['id'], $characterId)) {
|
||||
$currentQuest = $this->Quests->getFirstQuestOfQuestgroup($questgroup['id']);
|
||||
if(!is_null($currentQuest))
|
||||
{
|
||||
if(!$this->Quests->hasCharacterSolvedQuest($currentQuest['id'], $characterId)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Get next Quests
|
||||
while(!is_null($currentQuest) && !empty($nextQuests = $this->Quests->getNextQuests($currentQuest['id'])))
|
||||
{
|
||||
// Get choosed Quest
|
||||
$currentQuest = null;
|
||||
foreach($nextQuests as &$nextQuest) {
|
||||
if($this->Quests->hasCharacterEnteredQuest($nextQuest['id'], $characterId)) {
|
||||
$currentQuest = $nextQuest;
|
||||
}
|
||||
}
|
||||
|
||||
// Check Quest
|
||||
if(is_null($currentQuest)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check status
|
||||
if(!$this->Quests->hasCharacterSolvedQuest($currentQuest['id'], $characterId)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Check all child Questgroups
|
||||
|
|
@ -328,7 +351,7 @@
|
|||
* sub-Questgroups.
|
||||
*
|
||||
* @param int $questgroupId ID of Questgroup
|
||||
* @return Sum of XPs
|
||||
* @return int Sum of XPs
|
||||
*/
|
||||
public function getAchievableXPsForQuestgroup($questgroupId)
|
||||
{
|
||||
|
|
@ -340,16 +363,9 @@
|
|||
$questgroup['hierarchy'] = $this->Questgroupshierarchy->getHierarchyForQuestgroup($questgroup['id']);
|
||||
|
||||
// Quests of current Questgroup
|
||||
$quests = $this->Quests->getQuestsForQuestgroup($questgroup['id']);
|
||||
foreach($quests as &$quest)
|
||||
{
|
||||
$xps += $quest['xps'];
|
||||
|
||||
// Related Questgroups
|
||||
$relatedQuestgroups = $this->getRelatedQuestsgroupsOfQuest($quest['id']);
|
||||
foreach($relatedQuestgroups as $group) {
|
||||
$xps += $this->getAchievableXPsForQuestgroup($group['id']);
|
||||
}
|
||||
$quest = $this->Quests->getFirstQuestOfQuestgroup($questgroup['id']);
|
||||
if(!is_null($quest)) {
|
||||
$xps += $this->getAchievableXPsForQuest($quest);
|
||||
}
|
||||
|
||||
// XPs of child Questgroups
|
||||
|
|
@ -372,13 +388,45 @@
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Summarize XPs of the given Quest, its following Quests and
|
||||
* its related Questgroups.
|
||||
*
|
||||
* @param array $quest Quest to summarize XPs for
|
||||
* @return int Sum of XPs
|
||||
*/
|
||||
public function getAchievableXPsForQuest($quest)
|
||||
{
|
||||
// XPs for the given Quest
|
||||
$xps = $quest['xps'];
|
||||
|
||||
// Related Questgroups
|
||||
$relatedQuestgroups = $this->getRelatedQuestsgroupsOfQuest($quest['id']);
|
||||
foreach($relatedQuestgroups as &$relatedQuestgroup) {
|
||||
$xps += $this->getAchievableXPsForQuestgroup($relatedQuestgroup['id']);
|
||||
}
|
||||
|
||||
// Next Quests
|
||||
$nextQuests = $this->Quests->getNextQuests($quest['id']);
|
||||
$nextXPs = array(0);
|
||||
foreach($nextQuests as &$nextQuest)
|
||||
{
|
||||
$nextXPs[] = $this->getAchievableXPsForQuest($nextQuest);
|
||||
}
|
||||
$xps += max($nextXPs);
|
||||
|
||||
|
||||
return $xps;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Summarize XPs of all Quests for a Questgroup and its
|
||||
* sub-Questgroups solved by a Character.
|
||||
*
|
||||
* @param int $questgroupId ID of Questgroup
|
||||
* @param int $characterId ID of Character
|
||||
* @return Sum of XPs
|
||||
* @return int Sum of XPs
|
||||
*/
|
||||
public function getAchievedXPsForQuestgroup($questgroupId, $characterId)
|
||||
{
|
||||
|
|
@ -389,18 +437,9 @@
|
|||
$questgroup = $this->getQuestgroupById($questgroupId);
|
||||
|
||||
// Quests of current Questgroup
|
||||
$quests = $this->Quests->getQuestsForQuestgroup($questgroup['id']);
|
||||
foreach($quests as &$quest)
|
||||
{
|
||||
if($this->Quests->hasCharacterSolvedQuest($quest['id'], $characterId)) {
|
||||
$xps += $quest['xps'];
|
||||
}
|
||||
|
||||
// Related Questgroups
|
||||
$relatedQuestgroups = $this->getRelatedQuestsgroupsOfQuest($quest['id']);
|
||||
foreach($relatedQuestgroups as $group) {
|
||||
$xps += $this->getAchievedXPsForQuestgroup($group['id'], $characterId);
|
||||
}
|
||||
$quest = $this->Quests->getFirstQuestOfQuestgroup($questgroup['id']);
|
||||
if(!is_null($quest)) {
|
||||
$xps += $this->getAchievedXPsForQuest($quest, $characterId);
|
||||
}
|
||||
|
||||
// XPs of child Questgroups
|
||||
|
|
@ -423,6 +462,47 @@
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Summarize XPs of the given Quest, its following Quests and
|
||||
* its related Questgroups solved by a Character.
|
||||
*
|
||||
* @param int $quest Quest to summarize XPs for
|
||||
* @param int $characterId ID of Character
|
||||
* @return int Sum of XPs
|
||||
*/
|
||||
public function getAchievedXPsForQuest($quest, $characterId)
|
||||
{
|
||||
$xps = 0;
|
||||
|
||||
// XPs for the given Quest
|
||||
if($this->Quests->hasCharacterSolvedQuest($quest['id'], $characterId))
|
||||
{
|
||||
$xps += $quest['xps'];
|
||||
|
||||
// Next Quests
|
||||
$nextQuests = $this->Quests->getNextQuests($quest['id']);
|
||||
foreach($nextQuests as &$nextQuest)
|
||||
{
|
||||
if($this->Quests->hasCharacterEnteredQuest($nextQuest['id'], $characterId))
|
||||
{
|
||||
$xps += $this->getAchievedXPsForQuest($nextQuest, $characterId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Related Questgroups
|
||||
$relatedQuestgroups = $this->getRelatedQuestsgroupsOfQuest($quest['id']);
|
||||
foreach($relatedQuestgroups as &$relatedQuestgroup) {
|
||||
$xps += $this->getAchievedXPsForQuestgroup($relatedQuestgroup['id'], $characterId);
|
||||
}
|
||||
|
||||
|
||||
// Return summarized XPs
|
||||
return $xps;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -19,6 +19,24 @@
|
|||
*/
|
||||
class QuestsModel extends \hhu\z\Model
|
||||
{
|
||||
/**
|
||||
* Quest-status: Entered
|
||||
*
|
||||
* @var int;
|
||||
*/
|
||||
const QUEST_STATUS_ENTERED = 1;
|
||||
/**
|
||||
* Quest-status: Solved
|
||||
*
|
||||
* @var int;
|
||||
*/
|
||||
const QUEST_STATUS_SOLVED = 0;
|
||||
/**
|
||||
* Quest-status: Unsolved
|
||||
*
|
||||
* @var int;
|
||||
*/
|
||||
const QUEST_STATUS_UNSOLVED = -1;
|
||||
|
||||
|
||||
|
||||
|
|
@ -34,45 +52,6 @@
|
|||
|
||||
|
||||
|
||||
/**
|
||||
* Get all Quests for the given Questgroup.
|
||||
*
|
||||
* @param int $questgroupId ID of a Questgroup
|
||||
* @return array Quests of the given Questgroup
|
||||
*/
|
||||
public function getQuestsForQuestgroup($questgroupId)
|
||||
{
|
||||
$quests = array();
|
||||
|
||||
// Get first Quest
|
||||
$quest = $this->db->query(
|
||||
'SELECT id, questtype_id, title, url, xps, task '.
|
||||
'FROM quests '.
|
||||
'LEFT JOIN quests_previousquests ON quests_previousquests.quest_id = quests.id '.
|
||||
'WHERE questgroup_id = ? AND quests_previousquests.previous_quest_id IS NULL',
|
||||
'i',
|
||||
$questgroupId
|
||||
);
|
||||
if(empty($quest)) {
|
||||
return $quests;
|
||||
}
|
||||
$quest = $quest[0];
|
||||
array_push($quests, $quest);
|
||||
|
||||
// Get next Quests
|
||||
// TODO Multiple next Quests
|
||||
while(($nextQuests = $this->getNextQuests($quest['id'])) != null)
|
||||
{
|
||||
$quest = $nextQuests[0];
|
||||
array_push($quests, $quest);
|
||||
}
|
||||
|
||||
|
||||
// Return Quests
|
||||
return $quests;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get a Quest and its data by its URL.
|
||||
*
|
||||
|
|
@ -127,6 +106,31 @@
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the first Quest of a Qusetgroup.
|
||||
*
|
||||
* @param int $questId ID of Questgroup
|
||||
* @return array Data of first Quest
|
||||
*/
|
||||
public function getFirstQuestOfQuestgroup($questgroupId)
|
||||
{
|
||||
$data = $this->db->query(
|
||||
'SELECT id, questtype_id, title, url, xps, task '.
|
||||
'FROM quests '.
|
||||
'LEFT JOIN quests_previousquests ON quests_previousquests.quest_id = quests.id '.
|
||||
'WHERE questgroup_id = ? AND quests_previousquests.previous_quest_id IS NULL',
|
||||
'i',
|
||||
$questgroupId
|
||||
);
|
||||
if(!empty($data)) {
|
||||
return $data[0];
|
||||
}
|
||||
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get Quests that follow-up a Quest.
|
||||
*
|
||||
|
|
@ -167,6 +171,18 @@
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Mark a Quest as entered for a Character.
|
||||
*
|
||||
* @param int $questId ID of Quest to mark as entered
|
||||
* @param int $characterId ID of Character that entered the Quest
|
||||
*/
|
||||
public function setQuestEntered($questId, $characterId)
|
||||
{
|
||||
$this->setQuestStatus($questId, $characterId, static::QUEST_STATUS_ENTERED);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Mark a Quest as solved for a Character.
|
||||
*
|
||||
|
|
@ -175,16 +191,7 @@
|
|||
*/
|
||||
public function setQuestSolved($questId, $characterId)
|
||||
{
|
||||
$this->db->query(
|
||||
'INSERT INTO quests_characters '.
|
||||
'(quest_id, character_id, status) '.
|
||||
'VALUES '.
|
||||
'(?, ?, ?)',
|
||||
'iii',
|
||||
$questId,
|
||||
$characterId,
|
||||
0
|
||||
);
|
||||
$this->setQuestStatus($questId, $characterId, static::QUEST_STATUS_SOLVED);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -196,16 +203,31 @@
|
|||
*/
|
||||
public function setQuestUnsolved($questId, $characterId)
|
||||
{
|
||||
$this->db->query(
|
||||
'INSERT INTO quests_characters '.
|
||||
'(quest_id, character_id, status) '.
|
||||
'VALUES '.
|
||||
'(?, ?, ?)',
|
||||
'iii',
|
||||
$this->setQuestStatus($questId, $characterId, static::QUEST_STATUS_UNSOLVED);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Determine if the given Character has entered a Quest.
|
||||
*
|
||||
* @param int $questId ID of Quest to check
|
||||
* @param int $characterId ID of Character to check
|
||||
* @result boolean Whether Character has entered the Quest or not
|
||||
*/
|
||||
public function hasCharacterEnteredQuest($questId, $characterId)
|
||||
{
|
||||
$count = $this->db->query(
|
||||
'SELECT count(id) AS c '.
|
||||
'FROM quests_characters '.
|
||||
'WHERE quest_id = ? AND character_id = ? AND status IN (?,?,?)',
|
||||
'iiiii',
|
||||
$questId,
|
||||
$characterId,
|
||||
-1
|
||||
static::QUEST_STATUS_ENTERED, static::QUEST_STATUS_SOLVED, static::QUEST_STATUS_UNSOLVED
|
||||
);
|
||||
|
||||
|
||||
return (!empty($count) && intval($count[0]['c']) > 0);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -221,10 +243,11 @@
|
|||
$count = $this->db->query(
|
||||
'SELECT count(id) AS c '.
|
||||
'FROM quests_characters '.
|
||||
'WHERE quest_id = ? AND character_id = ? AND status IN (-1,0)',
|
||||
'ii',
|
||||
'WHERE quest_id = ? AND character_id = ? AND status IN (?,?)',
|
||||
'iiii',
|
||||
$questId,
|
||||
$characterId
|
||||
$characterId,
|
||||
static::QUEST_STATUS_SOLVED, static::QUEST_STATUS_UNSOLVED
|
||||
);
|
||||
|
||||
|
||||
|
|
@ -244,10 +267,11 @@
|
|||
$count = $this->db->query(
|
||||
'SELECT count(id) AS c '.
|
||||
'FROM quests_characters '.
|
||||
'WHERE quest_id = ? AND character_id = ? AND status = 0',
|
||||
'ii',
|
||||
'WHERE quest_id = ? AND character_id = ? AND status = ?',
|
||||
'iii',
|
||||
$questId,
|
||||
$characterId
|
||||
$characterId,
|
||||
static::QUEST_STATUS_SOLVED
|
||||
);
|
||||
|
||||
|
||||
|
|
@ -267,10 +291,11 @@
|
|||
'SELECT character_id, created, text '.
|
||||
'FROM questtypes_submit_characters '.
|
||||
'WHERE quest_id = ? AND EXISTS ('.
|
||||
'SELECT character_id FROM quests_characters WHERE quest_id = questtypes_submit_characters.quest_id AND status = 0'.
|
||||
'SELECT character_id FROM quests_characters WHERE quest_id = questtypes_submit_characters.quest_id AND status = ?'.
|
||||
')',
|
||||
'i',
|
||||
$questId
|
||||
'ii',
|
||||
$questId,
|
||||
static::QUEST_STATUS_SOLVED
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -287,10 +312,35 @@
|
|||
'SELECT character_id, created, text '.
|
||||
'FROM questtypes_submit_characters '.
|
||||
'WHERE quest_id = ? AND NOT EXISTS ('.
|
||||
'SELECT character_id FROM quests_characters WHERE quest_id = questtypes_submit_characters.quest_id AND status = 0'.
|
||||
'SELECT character_id FROM quests_characters WHERE quest_id = questtypes_submit_characters.quest_id AND status = ?'.
|
||||
')',
|
||||
'i',
|
||||
$questId
|
||||
'ii',
|
||||
$questId,
|
||||
static::QUEST_STATUS_SOLVED
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Mark a Quest for a Character.
|
||||
*
|
||||
* @param int $questId ID of Quest to mark
|
||||
* @param int $characterId ID of Character to mark the Quest for
|
||||
* @param int $status Quest status to mark
|
||||
*/
|
||||
private function setQuestStatus($questId, $characterId, $status)
|
||||
{
|
||||
$this->db->query(
|
||||
'INSERT INTO quests_characters '.
|
||||
'(quest_id, character_id, status) '.
|
||||
'VALUES '.
|
||||
'(?, ?, ?) ',
|
||||
'iii',
|
||||
$questId,
|
||||
$characterId,
|
||||
$status
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -23,7 +23,6 @@
|
|||
<ul class="qg">
|
||||
<?php foreach($hierarchy['questgroups'] as &$group) : ?>
|
||||
<li class="cf">
|
||||
<?php if(!array_key_exists('access', $group) || $group['access']) : ?>
|
||||
<span class="qgicon"><i class="fa fa-check-square-o"></i></span>
|
||||
<div class="qgtitle"><a href="<?=$linker->link(array('questgroups','questgroup',$seminary['url'],$group['url']))?>"><?=$group['title']?></a></div>
|
||||
<div class="qgprogress cf">
|
||||
|
|
@ -33,10 +32,6 @@
|
|||
</div>
|
||||
<p class="xpnumeric"><?=$group['character_xps']?> / <?=$group['xps']?> XP</p>
|
||||
</div>
|
||||
<?php else : ?>
|
||||
<span class="qgicon locked"><i class="fa fa-square-o"></i></span>
|
||||
<div class="qgtitle"><?=$hierarchy['title_singular']?> <?=_('locked')?></div>
|
||||
<?php endif ?>
|
||||
</li>
|
||||
<?php endforeach?>
|
||||
</ul>
|
||||
|
|
@ -49,7 +44,6 @@
|
|||
<ul class="qglist">
|
||||
<?php foreach($quests as &$quest) : ?>
|
||||
<li class="qgtitle">
|
||||
<?php if(!array_key_exists('access', $quest) || $quest['access']) : ?>
|
||||
<a href="<?=$linker->link(array('quests','quest',$seminary['url'],$questgroup['url'],$quest['url']))?>" <?php if($quest['solved']) : ?>class="solved"<?php endif ?>><i class="fa <?=($quest['solved']) ? 'fa-check-square-o' : 'fa-share-square-o'?> fa-fw"></i><?=$quest['title']?></a>
|
||||
<?php if(count($quest['relatedQuestgroups']) > 0) : ?>
|
||||
<ul class="gplist">
|
||||
|
|
@ -60,9 +54,6 @@
|
|||
<?php endforeach ?>
|
||||
</ul>
|
||||
<?php endif ?>
|
||||
<?php else : ?>
|
||||
<i class="fa fa-share-square-o fa-fw"><?=_('locked')?></i>
|
||||
<?php endif ?>
|
||||
</li>
|
||||
<?php endforeach ?>
|
||||
</ul>
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@
|
|||
<li><a href="<?=$linker->link(array('questgroups','questgroup',$seminary['url'],$relatedQuestgroup['url']))?>"><?=$relatedQuestgroup['entry_text']?></a></li>
|
||||
<?php endforeach ?>
|
||||
<?php if(!empty($questtext['abort_text'])) : ?>
|
||||
<li><a href="<?=$linker->link(array('quest',$seminary['url'],$questgroup['url'],$relatedquesttext['quest']['url'],$relatedquesttext['type_url'],$relatedquesttext['pos']),1)?>"><?=$questtext['abort_text']?></a></li>
|
||||
<li><a href="<?=$linker->link(array('quest',$seminary['url'],$relatedquesttext['quest']['questgroup_url'],$relatedquesttext['quest']['url'],$relatedquesttext['type_url'],$relatedquesttext['pos']),1)?>"><?=$questtext['abort_text']?></a></li>
|
||||
<?php endif ?>
|
||||
<?php if(!empty($questtext['out_text']) && $questtext['pos'] < $questtext['count']) : ?>
|
||||
<li><a href="<?=$linker->link(array($questtext['type_url'],$questtext['pos']+1),5,true,null,true,'questtext')?>"><?=$questtext['out_text']?></a></li>
|
||||
|
|
@ -70,7 +70,7 @@
|
|||
<?php endforeach ?>
|
||||
</ul>
|
||||
<?php elseif(!is_null($nextquestgroup)) : ?>
|
||||
<a href="<?=$linker->link(array('questgroups','questgroup',$seminary['url'],$nextquestgroup['url']))?>"><?=$nextquestgroup['hierarchy']['title_singular']?> <?=$nextquestgroup['hierarchy']['pos']?>: <?=$nextquestgroup['title']?></a>
|
||||
<a href="<?=$linker->link(array('questgroups','questgroup',$seminary['url'],$nextquestgroup['url']))?>"><?=$nextquestgroup['hierarchy']['title_singular']?> <?=$nextquestgroup['hierarchy']['questgroup_pos']?>: <?=$nextquestgroup['title']?></a>
|
||||
<?php else : ?>
|
||||
Spiel vorbei
|
||||
<?php endif ?>
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@
|
|||
<?php endif ?>
|
||||
<section>
|
||||
<p class="fwb"><?=$hierarchy['title_singular']?> <?=$group['pos']?>:
|
||||
<?php if(!array_key_exists('access', $group) || $group['access']) : ?>
|
||||
<a href="<?=$linker->link(array('questgroups','questgroup',$seminary['url'],$group['url']))?>"><?=$group['title']?></a></p>
|
||||
<div class="cf">
|
||||
<div class="xpbar">
|
||||
|
|
@ -30,9 +29,6 @@
|
|||
<p><?=$group['text']?></p>
|
||||
<?php endif ?>
|
||||
<a href="<?=$linker->link(array('questgroups','questgroup',$seminary['url'],$group['url']))?>" class="cta orange">Auf ins Abenteuer!</a>
|
||||
<?php else : ?>
|
||||
<?=_('locked')?></p>
|
||||
<?php endif ?>
|
||||
</section>
|
||||
</li>
|
||||
<?php endforeach?>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue