X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=inc%2Fclasses%2Fmain%2Fcommands%2Fweb%2Fclass_WebLoginAreaCommand.php;h=98f76cd104db292415ac67d0358bd206958f0886;hb=ddac7be24465ecb1d885b3686a3037f10e2aec46;hp=8b73b2ba1367bcc14cd744d528110c331d8e2fff;hpb=9327c11e14407cce78208de01b5cdd2de87e13a3;p=shipsimu.git diff --git a/inc/classes/main/commands/web/class_WebLoginAreaCommand.php b/inc/classes/main/commands/web/class_WebLoginAreaCommand.php index 8b73b2b..98f76cd 100644 --- a/inc/classes/main/commands/web/class_WebLoginAreaCommand.php +++ b/inc/classes/main/commands/web/class_WebLoginAreaCommand.php @@ -4,7 +4,7 @@ * * @author Roland Haeder * @version 0.0.0 - * @copyright Copyright(c) 2007, 2008 Roland Haeder, this is free software + * @copyright Copyright (c) 2007, 2008 Roland Haeder, this is free software * @license GNU GPL 3.0 or any newer version * @link http://www.ship-simu.org * @@ -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 * @@ -30,22 +35,13 @@ class WebLoginAreaCommand extends BaseCommand implements Commandable { protected function __construct () { // Call parent constructor parent::__construct(__CLASS__); - - // Set special description - $this->setObjectDescription("Command for the "home" page"); - - // Create unique ID number - $this->generateUniqueId(); - - // Clean up a little - $this->removeSystemArray(); } /** * Creates an instance of this class * - * @param $resolverInstance An instance of a command resolver class - * @return $commandInstance An instance a prepared command class + * @param $resolverInstance An instance of a command resolver class + * @return $commandInstance An instance a prepared command class */ public final static function createWebLoginAreaCommand (CommandResolver $resolverInstance) { // Get new instance @@ -54,66 +50,87 @@ class WebLoginAreaCommand extends BaseCommand implements Commandable { // Set the application instance $commandInstance->setResolverInstance($resolverInstance); + // Load general data like user status and such + $commandInstance->prepareCommand(); + // Return the prepared instance return $commandInstance; } + /** + * 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 () { + } + /** * Executes the given command with given request and response objects * - * @param $requestInstance An instance of a class with an Requestable interface - * @param $responseInstance An instance of a class with an Responseable interface + * @param $requestInstance An instance of a class with an Requestable interface + * @param $responseInstance An instance of a class with an Responseable interface * @return void */ public function execute (Requestable $requestInstance, Responseable $responseInstance) { - // Default action is the one from configuration - $action = sprintf("login_%s", $this->getConfigInstance()->readConfig('login_default_action')); + // Get the action instance from registry + $actionInstance = Registry::getRegistry()->getInstance('action'); + + // 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 the application instance $appInstance = $this->getResolverInstance()->getApplicationInstance(); // Prepare a template instance - $templateInstance = $this->prepareTemplateEngine($appInstance); + $templateInstance = $this->prepareTemplateInstance($appInstance); + + // Assign base URL + $templateInstance->assignConfigVariable('base_url'); + + // Assign all the application's data with template variables + $templateInstance->assignApplicationData($appInstance); // Load the master template $masterTemplate = $appInstance->getMasterTemplate(); // Load header template - $templateInstance->loadCodeTemplate("header"); + $templateInstance->loadCodeTemplate('header'); // Compile and assign it with a variable $templateInstance->compileTemplate(); - $templateInstance->assignTemplateWithVariable("header", "header"); + $templateInstance->assignTemplateWithVariable('header', 'header'); // Load footer template - $templateInstance->loadCodeTemplate("footer"); + $templateInstance->loadCodeTemplate('footer'); // Compile and assign it with a variable $templateInstance->compileTemplate(); - $templateInstance->assignTemplateWithVariable("footer", "footer"); - - // Get "action" from request - $actReq = $requestInstance->getRequestElement("action"); - - // Do we have a "action" parameter set? - if (is_string($actReq)) { - // Then use it with prefix - $action = sprintf("login_%s", $actReq); - } // END - if - - // @TODO Do the action somewhere here + $templateInstance->assignTemplateWithVariable('footer', 'footer'); // Load the matching template - $templateInstance->loadCodeTemplate($action); + $templateInstance->loadCodeTemplate('action_' . $this->actionName); // Assign the template with the master template as a content ... ;) - $templateInstance->assignTemplateWithVariable($action, "content"); + $templateInstance->compileTemplate(); + $templateInstance->assignTemplateWithVariable('action_' . $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 @@ -123,6 +140,57 @@ 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. An corresponding action class must now exist! + * + * @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; + + // Get registry + $registryInstance = Registry::getRegistry(); + + // Get our application instance from the registry + $appInstance = $registryInstance->getInstance('application'); + + // Default action is the one from configuration + $this->actionName = sprintf("%s_login_%s", + str_replace("-", "_", $appInstance->getAppShortName()), + $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("%s_login_%s", + str_replace("-", "_", $appInstance->getAppShortName()), + $actReq + ); + } // END - if + + // Get application instance + $applicationInstance = $this->getResolverInstance()->getApplicationInstance(); + + // 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); + } } // [EOF]