diff --git a/configs/AppConfig.inc b/configs/AppConfig.inc index ba1ec019..d6de6eba 100644 --- a/configs/AppConfig.inc +++ b/configs/AppConfig.inc @@ -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), diff --git a/controllers/CharactersController.inc b/controllers/CharactersController.inc index cdd72c00..13f35bad 100644 --- a/controllers/CharactersController.inc +++ b/controllers/CharactersController.inc @@ -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); + } + + /** diff --git a/locale/de_DE/LC_MESSAGES/The Legend of Z.mo b/locale/de_DE/LC_MESSAGES/The Legend of Z.mo index ed08606f..c6a1e786 100644 Binary files a/locale/de_DE/LC_MESSAGES/The Legend of Z.mo and b/locale/de_DE/LC_MESSAGES/The Legend of Z.mo differ diff --git a/locale/de_DE/LC_MESSAGES/The Legend of Z.po b/locale/de_DE/LC_MESSAGES/The Legend of Z.po index 7041bc19..5e9180a4 100644 --- a/locale/de_DE/LC_MESSAGES/The Legend of Z.po +++ b/locale/de_DE/LC_MESSAGES/The Legend of Z.po @@ -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 "E‑mail address invalid" +msgstr "Die E‑Mail-Adresse ist ungültig" + +#: views/html/users/create.tpl:56 views/html/users/edit.tpl:60 +#: views/html/users/register.tpl:56 +msgid "E‑mail address already exists" +msgstr "E‑Mail-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 "E‑mail address" msgstr "E‑Mail-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 "E‑mail address invalid" -msgstr "Die E‑Mail-Adresse ist ungültig" - -#: views/html/users/register.tpl:54 -msgid "E‑mail address already exists" -msgstr "E‑Mail-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" diff --git a/models/CharactersModel.inc b/models/CharactersModel.inc index 4f6b5d54..8fee0b27 100644 --- a/models/CharactersModel.inc +++ b/models/CharactersModel.inc @@ -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); } } diff --git a/models/SeminarycharacterfieldsModel.inc b/models/SeminarycharacterfieldsModel.inc index e8dff611..1a17706d 100644 --- a/models/SeminarycharacterfieldsModel.inc +++ b/models/SeminarycharacterfieldsModel.inc @@ -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. * diff --git a/views/html/characters/character.tpl b/views/html/characters/character.tpl index 32903bf5..a91d61a2 100644 --- a/views/html/characters/character.tpl +++ b/views/html/characters/character.tpl @@ -14,7 +14,17 @@ +

+ +
diff --git a/views/html/characters/delete.tpl b/views/html/characters/delete.tpl new file mode 100644 index 00000000..0b66be72 --- /dev/null +++ b/views/html/characters/delete.tpl @@ -0,0 +1,19 @@ + +
+ +
+ + + +

+ +
+ + +
diff --git a/views/html/characters/edit.tpl b/views/html/characters/edit.tpl new file mode 100644 index 00000000..cf78fd0d --- /dev/null +++ b/views/html/characters/edit.tpl @@ -0,0 +1,95 @@ + +
+ +
+ + + +

+
+ +
    + &$settings) : ?> +
  • +
      + $value) : ?> +
    • + +
    • + +
    +
  • + +
+ +
+ + + 0) : ?> + /> + + + +
+
    + +
  • + + checked="checked" /> +
  • + +
+
+ + +
    + &$settings) : ?> +
  • + +
+ +
+ + + + + value="" required="required"/> + + + + + +
+ +
+ +
diff --git a/views/html/characters/register.tpl b/views/html/characters/register.tpl index 781fc841..af8148a9 100644 --- a/views/html/characters/register.tpl +++ b/views/html/characters/register.tpl @@ -4,7 +4,8 @@

@@ -29,6 +30,12 @@ default: echo _('Character name invalid'); } break; + case 'type': + switch($setting) { + case 'exist': echo _('Please choose an avatar'); + break; + } + break; } ?>