Blame view

frontend/models/Option.php 10.9 KB
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
  }