Skip to content

Commit 04d1503

Browse files
committed
Fix #1216 and the fallback theme
1 parent a8bced3 commit 04d1503

File tree

774 files changed

+341
-75
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

774 files changed

+341
-75
lines changed

.phpstan.dist.baseline.neon

Lines changed: 206 additions & 38 deletions
Large diffs are not rendered by default.

.phpstan.dist.neon

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -77,33 +77,33 @@ parameters:
7777
# @todo add classes to widgets
7878
message: '#^Variable \$this might not be defined\.$#'
7979
paths:
80-
- app/design/adminhtml/default/default/template/api/usernroles.phtml
81-
- app/design/adminhtml/default/default/template/dashboard/searches.phtml
82-
- app/design/adminhtml/default/default/template/dashboard/store/switcher.phtml
83-
- app/design/adminhtml/default/default/template/empty.phtml
84-
- app/design/adminhtml/default/default/template/overlay_popup.phtml
85-
- app/design/adminhtml/default/default/template/popup.phtml
86-
- app/design/adminhtml/default/default/template/promo/form.phtml
87-
- app/design/adminhtml/default/default/template/rating/stars/detailed.phtml
88-
- app/design/adminhtml/default/default/template/review/add.phtml
89-
- app/design/adminhtml/default/default/template/sales/billing/agreement/form.phtml
90-
- app/design/adminhtml/default/default/template/sales/items/renderer/default.phtml
91-
- app/design/adminhtml/default/default/template/sales/order/shipment/create/items/renderer/configurable.phtml
92-
- app/design/adminhtml/default/default/template/sales/order/totals/discount.phtml
93-
- app/design/adminhtml/default/default/template/sales/order/totals/due.phtml
94-
- app/design/adminhtml/default/default/template/sales/order/totals/footer.phtml
95-
- app/design/adminhtml/default/default/template/sales/order/totals/grand.phtml
96-
- app/design/adminhtml/default/default/template/sales/order/totals/item.phtml
97-
- app/design/adminhtml/default/default/template/sales/order/totals/main.phtml
98-
- app/design/adminhtml/default/default/template/sales/order/totals/paid.phtml
99-
- app/design/adminhtml/default/default/template/sales/order/totals/refunded.phtml
100-
- app/design/adminhtml/default/default/template/sales/order/totals/shipping.phtml
101-
- app/design/adminhtml/default/default/template/sales/order/totals/subtotal.phtml
102-
- app/design/adminhtml/default/default/template/sales/order/view/tracking.phtml
103-
- app/design/adminhtml/default/default/template/system/info.phtml
104-
- app/design/adminhtml/default/default/template/tax/class/page/edit.phtml
105-
- app/design/adminhtml/default/default/template/tax/toolbar/class/save.phtml
106-
- app/design/adminhtml/default/default/template/tax/toolbar/rule/save.phtml
80+
- app/design/adminhtml/base/default/template/api/usernroles.phtml
81+
- app/design/adminhtml/base/default/template/dashboard/searches.phtml
82+
- app/design/adminhtml/base/default/template/dashboard/store/switcher.phtml
83+
- app/design/adminhtml/base/default/template/empty.phtml
84+
- app/design/adminhtml/base/default/template/overlay_popup.phtml
85+
- app/design/adminhtml/base/default/template/popup.phtml
86+
- app/design/adminhtml/base/default/template/promo/form.phtml
87+
- app/design/adminhtml/base/default/template/rating/stars/detailed.phtml
88+
- app/design/adminhtml/base/default/template/review/add.phtml
89+
- app/design/adminhtml/base/default/template/sales/billing/agreement/form.phtml
90+
- app/design/adminhtml/base/default/template/sales/items/renderer/default.phtml
91+
- app/design/adminhtml/base/default/template/sales/order/shipment/create/items/renderer/configurable.phtml
92+
- app/design/adminhtml/base/default/template/sales/order/totals/discount.phtml
93+
- app/design/adminhtml/base/default/template/sales/order/totals/due.phtml
94+
- app/design/adminhtml/base/default/template/sales/order/totals/footer.phtml
95+
- app/design/adminhtml/base/default/template/sales/order/totals/grand.phtml
96+
- app/design/adminhtml/base/default/template/sales/order/totals/item.phtml
97+
- app/design/adminhtml/base/default/template/sales/order/totals/main.phtml
98+
- app/design/adminhtml/base/default/template/sales/order/totals/paid.phtml
99+
- app/design/adminhtml/base/default/template/sales/order/totals/refunded.phtml
100+
- app/design/adminhtml/base/default/template/sales/order/totals/shipping.phtml
101+
- app/design/adminhtml/base/default/template/sales/order/totals/subtotal.phtml
102+
- app/design/adminhtml/base/default/template/sales/order/view/tracking.phtml
103+
- app/design/adminhtml/base/default/template/system/info.phtml
104+
- app/design/adminhtml/base/default/template/tax/class/page/edit.phtml
105+
- app/design/adminhtml/base/default/template/tax/toolbar/class/save.phtml
106+
- app/design/adminhtml/base/default/template/tax/toolbar/rule/save.phtml
107107
- app/design/frontend/base/default/template/bundle/catalog/product/list/partof.phtml
108108
- app/design/frontend/base/default/template/bundle/catalog/product/view/options/notice.phtml
109109
- app/design/frontend/base/default/template/catalog/category/page.phtml

