This repository has been archived by the owner on Oct 15, 2020. It is now read-only.
/
SettingForm.php
151 lines (131 loc) · 3.18 KB
/
SettingForm.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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
<?php
namespace platx\settings;
use yii\base\Model;
use yii\helpers\Json;
/**
* Form for update settings in section
* @package platx\settings
*/
class SettingForm extends Model
{
/**
* @var array Model attribute collection
*/
private $_settingModels = [];
/**
* @return array Attribute labels
*/
public function attributeLabels()
{
$items = [];
foreach ($this->_settingModels as $key => $setting) {
$items[$key] = $setting->name;
}
return $items;
}
/**
* @return array Validation rules
*/
public function rules()
{
$items = [];
foreach ($this->_settingModels as $key => $setting) {
if (!empty($setting->rules)) {
$rules = Json::decode($setting->rules, true);
foreach ($rules as $rule) {
$items[] = array_merge([$key], $rule);
}
} else {
$items[] = [$key, 'safe'];
}
}
return $items;
}
/**
* Gets model attributes
* @param null $names
* @param array $except
* @return array
*/
public function getAttributes($names = null, $except = [])
{
$items = [];
foreach ($this->_settingModels as $key => $model) {
$items[$key] = $model->value;
}
return $items;
}
/**
* Gets setting models collection
* @return array
*/
public function getSettings()
{
return $this->_settingModels;
}
/**
* Saves settings
* @return array|bool
*/
public function save()
{
/**
* @var string $key
* @var Setting $setting
*/
foreach ($this->_settingModels as $key => $setting) {
if (!$setting->validate()) {
$this->addErrors([$key => $setting->errors]);
}
}
if (!$this->hasErrors()) {
foreach ($this->_settingModels as $key => $setting) {
Setting::set("{$setting->section}.{$key}", $setting->value);
}
return true;
} else {
return false;
}
}
/**
* Loads settings for section
* @param string $section
* @return SettingForm
*/
public function loadBySection($section = 'general')
{
$models = Setting::find()
->where(['section' => $section])
->indexBy('key')
->orderBy('position ASC')
->all();
if (!empty($models)) {
$this->_settingModels = $models;
return true;
}
return false;
}
/**
* Sets new value for setting
* @param string $key
* @param mixed $value
*/
public function __set($key, $value)
{
if (!empty($this->_settingModels[$key])) {
$this->_settingModels[$key]->value = $value;
}
}
/**
* Gets setting value
* @param string $key
* @return mixed|null
*/
public function __get($key)
{
if (!empty($this->_settingModels[$key])) {
return $this->_settingModels[$key]->value;
}
return null;
}
}