Blame view

common/models/Feedback.php 8.75 KB
a78f6f00   Timur Kastemirov   feedback mail
1
  <?php
3293cc53   alex   Добавил валидацию...
2
3
4
5
6
      /**
       * =================================================================================================================
       * Модель, отвечающая за формы на всех страницах kbenergy
       * =================================================================================================================
       */
f6303c6a   alex   Добавлено:
7
8
9
10
11
12
13
14
15
  namespace common\models;
  
  /**
   * User: timur
   * Date: 31.01.18
   * Time: 10:56
   */
  
  use artbox\core\models\Feedback as ArtboxFeedback;
a6acb731   alex   Валидация формы
16
  use Yii;
f6303c6a   alex   Добавлено:
17
18
19
20
21
22
23
24
25
26
27
  /**
   * Class Feedback
   *
   * @property string $topic
   * @property string $calc_json_info
   * @package common\models
   */
  class Feedback extends ArtboxFeedback
  {
  
      const SCENARIO_CALCULATOR = 'calculator';
9dd79071   mzavalniuk   fix legal_feedback
28
      const SCENARIO_LEGAL_FEEDBACK = 'legal_feedback';
f62062ac   mzavalniuk   added legal-form
29
30
  
  
f6303c6a   alex   Добавлено:
31
32
33
34
35
36
37
      const calculator_attributes = [
          'adress',
          'module_install_angle',
          'latitude',
          'longitude',
          'south_deviation',
          'power_station_type',
f62062ac   mzavalniuk   added legal-form
38
          'question_type',
f6303c6a   alex   Добавлено:
39
40
41
42
43
44
45
          'area',
          'power',
          'budget',
          'auth_day',
          'auth_month',
          'auth_pwr_all',
          'auth_pwr_days',
f62062ac   mzavalniuk   added legal-form
46
          'legal_name'
f6303c6a   alex   Добавлено:
47
48
49
50
51
52
53
54
55
      ];
  
      const translate_attributes = [
          'adress'               => "Адрес",
          'module_install_angle' => "Угол установки фотомодулей",
          'latitude'             => "Широта",
          'longitude'            => "Долгота",
          'south_deviation'      => "Отклонение от юга",
          'power_station_type'   => "Тип станции",
f62062ac   mzavalniuk   added legal-form
56
          'question_type'        => "Тема обращения",
f6303c6a   alex   Добавлено:
57
58
59
60
61
62
63
          'area'                 => "Площадь",
          'power'                => "Мощность",
          'budget'               => "Бюджет",
          'auth_day'             => "Суточное потребление в кВт*ч",
          'auth_month'           => "Месячное потребление в кВт*ч",
          'auth_pwr_all'         => "Мощность всех потребителей потребление в кВт*ч",
          'auth_pwr_days'        => "Суток автономности",
f62062ac   mzavalniuk   added legal-form
64
          'legal_name'           => "Название организации",
f6303c6a   alex   Добавлено:
65
66
67
68
69
      ];
  
      public $attributeValues = [];
  
      public function __set($name, $value)
a78f6f00   Timur Kastemirov   feedback mail
70
      {
f6303c6a   alex   Добавлено:
71
72
73
          if (in_array($name, self::calculator_attributes)) {
              if (isset($value) && !empty($value)) {
                  $this->attributeValues[ $name ] = $value;
31257104   Timur Kastemirov   feedback calculator
74
              }
f6303c6a   alex   Добавлено:
75
76
          } else {
              parent::__set($name, $value);
31257104   Timur Kastemirov   feedback calculator
77
          }
f6303c6a   alex   Добавлено:
78
79
80
81
82
83
84
85
      }
  
      public function __get($name)
      {
          if (in_array($name, self::calculator_attributes)) {
              return $this->attributeValues[ $name ]??'';
          } else {
              return parent::__get($name);
31257104   Timur Kastemirov   feedback calculator
86
          }
f6303c6a   alex   Добавлено:
87
88
89
90
91
92
      }
  
      public function getCalculatorAttributes()
      {
          return $this->attributeValues;
      }
f6303c6a   alex   Добавлено:
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
      public function scenarios()
      {
          return array_merge(
              parent::scenarios(),
              [
                  parent::SCENARIO_FEEDBACK => [
                      'name',
                      'email',
                      'phone',
                      'message',
                      'returnUrl',
                      'topic',
                  ],
                  parent::SCENARIO_CALLBACK => [
                      'name',
                      'phone',
                      'message',
                      'returnUrl',
                      'topic',
                  ],
                  self::SCENARIO_CALCULATOR => array_merge(
                      [
a78f6f00   Timur Kastemirov   feedback mail
115
116
                          'name',
                          'phone',
f6303c6a   alex   Добавлено:
117
                          'email',
a78f6f00   Timur Kastemirov   feedback mail
118
119
                          'returnUrl',
                          'topic',
f6303c6a   alex   Добавлено:
120
                          'calc_json_info',
a78f6f00   Timur Kastemirov   feedback mail
121
                      ],
f6303c6a   alex   Добавлено:
122
123
                      self::calculator_attributes
                  ),
f62062ac   mzavalniuk   added legal-form
124
125
126
127
128
129
130
131
132
133
134
135
136
                  self::SCENARIO_LEGAL_FEEDBACK => array_merge(
                      [
                          'name',
                          'legal_name',
                          'question_type',
                          'phone',
                          'message',
                          'email',
                          'returnUrl',
                          'topic',
                          'calc_json_info',
                      ]
                  ),
f6303c6a   alex   Добавлено:
137
138
139
140
141
142
143
144
              ]
          );
      }
  
      public function rules()
      {
  
          return array_merge(
ab86aa32   alex   Валидация формы
145
146
147
              #родительские правила перетирали мои изменения касательно правила required,
              # поэтому я  вынес все правила кроме required cюда для того ,чтобы не поломать логику в других местах
           
43c0ab09   alex   Валидация формы
148
              #parent::rules(),
f6303c6a   alex   Добавлено:
149
              [
a78f6f00   Timur Kastemirov   feedback mail
150
151
                  [
                      [
f6303c6a   alex   Добавлено:
152
                          'topic',
a78f6f00   Timur Kastemirov   feedback mail
153
                      ],
f6303c6a   alex   Добавлено:
154
155
156
                      'required',
                  ],
                  [
a78f6f00   Timur Kastemirov   feedback mail
157
                      [
f6303c6a   alex   Добавлено:
158
                          'topic',
a78f6f00   Timur Kastemirov   feedback mail
159
                      ],
f6303c6a   alex   Добавлено:
160
161
162
163
                      'string',
                      'max' => 100,
                  ],
                  [
a78f6f00   Timur Kastemirov   feedback mail
164
                      [
21399124   alex   мелкие правки к в...
165
                         'name',
f6303c6a   alex   Добавлено:
166
167
168
169
170
171
                          'phone',
                          'email',
                          'calc_json_info',
  
                          'adress',
                          'module_install_angle',
21452189   Timur Kastemirov   feedback calculat...
172
                      ],
f6303c6a   alex   Добавлено:
173
                      'required',
21399124   alex   мелкие правки к в...
174
  
f6303c6a   alex   Добавлено:
175
176
                      'on' => self::SCENARIO_CALCULATOR,
                  ],
a6acb731   alex   Валидация формы
177
                  [
4f26a950   alex   Валидация формы
178
179
180
181
182
183
184
                      [
                          'name',
                          'email',
                          'phone',
                      ],
                      'required',
                      'message'=>Yii::t('app','requiredField'),
ab86aa32   alex   Валидация формы
185
                      'on' => [self::SCENARIO_DEFAULT],
4f26a950   alex   Валидация формы
186
187
188
189
190
191
192
193
194
                  ],
                  [
                      [
                          'name',
                          'email',
                          'phone'
                      ],
                      'required',
                      'message'=>Yii::t('app','requiredField'),
43c0ab09   alex   Валидация формы
195
                      'on' => self::SCENARIO_FEEDBACK,
4f26a950   alex   Валидация формы
196
197
                  ],
                  [
f62062ac   mzavalniuk   added legal-form
198
199
200
201
202
203
204
205
206
207
208
                      [
                          'name',
                          'email',
                          'phone',
                          'question_type'
                      ],
                      'required',
                      'message'=>Yii::t('app','requiredField'),
                      'on' => self::SCENARIO_LEGAL_FEEDBACK,
                  ],
                  [
a6acb731   alex   Валидация формы
209
210
211
212
                      ['phone'],
                      'string',
                      'length'=>[10,17],
                      'message'=>'Введите данные в форму согласно заданному шаблону: +38(132) 456 78 89',
f62062ac   mzavalniuk   added legal-form
213
                      'on'=>[self::SCENARIO_FEEDBACK,self::SCENARIO_DEFAULT,self::SCENARIO_LEGAL_FEEDBACK]
a6acb731   alex   Валидация формы
214
                  ],
3293cc53   alex   Добавил валидацию...
215
216
217
218
219
                  [
                   ['phone'],
                   'match',
                   'pattern'=>'/^(\+38\(0\d{2}\)\d{3}-\d{2}-\d{2})/',
                   'message'=>'некорректный ввод поля. Значение должно иметь вид: +38(123)456-78-79'],
a6acb731   alex   Валидация формы
220
221
222
223
224
225
                  [
                      ['name'],
                      'string',
                      'length'=>[2,25],
                      'tooShort'=>Yii::t('app','lowName'),
                      'tooLong'=>Yii::t('app','upName'),
f62062ac   mzavalniuk   added legal-form
226
                      'on'=>[self::SCENARIO_FEEDBACK,self::SCENARIO_DEFAULT,self::SCENARIO_LEGAL_FEEDBACK]
a6acb731   alex   Валидация формы
227
228
229
230
                  ],
                  [
                      ['email'],
                      'string',
0bf12c99   mzavalniuk   add new translate...
231
                      'max'=>70,
a6acb731   alex   Валидация формы
232
                      'tooLong'=>\Yii::t('app','upEmail'),
f62062ac   mzavalniuk   added legal-form
233
                      'on'=>[self::SCENARIO_FEEDBACK,self::SCENARIO_DEFAULT,self::SCENARIO_LEGAL_FEEDBACK]
a6acb731   alex   Валидация формы
234
                  ],
c4d3b5c3   Alexey Boroda   -Added unicode su...
235
236
237
                  [
                      ['name'],
                      'match',
ab86aa32   alex   Валидация формы
238
                      'pattern' => '/^[a-zA-Zа-яієїґ\'А-ЯІЄЇҐёЁ\s\-]+$/u',
c4d3b5c3   Alexey Boroda   -Added unicode su...
239
                      'message'=> \Yii::t('app', 'wrongName'),
f62062ac   mzavalniuk   added legal-form
240
                      'on'=>[self::SCENARIO_FEEDBACK,self::SCENARIO_DEFAULT,self::SCENARIO_LEGAL_FEEDBACK]
c4d3b5c3   Alexey Boroda   -Added unicode su...
241
                  ],
a6acb731   alex   Валидация формы
242
243
244
245
                  [
                      ['email'],
                      'email',
                      'message'=>\Yii::t('app','wrongEmail'),
f62062ac   mzavalniuk   added legal-form
246
                      'on'=>[self::SCENARIO_FEEDBACK,self::SCENARIO_DEFAULT,self::SCENARIO_LEGAL_FEEDBACK]
43c0ab09   alex   Валидация формы
247
248
249
250
251
252
253
254
255
256
                  ],
                  [
                      [
                          'status',
                      ],
                      'boolean',
                  ],
                  [
                      'returnUrl',
                      'safe',
a6acb731   alex   Валидация формы
257
                  ],
21399124   alex   мелкие правки к в...
258
  
f6303c6a   alex   Добавлено:
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
  
              ]
          );
      }
  
      public function setCalcJsonInfo()
      {
          $this->calc_json_info = json_encode($this->attributeValues);
      }
  
      public function getCalcJsonInfo()
      {
          return json_decode($this->calc_json_info);
      }
  }