From 3b1c03056881a3b2030cfcb89fdcbdcff62306b5 Mon Sep 17 00:00:00 2001 From: coderkun Date: Thu, 1 May 2014 13:10:43 +0200 Subject: [PATCH] implement CRUD for Characters and improve Character registration --- configs/AppConfig.inc | 8 +- controllers/CharactersController.inc | 184 ++++++++- locale/de_DE/LC_MESSAGES/The Legend of Z.mo | Bin 13079 -> 13424 bytes locale/de_DE/LC_MESSAGES/The Legend of Z.po | 405 +++++++++++--------- models/CharactersModel.inc | 86 +++-- models/SeminarycharacterfieldsModel.inc | 50 +++ views/html/characters/character.tpl | 10 + views/html/characters/delete.tpl | 19 + views/html/characters/edit.tpl | 95 +++++ views/html/characters/register.tpl | 9 +- 10 files changed, 637 insertions(+), 229 deletions(-) create mode 100644 views/html/characters/delete.tpl create mode 100644 views/html/characters/edit.tpl 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 ed08606f7816329841c635f91b859d92489977b0..c6a1e7860e7c38cb2b20622c9773854fcba822a5 100644 GIT binary patch delta 4589 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 + '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; } ?>