forked from chd7well/yii2-configmanager
/
Bootstrap.php
executable file
·117 lines (104 loc) · 4.54 KB
/
Bootstrap.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
<?php
/*
* This file is part of the jualtools project.
*
* (c) chd7well project <http://github.com/chd7well/>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace chd7well\configmanager;
use yii\authclient\Collection;
use yii\base\BootstrapInterface;
use yii\base\InvalidConfigException;
use yii\i18n\PhpMessageSource;
use yii\web\GroupUrlRule;
use yii\console\Application as ConsoleApplication;
use chd7well\configmanager\models\Parameter;
use chd7well\configmanager\models\Config;
use chd7well\configmanager\models\ConfigUser;
use chd7well\configmanager\models\ConfigParameter;
/**
* Bootstrap class registers configmanager components.
*
* @author Christian Dumhart <christian.dumhart@chd.at>
*/
class Bootstrap implements BootstrapInterface
{
/** @var array Model's map */
private $_modelMap = [
'Parameter' => 'chd7well\configmanager\models\Parameter',
'ParameterSearch' => 'chd7well\configmanager\models\ParameterSearch',
'ConfigSearch' => 'chd7well\configmanager\models\ConfigSearch',
'ConfigParameterSearch' => 'chd7well\configmanager\models\ConfigSearch',
'ConfigUser' => 'chd7well\configmanager\models\ConfigUser',
];
private function setParameter($app, $parametername, $parametervalue) {
if ($parametername[0] == '@') { // parameter is a compomnent
eval ( '$helpdummy = ' . $parametervalue . ';' );
$app->set ( substr ( $parametername, 1 ), $helpdummy );
} else if($parametername[0] == '#'){
eval ( '$helpdummy = ' . $parametervalue . ';' );
$module = [substr ( $parametername, 1 ) => $helpdummy];
$app->modules = array_merge($app->modules, $module);
}
else {
$app->params [$parametername] = $parametervalue;
}
}
/** @inheritdoc */
public function bootstrap($app)
{
/** @var $module Module */
if ($app->hasModule('configmanager') && ($module = $app->getModule('configmanager')) instanceof Module) {
$this->_modelMap = array_merge($this->_modelMap, $module->modelMap);
foreach ($this->_modelMap as $name => $definition) {
$class = "chd7well\\configmanager\\models\\" . $name;
\Yii::$container->set($class, $definition);
$modelName = is_array($definition) ? $definition['class'] : $definition;
$module->modelMap[$name] = $modelName;
if (in_array($name, ['Configmanager'])) {
\Yii::$container->set($name . 'Query', function () use ($modelName) {
return $modelName::find();
});
}
}
}
$app->get('i18n')->translations['configmanager*'] = [
'class' => PhpMessageSource::className(),
'basePath' => __DIR__ . '/messages',
];
//Load parameters from database
$parameters = Parameter::find()->where(['bootstrap'=>'1'])->all(); //only on bootstrap are necessary
foreach($parameters as $para)
{
$this->setParameter($app, $para->parametername, $para->value);
}
$is_config_set = Parameter::findOne(['parametername'=>'chd7well/configmanager/config_set']);
$is_user_config_set = Parameter::findOne(['parametername'=>'chd7well/configmanager/user_parameter']);
if (get_class ( \Yii::$app ) === 'yii\web\Application') {
if (isset ( $app->params ['chd7well/configmanager/config_set'] ) && isset ( $app->params ['chd7well/configmanager/user_parameter'] ) && $app->params ['chd7well/configmanager/config_set'] == 1 && $app->params ['chd7well/configmanager/user_parameter'] == 1 && isset ( \Yii::$app->user->id )) {
$configuser = ConfigUser::findOne ( [
'user_ID' => \Yii::$app->user->id
] );
if (isset ( $configuser )) {
$config = Config::findOne ( [
'ID' => $configuser->config_ID
] );
$parent_parameters = ConfigParameter::find ()->where ( [
'config_ID' => $config->parent_ID
] )->all ();
$user_parameters = ConfigParameter::find ()->where ( [
'config_ID' => $config->ID
] )->all ();
foreach ( $parent_parameters as $para ) {
$this->setParameter ( $app, $para->parameter->parametername, $para->value );
}
foreach ( $user_parameters as $para ) {
$this->setParameter ( $app, $para->parameter->parametername, $para->value );
}
}
}
}
}
}