implement managing of Queststopics
This commit is contained in:
parent
f863ff9678
commit
f41f48b928
7 changed files with 169 additions and 8 deletions
|
|
@ -235,6 +235,7 @@
|
|||
array('^achievements/([^/]+)/?$', 'achievements/index/$1', true),
|
||||
array('^library/([^/]+)/?$', 'library/index/$1', true),
|
||||
array('^library/([^/]+)/([^/]+)/?$', 'library/topic/$1/$2', true),
|
||||
array('^library/([^/]+)/([^/]+)/manage/?$', 'library/managetopic/$1/$2', true),
|
||||
array('^media/(.*)$', 'media/$1?layout=binary', false),
|
||||
array('^uploads/(.*)$', 'uploads/$1?layout=binary', false)
|
||||
);
|
||||
|
|
@ -271,7 +272,8 @@
|
|||
array('^charactergroupsquests/quest/(.*)$', 'charactergroupsquests/$1', true),
|
||||
array('^charactergroupsquests/(edit|delete|manage)/([^/]+)/([^/]+)/([^/]+)$', 'charactergroupsquests/$2/$3/$4/$1', true),
|
||||
array('^achievements/index/(.*)$', 'achievements/$1', true),
|
||||
array('^library/(index|topic)/(.*)$', 'library/$2', true)
|
||||
array('^library/(index|topic)/(.*)$', 'library/$2', true),
|
||||
array('^library/managetopic/(.*)$', 'library/$1/manage', true)
|
||||
);
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -31,7 +31,9 @@
|
|||
* @var array
|
||||
*/
|
||||
public $permissions = array(
|
||||
'index' => array('admin', 'moderator', 'user')
|
||||
'index' => array('admin', 'moderator', 'user'),
|
||||
'topic' => array('admin', 'moderator', 'user'),
|
||||
'managetopic' => array('admin', 'moderator', 'user')
|
||||
);
|
||||
/**
|
||||
* User seminary permissions
|
||||
|
|
@ -39,7 +41,9 @@
|
|||
* @var array
|
||||
*/
|
||||
public $seminaryPermissions = array(
|
||||
'index' => array('admin', 'moderator', 'user')
|
||||
'index' => array('admin', 'moderator', 'user', 'guest'),
|
||||
'topic' => array('admin', 'moderator', 'user', 'guest'),
|
||||
'managetopic' => array('admin', 'moderator')
|
||||
);
|
||||
|
||||
|
||||
|
|
@ -139,6 +143,64 @@
|
|||
$this->set('quests', $quests);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Action: managetopic.
|
||||
*
|
||||
* Manage a Questtopic and its Quests with Questsubtopics.
|
||||
*
|
||||
* @throws IdNotFoundException
|
||||
* @param string $eminaryUrl URL-Title of Seminary
|
||||
* @param string $questtopicUrl URL-Title of Questtopic
|
||||
*/
|
||||
public function managetopic($seminaryUrl, $questtopicUrl)
|
||||
{
|
||||
// Get Seminary
|
||||
$seminary = $this->Seminaries->getSeminaryByUrl($seminaryUrl);
|
||||
|
||||
// Get Questtopic
|
||||
$questtopic = $this->Questtopics->getQuesttopicByUrl($seminary['id'], $questtopicUrl);
|
||||
|
||||
// Get Questsubtopics
|
||||
$questsubtopics = $this->Questtopics->getSubtopicsForQuesttopic($questtopic['id']);
|
||||
|
||||
// Set Questsubtopics for Quests
|
||||
if($this->request->getRequestMethod() == 'POST' && !is_null($this->request->getPostParam('questsubtopics')))
|
||||
{
|
||||
$quests = $this->Quests->getQuestsForQuesttopic($questtopic['id']);
|
||||
$selectedSubtopics = $this->request->getPostParam('questsubtopics');
|
||||
foreach($quests as &$quest)
|
||||
{
|
||||
$subtopics = (array_key_exists($quest['id'], $selectedSubtopics)) ? $selectedSubtopics[$quest['id']] : array();
|
||||
$this->Questtopics->setQuestsubtopicsForQuest($quest['id'], array_keys($subtopics));
|
||||
}
|
||||
}
|
||||
|
||||
// Get Quests
|
||||
$quests = $this->Quests->getQuestsForQuesttopic($questtopic['id']);
|
||||
foreach($quests as &$quest)
|
||||
{
|
||||
// Get Questgroup
|
||||
$quest['questgroup'] = $this->Questgroups->getQuestgroupById($quest['questgroup_id']);
|
||||
|
||||
// Get Subtopics
|
||||
$quest['subtopics'] = $this->Questtopics->getQuestsubtopicsForQuest($quest['id']);
|
||||
$quest['subtopics'] = array_map(function($t) { return $t['id']; }, $quest['subtopics']);
|
||||
}
|
||||
|
||||
|
||||
// Set title
|
||||
$this->addTitle($questtopic['title']);
|
||||
$this->addTitleLocalized('Library');
|
||||
$this->addTitle($seminary['title']);
|
||||
|
||||
// Pass data to view
|
||||
$this->set('seminary', $seminary);
|
||||
$this->set('questtopic', $questtopic);
|
||||
$this->set('questsubtopics', $questsubtopics);
|
||||
$this->set('quests', $quests);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -1,8 +1,8 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: The Legend of Z\n"
|
||||
"POT-Creation-Date: 2014-05-15 23:32+0100\n"
|
||||
"PO-Revision-Date: 2014-05-15 23:33+0100\n"
|
||||
"POT-Creation-Date: 2014-05-16 00:20+0100\n"
|
||||
"PO-Revision-Date: 2014-05-16 00:21+0100\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: de_DE\n"
|
||||
|
|
@ -732,7 +732,8 @@ msgstr "Das Kursfeld „%s“ ist ungültig"
|
|||
msgid "Seminary fields"
|
||||
msgstr "Kursfelder"
|
||||
|
||||
#: views/html/characters/index.tpl:13 views/html/users/index.tpl:7
|
||||
#: views/html/characters/index.tpl:13 views/html/library/managetopic.tpl:26
|
||||
#: views/html/users/index.tpl:7
|
||||
msgid "Manage"
|
||||
msgstr "Verwalten"
|
||||
|
||||
|
|
@ -842,8 +843,8 @@ msgstr "Du hast Level %d erreicht"
|
|||
msgid "Introduction"
|
||||
msgstr "Einführung"
|
||||
|
||||
#: views/html/library/index.tpl:9 views/html/library/topic.tpl:8
|
||||
#: views/html/seminarymenu/index.tpl:7
|
||||
#: views/html/library/index.tpl:9 views/html/library/managetopic.tpl:8
|
||||
#: views/html/library/topic.tpl:8 views/html/seminarymenu/index.tpl:7
|
||||
msgid "Library"
|
||||
msgstr "Bibliothek"
|
||||
|
||||
|
|
@ -861,6 +862,10 @@ msgstr ""
|
|||
msgid "Total progress: %d %%"
|
||||
msgstr "Gesamtfortschritt: %d%%"
|
||||
|
||||
#: views/html/library/topic.tpl:13
|
||||
msgid "Manage topic"
|
||||
msgstr "Thema verwalten"
|
||||
|
||||
#: views/html/menu/index.tpl:2 views/html/users/create.tpl:5
|
||||
#: views/html/users/delete.tpl:5 views/html/users/edit.tpl:6
|
||||
#: views/html/users/edit.tpl:8 views/html/users/index.tpl:4
|
||||
|
|
|
|||
|
|
@ -131,6 +131,25 @@
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get alle Questsubtopics for a Questtopic.
|
||||
*
|
||||
* @param int $questtopicId ID of Questtopic
|
||||
* @return array List of Questsubtopics for this Questtopic
|
||||
*/
|
||||
public function getSubtopicsForQuesttopic($questtopicId)
|
||||
{
|
||||
return $this->db->query(
|
||||
'SELECT id, questtopic_id, title, url '.
|
||||
'FROM questsubtopics '.
|
||||
'WHERE questsubtopics.questtopic_id = ? '.
|
||||
'ORDER BY title ASC',
|
||||
'i',
|
||||
$questtopicId
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get all Questsubtopics for a Quest.
|
||||
*
|
||||
|
|
@ -149,6 +168,47 @@
|
|||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set Questsubtopics for a Quest.
|
||||
*
|
||||
* @param int $questId ID of Quest to set subtopics for
|
||||
* @param array $questsubtopicIds List of IDs of subtopics to set
|
||||
*/
|
||||
public function setQuestsubtopicsForQuest($questId, $questsubtopicIds)
|
||||
{
|
||||
$this->db->setAutocommit(false);
|
||||
try {
|
||||
// Remove Questsubtopics
|
||||
$this->db->query(
|
||||
'DELETE FROM quests_questsubtopics '.
|
||||
'WHERE quest_id = ?',
|
||||
'i',
|
||||
$questId
|
||||
);
|
||||
|
||||
// Add Questsubtopics
|
||||
foreach($questsubtopicIds as &$questsubtopicId)
|
||||
{
|
||||
$this->db->query(
|
||||
'INSERT INTO quests_questsubtopics '.
|
||||
'(quest_id, questsubtopic_id) '.
|
||||
'VALUES '.
|
||||
'(?, ?)',
|
||||
'ii',
|
||||
$questId, $questsubtopicId
|
||||
);
|
||||
}
|
||||
}
|
||||
catch(\nre\exceptions\DatamodelException $e) {
|
||||
$this->db->rollback();
|
||||
$this->db->setAutocommit(true);
|
||||
throw $e;
|
||||
}
|
||||
|
||||
$this->db->setAutocommit(true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
|
|||
27
views/html/library/managetopic.tpl
Normal file
27
views/html/library/managetopic.tpl
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
<?php if(!is_null($seminary['library_seminarymedia_id'])) : ?>
|
||||
<div class="moodpic">
|
||||
<img src="<?=$linker->link(array('media','seminarymoodpic',$seminary['url'], 'library'))?>">
|
||||
</div>
|
||||
<?php endif ?>
|
||||
<ul class="breadcrumbs">
|
||||
<li><a href="<?=$linker->link(array('seminaries',$seminary['url']))?>"><?=$seminary['title']?></a></li>
|
||||
<li><i class="fa fa-chevron-right fa-fw"></i><a href="<?=$linker->link(array('index',$seminary['url']),1)?>"><?=_('Library')?></a></li>
|
||||
<li><i class="fa fa-chevron-right fa-fw"></i><a href="<?=$linker->link(array('topic',$seminary['url'],$questtopic['url']),1)?>"><?=$questtopic['title']?></a></li>
|
||||
</ul>
|
||||
<h1><i class="fa fa-book fa-fw"></i><?=$questtopic['title']?></h1>
|
||||
|
||||
<h2>Quests zu diesem Thema:</h2>
|
||||
<form method="post">
|
||||
<ul class="libtop">
|
||||
<?php foreach($quests as &$quest) : ?>
|
||||
<li>
|
||||
<p><a href="<?=$linker->link(array('quests','quest',$seminary['url'],$quest['questgroup']['url'],$quest['url']))?>"><?=$quest['title']?></a></p>
|
||||
<?php foreach($questsubtopics as &$subtopic) : ?>
|
||||
<input id="subtopic-<?=$quest['id']?>-<?=$subtopic['id']?>" type="checkbox" name="questsubtopics[<?=$quest['id']?>][<?=$subtopic['id']?>]" <?php if(in_array($subtopic['id'], $quest['subtopics'])) : ?>checked="checked"<?php endif ?> />
|
||||
<label for="subtopic-<?=$quest['id']?>-<?=$subtopic['id']?>"><?=$subtopic['title']?></label><br />
|
||||
<?php endforeach ?>
|
||||
</li>
|
||||
<?php endforeach ?>
|
||||
</ul>
|
||||
<input type="submit" value="<?=_('Manage')?>" />
|
||||
</form>
|
||||
|
|
@ -8,6 +8,11 @@
|
|||
<li><i class="fa fa-chevron-right fa-fw"></i><a href="<?=$linker->link(array('index',$seminary['url']),1)?>"><?=_('Library')?></a></li>
|
||||
</ul>
|
||||
<h1><i class="fa fa-book fa-fw"></i><?=$questtopic['title']?></h1>
|
||||
<?php if(count(array_intersect(array('admin', 'moderator'), \hhu\z\controllers\SeminaryController::$character['characterroles'])) > 0) : ?>
|
||||
<nav class="admin">
|
||||
<li><a href="<?=$linker->link(array('managetopic',$seminary['url'],$questtopic['url']),1)?>"><?=_('Manage topic')?></a></li>
|
||||
</nav>
|
||||
<?php endif ?>
|
||||
<div class="libindxpr cf">
|
||||
<p><small>Themenfortschritt: <?=$questtopic['characterQuestcount']?> / <?=$questtopic['questcount']?></small></p>
|
||||
<div class="xpbar">
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue