/** * Заполняет массив $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 = 'Минимальный бюджет — ' . 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 = 'Превышена максимальная сумма этапа — ' . 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; }