From 75fa49e5179551d07bf1a7a015eef4bac8953594 Mon Sep 17 00:00:00 2001 From: Llewellyn van der Merwe Date: Thu, 31 Dec 2020 13:18:52 +0200 Subject: [PATCH] Improved the layout compiler methods. --- README.md | 2 +- admin/README.txt | 2 +- admin/compiler/joomla_3/layoutoverride.php | 20 + admin/compiler/joomla_3/settings.json | 10 + admin/helpers/compiler/a_Get.php | 437 ++++++++++++-------- admin/helpers/compiler/e_Interpretation.php | 251 ++++++++++- componentbuilder.xml | 2 +- 7 files changed, 529 insertions(+), 195 deletions(-) create mode 100644 admin/compiler/joomla_3/layoutoverride.php diff --git a/README.md b/README.md index b7aba5e42..b98019acf 100644 --- a/README.md +++ b/README.md @@ -143,7 +143,7 @@ TODO + *Author*: [Llewellyn van der Merwe](mailto:llewellyn@joomlacomponentbuilder.com) + *Name*: [Component Builder](https://github.com/vdm-io/Joomla-Component-Builder) + *First Build*: 30th April, 2015 -+ *Last Build*: 27th December, 2020 ++ *Last Build*: 31st December, 2020 + *Version*: 2.12.4 + *Copyright*: Copyright (C) 2015 - 2021 Vast Development Method. All rights reserved. + *License*: GNU General Public License version 2 or later; see LICENSE.txt diff --git a/admin/README.txt b/admin/README.txt index b7aba5e42..b98019acf 100644 --- a/admin/README.txt +++ b/admin/README.txt @@ -143,7 +143,7 @@ TODO + *Author*: [Llewellyn van der Merwe](mailto:llewellyn@joomlacomponentbuilder.com) + *Name*: [Component Builder](https://github.com/vdm-io/Joomla-Component-Builder) + *First Build*: 30th April, 2015 -+ *Last Build*: 27th December, 2020 ++ *Last Build*: 31st December, 2020 + *Version*: 2.12.4 + *Copyright*: Copyright (C) 2015 - 2021 Vast Development Method. All rights reserved. + *License*: GNU General Public License version 2 or later; see LICENSE.txt diff --git a/admin/compiler/joomla_3/layoutoverride.php b/admin/compiler/joomla_3/layoutoverride.php new file mode 100644 index 000000000..b5b26ae64 --- /dev/null +++ b/admin/compiler/joomla_3/layoutoverride.php @@ -0,0 +1,20 @@ + + * @github Joomla Component Builder + * @copyright Copyright (C) 2015 - 2018 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); +?> +###BOM### + +// No direct access to this file +defined('JPATH_BASE') or die('Restricted access');###OVERRIDE_LAYOUT_CODE### + +?>###OVERRIDE_LAYOUT_BODY### diff --git a/admin/compiler/joomla_3/settings.json b/admin/compiler/joomla_3/settings.json index 13321c9f9..1f414d7ab 100644 --- a/admin/compiler/joomla_3/settings.json +++ b/admin/compiler/joomla_3/settings.json @@ -386,6 +386,11 @@ "rename": "layout_admin", "type": "layout" }, + "layoutoverride.php": { + "path": "c0mp0n3nt/admin/layouts/VIEW", + "rename": "layoutoverride", + "type": "layoutoverride" + }, "layoutitems.php": { "path": "c0mp0n3nt/admin/layouts/VIEW", "rename": "layoutitems", @@ -576,6 +581,11 @@ "rename": "layout_site", "type": "layout" }, + "layoutoverride.php": { + "path": "c0mp0n3nt/site/layouts/VIEW", + "rename": "layoutoverride", + "type": "layoutoverride" + }, "layoutitems.php": { "path": "c0mp0n3nt/site/layouts/VIEW", "rename": "layoutitems", diff --git a/admin/helpers/compiler/a_Get.php b/admin/helpers/compiler/a_Get.php index ffef6d081..67d18ef3c 100644 --- a/admin/helpers/compiler/a_Get.php +++ b/admin/helpers/compiler/a_Get.php @@ -787,6 +787,13 @@ class Get */ public $updateSQL = array(); + /** + * The data by alias keys + * + * @var array + */ + protected $dataWithAliasKeys = array(); + /** * The Library Manager * @@ -5788,41 +5795,49 @@ class Get /** * Set Template and Layout Data * - * @param string $default The content to check - * @param string $view The view code name - * @param boolean $found The proof that something was found + * @param string $default The content to check + * @param string $view The view code name + * @param boolean $found The proof that something was found + * @param array $templates The option to pass templates keys (to avoid search) + * @param array $layouts The option to pass layout keys (to avoid search) * * @return boolean if something was found true * */ - public function setTemplateAndLayoutData($default, $view, $found = false) - { - // set the Template data - $temp1 = ComponentbuilderHelper::getAllBetween( - $default, "\$this->loadTemplate('", "')" - ); - $temp2 = ComponentbuilderHelper::getAllBetween( - $default, '$this->loadTemplate("', '")' - ); - $templates = array(); - $again = array(); - if (ComponentbuilderHelper::checkArray($temp1) - && ComponentbuilderHelper::checkArray($temp2)) + public function setTemplateAndLayoutData($default, $view, $found = false, + $templates = array(), $layouts = array() + ) { + // to check inside the templates + $again = array(); + // check if template keys were passed + if (!ComponentbuilderHelper::checkArray($templates)) { - $templates = array_merge($temp1, $temp2); - } - else - { - if (ComponentbuilderHelper::checkArray($temp1)) + // set the Template data + $temp1 = ComponentbuilderHelper::getAllBetween( + $default, "\$this->loadTemplate('", "')" + ); + $temp2 = ComponentbuilderHelper::getAllBetween( + $default, '$this->loadTemplate("', '")' + ); + if (ComponentbuilderHelper::checkArray($temp1) + && ComponentbuilderHelper::checkArray($temp2)) { - $templates = $temp1; + $templates = array_merge($temp1, $temp2); } - elseif (ComponentbuilderHelper::checkArray($temp2)) + else { - $templates = $temp2; + if (ComponentbuilderHelper::checkArray($temp1)) + { + $templates = $temp1; + } + elseif (ComponentbuilderHelper::checkArray($temp2)) + { + $templates = $temp2; + } } } - if (ComponentbuilderHelper::checkArray($templates)) + // check if we found templates + if (ComponentbuilderHelper::checkArray($templates, true)) { foreach ($templates as $template) { @@ -5845,38 +5860,50 @@ class Get } } // check if we have the template set (and nothing yet found) - if (!$found && isset($this->templateData[$this->target][$view][$template])) + if (!$found + && isset($this->templateData[$this->target][$view][$template])) { // something was found $found = true; } } } - // set the Layout data - $lay1 = ComponentbuilderHelper::getAllBetween( - $default, "JLayoutHelper::render('", "'," - ); - $lay2 = ComponentbuilderHelper::getAllBetween( - $default, 'JLayoutHelper::render("', '",' - );; - if (ComponentbuilderHelper::checkArray($lay1) - && ComponentbuilderHelper::checkArray($lay2)) + // check if layout keys were passed + if (!ComponentbuilderHelper::checkArray($layouts)) { - $layouts = array_merge($lay1, $lay2); - } - else - { - if (ComponentbuilderHelper::checkArray($lay1)) + // set the Layout data + $lay1 = ComponentbuilderHelper::getAllBetween( + $default, "JLayoutHelper::render('", "'," + ); + $lay2 = ComponentbuilderHelper::getAllBetween( + $default, 'JLayoutHelper::render("', '",' + ); + if (ComponentbuilderHelper::checkArray($lay1) + && ComponentbuilderHelper::checkArray($lay2)) { - $layouts = $lay1; + $layouts = array_merge($lay1, $lay2); } - elseif (ComponentbuilderHelper::checkArray($lay2)) + else { - $layouts = $lay2; + if (ComponentbuilderHelper::checkArray($lay1)) + { + $layouts = $lay1; + } + elseif (ComponentbuilderHelper::checkArray($lay2)) + { + $layouts = $lay2; + } } } - if (isset($layouts) && ComponentbuilderHelper::checkArray($layouts)) + // check if we found layouts + if (ComponentbuilderHelper::checkArray($layouts, true)) { + // get the other target if both + $_target = null; + if ($this->lang === 'both') + { + $_target = ($this->target === 'admin') ? 'site' : 'admin'; + } foreach ($layouts as $layout) { if (!isset($this->layoutData[$this->target]) @@ -5892,6 +5919,11 @@ class Get { // load it to the layout data array $this->layoutData[$this->target][$layout] = $data; + // check if other target is set + if ($this->lang === 'both' && $_target) + { + $this->layoutData[$_target][$layout] = $data; + } // call self to get child data $again[] = array($data['html'], $view); $again[] = array($data['php_view'], $view); @@ -5905,13 +5937,17 @@ class Get } } } + // check again if (ComponentbuilderHelper::checkArray($again)) { foreach ($again as $go) { - $found = $this->setTemplateAndLayoutData($go[0], $go[1], $found); + $found = $this->setTemplateAndLayoutData( + $go[0], $go[1], $found + ); } } + // return the proof that something was found return $found; } @@ -5928,157 +5964,215 @@ class Get */ protected function getDataWithAlias($n_ame, $table, $view) { + // if not set, get all keys in table and set by ID + $this->setDataWithAliasKeys($table); + // now check if key is found + $name = preg_replace("/[^A-Za-z]/", '', $n_ame); + if (isset($this->dataWithAliasKeys[$table][$name])) + { + $ID = $this->dataWithAliasKeys[$table][$name]; + } + elseif (isset($this->dataWithAliasKeys[$table][$n_ame])) + { + $ID = $this->dataWithAliasKeys[$table][$n_ame]; + } + else + { + return false; + } // Create a new query object. $query = $this->db->getQuery(true); $query->select('a.*'); $query->from('#__componentbuilder_' . $table . ' AS a'); - $this->db->setQuery($query); - $rows = $this->db->loadObjectList(); - foreach ($rows as $row) + $query->where( + $this->db->quoteName('a.id') . ' = ' . (int) $ID + ); + // get the other target if both + $_targets = array($this->target); + if ($this->lang === 'both') { - $k_ey = ComponentbuilderHelper::safeString($row->alias); - $key = preg_replace("/[^A-Za-z]/", '', $k_ey); - $name = preg_replace("/[^A-Za-z]/", '', $n_ame); - if ($k_ey == $n_ame || $key == $name) + $_targets = array('site', 'admin'); + } + $this->db->setQuery($query); + // get the row + $row = $this->db->loadObject(); + // we load this layout + $php_view = ''; + if ($row->add_php_view == 1 + && ComponentbuilderHelper::checkString($row->php_view)) + { + $php_view = $this->setGuiCodePlaceholder( + $this->setDynamicValues(base64_decode($row->php_view)), + array( + 'table' => $table, + 'field' => 'php_view', + 'id' => (int) $row->id, + 'type' => 'php') + ); + } + $contnent = $this->setGuiCodePlaceholder( + $this->setDynamicValues(base64_decode($row->{$table})), + array( + 'table' => $table, + 'field' => $table, + 'id' => (int) $row->id, + 'type' => 'html') + ); + // load all targets + foreach ($_targets as $_target) + { + // load the library + if (!isset($this->libManager[$_target])) { - $php_view = ''; - if ($row->add_php_view == 1 - && ComponentbuilderHelper::checkString($row->php_view)) + $this->libManager[$_target] = array(); + } + if (!isset($this->libManager[$_target][$view])) + { + $this->libManager[$_target][$view] = array(); + } + // make sure json become array + if (ComponentbuilderHelper::checkJson($row->libraries)) + { + $row->libraries = json_decode($row->libraries, true); + } + // if we have an array add it + if (ComponentbuilderHelper::checkArray($row->libraries)) + { + foreach ($row->libraries as $library) { - $php_view = $this->setGuiCodePlaceholder( - $this->setDynamicValues(base64_decode($row->php_view)), - array( - 'table' => $table, - 'field' => 'php_view', - 'id' => (int) $row->id, - 'type' => 'php') - ); - } - $contnent = $this->setGuiCodePlaceholder( - $this->setDynamicValues(base64_decode($row->{$table})), - array( - 'table' => $table, - 'field' => $table, - 'id' => (int) $row->id, - 'type' => 'html') - ); - // load the library - if (!isset($this->libManager[$this->target])) - { - $this->libManager[$this->target] = array(); - } - if (!isset($this->libManager[$this->target][$view])) - { - $this->libManager[$this->target][$view] = array(); - } - // make sure json become array - if (ComponentbuilderHelper::checkJson($row->libraries)) - { - $row->libraries = json_decode($row->libraries, true); - } - // if we have an array add it - if (ComponentbuilderHelper::checkArray($row->libraries)) - { - foreach ($row->libraries as $library) + if (!isset($this->libManager[$_target][$view][$library])) { - if (!isset($this->libManager[$this->target][$view][$library])) + if ($this->getMediaLibrary((int) $library)) { - if ($this->getMediaLibrary((int) $library)) - { - $this->libManager[$this->target][$view][(int) $library] - = true; - } + $this->libManager[$_target][$view][(int) $library] + = true; } } } - elseif (is_numeric($row->libraries) - && !isset($this->libManager[$this->target][$view][(int) $row->libraries])) + } + elseif (is_numeric($row->libraries) + && !isset($this->libManager[$_target][$view][(int) $row->libraries])) + { + if ($this->getMediaLibrary((int) $row->libraries)) { - if ($this->getMediaLibrary((int) $row->libraries)) - { - $this->libManager[$this->target][$view][(int) $row->libraries] - = true; - } + $this->libManager[$_target][$view][(int) $row->libraries] + = true; } - // load UIKIT if needed - if (2 == $this->uikit || 1 == $this->uikit) + } + // set footable to views and turn it on + if (!isset($this->footableScripts[$_target][$view]) + || !$this->footableScripts[$_target][$view]) + { + $foundFoo = $this->getFootableScripts($contnent); + if ($foundFoo) { - if (!isset($this->uikitComp[$view])) - { - $this->uikitComp[$view] = array(); - } - // set uikit to views - $this->uikitComp[$view] - = ComponentbuilderHelper::getUikitComp( - $contnent, $this->uikitComp[$view] - ); + $this->footableScripts[$_target][$view] = true; } - // set footable to views and turn it on - if (!isset($this->footableScripts[$this->target][$view]) - || !$this->footableScripts[$this->target][$view]) + if ($foundFoo && !$this->footable) { - $foundFoo = $this->getFootableScripts($contnent); - if ($foundFoo) - { - $this->footableScripts[$this->target][$view] = true; - } - if ($foundFoo && !$this->footable) - { - $this->footable = true; - } + $this->footable = true; } - // set google charts to views and turn it on - if (!isset($this->googleChart[$this->target][$view]) - || !$this->googleChart[$this->target][$view]) + } + // set google charts to views and turn it on + if (!isset($this->googleChart[$_target][$view]) + || !$this->googleChart[$_target][$view]) + { + $foundA = $this->getGoogleChart($php_view); + $foundB = $this->getGoogleChart($contnent); + if ($foundA || $foundB) { - $foundA = $this->getGoogleChart($php_view); - $foundB = $this->getGoogleChart($contnent); - if ($foundA || $foundB) - { - $this->googleChart[$this->target][$view] = true; - } - if ($foundA || $foundB && !$this->googlechart) - { - $this->googlechart = true; - } + $this->googleChart[$_target][$view] = true; } - // check for get module - if (!isset($this->getModule[$this->target][$view]) - || !$this->getModule[$this->target][$view]) + if ($foundA || $foundB && !$this->googlechart) { - $foundA = $this->getGetModule($php_view); - $foundB = $this->getGetModule($contnent); - if ($foundA || $foundB) - { - $this->getModule[$this->target][$view] = true; - } + $this->googlechart = true; + } + } + // check for get module + if (!isset($this->getModule[$_target][$view]) + || !$this->getModule[$_target][$view]) + { + $foundA = $this->getGetModule($php_view); + $foundB = $this->getGetModule($contnent); + if ($foundA || $foundB) + { + $this->getModule[$_target][$view] = true; } - - return array( - 'id' => $row->id, - 'html' => $this->setGuiCodePlaceholder( - $contnent, - array( - 'table' => $table, - 'field' => $table, - 'id' => $row->id, - 'type' => 'html' - ) - ), - 'php_view' => $this->setGuiCodePlaceholder( - $php_view, - array( - 'table' => $table, - 'field' => 'php_view', - 'id' => $row->id, - 'type' => 'php' - ) - ) - ); } } + // load UIKIT if needed + if (2 == $this->uikit || 1 == $this->uikit) + { + if (!isset($this->uikitComp[$view])) + { + $this->uikitComp[$view] = array(); + } + // set uikit to views + $this->uikitComp[$view] + = ComponentbuilderHelper::getUikitComp( + $contnent, $this->uikitComp[$view] + ); + } - return false; + return array( + 'id' => $row->id, + 'html' => $this->setGuiCodePlaceholder( + $contnent, + array( + 'table' => $table, + 'field' => $table, + 'id' => $row->id, + 'type' => 'html' + ) + ), + 'php_view' => $this->setGuiCodePlaceholder( + $php_view, + array( + 'table' => $table, + 'field' => 'php_view', + 'id' => $row->id, + 'type' => 'php' + ) + ) + ); + } + + /** + * set Data With Alias Keys + * + * @param string $table The table where to find the alias + * + * @return void + * + */ + protected function setDataWithAliasKeys($table) + { + // now check if key is found + if (!isset($this->dataWithAliasKeys[$table])) + { + // load this table keys + $this->dataWithAliasKeys[$table] = array(); + // Create a new query object. + $query = $this->db->getQuery(true); + $query->select(array('a.id', 'a.alias')); + $query->from('#__componentbuilder_' . $table . ' AS a'); + $this->db->setQuery($query); + $rows = $this->db->loadObjectList(); + // check if we have an array + if (ComponentbuilderHelper::checkArray($rows)) + { + foreach ($rows as $row) + { + // build the key + $k_ey = ComponentbuilderHelper::safeString($row->alias); + $key = preg_replace("/[^A-Za-z]/", '', $k_ey); + // set the keys + $this->dataWithAliasKeys[$table][$row->alias] = $row->id; + $this->dataWithAliasKeys[$table][$k_ey] = $row->id; + $this->dataWithAliasKeys[$table][$key] = $row->id; + } + } + } } /** @@ -6091,7 +6185,6 @@ class Get */ protected function getMediaLibrary($id) { - // check if the lib has already been set if (!isset($this->libraries[$id])) { diff --git a/admin/helpers/compiler/e_Interpretation.php b/admin/helpers/compiler/e_Interpretation.php index 083554d6f..3c017b03d 100644 --- a/admin/helpers/compiler/e_Interpretation.php +++ b/admin/helpers/compiler/e_Interpretation.php @@ -12116,7 +12116,6 @@ class Interpretation extends Fields $COMPONENT = strtoupper($component); // set uppercase view $VIEWS = strtoupper($nameListCode); - // build the body $body = array(); // check if the filter type is sidebar (1 = sidebar) @@ -12146,6 +12145,14 @@ class Interpretation extends Fields $body[] = $this->_t(1) . "}"; $body[] = ""; } + // Trigger Event: jcb_ce_onSetDefaultViewsBodyTop + $this->triggerEvent( + 'jcb_ce_onSetDefaultViewsBodyTop', + array(&$this, + &$body, + &$nameSingleCode, + &$nameListCode) + ); $body[] = "
\" method=\"post\" name=\"adminForm\" id=\"adminForm\">"; @@ -12159,6 +12166,14 @@ class Interpretation extends Fields $body[] = ""; $body[] = $this->_t(1) . "
"; $body[] = ""; + // Trigger Event: jcb_ce_onSetDefaultViewsFormTop + $this->triggerEvent( + 'jcb_ce_onSetDefaultViewsFormTop', + array(&$this, + &$body, + &$nameSingleCode, + &$nameListCode) + ); // check if the filter type is sidebar (2 = topbar) if (isset($this->adminFilterType[$nameListCode]) && $this->adminFilterType[$nameListCode] == 2) @@ -12247,7 +12262,23 @@ class Interpretation extends Fields $body[] = $this->_t(1) . ""; $body[] = $this->_t(1) . ""; + // Trigger Event: jcb_ce_onSetDefaultViewsFormBottom + $this->triggerEvent( + 'jcb_ce_onSetDefaultViewsFormBottom', + array(&$this, + &$body, + &$nameSingleCode, + &$nameListCode) + ); $body[] = ""; + // Trigger Event: jcb_ce_onSetDefaultViewsBodyBottom + $this->triggerEvent( + 'jcb_ce_onSetDefaultViewsBodyBottom', + array(&$this, + &$body, + &$nameSingleCode, + &$nameListCode) + ); return implode(PHP_EOL, $body); } @@ -12503,9 +12534,7 @@ class Interpretation extends Fields public function setEditBody(&$view) { // set view name - $nameSingleCode = ComponentbuilderHelper::safeString( - $view['settings']->name_single - ); + $nameSingleCode = $view['settings']->name_single_code; // main lang prefix $langView = $this->langPrefix . '_' . ComponentbuilderHelper::safeString($nameSingleCode, 'U'); @@ -12805,7 +12834,7 @@ class Interpretation extends Fields $tabs = array(); // sort the tabs based on key order ksort($this->tabCounter[$nameSingleCode]); - // start tab builinging loop + // start tab building loop foreach ($this->tabCounter[$nameSingleCode] as $tabNr => $tabName) { $tabWidth = 12; @@ -13516,29 +13545,211 @@ class Interpretation extends Fields */ public function setLayout($nameSingleCode, $layoutName, $items, $type) { - // first build the layout file - $target = array('admin' => $nameSingleCode); - $this->buildDynamique($target, $type, $layoutName); - // add to front if needed - if ($this->lang === 'both') + // we check if there is a local override + if (!$this->setLayoutOverride($nameSingleCode, $layoutName, $items)) { - $target = array('site' => $nameSingleCode); + // first build the layout file + $target = array('admin' => $nameSingleCode); $this->buildDynamique($target, $type, $layoutName); + // add to front if needed + if ($this->lang === 'both') + { + $target = array('site' => $nameSingleCode); + $this->buildDynamique($target, $type, $layoutName); + } + if (ComponentbuilderHelper::checkString($items)) + { + // LAYOUTITEMS <<>> + $this->fileContentDynamic[$nameSingleCode . '_' + . $layoutName][$this->hhh . 'LAYOUTITEMS' . $this->hhh] + = $items; + } + else + { + // LAYOUTITEMS <<>> + $this->fileContentDynamic[$nameSingleCode . '_' + . $layoutName][$this->hhh . 'bogus' . $this->hhh] + = 'boom'; + } } - if (ComponentbuilderHelper::checkString($items)) + } + + /** + * @param string $nameSingleCode + * @param string $layoutName + * @param string $items + * + * @return boolean true if override was found + */ + protected function setLayoutOverride($nameSingleCode, $layoutName, $items) + { + if (($data = $this->getLayoutOverride($nameSingleCode, $layoutName)) + !== false) { - // LAYOUTITEMS <<>> + // first build the layout file + $target = array('admin' => $nameSingleCode); + $this->buildDynamique($target, 'layoutoverride', $layoutName); + // add to front if needed + if ($this->lang === 'both') + { + $target = array('site' => $nameSingleCode); + $this->buildDynamique($target, 'layoutoverride', $layoutName); + } + // make sure items is an empty string (should not be needed.. but) + if (!ComponentbuilderHelper::checkString($items)) + { + $items = ''; + } + // set placeholder + $placeholder = $this->placeholders; + $placeholder[$this->hhh . 'LAYOUTITEMS' . $this->hhh] = $items; + // OVERRIDE_LAYOUT_CODE <<>> + $php_view = (array) explode(PHP_EOL, $data['php_view']); + if (ComponentbuilderHelper::checkArray($php_view)) + { + $php_view = PHP_EOL . PHP_EOL . implode(PHP_EOL, $php_view); + $this->fileContentDynamic[$nameSingleCode . '_' + . $layoutName][$this->hhh + . 'OVERRIDE_LAYOUT_CODE' . $this->hhh] + = $this->setPlaceholders( + $php_view, $placeholder + ); + } + else + { + $this->fileContentDynamic[$nameSingleCode . '_' + . $layoutName][$this->hhh + . 'OVERRIDE_LAYOUT_CODE' . $this->hhh] + = ''; + } + // OVERRIDE_LAYOUT_BODY <<>> $this->fileContentDynamic[$nameSingleCode . '_' - . $layoutName][$this->hhh . 'LAYOUTITEMS' . $this->hhh] - = $items; + . $layoutName][$this->hhh + . 'OVERRIDE_LAYOUT_BODY' . $this->hhh] + = PHP_EOL . $this->setPlaceholders( + $data['html'], $placeholder + ); + + // since override was found + return true; } - else + + return false; + } + + /** + * @param string $nameSingleCode + * @param string $layoutName + * + * @return array the layout data + */ + protected function getLayoutOverride($nameSingleCode, $layoutName) + { + // check if there is an override by component name, view name, & layout name + if ($this->setTemplateAndLayoutData( + 'override', $nameSingleCode, false, array(''), + array($this->componentCodeName . $nameSingleCode . $layoutName) + )) { - // LAYOUTITEMS <<>> - $this->fileContentDynamic[$nameSingleCode . '_' - . $layoutName][$this->hhh . 'bogus' . $this->hhh] - = 'boom'; + $data = $this->layoutData[$this->target][$this->componentCodeName + . $nameSingleCode . $layoutName]; + // remove since we will add the layout now + if ($this->lang === 'both') + { + unset( + $this->layoutData['admin'][$this->componentCodeName + . $nameSingleCode . $layoutName] + ); + unset( + $this->layoutData['site'][$this->componentCodeName + . $nameSingleCode . $layoutName] + ); + } + else + { + unset( + $this->layoutData[$this->target][$this->componentCodeName + . $nameSingleCode . $layoutName] + ); + } + + return $data; } + // check if there is an override by component name & layout name + elseif ($this->setTemplateAndLayoutData( + 'override', $nameSingleCode, false, array(''), + array($this->componentCodeName . $layoutName) + )) + { + $data = $this->layoutData[$this->target][$this->componentCodeName + . $layoutName]; + // remove since we will add the layout now + if ($this->lang === 'both') + { + unset( + $this->layoutData['admin'][$this->componentCodeName + . $layoutName] + ); + unset( + $this->layoutData['site'][$this->componentCodeName + . $layoutName] + ); + } + else + { + unset( + $this->layoutData[$this->target][$this->componentCodeName + . $layoutName] + ); + } + + return $data; + } + // check if there is an override by view & layout name + elseif ($this->setTemplateAndLayoutData( + 'override', $nameSingleCode, false, array(''), + array($nameSingleCode . $layoutName) + )) + { + $data = $this->layoutData[$this->target][$nameSingleCode + . $layoutName]; + // remove since we will add the layout now + if ($this->lang === 'both') + { + unset( + $this->layoutData['admin'][$nameSingleCode . $layoutName] + ); + unset($this->layoutData['site'][$nameSingleCode . $layoutName]); + } + else + { + unset($this->layoutData[$this->target][$layoutName]); + } + + return $data; + } + // check if there is an override by layout name (global layout) + elseif ($this->setTemplateAndLayoutData( + 'override', $nameSingleCode, false, array(''), + array($layoutName) + )) + { + $data = $this->layoutData[$this->target][$layoutName]; + // remove since we will add the layout now + if ($this->lang === 'both') + { + unset($this->layoutData['admin'][$layoutName]); + unset($this->layoutData['site'][$layoutName]); + } + else + { + unset($this->layoutData[$this->target][$layoutName]); + } + + return $data; + } + + return false; } /** diff --git a/componentbuilder.xml b/componentbuilder.xml index a1167bff2..3d87407d8 100644 --- a/componentbuilder.xml +++ b/componentbuilder.xml @@ -1,7 +1,7 @@ COM_COMPONENTBUILDER - 27th December, 2020 + 31st December, 2020 Llewellyn van der Merwe llewellyn@joomlacomponentbuilder.com http://www.joomlacomponentbuilder.com