From a4ccb74e8c124112c3acec9ca775c09683411a69 Mon Sep 17 00:00:00 2001 From: coderkun Date: Wed, 28 May 2014 10:33:05 +0200 Subject: [PATCH] implement CRUD for Seminaries (resolves issue #33) --- configs/AppConfig.inc | 13 ++ controllers/CharactersController.inc | 5 + controllers/SeminariesController.inc | 206 ++++++++++++++++++-- locale/de_DE/LC_MESSAGES/The Legend of Z.mo | Bin 16530 -> 17144 bytes locale/de_DE/LC_MESSAGES/The Legend of Z.po | 66 ++++++- models/MediaModel.inc | 39 ++++ models/SeminariesModel.inc | 81 ++++++-- views/html/seminaries/create.tpl | 65 +++++- views/html/seminaries/edit.tpl | 67 ++++++- 9 files changed, 490 insertions(+), 52 deletions(-) diff --git a/configs/AppConfig.inc b/configs/AppConfig.inc index 0e7678b0..b68c5458 100644 --- a/configs/AppConfig.inc +++ b/configs/AppConfig.inc @@ -117,6 +117,16 @@ 'size' => 204800 ) ), + 'moodpics' => array( + array( + 'mimetype' => 'image/jpeg', + 'size' => 524288 + ), + array( + 'mimetype' => 'image/png', + 'size' => 1048576 + ) + ), 'charactergroupsquests' => array( array( 'mimetype' => 'image/jpeg', @@ -198,6 +208,9 @@ 'xps' => array( 'minlength' => 1, 'regex' => '/^(\d*)$/' + ), + 'course' => array( + 'maxlength' => 128 ) ); diff --git a/controllers/CharactersController.inc b/controllers/CharactersController.inc index f0dca5c5..5ea6ff9d 100644 --- a/controllers/CharactersController.inc +++ b/controllers/CharactersController.inc @@ -292,6 +292,11 @@ } } + // Set roles for owners and admins + if(in_array('admin', \hhu\z\controllers\IntermediateController::$user['roles']) || $seminary['created_user_id'] == \hhu\z\controllers\IntermediateController::$user['id']) { + $this->Characterroles->addCharacterroleToCharacter($characterId, 'admin'); + } + // Send mail $this->sendRegistrationMail($character); diff --git a/controllers/SeminariesController.inc b/controllers/SeminariesController.inc index 0c392a87..a0bd8a84 100644 --- a/controllers/SeminariesController.inc +++ b/controllers/SeminariesController.inc @@ -25,6 +25,12 @@ * @var array */ public $models = array('seminaries', 'users', 'characterroles', 'questgroupshierarchy', 'questgroups', 'media'); + /** + * Required components + * + * @var array + */ + public $components = array('validation'); /** * User permissions * @@ -162,26 +168,109 @@ /** * Action: create. * - * Create a new seminary. + * Create a new Seminary. */ public function create() { + // Get allowed mimetypes + $mimetypes = \nre\configs\AppConfig::$mimetypes['moodpics']; + + // Values + $title = ''; + $course = ''; + $description = ''; + $fields = array('title', 'course'); + $validation = array(); + + // Create a new Seminary if($this->request->getRequestMethod() == 'POST' && !is_null($this->request->getPostParam('create'))) { - // Create new seminary - $seminaryId = $this->Seminaries->createSeminary( - $this->request->getPostParam('title'), - $this->Auth->getUserId() - ); + // Get params and validate them + $validation = $this->Validation->validateParams($this->request->getPostParams(), $fields); + $title = $this->request->getPostParam('title'); + if($this->Seminaries->seminaryTitleExists($title)) { + $validation = $this->Validation->addValidationResult($validation, 'title', 'exist', true); + } + $course = $this->request->getPostParam('course'); + $description = $this->request->getPostParam('description'); - // Redirect to seminary - $user = $this->Seminaries->getSeminaryById($seminaryId); - $this->redirect($this->linker->link(array($seminary['url']), 1)); + // Validate moodpic + $moodpic = null; + if(!empty($_FILES) && array_key_exists('moodpic', $_FILES) && $_FILES['moodpic']['error'] != UPLOAD_ERR_NO_FILE) + { + $moodpic = $_FILES['moodpic']; + + // Check error + if($moodpic['error'] !== UPLOAD_ERR_OK) { + $validation = $this->Validation->addValidationResult($validation, 'moodpic', 'error', $moodpic['error']); + } + + // Check mimetype + $mediaMimetype = null; + $moodpic['mimetype'] = \hhu\z\Utils::getMimetype($moodpic['tmp_name'], $moodpic['type']); + foreach($mimetypes as &$mimetype) { + if($mimetype['mimetype'] == $moodpic['mimetype']) { + $mediaMimetype = $mimetype; + break; + } + } + if(is_null($mediaMimetype)) { + $validation = $this->Validation->addValidationResult($validation, 'moodpic', 'mimetype', $moodpic['mimetype']); + } + elseif($moodpic['size'] > $mediaMimetype['size']) { + $validation = $this->Validation->addValidationResult($validation, 'moodpic', 'size', $mediaMimetype['size']); + } + } + + // Create new Seminary + if($validation === true) + { + $seminaryId = $this->Seminaries->createSeminary( + $this->Auth->getUserId(), + $title, + $course, + $description + ); + $seminary = $this->Seminaries->getSeminaryById($seminaryId); + + // Upload moodpic + if(!is_null($moodpic)) + { + $mediaId = $this->Media->createMoodpic( + $this->Auth->getUserId(), + $seminary['id'], + sprintf('seminarymoodpic-%s', $seminary['url']), + '', + $moodpic['mimetype'], + $moodpic['tmp_name'] + ); + if($mediaId !== false) { + $this->Seminaries->setMoodpicForSeminary($seminary['id'], $mediaId); + } + } + + // Redirect to Seminary overview + $this->redirect($this->linker->link('index', 1)); + } + } + + // Get validation settings + $validationSettings = array(); + foreach($fields as &$field) { + $validationSettings[$field] = \nre\configs\AppConfig::$validation[$field]; } // Set titile $this->addTitleLocalized('New seminary'); + + // Pass data to view + $this->set('title', $title); + $this->set('course', $course); + $this->set('description', $description); + $this->set('mimetypes', $mimetypes); + $this->set('validation', $validation); + $this->set('validationSettings', $validationSettings); } @@ -198,23 +287,92 @@ // Get seminary $seminary = $this->Seminaries->getSeminaryByUrl($seminaryUrl); + // Get allowed mimetypes + $mimetypes = \nre\configs\AppConfig::$mimetypes['moodpics']; + + // Values + $title = $seminary['title']; + $course = $seminary['course']; + $description = $seminary['description']; + $fields = array('title', 'course'); + $validation = array(); + // Check request method - if($this->request->getRequestMethod() == 'POST') + if($this->request->getRequestMethod() == 'POST' && !is_null($this->request->getPostParam('edit'))) { - // Save changes - if(!is_null($this->request->getPostParam('save'))) + // Get params and validate them + $validation = $this->Validation->validateParams($this->request->getPostParams(), $fields); + $title = $this->request->getPostParam('title'); + if($this->Seminaries->seminaryTitleExists($title, $seminary['id'])) { + $validation = $this->Validation->addValidationResult($validation, 'title', 'exist', true); + } + $course = $this->request->getPostParam('course'); + $description = $this->request->getPostParam('description'); + + // Validate moodpic + $moodpic = null; + if(!empty($_FILES) && array_key_exists('moodpic', $_FILES) && $_FILES['moodpic']['error'] != UPLOAD_ERR_NO_FILE) { - // Edit seminary - $this->Seminaries->editSeminary( - $seminary['id'], - $this->request->getPostParam('title') - ); - $seminary = $this->Seminaries->getSeminaryById($seminary['id']); + $moodpic = $_FILES['moodpic']; + + // Check error + if($moodpic['error'] !== UPLOAD_ERR_OK) { + $validation = $this->Validation->addValidationResult($validation, 'moodpic', 'error', $moodpic['error']); + } + + // Check mimetype + $mediaMimetype = null; + $moodpic['mimetype'] = \hhu\z\Utils::getMimetype($moodpic['tmp_name'], $moodpic['type']); + foreach($mimetypes as &$mimetype) { + if($mimetype['mimetype'] == $moodpic['mimetype']) { + $mediaMimetype = $mimetype; + break; + } + } + if(is_null($mediaMimetype)) { + $validation = $this->Validation->addValidationResult($validation, 'moodpic', 'mimetype', $moodpic['mimetype']); + } + elseif($moodpic['size'] > $mediaMimetype['size']) { + $validation = $this->Validation->addValidationResult($validation, 'moodpic', 'size', $mediaMimetype['size']); + } } - - // Redirect to entry - $this->redirect($this->linker->link(array($seminary['url']), 1)); + // Edit Seminary + if($validation === true) + { + $this->Seminaries->editSeminary( + $seminary['id'], + $title, + $course, + $description + ); + $seminary = $this->Seminaries->getSeminaryById($seminary['id']); + + // Update moodpic + if(!is_null($moodpic)) + { + $mediaId = $this->Media->createMoodpic( + $this->Auth->getUserId(), + $seminary['id'], + sprintf('seminarymoodpic-%s', $seminary['url']), + '', + $moodpic['mimetype'], + $moodpic['tmp_name'] + ); + if($mediaId !== false) { + $this->Seminaries->setMoodpicForSeminary($seminary['id'], $mediaId); + } + } + + // Redirect to entry + $this->redirect($this->linker->link(array('seminary', $seminary['url']), 1)); + } + } + + // Get validation settings + $validationSettings = array(); + foreach($fields as &$field) { + $validationSettings[$field] = \nre\configs\AppConfig::$validation[$field]; } @@ -223,6 +381,12 @@ // Pass data to view $this->set('seminary', $seminary); + $this->set('title', $title); + $this->set('course', $course); + $this->set('description', $description); + $this->set('mimetypes', $mimetypes); + $this->set('validation', $validation); + $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 a81cb049e7d511cf653aec86eb09c837f6301285..ee0b8d63bf5d90ebceac18b34e95dfc2a6a29b8e 100644 GIT binary patch delta 5864 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 KZN6;0p9cW$-kD_p delta 5390 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 zV_;zT%D}*215v~db->setAutocommit(false); + + try { + // Create Seminary media record + $mediaId = $this->createSeminaryMedia($userId, $seminaryId, $filename, $description, $mimetype); + + // Upload file + $filename = ROOT.DS.\nre\configs\AppConfig::$dirs['seminarymedia'].DS.$mediaId; + if(!move_uploaded_file($tmpFilename, $filename)) + { + $this->db->rollback(); + $mediaId = false; + } + } + catch(\nre\exceptions\DatamodelException $e) { + $this->db->rollback(); + $this->db->setAutocommit(true); + } + + + $this->db->setAutocommit(true); + return $mediaId; + } + + /** * Create a new Quests media by creating a new Seminarymedia and * adding it to the list of Quests media. diff --git a/models/SeminariesModel.inc b/models/SeminariesModel.inc index e31cdce7..fe734fba 100644 --- a/models/SeminariesModel.inc +++ b/models/SeminariesModel.inc @@ -133,23 +133,49 @@ /** - * Create a new seminary. + * Check if a Seminary title already exists. * - * @param string $title Title of seminary to create - * @param int $userId ID of creating user - * @return int ID of the newly created seminary + * @param string $title Seminary title to check + * @param int $seminaryId Do not check this ID (for editing) + * @return boolean Whether Seminary title exists or not */ - public function createSeminary($title, $userId) + public function seminaryTitleExists($title, $seminaryId=null) + { + $data = $this->db->query( + 'SELECT id '. + 'FROM seminaries '. + 'WHERE title = ? OR url = ?', + 'ss', + $title, + \nre\core\Linker::createLinkParam($title) + ); + + return (!empty($data) && (is_null($seminaryId) || $seminaryId != $data[0]['id'])); + } + + + /** + * Create a new Seminary. + * + * @param int $userId ID of creating user + * @param string $title Title of Seminary to create + * @param string $course Course of Seminary + * @param string $description Description of new Seminary + * @return int ID of the newly created Seminary + */ + public function createSeminary($userId, $title, $course, $description) { $this->db->query( 'INSERT INTO seminaries '. - '(created_user_id, title, url) '. + '(created_user_id, title, url, course, description) '. 'VALUES '. - '(?, ?, ?)', - 'iss', + '(?, ?, ?, ?, ?)', + 'issss', $userId, $title, - \nre\core\Linker::createLinkParam($title) + \nre\core\Linker::createLinkParam($title), + $course, + $description ); @@ -158,21 +184,44 @@ /** - * Edit a seminary. + * Set the moodpic for a Seminary. * - * @throws DatamodelException - * @param int $seminaryId ID of the seminary to delete - * @param string $title New title of seminary + * @param int $seminaryId ID of Seminary to set moodpic for + * @param int $mediaId ID of moodpic media */ - public function editSeminary($seminaryId, $title) + public function setMoodpicForSeminary($seminaryId, $mediaId) { $this->db->query( 'UPDATE seminaries '. - 'SET title = ?, url = ? '. + 'SET seminarymedia_id = ? '. 'WHERE id = ?', - 'ssi', + 'ii', + $mediaId, + $seminaryId + ); + } + + + /** + * Edit a seminary. + * + * @throws DatamodelException + * @param int $seminaryId ID of Seminary to delete + * @param string $title New title of Seminary + * @param string $course New course of Seminary + * @param string $description New description of Seminary + */ + public function editSeminary($seminaryId, $title, $course, $description) + { + $this->db->query( + 'UPDATE seminaries '. + 'SET title = ?, url = ?, course = ?, description = ? '. + 'WHERE id = ?', + 'ssssi', $title, \nre\core\Linker::createLinkParam($title), + $course, + $description, $seminaryId ); } diff --git a/views/html/seminaries/create.tpl b/views/html/seminaries/create.tpl index 425f2367..a6cb63eb 100644 --- a/views/html/seminaries/create.tpl +++ b/views/html/seminaries/create.tpl @@ -6,10 +6,71 @@

-
+ +
    + &$settings) : ?> +
  • +
      + $value) : ?> +
    • + +
    • + +
    +
  • + +
+ + +
+ + +

:

+
    + +
  • 0) : ?>(  MiB)
  • + +
+
-
+ />
+ + />
+
diff --git a/views/html/seminaries/edit.tpl b/views/html/seminaries/edit.tpl index f94b1916..5e1ca2ec 100644 --- a/views/html/seminaries/edit.tpl +++ b/views/html/seminaries/edit.tpl @@ -8,10 +8,71 @@

-
+ +
    + &$settings) : ?> +
  • +
      + $value) : ?> +
    • + +
    • + +
    +
  • + +
+ + +
+ + +

:

+
    + +
  • 0) : ?>(  MiB)
  • + +
+
-
+ />
+ + />
+
- +