implement CRUD for Characters and improve Character registration

This commit is contained in:
coderkun 2014-05-01 13:10:43 +02:00
commit 3b1c030568
10 changed files with 607 additions and 199 deletions

View file

@ -183,7 +183,8 @@
array('^quests/(?!(index|create|createmedia))/?', 'quests/quest/$1', true),
array('^characters/([^/]+)/(register|manage)/?$', 'characters/$2/$1', true),
array('^characters/([^/]+)/?$', 'characters/index/$1', true),
array('^characters/([^/]+)/(?!(index|create|register|manage))/?', 'characters/character/$1/$2', true),
array('^characters/([^/]+)/([^/]+)/(edit|delete)/?$', 'characters/$3/$1/$2', true),
array('^characters/([^/]+)/(?!(index|register|manage))/?', 'characters/character/$1/$2', true),
array('^charactergroups/([^/]+)/?$', 'charactergroups/index/$1', true),
array('^charactergroups/([^/]+)/(create)/?$', 'charactergroups/creategroupsgroup/$1/$2', true),
array('^charactergroups/([^/]+)/([^/]+)/?$', 'charactergroups/groupsgroup/$1/$2', true),
@ -219,8 +220,9 @@
array('^quests/(create|createmedia)/(.*)$', 'quests/$2/$1' , true),
array('^quests/(submissions)/(.*)$', 'quests/$2/$1', true),
array('^quests/(submission)/([^/]+)/([^/]+)/([^/]+)/([^/]+)$', 'quests/$2/$3/$4/$1/$5', true),
array('^characters/(index|character)/(.*)$', 'characters/$2', true),
array('^characters/(register|manage)/(.*)$', 'characters/$2/$1', true),
array('^characters/(index|character)/(.*)$', 'characters/$2', true),
array('^characters/(register|manage)/([^/]+)$', 'characters/$2/$1', true),
array('^characters/(edit|delete)/([^/]+)/([^/]+)$', 'characters/$2/$3/$1', true),
array('^charactergroups/index/([^/]+)$', 'charactergroups/$1', true),
array('^charactergroups/creategroupsgroup/([^/]+)$', 'charactergroups/$1/create', true),
array('^charactergroups/groupsgroup/([^/]+)/([^/]+)$', 'charactergroups/$1/$2', true),

View file

