From 591ce2690bcb3283b894df1dc76417dd9e28b9b1 Mon Sep 17 00:00:00 2001 From: coderkun Date: Wed, 9 Jul 2014 13:02:54 +0200 Subject: [PATCH] implement CRUD for XP-levels --- agents/intermediate/XplevelsAgent.inc | 35 ++++ configs/AppConfig.inc | 8 + controllers/XplevelsController.inc | 188 ++++++++++++++++++++ locale/de_DE/LC_MESSAGES/The Legend of Z.mo | Bin 22065 -> 22187 bytes locale/de_DE/LC_MESSAGES/The Legend of Z.po | 35 +++- models/XplevelsModel.inc | 137 ++++++++++++++ views/html/seminaries/seminary.tpl | 4 +- views/html/xplevels/manage.tpl | 84 +++++++++ 8 files changed, 480 insertions(+), 11 deletions(-) create mode 100644 agents/intermediate/XplevelsAgent.inc create mode 100644 controllers/XplevelsController.inc create mode 100644 views/html/xplevels/manage.tpl diff --git a/agents/intermediate/XplevelsAgent.inc b/agents/intermediate/XplevelsAgent.inc new file mode 100644 index 00000000..087cbade --- /dev/null +++ b/agents/intermediate/XplevelsAgent.inc @@ -0,0 +1,35 @@ + + * @copyright 2014 Heinrich-Heine-Universität Düsseldorf + * @license http://www.gnu.org/licenses/gpl.html + * @link https://bitbucket.org/coderkun/the-legend-of-z + */ + + namespace hhu\z\agents\intermediate; + + + /** + * Agent to handle XP-levels of a Seminary. + * + * @author Oliver Hanraths + */ + class XplevelsAgent extends \nre\agents\IntermediateAgent + { + + + + + /** + * Action: index. + */ + public function index(\nre\core\Request $request, \nre\core\Response $response) + { + } + + } + +?> diff --git a/configs/AppConfig.inc b/configs/AppConfig.inc index a5eecdba..bd20e1d4 100644 --- a/configs/AppConfig.inc +++ b/configs/AppConfig.inc @@ -238,6 +238,7 @@ array('^users/(?!(index|login|register|logout|manage|create|edit|delete))/?', 'users/user/$1', true), array('^seminaries/([^/]+)/(edit|delete)/?$', 'seminaries/$2/$1', true), array('^seminaries/(?!(index|create|edit|delete|calculatexps))/?', 'seminaries/seminary/$1', true), + array('^xplevels/([^/]+)/(manage)/?$', 'xplevels/$2/$1', true), array('^questgroupshierarchy/([^/]+)/create/?$', 'questgroupshierarchy/create/$1', true), array('^questgroupshierarchy/([^/]+)/([^/]+)/(edit|delete|moveup|movedown)/?$', 'questgroupshierarchy/$3/$1/$2', true), array('^questgroups/([^/]+)/create/?$', 'questgroups/create/$1', true), @@ -254,6 +255,9 @@ array('^characters/([^/]+)/all/?$', 'characters/index/$1/all', true), array('^characters/([^/]+)/([^/]+)/(edit|delete)/?$', 'characters/$3/$1/$2', true), array('^characters/([^/]+)/(?!(index|register|manage))/?', 'characters/character/$1/$2', true), + array('^charactertypes/([^/]+)/?$', 'charactertypes/index/$1', true), + array('^charactertypes/([^/]+)/create/?$', 'charactertypes/create/$1', true), + array('^charactertypes/([^/]+)/([^/]+)/(edit|delete)/?$', 'charactertypes/$3/$1/$2', true), array('^charactergroups/([^/]+)/?$', 'charactergroups/index/$1', true), array('^charactergroups/([^/]+)/(create)/?$', 'charactergroups/creategroupsgroup/$1/$2', true), array('^charactergroups/([^/]+)/([^/]+)/?$', 'charactergroups/groupsgroup/$1/$2', true), @@ -287,6 +291,7 @@ array('^users/user/(.*)$', 'users/$1', true), array('^users/([^/]+)/(.*)$', 'users/$2/$1', true), array('^seminaries/seminary/(.*)$', 'seminaries/$1', false), + array('^xplevels/(manage)/(.*)$', 'xplevels/$2/$1', false), array('^questgroupshierarchy/create/(.*)$', 'questgroupshierarchy/$1/create', true), array('^questgroupshierarchy/([^/]+)/(.*)$', 'questgroupshierarchy/$2/$1', true), array('^questgroups/create/(.*)$', 'questgroups/$1/create', true), @@ -300,6 +305,9 @@ 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('^charactertypes/index/([^/]+)$', 'charactertypes/$1', true), + array('^charactertypes/create/([^/]+)$', 'charactertypes/$1/create', true), + array('^charactertypes/(edit|delete)/([^/]+)/([^/]+)$', 'charactertypes/$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/XplevelsController.inc b/controllers/XplevelsController.inc new file mode 100644 index 00000000..1f21d697 --- /dev/null +++ b/controllers/XplevelsController.inc @@ -0,0 +1,188 @@ + + * @copyright 2014 Heinrich-Heine-Universität Düsseldorf + * @license http://www.gnu.org/licenses/gpl.html + * @link https://bitbucket.org/coderkun/the-legend-of-z + */ + + namespace hhu\z\controllers; + + + /** + * Controller of the XplevelsAgent to handle XP-levels of a + * Seminary. + * + * @author Oliver Hanraths + */ + class XplevelsController extends \hhu\z\controllers\SeminaryController + { + /** + * Required components + * + * @var array + */ + public $components = array('validation'); + /** + * Required models + * + * @var array + */ + public $models = array('xplevels'); + /** + * User permissions + * + * @var array + */ + public $permissions = array( + 'manage' => array('admin', 'moderator', 'user') + ); + + + + + /** + * Action: manage. + * + * Manage XP-levels. + * + * @throws IdNotFoundException + * @param string $seminaryUrl URL-Title of a Seminary + */ + public function manage($seminaryUrl) + { + // Get seminary + $seminary = $this->Seminaries->getSeminaryByUrl($seminaryUrl); + + // Check permissions + if( + (is_null(self::$character) && count(array_intersect(array('admin', 'moderator'), \hhu\z\controllers\IntermediateController::$user['roles'])) == 0) && + $seminary['created_user_id'] != self::$user['id'] + ) { + throw new \nre\exceptions\AccessDeniedException(); + } + + // Get XP-levels + $xplevels = $this->Xplevels->getXPLevelsForSeminary($seminary['id']); + + // Values + $xplevelsValues = array(); + foreach($xplevels as &$xplevel) { + $xplevelsValues[$xplevel['id']] = $xplevel; + } + $deletes = array(); + $validations = array( + 'edit' => true, + 'create' => true + ); + + // Edit + $action = null; + if($this->request->getRequestMethod() == 'POST') + { + // Get params + $xplevelsValues = $this->request->getPostParam('xplevels'); + $deletes = $this->request->getPostParam('deletes'); + + // Edit and delete XP-levels + if(!is_null($this->request->getPostParam('edit'))) + { + $action = 'edit'; + + // Validate params + if(!is_array($deletes)) { + $deletes = array(); + } + foreach($xplevels as &$xplevel) + { + if(array_key_exists($xplevel['id'], $deletes)) { + continue; + } + + $xplevelValidation = $this->Validation->validateParams($xplevelsValues[$xplevel['id']], array('xps')); + if($xplevelValidation !== true) + { + if(!is_array($validations['edit'])) { + $validations['edit'] = array(); + } + if(!array_key_exists($xplevel['id'], $validations['edit']) || !is_array($validations['edit'][$xplevel['id']])) { + $validations['edit'][$xplevel['id']] = array(); + } + $validations['edit'][$xplevel['id']] = $this->Validation->addValidationResults($validations['edit'][$xplevel['id']], 'xps', $xplevelValidation); + } + } + + // Edit and delete + if($validations['edit'] === true) + { + foreach($xplevels as &$xplevel) + { + // Delete + if(array_key_exists($xplevel['id'], $deletes)) { + $this->Xplevels->deleteXPLevel($xplevel); + } + // Edit + elseif(array_key_exists($xplevel['id'], $xplevelsValues)) + { + $this->Xplevels->editXPLevel( + $xplevel['id'], + $xplevelsValues[$xplevel['id']]['xps'] + ); + } + } + + // Redirect + $this->redirect($this->linker->link(null, 3)); + } + } + + // Create XP-level + if(!is_null($this->request->getPostParam('create'))) + { + $action = 'create'; + + // Get params and validate them + $xplevel = $xplevelsValues['new']; + $validations[$action] = $this->Validation->validateParams($xplevel, array('xps')); + + // Create + if($validations[$action] === true) + { + $this->Xplevels->createXPLevel( + $this->Auth->getUserId(), + $seminary['id'], + $xplevel['xps'] + ); + + // Redirect + $this->redirect($this->linker->link(null, 3)); + } + } + } + + // Get validation settings + $validationSettings = array( + 'xps' => \nre\configs\AppConfig::$validation['xps'] + ); + + + // Set titile + $this->addTitleLocalized('Manage XP-levels'); + $this->addTitle($seminary['title']); + + // Pass data to view + $this->set('seminary', $seminary); + $this->set('xplevels', $xplevels); + $this->set('xplevelsValues', $xplevelsValues); + $this->set('deletes', $deletes); + $this->set('action', $action); + $this->set('validations', $validations); + $this->set('validationSettings', $validationSettings); + } + + } + +?> 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 a87a3de3a71655ec0a35abd685c5c73b83be7492..a1cddf7deed081a6f52376b5bf69740d334b1747 100644 GIT binary patch delta 7267 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 delta 7184 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 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 77dedfe8..66f372da 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-07-09 11:21+0100\n" -"PO-Revision-Date: 2014-07-09 11:29+0100\n" +"POT-Creation-Date: 2014-07-09 13:01+0100\n" +"PO-Revision-Date: 2014-07-09 13:02+0100\n" "Last-Translator: \n" "Language-Team: \n" "Language: de_DE\n" @@ -387,6 +387,7 @@ msgstr "Achievement" #: views/html/questgroupshierarchy/delete.tpl:14 #: views/html/quests/delete.tpl:11 views/html/quests/edittexts.tpl:53 #: views/html/seminaries/delete.tpl:13 views/html/users/delete.tpl:11 +#: views/html/xplevels/manage.tpl:45 msgid "delete" msgstr "löschen" @@ -400,6 +401,7 @@ msgstr "Neue Bedingung" #: views/html/charactergroupsquests/manage.tpl:66 #: views/html/charactertypes/manage.tpl:52 views/html/library/edit.tpl:46 #: views/html/library/edit.tpl:86 views/html/users/edit.tpl:105 +#: views/html/xplevels/manage.tpl:49 msgid "save" msgstr "speichern" @@ -839,7 +841,7 @@ msgstr "Motto" #: views/html/library/edit.tpl:124 views/html/questgroups/create.tpl:76 #: views/html/questgroupshierarchy/create.tpl:63 #: views/html/quests/create.tpl:108 views/html/seminaries/create.tpl:75 -#: views/html/users/create.tpl:96 +#: views/html/users/create.tpl:96 views/html/xplevels/manage.tpl:83 msgid "create" msgstr "erstellen" @@ -925,7 +927,8 @@ msgstr "%squests" #: views/html/characters/manage.tpl:17 #: views/html/questgroups/questgroup.tpl:62 views/html/quests/create.tpl:72 #: views/html/quests/create.tpl:73 views/html/quests/edit.tpl:75 -#: views/html/quests/edit.tpl:76 +#: views/html/quests/edit.tpl:76 views/html/xplevels/manage.tpl:43 +#: views/html/xplevels/manage.tpl:81 msgid "XPs" msgstr "XP" @@ -968,6 +971,7 @@ msgstr "Neue %s-Quest" #: views/html/charactergroupsquests/create.tpl:47 #: views/html/charactergroupsquests/edit.tpl:47 #: views/html/quests/create.tpl:43 views/html/quests/edit.tpl:43 +#: views/html/xplevels/manage.tpl:26 views/html/xplevels/manage.tpl:63 #, php-format msgid "XPs not set" msgstr "XP nicht angegeben" @@ -975,12 +979,14 @@ msgstr "XP nicht angegeben" #: views/html/charactergroupsquests/create.tpl:49 #: views/html/charactergroupsquests/edit.tpl:49 #: views/html/quests/create.tpl:45 views/html/quests/edit.tpl:45 +#: views/html/xplevels/manage.tpl:28 views/html/xplevels/manage.tpl:65 msgid "XPs contain illegal characters" msgstr "Die XP-Angabe enthält ungültige Zeichen" #: views/html/charactergroupsquests/create.tpl:51 #: views/html/charactergroupsquests/edit.tpl:51 #: views/html/quests/create.tpl:47 views/html/quests/edit.tpl:47 +#: views/html/xplevels/manage.tpl:30 views/html/xplevels/manage.tpl:67 msgid "XPs invalid" msgstr "Die XP-Angabe ist ungültig" @@ -1075,7 +1081,7 @@ msgstr "Fortschritt" #: views/html/characters/character.tpl:77 #: views/html/characters/character.tpl:83 #: views/html/characters/character.tpl:89 views/html/seminarybar/index.tpl:43 -#: views/html/users/user.tpl:41 +#: views/html/users/user.tpl:41 views/html/xplevels/manage.tpl:41 msgid "Level" msgstr "Level" @@ -1207,7 +1213,7 @@ msgid "Please choose an avatar" msgstr "Bitte wähle einen Avatar aus" #: views/html/charactertypes/manage.tpl:9 views/html/seminaries/index.tpl:38 -#: views/html/seminaries/seminary.tpl:14 +#: views/html/seminaries/seminary.tpl:15 msgid "Manage Charactertypes" msgstr "Charakterrassen verwalten" @@ -1663,9 +1669,9 @@ msgstr "Erstelle einen Charakter" msgid "Your Character “%s” has not been activated yet" msgstr "Dein Charakter „%s“ wurde noch nicht aktiviert" -#: views/html/seminaries/seminary.tpl:15 -msgid "Manage Questgroups" -msgstr "Questgruppen verwalten" +#: views/html/seminaries/seminary.tpl:14 views/html/xplevels/manage.tpl:9 +msgid "Manage XP-levels" +msgstr "XP-Level verwalten" #: views/html/seminaries/seminary.tpl:19 msgid "Show Quests" @@ -1849,6 +1855,14 @@ msgstr "Registrieren" msgid "Roles" msgstr "Rollen" +#: views/html/xplevels/manage.tpl:11 +msgid "Edit XP-levels" +msgstr "XP-Level bearbeiten" + +#: views/html/xplevels/manage.tpl:52 +msgid "Create new XP-level" +msgstr "Neues XP-Level erstellen" + #: views/htmlmail/mail/characterregistration.tpl:1 #: views/textmail/mail/characterregistration.tpl:1 #, php-format @@ -1884,6 +1898,9 @@ msgstr "Ein neuer Benutzer wurde registriert" msgid "Hello %s" msgstr "Hallo %s" +#~ msgid "Manage Questgroups" +#~ msgstr "Questgruppen verwalten" + #, fuzzy #~ msgid "Edit Questgrouphierarchy" #~ msgstr "bearbeiten" diff --git a/models/XplevelsModel.inc b/models/XplevelsModel.inc index 895362ea..5535012e 100644 --- a/models/XplevelsModel.inc +++ b/models/XplevelsModel.inc @@ -57,6 +57,143 @@ return $data[0]; } + + + /** + * Get all XP-levels for a Seminary. + * + * @throws IdNotFoundException + * @param int $seminaryId ID of Seminary + * @return array List of XP-level + */ + public function getXPLevelsForSeminary($seminaryId) + { + return $this->db->query( + 'SELECT id, seminary_id, xps, level, name '. + 'FROM xplevels '. + 'WHERE seminary_id = ? '. + 'ORDER BY level ASC', + 'i', + $seminaryId + ); + } + + + /** + * Create a new XP-level for a Seminary. + * + * @param int $userId ID of creating user + * @param int $seminaryId ID of Seminary + * @param int $xps XPs of new XP-level + * @param string $name Name of new XP-level (optional) + */ + public function createXPLevel($userId, $seminaryId, $xps, $name=null) + { + // Get level + $level = $this->db->query( + 'SELECT COALESCE(MAX(level),0)+1 AS level '. + 'FROM xplevels '. + 'WHERE seminary_id = ?', + 'i', + $seminaryId + ); + $level = $level[0]['level']; + + $this->db->setAutocommit(false); + try { + // Create XP-level + $this->db->query( + 'INSERT INTO xplevels '. + '(created_user_id, seminary_id, xps, level, name) '. + 'VALUES '. + '(?, ?, ?, ?, ?)', + 'iiiis', + $userId, + $seminaryId, + $xps, + $level, + $name + ); + $xplevelId = $this->db->getInsertId(); + + // Create avatars + $this->db->query( + 'INSERT INTO avatars '. + '(created_user_id, charactertype_id, xplevel_id) '. + 'SELECT ?, charactertypes.id, ? '. + 'FROM charactertypes '. + 'WHERE seminary_id = ?', + 'iii', + $userId, + $xplevelId, + $seminaryId + ); + + $this->db->commit(); + } + catch(\Exception $e) { + $this->db->rollback(); + $this->db->setAutocommit(true); + throw $e; + } + + $this->db->setAutocommit(true); + } + + + /** + * Edit a XP-level. + * + * @param int $xplevelId ID of XP-level to edit + * @param int $xps New XPs of XP-level + * @param string $name New name of XP-level (optional) + */ + public function editXPLevel($xplevelId, $xps, $name=null) + { + $this->db->query( + 'UPDATE xplevels '. + 'SET xps = ?, name = ? '. + 'WHERE id = ?', + 'isi', + $xps, + $name, + $xplevelId + ); + } + + + /** + * Delete a XP-level. + * + * @param int $xplevel XP-level to delete + */ + public function deleteXPLevel($xplevel) + { + $this->db->setAutocommit(false); + try { + // Delete XP-level + $this->db->query('DELETE FROM xplevels WHERE id = ?', 'i', $xplevel['id']); + + // Adjust levels + $this->db->query( + 'UPDATE xplevels '. + 'SET level = level - 1 '. + 'WHERE seminary_id = ? AND level > ?', + 'ii', + $xplevel['seminary_id'], + $xplevel['level'] + ); + + $this->db->commit(); + } + catch(\Exception $e) { + $this->db->rollback(); + $this->db->setAutocommit(true); + throw $e; + } + + $this->db->setAutocommit(true); + } } diff --git a/views/html/seminaries/seminary.tpl b/views/html/seminaries/seminary.tpl index 8a163d2e..ea68c600 100644 --- a/views/html/seminaries/seminary.tpl +++ b/views/html/seminaries/seminary.tpl @@ -11,8 +11,8 @@