public function actionSiteSave() { $args = filter_input_array(INPUT_POST, ['s_title' => FILTER_SANITIZE_STRING, 's_key' => ['filter' => FILTER_VALIDATE_INT, 'options' => ['min_range' => 0, 'max_range' => 31, 'default' => 0]], 's_link' => FILTER_VALIDATE_URL, 'sid' => FILTER_VALIDATE_INT, 'passkey' => FILTER_SANITIZE_STRING]); $args['del'] = 0; $args['s_link'] = $args['s_link'] ?: 'http://wtf.asu.ngres/'; $args['passkey'] = get_param($args, 'passkey') ?: Cipher::generate_token(); // Проверку на повтор индекса будем делать тут, // т.к. на уровне БД сделать это не получилось // ( дублируемая запись затирается ) $list = $this->model->getSiteList(); $exist = false; foreach ($list as $site) { // если id проверяемого отличается от текущего if (get_param($args, 'sid') !== intval(get_param($site, 'id'))) { $exist |= get_param($args, 's_key') === intval(get_param($site, 'sitekey')); } } if (!$exist) { $this->model->editSite($args); $this->preparePopup('Информация сохранена', 'alert-success'); $this->preparePopup($this->model->getErrorList()); } else { $this->preparePopup('Указанный индекс сайта занят'); } $this->redirect($this->createActionUrl('sitelist')); }