diff --git a/controllers/QuestsController.inc b/controllers/QuestsController.inc index b630a134..e8ed7fca 100644 --- a/controllers/QuestsController.inc +++ b/controllers/QuestsController.inc @@ -31,9 +31,10 @@ * @var array */ public $permissions = array( - 'quest' => array('admin', 'moderator', 'user'), - 'submissions' => array('admin', 'moderator'), - 'submission' => array('admin', 'moderator') + 'index' => array('admin', 'moderator', 'user'), + 'quest' => array('admin', 'moderator', 'user'), + 'submissions' => array('admin', 'moderator', 'user'), + 'submission' => array('admin', 'moderator', 'user') ); /** * User seminary permissions @@ -41,6 +42,7 @@ * @var array */ public $seminaryPermissions = array( + 'index' => array('admin', 'moderator', 'user'), 'quest' => array('admin', 'moderator', 'user'), 'submissions' => array('admin', 'moderator'), 'submission' => array('admin', 'moderator') @@ -49,6 +51,68 @@ + /** + * Action: index. + * + * List all Quests for a Seminary. + * + * @param string $seminaryUrl URL-Title of Seminary + */ + public function index($seminaryUrl) + { + // Get seminary + $seminary = $this->Seminaries->getSeminaryByUrl($seminaryUrl); + + // Prepare filters + $filters = array( + 'questgroups' => array(), + 'questtypes' => array() + ); + + // Get selected filters + $selectedFilters = array( + 'questgroup' => "0", + 'questtype' => "" + ); + if($this->request->getRequestMethod() == 'POST' && !is_null($this->request->getPostParam('filters'))) { + $selectedFilters = $this->request->getPostParam('filters'); + } + + // Get Quests + $quests = array(); + foreach($this->Quests->getQuestsForSeminary($seminary['id']) as $quest) + { + // Get Questgroup + $quest['questgroup'] = $this->Questgroups->getQuestgroupById($quest['questgroup_id']); + if($selectedFilters['questgroup'] != "0" && $selectedFilters['questgroup'] != $quest['questgroup']['id']) { + continue; + } + + // Get Questtype + $quest['questtype'] = $this->Questtypes->getQuesttypeById($quest['questtype_id']); + if($selectedFilters['questtype'] != "" && $selectedFilters['questtype'] != $quest['questtype']['classname']) { + continue; + } + + // Add filter values + $filters['questgroups'][$quest['questgroup']['id']] = $quest['questgroup']; + $filters['questtypes'][$quest['questtype']['classname']] = $quest['questtype']; + + // Add open submissions count + $quest['opensubmissionscount'] = count($this->Characters->getCharactersSubmittedQuest($quest['id'])); + + $quests[] = $quest; + } + + + // Pass data to view + $this->set('seminary', $seminary); + $this->set('quests', $quests); + $this->set('filters', $filters); + $this->set('selectedFilters', $selectedFilters); + } + + /** * Action: quest. * diff --git a/models/QuestsModel.inc b/models/QuestsModel.inc index 815e8294..5b7eda91 100644 --- a/models/QuestsModel.inc +++ b/models/QuestsModel.inc @@ -325,6 +325,25 @@ } + /** + * Get all Quests for a Seminary. + * + * @param int $seminaryId ID of Seminary + * @return array Quests for this Seminary + */ + public function getQuestsForSeminary($seminaryId) + { + return $this->db->query( + 'SELECT DISTINCT quests.id, quests.questgroup_id, quests.questtype_id, quests.title, quests.url, quests.xps, quests.task, quests.right_text, quests.wrong_text, quests.questsmedia_id '. + 'FROM questgroups '. + 'INNER JOIN quests ON quests.questgroup_id = questgroups.id '. + 'WHERE questgroups.seminary_id = ?', + 'i', + $seminaryId + ); + } + + /** * Get all Quests that are linked to a Questtopic. * diff --git a/views/html/quests/index.tpl b/views/html/quests/index.tpl index e69de29b..80a3e4fe 100644 --- a/views/html/quests/index.tpl +++ b/views/html/quests/index.tpl @@ -0,0 +1,49 @@ + +