From eea226c1c2da8724e4804aa9e8b74a7f1fe89be2 Mon Sep 17 00:00:00 2001 From: coderkun Date: Thu, 15 May 2014 12:05:36 +0200 Subject: [PATCH] check for Quest related Achievements only on Quest pages (Issue #278) --- app/controllers/SeminaryController.inc | 15 +++++++++++++-- controllers/QuestsController.inc | 15 +++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/app/controllers/SeminaryController.inc b/app/controllers/SeminaryController.inc index 7574d455..8b722e33 100644 --- a/app/controllers/SeminaryController.inc +++ b/app/controllers/SeminaryController.inc @@ -93,7 +93,8 @@ $this->checkPermission($request, $response); // Check achievements - $this->checkAchievements($request, $response); + $this->checkAchievements($request, $response, 'date'); + $this->checkAchievements($request, $response, 'achievement'); // Set Seminary and Character data $this->set('loggedSeminary', self::$seminary); @@ -148,7 +149,7 @@ /** * Check for newly achieved Achievements. */ - private function checkAchievements(\nre\core\Request $request, \nre\core\Response $response) + protected function checkAchievements(\nre\core\Request $request, \nre\core\Response $response, $checkConditions=null) { // Do not check MediaController if($this->request->getParam(0, 'toplevel') != \nre\configs\AppConfig::$defaults['toplevel']) { @@ -160,6 +161,11 @@ return; } + // Set conditions to check + if(!is_null($checkConditions) && !is_array($checkConditions)) { + $checkConditions = array($checkConditions); + } + // Get unachieved Achievments $achievements = $this->Achievements->getUnachhievedAchievementsForCharacter(self::$seminary['id'], self::$character['id']); if(in_array('user', self::$character['characterroles'])) { @@ -169,6 +175,11 @@ // Check conditions foreach($achievements as &$achievement) { + // Check condition to test + if(!is_null($checkConditions) && !in_array($achievement['condition'], $checkConditions)) { + continue; + } + // Check deadline if(!is_null($achievement['deadline']) && $achievement['deadline'] < date('Y-m-d H:i:s')) { continue; diff --git a/controllers/QuestsController.inc b/controllers/QuestsController.inc index 2d7fda45..c506219b 100644 --- a/controllers/QuestsController.inc +++ b/controllers/QuestsController.inc @@ -53,6 +53,21 @@ + /** + * Prefilter that is executed before running the Controller. + * + * @param Request $request Current request + * @param Response $response Current response + */ + public function preFilter(\nre\core\Request $request, \nre\core\Response $response) + { + parent::preFilter($request, $response); + + $this->checkAchievements($request, $response, array('character', 'quest')); + $this->checkAchievements($request, $response, 'achievement'); + } + + /** * Action: index. *