0012685b
Yarik
Многоязычные опции
|
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
|
<?php
namespace frontend\models;
use Yii;
/**
* This is the model class for table "option".
*
* @property integer $option_id
* @property string $model
* @property integer $model_id
* @property string $name
* @property string $template
* @property integer $parent_id
*/
class Option extends \yii\db\ActiveRecord
{
/**
* @inheritdoc
*/
public static function tableName()
{
return 'option';
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['model', 'model_id', 'name', 'template'], 'required'],
|
e3105834
Yarik
Стандартизация
|
34
|
[['model_id', 'option_pid'], 'integer'],
|
0012685b
Yarik
Многоязычные опции
|
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
[['model', 'name', 'template'], 'string', 'max' => 200]
];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'option_id' => Yii::t('app', 'Option ID'),
'model' => Yii::t('app', 'Model'),
'model_id' => Yii::t('app', 'Model ID'),
'name' => Yii::t('app', 'Name'),
'template' => Yii::t('app', 'Template'),
|
e3105834
Yarik
Стандартизация
|
50
51
52
|
'option_pid' => Yii::t('app', 'Parent ID'),
'date_add' => Yii::t('app', 'Date created'),
'translate' => Yii::t('app', 'Translatable'),
|
0012685b
Yarik
Многоязычные опции
|
53
54
|
];
}
|
21bfdfd2
Yarik
Закончены базовые...
|
55
|
|
0012685b
Yarik
Многоязычные опции
|
56
|
public function getLangs() {
|
e3105834
Yarik
Стандартизация
|
57
|
return (new Language())->find()->where(['>', 'language_id', 0])->andWhere(['status' => 1])->asArray()->all();
|
0012685b
Yarik
Многоязычные опции
|
58
|
}
|
21bfdfd2
Yarik
Закончены базовые...
|
59
|
|
19120f31
Yarik
fix broken
|
60
61
62
|
public static function change($id, $post, $modeldb, $model_id) {
$models[$id] = Option::findOne($id);
$modellang[$id] = array();
|
f1ea4c01
andryeyev
lang_id => langua...
|
63
|
$langs = OptionLang::findAll(['option_language_id' => $id]);
|
19120f31
Yarik
fix broken
|
64
|
foreach($langs as $lang) {
|
e3105834
Yarik
Стандартизация
|
65
|
$modellang[$id][$lang->language_id] = $lang;
|
19120f31
Yarik
fix broken
|
66
|
}
|
e3105834
Yarik
Стандартизация
|
67
|
$children = (new Option())->find()->where(['option_pid' => $id])->all();
|
19120f31
Yarik
fix broken
|
68
69
70
|
foreach($children as $child) {
$models[$child->option_id] = $child;
$modellang[$child->option_id] = array();
|
e3105834
Yarik
Стандартизация
|
71
|
$langs = OptionLang::findAll(['option_id' =>$child->option_id]);
|
19120f31
Yarik
fix broken
|
72
|
foreach($langs as $lang) {
|
e3105834
Yarik
Стандартизация
|
73
|
$modellang[$child->option_id][$lang->language_id] = $lang;
|
19120f31
Yarik
fix broken
|
74
75
76
77
78
79
|
}
}
$ok = 1;
if(!empty($post)) {
foreach($post['Option'] as $key => $option) {
if(in_array($key, array('model', 'model_id'))) { continue; }
|
69bd5fc6
Yarik
Добавлены языки п...
|
80
|
if(empty($option['value'][$models[$key]->name]) && !empty($option['lang'])) {
|
f1ea4c01
andryeyev
lang_id => langua...
|
81
|
foreach($option['lang'] as $language_id => $lang) {
|
69bd5fc6
Yarik
Добавлены языки п...
|
82
83
84
85
86
87
|
if(!empty($lang)) {
$option['value'][$models[$key]->name] = $lang;
break;
}
}
}
|
19120f31
Yarik
fix broken
|
88
|
$modellang[$key][0]->value = $option['value'][$models[$key]->name];
|
69bd5fc6
Yarik
Добавлены языки п...
|
89
|
if(empty($modellang[$key][0]->value) || !$modellang[$key][0]->save()) {
|
19120f31
Yarik
fix broken
|
90
|
$ok = 0;
|
69bd5fc6
Yarik
Добавлены языки п...
|
91
92
|
$models[$key]->addError('value', 'Value must be set');
$modellang[$key][0]->addError('value', 'Value must be set');
|
19120f31
Yarik
fix broken
|
93
|
}
|
69bd5fc6
Yarik
Добавлены языки п...
|
94
|
if(!empty($option['lang'])) {
|
f1ea4c01
andryeyev
lang_id => langua...
|
95
96
97
98
99
100
|
foreach($option['lang'] as $language_id => $lang) {
if(empty($modellang[$key][$language_id])) {
$modellang[$key][$language_id] = new OptionLang();
$modellang[$key][$language_id]->option_id = $models[$key]->option_id;
$modellang[$key][$language_id]->language_id = $language_id;
$modellang[$key][$language_id]->value = $lang;
|
69bd5fc6
Yarik
Добавлены языки п...
|
101
|
} else {
|
f1ea4c01
andryeyev
lang_id => langua...
|
102
|
$modellang[$key][$language_id]->value = $lang;
|
69bd5fc6
Yarik
Добавлены языки п...
|
103
|
}
|
f1ea4c01
andryeyev
lang_id => langua...
|
104
|
if(!$modellang[$key][$language_id]->save()) {
|
69bd5fc6
Yarik
Добавлены языки п...
|
105
106
|
$ok = 0;
}
|
19120f31
Yarik
fix broken
|
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
}
}
}
if($ok) {
return array('id' => $id, 'models' => $models, 'modelslang' => $modelslang, 'success' => true);
} else {
return array(
'models' => $models,
'modellang' => $modellang,
'modeldb' => $modeldb,
'model_id' => $model_id,
'success' => false
);
}
}
return array(
'models' => $models,
'modellang' => $modellang,
'modeldb' => $modeldb,
'model_id' => $model_id,
'success' => false
);
}
|
8c194d7c
Yarik
Устранен баг посл...
|
130
|
|
b15a9aec
Yarik
Добавил языки, ад...
|
131
132
|
public static function create($post, $modeldb, $model_id, $fields, $multiple) {
$multiple = boolval($multiple);
|
19120f31
Yarik
fix broken
|
133
134
135
136
137
138
139
140
141
142
143
144
145
|
$model = new Option();
$modellang = new OptionLang();
if(!empty($post['Option'])) {
$ok = 1;
$parentid = null;
$models = array();
foreach($post['Option'] as $index => $option) {
if(in_array($index, array('model', 'model_id')) && $index !== 0) { continue; }
$first = 1;
foreach($option['value'] as $key => $value) {
$models[$index][$key] = new Option();
$models[$index][$key]->model = $post['Option']['model'];
$models[$index][$key]->model_id = $post['Option']['model_id'];
|
69bd5fc6
Yarik
Добавлены языки п...
|
146
147
|
$models[$index][$key]->template = $option[$key]['template'];
$models[$index][$key]->translate = $option[$key]['translate']?1:0;
|
19120f31
Yarik
fix broken
|
148
149
|
$models[$index][$key]->name = $key;
if(!$first) {
|
e3105834
Yarik
Стандартизация
|
150
|
$models[$index][$key]->option_pid = $parentid;
|
19120f31
Yarik
fix broken
|
151
152
|
}
$modelslang[$index][$key][0] = new OptionLang();
|
69bd5fc6
Yarik
Добавлены языки п...
|
153
154
155
156
157
158
159
160
|
if(!empty($option['lang'][$key])) {
foreach($option['lang'][$key] as $code => $lang) {
if(!empty($lang)) {
$value = $lang;
break;
}
}
}
|
19120f31
Yarik
fix broken
|
161
162
163
164
|
if(!empty($value) && $models[$index][$key]->save()) {
if($first) {
$parentid = $models[$index][$key]->option_id;
}
|
e3105834
Yarik
Стандартизация
|
165
166
|
$modelslang[$index][$key][0]->option_id = $models[$index][$key]->option_id;
$modelslang[$index][$key][0]->language_id = 0;
|
19120f31
Yarik
fix broken
|
167
168
169
170
171
172
|
$modelslang[$index][$key][0]->value = $value;
if($modelslang[$index][$key][0]->save()) {
if(!empty($option['lang'][$key])) {
foreach($option['lang'][$key] as $code => $lang) {
if(!empty($lang)) {
$modelslang[$index][$key][$code] = new OptionLang();
|
e3105834
Yarik
Стандартизация
|
173
174
|
$modelslang[$index][$key][$code]->option_id = $models[$index][$key]->option_id;
$modelslang[$index][$key][$code]->language_id = $code;
|
19120f31
Yarik
fix broken
|
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
|
$modelslang[$index][$key][$code]->value = $lang;
if(!$modelslang[$index][$key][$code]->save()) {
$ok = 0;
}
}
}
}
}
} else {
$models[$index][$key]->validate();
$modelslang[$index][$key][0]->validate();
$modelslang[$index][$key][0]->addError('value', 'Value must be set');
if(!empty($option['lang'][$key])) {
foreach($option['lang'][$key] as $code => $lang) {
if(!empty($lang)) {
$modelslang[$index][$key][$code] = new OptionLang();
|
e3105834
Yarik
Стандартизация
|
191
192
|
$modelslang[$index][$key][$code]->option_id = $models[$index][$key]->option_id;
$modelslang[$index][$key][$code]->language_id = $code;
|
19120f31
Yarik
fix broken
|
193
194
195
196
197
198
199
200
201
202
|
$modelslang[$index][$key][$code]->value = $lang;
}
}
}
$ok = 0;
}
$first = 0;
}
}
if($ok) {
|
b15a9aec
Yarik
Добавил языки, ад...
|
203
204
205
206
207
208
|
if($modeldb == 'Feedback') {
$newflag = new Option();
$newflag->model = $modeldb;
$newflag->model_id = $model_id;
$newflag->name = 'is_new';
$newflag->template = 'checkbox';
|
e3105834
Yarik
Стандартизация
|
209
|
$newflag->option_pid = $parentid;
|
b15a9aec
Yarik
Добавил языки, ад...
|
210
211
212
|
$newflag->translate = 0;
if($newflag->save()) {
$newflaglang = new OptionLang();
|
e3105834
Yarik
Стандартизация
|
213
214
|
$newflaglang->option_id = $newflag->option_id;
$newflaglang->language_id = 0;
|
b15a9aec
Yarik
Добавил языки, ад...
|
215
216
217
218
219
220
|
$newflaglang->value = '1';
if(!$newflaglang->save()) {
$newflag->delete();
}
}
}
|
19120f31
Yarik
fix broken
|
221
222
223
224
225
226
227
228
|
return array('models' => $models, 'modelslang' => $modelslang, 'success' => true);
} else {
return array(
'models' => $models,
'modellang' => $modelslang,
'modeldb' => $modeldb,
'model_id' => $model_id,
'fields' => $fields,
|
b15a9aec
Yarik
Добавил языки, ад...
|
229
230
|
'success' => false,
'multiple' => $multiple
|
19120f31
Yarik
fix broken
|
231
232
233
234
235
236
237
238
|
);
}
} else {
return array(
'model' => $model,
'modeldb' => $modeldb,
'model_id' => $model_id,
'fields' => $fields,
|
b15a9aec
Yarik
Добавил языки, ад...
|
239
240
|
'success' => false,
'multiple' => $multiple
|
19120f31
Yarik
fix broken
|
241
242
243
|
);
}
}
|
b15a9aec
Yarik
Добавил языки, ад...
|
244
245
|
public function getOptions() {
|
e3105834
Yarik
Стандартизация
|
246
|
return $this->hasMany(Option::className(), ['option_pid' => 'option_id'])->indexBy('name');
|
b15a9aec
Yarik
Добавил языки, ад...
|
247
248
249
|
}
public function getOption() {
|
e3105834
Yarik
Стандартизация
|
250
|
return $this->hasOne(Option::className(), ['option_id' => 'option_pid']);
|
b15a9aec
Yarik
Добавил языки, ад...
|
251
252
253
|
}
public function getOptionLangs() {
|
e3105834
Yarik
Стандартизация
|
254
|
return $this->hasMany(OptionLang::className(), ['option_id' => 'option_id']);
|
b15a9aec
Yarik
Добавил языки, ад...
|
255
256
257
|
}
public function getOptionDefaultLang($array = false) {
|
e3105834
Yarik
Стандартизация
|
258
|
$query = $this->getOptionLangs()->where(['language_id' => 0]);
|
b15a9aec
Yarik
Добавил языки, ад...
|
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
|
if($array) {
$query->asArray();
}
return $query->one();
}
public static function markOld($id) {
$model = Option::findOne($id);
$is_new = $model->getOptions()->where(['name' => 'is_new'])->one();
if(empty($is_new)) return false;
$is_newlang = $is_new->getOptionDefaultLang();
$is_newlang->value = '0';
if($is_newlang->save()) {
return true;
} else {
return false;
}
}
|
0012685b
Yarik
Многоязычные опции
|
278
|
}
|