add page to manage Characters

This commit is contained in:
coderkun 2014-04-23 21:02:30 +02:00
commit a09254b8f2
7 changed files with 216 additions and 21 deletions

View file

@ -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),

View file

@ -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);
}
/**

View file

@ -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"

View file

@ -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
);
}
}
?>

View file

@ -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>

View 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>