diff --git a/app/controllers/IntermediateController.inc b/app/controllers/IntermediateController.inc index 5b980299..19647d7e 100644 --- a/app/controllers/IntermediateController.inc +++ b/app/controllers/IntermediateController.inc @@ -31,18 +31,6 @@ * @var array */ public static $user = null; - /** - * Current Seminary - * - * var array - */ - public static $seminary = null; - /** - * Character of current user and Seminary - * - * @var array - */ - public static $character = null; @@ -79,22 +67,7 @@ // Get userdata try { self::$user = $this->Users->getUserById($this->Auth->getUserId()); - - // Determine user roles - self::$user['roles'] = array(); - $roles = $this->Userroles->getUserrolesForUserById(self::$user['id']); - foreach($roles as &$role) { - self::$user['roles'][] = $role['name']; - } - - // Character - $controller = $this->agent->controller; - if(is_subclass_of($controller, '\hhu\z\controllers\SeminaryRoleController')) - { - $seminaryUrl = $this->request->getParam(3); - self::$seminary = $this->Seminaries->getSeminaryByUrl($seminaryUrl); - self::$character = $this->Characters->getCharacterForUserAndSeminary(self::$user['id'], self::$seminary['id']); - } + self::$user['roles'] = array_map(function($r) { return $r['name']; }, $this->Userroles->getUserrolesForUserById(self::$user['id'])); } catch(\nre\exceptions\IdNotFoundException $e) { } @@ -104,8 +77,6 @@ // Set userdata $this->set('loggedUser', self::$user); - $this->set('loggedSeminary', self::$seminary); - $this->set('loggedCharacter', self::$character); } diff --git a/app/controllers/SeminaryRoleController.inc b/app/controllers/SeminaryRoleController.inc index 324e13e2..77a95a2b 100644 --- a/app/controllers/SeminaryRoleController.inc +++ b/app/controllers/SeminaryRoleController.inc @@ -33,11 +33,17 @@ */ public $models = array('seminaries', 'userseminaryroles', 'characters', 'achievements'); /** - * Data of currently logged in user if any + * Current Seminary + * + * var array + */ + public static $seminary = null; + /** + * Character of current user and Seminary * * @var array */ - public static $user = null; + public static $character = null; @@ -71,11 +77,24 @@ { parent::preFilter($request, $response); + // Get Seminary and Character data + try { + self::$seminary = $this->Seminaries->getSeminaryByUrl($this->request->getParam(3)); + self::$character = $this->Characters->getCharacterForUserAndSeminary(self::$user['id'], self::$seminary['id']); + self::$user['seminaryroles'] = array_map(function($r) { return $r['name']; }, $this->Userseminaryroles->getUserseminaryrolesForUserById(self::$user['id'], self::$seminary['id'])); + } + catch(\nre\exceptions\IdNotFoundException $e) { + } + // Check permissions $this->checkPermission($request, $response); // Check achievements $this->checkAchievements($request, $response); + + // Set Seminary and Character data + $this->set('loggedSeminary', self::$seminary); + $this->set('loggedCharacter', self::$character); } @@ -105,17 +124,6 @@ return; } - // Determine user and seminary - $userId = $this->Auth->getUserId(); - $seminary = $this->Seminaries->getSeminaryByUrl($request->getParam(3)); - - // Determine user seminary roles - $userSeminaryRoles = array(); - $roles = $this->Userseminaryroles->getUserseminaryrolesForUserById($userId, $seminary['id']); - foreach($roles as &$role) { - $userSeminaryRoles[] = $role['name']; - } - // Determine permissions for current action $action = $this->request->getParam(2, 'action'); @@ -129,7 +137,7 @@ // Check permissions - if(count(array_intersect($userSeminaryRoles, $permissions)) == 0) { + if(count(array_intersect(self::$user['seminaryroles'], $permissions)) == 0) { throw new \nre\exceptions\AccessDeniedException(); } } @@ -186,7 +194,7 @@ 'params' => array( $condition['field'], $condition['value'], - $character['id'] + self::$character['id'] ) ); } @@ -205,7 +213,7 @@ $condition['status'], $condition['groupby'], $condition['quest_id'], - $character['id'] + self::$character['id'] ) ); } @@ -223,7 +231,7 @@ $condition['value'], $condition['groupby'], $condition['meta_achievement_id'], - $character['id'] + self::$character['id'] ) ); } @@ -263,7 +271,7 @@ // Set status if($achieved) { - $this->Achievements->setAchievementAchieved($achievement['id'], $character['id']); + $this->Achievements->setAchievementAchieved($achievement['id'], self::$character['id']); } } } diff --git a/controllers/AchievementsController.inc b/controllers/AchievementsController.inc index b6ef6595..6f363012 100644 --- a/controllers/AchievementsController.inc +++ b/controllers/AchievementsController.inc @@ -59,7 +59,7 @@ $seminary = $this->Seminaries->getSeminaryByUrl($seminaryUrl); // Get Character - $character = IntermediateController::$character; + $character = SeminaryRoleController::$character; // Get Achievements $achievements = $this->Achievements->getAchievementsForSeminary($seminary['id']); diff --git a/controllers/HtmlController.inc b/controllers/HtmlController.inc index 7bf8859e..dd4bc86c 100644 --- a/controllers/HtmlController.inc +++ b/controllers/HtmlController.inc @@ -50,8 +50,8 @@ // Set userdata $this->set('loggedUser', IntermediateController::$user); - $this->set('loggedSeminary', IntermediateController::$seminary); - $this->set('loggedCharacter', IntermediateController::$character); + $this->set('loggedSeminary', SeminaryRoleController::$seminary); + $this->set('loggedCharacter', SeminaryRoleController::$character); } } diff --git a/controllers/LibraryController.inc b/controllers/LibraryController.inc index 1aa78b80..a37618ae 100644 --- a/controllers/LibraryController.inc +++ b/controllers/LibraryController.inc @@ -59,7 +59,7 @@ $seminary = $this->Seminaries->getSeminaryByUrl($seminaryUrl); // Get Character - $character = IntermediateController::$character; + $character = SeminaryRoleController::$character; // Get Quest topics $questtopics = $this->Questtopics->getQuesttopicsForSeminary($seminary['id']); @@ -94,7 +94,7 @@ $seminary = $this->Seminaries->getSeminaryByUrl($seminaryUrl); // Get Character - $character = IntermediateController::$character; + $character = SeminaryRoleController::$character; // Get Questtopic $questtopic = $this->Questtopics->getQuesttopicByUrl($seminary['id'], $questtopicUrl); diff --git a/controllers/MediaController.inc b/controllers/MediaController.inc index 4036954b..16e01cbb 100644 --- a/controllers/MediaController.inc +++ b/controllers/MediaController.inc @@ -170,7 +170,7 @@ $seminary = $this->Seminaries->getSeminaryByUrl($seminaryUrl); // Get Character - $character = IntermediateController::$character; + $character = SeminaryRoleController::$character; // Get Achievement $achievement = $this->Achievements->getAchievementByUrl($seminary['id'], $achievementUrl); diff --git a/controllers/MenuController.inc b/controllers/MenuController.inc index 2be5ea8c..c254a617 100644 --- a/controllers/MenuController.inc +++ b/controllers/MenuController.inc @@ -35,7 +35,7 @@ // Set userdata $this->set('loggedUser', IntermediateController::$user); - $this->set('loggedSeminary', IntermediateController::$seminary); + $this->set('loggedSeminary', SeminaryRoleController::$seminary); } diff --git a/controllers/SeminarybarController.inc b/controllers/SeminarybarController.inc index 53039526..5ab1567b 100644 --- a/controllers/SeminarybarController.inc +++ b/controllers/SeminarybarController.inc @@ -35,15 +35,15 @@ */ public function index() { - if(is_null(IntermediateController::$seminary)) { + if(is_null(SeminaryRoleController::$seminary)) { return; } // Get Seminary - $seminary = IntermediateController::$seminary; + $seminary = SeminaryRoleController::$seminary; // Get Character - $character = IntermediateController::$character; + $character = SeminaryRoleController::$character; if(is_null($character)) { return; } diff --git a/controllers/SeminarymenuController.inc b/controllers/SeminarymenuController.inc index d827425d..5b5d780f 100644 --- a/controllers/SeminarymenuController.inc +++ b/controllers/SeminarymenuController.inc @@ -36,7 +36,7 @@ // Set userdata $this->set('loggedUser', IntermediateController::$user); - $this->set('loggedSeminary', IntermediateController::$seminary); + $this->set('loggedSeminary', SeminaryRoleController::$seminary); }