@ -40,7 +40,9 @@
'index' => array('admin', 'moderator', 'user'),
'character' => array('admin', 'moderator', 'user'),
'register' => array('admin', 'moderator', 'user'),
'manage' => array('admin', 'moderator', 'user')
'manage' => array('admin', 'moderator', 'user'),
'edit' => array('admin', 'moderator', 'user'),
'delete' => array('admin', 'moderator', 'user')
);
/**
* User seminary permissions
@ -50,7 +52,9 @@
public $seminaryPermissions = array(
'index' => array('admin', 'moderator'),
'character' => array('admin', 'moderator', 'user'),
'manage' => array('admin', 'moderator')
'manage' => array('admin', 'moderator'),
'edit' => array('admin', 'moderator', 'user'),
'delete' => array('admin', 'moderator')
);
@ -242,7 +246,7 @@
}
}
if(is_null($typeIndex)) {
throw new \nre\exceptions\ParamsNotValidException($typeIndex);
$validation = $this->Validation->addValidationResult($validation, 'type', 'exist', false);
}
// Validate fields
@ -274,7 +278,7 @@
// Add Seminary fields
foreach($fields as &$field) {
if(!empty($fieldsValues[$field['url']])) {
$this->Characters->setSeminaryFieldOfCharacter($characterId, $field['id'], $fieldsValues[$field['url']]);
$this->Seminarycharacterfield->setSeminaryFieldOfCharacter($field['id'], $characterId, $fieldsValues[$field['url']]);
}
}
@ -426,6 +430,178 @@
}
/**
* Acton: edit.
*
* Edit a new character for a Seminary.
*
* @throws IdNotFoundException
* @throws ParamsNotValidException
* @param string $seminaryUrl URL-Title of a Seminary
* @param string $characterUrl URL-name of a Charater
*/
public function edit($seminaryUrl, $characterUrl)
{
// Get Seminary
$seminary = $this->Seminaries->getSeminaryByUrl($seminaryUrl);
// Get Character
$character = $this->Characters->getCharacterByUrl($seminary['id'], $characterUrl);
// Check permissions
if(count(array_intersect(array('admin','moderator'), \hhu\z\controllers\SeminaryController::$character['characterroles'])) == 0 && $character['id'] != \hhu\z\controllers\SeminaryController::$character['id']) {
throw new \nre\exceptions\AccessDeniedException();
}
// Get User
$user = $this->Users->getUserById($character['user_id']);
// Character types
$types = $this->Charactertypes->getCharacterTypesForSeminary($seminary['id']);
foreach($types as &$type) {
$type['selected'] = ($type['url'] == $character['charactertype_url']);
}
// Character fields
$fields = $this->Seminarycharacterfields->getFieldsForSeminary($seminary['id']);
foreach($fields as &$field)
{
$userValue = $this->Seminarycharacterfields->getSeminaryFieldOfCharacter($field['id'], $character['id']);
if(!empty($userValue)) {
$field['uservalue'] = $userValue['value'];
}
}
// Values
$charactername = $character['name'];
$validation = array();
$fieldsValidation = true;
// Edit Character
if($this->request->getRequestMethod() == 'POST' && !is_null($this->request->getPostParam('edit')))
{
// Validate Character properties
$validation = $this->Validation->validateParams($this->request->getPostParams(), array('charactername'));
$charactername = (count(array_intersect(array('admin','moderator'), \hhu\z\controllers\SeminaryController::$character['characterroles'])) > 0) ? $this->request->getPostParam('charactername') : $character['name'];
if($this->Characters->characterNameExists($charactername, $character['id'])) {
$validation = $this->Validation->addValidationResult($validation, 'charactername', 'exist', true);
}
// Validate type
$typeIndex = null;
foreach($types as $index => &$type)
{
$type['selected'] = ($type['url'] == $this->request->getPostParam('type'));
if($type['selected']) {
$typeIndex = $index;
}
}
if(is_null($typeIndex)) {
$validation = $this->Validation->addValidationResult($validation, 'type', 'exist', false);
}
// Validate fields
$fieldsValues = $this->request->getPostParam('fields');
foreach($fields as &$field)
{
if(!array_key_exists($field['url'], $fieldsValues)) {
throw new \nre\exceptions\ParamsNotValidException($index);
}
$field['uservalue'] = $fieldsValues[$field['url']];
if($field['required'])
{
$fieldValidation = $this->Validation->validate($fieldsValues[$field['url']], array('regex'=>$field['regex']));
if($fieldValidation !== true)
{
if(!is_array($fieldsValidation)) {
$fieldsValidation = array();
}
$fieldsValidation[$field['url']] = $fieldValidation;
}
}
}
// Edit
if($validation === true && $fieldsValidation === true)
{
$this->Characters->editCharacter(
$character['id'],
$types[$typeIndex]['id'],
$charactername
);
// Set Seminary fields
foreach($fields as &$field) {
if(!empty($fieldsValues[$field['url']])) {
$this->Seminarycharacterfields->setSeminaryFieldOfCharacter($field['id'], $character['id'], $fieldsValues[$field['url']]);
}
}
// Redirect
$character = $this->Characters->getCharacterById($character['id']);
$this->redirect($this->linker->link(array('character', $seminary['url'], $character['url']), 1));
}
}
// Get XP-levels
$xplevels = $this->Characters->getXPLevelsForSeminary($seminary['id']);
// Pass data to view
$this->set('seminary', $seminary);
$this->set('types', $types);
$this->set('fields', $fields);
$this->set('charactername', $charactername);
$this->set('validation', $validation);
$this->set('fieldsValidation', $fieldsValidation);
$this->set('xplevels', $xplevels);
}
/**
* Action: delete.
*
* Delete a Character.
*
* @throws IdNotFoundException
* @param string $seminaryUrl URL-Title of a Seminary
* @param string $characterUrl URL-name of a Charater
*/
public function delete($seminaryUrl, $characterUrl)
{
// Get Seminary
$seminary = $this->Seminaries->getSeminaryByUrl($seminaryUrl);
// Get Character
$character = $this->Characters->getCharacterByUrl($seminary['id'], $characterUrl);
// Get User
$user = $this->Users->getUserById($character['user_id']);
// Check request method
if($this->request->getRequestMethod() == 'POST')
{
// Check confirmation
if(!is_null($this->request->getPostParam('delete')))
{
// Delete Character
$this->Characters->deleteCharacter($character['id']);
// Redirect to overview
$this->redirect($this->linker->link(array('index', $seminary['url']), 1));
}
// Redirect to entry
$this->redirect($this->linker->link(array('index', $seminary['url'], $character['url']), 1));
}
// Pass data to view
$this->set('seminary', $seminary);
$this->set('character', $character);
$this->set('user', $user);
}
/**

View file

@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: The Legend of Z\n"
"POT-Creation-Date: 2014-05-01 01:48+0100\n"
"PO-Revision-Date: 2014-05-01 01:48+0100\n"
"POT-Creation-Date: 2014-05-01 13:08+0100\n"
"PO-Revision-Date: 2014-05-01 13:08+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: de_DE\n"
@ -164,7 +164,7 @@ msgstr "Persönlicher Fortschritt: %d%%"
#: views/html/achievements/index.tpl:52
#: views/html/charactergroups/group.tpl:30
#: views/html/charactergroups/managegroup.tpl:23
#: views/html/characters/character.tpl:36 views/html/seminarybar/index.tpl:7
#: views/html/characters/character.tpl:46 views/html/seminarybar/index.tpl:7
msgid "Rank"
msgstr "Platz"
@ -197,7 +197,7 @@ msgstr "Spiele weiter, um diesen geheimen Erfolg freizuschalten"
#: views/html/charactergroupsquests/edit.tpl:8
#: views/html/charactergroupsquests/manage.tpl:8
#: views/html/charactergroupsquests/quest.tpl:8
#: views/html/characters/character.tpl:85 views/html/seminarymenu/index.tpl:3
#: views/html/characters/character.tpl:95 views/html/seminarymenu/index.tpl:3
msgid "Character Groups"
msgstr "Gruppen"
@ -262,7 +262,7 @@ msgstr "Das Motto ist ungültig"
#: views/html/charactergroups/editgroupsgroup.tpl:46
#: views/html/charactergroups/editgroupsgroup.tpl:47
#: views/html/quests/create.tpl:15 views/html/quests/create.tpl:16
#: views/html/users/user.tpl:14
#: views/html/users/user.tpl:23
msgid "Name"
msgstr "Name"
@ -276,8 +276,8 @@ msgstr "Motto"
#: views/html/charactergroups/creategroup.tpl:59
#: views/html/charactergroups/creategroupsgroup.tpl:50
#: views/html/charactergroupsquests/create.tpl:75
#: views/html/characters/register.tpl:87 views/html/seminaries/create.tpl:12
#: views/html/users/create.tpl:20
#: views/html/characters/register.tpl:94 views/html/seminaries/create.tpl:12
#: views/html/users/create.tpl:96
msgid "create"
msgstr "erstellen"
@ -303,14 +303,16 @@ msgstr "Soll die Gruppe „%s“ wirklich gelöscht werden?"
#: views/html/charactergroups/deletegroup.tpl:15
#: views/html/charactergroups/deletegroupsgroup.tpl:14
#: views/html/charactergroupsquests/delete.tpl:15
#: views/html/seminaries/delete.tpl:11 views/html/users/delete.tpl:9
#: views/html/characters/delete.tpl:17 views/html/seminaries/delete.tpl:11
#: views/html/users/delete.tpl:11
msgid "delete"
msgstr "löschen"
#: views/html/charactergroups/deletegroup.tpl:16
#: views/html/charactergroups/deletegroupsgroup.tpl:15
#: views/html/charactergroupsquests/delete.tpl:16
#: views/html/seminaries/delete.tpl:12 views/html/users/delete.tpl:10
#: views/html/characters/delete.tpl:18 views/html/seminaries/delete.tpl:12
#: views/html/users/delete.tpl:12
msgid "cancel"
msgstr "abbrechen"
@ -332,6 +334,7 @@ msgstr "Gruppe bearbeiten"
#: views/html/charactergroups/editgroup.tpl:59
#: views/html/charactergroups/editgroupsgroup.tpl:50
#: views/html/charactergroupsquests/edit.tpl:75
#: views/html/characters/edit.tpl:94
msgid "edit"
msgstr "bearbeiten"
@ -351,10 +354,10 @@ msgstr "Gruppe verwalten"
#: views/html/charactergroupsquests/manage.tpl:36
#: views/html/charactergroupsquests/quest.tpl:29
#: views/html/charactergroupsquests/quest.tpl:62
#: views/html/characters/character.tpl:67
#: views/html/characters/character.tpl:73
#: views/html/characters/character.tpl:79
#: views/html/characters/character.tpl:97 views/html/quests/index.tpl:37
#: views/html/characters/character.tpl:77
#: views/html/characters/character.tpl:83
#: views/html/characters/character.tpl:89
#: views/html/characters/character.tpl:107 views/html/quests/index.tpl:37
#: views/html/seminaries/index.tpl:29 views/html/seminarybar/index.tpl:6
#: views/html/seminarybar/index.tpl:42
#, php-format
@ -374,9 +377,10 @@ msgstr "Mitglied"
#: views/html/charactergroups/group.tpl:36
#: views/html/charactergroups/managegroup.tpl:29
#: views/html/characters/character.tpl:11
#: views/html/characters/character.tpl:13 views/html/characters/index.tpl:9
#: views/html/characters/manage.tpl:8 views/html/seminarymenu/index.tpl:2
#: views/html/users/user.tpl:18
#: views/html/characters/character.tpl:13 views/html/characters/delete.tpl:10
#: views/html/characters/edit.tpl:8 views/html/characters/index.tpl:9
#: views/html/characters/manage.tpl:8 views/html/characters/register.tpl:8
#: views/html/seminarymenu/index.tpl:2 views/html/users/user.tpl:27
msgid "Characters"
msgstr "Charaktere"
@ -559,43 +563,93 @@ msgstr "Gewonnene Quest"
msgid "Lost Quest"
msgstr "Verlorene Quest"
#: views/html/characters/character.tpl:24
#: views/html/characters/character.tpl:21 views/html/characters/edit.tpl:11
msgid "Edit Character"
msgstr "Charakter bearbeiten"
#: views/html/characters/character.tpl:24 views/html/characters/delete.tpl:14
msgid "Delete Character"
msgstr "Charakter löschen"
#: views/html/characters/character.tpl:34
msgid "Total progress"
msgstr "Fortschritt"
#: views/html/characters/character.tpl:28
#: views/html/characters/character.tpl:67
#: views/html/characters/character.tpl:73
#: views/html/characters/character.tpl:79 views/html/seminarybar/index.tpl:42
#: views/html/users/user.tpl:32
#: views/html/characters/character.tpl:38
#: views/html/characters/character.tpl:77
#: views/html/characters/character.tpl:83
#: views/html/characters/character.tpl:89 views/html/seminarybar/index.tpl:42
#: views/html/users/user.tpl:41
msgid "Level"
msgstr "Level"
#: views/html/characters/character.tpl:38
#: views/html/characters/character.tpl:48
msgid "Milestones"
msgstr "Meilensteine"
#: views/html/characters/character.tpl:61
#: views/html/characters/character.tpl:71
msgid "Ranking"
msgstr "Ranking"
#: views/html/characters/character.tpl:106 views/html/seminarybar/index.tpl:14
#: views/html/characters/character.tpl:116 views/html/seminarybar/index.tpl:14
msgid "Last Quest"
msgstr "Letzter Speicherpunkt"
#: views/html/characters/character.tpl:112
#: views/html/characters/character.tpl:122
msgid "Topic progress"
msgstr "Thematischer Fortschritt"
#: views/html/characters/delete.tpl:15
#, php-format
msgid "Should the Character “%s” of user “%s” (%s) really be deleted?"
msgstr "Soll der Charakter „%s“ von Benutzer %s (%s) wirklich gelöscht werden?"
#: views/html/characters/edit.tpl:23 views/html/characters/register.tpl:22
#, php-format
msgid "Character name is too short (min. %d chars)"
msgstr "Der Charaktername ist zu kurz (min. %d Zeichen)"
#: views/html/characters/edit.tpl:25 views/html/characters/register.tpl:24
#, php-format
msgid "Character name is too long (max. %d chars)"
msgstr "Der Charaktername ist zu lang (max. %d Zeichen)"
#: views/html/characters/edit.tpl:27 views/html/characters/register.tpl:26
msgid "Character name contains illegal characters"
msgstr "Der Charaktername enthält ungültige Zeichen"
#: views/html/characters/edit.tpl:29 views/html/characters/register.tpl:28
msgid "Character name already exists"
msgstr "Der Charaktername existiert bereits"
#: views/html/characters/edit.tpl:31 views/html/characters/register.tpl:30
msgid "Character name invalid"
msgstr "Der Charaktername ist ungültig"
#: views/html/characters/edit.tpl:43 views/html/characters/register.tpl:48
msgid "Character properties"
msgstr "Charaktereigenschaften"
#: views/html/characters/edit.tpl:44 views/html/characters/edit.tpl:46
#: views/html/characters/edit.tpl:48 views/html/characters/index.tpl:21
#: views/html/characters/manage.tpl:16 views/html/characters/register.tpl:49
#: views/html/characters/register.tpl:50
msgid "Character name"
msgstr "Charaktername"
#: views/html/characters/edit.tpl:67 views/html/characters/register.tpl:67
#, php-format
msgid "The Seminary field “%s” is invalid"
msgstr "Das Kursfeld „%s“ ist ungültig"
#: views/html/characters/edit.tpl:72 views/html/characters/register.tpl:72
msgid "Seminary fields"
msgstr "Kursfelder"
#: views/html/characters/index.tpl:13 views/html/characters/manage.tpl:10
msgid "Manage"
msgstr "Verwalten"
#: views/html/characters/index.tpl:21 views/html/characters/manage.tpl:16
#: views/html/characters/register.tpl:42 views/html/characters/register.tpl:43
msgid "Character name"
msgstr "Charaktername"
#: views/html/characters/index.tpl:23 views/html/characters/manage.tpl:18
msgid "Role"
msgstr "Rolle"
@ -627,44 +681,13 @@ msgstr "Füge Rolle hinzu"
msgid "Remove role"
msgstr "Entferne Rolle"
#: views/html/characters/register.tpl:9
#: views/html/characters/register.tpl:10
msgid "Create Character"
msgstr "Charakter erstellen"
#: views/html/characters/register.tpl:21
#, php-format
msgid "Character name is too short (min. %d chars)"
msgstr "Der Charaktername ist zu kurz (min. %d Zeichen)"
#: views/html/characters/register.tpl:23
#, php-format
msgid "Character name is too long (max. %d chars)"
msgstr "Der Charaktername ist zu lang (max. %d Zeichen)"
#: views/html/characters/register.tpl:25
msgid "Character name contains illegal characters"
msgstr "Der Charaktername enthält ungültige Zeichen"
#: views/html/characters/register.tpl:27
msgid "Character name already exists"
msgstr "Der Charaktername existiert bereits"
#: views/html/characters/register.tpl:29
msgid "Character name invalid"
msgstr "Der Charaktername ist ungültig"
#: views/html/characters/register.tpl:41
msgid "Character properties"
msgstr "Charaktereigenschaften"
#: views/html/characters/register.tpl:60
#, php-format
msgid "The Seminary field “%s” is invalid"
msgstr "Das Kursfeld „%s“ ist ungültig"
#: views/html/characters/register.tpl:65
msgid "Seminary fields"
msgstr "Kursfelder"
#: views/html/characters/register.tpl:35
msgid "Please choose an avatar"
msgstr "Bitte wähle einen Avatar aus"
#: views/html/error/index.tpl:5 views/html/error/index.tpl:14
#: views/html/introduction/index.tpl:9 views/html/menu/index.tpl:6
@ -673,20 +696,20 @@ msgid "Login"
msgstr "Login"
#: views/html/error/index.tpl:8 views/html/error/index.tpl:9
#: views/html/introduction/index.tpl:7 views/html/users/create.tpl:9
#: views/html/users/create.tpl:10 views/html/users/edit.tpl:9
#: views/html/users/edit.tpl:10 views/html/users/login.tpl:12
#: views/html/users/login.tpl:13 views/html/users/register.tpl:81
#: views/html/users/register.tpl:82
#: views/html/introduction/index.tpl:7 views/html/users/create.tpl:84
#: views/html/users/create.tpl:85 views/html/users/edit.tpl:87
#: views/html/users/edit.tpl:89 views/html/users/edit.tpl:91
#: views/html/users/login.tpl:12 views/html/users/login.tpl:13
#: views/html/users/register.tpl:83 views/html/users/register.tpl:84
msgid "Username"
msgstr "Benutzername"
#: views/html/error/index.tpl:10 views/html/error/index.tpl:11
#: views/html/introduction/index.tpl:8 views/html/users/create.tpl:17
#: views/html/users/create.tpl:18 views/html/users/edit.tpl:16
#: views/html/users/edit.tpl:17 views/html/users/login.tpl:14
#: views/html/users/login.tpl:15 views/html/users/register.tpl:89
#: views/html/users/register.tpl:90
#: views/html/introduction/index.tpl:8 views/html/users/create.tpl:92
#: views/html/users/create.tpl:93 views/html/users/edit.tpl:100
#: views/html/users/edit.tpl:101 views/html/users/login.tpl:14
#: views/html/users/login.tpl:15 views/html/users/register.tpl:91
#: views/html/users/register.tpl:92
msgid "Password"
msgstr "Passwort"
@ -734,10 +757,11 @@ msgstr ""
msgid "Total progress: %d%%"
msgstr "Gesamtfortschritt: %d%%"
#: views/html/menu/index.tpl:2 views/html/users/create.tpl:4
#: views/html/users/delete.tpl:4 views/html/users/edit.tpl:4
#: views/html/users/index.tpl:4 views/html/users/login.tpl:4
#: views/html/users/register.tpl:4 views/html/users/user.tpl:4
#: 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
#: views/html/users/login.tpl:4 views/html/users/register.tpl:5
#: views/html/users/user.tpl:6 views/html/users/user.tpl:8
msgid "Users"
msgstr "Benutzer"
@ -859,7 +883,7 @@ msgstr "Soll der Kurs „%s“ wirklich gelöscht werden?"
msgid "Edit seminary"
msgstr "Kurs bearbeiten"
#: views/html/seminaries/edit.tpl:14 views/html/users/edit.tpl:19
#: views/html/seminaries/edit.tpl:14 views/html/users/edit.tpl:103
msgid "save"
msgstr "speichern"
@ -894,39 +918,140 @@ msgstr "Letztes Achievement"
msgid "Show %s-Profile"
msgstr "%s-Profil anzeigen"
#: views/html/users/create.tpl:5
#: views/html/users/create.tpl:8
msgid "New user"
msgstr "Neuer Benutzer"
#: views/html/users/create.tpl:11 views/html/users/create.tpl:12
#: views/html/users/edit.tpl:11 views/html/users/register.tpl:83
#: views/html/users/register.tpl:84
#: views/html/users/create.tpl:19 views/html/users/edit.tpl:23
#: views/html/users/register.tpl:19
#, php-format
msgid "Username is too short (min. %d chars)"
msgstr "Der Benutzername ist zu kurz (min. %d Zeichen)"
#: views/html/users/create.tpl:21 views/html/users/edit.tpl:25
#: views/html/users/register.tpl:21
#, php-format
msgid "Username is too long (max. %d chars)"
msgstr "Der Benutzername ist zu lang (max. %d Zeichen)"
#: views/html/users/create.tpl:23 views/html/users/edit.tpl:27
#: views/html/users/register.tpl:23
msgid "Username contains illegal characters"
msgstr "Der Benutzername enthält ungültige Zeichen"
#: views/html/users/create.tpl:25 views/html/users/edit.tpl:29
#: views/html/users/register.tpl:25
msgid "Username already exists"
msgstr "Der Benutzername existiert bereits"
#: views/html/users/create.tpl:27 views/html/users/edit.tpl:31
#: views/html/users/register.tpl:27
msgid "Username invalid"
msgstr "Der Benutzername ist ungültig"
#: views/html/users/create.tpl:32 views/html/users/edit.tpl:36
#: views/html/users/register.tpl:32
#, php-format
msgid "Prename is too short (min. %d chars)"
msgstr "Der Vorname ist zu kurz (min. %d Zeichen)"
#: views/html/users/create.tpl:34 views/html/users/edit.tpl:38
#: views/html/users/register.tpl:34
#, php-format
msgid "Prename is too long (max. %d chars)"
msgstr "Der Vorname ist zu lang (max. %d Zeichen)"
#: views/html/users/create.tpl:36 views/html/users/edit.tpl:40
#: views/html/users/register.tpl:36
#, php-format
msgid "Prename contains illegal characters"
msgstr "Der Vorname enthält ungültige Zeichen"
#: views/html/users/create.tpl:38 views/html/users/edit.tpl:42
#: views/html/users/register.tpl:38
msgid "Prename invalid"
msgstr "Der Vorname ist ungültig"
#: views/html/users/create.tpl:43 views/html/users/edit.tpl:47
#: views/html/users/register.tpl:43
#, php-format
msgid "Surname is too short (min. %d chars)"
msgstr "Der Nachname ist zu kurz (min. %d Zeichen)"
#: views/html/users/create.tpl:45 views/html/users/edit.tpl:49
#: views/html/users/register.tpl:45
#, php-format
msgid "Surname is too long (max. %d chars)"
msgstr "Der Nachname ist zu lang (max. %d Zeichen)"
#: views/html/users/create.tpl:47 views/html/users/edit.tpl:51
#: views/html/users/register.tpl:47
#, php-format
msgid "Surname contains illegal characters"
msgstr "Der Nachname enthält ungültige Zeichen"
#: views/html/users/create.tpl:49 views/html/users/edit.tpl:53
#: views/html/users/register.tpl:49
msgid "Surname invalid"
msgstr "Der Nachname ist ungültig"
#: views/html/users/create.tpl:54 views/html/users/create.tpl:58
#: views/html/users/edit.tpl:58 views/html/users/edit.tpl:62
#: views/html/users/register.tpl:54 views/html/users/register.tpl:58
msgid "Email address invalid"
msgstr "Die EMail-Adresse ist ungültig"
#: views/html/users/create.tpl:56 views/html/users/edit.tpl:60
#: views/html/users/register.tpl:56
msgid "Email address already exists"
msgstr "EMail-Adresse existiert bereits"
#: views/html/users/create.tpl:63 views/html/users/edit.tpl:67
#: views/html/users/register.tpl:63
#, php-format
msgid "Password is too short (min. %d chars)"
msgstr "Das Passwort ist zu kurz (min. %d Zeichen)"
#: views/html/users/create.tpl:65 views/html/users/edit.tpl:69
#: views/html/users/register.tpl:65
#, php-format
msgid "Password is too long (max. %d chars)"
msgstr "Das Passwort ist zu lang (max. %d Zeichen)"
#: views/html/users/create.tpl:67 views/html/users/edit.tpl:71
#: views/html/users/register.tpl:67
msgid "Password invalid"
msgstr "Das Passwort ist ungültig"
#: views/html/users/create.tpl:86 views/html/users/create.tpl:87
#: views/html/users/edit.tpl:94 views/html/users/edit.tpl:95
#: views/html/users/register.tpl:85 views/html/users/register.tpl:86
msgid "Prename"
msgstr "Vorname"
#: views/html/users/create.tpl:13 views/html/users/create.tpl:14
#: views/html/users/edit.tpl:12 views/html/users/edit.tpl:13
#: views/html/users/register.tpl:85 views/html/users/register.tpl:86
#: views/html/users/create.tpl:88 views/html/users/create.tpl:89
#: views/html/users/edit.tpl:96 views/html/users/edit.tpl:97
#: views/html/users/register.tpl:87 views/html/users/register.tpl:88
msgid "Surname"
msgstr "Nachname"
#: views/html/users/create.tpl:15 views/html/users/create.tpl:16
#: views/html/users/edit.tpl:14 views/html/users/edit.tpl:15
#: views/html/users/register.tpl:87 views/html/users/register.tpl:88
#: views/html/users/user.tpl:15
#: views/html/users/create.tpl:90 views/html/users/create.tpl:91
#: views/html/users/edit.tpl:98 views/html/users/edit.tpl:99
#: views/html/users/register.tpl:89 views/html/users/register.tpl:90
#: views/html/users/user.tpl:24
msgid "Email address"
msgstr "EMail-Adresse"
#: views/html/users/delete.tpl:5 views/html/users/user.tpl:8
#: views/html/users/delete.tpl:8 views/html/users/user.tpl:18
msgid "Delete user"
msgstr "Benutzer löschen"
#: views/html/users/delete.tpl:7
#: views/html/users/delete.tpl:9
#, php-format
msgid "Should the user “%s” (%s) really be deleted?"
msgstr "Soll der Benutzer „%s“ (%s) wirklich gelöscht werden?"
#: views/html/users/edit.tpl:5 views/html/users/user.tpl:7
#: views/html/users/edit.tpl:12 views/html/users/user.tpl:15
msgid "Edit user"
msgstr "Benutzer bearbeiten"
@ -934,7 +1059,7 @@ msgstr "Benutzer bearbeiten"
msgid "Create new user"
msgstr "Neuen Benutzer erstellen"
#: views/html/users/index.tpl:10 views/html/users/user.tpl:13
#: views/html/users/index.tpl:10 views/html/users/user.tpl:22
#, php-format
msgid "registered on %s"
msgstr "registriert am %s"
@ -943,97 +1068,15 @@ msgstr "registriert am %s"
msgid "Login failed"
msgstr "Die Anmeldung war nicht korrekt"
#: views/html/users/register.tpl:6
#: views/html/users/register.tpl:8
msgid "Registration"
msgstr "Registrierung"
#: views/html/users/register.tpl:17
#, php-format
msgid "Username is too short (min. %d chars)"
msgstr "Der Benutzername ist zu kurz (min. %d Zeichen)"
#: views/html/users/register.tpl:19
#, php-format
msgid "Username is too long (max. %d chars)"
msgstr "Der Benutzername ist zu lang (max. %d Zeichen)"
#: views/html/users/register.tpl:21
msgid "Username contains illegal characters"
msgstr "Der Benutzername enthält ungültige Zeichen"
#: views/html/users/register.tpl:23
msgid "Username already exists"
msgstr "Der Benutzername existiert bereits"
#: views/html/users/register.tpl:25
msgid "Username invalid"
msgstr "Der Benutzername ist ungültig"
#: views/html/users/register.tpl:30
#, php-format
msgid "Prename is too short (min. %d chars)"
msgstr "Der Vorname ist zu kurz (min. %d Zeichen)"
#: views/html/users/register.tpl:32
#, php-format
msgid "Prename is too long (max. %d chars)"
msgstr "Der Vorname ist zu lang (max. %d Zeichen)"
#: views/html/users/register.tpl:34
#, php-format
msgid "Prename contains illegal characters"
msgstr "Der Vorname enthält ungültige Zeichen"
#: views/html/users/register.tpl:36
msgid "Prename invalid"
msgstr "Der Vorname ist ungültig"
#: views/html/users/register.tpl:41
#, php-format
msgid "Surname is too short (min. %d chars)"
msgstr "Der Nachname ist zu kurz (min. %d Zeichen)"
#: views/html/users/register.tpl:43
#, php-format
msgid "Surname is too long (max. %d chars)"
msgstr "Der Nachname ist zu lang (max. %d Zeichen)"
#: views/html/users/register.tpl:45
#, php-format
msgid "Surname contains illegal characters"
msgstr "Der Nachname enthält ungültige Zeichen"
#: views/html/users/register.tpl:47
msgid "Surname invalid"
msgstr "Der Nachname ist ungültig"
#: views/html/users/register.tpl:52 views/html/users/register.tpl:56
msgid "Email address invalid"
msgstr "Die EMail-Adresse ist ungültig"
#: views/html/users/register.tpl:54
msgid "Email address already exists"
msgstr "EMail-Adresse existiert bereits"
#: views/html/users/register.tpl:61
#, php-format
msgid "Password is too short (min. %d chars)"
msgstr "Das Passwort ist zu kurz (min. %d Zeichen)"
#: views/html/users/register.tpl:63
#, php-format
msgid "Password is too long (max. %d chars)"
msgstr "Das Passwort ist zu lang (max. %d Zeichen)"
#: views/html/users/register.tpl:65
msgid "Password invalid"
msgstr "Das Passwort ist ungültig"
#: views/html/users/register.tpl:92
#: views/html/users/register.tpl:94
msgid "Register"
msgstr "Registrieren"
#: views/html/users/user.tpl:37
#: views/html/users/user.tpl:46
msgid "Roles"
msgstr "Rollen"

View file

@ -424,28 +424,49 @@
}
/**
* Get Characters with the given Character role.
*
* @param int $seminaryId ID of Seminary
* @param string $characterrole Character role
* @return array List of users
*/
public function getCharactersWithCharacterRole($seminaryId, $characterrole)
{
return $this->db->query(
'SELECT characters.id, characters.created, characters.charactertype_id, characters.name, characters.url, characters.user_id, characters.xps, characters.xplevel, characters.avatar_id, charactertypes.name AS charactertype_name, charactertypes.url AS charactertype_url, seminaries.id AS seminary_url, seminaries.title AS seminary_title, seminaries.url AS seminary_url '.
'FROM v_characters AS characters '.
'LEFT JOIN charactertypes ON charactertypes.id = characters.charactertype_id '.
'LEFT JOIN seminaries ON seminaries.id = charactertypes.seminary_id '.
'LEFT JOIN characters_characterroles ON characters_characterroles.character_id = characters.id '.
'LEFT JOIN characterroles ON characterroles.id = characters_characterroles.characterrole_id '.
'WHERE seminaries.id = ? AND characterroles.name = ?',
'is',
$seminaryId, $characterrole
);
}
/**
* Check if a Character name already exists.
*
* @param string $name Character name to check
* @return boolean Whether Character name exists or not
* @param string $name Character name to check
* @param int $characterId Do not check this ID (for editing)
* @return boolean Whether Character name exists or not
*/
public function characterNameExists($name)
public function characterNameExists($name, $characterId=null)
{
$data = $this->db->query(
'SELECT count(id) AS c '.
'SELECT id '.
'FROM characters '.
'WHERE name = ? OR url = ?',
'ss',
$name,
\nre\core\Linker::createLinkParam($name)
);
if(!empty($data)) {
return ($data[0]['c'] > 0);
}
return false;
return (!empty($data) && (is_null($characterId) || $characterId != $data[0]['id']));
}
@ -477,50 +498,35 @@
/**
* Set the value of a Seminary field for a Character.
* Edit a new Character.
*
* @param int $characterId ID of Character
* @param int $seminarycharacterfieldId ID of seminarycharacterfield to set value of
* @param string $value Value to set
* @param int $characterId ID of the Character to edit
* @param int $charactertypeId ID of new type of Character
* @param string $characterName New name for Character
*/
public function setSeminaryFieldOfCharacter($characterId, $seminarycharacterfieldId, $value)
public function editCharacter($characterId, $charactertypeId, $characterName)
{
$this->db->query(
'INSERT INTO characters_seminarycharacterfields '.
'(character_id, seminarycharacterfield_id, value) '.
'VALUES '.
'(?, ?, ?) '.
'ON DUPLICATE KEY UPDATE '.
'value = ?',
'iiss',
$characterId,
$seminarycharacterfieldId,
$value,
$value
'UPDATE characters '.
'SET charactertype_id = ?, name = ?, url = ? '.
'WHERE id = ?',
'issi',
$charactertypeId,
$characterName,
\nre\core\Linker::createLinkParam($characterName),
$characterId
);
}
/**
* Get Characters with the given Character role.
* Delete a Character.
*
* @param int $seminaryId ID of Seminary
* @param string $characterrole Character role
* @return array List of users
* @param int $characterId ID of the Character to delete
*/
public function getCharactersWithCharacterRole($seminaryId, $characterrole)
public function deleteCharacter($characterId)
{
return $this->db->query(
'SELECT characters.id, characters.created, characters.charactertype_id, characters.name, characters.url, characters.user_id, characters.xps, characters.xplevel, characters.avatar_id, charactertypes.name AS charactertype_name, charactertypes.url AS charactertype_url, seminaries.id AS seminary_url, seminaries.title AS seminary_title, seminaries.url AS seminary_url '.
'FROM v_characters AS characters '.
'LEFT JOIN charactertypes ON charactertypes.id = characters.charactertype_id '.
'LEFT JOIN seminaries ON seminaries.id = charactertypes.seminary_id '.
'LEFT JOIN characters_characterroles ON characters_characterroles.character_id = characters.id '.
'LEFT JOIN characterroles ON characterroles.id = characters_characterroles.characterrole_id '.
'WHERE seminaries.id = ? AND characterroles.name = ?',
'is',
$seminaryId, $characterrole
);
$this->db->query('DELETE FROM characters WHERE id = ?', 'i', $characterId);
}
}

