Esempio n. 1
0
 /**
  * Заполняет массив $this->data из данных пользовательского запроса.
  *
  * @param array $request   $_POST|$_GET
  * @return boolean   был ли вообще передан этап (должны быть заполнены обязательные поля).
  */
 function initFromRequest($request)
 {
     $data_exists = false;
     foreach ($request as $field => &$value) {
         $err = NULL;
         if (is_scalar($value)) {
             $value = stripslashes($value);
         }
         if (!$data_exists) {
             if (in_array($field, array('name', 'descr', 'cost', 'work_time', 'add_work_time', 'project_attach'))) {
                 $data_exists = $value && (!is_string($value) || trim($value));
             }
         }
         switch ($field) {
             case 'name':
                 if (!$this->sbr->isDraft() && is_empty_html($value)) {
                     $err = 'Пожалуйста, заполните это поле';
                 }
                 $value = substr(trim($value), 0, self::NAME_LENGTH);
                 break;
             case 'descr':
                 if (!$this->sbr->isDraft() && is_empty_html($value)) {
                     $err = 'Пожалуйста, заполните это поле';
                 }
                 //$value = htmlspecialchars($value);
                 $value = substr($value, 0, self::DESCR_LENGTH);
                 break;
             case 'category':
             case 'sub_category':
                 $value = intvalPgSql($value);
                 break;
             case 'cost':
                 if (is_empty_html($value)) {
                     if (!$this->sbr->isDraft()) {
                         $err = 'Введите сумму';
                     }
                 } else {
                     $cost = floatval(preg_replace('/\\s+/', '', $value));
                     $cost_rur = $cost * $this->sbr->cost2rur();
                     if ($cost_rur > self::MAX_COST_RUR) {
                         $err = 'Слишком большая сумма';
                     } else {
                         if ($cost_rur < self::MIN_COST_RUR - $this->sbr->isDraft() && $this->data['cost'] != $cost || $cost == 0) {
                             $err = 'Минимальный бюджет &mdash; ' . self::MIN_COST_RUR . ' руб.';
                         } else {
                             $this->sbr->getFrlReqvs();
                             if ($this->sbr->frl_reqvs['rez_type'] == sbr::RT_UABYKZ) {
                                 if ($cost_rur > $this->sbr->maxNorezCost()) {
                                     $err = 'Превышена максимальная сумма этапа &mdash; ' . sbr::MAX_COST_USD . ' USD (или ' . sbr_meta::view_cost($this->sbr->maxNorezCost(), exrates::BANK) . ')';
                                 }
                             }
                         }
                     }
                     $value = $cost;
                 }
                 break;
             case 'work_time':
                 if (!$this->sbr->isDraft() && is_empty_html($value)) {
                     $err = 'Пожалуйста, заполните это поле (число от 1 до ' . self::MAX_WORK_TIME . ')';
                 } else {
                     $val = intvalPgSql($value);
                     if ($val < 1 - $this->sbr->isDraft()) {
                         $err = 'Неверный ввод';
                     } else {
                         if ($val > self::MAX_WORK_TIME) {
                             $err = 'Число не может быть больше ' . self::MAX_WORK_TIME;
                         }
                     }
                     if (!$this->sbr->isDraft()) {
                         $value = $val;
                     }
                 }
                 $request['work_days'] = $value;
                 $request['int_work_time'] = intval($value);
                 break;
             case 'work_time_add':
             case 'add_work_time':
                 $value = intvalPgSql($value);
                 break;
             case 'add_wt_switch':
                 $value = $value == '-' ? '-' : '+';
                 break;
             case 'project_attach':
                 if (is_array($value) && $this->sbr->project) {
                     if ($this->sbr->project['attach']) {
                         $this->data['attach'] = array_intersect_key($this->sbr->project['attach'], $value);
                     }
                 }
                 break;
             case 'del_attach':
                 break;
             case 'id':
                 $value = intvalPgSql($value);
                 break;
             case 'version':
                 $value = (int) $value > 32767 ? 32767 : (int) $value;
                 break;
         }
         if ($err) {
             $this->error[$field] = $err;
         }
         $this->data[$field] = $value;
     }
     return $data_exists;
 }