Blame view

common/models/Feedback.php 7.56 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
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
  /**
   * Class Feedback
   *
   * @property string $topic
   * @property string $calc_json_info
   * @package common\models
   */
  class Feedback extends ArtboxFeedback
  {
  
      const SCENARIO_CALCULATOR = 'calculator';
      const calculator_attributes = [
          'adress',
          'module_install_angle',
          'latitude',
          'longitude',
          'south_deviation',
          'power_station_type',
          'area',
          'power',
          'budget',
          'auth_day',
          'auth_month',
          'auth_pwr_all',
          'auth_pwr_days',
      ];
  
      const translate_attributes = [
          'adress'               => "Адрес",
          'module_install_angle' => "Угол установки фотомодулей",
          'latitude'             => "Широта",
          'longitude'            => "Долгота",
          'south_deviation'      => "Отклонение от юга",
          'power_station_type'   => "Тип станции",
          'area'                 => "Площадь",
          'power'                => "Мощность",
          'budget'               => "Бюджет",
          'auth_day'             => "Суточное потребление в кВт*ч",
          'auth_month'           => "Месячное потребление в кВт*ч",
          'auth_pwr_all'         => "Мощность всех потребителей потребление в кВт*ч",
          'auth_pwr_days'        => "Суток автономности",
      ];
  
      public $attributeValues = [];
  
      public function __set($name, $value)
a78f6f00   Timur Kastemirov   feedback mail
63
      {
f6303c6a   alex   Добавлено:
64
65
66
          if (in_array($name, self::calculator_attributes)) {
              if (isset($value) && !empty($value)) {
                  $this->attributeValues[ $name ] = $value;
31257104   Timur Kastemirov   feedback calculator
67
              }
f6303c6a   alex   Добавлено:
68
69
          } else {
              parent::__set($name, $value);
31257104   Timur Kastemirov   feedback calculator
70
          }
f6303c6a   alex   Добавлено:
71
72
73
74
75
76
77
78
      }
  
      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
79
          }
f6303c6a   alex   Добавлено:
80
81
82
83
84
85
      }
  
      public function getCalculatorAttributes()
      {
          return $this->attributeValues;
      }
f6303c6a   alex   Добавлено:
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
      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
108
109
                          'name',
                          'phone',
f6303c6a   alex   Добавлено:
110
                          'email',
a78f6f00   Timur Kastemirov   feedback mail
111
112
                          'returnUrl',
                          'topic',
f6303c6a   alex   Добавлено:
113
                          'calc_json_info',
a78f6f00   Timur Kastemirov   feedback mail
114
                      ],
