/** * Сохранение работы в портфолио * * @param object $objResponse xajaxResponse * @param string $rec_id идентификатор записи * @param string $rec_type тип записи * @param array $aForm массив данных * @param string $sDrawFunc имя функции для выполнения после сохранения */ function _admEditPortfolioSaveForm(&$objResponse, $rec_id = '', $rec_type = '', $aForm = array(), $sDrawFunc = '') { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/user_content.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/professions.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/portfolio.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php'; $max_time_value = 100; //стоимость работы из портфолио $max_portf_cost[0] = 100000; // usd $max_portf_cost[1] = 100000; // euro $max_portf_cost[2] = 5000000; // rur $max_portf_cost[3] = 100000; // fm $user = new users(); $user->GetUserByUID($aForm['user_id']); // инициализация $aPortf = portfolio::GetPortfById($rec_id); $alert = array(); $maxlen = $aForm['is_video'] ? 80 : 120; $name = substr($aForm['pname'], 0, $maxlen); $name = change_q_x($name, false, true, '', false, false); $name = $name ? $name : ''; $descr = substr(change_q_new(trim(stripslashes($aForm['descr']))), 0, 1500); $prof = intval($aForm['prof']); $new_prof = intval($aForm['new_prof']); $prj_id = $rec_id; $cost = intval(str_replace(' ', '', $aForm['pcost']) * 100) / 100; $cost_type = intval($aForm['pcosttype']); $time_value = intval(trim($aForm['ptime'])); $time_type = intval($aForm['ptimeei']); $is_video = $aForm['is_video'] ? 't' : 'f'; $video_link = $aForm['is_video'] ? stripslashes(trim($aForm['v_video_link'])) : ''; $link = $aForm['is_video'] ? '' : addhttp(trim(substr(change_q_x($aForm['link'], true), 0, 150))); $link = $link ? $link : ''; $make_position = $aForm['make_position']; $make_position_num = trim($aForm['make_position_num']); $update_prev = intval($aForm['upd_prev']); $prev_type = intval($aForm['prev_type']); $del_prev = intval($aForm['del_prev']); $new_position = NULL; $pict = substr(change_q_new(trim(stripslashes($aForm['pict']))), 0, 1500); $prev_pict = substr(change_q_new(trim(stripslashes($aForm['prev_pict']))), 0, 1500); if ($new_prof != $prof) { $new_position = 0; } if (isset($make_position)) { switch ($make_position) { case 'first': $new_position = 1; break; case 'last': $new_position = 0; break; case 'num': default: $new_position = intval($make_position_num); $new_position = $new_position <= 0 ? 1 : $new_position; break; } } // валидация (нумерация алертов как в первоначальном варианте радактирования и новый нулевой) if (!$name || strlen(trim(stripslashes($aForm['pname']))) > 80) { $alert[1] = 'Поле заполнено некорректно'; } if ($link != '' && !url_validate($link, true)) { $alert[6] = 'Поле заполнено некорректно'; } if ($is_video == 't') { $v_video_link = video_validate($video_link); if (!$v_video_link) { $alert[206] = "Поле заполнено некорректно"; } else { $video_link = preg_replace("/^http:\\/\\//", '', $v_video_link); } } if ($cost < 0 || $cost > $max_portf_cost[$cost_type]) { $alert[4] = 'Стоимость должна быть в пределе от 0 ' . view_range_cost2(0, $max_portf_cost[$cost_type], '', '', false, $cost_type) . ($cost_type != 2 ? '.' : ''); } if ($time_value < 0 || $time_value > $max_time_value) { $alert[5] = 'Временные затраты должны быть в пределе от 0 до ' . $max_time_value . '.'; } if ($new_prof != $prof && ($new_prof == professions::CLIENTS_PROF_ID || $new_prof == professions::BEST_PROF_ID) && portfolio::CountAll($aForm['user_id'], $new_prof, true) >= portfolio::MAX_BEST_WORKS) { $alert[0] = 'Превышено количество работ в этом разделе'; } // сохраняем if (!$alert) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/messages.php'; $sReason = _parseReason($aForm['user_id'], $aForm['adm_edit_text']); $portf = new portfolio(); $portf->EditPortf($aForm['user_id'], $name, $img, $sm_img, $link, $descr, $new_prof, $cost, $cost_type, $time_type, $time_value, $prev_type, $prj_id, $file_error, $preview_error, $new_position, 0, $video_link, $update_prev, $_SESSION['uid'], $pict, $prev_pict, $user->login, $sReason); if ($del_prev) { $portf->DelPict($user->login, $prj_id, 0); } messages::portfolioModifiedNotification($aPortf, $user, $sReason); $content_id = user_content::MODER_PORTFOLIO; _admEditAfterAll($objResponse, $content_id, $rec_id, $rec_type, $sDrawFunc, $aForm); } else { _setErrors($objResponse, $alert, array(0 => 'prof', 1 => 'pname', 2 => 'descr', 4 => 'pcost', 5 => 'ptime', 6 => 'link', 206 => 'video_link'), $sDrawFunc); } }
$v_video_link = video_validate($video_link); if (!$v_video_link) { $error_flag = 1; $alert[206] = "Поле заполнено некорректно"; } else { $video_link = preg_replace("/^http:\\/\\//", "", $v_video_link); } } if ($cost < 0 || $cost > $max_portf_cost[$cost_type]) { $error_flag = 1; if ($is_video == 'f') { $enum = 4; } else { $enum = 204; } $alert[$enum] = 'Поле заполнено некорректно. Стоимость должна быть в пределе от 0 ' . view_range_cost2(0, $max_portf_cost[$cost_type], '', '', false, $cost_type) . ($cost_type != 2 ? '.' : ''); } if ($time_value < 0 || $time_value > $max_time_value) { $error_flag = 1; if ($is_video == 'f') { $enum = 5; } else { $enum = 205; } $alert[$enum] = 'Поле заполнено некорректно. Временные затраты должны быть в пределе от 0 до ' . $max_time_value . '.'; } if ($sm_img->size > 102400) { if ($is_video == 'f') { $enum = 7; } else { $enum = 207;
/** * Обработка данных в шаге порфтоило * * @return string */ public function actionProcessingPortfolio() { $error = array(); $type = __paramInit('int', null, 'spec_column_id'); $spec = __paramInit('int', null, 'spec_db_id'); $spec_name = __paramInit('string', null, 'spec'); if ($type == 0) { $error['spec'] = 'Вы должны выбрать свою специализацию'; } else { $data['spec_orig'] = professions::GetProfessionOrigin($spec); } $data['spec'] = $spec; $data['exp'] = __paramInit('int', null, 'exp'); $data['cost_hour'] = __paramInit('float', null, 'cost_hour'); $data['cost_type_hour'] = __paramInit('int', null, 'currency_hour_db_id'); $curr_hour_name = __paramInit('string', null, 'currency_hour'); $data['cost_month'] = __paramInit('float', null, 'cost_month'); $data['cost_type_month'] = __paramInit('int', null, 'currency_month_db_id'); $curr_month_name = __paramInit('string', null, 'currency_month'); $data['resume'] = __paramInit('int', null, 'resume_id'); $data['info'] = stripslashes(__paramInit('string', null, 'info', '')); if (strlen($data['info']) > 4000) { $error['info'] = 'Исчерпан лимит символов для этого поля (4000 символов)'; } $data['in_office'] = $_POST['in_office'] == 1 ? 1 : 0; if ($data['resume'] > 0) { $resume = new CFile($data['resume']); } if ($data['exp'] < 0 || $data['exp'] > step_freelancer::MAX_YEAR_VALUE) { $error['exp'] = 'Недопустимое значение. Опыт работы должен быть в пределе от 0 до ' . step_freelancer::MAX_YEAR_VALUE . '.'; } if ($data['cost_hour'] < 0 || $data['cost_hour'] > $this->MAX_COST_HOUR[$data['cost_type_hour']]) { $error['cost_hour'] = 'Недопустимое значение. Стоимость часа работы должна быть в пределе ' . view_range_cost2(0, $this->MAX_COST_HOUR[$data['cost_type_hour']], '', '', false, $data['cost_type_hour'] . '.'); } if ($data['cost_month'] < 0 || $data['cost_month'] > $this->MAX_COST_MONTH[$data['cost_type_month']]) { $error['cost_month'] = 'Недопустимое значение. Стоимость месяца работы должна быть в пределе ' . view_range_cost2(0, $this->MAX_COST_MONTH[$data['cost_type_month']], '', '', false, $data['cost_type_month']) . '.'; } if (count($error) <= 0) { $insert['portfolio'] = serialize($data); $this->parent->saveFieldsInfo($insert); } // Обрабатываем порфтолио if (is_array($_POST['name'])) { foreach ($_POST['name'] as $k => $value) { $value = __paramValue('string', stripslashes($value)); $descr = __paramValue('string', stripslashes($_POST['descr'][$k])); $id = __paramValue('int', $_POST['id'][$k]); // id работы, если он есть $link = __paramValue('string', stripslashes($_POST['link'][$k])); $link = preg_replace("/^http:\\/\\//", "", trim($link)); if ($value == '' && $descr == '' && $link == '' && empty($_POST['pict_id'][$k])) { continue; } if (is_empty_html($value)) { $error['portf' . $k]['name'] = "Введите название работы"; } if (strlen($descr) > 1500) { $error['descr' . $k]['name'] = "Исчерпан лимит символов для этого поля (1500 символов)"; } if ($link != '' && !url_validate($link)) { $error['portf' . $k]['link'] = "Поле заполнено некорректно"; } $portf_insert[] = array("name" => $value, "pict_id" => $_POST['pict_id'][$k] > 0 ? intval($_POST['pict_id'][$k]) : null, "link" => $link, "prof_id" => $spec, "wiz_uid" => $this->getWizardUserID(), "descr" => $descr, "id" => $id); } } if (count($error) <= 0) { if (count($portf_insert) > 0) { $ids = $this->createWorks($portf_insert); } $this->parent->setCompliteStep(true); $this->parent->setNextStep($this->parent->getPosition() + 1); header("Location: /wizard/registration/"); exit; } $this->request = $data; $this->portf_insert = $portf_insert; return $error; }
echo $value['id']; ?> " class="b-layout b-layout_padleft_60"> <?php if ($project['user_id'] == $_SESSION['uid'] || $_SESSION['uid'] == $value['user_id'] || hasPermissions('projects')) { ?> <?php $txt_time = view_range_time($value['time_from'], $value['time_to'], $value['time_type']); ?> <div class="b-layout__txt"><?php echo $txt_time; ?> </div> <?php $txt_cost = view_range_cost2($value['cost_from'], $value['cost_to'], '', '', false, $value['cost_type']); if ($txt_cost != '') { ?> <div class="b-layout__txt"><?php echo $txt_cost; ?> </div> <?php } ?> <?php } //if ?> <?php
/** * Формирование текстового пояснения к фильтру. * * @param array $filter фильтр * @param boolean $filter_apply применен фильтр или нет * @return string текстовое пояснение к фильтру */ function GetDescription($filter, $filter_apply) { $ret = ''; if ($filter_apply) { if (isset($filter['cost_from']) && !empty($filter['cost_from']) || isset($filter['cost_to']) && !empty($filter['cost_to'])) { $ret .= ($ret == '' ? '' : ' ') . 'стоимость работы '; $ret .= view_range_cost2($filter['cost_from'], $filter['cost_to'], '', '', false, $filter['cost_type']); /* if (isset($filter['cost_from']) && !empty($filter['cost_from'])) { $ret .= (($ret =='') ? '' : ' ') . 'от $' . $filter['cost_from']; } if (isset($filter['cost_to']) && !empty($filter['cost_to'])) { $ret .= (($ret =='') ? '' : ' ') . 'до $' . $filter['cost_to']; } */ } } else { $ret = 'отключен'; } return $ret; }
/** * Сохраняет стоимость и срок выполнения работы. * * @param integer $uid id пользователя * @param integer $proj_id id работы * @param real $cost стоимость работы * @param integer $time_type тип срока (0 - часы, 1 - дни, 2 - месяцы) * @param integer $time_value срок выполнения работы (в единицах $time_type) * * @return string текст ошибки или пустая строка */ public function ChangePortfPrice($uid, $proj_id, $cost, $cost_type, $time_type, $time_value) { global $DB; global $portf_cost; $uid = intval($uid); $proj_id = intval($proj_id); $cost = intval($cost * 100) / 100; $time_type = intval($time_type); $time_value = intval($time_value); /** * Проверка. */ $error = ''; if ($cost < 0 || $cost > $portf_cost[$cost_type]) { $error .= ($error == '' ? '' : '<br />') . 'Недопустимое значение. Стоимость должна быть в пределе от 0 ' . view_range_cost2(0, $portf_cost[$cost_type], '', '', false, $cost_type) . '.'; } if ($time_value < 0 || $time_value > PORTF_TIME) { $error .= ($error == '' ? '' : '<br />') . 'Недопустимое значение. Срок должен быть в пределе от 0 до ' . PORTF_TIME . '.'; } if ($uid && $proj_id && $error == '') { $sql = "UPDATE portfolio SET cost = {$cost}, cost_type='{$cost_type}', time_type = {$time_type}, time_value = {$time_value} WHERE id=?i AND user_id=?i"; $DB->query($sql, $proj_id, $uid); $error = $DB->error; if ($error_db != '') { $error .= ($error_serv == '' ? '' : '<br />') . 'Ошибка сохранения в БД.'; } } if ($error != '') { $error = 'Данные не сохранены<br /><br />' . $error; } return $error; }