Skip to content

Commit

Permalink
Save to context settings for non-global theme settings
Browse files Browse the repository at this point in the history
  • Loading branch information
theboxer committed Oct 17, 2024
1 parent fb2e5bf commit ee7a442
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 13 deletions.
30 changes: 25 additions & 5 deletions core/components/fred/model/fred/fredtheme.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,7 @@ private function syncThemeSetting($setting, $group = '')
$systemSetting->save();
}

public function saveThemeSettings($settingValues)
public function saveThemeSettings($settingValues, $ctx)
{
$settings = $this->get('settings');
if (empty($settings)) {
Expand All @@ -308,16 +308,20 @@ public function saveThemeSettings($settingValues)
foreach ($settings as $setting) {
if (isset($setting['group']) && is_array($setting['settings'])) {
foreach ($setting['settings'] as $groupSetting) {
$keys[] = $groupSetting['name'];
$keys[$groupSetting['name']] = [
'group' => $setting['group'],
'global' => isset($groupSetting['global']) ? $groupSetting['global'] : true
];
}
continue;
}

$keys[] = $setting['name'];
$keys[$setting['name']] = [
'group' => '',
'global' => isset($setting['global']) ? $setting['global'] : true
];
}

$keys = array_flip($keys);

foreach ($settingValues as $name => $value) {
if (!isset($keys[$name])) {
continue;
Expand All @@ -328,6 +332,22 @@ public function saveThemeSettings($settingValues)
continue;
}

$newValue = $this->themeSettingValueToModxPlaceholder($value);
if ($setting->get('value') === $newValue) {
continue;
}

if ($keys[$name]['global'] === false) {
$setting = $this->xpdo->getObject('modContextSetting', ['namespace' => $this->namespace, 'context_key' => $ctx, 'key' => $this->getThemeSettingKey($name)]);
if (!$setting) {
$setting = $this->xpdo->newObject('modContextSetting');
$setting->set('namespace', $this->namespace);
$setting->set('key', $this->getThemeSettingKey($name));
$setting->set('context_key', $ctx);
$setting->set('area', $keys[$name]['group']);
}
}

$setting->set('value', $this->themeSettingValueToModxPlaceholder($value));
$setting->save();
}
Expand Down
2 changes: 1 addition & 1 deletion core/components/fred/src/Endpoint/Ajax/SaveContent.php
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ public function process(): string
}

$theme = $this->fred->getTheme($this->object->template);
$theme->saveThemeSettings($this->body['themeSettings']);
$theme->saveThemeSettings($this->body['themeSettings'], $this->object->Context->key);

// unify resource rendering
$renderResource = new \Fred\RenderResource($this->object, $this->modx, $this->body['data'], $this->body['pageSettings']);
Expand Down
33 changes: 27 additions & 6 deletions core/components/fred/src/Model/FredTheme.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Fred\Model;

use MODX\Revolution\modContext;
use MODX\Revolution\modContextSetting;
use MODX\Revolution\modLexiconEntry;
use MODX\Revolution\modNamespace;
Expand Down Expand Up @@ -318,7 +319,7 @@ private function syncThemeSetting($setting, $group = '')
$systemSetting->save();
}

public function saveThemeSettings($settingValues)
public function saveThemeSettings($settingValues, $ctx)
{
$settings = $this->get('settings');
if (empty($settings)) {
Expand All @@ -337,16 +338,20 @@ public function saveThemeSettings($settingValues)
foreach ($settings as $setting) {
if (isset($setting['group']) && is_array($setting['settings'])) {
foreach ($setting['settings'] as $groupSetting) {
$keys[] = $groupSetting['name'];
$keys[$groupSetting['name']] = [
'group' => $setting['group'],
'global' => isset($groupSetting['global']) ? $groupSetting['global'] : true
];
}
continue;
}

$keys[] = $setting['name'];
$keys[$setting['name']] = [
'group' => '',
'global' => isset($setting['global']) ? $setting['global'] : true
];
}

$keys = array_flip($keys);

foreach ($settingValues as $name => $value) {
if (!isset($keys[$name])) {
continue;
Expand All @@ -357,7 +362,23 @@ public function saveThemeSettings($settingValues)
continue;
}

$setting->set('value', $this->themeSettingValueToModxPlaceholder($value));
$newValue = $this->themeSettingValueToModxPlaceholder($value);
if ($setting->get('value') === $newValue) {
continue;
}

if ($keys[$name]['global'] === false) {
$setting = $this->xpdo->getObject(modContextSetting::class, ['namespace' => $this->namespace, 'context_key' => $ctx, 'key' => $this->getThemeSettingKey($name)]);
if (!$setting) {
$setting = $this->xpdo->newObject(modContextSetting::class);
$setting->set('namespace', $this->namespace);
$setting->set('key', $this->getThemeSettingKey($name));
$setting->set('context_key', $ctx);
$setting->set('area', $keys[$name]['group']);
}
}

$setting->set('value', $newValue);
$setting->save();
}

Expand Down
2 changes: 1 addition & 1 deletion core/components/fred/src/v2/Endpoint/Ajax/SaveContent.php
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,7 @@ public function process(): string
}

$theme = $this->fred->getTheme($this->object->template);
$theme->saveThemeSettings($this->body['themeSettings']);
$theme->saveThemeSettings($this->body['themeSettings'],$this->object->Context->key);

// unify resource rendering
$renderResource = new \Fred\v2\RenderResource($this->object, $this->modx, $this->body['data'], $this->body['pageSettings']);
Expand Down

0 comments on commit ee7a442

Please sign in to comment.