Skip to content

Commit 71002c0

Browse files
committed
Fix #1216 and the fallback theme
1 parent 7e2130e commit 71002c0

File tree

771 files changed

+85
-5
lines changed

Some content is hidden

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

771 files changed

+85
-5
lines changed

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -153,15 +153,15 @@ public function preDispatch()
153153
{
154154
// get legacy theme choice form backend config
155155
if (Mage::getStoreConfigFlag('admin/design/use_legacy_theme')) {
156-
$theme = Mage::getConfig()->getNode('stores/admin/design/theme/default');
156+
$package = Mage::getConfig()->getNode("stores/admin/design/package/name");
157157
} else {
158-
$theme = Mage::getConfig()->getNode('stores/admin/design/theme/openmage');
158+
$package = Mage::getConfig()->getNode("stores/admin/design/package/openmage");
159159
}
160160

161161
Mage::getDesign()
162162
->setArea($this->_currentArea)
163-
->setPackageName((string) Mage::getConfig()->getNode('stores/admin/design/package/name'))
164-
->setTheme((string) $theme);
163+
->setPackageName((string)$package)
164+
->setTheme((string)Mage::getConfig()->getNode('stores/admin/design/theme/default'));
165165
foreach (['layout', 'template', 'skin', 'locale'] as $type) {
166166
if ($value = (string) Mage::getConfig()->getNode("stores/admin/design/theme/{$type}")) {
167167
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
@@ -230,10 +230,10 @@
230230
<design>
231231
<package>
232232
<name>default</name>
233+
<openmage>openmage</openmage>
233234
</package>
234235
<theme>
235236
<default>default</default>
236-
<openmage>openmage</openmage>
237237
</theme>
238238
</design>
239239
</admin>

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

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

9090
if (!isset($this->_cachedSchemes[$cacheKey])) {
91+
92+
//First we have to check if theme exists
93+
$path = "$area".DS."$package".DS."$theme";
94+
$fallback = false;
95+
if (!is_dir(Mage::getBaseDir('design') . DS . $path)) {
96+
//Fallback to default
97+
$theme = (string)Mage::getConfig()->getNode('stores/admin/design/theme/default');
98+
$fallback = true;
99+
}
91100
if ($this->_isInheritanceDefined($area, $package, $theme)) {
92101
$scheme = $this->_getFallbackScheme($area, $package, $theme);
93102
} else {
94103
$scheme = $this->_getLegacyFallbackScheme();
95104
}
105+
if ($fallback) {
106+
$first = array_shift($scheme);
107+
$scheme = array_merge([$first], [['_package' => $package, '_theme' => $theme]], $scheme);
108+
}
96109

97110
$this->_cachedSchemes[$cacheKey] = $scheme;
98111
}

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

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,7 @@ public function getFileLayoutUpdatesXml($area, $package, $theme, $storeId = null
433433
$layoutXml = null;
434434
$elementClass = $this->getElementClass();
435435
$updatesRoot = Mage::app()->getConfig()->getNode($area . '/layout/updates');
436+
$updatesRoot = $this->addFallbackThemesLayoutUpdates($updatesRoot);
436437
Mage::dispatchEvent('core_layout_update_updates_get_after', ['updates' => $updatesRoot]);
437438
$updates = $updatesRoot->asArray();
438439
$themeUpdates = Mage::getSingleton('core/design_config')->getNode("$area/$package/$theme/layout/updates");
@@ -473,4 +474,44 @@ public function getFileLayoutUpdatesXml($area, $package, $theme, $storeId = null
473474
}
474475
return simplexml_load_string('<layouts>' . $layoutStr . '</layouts>', $elementClass);
475476
}
477+
478+
/**
479+
* Add layout files added via theme.xml to layout updates
480+
* for all themes that are parents of this theme.
481+
*/
482+
public function addFallbackThemesLayoutUpdates(Mage_Core_Model_Config_Element $updates) {
483+
/* @var $designPackage Mage_Core_Model_Design_Package */
484+
$designPackage = Mage::getSingleton('core/design_package');
485+
/* @var $fallback Mage_Core_Model_Design_Fallback */
486+
$fallback = Mage::getModel('core/design_fallback');
487+
488+
$fallbacks = $fallback->getFallbackScheme($designPackage->getArea(), $designPackage->getPackageName(), $designPackage->getTheme('layout'));
489+
490+
for($i=count($fallbacks)-1; $i>=0; $i--) {
491+
$fallback = $fallbacks[$i];
492+
if(!isset($fallback['_package']) || !isset($fallback['_theme'])) {
493+
continue;
494+
}
495+
496+
$fallbackPackage = $fallback['_package'];
497+
$fallbackTheme = $fallback['_theme'];
498+
499+
$themeUpdateGroups = Mage::getSingleton('core/design_config')->getNode("{$designPackage->getArea()}/$fallbackPackage/$fallbackTheme/layout/updates");
500+
501+
if(!$themeUpdateGroups) {
502+
continue;
503+
}
504+
505+
foreach($themeUpdateGroups as $themeUpdateGroup) {
506+
$themeUpdateGroupArray = $themeUpdateGroup->asArray();
507+
508+
foreach($themeUpdateGroupArray as $key => $themeUpdate) {
509+
$updateNode = $updates->addChild($key);
510+
$updateNode->addChild('file', $themeUpdate['file']);
511+
}
512+
}
513+
}
514+
515+
return $updates;
516+
}
476517
}

0 commit comments

Comments
 (0)