From 03cc6a475b396eae671e970cbd3966595ecd1d32 Mon Sep 17 00:00:00 2001 From: oliver Date: Tue, 2 Feb 2016 10:02:17 +0100 Subject: [PATCH] add count of Stations for each Character group (implements #139) --- .../CharactergroupsquestsController.inc | 18 +++++- ...CharactergroupsqueststationsController.inc | 2 +- models/CharactergroupsqueststationsModel.inc | 61 ++++++++++++++----- views/html/charactergroupsquests/manage.tpl | 1 + views/html/charactergroupsquests/quest.tpl | 5 +- 5 files changed, 68 insertions(+), 19 deletions(-) diff --git a/controllers/CharactergroupsquestsController.inc b/controllers/CharactergroupsquestsController.inc index 2dbbe50e..e12fc02d 100644 --- a/controllers/CharactergroupsquestsController.inc +++ b/controllers/CharactergroupsquestsController.inc @@ -118,8 +118,16 @@ } } - // Get Character groups-groups + // Get Character groups $groups = $this->Charactergroups->getGroupsForQuest($quest['id']); + foreach($groups as &$group) + { + // Get count of solved Stations + $group['stations'] = $this->Charactergroupsqueststations->getSolvedStationsForQuestAndGroup( + $quest['id'], + $group['id'] + ); + } // Get uploads $uploads = $this->Charactergroupsquests->getMediaForQuest($quest['id']); @@ -172,6 +180,14 @@ // Get Character groups $groups = $this->Charactergroups->getGroupsForGroupsgroup($groupsgroup['id']); + foreach($groups as &$group) + { + // Get count of solved Stations + $group['stations'] = $this->Charactergroupsqueststations->getSolvedStationsForQuestAndGroup( + $quest['id'], + $group['id'] + ); + } // Get allowed mimetypes $mimetypes = \nre\configs\AppConfig::$mimetypes['charactergroupsquests']; diff --git a/controllers/CharactergroupsqueststationsController.inc b/controllers/CharactergroupsqueststationsController.inc index 17eb75e6..7a5491eb 100644 --- a/controllers/CharactergroupsqueststationsController.inc +++ b/controllers/CharactergroupsqueststationsController.inc @@ -98,7 +98,7 @@ $stations = $this->Charactergroupsqueststations->getStationsForQuest($quest['id']); } elseif(!is_null($charactergroup)) { - $stations = $this->Charactergroupsqueststations->getStationsForQuestAndGroup($quest['id'], $charactergroup['id']); + $stations = $this->Charactergroupsqueststations->getEnteredStationsForQuestAndGroup($quest['id'], $charactergroup['id']); } diff --git a/models/CharactergroupsqueststationsModel.inc b/models/CharactergroupsqueststationsModel.inc index 2ed65ffc..cfe60632 100644 --- a/models/CharactergroupsqueststationsModel.inc +++ b/models/CharactergroupsqueststationsModel.inc @@ -131,28 +131,30 @@ /** - * Get all Stations for a Character groups Quest and a Character group. + * Get all Stations for a Character groups Quest that have been entered + * by a Character group. * * @param int $questId ID of Character groups Quest * @param int $groupId ID of Character group * @return array List of Station */ - public function getStationsForQuestAndGroup($questId, $groupId) + private function getEnteredStationsForQuestAndGroup($questId, $groupId) { - return $this->db->query( - 'SELECT charactergroupsqueststations.id, charactergroupsqueststations_charactergroups.created, title, url, stationpicture_id, latitude, longitude '. - 'FROM charactergroupsqueststations_charactergroups '. - 'INNER JOIN charactergroupsqueststations ON charactergroupsqueststations.id = charactergroupsqueststations_charactergroups.charactergroupsqueststation_id '. - 'WHERE '. - 'charactergroupsqueststations_charactergroups.charactergroup_id = ? AND '. - 'charactergroupsqueststations_charactergroups.status = ? AND '. - 'charactergroupsquest_id = ? '. - 'ORDER BY charactergroupsqueststations_charactergroups.created ASC', - 'iii', - $groupId, - self::STATUS_ENTERED, - $questId - ); + return $this->getStationsForQuestAndGroup($questId, $groupId, self::STATUS_ENTERED); + } + + + /** + * Get all Stations for a Character groups Quest that have been solved + * by a Character group. + * + * @param int $questId ID of Character groups Quest + * @param int $groupId ID of Character group + * @return array List of Station + */ + public function getSolvedStationsForQuestAndGroup($questId, $groupId) + { + return $this->getStationsForQuestAndGroup($questId, $groupId, self::STATUS_SOLVED); } @@ -570,6 +572,33 @@ ); } + + /** + * Get all Stations for a Character groups Quest with a minimum status. + * + * @param int $questId ID of Character groups Quest + * @param int $groupId ID of Character group + * @param int $statusMin Minimum status + * @return array List of Station + */ + private function getStationsForQuestAndGroup($questId, $groupId, $statusMin) + { + return $this->db->query( + 'SELECT charactergroupsqueststations.id, charactergroupsqueststations_charactergroups.created, title, url, stationpicture_id, latitude, longitude '. + 'FROM charactergroupsqueststations_charactergroups '. + 'INNER JOIN charactergroupsqueststations ON charactergroupsqueststations.id = charactergroupsqueststations_charactergroups.charactergroupsqueststation_id '. + 'WHERE '. + 'charactergroupsqueststations_charactergroups.charactergroup_id = ? AND '. + 'charactergroupsqueststations_charactergroups.status >= ? AND '. + 'charactergroupsquest_id = ? '. + 'ORDER BY charactergroupsqueststations_charactergroups.created ASC', + 'iii', + $groupId, + $statusMin, + $questId + ); + } + } ?> diff --git a/views/html/charactergroupsquests/manage.tpl b/views/html/charactergroupsquests/manage.tpl index 1064e7f3..c82b02b7 100644 --- a/views/html/charactergroupsquests/manage.tpl +++ b/views/html/charactergroupsquests/manage.tpl @@ -78,6 +78,7 @@
  • + ,