diff --git a/agents/intermediate/QuestsAgent.inc b/agents/intermediate/QuestsAgent.inc index 4279181b..c43dcac4 100644 --- a/agents/intermediate/QuestsAgent.inc +++ b/agents/intermediate/QuestsAgent.inc @@ -68,6 +68,15 @@ } + /** + * Action: edittask. + */ + public function edittask(\nre\core\Request $request, \nre\core\Response $response) + { + $this->addSubAgent('Questgroupshierarchypath', 'index', $request->getParam(3), $request->getParam(4), true); + } + + /** * Action: edittexts. */ diff --git a/app/controllers/QuesttypeController.inc b/app/controllers/QuesttypeController.inc index 15b79ebb..7c428d9a 100644 --- a/app/controllers/QuesttypeController.inc +++ b/app/controllers/QuesttypeController.inc @@ -80,7 +80,6 @@ public abstract function quest($seminary, $questgroup, $quest, $character, $exception); - /** * Action: submission. * @@ -92,6 +91,18 @@ * @param array $character Current Character data */ public abstract function submission($seminary, $questgroup, $quest, $character); + + + /** + * Action: edittask. + * + * Edit the task of a Quest. + * + * @param array $seminary Current Seminary data + * @param array $questgroup Current Questgroup data + * @param array $quest Current Quest data + */ + public abstract function edittask($seminary, $questgroup, $quest); diff --git a/configs/AppConfig.inc b/configs/AppConfig.inc index bd20e1d4..f243a49b 100644 --- a/configs/AppConfig.inc +++ b/configs/AppConfig.inc @@ -244,12 +244,12 @@ array('^questgroups/([^/]+)/create/?$', 'questgroups/create/$1', true), array('^questgroups/([^/]+)/([^/]+)/(edit|edittexts|delete|moveup|movedown)/?$', 'questgroups/$3/$1/$2', true), array('^questgroups/([^/]+)/([^/]+)/?$', 'questgroups/questgroup/$1/$2', true), - array('^quests/([^/]+)/?$', 'quests/index/$1', true), - array('^quests/([^/]+)/all/?$', 'quests/index/$1/all', true), - array('^quests/([^/]+)/([^/]+)/(create|createmedia)/?$', 'quests/$3/$1/$2', true), - array('^quests/([^/]+)/([^/]+)/([^/]+)/(submissions|edit|edittexts|delete)/?$', 'quests/$4/$1/$2/$3', true), - array('^quests/([^/]+)/([^/]+)/([^/]+)/(submission)/([^/]+)/?$', 'quests/$4/$1/$2/$3/$5', true), - array('^quests/(?!(index|create|createmedia))/?', 'quests/quest/$1', true), + array('^quests/([^/]+)/?$', 'quests/index/$1', true), + array('^quests/([^/]+)/all/?$', 'quests/index/$1/all', true), + array('^quests/([^/]+)/([^/]+)/(create|createmedia)/?$', 'quests/$3/$1/$2', true), + array('^quests/([^/]+)/([^/]+)/([^/]+)/(submissions|edit|edittask|edittexts|delete)/?$', 'quests/$4/$1/$2/$3', true), + array('^quests/([^/]+)/([^/]+)/([^/]+)/(submission)/([^/]+)/?$', 'quests/$4/$1/$2/$3/$5', true), + 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/([^/]+)/all/?$', 'characters/index/$1/all', true), @@ -300,8 +300,8 @@ array('^quests/index/(.+)$', 'quests/$1', true), array('^quests/quest/(.*)$', 'quests/$1', true), array('^quests/(create|createmedia)/(.*)$', 'quests/$2/$1' , true), - array('^quests/(submissions)/(.*)$', 'quests/$2/$1', true), - array('^quests/(submission|edit|edittexts|delete)/([^/]+)/([^/]+)/([^/]+)/([^/]+)$', 'quests/$2/$3/$4/$1/$5', true), + array('^quests/(submissions|edit|edittask|edittexts|delete)/([^/]+)/([^/]+)/([^/]+)$', 'quests/$2/$3/$4/$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/(edit|delete)/([^/]+)/([^/]+)$', 'characters/$2/$3/$1', true), diff --git a/controllers/QuestsController.inc b/controllers/QuestsController.inc index fc1ad610..63b8c8e6 100644 --- a/controllers/QuestsController.inc +++ b/controllers/QuestsController.inc @@ -627,6 +627,7 @@ // Get Quest $quest = $this->Quests->getQuestByUrl($seminary['id'], $questgroup['id'], $questUrl); + $quest['type'] = $this->Questtypes->getQuesttypeById($quest['questtype_id']); // Get Quest media $questmedia = null; @@ -653,7 +654,7 @@ $validation = array(); // Check request method - if($this->request->getRequestMethod() == 'POST' && !is_null($this->request->getPostParam('edit'))) + if($this->request->getRequestMethod() == 'POST' && (!is_null($this->request->getPostParam('edit')) || !is_null($this->request->getPostParam('edit-task')))) { // Get params and validate them $validation = $this->Validation->validateParams($this->request->getPostParams(), $fields); @@ -737,8 +738,15 @@ } } - // Redirect to entry - $this->redirect($this->linker->link(array('quest', $seminary['url'], $questgroup['url'], $quest['url']), 1)); + // Redirect + if(!is_null($this->request->getPostParam('edit-task'))) { + // To task editing + $this->redirect($this->linker->link(array('edittask', $seminary['url'], $questgroup['url'], $quest['url']), 1)); + } + else { + // To entry + $this->redirect($this->linker->link(array('quest', $seminary['url'], $questgroup['url'], $quest['url']), 1)); + } } } @@ -769,6 +777,56 @@ $this->set('validation', $validation); $this->set('validationSettings', $validationSettings); } + + + /** + * Action: edittask. + * + * Edit the task of a Quest of a Seminary. + * + * @throws IdNotFoundException + * @param string $seminaryUrl URL-Title of Seminary + * @param string $questgroupUrl URL-Title of Questgroup + * @param string $questUrl URL-Title of Quest + */ + public function edittask($seminaryUrl, $questgroupUrl, $questUrl) + { + // Get Seminary + $seminary = $this->Seminaries->getSeminaryByUrl($seminaryUrl); + + // Get Questgroup + $questgroup = $this->Questgroups->getQuestgroupByUrl($seminary['id'], $questgroupUrl); + $questgroup['hierarchy'] = $this->Questgroupshierarchy->getHierarchyForQuestgroup($questgroup['id']); + $questgroup['picture'] = (!is_null($questgroup['questgroupspicture_id'])) ? $this->Media->getSeminaryMediaById($questgroup['questgroupspicture_id']) : null; + + // Get Quest + $quest = $this->Quests->getQuestByUrl($seminary['id'], $questgroup['id'], $questUrl); + + // Get Quest media + $questmedia = null; + if(!is_null($quest['questsmedia_id'])) { + $questmedia = $this->Media->getSeminaryMediaById($quest['questsmedia_id']); + } + + // Render editing task + $task = null; + $questtype = $this->Questtypes->getQuesttypeById($quest['questtype_id']); + if(!is_null($questtype['classname'])) { + $task = $this->renderTaskEditing($questtype['classname'], $seminary, $questgroup, $quest); + } + + + // Set titile + $this->addTitleLocalized('Edit Quest task'); + $this->addTitle($seminary['title']); + + // Pass data to view + $this->set('seminary', $seminary); + $this->set('questgroup', $questgroup); + $this->set('quest', $quest); + $this->set('media', $questmedia); + $this->set('task', $task); + } /** @@ -1277,6 +1335,60 @@ // Return rendered output return $task; } + + + /** + * Render editing of a Quest. + * + * @param string $questtypeClassname Name of the class for the Questtype of a Quest + * @param array $seminary Seminary data + * @param array $questgroup Questgroup data + * @param array $quest Quest data + * @return string Rendered output + */ + private function renderTaskEditing($questtypeClassname, $seminary, $questgroup, $quest) + { + $task = null; + try { + // Generate request and response + $request = clone $this->request; + $response = $this->createQuesttypeResponse('edittask', $seminary, $questgroup, $quest); + + // Load Questtype Agent + $questtypeAgent = $this->loadQuesttypeAgent($questtypeClassname, $request, $response); + + // Render Task + $task = $this->runQuesttypeAgent($questtypeAgent, $request, $response); + } + catch(\nre\exceptions\ViewNotFoundException $e) { + $task = $e->getMessage(); + } + catch(\nre\exceptions\ActionNotFoundException $e) { + $task = $e->getMessage(); + } + catch(\hhu\z\exceptions\QuesttypeModelNotValidException $e) { + $task = $e->getMessage(); + } + catch(\hhu\z\exceptions\QuesttypeModelNotFoundException $e) { + $task = $e->getMessage(); + } + catch(\hhu\z\exceptions\QuesttypeControllerNotValidException $e) { + $task = $e->getMessage(); + } + catch(\hhu\z\exceptions\QuesttypeControllerNotFoundException $e) { + $task = $e->getMessage(); + } + catch(\hhu\z\exceptions\QuesttypeAgentNotValidException $e) { + $task = $e->getMessage(); + } + catch(\hhu\z\exceptions\QuesttypeAgentNotFoundException $e) { + $task = $e->getMessage(); + } + + + // Return rendered output + return $task; + } /** diff --git a/views/html/quests/edit.tpl b/views/html/quests/edit.tpl index 948d6004..adccac9a 100644 --- a/views/html/quests/edit.tpl +++ b/views/html/quests/edit.tpl @@ -108,5 +108,8 @@

- + + + + diff --git a/views/html/quests/edittask.tpl b/views/html/quests/edittask.tpl new file mode 100644 index 00000000..0949cbc9 --- /dev/null +++ b/views/html/quests/edittask.tpl @@ -0,0 +1,11 @@ + +
+ +
+ + + +

+ + +