page = $page; } public function PageLoad() { $user = ServiceLocator::GetServer()->GetUserSession(); if (!$this->page->IsAuthenticated() || !$user->IsAdmin) { $this->RedirectResume(sprintf("%s%s?%s=%s", $this->page->path, Pages::LOGIN, QueryStringKeys::REDIRECT, urlencode($this->page->server->GetUrl()))); die(); } $this->page->PageLoad(); } public function IsValid() { return $this->page->IsValid(); } public function ProcessAction() { $this->page->ProcessAction(); } public function ProcessDataRequest($dataRequest) { $this->page->ProcessDataRequest($dataRequest); } public function ProcessPageLoad() { $this->page->ProcessPageLoad(); } } abstract class AdminPage extends SecurePage implements IActionPage { public function __construct($titleKey = '', $pageDepth = 1) { parent::__construct($titleKey, $pageDepth); $user = ServiceLocator::GetServer()->GetUserSession(); if (!$user->IsAdmin) { $this->RedirectResume(sprintf("%s%s?%s=%s", $this->path, Pages::LOGIN, QueryStringKeys::REDIRECT, urlencode($this->server->GetUrl()))); die(); } } public function Display($adminTemplateName) { parent::Display('Admin/' . $adminTemplateName); } public function TakingAction() { $action = $this->GetAction(); return !empty($action); } public function RequestingData() { $dataRequest = $this->GetDataRequest(); return !empty($dataRequest); } public function GetAction() { return $this->GetQuerystring(QueryStringKeys::ACTION); } public function GetDataRequest() { return $this->GetQuerystring(QueryStringKeys::DATA_REQUEST); } public function IsValid() { if (parent::IsValid()) { Log::Debug('Action passed all validations'); return true; } $errors = new ActionErrors(); $inlineErrors = array(); foreach ($this->smarty->failedValidators as $validator) { Log::Debug('Failed validator %s', $validator); $errors->Add($validator); if ($validator->ReturnsErrorResponse()) { http_response_code(400); array_merge($validator->Messages(), $inlineErrors); } } if (!empty($inlineErrors)) { $this->SetJson(implode(',', $inlineErrors)); } else{ $this->SetJson($errors); } return false; } }