View file

@ -54,6 +54,56 @@
}
/**
* Set the value of a Seminary field for a Character.
*
* @param int $characterId ID of Character
* @param int $seminarycharacterfieldId ID of seminarycharacterfield to set value of
* @param string $value Value to set
*/
public function setSeminaryFieldOfCharacter($seminarycharacterfieldId, $characterId, $value)
{
$this->db->query(
'INSERT INTO characters_seminarycharacterfields '.
'(character_id, seminarycharacterfield_id, value) '.
'VALUES '.
'(?, ?, ?) '.
'ON DUPLICATE KEY UPDATE '.
'value = ?',
'iiss',
$characterId,
$seminarycharacterfieldId,
$value,
$value
);
}
/**
* Get Seminary Character fields of a Character.
*
* @param int $characterId ID of the Character
* @return array Seminary Character fields
*/
public function getSeminaryFieldOfCharacter($fieldId, $characterId)
{
$data = $this->db->query(
'SELECT created, value '.
'FROM characters_seminarycharacterfields '.
'WHERE seminarycharacterfield_id = ? AND character_id = ?',
'ii',
$fieldId,
$characterId
);
if(!empty($data)) {
return $data[0];
}
return null;
}
/**
* Get Seminary Character fields of a Character.
*

View file

@ -14,7 +14,17 @@
<?php endif ?>
</li>
</ul>
<h1><i class="fa fa-user fa-fw"></i><?=$character['name']?></h1>
<nav class="admin">
<?php if(count(array_intersect(array('admin','moderator'), \hhu\z\controllers\SeminaryController::$character['characterroles'])) > 0 || $character['id'] == \hhu\z\controllers\SeminaryController::$character['id']) : ?>
<li><a href="<?=$linker->link(array('edit',$seminary['url'],$character['url']),1)?>"><?=_('Edit Character')?></a></li>
<?php endif ?>
<?php if(count(array_intersect(array('admin', 'moderator'), \hhu\z\controllers\SeminaryController::$character['characterroles'])) > 0) : ?>
<li><a href="<?=$linker->link(array('delete',$seminary['url'],$character['url']),1)?>"><?=_('Delete Character')?></a></li>
<?php endif ?>
</nav>
<section class="cf">
<div class="cinfo">
<div class="cdata">

View file

@ -0,0 +1,19 @@
<?php if(!is_null($seminary['seminarymedia_id'])) : ?>
<div class="moodpic">
<img src="<?=$linker->link(array('media','seminarymoodpic',$seminary['url']))?>">
</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('characters','index',$seminary['url']))?>"><?=_('Characters')?></a>
</li>
</ul>
<h1><?=_('Delete Character')?></h1>
<?=sprintf(_('Should the Character “%s” of user “%s” (%s) really be deleted?'), $character['name'], $user['username'], $user['email'])?>
<form method="post">
<input type="submit" name="delete" value="<?=_('delete')?>" />
<input type="submit" name="not-delete" value="<?=_('cancel')?>" />
</form>

View file

@ -0,0 +1,95 @@
<?php if(!is_null($seminary['seminarymedia_id'])) : ?>
<div class="moodpic">
<img src="<?=$linker->link(array('media','seminarymoodpic',$seminary['url']))?>">
</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('characters','index',$seminary['url']))?>"><?=_('Characters')?></a></li>
</ul>
<h1><?=_('Edit Character')?></h1>
<form method="post" action="" class="logreg">
<?php if($validation !== true) : ?>
<ul>
<?php foreach($validation as $field => &$settings) : ?>
<li>
<ul>
<?php foreach($settings as $setting => $value) : ?>
<li>
<?php switch($field) {
case 'charactername':
switch($setting) {
case 'minlength': printf(_('Character name is too short (min. %d chars)'), $value);
break;
case 'maxlength': printf(_('Character name is too long (max. %d chars)'), $value);
break;
case 'regex': echo _('Character name contains illegal characters');
break;
case 'exist': echo _('Character name already exists');
break;
default: echo _('Character name invalid');
}
break;
} ?>
</li>
<?php endforeach ?>
</ul>
</li>
<?php endforeach ?>
</ul>
<?php endif ?>
<fieldset>
<legend class="fwb"><?=_('Character properties')?></legend>
<label for="charactername"><?=_('Character name')?>:</label>
<?php if(count(array_intersect(array('admin','moderator'), \hhu\z\controllers\SeminaryController::$character['characterroles'])) > 0) : ?>
<input type="text" name="charactername" placeholder="<?=_('Character name')?>" required="required" value="<?=$charactername?>" maxlength="<?=$validationSettings['charactername']['maxlength']?>" <?=(array_key_exists('charactername', $validation)) ? 'class="invalid"' : null ?>/>
<?php else : ?>
<input type="text" name="charactername" placeholder="<?=_('Character name')?>" disabled="disabled" value="<?=$charactername?>" />
<input type="hidden" name="charactername" value="<?=$charactername?>" />
<?php endif ?><br />
<ul class="avatar">
<?php foreach($types as &$type) : ?>
<li>
<label for="type-<?=$type['id']?>">
<p><?=$type['name']?></p>
<img id="avatar" src="<?=$linker->link(array('media','avatar',$seminary['url'],$type['url'],$xplevels[0]['level'],'portrait'))?>" />
</label>
<input id="type-<?=$type['id']?>" name="type" type="radio" value="<?=$type['url']?>" <?php if(array_key_exists('selected', $type) && $type['selected']) : ?>checked="checked"<?php endif ?> />
</li>
<?php endforeach ?>
</ul>
</fieldset>
<?php if($fieldsValidation !== true) : ?>
<ul>
<?php foreach($fieldsValidation as $field => &$settings) : ?>
<li><?=sprintf(_('The Seminary field “%s” is invalid'), $field)?></li>
<?php endforeach ?>
</ul>
<?php endif ?>
<fieldset>
<legend class="fwb"><?=_('Seminary fields')?></legend>
<?php foreach($fields as &$field) : ?>
<label for="fields[<?=$field['url']?>]"><?=$field['title']?>:</label>
<?php switch($field['type_title']) {
case 'Number':
case 'Varchar': ?>
<input type="text" name="fields[<?=$field['url']?>]" pattern="<?=(!empty($field['regex'])) ? substr($field['regex'],1,strrpos($field['regex'],$field['regex'][0])-1) : ''?>" <?php if(array_key_exists('uservalue', $field)) : ?>value="<?=$field['uservalue']?>"<?php endif ?> <?php if($field['required']) : ?>required="required"<?php endif ?>/>
<?php break;
case 'Text': ?>
<textarea name="fields[<?=$field['url']?>]"><?=(array_key_exists('uservalue', $field) ? $field['uservalue'] : null)?></textarea>
<?php break;
case 'List': ?>
<select name="fields[<?=$field['url']?>]">
<?php foreach(explode('|', substr($field['regex'],1,strrpos($field['regex'],$field['regex'][0])-1)) as $option) : ?>
<option value="<?=mb_eregi_replace('\\\\','',$option)?>" <?php if(array_key_exists('uservalue', $field) && $field['uservalue'] == mb_eregi_replace('\\\\','',$option)) : ?>selected="selected"<?php endif ?>><?=mb_eregi_replace('\\\\','',$option)?></option>
<?php endforeach?>
</select>
<?php break;
} ?>
<br />
<?php endforeach ?>
</fieldset>
<input type="submit" name="edit" value="<?=_('edit')?>" />
</form>

View file

@ -4,7 +4,8 @@
</div>
<?php endif ?>
<ul class="breadcrumbs">
<li><a href="<?=$linker->link(array('seminaries',$seminary['url']))?>"><?=$seminary['title']?></a></li>
<li><?=$seminary['title']?></li>
<li><i class="fa fa-chevron-right fa-fw"></i><?=_('Characters')?></li>
</ul>
<h1><?=_('Create Character')?></h1>
<form method="post" action="" class="logreg">
@ -29,6 +30,12 @@
default: echo _('Character name invalid');
}
break;
case 'type':
switch($setting) {
case 'exist': echo _('Please choose an avatar');
break;
}
break;
} ?>
</li>
<?php endforeach ?>