f6303c6a   alex   Добавлено:
115
116
117
118
119
120
121
122
123
124
                      self::calculator_attributes
                  ),
              ]
          );
      }
  
      public function rules()
      {
  
          return array_merge(
ab86aa32   alex   Валидация формы
125
126
127
              #родительские правила перетирали мои изменения касательно правила required,
              # поэтому я  вынес все правила кроме required cюда для того ,чтобы не поломать логику в других местах
           
43c0ab09   alex   Валидация формы
128
              #parent::rules(),
f6303c6a   alex   Добавлено:
129
              [
a78f6f00   Timur Kastemirov   feedback mail
130
131
                  [
                      [
f6303c6a   alex   Добавлено:
132
                          'topic',
a78f6f00   Timur Kastemirov   feedback mail
133
                      ],
f6303c6a   alex   Добавлено:
134
135
136
                      'required',
                  ],
                  [
a78f6f00   Timur Kastemirov   feedback mail
137
                      [
f6303c6a   alex   Добавлено:
138
                          'topic',
a78f6f00   Timur Kastemirov   feedback mail
139
                      ],
f6303c6a   alex   Добавлено:
140
141
142
143
                      'string',
                      'max' => 100,
                  ],
                  [
a78f6f00   Timur Kastemirov   feedback mail
144
                      [
21399124   alex   мелкие правки к в...
145
                         'name',
f6303c6a   alex   Добавлено:
146
147
148
149
150
151
                          'phone',
                          'email',
                          'calc_json_info',
  
                          'adress',
                          'module_install_angle',
21452189   Timur Kastemirov   feedback calculat...
152
                      ],
f6303c6a   alex   Добавлено:
153
                      'required',
21399124   alex   мелкие правки к в...
154
  
f6303c6a   alex   Добавлено:
155
156
                      'on' => self::SCENARIO_CALCULATOR,
                  ],
a6acb731   alex   Валидация формы
157
                  [
4f26a950   alex   Валидация формы
158
159
160
161
162
163
164
                      [
                          'name',
                          'email',
                          'phone',
                      ],
                      'required',
                      'message'=>Yii::t('app','requiredField'),
ab86aa32   alex   Валидация формы
165
                      'on' => [self::SCENARIO_DEFAULT],
4f26a950   alex   Валидация формы
166
167
168
169
170
171
172
173
174
                  ],
                  [
                      [
                          'name',
                          'email',
                          'phone'
                      ],
                      'required',
                      'message'=>Yii::t('app','requiredField'),
43c0ab09   alex   Валидация формы
175
                      'on' => self::SCENARIO_FEEDBACK,
4f26a950   alex   Валидация формы
176
177
                  ],
                  [
a6acb731   alex   Валидация формы
178
179
180
181
                      ['phone'],
                      'string',
                      'length'=>[10,17],
                      'message'=>'Введите данные в форму согласно заданному шаблону: +38(132) 456 78 89',
43c0ab09   alex   Валидация формы
182
                      'on'=>[self::SCENARIO_FEEDBACK,self::SCENARIO_DEFAULT]
a6acb731   alex   Валидация формы
183
                  ],
3293cc53   alex   Добавил валидацию...
184
185
186
187
188
                  [
                   ['phone'],
                   'match',
                   'pattern'=>'/^(\+38\(0\d{2}\)\d{3}-\d{2}-\d{2})/',
                   'message'=>'некорректный ввод поля. Значение должно иметь вид: +38(123)456-78-79'],
a6acb731   alex   Валидация формы
189
190
191
192
193
194
                  [
                      ['name'],
                      'string',
                      'length'=>[2,25],
                      'tooShort'=>Yii::t('app','lowName'),
                      'tooLong'=>Yii::t('app','upName'),
43c0ab09   alex   Валидация формы
195
                      'on'=>[self::SCENARIO_FEEDBACK,self::SCENARIO_DEFAULT]
a6acb731   alex   Валидация формы
196
197
198
199
200
201
                  ],
                  [
                      ['email'],
                      'string',
                      'max'=>25,
                      'tooLong'=>\Yii::t('app','upEmail'),
43c0ab09   alex   Валидация формы
202
                      'on'=>[self::SCENARIO_FEEDBACK,self::SCENARIO_DEFAULT]
a6acb731   alex   Валидация формы
203
                  ],
c4d3b5c3   Alexey Boroda   -Added unicode su...
204
205
206
                  [
                      ['name'],
                      'match',
ab86aa32   alex   Валидация формы
207
                      'pattern' => '/^[a-zA-Zа-яієїґ\'А-ЯІЄЇҐёЁ\s\-]+$/u',
c4d3b5c3   Alexey Boroda   -Added unicode su...
208
209
210
                      'message'=> \Yii::t('app', 'wrongName'),
                      'on'=>[self::SCENARIO_FEEDBACK,self::SCENARIO_DEFAULT]
                  ],
a6acb731   alex   Валидация формы
211
212
213
214
                  [
                      ['email'],
                      'email',
                      'message'=>\Yii::t('app','wrongEmail'),
43c0ab09   alex   Валидация формы
215
216
217
218
219
220
221
222
223
224
225
                      'on'=>[self::SCENARIO_FEEDBACK,self::SCENARIO_DEFAULT]
                  ],
                  [
                      [
                          'status',
                      ],
                      'boolean',
                  ],
                  [
                      'returnUrl',
                      'safe',
a6acb731   alex   Валидация формы
226
                  ],
21399124   alex   мелкие правки к в...
227
  
f6303c6a   alex   Добавлено:
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
  
              ]
          );
      }
  
      public function setCalcJsonInfo()
      {
          $this->calc_json_info = json_encode($this->attributeValues);
      }
  
      public function getCalcJsonInfo()
      {
          return json_decode($this->calc_json_info);
      }
  }