From: Roland Häder Date: Sat, 5 Sep 2009 20:03:35 +0000 (+0000) Subject: Menu engine heavily extended, misc rewrites: X-Git-Url: https://git.mxchange.org/?p=core.git;a=commitdiff_plain;h=f9100a45eb170c0de46b9f73e88508b03ede00d0 Menu engine heavily extended, misc rewrites: - Template engine MenuTemplateEngine heavily extended with a lot basic methods (maybe we need call the menu class in some methods?) - 'template_class' rewritten to 'web_template_class' to be similar like the other config entries - Attribute $imageInstance centralized in BaseFrameworkSystem --- diff --git a/inc/classes/main/class_BaseFrameworkSystem.php b/inc/classes/main/class_BaseFrameworkSystem.php index f297db74..afb1cfaa 100644 --- a/inc/classes/main/class_BaseFrameworkSystem.php +++ b/inc/classes/main/class_BaseFrameworkSystem.php @@ -93,6 +93,11 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { */ private $menuInstance = null; + /** + * Instance of the image + */ + private $imageInstance = null; + /** * The real class name */ @@ -679,7 +684,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { } // Initialize the template engine - $templateInstance = ObjectFactory::createObjectByConfiguredName('template_class', array($appInstance)); + $templateInstance = ObjectFactory::createObjectByConfiguredName('web_template_class', array($appInstance)); // Return the prepared instance return $templateInstance; @@ -1229,6 +1234,25 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { protected final function getMenuInstance () { return $this->menuInstance; } + + /** + * Setter for image instanxe + * + * @param $imageInstance An instance of an image + * @return void + */ + public final function setImageInstance (BaseImage $imageInstance) { + $this->imageInstance = $imageInstance; + } + + /** + * Getter for image instanxe + * + * @return $imageInstance An instance of an image + */ + public final function getImageInstance () { + return $this->imageInstance; + } } // [EOF] diff --git a/inc/classes/main/commands/web/class_WebResendLinkCommand.php b/inc/classes/main/commands/web/class_WebResendLinkCommand.php index 633a2016..014c05a3 100644 --- a/inc/classes/main/commands/web/class_WebResendLinkCommand.php +++ b/inc/classes/main/commands/web/class_WebResendLinkCommand.php @@ -79,7 +79,7 @@ class WebResendLinkCommand extends BaseCommand implements Commandable { $userInstance->updateDatabaseField(UserDatabaseWrapper::DB_COLUMN_CONFIRM_HASH, $hashedString); // Re-set config entry to mailer engine - $this->getConfigInstance()->setConfigEntry('template_class', $this->getConfigInstance()->getConfigEntry('mail_template_class')); + $this->getConfigInstance()->setConfigEntry('web_template_class', $this->getConfigInstance()->getConfigEntry('mail_template_class')); // Prepare the template engine $templateInstance = $this->prepareTemplateInstance($appInstance); diff --git a/inc/classes/main/response/image/class_ImageResponse.php b/inc/classes/main/response/image/class_ImageResponse.php index bcf0c157..dceb517d 100644 --- a/inc/classes/main/response/image/class_ImageResponse.php +++ b/inc/classes/main/response/image/class_ImageResponse.php @@ -25,11 +25,6 @@ * Michal Cihar , licensed under GNU GPL 2.0. */ class ImageResponse extends BaseResponse implements Responseable { - /** - * Instance of the image - */ - private $imageInstance = null; - /** * Protected constructor * @@ -71,7 +66,7 @@ class ImageResponse extends BaseResponse implements Responseable { $cfg = $this->getConfigInstance(); // Set new template engine - $cfg->setConfigEntry('template_class' , $cfg->getConfigEntry('image_template_class')); + $cfg->setConfigEntry('web_template_class' , $cfg->getConfigEntry('image_template_class')); $cfg->setConfigEntry('raw_template_extension' , '.img'); $cfg->setConfigEntry('code_template_extension', '.xml'); $cfg->setConfigEntry('tpl_base_path' , 'templates/images/'); @@ -236,25 +231,6 @@ class ImageResponse extends BaseResponse implements Responseable { } // END - if } - /** - * Setter for image instanxe - * - * @param $imageInstance An instance of an image - * @return void - */ - public final function setImageInstance (BaseImage $imageInstance) { - $this->imageInstance = $imageInstance; - } - - /** - * Getter for image instanxe - * - * @return $imageInstance An instance of an image - */ - public final function getImageInstance () { - return $this->imageInstance; - } - /** * Getter for default command * diff --git a/inc/classes/main/template/image/class_ImageTemplateEngine.php b/inc/classes/main/template/image/class_ImageTemplateEngine.php index 19b83c77..908e4265 100644 --- a/inc/classes/main/template/image/class_ImageTemplateEngine.php +++ b/inc/classes/main/template/image/class_ImageTemplateEngine.php @@ -51,11 +51,6 @@ class ImageTemplateEngine extends BaseTemplateEngine implements CompileableTempl 'text' ); - /** - * Image instance - */ - private $imageInstance = null; - /** * Current main node */ @@ -217,7 +212,7 @@ class ImageTemplateEngine extends BaseTemplateEngine implements CompileableTempl $methodName = 'finish' . $this->convertToClassName($nodeName); // Call the corresponding method - call_user_func_array(array($this->imageInstance, $methodName), array()); + call_user_func_array(array($this->getImageInstance(), $methodName), array()); } /** @@ -269,7 +264,7 @@ class ImageTemplateEngine extends BaseTemplateEngine implements CompileableTempl $className = $this->convertToClassName($imageType.'_image'); // And try to initiate it - $this->imageInstance = ObjectFactory::createObjectByName($className, array($this)); + $this->setImageInstance(ObjectFactory::createObjectByName($className, array($this))); // Set current main node to type $this->currMainNode = 'type'; @@ -283,7 +278,7 @@ class ImageTemplateEngine extends BaseTemplateEngine implements CompileableTempl */ private function setImageResolution () { // Call the image class - $this->imageInstance->initResolution(); + $this->getImageInstance()->initResolution(); // Current main node is resolution $this->currMainNode = 'resolution'; @@ -297,7 +292,7 @@ class ImageTemplateEngine extends BaseTemplateEngine implements CompileableTempl */ private function setImageBase () { // Call the image class - $this->imageInstance->initBase(); + $this->getImageInstance()->initBase(); // Current main node is resolution $this->currMainNode = 'base'; @@ -311,7 +306,7 @@ class ImageTemplateEngine extends BaseTemplateEngine implements CompileableTempl */ private function setImageBackgroundColor () { // Call the image class - $this->imageInstance->initBackgroundColor(); + $this->getImageInstance()->initBackgroundColor(); // Current main node is background-color $this->currMainNode = 'background-color'; @@ -325,7 +320,7 @@ class ImageTemplateEngine extends BaseTemplateEngine implements CompileableTempl */ private function setImageForegroundColor () { // Call the image class - $this->imageInstance->initForegroundColor(); + $this->getImageInstance()->initForegroundColor(); // Current main node is foreground-color $this->currMainNode = 'foreground-color'; @@ -340,7 +335,7 @@ class ImageTemplateEngine extends BaseTemplateEngine implements CompileableTempl */ private function setImageImageString ($groupable = 'single') { // Call the image class - $this->imageInstance->initImageString($groupable); + $this->getImageInstance()->initImageString($groupable); // Current main node is foreground-color $this->currMainNode = 'image-string'; @@ -354,7 +349,7 @@ class ImageTemplateEngine extends BaseTemplateEngine implements CompileableTempl */ private function setImagePropertyName ($imageName) { // Call the image class - $this->imageInstance->setImageName($imageName); + $this->getImageInstance()->setImageName($imageName); } /** @@ -365,7 +360,7 @@ class ImageTemplateEngine extends BaseTemplateEngine implements CompileableTempl */ private function setImagePropertyWidth ($width) { // Call the image class - $this->imageInstance->setWidth($width); + $this->getImageInstance()->setWidth($width); } /** @@ -376,7 +371,7 @@ class ImageTemplateEngine extends BaseTemplateEngine implements CompileableTempl */ private function setImagePropertyHeight ($height) { // Call the image class - $this->imageInstance->setHeight($height); + $this->getImageInstance()->setHeight($height); } /** @@ -387,7 +382,7 @@ class ImageTemplateEngine extends BaseTemplateEngine implements CompileableTempl */ private function setImagePropertyRed ($red) { // Call the image class - $this->imageInstance->setRed($red); + $this->getImageInstance()->setRed($red); } /** @@ -398,7 +393,7 @@ class ImageTemplateEngine extends BaseTemplateEngine implements CompileableTempl */ private function setImagePropertyGreen ($green) { // Call the image class - $this->imageInstance->setGreen($green); + $this->getImageInstance()->setGreen($green); } /** @@ -409,7 +404,7 @@ class ImageTemplateEngine extends BaseTemplateEngine implements CompileableTempl */ private function setImagePropertyBlue ($blue) { // Call the image class - $this->imageInstance->setBlue($blue); + $this->getImageInstance()->setBlue($blue); } /** @@ -420,7 +415,7 @@ class ImageTemplateEngine extends BaseTemplateEngine implements CompileableTempl */ private function setImagePropertyStringName ($stringName) { // Call the image class - $this->imageInstance->setStringName($stringName); + $this->getImageInstance()->setStringName($stringName); } /** @@ -431,7 +426,7 @@ class ImageTemplateEngine extends BaseTemplateEngine implements CompileableTempl */ private function setImagePropertyFontSize ($fontSize) { // Call the image class - $this->imageInstance->setFontSize($fontSize); + $this->getImageInstance()->setFontSize($fontSize); } /** @@ -442,7 +437,7 @@ class ImageTemplateEngine extends BaseTemplateEngine implements CompileableTempl */ private function setImagePropertyText ($imageString) { // Call the image class - $this->imageInstance->setString($imageString); + $this->getImageInstance()->setString($imageString); } /** @@ -453,7 +448,7 @@ class ImageTemplateEngine extends BaseTemplateEngine implements CompileableTempl */ private function setImagePropertyX ($x) { // Call the image class - $this->imageInstance->setX($x); + $this->getImageInstance()->setX($x); } /** @@ -464,7 +459,7 @@ class ImageTemplateEngine extends BaseTemplateEngine implements CompileableTempl */ private function setImagePropertyY ($y) { // Call the image class - $this->imageInstance->setY($y); + $this->getImageInstance()->setY($y); } /** @@ -479,9 +474,9 @@ class ImageTemplateEngine extends BaseTemplateEngine implements CompileableTempl $this->getGenericBasePath(), 'images/_cache', md5( - $this->imageInstance->getImageName() . ':' . $this->__toString() . ':' . $this->imageInstance->__toString() + $this->getImageInstance()->getImageName() . ':' . $this->__toString() . ':' . $this->getImageInstance()->__toString() ), - $this->imageInstance->getImageType() + $this->getImageInstance()->getImageType() ); // Return it @@ -496,7 +491,7 @@ class ImageTemplateEngine extends BaseTemplateEngine implements CompileableTempl */ public function transferToResponse (Responseable $responseInstance) { // Set the image instance - $responseInstance->setImageInstance($this->imageInstance); + $responseInstance->setImageInstance($this->getImageInstance()); } /** diff --git a/inc/classes/main/template/menu/class_MenuTemplateEngine.php b/inc/classes/main/template/menu/class_MenuTemplateEngine.php index 32c92ea1..f12b4700 100644 --- a/inc/classes/main/template/menu/class_MenuTemplateEngine.php +++ b/inc/classes/main/template/menu/class_MenuTemplateEngine.php @@ -35,6 +35,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla * Sub nodes in the XML tree */ private $subNodes = array( + 'entries-content', 'title', 'entry', 'anchor', @@ -51,7 +52,12 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla /** * Current main node */ - private $currMainNode = ''; + private $curr = array(); + + /** + * Content from depency + */ + private $depencyContent = array(); /** * Protected constructor @@ -147,7 +153,17 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla * @return $currMainNode Current main node */ public final function getCurrMainNode () { - return $this->currMainNode; + return $this->curr['main_node']; + } + + /** + * Setter for current main node + * + * @param $element Element name to set as current main node + * @return $currMainNode Current main node + */ + private final function setCurrMainNode ($element) { + $this->curr['main_node'] = (string) $element; } /** @@ -191,10 +207,10 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla $methodName = 'startMenu' . $this->convertToClassName($element); // Set it - $this->currMainNode = $element; + $this->setCurrMainNode($element); } elseif (in_array($element, $this->getSubNodes())) { // Sub node found - $methodName = 'setMenuProperty' . $this->convertToClassName($element); + $methodName = 'startMenu' . $this->convertToClassName($element); } elseif ($element != 'menu') { // Invalid node name found throw new InvalidXmlNodeException(array($this, $element, $attributes), XmlParser::EXCEPTION_XML_NODE_UNKNOWN); @@ -229,7 +245,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla // Call the corresponding method //* DEBUG: */ echo "call: ".$methodName."
\n"; - call_user_func_array(array($this->getMenuInstance(), $methodName), array()); + call_user_func_array(array($this, $methodName), array()); } /** @@ -251,17 +267,322 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla } // END - if // Unfinished work! - $this->partialStub("Handling extra characters is not yet supported!"); + $this->partialStub('Handling extra characters is not yet supported! length='.strlen($characters)); + } + + /** + * Handles the template depency for given node + * + * @param $node The node we should load a depency template + * @param $templateDepency A template to load to satisfy depencies + * @return void + */ + private function handleTemplateDepency ($node, $templateDepency) { + // Is the template depency set? + if ((!empty($templateDepency)) && (!isset($this->depencyContent[$node]))) { + // Get a temporay menu template instance + $templateInstance = ObjectFactory::createObjectByConfiguredName('menu_template_class', array($this->getApplicationInstance(), $this->getMenuInstance())); + + // Then load it + $templateInstance->loadMenuTemplate($templateDepency); + + // Get an XmlParser instance + $templateInstance->renderXmlContent(); + + // Parse the template's content contents + $this->depencyContent[$node] = $templateInstance->getRawTemplateData(); + } // END - if } /** * Intializes the menu * + * @param $templateDepency A template to load to satisfy depencies * @return void * @todo Add cache creation here */ - private function initMenu () { - // Unfinished work! + private function initMenu ($templateDepency = '') { + // Get web template engine + $this->setTemplateInstance(ObjectFactory::createObjectByConfiguredName('web_template_class', array($this->getApplicationInstance()))); + + // Handle the depency template + $this->handleTemplateDepency('menu', $templateDepency); + + // Load the header template for this page + $this->getTemplateInstance()->loadCodeTemplate('menu_global_start'); + + // Set the variable group to page + $this->setVariableGroup('menu'); + + // Set its content in this template instance + $this->assignVariable('menu_start', $this->getTemplateInstance()->getRawTemplateData()); + } + + /** + * Finishes the menu + * + * @return void + */ + private function finishMenu () { + // Load the header template for this page + $this->getTemplateInstance()->loadCodeTemplate('menu_global_end'); + + // Set the variable group to page + $this->setVariableGroup('menu'); + + // Set its content in this template instance + $this->assignVariable('menu_end', $this->getTemplateInstance()->getRawTemplateData()); + } + + /** + * Starts the menu entries by loading a (maybe) provided template depency + * + * @param $templateDepency A template to load to satisfy depencies + * @return void + */ + private function startMenuEntries ($templateDepency = '') { + // Handle the depency template + $this->handleTemplateDepency('entries', $templateDepency); + + // Load the header template for this page + $this->getTemplateInstance()->loadCodeTemplate('menu_entries_start'); + + // Set the variable group to page + $this->setVariableGroup('menu'); + + // Set its content in this template instance + $this->assignVariable('entries_start', $this->getTemplateInstance()->getRawTemplateData()); + } + + /** + * Finishes the menu entries + * + * @return void + */ + private function finishEntries () { + // Load the header template for this page + $this->getTemplateInstance()->loadCodeTemplate('menu_entries_end'); + + // Set the variable group to page + $this->setVariableGroup('menu'); + + // Set its content in this template instance + $this->assignVariable('entries_end', $this->getTemplateInstance()->getRawTemplateData()); + } + + /** + * Starts the menu header + * + * @return void + */ + private function startMenuHeader () { + // Do we have a template instance? + if (is_null($this->getTemplateInstance())) { + // Init template instance for underlaying web templates + $templateInstance = ObjectFactory::createObjectByConfiguredName('web_template_class'); + + // Set it in this template engine + $this->setTemplateInstance($templateInstance); + } // END - if + + // Load the header template for this page + $this->getTemplateInstance()->loadCodeTemplate('menu_header_start'); + + // Set the variable group to page + $this->setVariableGroup('menu'); + + // Set its content in this template instance + $this->assignVariable('header', $this->getTemplateInstance()->getRawTemplateData()); + } + + /** + * Finishes the menu header + * + * @return void + */ + private function finishHeader () { + // Load the header template for this page + $this->getTemplateInstance()->loadCodeTemplate('menu_header_end'); + + // Set the variable group to page + $this->setVariableGroup('menu'); + + // Set its content in this template instance + $this->assignVariable('header_end', $this->getTemplateInstance()->getRawTemplateData()); + } + + /** + * Starts the menu footer + * + * @return void + */ + private function startMenuFooter () { + // Do we have a template instance? + if (is_null($this->getTemplateInstance())) { + // Init template instance for underlaying web templates + $templateInstance = ObjectFactory::createObjectByConfiguredName('web_template_class'); + + // Set it in this template engine + $this->setTemplateInstance($templateInstance); + } // END - if + + // Load the footer template for this page + $this->getTemplateInstance()->loadCodeTemplate('menu_footer_start'); + + // Set the variable group to page + $this->setVariableGroup('menu'); + + // Set its content in this template instance + $this->assignVariable('footer', $this->getTemplateInstance()->getRawTemplateData()); + } + + /** + * Finishes the menu footer + * + * @return void + */ + private function finishFooter () { + // Load the footer template for this page + $this->getTemplateInstance()->loadCodeTemplate('menu_footer_end'); + + // Set the variable group to page + $this->setVariableGroup('menu'); + + // Set its content in this template instance + $this->assignVariable('footer_end', $this->getTemplateInstance()->getRawTemplateData()); + } + + /** + * Starts the menu property 'title' + * + * @param $id Id of the menu + * @param $class The title to add to the menu + * @return void + */ + private function startMenuTitle ($id, $class) { + // Set id as current + $this->curr['id'] = $id; + + // Load the title template for this page + $this->getTemplateInstance()->loadCodeTemplate('menu_title_' . $id . '_start'); + + // Set the variable group to page + $this->setVariableGroup('menu'); + + // Set its content in this template instance + $this->assignVariable('title_start_' . $this->curr['id'], $this->getTemplateInstance()->getRawTemplateData()); + } + + /** + * Finishes the title node by added another template to the menu + * + * @return void + */ + private function finishTitle () { + // Load the title template for this page + $this->getTemplateInstance()->loadCodeTemplate('menu_title_' . $this->curr['id'] . '_end'); + + // Set the variable group to page + $this->setVariableGroup('menu'); + + // Set its content in this template instance + $this->assignVariable('title_end_' . $this->curr['id'], $this->getTemplateInstance()->getRawTemplateData()); + } + + /** + * Starts the menu text + * + * @return void + */ + private function startMenuText () { + // Do we have a template instance? + if (is_null($this->getTemplateInstance())) { + // Init template instance for underlaying web templates + $templateInstance = ObjectFactory::createObjectByConfiguredName('web_template_class'); + + // Set it in this template engine + $this->setTemplateInstance($templateInstance); + } // END - if + + // Load the text template for this page + $this->getTemplateInstance()->loadCodeTemplate('menu_text_start'); + + // Set the variable group to page + $this->setVariableGroup('menu'); + + // Set its content in this template instance + $this->assignVariable('text', $this->getTemplateInstance()->getRawTemplateData()); + } + + /** + * Finishes the menu text + * + * @return void + */ + private function finishText () { + // Load the text template for this page + $this->getTemplateInstance()->loadCodeTemplate('menu_text_end'); + + // Set the variable group to page + $this->setVariableGroup('menu'); + + // Set its content in this template instance + $this->assignVariable('text_end', $this->getTemplateInstance()->getRawTemplateData()); + } + + /** + * Starts the menu property 'entry' + * + * @param $id Id of the menu + * @return void + */ + private function startMenuEntry ($id) { + // Set id as current + $this->curr['entry_id'] = $id; + + // Load the entry template for this page + $this->getTemplateInstance()->loadCodeTemplate('menu_entry_' . $id . '_start'); + + // Set the variable group to page + $this->setVariableGroup('menu'); + + // Set its content in this template instance + $this->assignVariable('entry_start_' . $this->curr['id'], $this->getTemplateInstance()->getRawTemplateData()); + } + + /** + * Finishes the entry node by added another template to the menu + * + * @return void + */ + private function finishEntry () { + // Load the entry template for this page + $this->getTemplateInstance()->loadCodeTemplate('menu_entry_' . $this->curr['entry_id'] . '_end'); + + // Set the variable group to page + $this->setVariableGroup('menu'); + + // Set its content in this template instance + $this->assignVariable('entry_end_' . $this->curr['id'], $this->getTemplateInstance()->getRawTemplateData()); + } + /** + * Starts the menu property 'anchor' + * + * @param $id Id of the anchor + * @param $link Link text of the anchor + * @param $title Link title of the anchor + * @return void + */ + private function startMenuAnchor ($id, $link, $title) { + $this->partialStub('id='.$id.',link='.$link.',title='.$title); + } + + /** + * Finishes the anchor node by added another template to the menu + * + * @return void + */ + private function finishAnchor () { $this->partialStub('Please implement this method.'); } @@ -277,7 +598,9 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla $this->getGenericBasePath(), 'menus/_cache', md5( - $this->getMenuInstance()->getMenuName() . ':' . $this->__toString() . ':' . $this->getMenuInstance()->__toString() + $this->getMenuInstance()->getMenuName() . ':' . + $this->__toString() . ':' . + $this->getMenuInstance()->__toString() ), $this->getMenuInstance()->getMenuType() ); diff --git a/inc/config.php b/inc/config.php index 65bc3c56..9e33cfad 100644 --- a/inc/config.php +++ b/inc/config.php @@ -90,7 +90,7 @@ $cfg->setConfigEntry('application_path', $cfg->getConfigEntry('base_path') . $cf $cfg->setConfigEntry('compile_output_path', 'templates/_compiled/'); // CFG: TEMPLATE-CLASS -$cfg->setConfigEntry('template_class', 'WebTemplateEngine'); +$cfg->setConfigEntry('web_template_class', 'WebTemplateEngine'); // CFG: DEBUG-CLASS $cfg->setConfigEntry('debug_class', 'DebugWebOutput');