X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=inc%2Fclasses%2Fmain%2Fcommands%2Fweb%2Fclass_WebLoginAreaCommand.php;h=63a86a72d0fbd2bfc2447262e13530df149957a1;hb=758554bdbe167d7503552e086f7955a5e851f657;hp=9908233fe20c68c4bd98d57e47c4bb98c18a6916;hpb=1cfec479b8c4a745b5b97683d22c8a431f9a3ee7;p=shipsimu.git diff --git a/inc/classes/main/commands/web/class_WebLoginAreaCommand.php b/inc/classes/main/commands/web/class_WebLoginAreaCommand.php index 9908233..63a86a7 100644 --- a/inc/classes/main/commands/web/class_WebLoginAreaCommand.php +++ b/inc/classes/main/commands/web/class_WebLoginAreaCommand.php @@ -22,6 +22,11 @@ * along with this program. If not, see . */ class WebLoginAreaCommand extends BaseCommand implements Commandable { + /** + * Name of the action + */ + private $actionName = ""; + /** * Protected constructor * @@ -32,7 +37,7 @@ class WebLoginAreaCommand extends BaseCommand implements Commandable { parent::__construct(__CLASS__); // Set special description - $this->setObjectDescription("Command for the "home" page"); + $this->setObjectDescription("Command for the "login area" page"); // Create unique ID number $this->generateUniqueId(); @@ -65,9 +70,9 @@ class WebLoginAreaCommand extends BaseCommand implements Commandable { * Prepares some general data which shall be displayed on every page * * @return void + * @todo Add some stuff here: Some personal data, app/game related data */ protected function prepareCommand () { - /* @TODO Add some stuff here: Some personal data, app/game related data */ } /** @@ -78,32 +83,24 @@ class WebLoginAreaCommand extends BaseCommand implements Commandable { * @return void */ public function execute (Requestable $requestInstance, Responseable $responseInstance) { - // Default action is the one from configuration - $actionClass = sprintf("login_%s_action_class", $this->getConfigInstance()->readConfig('login_default_action')); - $action = sprintf("login_%s", $this->getConfigInstance()->readConfig('login_default_action')); - - // Get "action" from request - $actReq = $requestInstance->getRequestElement('action'); + // Get the action instance from registry + $actionInstance = Registry::getRegistry()->getInstance('action'); - // Do we have a "action" parameter set? - if (is_string($actReq)) { - // Then use it with prefix - $actionClass = sprintf("login_%s_action_class", $actReq); - $action = sprintf("login_%s", $actReq); + // Do we have an action here? + if ($actionInstance instanceof PerformableAction) { + // Execute the action (shall not output anything, see below why) + $actionInstance->execute($requestInstance, $responseInstance); } // END - if - // Get an action instance - $actionInstance = ObjectFactory::createObjectByConfiguredName($actionClass); - - // Execute the action (shall not output anything, see below why) - $actionInstance->execute($requestInstance, $responseInstance); - // Get the application instance $appInstance = $this->getResolverInstance()->getApplicationInstance(); // Prepare a template instance $templateInstance = $this->prepareTemplateEngine($appInstance); + // Assign base URL + $templateInstance->assignConfigVariable('base_url'); + // Assign all the application's data with template variables $templateInstance->assignApplicationData($appInstance); @@ -125,16 +122,24 @@ class WebLoginAreaCommand extends BaseCommand implements Commandable { $templateInstance->assignTemplateWithVariable("footer", "footer"); // Load the matching template - $templateInstance->loadCodeTemplate($action); + $templateInstance->loadCodeTemplate($this->actionName); // Assign the template with the master template as a content ... ;) - $templateInstance->assignTemplateWithVariable($action, "content"); + $templateInstance->compileTemplate(); + $templateInstance->assignTemplateWithVariable($this->actionName, "login_content"); + + // Load main template + $templateInstance->loadCodeTemplate("login_main"); + + // Assign the main template with the master template as a content ... ;) + $templateInstance->compileTemplate(); + $templateInstance->assignTemplateWithVariable("login_main", "content"); // Load the master template $templateInstance->loadCodeTemplate($masterTemplate); // Set title - $templateInstance->assignVariable('title', $this->getLanguageInstance()->getMessage("login_{$action}_title")); + $templateInstance->assignVariable('title', $this->getLanguageInstance()->getMessage($this->actionName."_title")); // ... and all variables. This should be merged together in a pattern // to make things easier. A cache mechanism should be added between @@ -144,6 +149,50 @@ class WebLoginAreaCommand extends BaseCommand implements Commandable { // Get the content back from the template engine and put it in the response class $templateInstance->transferToResponse($responseInstance); } + + /** + * Adds extra filters to the given controller instance + * + * @param $controllerInstance A controller instance + * @param $requestInstance An instance of a class with an Requestable interface + * @return void + */ + public function addExtraFilters (Controller $controllerInstance, Requestable $requestInstance) { + // Default is no action + $actionInstance = null; + + // Default action is the one from configuration + $this->actionName = sprintf("login_%s", $this->getConfigInstance()->readConfig('login_default_action')); + + // Get "action" from request + $actReq = $requestInstance->getRequestElement('action'); + + // Do we have a "action" parameter set? + if ((is_string($actReq)) && (!empty($actReq))) { + // Then use it with prefix + $this->actionName = sprintf("login_%s", $actReq); + } // END - if + + // Get application instance + $applicationInstance = $this->getResolverInstance()->getApplicationInstance(); + + // Try to get an action resolver for the given action + try { + // Get a resolver + $actionResolver = WebActionResolver::createWebActionResolver($this->actionName, $applicationInstance); + + // Resolve the action + $actionInstance = $actionResolver->resolveAction(); + + // Add more action-specific filters + $actionInstance->addExtraFilters($controllerInstance, $requestInstance); + + // Remember this action in registry + Registry::getRegistry()->addInstance('action', $actionInstance); + } catch (InvalidActionException $e) { + // Silently ignored because no special action was found + } + } } // [EOF]