%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/libs/ |
| Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/libs/DynamicConfig.php |
<?php
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2017 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*/
namespace humhub\libs;
use humhub\modules\admin\models\forms\MailingSettingsForm;
use Yii;
use yii\base\BaseObject;
use yii\helpers\ArrayHelper;
/**
* DynamicConfig provides access to the dynamic configuration file.
*
* @author luke
*/
class DynamicConfig extends BaseObject
{
/**
* Add an array to the dynamic configuration
*
* @param array $new
*/
public static function merge($new)
{
$config = ArrayHelper::merge(self::load(), $new);
self::save($config);
}
/**
* Returns the dynamic configuration
*
* @return array
*/
public static function load()
{
$configFile = self::getConfigFilePath();
if (!is_file($configFile)) {
self::save([]);
}
// Load config file with 'file_get_contents' and 'eval'
// because 'require' don't reload the file when it's changed on runtime
$configContent = str_replace(['<' . '?php', '<' . '?', '?' . '>'], '', file_get_contents($configFile));
$config = eval($configContent);
if (!is_array($config)) {
return [];
}
return $config;
}
/**
* Sets a new dynamic configuration
*
* @param array $config
*/
public static function save($config)
{
$content = '<' . '?php return ';
$content .= var_export($config, true);
$content .= '; ?' . '>';
$configFile = self::getConfigFilePath();
file_put_contents($configFile, $content);
if (function_exists('opcache_invalidate')) {
opcache_invalidate($configFile);
}
if (function_exists('apc_compile_file')) {
apc_compile_file($configFile);
}
}
/**
* Rewrites DynamicConfiguration based on Database Stored Settings
*/
public static function rewrite()
{
// Get Current Configuration
$config = self::load();
// Add Application Name to Configuration
$config['name'] = Yii::$app->settings->get('name');
// Add Default language
$defaultLanguage = Yii::$app->settings->get('defaultLanguage');
if ($defaultLanguage !== null && $defaultLanguage != '') {
$config['language'] = Yii::$app->settings->get('defaultLanguage');
} else {
$config['language'] = Yii::$app->language;
}
$defaultTimeZone = Yii::$app->settings->get('defaultTimeZone');
if (!empty($defaultTimeZone)) {
$config['timeZone'] = $defaultTimeZone;
$config['components']['formatter']['defaultTimeZone'] = $defaultTimeZone;
}
// Add Caching
$cacheClass = Yii::$app->settings->get('cache.class');
if (in_array($cacheClass, ['yii\caching\DummyCache', 'yii\caching\FileCache'])) {
$config['components']['cache'] = [
'class' => $cacheClass,
'keyPrefix' => Yii::$app->id
];
} elseif ($cacheClass == 'yii\caching\ApcCache' && (function_exists('apcu_add') || function_exists('apc_add'))) {
$config['components']['cache'] = [
'class' => $cacheClass,
'keyPrefix' => Yii::$app->id,
'useApcu' => (function_exists('apcu_add'))
];
} elseif ($cacheClass === \yii\redis\Cache::class) {
$config['components']['cache'] = [
'class' => \yii\redis\Cache::class,
'keyPrefix' => Yii::$app->id
];
}
// Add User settings
$config['components']['user'] = [];
if (Yii::$app->getModule('user')->settings->get('auth.defaultUserIdleTimeoutSec')) {
$config['components']['user']['authTimeout'] = Yii::$app->getModule('user')->settings->get('auth.defaultUserIdleTimeoutSec');
}
// Install Mail Component
$config['components']['mailer'] = self::getMailerConfig();
// Remove old theme/view stuff
unset($config['components']['view']);
unset($config['components']['mailer']['view']);
// Cleanups
unset($config['components']['db']['charset']);
unset($config['components']['formatterApp']);
$config['params']['config_created_at'] = time();
$config['params']['horImageScrollOnMobile'] = Yii::$app->settings->get('horImageScrollOnMobile');
self::save($config);
}
private static function getMailerConfig()
{
$mail = [];
$mail['transport'] = [];
$transportType = Yii::$app->settings->get('mailer.transportType', MailingSettingsForm::TRANSPORT_PHP);
if ($transportType === MailingSettingsForm::TRANSPORT_SMTP) {
if (Yii::$app->settings->get('mailer.hostname')) {
$mail['transport']['host'] = Yii::$app->settings->get('mailer.hostname');
}
if (Yii::$app->settings->get('mailer.port')) {
$mail['transport']['port'] = (int)Yii::$app->settings->get('mailer.port');
} else {
$mail['transport']['port'] = 25;
}
if (Yii::$app->settings->get('mailer.username')) {
$mail['transport']['username'] = Yii::$app->settings->get('mailer.username');
}
if (Yii::$app->settings->get('mailer.password')) {
$mail['transport']['password'] = Yii::$app->settings->get('mailer.password');
}
$mail['transport']['scheme'] = (empty(Yii::$app->settings->get('mailer.useSmtps'))) ? 'smtp' : 'smtps';
} elseif ($transportType === MailingSettingsForm::TRANSPORT_CONFIG) {
return [];
} elseif ($transportType === MailingSettingsForm::TRANSPORT_PHP) {
$mail['transport']['dsn'] = 'native://default';
} elseif ($transportType === MailingSettingsForm::TRANSPORT_DSN) {
$mail['transport']['dsn'] = Yii::$app->settings->get('mailer.dsn');
} elseif ($transportType === MailingSettingsForm::TRANSPORT_FILE) {
unset($mail['transport']);
$mail['useFileTransport'] = true;
}
return $mail;
}
/**
* Checks whether the config should be rewritten based on changed setting name
*
* @param $moduleId
* @param $name
* @return bool
*/
public static function needRewrite($moduleId, $name)
{
return (in_array($name, [
'name', 'defaultLanguage', 'timeZone', 'cache.class', 'mailer.transportType',
'mailer.hostname', 'mailer.username', 'mailer.password', 'mailer.encryption',
'mailer.port', 'horImageScrollOnMobile']));
}
public static function getConfigFilePath()
{
return Yii::getAlias(Yii::$app->params['dynamicConfigFile']);
}
}