unify Main- and Sidequests
This commit is contained in:
parent
7fec7e6afa
commit
1cc251038a
10 changed files with 117 additions and 363 deletions
|
|
@ -32,16 +32,6 @@
|
||||||
$this->addSubAgent('Questgroupspicture', 'index', $request->getParam(3), $request->getParam(4), true);
|
$this->addSubAgent('Questgroupspicture', 'index', $request->getParam(3), $request->getParam(4), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Action: quest.
|
|
||||||
*/
|
|
||||||
public function sidequest(\nre\core\Request $request, \nre\core\Response $response)
|
|
||||||
{
|
|
||||||
$this->addSubAgent('Questgroupshierarchypath', 'index', $request->getParam(3), $request->getParam(4), true);
|
|
||||||
$this->addSubAgent('Questgroupspicture', 'index', $request->getParam(3), $request->getParam(4), true);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
|
||||||
|
|
@ -251,22 +251,11 @@
|
||||||
// Get Quest
|
// Get Quest
|
||||||
$quest = $this->Quests->getQuestByUrl($seminary['id'], $questgroup['id'], $this->request->getParam(5));
|
$quest = $this->Quests->getQuestByUrl($seminary['id'], $questgroup['id'], $this->request->getParam(5));
|
||||||
|
|
||||||
// Sidequest
|
|
||||||
$sidequest = null;
|
|
||||||
if($this->request->getParam(2) == 'sidequest') {
|
|
||||||
$sidequest = $this->Quests->getSidequestByUrl($seminary['id'], $questgroup['id'], $quest['id'], $this->request->getParam(6));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Character
|
// Character
|
||||||
$character = $this->Characters->getCharacterForUserAndSeminary($this->Auth->getUserId(), $seminary['id']);
|
$character = $this->Characters->getCharacterForUserAndSeminary($this->Auth->getUserId(), $seminary['id']);
|
||||||
|
|
||||||
// Set solved
|
// Set solved
|
||||||
if(is_null($sidequest)) {
|
$this->Quests->setQuestSolved($quest['id'], $character['id']);
|
||||||
$this->Quests->setQuestSolved($quest['id'], $character['id']);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$this->Quests->setSidequestSolved($sidequest['id'], $character['id']);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Redirect
|
// Redirect
|
||||||
|
|
@ -289,23 +278,11 @@
|
||||||
// Get Quest
|
// Get Quest
|
||||||
$quest = $this->Quests->getQuestByUrl($seminary['id'], $questgroup['id'], $this->request->getParam(5));
|
$quest = $this->Quests->getQuestByUrl($seminary['id'], $questgroup['id'], $this->request->getParam(5));
|
||||||
|
|
||||||
// Sidequest
|
|
||||||
$sidequest = null;
|
|
||||||
if($this->request->getParam(2) == 'sidequest') {
|
|
||||||
$sidequest = $this->Quests->getSidequestByUrl($seminary['id'], $questgroup['id'], $quest['id'], $this->request->getParam(6));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Character
|
// Character
|
||||||
$character = $this->Characters->getCharacterForUserAndSeminary($this->Auth->getUserId(), $seminary['id']);
|
$character = $this->Characters->getCharacterForUserAndSeminary($this->Auth->getUserId(), $seminary['id']);
|
||||||
|
|
||||||
// Set solved
|
// Set solved
|
||||||
if(is_null($sidequest)) {
|
$this->Quests->setQuestUnsolved($quest['id'], $character['id']);
|
||||||
$this->Quests->setQuestUnsolved($quest['id'], $character['id']);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$this->Quests->setSidequestUnsolved($sidequest['id'], $character['id']);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Redirect
|
// Redirect
|
||||||
|
|
|
||||||
|
|
@ -96,7 +96,7 @@
|
||||||
$quests = null;
|
$quests = null;
|
||||||
if(count($childQuestgroupshierarchy) == 0)
|
if(count($childQuestgroupshierarchy) == 0)
|
||||||
{
|
{
|
||||||
$quests = $this->Quests->getQuestsForQuestgroup($questgroup['id']);
|
$quests = $this->Quests->getMainquestsForQuestgroup($questgroup['id']);
|
||||||
for($i=0; $i<count($quests); $i++)
|
for($i=0; $i<count($quests); $i++)
|
||||||
{
|
{
|
||||||
// Check permission
|
// Check permission
|
||||||
|
|
|
||||||
|
|
@ -84,16 +84,29 @@
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Previous Quests
|
// Previous Quests
|
||||||
$solved = false;
|
if(count($previousQuests) > 0)
|
||||||
foreach($previousQuests as &$previousQuest)
|
|
||||||
{
|
{
|
||||||
if($this->Quests->hasCharacterSolvedQuest($previousQuest['id'], $character['id'])) {
|
$solved = false;
|
||||||
$solved = true;
|
foreach($previousQuests as &$previousQuest)
|
||||||
break;
|
{
|
||||||
|
if($this->Quests->hasCharacterSolvedQuest($previousQuest['id'], $character['id'])) {
|
||||||
|
$solved = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!$solved) {
|
||||||
|
throw new \nre\exceptions\AccessDeniedException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(!$solved) {
|
}
|
||||||
throw new \nre\exceptions\AccessDeniedException();
|
|
||||||
|
// Get (related) Questtext (for Sidequests)
|
||||||
|
$relatedQuesttext = null;
|
||||||
|
if(!$quest['is_mainquest'])
|
||||||
|
{
|
||||||
|
$relatedQuesttext = $this->Questtexts->getQuesttextForSidequest($quest['id']);
|
||||||
|
if(!empty($relatedQuesttext)) {
|
||||||
|
$relatedQuesttext['quest'] = $this->Quests->getQuestById($relatedQuesttext['quest_id']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -154,14 +167,23 @@
|
||||||
$nextQuestgroup = null;
|
$nextQuestgroup = null;
|
||||||
if($questtexttypeUrl == 'Epilog')
|
if($questtexttypeUrl == 'Epilog')
|
||||||
{
|
{
|
||||||
// Next Quest
|
if($quest['is_mainquest'])
|
||||||
$nextQuests = $this->Quests->getNextQuests($quest['id']);
|
|
||||||
|
|
||||||
// Next Questgroup
|
|
||||||
if(empty($nextQuests))
|
|
||||||
{
|
{
|
||||||
$nextQuestgroup = $this->Questgroups->getNextQuestgroup($questgroup['id']);
|
// Next Quest
|
||||||
$nextQuestgroup['hierarchy'] = $this->Questgroupshierarchy->getHierarchyById($nextQuestgroup['questgroupshierarchy_id']);
|
$nextQuests = $this->Quests->getNextQuests($quest['id']);
|
||||||
|
|
||||||
|
// Next Questgroup
|
||||||
|
if(empty($nextQuests))
|
||||||
|
{
|
||||||
|
$nextQuestgroup = $this->Questgroups->getNextQuestgroup($questgroup['id']);
|
||||||
|
$nextQuestgroup['hierarchy'] = $this->Questgroupshierarchy->getHierarchyById($nextQuestgroup['questgroupshierarchy_id']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Related (Main-) Quest
|
||||||
|
$nextQuest = $relatedQuesttext['quest'];
|
||||||
|
$nextQuest['questgroup_url'] = $questgroup['url'];
|
||||||
|
$nextQuests = array($nextQuest);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -173,6 +195,7 @@
|
||||||
$this->set('quest', $quest);
|
$this->set('quest', $quest);
|
||||||
$this->set('queststatus', $questStatus);
|
$this->set('queststatus', $questStatus);
|
||||||
$this->set('queststatustext', $questStatusText);
|
$this->set('queststatustext', $questStatusText);
|
||||||
|
$this->set('relatedquesttext', $relatedQuesttext);
|
||||||
$this->set('nextquests', $nextQuests);
|
$this->set('nextquests', $nextQuests);
|
||||||
$this->set('nextquestgroup', $nextQuestgroup);
|
$this->set('nextquestgroup', $nextQuestgroup);
|
||||||
$this->set('task', $task);
|
$this->set('task', $task);
|
||||||
|
|
@ -180,137 +203,6 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Action: sidequest.
|
|
||||||
*
|
|
||||||
* Show a sidequest and its task.
|
|
||||||
*
|
|
||||||
* @throws IdNotFoundException
|
|
||||||
* @param string $seminaryUrl URL-Title of Seminary
|
|
||||||
* @param string $questgroupUrl URL-Title of Questgroup
|
|
||||||
* @param string $questUrl URL-Title of Quest
|
|
||||||
* @param string $sidequestUrl URL-Title of Sidequest
|
|
||||||
* @param string $sidequesttexttypeUrl URL-Title of Sidequesttexttype
|
|
||||||
* @param int $sidequesttextPos Position of Sidequesttext
|
|
||||||
*/
|
|
||||||
public function sidequest($seminaryUrl, $questgroupUrl, $questUrl, $sidequestUrl, $sidequesttexttypeUrl=null, $sidequesttextPos=1)
|
|
||||||
{
|
|
||||||
// Get seminary
|
|
||||||
$seminary = $this->Seminaries->getSeminaryByUrl($seminaryUrl);
|
|
||||||
|
|
||||||
// Get Questgroup
|
|
||||||
$questgroup = $this->Questgroups->getQuestgroupByUrl($seminary['id'], $questgroupUrl);
|
|
||||||
|
|
||||||
// Get Quest
|
|
||||||
$quest = $this->Quests->getQuestByUrl($seminary['id'], $questgroup['id'], $questUrl);
|
|
||||||
|
|
||||||
// Get Sidequest
|
|
||||||
$sidequest = $this->Quests->getSidequestByUrl($seminary['id'], $questgroup['id'], $quest['id'], $sidequestUrl);
|
|
||||||
|
|
||||||
// Get Character
|
|
||||||
$character = $this->Characters->getCharacterForUserAndSeminary($this->Auth->getUserId(), $seminary['id']);
|
|
||||||
|
|
||||||
// Check permission
|
|
||||||
$previousQuests = $this->Quests->getPreviousQuests($quest['id']);
|
|
||||||
if(count($previousQuests) == 0)
|
|
||||||
{
|
|
||||||
// Previous Questgroup
|
|
||||||
$previousQuestgroup = $this->Questgroups->getPreviousQuestgroup($questgroup['id']);
|
|
||||||
if(!is_null($previousQuestgroup) && !$this->Questgroups->hasCharacterSolvedQuestgroup($previousQuestgroup['id'], $character['id'])) {
|
|
||||||
throw new \nre\exceptions\AccessDeniedException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Previous Quests
|
|
||||||
if(count($previousQuests) > 0)
|
|
||||||
{
|
|
||||||
$solved = false;
|
|
||||||
foreach($previousQuests as &$previousQuest)
|
|
||||||
{
|
|
||||||
if($this->Quests->hasCharacterSolvedQuest($previousQuest['id'], $character['id'])) {
|
|
||||||
$solved = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(!$solved) {
|
|
||||||
throw new \nre\exceptions\AccessDeniedException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get Questtext
|
|
||||||
$questtext = $this->Questtexts->getQuesttextForSidequest($sidequest['id']);
|
|
||||||
|
|
||||||
// Get Sidequesttext
|
|
||||||
$sidequesttext = null;
|
|
||||||
if(is_null($sidequesttexttypeUrl)) {
|
|
||||||
$sidequesttexttypeUrl = 'Prolog';
|
|
||||||
}
|
|
||||||
$questtexttypes = $this->Questtexts->getQuesttexttypes();
|
|
||||||
$questtexttypes = array_map(function($t) { return $t['url']; }, $questtexttypes);
|
|
||||||
$sidequesttextCount = $this->Questtexts->getQuesttextsCountForSidequest($sidequest['id'], $sidequesttexttypeUrl);
|
|
||||||
if($sidequesttextCount > 0 && in_array($sidequesttexttypeUrl, $questtexttypes))
|
|
||||||
{
|
|
||||||
if(in_array($sidequesttexttypeUrl, $questtexttypes))
|
|
||||||
{
|
|
||||||
$sidequesttextPos = max(intval($sidequesttextPos), 1);
|
|
||||||
$sidequesttext = $this->Questtexts->getSidequesttextByUrl($sidequest['id'], $sidequesttexttypeUrl, $sidequesttextPos);
|
|
||||||
$sidequesttext['count'] = $sidequesttextCount;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sidequest status
|
|
||||||
$sidequestStatus = $this->request->getGetParam('status');
|
|
||||||
$sidequestStatusText = null;
|
|
||||||
if(!is_null($sidequestStatus))
|
|
||||||
{
|
|
||||||
switch($sidequestStatus)
|
|
||||||
{
|
|
||||||
case 'solved':
|
|
||||||
$sidequestStatusText = $sidequest['right_text'];
|
|
||||||
break;
|
|
||||||
case 'unsolved':
|
|
||||||
$sidequestStatusText = $sidequest['wrong_text'];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Media
|
|
||||||
$sidequestmedia = null;
|
|
||||||
if(!is_null($sidequesttext) && !empty($sidequesttext['questsmedia_id'])) {
|
|
||||||
$sidequestmedia = $this->Media->getMediaById($sidequesttext['questsmedia_id']);
|
|
||||||
}
|
|
||||||
elseif(!is_null($sidequest['questsmedia_id'])) {
|
|
||||||
$sidequestmedia = $this->Media->getMediaById($sidequest['questsmedia_id']);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Task
|
|
||||||
$task = null;
|
|
||||||
if($sidequesttexttypeUrl == 'Prolog')
|
|
||||||
{
|
|
||||||
// Questtype
|
|
||||||
$questtype = $this->Questtypes->getQuesttypeById($sidequest['questtype_id']);
|
|
||||||
|
|
||||||
// Task
|
|
||||||
$task = $this->runAndRenderTask($questtype['classname']);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Pass data to view
|
|
||||||
$this->set('seminary', $seminary);
|
|
||||||
$this->set('questgroup', $questgroup);
|
|
||||||
$this->set('questtext', $questtext);
|
|
||||||
$this->set('sidequesttext', $sidequesttext);
|
|
||||||
$this->set('quest', $quest);
|
|
||||||
$this->set('sidequest', $sidequest);
|
|
||||||
$this->set('sidequeststatus', $sidequestStatus);
|
|
||||||
$this->set('sidequeststatustext', $sidequestStatusText);
|
|
||||||
$this->set('task', $task);
|
|
||||||
$this->set('media', $sidequestmedia);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -217,7 +217,7 @@
|
||||||
$lastChildQuestgroupshierarchy = array_pop($childQuestgroupshierarchy);
|
$lastChildQuestgroupshierarchy = array_pop($childQuestgroupshierarchy);
|
||||||
}
|
}
|
||||||
|
|
||||||
$quests = $this->Quests->getQuestsForQuestgroup($currentQuestgroup['id']);
|
$quests = $this->Quests->getMainquestsForQuestgroup($currentQuestgroup['id']);
|
||||||
$lastQuest = array_pop($quests);
|
$lastQuest = array_pop($quests);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -40,11 +40,12 @@
|
||||||
* @param int $questgroupId ID of a Questgroup
|
* @param int $questgroupId ID of a Questgroup
|
||||||
* @return array Quests of the given Questgroup
|
* @return array Quests of the given Questgroup
|
||||||
*/
|
*/
|
||||||
public function getQuestsForQuestgroup($questgroupId)
|
public function getMainquestsForQuestgroup($questgroupId)
|
||||||
{
|
{
|
||||||
return $this->db->query(
|
return $this->db->query(
|
||||||
'SELECT id, questtype_id, title, url, xps, task '.
|
'SELECT id, questtype_id, title, url, xps, task '.
|
||||||
'FROM quests '.
|
'FROM quests '.
|
||||||
|
'INNER JOIN mainquests ON mainquests.quest_id = quests.id '.
|
||||||
'WHERE questgroup_id = ?',
|
'WHERE questgroup_id = ?',
|
||||||
'i',
|
'i',
|
||||||
$questgroupId
|
$questgroupId
|
||||||
|
|
@ -64,7 +65,8 @@
|
||||||
public function getQuestByUrl($seminaryId, $questgroupId, $questUrl)
|
public function getQuestByUrl($seminaryId, $questgroupId, $questUrl)
|
||||||
{
|
{
|
||||||
$data = $this->db->query(
|
$data = $this->db->query(
|
||||||
'SELECT quests.id, quests.questtype_id, quests.title, quests.url, quests.xps, quests.task, quests.right_text, quests.wrong_text, quests.questsmedia_id '.
|
'SELECT quests.id, quests.questtype_id, quests.title, quests.url, quests.xps, quests.task, quests.right_text, quests.wrong_text, quests.questsmedia_id, ('.
|
||||||
|
'SELECT count(mainquests.quest_id) FROM mainquests WHERE mainquests.quest_id = quests.id) AS is_mainquest '.
|
||||||
'FROM quests '.
|
'FROM quests '.
|
||||||
'LEFT JOIN questgroups ON questgroups.id = quests.questgroup_id '.
|
'LEFT JOIN questgroups ON questgroups.id = quests.questgroup_id '.
|
||||||
'LEFT JOIN questgroupshierarchy ON questgroupshierarchy.id = questgroups.questgroupshierarchy_id '.
|
'LEFT JOIN questgroupshierarchy ON questgroupshierarchy.id = questgroups.questgroupshierarchy_id '.
|
||||||
|
|
@ -76,6 +78,38 @@
|
||||||
throw new \nre\exceptions\IdNotFoundException($questUrl);
|
throw new \nre\exceptions\IdNotFoundException($questUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$data[0]['is_mainquest'] = ($data[0]['is_mainquest'] == 1);
|
||||||
|
|
||||||
|
|
||||||
|
return $data[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a Quest and its data by its ID.
|
||||||
|
*
|
||||||
|
* @throws IdNotFoundException
|
||||||
|
* @param string $questId ID of a Quest
|
||||||
|
* @return array Quest data
|
||||||
|
*/
|
||||||
|
public function getQuestById($questId)
|
||||||
|
{
|
||||||
|
$data = $this->db->query(
|
||||||
|
'SELECT quests.id, quests.questtype_id, quests.title, quests.url, quests.xps, quests.task, quests.right_text, quests.wrong_text, quests.questsmedia_id, ('.
|
||||||
|
'SELECT count(mainquests.quest_id) FROM mainquests WHERE mainquests.quest_id = quests.id) AS is_mainquest '.
|
||||||
|
'FROM quests '.
|
||||||
|
'LEFT JOIN questgroups ON questgroups.id = quests.questgroup_id '.
|
||||||
|
'LEFT JOIN questgroupshierarchy ON questgroupshierarchy.id = questgroups.questgroupshierarchy_id '.
|
||||||
|
'WHERE quests.id = ?',
|
||||||
|
'i',
|
||||||
|
$questId
|
||||||
|
);
|
||||||
|
if(empty($data)) {
|
||||||
|
throw new \nre\exceptions\IdNotFoundException($questId);
|
||||||
|
}
|
||||||
|
|
||||||
|
$data[0]['is_mainquest'] = ($data[0]['is_mainquest'] == 1);
|
||||||
|
|
||||||
|
|
||||||
return $data[0];
|
return $data[0];
|
||||||
}
|
}
|
||||||
|
|
@ -94,14 +128,15 @@
|
||||||
public function getSidequestByUrl($seminaryId, $questgroupId, $questId, $sidequestUrl)
|
public function getSidequestByUrl($seminaryId, $questgroupId, $questId, $sidequestUrl)
|
||||||
{
|
{
|
||||||
$data = $this->db->query(
|
$data = $this->db->query(
|
||||||
'SELECT sidequests.id, sidequests.questtype_id, sidequests.title, sidequests.url, sidequests.xps, sidequests.task, quests.right_text, quests.wrong_text, sidequests.questsmedia_id '.
|
'SELECT quests.id, quests.questtype_id, quests.title, quests.url, quests.xps, quests.task, quests.right_text, quests.wrong_text, quests.questsmedia_id '.
|
||||||
'FROM sidequests '.
|
'FROM quests '.
|
||||||
|
'INNER JOIN sidequests ON sidequests.quest_id = quests.id '.
|
||||||
'LEFT JOIN questtexts ON questtexts.id = sidequests.questtext_id '.
|
'LEFT JOIN questtexts ON questtexts.id = sidequests.questtext_id '.
|
||||||
'LEFT JOIN quests ON quests.id = questtexts.quest_id '.
|
'LEFT JOIN mainquests ON mainquests.quest_id = questtexts.mainquest_id '.
|
||||||
'LEFT JOIN questgroups ON questgroups.id = quests.questgroup_id '.
|
'LEFT JOIN questgroups ON questgroups.id = quests.questgroup_id '.
|
||||||
'LEFT JOIN questgroupshierarchy ON questgroupshierarchy.id = questgroups.questgroupshierarchy_id '.
|
'LEFT JOIN questgroupshierarchy ON questgroupshierarchy.id = questgroups.questgroupshierarchy_id '.
|
||||||
'LEFT JOIN seminaries ON seminaries.id = questgroupshierarchy.seminary_id '.
|
'LEFT JOIN seminaries ON seminaries.id = questgroupshierarchy.seminary_id '.
|
||||||
'WHERE sidequests.url = ? AND quests.id = ? AND questgroups.id = ? AND seminaries.id = ?',
|
'WHERE quests.url = ? AND mainquests.id = ? AND questgroups.id = ? AND seminaries.id = ?',
|
||||||
'siii',
|
'siii',
|
||||||
$sidequestUrl,
|
$sidequestUrl,
|
||||||
$questId,
|
$questId,
|
||||||
|
|
@ -126,8 +161,9 @@
|
||||||
public function getSidequestsForQuest($questId)
|
public function getSidequestsForQuest($questId)
|
||||||
{
|
{
|
||||||
return $this->db->query(
|
return $this->db->query(
|
||||||
'SELECT sidequests.id, sidequests.questtext_id, sidequests.title, sidequests.url, sidequests.entry_text '.
|
'SELECT quests.id, sidequests.questtext_id, quests.title, quests.url, sidequests.entry_text '.
|
||||||
'FROM sidequests '.
|
'FROM quests '.
|
||||||
|
'INNER JOIN sidequests ON sidequests.quest_id = quests.id '.
|
||||||
'LEFT JOIN questtexts ON questtexts.id = sidequests.questtext_id '.
|
'LEFT JOIN questtexts ON questtexts.id = sidequests.questtext_id '.
|
||||||
'WHERE questtexts.quest_id = ?',
|
'WHERE questtexts.quest_id = ?',
|
||||||
'i',
|
'i',
|
||||||
|
|
@ -146,7 +182,8 @@
|
||||||
{
|
{
|
||||||
return $this->db->query(
|
return $this->db->query(
|
||||||
'SELECT id, questtext_id, title, url, entry_text '.
|
'SELECT id, questtext_id, title, url, entry_text '.
|
||||||
'FROM sidequests '.
|
'FROM quests '.
|
||||||
|
'INNER JOIN sidequests ON sidequests.quest_id = quests.id '.
|
||||||
'WHERE questtext_id = ?',
|
'WHERE questtext_id = ?',
|
||||||
'i',
|
'i',
|
||||||
$questtextId
|
$questtextId
|
||||||
|
|
@ -164,11 +201,12 @@
|
||||||
{
|
{
|
||||||
return $this->db->query(
|
return $this->db->query(
|
||||||
'SELECT quests.id, quests.title, quests.url, questgroups.title AS questgroup_title, questgroups.url AS questgroup_url '.
|
'SELECT quests.id, quests.title, quests.url, questgroups.title AS questgroup_title, questgroups.url AS questgroup_url '.
|
||||||
'FROM quests_previousquests '.
|
'FROM mainquests_previousmainquests '.
|
||||||
'LEFT JOIN quests ON quests.id = quests_previousquests.quest_id '.
|
'LEFT JOIN mainquests ON mainquests.quest_id = mainquests_previousmainquests.mainquest_id '.
|
||||||
|
'INNER JOIN quests ON quests.id = mainquests.quest_id '.
|
||||||
'LEFT JOIN questgroups ON questgroups.id = quests.questgroup_id '.
|
'LEFT JOIN questgroups ON questgroups.id = quests.questgroup_id '.
|
||||||
'LEFT JOIN questgroupshierarchy ON questgroupshierarchy.id = questgroups.questgroupshierarchy_id '.
|
'LEFT JOIN questgroupshierarchy ON questgroupshierarchy.id = questgroups.questgroupshierarchy_id '.
|
||||||
'WHERE quests_previousquests.previous_quest_id = ?',
|
'WHERE mainquests_previousmainquests.previous_mainquest_id = ?',
|
||||||
'i',
|
'i',
|
||||||
$questId
|
$questId
|
||||||
);
|
);
|
||||||
|
|
@ -185,11 +223,12 @@
|
||||||
{
|
{
|
||||||
return $this->db->query(
|
return $this->db->query(
|
||||||
'SELECT quests.id, quests.title, quests.url, questgroups.title AS questgroup_title, questgroups.url AS questgroup_url '.
|
'SELECT quests.id, quests.title, quests.url, questgroups.title AS questgroup_title, questgroups.url AS questgroup_url '.
|
||||||
'FROM quests_previousquests '.
|
'FROM mainquests_previousmainquests '.
|
||||||
'LEFT JOIN quests ON quests.id = quests_previousquests.previous_quest_id '.
|
'LEFT JOIN mainquests ON mainquests.quest_id = mainquests_previousmainquests.previous_mainquest_id '.
|
||||||
|
'INNER JOIN quests ON quests.id = mainquests.quest_id '.
|
||||||
'LEFT JOIN questgroups ON questgroups.id = quests.questgroup_id '.
|
'LEFT JOIN questgroups ON questgroups.id = quests.questgroup_id '.
|
||||||
'LEFT JOIN questgroupshierarchy ON questgroupshierarchy.id = questgroups.questgroupshierarchy_id '.
|
'LEFT JOIN questgroupshierarchy ON questgroupshierarchy.id = questgroups.questgroupshierarchy_id '.
|
||||||
'WHERE quests_previousquests.quest_id = ?',
|
'WHERE mainquests_previousmainquests.mainquest_id = ?',
|
||||||
'i',
|
'i',
|
||||||
$questId
|
$questId
|
||||||
);
|
);
|
||||||
|
|
@ -217,27 +256,6 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Mark a Sidequest as solved for a Character.
|
|
||||||
*
|
|
||||||
* @param int $sidequestId ID of Sidequest to mark as solved
|
|
||||||
* @param int $characterId ID of Character that solved the Sidequest
|
|
||||||
*/
|
|
||||||
public function setSidequestSolved($sidequestId, $characterId)
|
|
||||||
{
|
|
||||||
$this->db->query(
|
|
||||||
'INSERT INTO sidequests_characters '.
|
|
||||||
'(sidequest_id, character_id, status) '.
|
|
||||||
'VALUES '.
|
|
||||||
'(?, ?, ?)',
|
|
||||||
'iii',
|
|
||||||
$sidequestId,
|
|
||||||
$characterId,
|
|
||||||
0
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mark a Quest as unsolved for a Character.
|
* Mark a Quest as unsolved for a Character.
|
||||||
*
|
*
|
||||||
|
|
@ -259,27 +277,6 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Mark a Sidequest as unsolved for a Character.
|
|
||||||
*
|
|
||||||
* @param int $sidequestId ID of Sidequest to mark as unsolved
|
|
||||||
* @param int $characterId ID of Character that unsolved the Sidequest
|
|
||||||
*/
|
|
||||||
public function setSidequestUnsolved($sidequestId, $characterId)
|
|
||||||
{
|
|
||||||
$this->db->query(
|
|
||||||
'INSERT INTO sidequests_characters '.
|
|
||||||
'(sidequest_id, character_id, status) '.
|
|
||||||
'VALUES '.
|
|
||||||
'(?, ?, ?)',
|
|
||||||
'iii',
|
|
||||||
$sidequestId,
|
|
||||||
$characterId,
|
|
||||||
-1
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determine if the given Character has solved the given Quest.
|
* Determine if the given Character has solved the given Quest.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@
|
||||||
public function getQuesttextByUrl($questId, $questtexttypeUrl, $pos)
|
public function getQuesttextByUrl($questId, $questtexttypeUrl, $pos)
|
||||||
{
|
{
|
||||||
$data = $this->db->query(
|
$data = $this->db->query(
|
||||||
'SELECT questtexts.id, questtexts.text, questtexts.pos, questtexts.out_text, questtexts.questsmedia_id, questtexttypes.id AS type_id, questtexttypes.type, questtexttypes.url AS type_url '.
|
'SELECT questtexts.id, questtexts.text, questtexts.pos, questtexts.out_text, questtexts.abort_text, questtexts.questsmedia_id, questtexttypes.id AS type_id, questtexttypes.type, questtexttypes.url AS type_url '.
|
||||||
'FROM questtexts '.
|
'FROM questtexts '.
|
||||||
'LEFT JOIN questtexttypes ON questtexttypes.id = questtexts.questtexttype_id '.
|
'LEFT JOIN questtexttypes ON questtexttypes.id = questtexts.questtexttype_id '.
|
||||||
'WHERE questtexts.quest_id = ? AND questtexttypes.url = ? AND questtexts.pos = ?',
|
'WHERE questtexts.quest_id = ? AND questtexttypes.url = ? AND questtexts.pos = ?',
|
||||||
|
|
@ -62,34 +62,6 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a Questtext for a Sidequest by its URL.
|
|
||||||
*
|
|
||||||
* @throws IdNotFoundException
|
|
||||||
* @param int $sidequestId ID of the Sidequest to get text for
|
|
||||||
* @param string $questtexttypeUrl URL of the Questtexttype
|
|
||||||
* @param int $pos Position of Questtexttype
|
|
||||||
* @return array Questtexttype data
|
|
||||||
*/
|
|
||||||
public function getSidequesttextByUrl($sidequestId, $questtexttypeUrl, $pos)
|
|
||||||
{
|
|
||||||
$data = $this->db->query(
|
|
||||||
'SELECT sidequesttexts.id, sidequesttexts.text, sidequesttexts.pos, sidequesttexts.out_text, sidequesttexts.abort_text, sidequesttexts.questsmedia_id, questtexttypes.id AS type_id, questtexttypes.type, questtexttypes.url AS type_url '.
|
|
||||||
'FROM sidequesttexts '.
|
|
||||||
'LEFT JOIN questtexttypes ON questtexttypes.id = sidequesttexts.questtexttype_id '.
|
|
||||||
'WHERE sidequesttexts.sidequest_id = ? AND questtexttypes.url = ? AND sidequesttexts.pos = ?',
|
|
||||||
'isi',
|
|
||||||
$sidequestId, $questtexttypeUrl, $pos
|
|
||||||
);
|
|
||||||
if(empty($data)) {
|
|
||||||
throw new \nre\exceptions\IdNotFoundException($questtexttypeUrl);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return $data = $data[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get count of Questtexts for a Quest.
|
* Get count of Questtexts for a Quest.
|
||||||
*
|
*
|
||||||
|
|
@ -117,33 +89,6 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get count of Questtexts for a Sidequest.
|
|
||||||
*
|
|
||||||
* @param int $sidequestId ID of the Sidequest
|
|
||||||
* @param string $questtexttypeUrl URL of the Questtexttype
|
|
||||||
* @return int Conut of Questtexts for Sideuest
|
|
||||||
*/
|
|
||||||
public function getQuesttextsCountForSidequest($questId, $questtexttypUrl)
|
|
||||||
{
|
|
||||||
$count = 0;
|
|
||||||
$data = $this->db->query(
|
|
||||||
'SELECT COUNT(sidequesttexts.id) AS c '.
|
|
||||||
'FROM sidequesttexts '.
|
|
||||||
'LEFT JOIN questtexttypes ON questtexttypes.id = sidequesttexts.questtexttype_id '.
|
|
||||||
'WHERE sidequesttexts.sidequest_id = ? AND questtexttypes.url = ?',
|
|
||||||
'is',
|
|
||||||
$questId, $questtexttypUrl
|
|
||||||
);
|
|
||||||
if(!empty($data)) {
|
|
||||||
$count = $data[0]['c'];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return $count;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get corresponding Questtext for a Sidequest.
|
* Get corresponding Questtext for a Sidequest.
|
||||||
*
|
*
|
||||||
|
|
@ -154,11 +99,12 @@
|
||||||
public function getQuesttextForSidequest($sidequestId)
|
public function getQuesttextForSidequest($sidequestId)
|
||||||
{
|
{
|
||||||
$data = $this->db->query(
|
$data = $this->db->query(
|
||||||
'SELECT questtexts.id, questtexts.text, questtexts.pos, questtexttypes.id AS type_id, questtexttypes.type, questtexttypes.url AS type_url '.
|
'SELECT questtexts.id, questtexts.text, questtexts.pos, questtexts.quest_id, questtexttypes.id AS type_id, questtexttypes.type, questtexttypes.url AS type_url '.
|
||||||
'FROM sidequests '.
|
'FROM quests '.
|
||||||
|
'INNER JOIN sidequests ON sidequests.quest_id = quests.id '.
|
||||||
'LEFT JOIN questtexts ON questtexts.id = sidequests.questtext_id '.
|
'LEFT JOIN questtexts ON questtexts.id = sidequests.questtext_id '.
|
||||||
'LEFT JOIN questtexttypes ON questtexttypes.id = questtexts.questtexttype_id '.
|
'LEFT JOIN questtexttypes ON questtexttypes.id = questtexts.questtexttype_id '.
|
||||||
'WHERE sidequests.id = ?',
|
'WHERE quests.id = ?',
|
||||||
'i',
|
'i',
|
||||||
$sidequestId
|
$sidequestId
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -34,9 +34,9 @@
|
||||||
<li>
|
<li>
|
||||||
<?php if(!array_key_exists('access', $quest) || $quest['access']) : ?>
|
<?php if(!array_key_exists('access', $quest) || $quest['access']) : ?>
|
||||||
<a href="<?=$linker->link(array('quests','quest',$seminary['url'],$questgroup['url'],$quest['url']))?>"><?=$quest['title']?></a>
|
<a href="<?=$linker->link(array('quests','quest',$seminary['url'],$questgroup['url'],$quest['url']))?>"><?=$quest['title']?></a>
|
||||||
|
<?php if(count($quest['sidequests']) > 0) : ?>
|
||||||
<br />
|
<br />
|
||||||
<?=_('containing optional Quests')?>:
|
<?=_('containing optional Quests')?>:
|
||||||
<?php if(count($quest['sidequests']) > 0) : ?>
|
|
||||||
<ul>
|
<ul>
|
||||||
<?php foreach($quest['sidequests'] as &$sidequest) : ?>
|
<?php foreach($quest['sidequests'] as &$sidequest) : ?>
|
||||||
<li><?=$sidequest['title']?></li>
|
<li><?=$sidequest['title']?></li>
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,13 @@
|
||||||
<?=$questgroupshierarchypath?>
|
<?=$questgroupshierarchypath?>
|
||||||
<?=$questgroupspicture?>
|
<?=$questgroupspicture?>
|
||||||
|
|
||||||
|
<?php if(is_null($relatedquesttext)) : ?>
|
||||||
<h3><?=$quest['title']?></h3>
|
<h3><?=$quest['title']?></h3>
|
||||||
|
<?php else : ?>
|
||||||
|
<h3><a href="<?=$linker->link(array('quest',$seminary['url'],$questgroup['url'],$relatedquesttext['quest']['url'],$relatedquesttext['type_url'],$relatedquesttext['pos']),1)?>"><?=$relatedquesttext['quest']['title']?></a></h3>
|
||||||
|
<h4><?=$quest['title']?></h4>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
<?php if(!is_null($media)) : ?>
|
<?php if(!is_null($media)) : ?>
|
||||||
<img src="<?=$linker->link(array('media','index',$seminary['url'],$media['url']))?>" />
|
<img src="<?=$linker->link(array('media','index',$seminary['url'],$media['url']))?>" />
|
||||||
<?php endif ?>
|
<?php endif ?>
|
||||||
|
|
@ -25,20 +31,17 @@
|
||||||
<h1><?=$questtext['type']?></h1>
|
<h1><?=$questtext['type']?></h1>
|
||||||
<p><?=\hhu\z\Utils::t($questtext['text'])?></p>
|
<p><?=\hhu\z\Utils::t($questtext['text'])?></p>
|
||||||
|
|
||||||
<?php if(array_key_exists('sidequests', $questtext) && !empty($questtext['sidequests'])) : ?>
|
|
||||||
<ul>
|
<ul>
|
||||||
<?php foreach($questtext['sidequests'] as &$sidequest) : ?>
|
<?php foreach($questtext['sidequests'] as &$sidequest) : ?>
|
||||||
<li><a href="<?=$linker->link(array('sidequest',$seminary['url'],$questgroup['url'],$quest['url'],$sidequest['url']),1)?>"><?=$sidequest['entry_text']?></a></li>
|
<li><a href="<?=$linker->link(array('quest',$seminary['url'],$questgroup['url'],$sidequest['url']),1)?>"><?=$sidequest['entry_text']?></a></li>
|
||||||
<?php endforeach ?>
|
<?php endforeach ?>
|
||||||
<?php if(!empty($questtext['out_text'])) : ?>
|
<?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>
|
||||||
|
<?php endif ?>
|
||||||
|
<?php if(!empty($questtext['out_text']) && $questtext['pos'] < $questtext['count']) : ?>
|
||||||
<li><a href="<?=$linker->link($questtext['pos']+1, 6)?>"><?=$questtext['out_text']?></a></li>
|
<li><a href="<?=$linker->link($questtext['pos']+1, 6)?>"><?=$questtext['out_text']?></a></li>
|
||||||
<?php endif ?>
|
<?php endif ?>
|
||||||
</ul>
|
</ul>
|
||||||
<?php endif ?>
|
|
||||||
|
|
||||||
<?php if(array_key_exists('out_text', $questtext) && !empty($questtext['out_text']) && array_key_exists('sidequests', $questtext) && empty($questtext['sidequests'])) : ?>
|
|
||||||
<a href="<?=$linker->link($questtext['pos']+1, 6)?>"><?=$questtext['out_text']?></a>
|
|
||||||
<?php endif ?>
|
|
||||||
|
|
||||||
<?php if(array_key_exists('pos', $questtext)) : ?>
|
<?php if(array_key_exists('pos', $questtext)) : ?>
|
||||||
<?php if($questtext['pos'] > 1) : ?><a href="<?=$linker->link(array($questtext['type_url'],$questtext['pos']-1),5)?>"><</a><?php endif ?>
|
<?php if($questtext['pos'] > 1) : ?><a href="<?=$linker->link(array($questtext['type_url'],$questtext['pos']-1),5)?>"><</a><?php endif ?>
|
||||||
|
|
@ -54,7 +57,11 @@
|
||||||
<?php if(count($nextquests) > 0) : ?>
|
<?php if(count($nextquests) > 0) : ?>
|
||||||
<ul>
|
<ul>
|
||||||
<?php foreach($nextquests as &$nextquest) : ?>
|
<?php foreach($nextquests as &$nextquest) : ?>
|
||||||
|
<?php if($nextquest['id'] == $relatedquesttext['quest']['id']) : ?>
|
||||||
|
<li><?=_('Quest')?>: <a href="<?=$linker->link(array($nextquest['questgroup_url'],$nextquest['url'],$relatedquesttext['type_url'],$relatedquesttext['pos']),3)?>"><?=$nextquest['title']?></a></li>
|
||||||
|
<?php else : ?>
|
||||||
<li><?=_('Quest')?>: <a href="<?=$linker->link(array($nextquest['questgroup_url'],$nextquest['url']),3)?>"><?=$nextquest['title']?></a></li>
|
<li><?=_('Quest')?>: <a href="<?=$linker->link(array($nextquest['questgroup_url'],$nextquest['url']),3)?>"><?=$nextquest['title']?></a></li>
|
||||||
|
<?php endif ?>
|
||||||
<?php endforeach ?>
|
<?php endforeach ?>
|
||||||
</ul>
|
</ul>
|
||||||
<?php elseif(!is_null($nextquestgroup)) : ?>
|
<?php elseif(!is_null($nextquestgroup)) : ?>
|
||||||
|
|
|
||||||
|
|
@ -1,55 +0,0 @@
|
||||||
<h1><?=_('Seminaries')?></h1>
|
|
||||||
<h2><?=$seminary['title']?></h2>
|
|
||||||
|
|
||||||
<?=$questgroupshierarchypath?>
|
|
||||||
<?=$questgroupspicture?>
|
|
||||||
|
|
||||||
<h3><a href="<?=$linker->link(array('quest',$seminary['url'],$questgroup['url'],$quest['url'],$questtext['type_url'],$questtext['pos']),1)?>"><?=$quest['title']?></a></h3>
|
|
||||||
<h4><?=$sidequest['title']?></h4>
|
|
||||||
<p><?=_('This Quest is optional')?>.</p>
|
|
||||||
<?php if(!is_null($media)) : ?>
|
|
||||||
<img src="<?=$linker->link(array('media','index',$seminary['url'],$media['url']))?>" />
|
|
||||||
<?php endif ?>
|
|
||||||
|
|
||||||
<?php if(!is_null($sidequeststatustext)) : ?>
|
|
||||||
<section>
|
|
||||||
<?php if($sidequeststatus == 'solved') : ?>
|
|
||||||
<h1><?=_('solved')?></h1>
|
|
||||||
<?php elseif($sidequeststatus == 'unsolved') : ?>
|
|
||||||
<h1><?=_('unsolved')?></h1>
|
|
||||||
<?php endif ?>
|
|
||||||
<p><?=\hhu\z\Utils::t($sidequeststatustext)?></p>
|
|
||||||
</section>
|
|
||||||
<?php endif ?>
|
|
||||||
|
|
||||||
<?php if(!is_null($sidequesttext)) : ?>
|
|
||||||
<section>
|
|
||||||
<h1><?=$sidequesttext['type']?></h1>
|
|
||||||
<p><?=\hhu\z\Utils::t($sidequesttext['text'])?></p>
|
|
||||||
|
|
||||||
<?php if(array_key_exists('out_text', $sidequesttext) && !empty($sidequesttext['out_text'])) : ?>
|
|
||||||
<?php if(array_key_exists('abort_text', $sidequesttext) && !empty($sidequesttext['abort_text'])) : ?>
|
|
||||||
<ul>
|
|
||||||
<li><a href="<?=$linker->link(array('quest',$seminary['url'],$questgroup['url'],$quest['url'],$questtext['type_url'],$questtext['pos']),1)?>"><?=$sidequesttext['abort_text']?></a></li>
|
|
||||||
<li><a href="<?=$linker->link(array($sidequesttext['type_url'],$sidequesttext['pos']+1),6)?>"><?=$sidequesttext['out_text']?></a></li>
|
|
||||||
</ul>
|
|
||||||
<?php else : ?>
|
|
||||||
<a href="<?=$linker->link($sidequesttext['pos']+1, 7)?>"><?=$sidequesttext['out_text']?></a><br />
|
|
||||||
<?php endif ?>
|
|
||||||
<?php endif ?>
|
|
||||||
|
|
||||||
<?php if(array_key_exists('pos', $sidequesttext)) : ?>
|
|
||||||
<?php if($sidequesttext['pos'] > 1) : ?><a href="<?=$linker->link(array($sidequesttext['type_url'],$sidequesttext['pos']-1),6)?>"><</a><?php endif ?>
|
|
||||||
<?=$sidequesttext['pos']?>/<?=$sidequesttext['count']?>
|
|
||||||
<?php if($sidequesttext['pos'] < $sidequesttext['count'] && empty($sidequesttext['out_text'])) : ?><a href="<?=$linker->link(array($sidequesttext['type_url'],$sidequesttext['pos']+1),6)?>">></a><?php endif ?>
|
|
||||||
<?php endif ?>
|
|
||||||
</section>
|
|
||||||
<?php endif ?>
|
|
||||||
|
|
||||||
<?php if(!is_null($task)) : ?>
|
|
||||||
<section>
|
|
||||||
<h1><?=_('Task')?></h1>
|
|
||||||
<p><?=\hhu\z\Utils::t($sidequest['task'])?></p>
|
|
||||||
<p><?=$task?></p>
|
|
||||||
</section>
|
|
||||||
<?php endif ?>
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue