add page to manage Characters
This commit is contained in:
parent
f10e0bb4d1
commit
a09254b8f2
7 changed files with 216 additions and 21 deletions
|
|
@ -155,7 +155,7 @@
|
|||
array('^([^/]+)/([^/]+)/?$', 'questgropus/questgroup/$1/$2', true),
|
||||
// z/<Seminary>/<Questgroup>/<Quest> ⇒ z/quests/quest/<Seminary>/<Questgroup>/<Quest>
|
||||
array('^([^/]+)/([^/]+)/([^/]+)/?$', 'quests/quest/$1/$2/3', true)*/
|
||||
array('characters/(?!(index|character|register))', 'characters/index/$1', true),
|
||||
array('characters/(?!(index|character|register|manage))', 'characters/index/$1', true),
|
||||
array('charactergroups/(?!(index|groupsgroup|group))', 'charactergroups/index/$1', true),
|
||||
array('charactergroupsquests/(?!(quest))', 'charactergroupsquests/quest/$1', true),
|
||||
array('media/(.*)', 'media/$1?layout=binary', false),
|
||||
|
|
|
|||
|
|
@ -39,7 +39,8 @@
|
|||
public $permissions = array(
|
||||
'index' => array('admin', 'moderator'),
|
||||
'character' => array('admin', 'moderator', 'user'),
|
||||
'register' => array('admin', 'moderator', 'user')
|
||||
'register' => array('admin', 'moderator', 'user'),
|
||||
'manage' => array('admin', 'moderator')
|
||||
);
|
||||
/**
|
||||
* User seminary permissions
|
||||
|
|
@ -48,7 +49,8 @@
|
|||
*/
|
||||
public $seminaryPermissions = array(
|
||||
'index' => array('admin', 'moderator'),
|
||||
'character' => array('admin', 'moderator', 'user')
|
||||
'character' => array('admin', 'moderator', 'user'),
|
||||
'manage' => array('admin', 'moderator')
|
||||
);
|
||||
|
||||
|
||||
|
|
@ -251,6 +253,86 @@
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Action: manage.
|
||||
*
|
||||
* Manage Characters.
|
||||
*
|
||||
* @throws IdNotFoundException
|
||||
* @param string $seminaryUrl URL-Title of a Seminary
|
||||
*/
|
||||
public function manage($seminaryUrl)
|
||||
{
|
||||
// Get seminary
|
||||
$seminary = $this->Seminaries->getSeminaryByUrl($seminaryUrl);
|
||||
|
||||
// Do action
|
||||
if($this->request->getRequestMethod() == 'POST' && !empty($this->request->getPostParam('actions')) && !empty($this->request->getPostParam('characters')))
|
||||
{
|
||||
$actions = $this->request->getPostParam('actions');
|
||||
$action = array_keys($actions)[0];
|
||||
$selectedCharacters = $this->request->getPostParam('characters');
|
||||
|
||||
switch($action)
|
||||
{
|
||||
// Add/remove role to/from Characters
|
||||
case 'addrole':
|
||||
case 'removerole':
|
||||
// Determine role and check permissions
|
||||
$role = null;
|
||||
switch($actions[$action])
|
||||
{
|
||||
case _('Admin'):
|
||||
if(count(array_intersect(array('admin', 'moderator'), \hhu\z\controllers\IntermediateController::$user['roles'])) <= 0 || !in_array('admin', \hhu\z\controllers\SeminaryController::$character['characterroles'])) {
|
||||
throw new \nre\exceptions\AccessDeniedException();
|
||||
}
|
||||
$role = 'admin';
|
||||
break;
|
||||
case _('Moderator'):
|
||||
if(count(array_intersect(array('admin', 'moderator'), \hhu\z\controllers\IntermediateController::$user['roles'])) <= 0 || !in_array('admin', \hhu\z\controllers\SeminaryController::$character['characterroles'])) {
|
||||
throw new \nre\exceptions\AccessDeniedException();
|
||||
}
|
||||
$role = 'moderator';
|
||||
break;
|
||||
case _('User'):
|
||||
if(count(array_intersect(array('admin', 'moderator'), \hhu\z\controllers\IntermediateController::$user['roles'])) <= 0 || count(array_intersect(array('admin', 'moderator'), \hhu\z\controllers\SeminaryController::$character['characterroles'])) <= 0) {
|
||||
throw new \nre\exceptions\AccessDeniedException();
|
||||
}
|
||||
$role = 'user';
|
||||
break;
|
||||
}
|
||||
|
||||
// Add role
|
||||
if($action == 'addrole') {
|
||||
foreach($selectedCharacters as &$characterId) {
|
||||
$this->Characterroles->addCharacterroleToCharacter($characterId, $role);
|
||||
}
|
||||
}
|
||||
// Remove role
|
||||
else {
|
||||
foreach($selectedCharacters as &$characterId) {
|
||||
$this->Characterroles->removeCharacterroleFromCharacter($characterId, $role);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Get registered Characters
|
||||
$characters = $this->Characters->getCharactersForSeminary($seminary['id']);
|
||||
foreach($characters as &$character)
|
||||
{
|
||||
$character['xplevel'] = $this->Characters->getXPLevelOfCharacters($character['id']);
|
||||
$character['characterroles'] = array_map(function($r) { return $r['name']; }, $this->Characterroles->getCharacterrolesForCharacterById($character['id']));
|
||||
}
|
||||
|
||||
|
||||
// Pass data to view
|
||||
$this->set('seminary', $seminary);
|
||||
$this->set('characters', $characters);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -1,8 +1,8 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: The Legend of Z\n"
|
||||
"POT-Creation-Date: 2014-04-23 16:09+0100\n"
|
||||
"PO-Revision-Date: 2014-04-23 16:10+0100\n"
|
||||
"POT-Creation-Date: 2014-04-23 21:00+0100\n"
|
||||
"PO-Revision-Date: 2014-04-23 21:01+0100\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: de_DE\n"
|
||||
|
|
@ -119,8 +119,7 @@ msgstr "ungelöst"
|
|||
msgid "Error"
|
||||
msgstr "Fehler"
|
||||
|
||||
#: views/html/achievements/index.tpl:9 views/html/characters/character.tpl:31
|
||||
#: views/html/seminarymenu/index.tpl:4
|
||||
#: views/html/achievements/index.tpl:9 views/html/seminarymenu/index.tpl:4
|
||||
msgid "Achievements"
|
||||
msgstr "Errungenschaften"
|
||||
|
||||
|
|
@ -169,8 +168,7 @@ msgstr "Platz"
|
|||
msgid "You achieved %d of %d Achievements so far"
|
||||
msgstr "Du hast bislang %d von insgesamt %d Errungenschaften erreicht"
|
||||
|
||||
#: views/html/achievements/index.tpl:59 views/html/characters/character.tpl:39
|
||||
#: views/html/seminarybar/index.tpl:28
|
||||
#: views/html/achievements/index.tpl:59 views/html/seminarybar/index.tpl:28
|
||||
#, php-format
|
||||
msgid "achieved at: %s"
|
||||
msgstr "erhalten am: %s"
|
||||
|
|
@ -186,7 +184,7 @@ msgstr "Spiele weiter, um diesen geheimen Erfolg freizuschalten"
|
|||
#: views/html/charactergroups/group.tpl:8
|
||||
#: views/html/charactergroups/groupsgroup.tpl:8
|
||||
#: views/html/charactergroups/index.tpl:9
|
||||
#: views/html/characters/character.tpl:51 views/html/seminarymenu/index.tpl:3
|
||||
#: views/html/characters/character.tpl:46 views/html/seminarymenu/index.tpl:3
|
||||
msgid "Character Groups"
|
||||
msgstr "Charaktergruppen"
|
||||
|
||||
|
|
@ -198,14 +196,14 @@ msgstr "Mitglieder"
|
|||
msgid "Member"
|
||||
msgstr "Mitglied"
|
||||
|
||||
#: views/html/charactergroups/group.tpl:23
|
||||
#: views/html/characters/character.tpl:7 views/html/characters/index.tpl:7
|
||||
#: views/html/seminarymenu/index.tpl:2 views/html/users/user.tpl:15
|
||||
#: views/html/charactergroups/group.tpl:23 views/html/characters/index.tpl:7
|
||||
#: views/html/characters/manage.tpl:7 views/html/seminarymenu/index.tpl:2
|
||||
#: views/html/users/user.tpl:15
|
||||
msgid "Characters"
|
||||
msgstr "Charaktere"
|
||||
|
||||
#: views/html/charactergroups/group.tpl:38
|
||||
#: views/html/questgroups/questgroup.tpl:53 views/html/quests/create.tpl:7
|
||||
#: views/html/questgroups/questgroup.tpl:57 views/html/quests/create.tpl:7
|
||||
#: views/html/quests/index.tpl:7
|
||||
msgid "Quests"
|
||||
msgstr "Quests"
|
||||
|
|
@ -236,21 +234,49 @@ msgid "Total progress"
|
|||
msgstr "Fortschritt"
|
||||
|
||||
#: views/html/characters/character.tpl:20
|
||||
#: views/html/characters/character.tpl:63
|
||||
#: 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/characters/character.tpl:75 views/html/seminarybar/index.tpl:42
|
||||
#: views/html/users/user.tpl:29
|
||||
msgid "Level"
|
||||
msgstr "Level"
|
||||
|
||||
#: views/html/characters/character.tpl:63
|
||||
#: views/html/characters/character.tpl:57
|
||||
msgid "Ranking"
|
||||
msgstr "Ranking"
|
||||
|
||||
#: views/html/characters/character.tpl:89
|
||||
#: views/html/characters/character.tpl:83
|
||||
msgid "Topic progress"
|
||||
msgstr "Thematischer Fortschritt"
|
||||
|
||||
#: views/html/characters/index.tpl:11 views/html/characters/manage.tpl:8
|
||||
msgid "Manage"
|
||||
msgstr "Verwalten"
|
||||
|
||||
#: views/html/characters/manage.tpl:12
|
||||
msgid "Selection"
|
||||
msgstr "Auswahl"
|
||||
|
||||
#: views/html/characters/manage.tpl:26
|
||||
msgid "Add role"
|
||||
msgstr "Füge Rolle hinzu"
|
||||
|
||||
#: views/html/characters/manage.tpl:28 views/html/characters/manage.tpl:36
|
||||
msgid "Admin"
|
||||
msgstr "Administrator"
|
||||
|
||||
#: views/html/characters/manage.tpl:29 views/html/characters/manage.tpl:37
|
||||
msgid "Moderator"
|
||||
msgstr "Moderator"
|
||||
|
||||
#: views/html/characters/manage.tpl:31 views/html/characters/manage.tpl:39
|
||||
msgid "User"
|
||||
msgstr "Benutzer"
|
||||
|
||||
#: views/html/characters/manage.tpl:34
|
||||
msgid "Remove role"
|
||||
msgstr "Entferne Rolle"
|
||||
|
||||
#: views/html/characters/register.tpl:7
|
||||
msgid "Create Character"
|
||||
msgstr "Charakter erstellen"
|
||||
|
|
@ -713,9 +739,6 @@ msgstr "Rollen"
|
|||
#~ msgid "Group Leader"
|
||||
#~ msgstr "Gruppenleiter"
|
||||
|
||||
#~ msgid "User"
|
||||
#~ msgstr "Benutzer"
|
||||
|
||||
#~ msgid "as"
|
||||
#~ msgstr "als"
|
||||
|
||||
|
|
|
|||
|
|
@ -52,6 +52,49 @@
|
|||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Add a role to a Character.
|
||||
*
|
||||
* @param int $characterId ID of Character to add role to
|
||||
* @param string $characterrole Role to add
|
||||
*/
|
||||
public function addCharacterroleToCharacter($characterId, $characterrole)
|
||||
{
|
||||
$this->db->query(
|
||||
'INSERT IGNORE INTO characters_characterroles '.
|
||||
'(character_id, characterrole_id) '.
|
||||
'SELECT ?, id '.
|
||||
'FROM characterroles '.
|
||||
'WHERE name = ?',
|
||||
'is',
|
||||
$characterId,
|
||||
$characterrole
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Remove a role from a Character.
|
||||
*
|
||||
* @param int $characterId ID of Character to remove role from
|
||||
* @param string $characterrole Role to remove
|
||||
*/
|
||||
public function removeCharacterroleFromCharacter($characterId, $characterrole)
|
||||
{
|
||||
$this->db->query(
|
||||
'DELETE FROM characters_characterroles '.
|
||||
'WHERE character_id = ? AND characterrole_id = ('.
|
||||
'SELECT id '.
|
||||
'FROM characterroles '.
|
||||
'WHERE name = ?'.
|
||||
')',
|
||||
'is',
|
||||
$characterId,
|
||||
$characterrole
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -6,6 +6,12 @@
|
|||
<h1><a href="<?=$linker->link(array('seminaries',$seminary['url']))?>"><?=$seminary['title']?></a></h1>
|
||||
<h2><?=_('Characters')?></h2>
|
||||
|
||||
<?php if(count(array_intersect(array('admin', 'moderator'), \hhu\z\controllers\SeminaryController::$character['characterroles'])) > 0) : ?>
|
||||
<nav class="admin">
|
||||
<li><a href="<?=$linker->link(array('manage',$seminary['url']),1)?>"><?=_('Manage')?></li>
|
||||
</nav>
|
||||
<?php endif ?>
|
||||
|
||||
<ul class="gchars cf">
|
||||
<?php foreach($characters as &$character) : ?>
|
||||
<li>
|
||||
|
|
|
|||
41
views/html/characters/manage.tpl
Normal file
41
views/html/characters/manage.tpl
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
<?php if(!is_null($seminary['seminarymedia_id'])) : ?>
|
||||
<div class="moodpic">
|
||||
<img src="<?=$linker->link(array('media','seminaryheader',$seminary['url']))?>">
|
||||
</div>
|
||||
<?php endif ?>
|
||||
<h1><a href="<?=$linker->link(array('seminaries',$seminary['url']))?>"><?=$seminary['title']?></a></h1>
|
||||
<h2><?=_('Characters')?></h2>
|
||||
<h3><?=_('Manage')?></h3>
|
||||
|
||||
<form method="post">
|
||||
<fieldset>
|
||||
<legend><?=_('Selection')?></legend>
|
||||
<ul class="gchars cf">
|
||||
<?php foreach($characters as &$character) : ?>
|
||||
<li>
|
||||
<input type="checkbox" name="characters[]" value="<?=$character['id']?>" <?php if($character['id'] == \hhu\z\controllers\SeminaryController::$character['id']) : ?>disabled="disabled"<?php endif ?>/>
|
||||
<p><img src="<?=$linker->link(array('media','avatar',$seminary['url'],$character['charactertype_url'],$character['xplevel']['level'],'portrait'))?>"></p>
|
||||
<p><a href="<?=$linker->link(array('characters','character',$seminary['url'],$character['url']))?>"><?=$character['name']?></a></p>
|
||||
<p><small><?=$character['xps']?> XP</small></p>
|
||||
<p><small><?=implode(', ', $character['characterroles'])?></small></p>
|
||||
</li>
|
||||
<?php endforeach ?>
|
||||
</ul>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend><?=_('Add role')?></legend>
|
||||
<?php if(in_array('admin', \hhu\z\controllers\SeminaryController::$character['characterroles'])) : ?>
|
||||
<input type="submit" name="actions[addrole]" value="<?=_('Admin')?>" />
|
||||
<input type="submit" name="actions[addrole]" value="<?=_('Moderator')?>" />
|
||||
<?php endif ?>
|
||||
<input type="submit" name="actions[addrole]" value="<?=_('User')?>" />
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend><?=_('Remove role')?></legend>
|
||||
<?php if(in_array('admin', \hhu\z\controllers\SeminaryController::$character['characterroles'])) : ?>
|
||||
<input type="submit" name="actions[removerole]" value="<?=_('Admin')?>" />
|
||||
<input type="submit" name="actions[removerole]" value="<?=_('Moderator')?>" />
|
||||
<?php endif ?>
|
||||
<input type="submit" name="actions[removerole]" value="<?=_('User')?>" />
|
||||
</fieldset>
|
||||
</form>
|
||||
Loading…
Add table
Add a link
Reference in a new issue