app/code/core/Mage/Adminhtml/Controller/Action.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -145,15 +145,15 @@ public function preDispatch()
145145
{
146146
// get legacy theme choice form backend config
147147
if (Mage::getStoreConfigFlag('admin/design/use_legacy_theme')) {
148-
$theme = Mage::getConfig()->getNode('stores/admin/design/theme/default');
148+
$package = Mage::getConfig()->getNode('stores/admin/design/package/name');
149149
} else {
150-
$theme = Mage::getConfig()->getNode('stores/admin/design/theme/openmage');
150+
$package = Mage::getConfig()->getNode('stores/admin/design/package/openmage');
151151
}
152152

153153
Mage::getDesign()
154154
->setArea($this->_currentArea)
155-
->setPackageName((string) Mage::getConfig()->getNode('stores/admin/design/package/name'))
156-
->setTheme((string) $theme);
155+
->setPackageName((string) $package)
156+
->setTheme((string) Mage::getConfig()->getNode('stores/admin/design/theme/default'));
157157
foreach (['layout', 'template', 'skin', 'locale'] as $type) {
158158
if ($value = (string) Mage::getConfig()->getNode("stores/admin/design/theme/{$type}")) {
159159
Mage::getDesign()->setTheme($type, $value);

app/code/core/Mage/Adminhtml/etc/config.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,10 +224,10 @@
224224
<design>
225225
<package>
226226
<name>default</name>
227+
<openmage>openmage</openmage>
227228
</package>
228229
<theme>
229230
<default>default</default>
230-
<openmage>openmage</openmage>
231231
</theme>
232232
</design>
233233
</admin>

app/code/core/Mage/Core/Model/Design/Fallback.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,24 @@ public function getFallbackScheme($area, $package, $theme)
8080
$cacheKey = $area . '/' . $package . '/' . $theme;
8181

8282
if (!isset($this->_cachedSchemes[$cacheKey])) {
83+
84+
//First we have to check if theme exists
85+
$path = $area . DS . $package . DS . $theme;
86+
$fallback = false;
87+
if (!is_dir(Mage::getBaseDir('design') . DS . $path)) {
88+
//Fallback to default
89+
$theme = (string) Mage::getConfig()->getNode('stores/admin/design/theme/default');
90+
$fallback = true;
91+
}
8392
if ($this->_isInheritanceDefined($area, $package, $theme)) {
8493
$scheme = $this->_getFallbackScheme($area, $package, $theme);
8594
} else {
8695
$scheme = $this->_getLegacyFallbackScheme();
8796
}
97+
if ($fallback) {
98+
$first = array_shift($scheme);
99+
$scheme = array_merge([$first], [['_package' => $package, '_theme' => $theme]], $scheme);
100+
}
88101

89102
$this->_cachedSchemes[$cacheKey] = $scheme;
90103
}

app/code/core/Mage/Core/Model/Layout/Update.php

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,7 @@ public function getFileLayoutUpdatesXml($area, $package, $theme, $storeId = null
425425
$layoutXml = null;
426426
$elementClass = $this->getElementClass();
427427
$updatesRoot = Mage::app()->getConfig()->getNode($area . '/layout/updates');
428+
$updatesRoot = $this->addFallbackThemesLayoutUpdates($updatesRoot);
428429
Mage::dispatchEvent('core_layout_update_updates_get_after', ['updates' => $updatesRoot]);
429430
$updates = $updatesRoot->asArray();
430431
$themeUpdates = Mage::getSingleton('core/design_config')->getNode("$area/$package/$theme/layout/updates");
@@ -465,4 +466,43 @@ public function getFileLayoutUpdatesXml($area, $package, $theme, $storeId = null
465466
}
466467
return simplexml_load_string('<layouts>' . $layoutStr . '</layouts>', $elementClass);
467468
}
469+
470+
/**
471+
* Add layout files added via theme.xml to layout updates
472+
* for all themes that are parents of this theme.
473+
*/
474+
public function addFallbackThemesLayoutUpdates(Mage_Core_Model_Config_Element $updates)
475+
{
476+
/* @var $designPackage Mage_Core_Model_Design_Package */
477+
$designPackage = Mage::getSingleton('core/design_package');
478+
/* @var $fallback Mage_Core_Model_Design_Fallback */
479+
$fallback = Mage::getModel('core/design_fallback');
480+
481+
$fallbacks = $fallback->getFallbackScheme($designPackage->getArea(), $designPackage->getPackageName(), $designPackage->getTheme('layout'));
482+
483+
for ($i = count($fallbacks) - 1; $i >= 0; $i--) {
484+
$fallback = $fallbacks[$i];
485+
if (!isset($fallback['_package'], $fallback['_theme'])) {
486+
continue;
487+
}
488+
489+
$fallbackPackage = $fallback['_package'];
490+
$fallbackTheme = $fallback['_theme'];
491+
492+
$themeUpdateGroups = Mage::getSingleton('core/design_config')->getNode("{$designPackage->getArea()}/$fallbackPackage/$fallbackTheme/layout/updates");
493+
494+
if (!$themeUpdateGroups) {
495+
continue;
496+
}
497+
498+
foreach ($themeUpdateGroups as $themeUpdateGroup) {
499+
foreach ($themeUpdateGroup->asArray() as $key => $themeUpdate) {
500+
$updateNode = $updates->addChild($key);
501+
$updateNode->addChild('file', $themeUpdate['file']);
502+
}
503+
}
504+
}
505+
506+
return $updates;
507+
}
468508
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?xml version="1.0"?>
2+
<!--
3+
/**
4+
* @copyright For copyright and license information, read the COPYING.txt file.
5+
* @link /COPYING.txt
6+
* @license Academic Free License (AFL 3.0)
7+
* @package default_default
8+
*/
9+
-->
10+
<theme>
11+
<parent />
12+
</theme>

0 commit comments

Comments
 (0)