Improved Setting caching

This commit is contained in:
Lucas Bartholemy 2015-11-18 10:22:04 +01:00
parent c9814cf0cd
commit 101b321323
3 changed files with 59 additions and 11 deletions

View File

@ -33,21 +33,48 @@ class DynamicConfig extends \yii\base\Object
self::save($config);
}
/**
* This method is called when a a setting is changed.
*
* @see Setting
* @param Setting $setting
*/
public static function onSettingChange($setting)
{
// Only rewrite static configuration file when necessary
if ($setting->module_id != 'mailing' &&
$setting->module_id != 'cache' &&
$setting->name != 'name' &&
$setting->name != 'defaultLanguage' &&
$setting->name != 'theme' &&
$setting->name != 'timeZone' &&
$setting->name != 'authentication_internal'
) {
return;
$config = self::load();
self::setSettingValue($config['params'], $setting);
self::save($config);
}
public static function setSettingValue(&$config, $setting)
{
$moduleId = $setting->module_id;
if ($moduleId == '') {
$moduleId = 'core';
}
self::rewrite();
$value = '';
if ($setting->value_text != '') {
$value = $setting->value_text;
} else {
$value = $setting->value;
}
$config['settings'][$moduleId][$setting->name] = $value;
}
public static function getSettingValue($name, $moduleId)
{
if ($moduleId == '') {
$moduleId = 'core';
}
if (isset(Yii::$app->params['settings'][$moduleId][$name])) {
return Yii::$app->params['settings'][$moduleId][$name];
}
return null;
}
/**
@ -179,6 +206,10 @@ class DynamicConfig extends \yii\base\Object
$config = ArrayHelper::merge($config, Theme::getThemeConfig(Setting::Get('theme')));
$config['params']['config_created_at'] = time();
foreach (Setting::find()->all() as $setting) {
self::setSettingValue($config['params'], $setting);
}
self::save($config);
}

View File

@ -119,6 +119,11 @@ class Setting extends \yii\db\ActiveRecord
return self::GetFixedValue($name, $moduleId);
}
$configValue = DynamicConfig::getSettingValue($name, $moduleId);
if ($configValue !== null) {
return $configValue;
}
$record = self::GetRecord($name, $moduleId);
return $record->value;
}
@ -182,6 +187,10 @@ class Setting extends \yii\db\ActiveRecord
public static function GetText($name, $moduleId = "")
{
if (DynamicConfig::getSettingValue($name, $moduleId) !== null) {
return DynamicConfig::getSettingValue($name, $moduleId);
}
$record = self::GetRecord($name, $moduleId);
return $record->value_text;
}

View File

@ -10,6 +10,7 @@ namespace humhub\modules\admin\controllers;
use Yii;
use yii\helpers\Url;
use humhub\libs\DynamicConfig;
use humhub\models\Setting;
use humhub\models\UrlOembed;
use humhub\modules\admin\components\Controller;
@ -74,6 +75,7 @@ class SettingController extends Controller
$space->save();
}
}
DynamicConfig::rewrite();
// set flash message
Yii::$app->getSession()->setFlash('data-saved', Yii::t('AdminModule.controllers_SettingController', 'Saved'));
@ -222,6 +224,8 @@ class SettingController extends Controller
Setting::Set('type', $form->type, 'cache');
Setting::Set('expireTime', $form->expireTime, 'cache');
\humhub\libs\DynamicConfig::rewrite();
// set flash message
Yii::$app->getSession()->setFlash('data-saved', Yii::t('AdminModule.controllers_SettingController', 'Saved and flushed cache'));
@ -306,6 +310,8 @@ class SettingController extends Controller
$form->systemEmailAddress = Setting::Set('systemEmailAddress', $form->systemEmailAddress, 'mailing');
$form->systemEmailName = Setting::Set('systemEmailName', $form->systemEmailName, 'mailing');
DynamicConfig::rewrite();
// set flash message
Yii::$app->getSession()->setFlash('data-saved', Yii::t('AdminModule.controllers_SettingController', 'Saved'));
@ -351,6 +357,8 @@ class SettingController extends Controller
// read and save colors from current theme
\humhub\components\Theme::setColorVariables($form->theme);
DynamicConfig::rewrite();
Yii::$app->getSession()->setFlash('data-saved', Yii::t('AdminModule.controllers_SettingController', 'Saved'));
Yii::$app->response->redirect(Url::toRoute('/admin/setting/design'));
}