From 0e1f68b92cbc5626c528895e8044a4ef0abb61d2 Mon Sep 17 00:00:00 2001 From: Roland Haeder Date: Sun, 5 Apr 2015 23:59:13 +0200 Subject: [PATCH] Added sendGenericGetResponse() which sends a generic HTML GET response to the client. This means a header, menu, content and footer is compiled and send out to the client. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Roland Häder --- .../main/commands/class_BaseCommand.php | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/inc/classes/main/commands/class_BaseCommand.php b/inc/classes/main/commands/class_BaseCommand.php index efb9d16d..03c715ac 100644 --- a/inc/classes/main/commands/class_BaseCommand.php +++ b/inc/classes/main/commands/class_BaseCommand.php @@ -32,6 +32,76 @@ class BaseCommand extends BaseFrameworkSystem { // Call parent constructor parent::__construct($className); } + + /** + * Sends a generic HTTP response with header, menu, content and footer + * + * @param $requestInstance An instance of a class with an Requestable interface + * @param $responseInstance An instance of a class with an Responseable interface + * @return void + */ + protected function sendGenericGetResponse (Requestable $requestInstance, Responseable $responseInstance) { + // This command doesn't handle any POST requests, so only handle get request + assert(!$requestInstance->isPostRequestMethod()); + + // Get the application instance + $applicationInstance = $this->getResolverInstance()->getApplicationInstance(); + + // Prepare a template instance + $templateInstance = $this->prepareTemplateInstance($applicationInstance); + + // Transfer application data + $templateInstance->assignApplicationData($applicationInstance); + + // Load the master template + $masterTemplate = $applicationInstance->buildMasterTemplateName(); + + // Load header template + $templateInstance->loadCodeTemplate('header'); + + // Compile and assign it with a variable + $templateInstance->compileTemplate(); + $templateInstance->assignTemplateWithVariable('header', 'header'); + + // Load footer template + $templateInstance->loadCodeTemplate('footer'); + + // Compile and assign it with a variable + $templateInstance->compileTemplate(); + $templateInstance->assignTemplateWithVariable('footer', 'footer'); + + // Load the content template + $templateInstance->loadCodeTemplate($this->getResolverInstance()->getCommandName()); + + // Assign the content template with the master template as a content ... ;) + $templateInstance->assignTemplateWithVariable($applicationInstance->getAppShortName() . '_' . $this->getResolverInstance()->getCommandName(), 'main_content'); + + // Load the master template + $templateInstance->loadCodeTemplate($masterTemplate); + + // Set title + $templateInstance->assignVariable('title', $this->getLanguageInstance()->getMessage('page_' . $applicationInstance->getAppShortName() . '_' . $this->getResolverInstance()->getCommandName() . '_title')); + + // Construct the menu in every command. We could do this in BaseCommand class. But this means + // *every* command has a navigation system and that is want we don't want. + $menuInstance = ObjectFactory::createObjectByConfiguredName($applicationInstance->getAppShortName() . '_' . $this->getResolverInstance()->getCommandName() . '_menu_class', array($applicationInstance)); + + // Render the menu + $menuInstance->renderMenu(); + + // Transfer it to the template engine instance + $menuInstance->transferContentToTemplateEngine($templateInstance); + + /* + * ... and all variables. This should be merged together in a pattern + * to make things easier. A cache mechanism should be added between + * these two calls to cache compiled templates. + */ + $templateInstance->compileVariables(); + + // Get the content back from the template engine and put it in response class + $templateInstance->transferToResponse($responseInstance); + } } // [EOF] -- 2.39.5