/** * Обработка информации по шагу портфолио */ public function actionPortfolio() { require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/professions.php"; $category = intval($_COOKIE['your_categories']); $spec = intval($_COOKIE['your_subcategories']); if ($category > 0) { $category_name = professions::GetGroupName($category); } else { $category = 0; } if ($spec > 0) { $subcategory_name = professions::GetProfName($spec); } else { $spec = 0; } $action = __paramInit('string', null, 'action'); if ($action == 'upd_portf') { $error = $this->actionProcessingPortfolio(); if ($error) { $data = $this->request; $portf_insert = $this->portf_insert; /*if($data['resume'] > 0) { $resume = new CFile($data['resume']); }*/ } } else { // запись в базе для текущего портфолио $field = $this->parent->getFieldsUser(); // все данные портфолио $data = unserialize($field['portfolio']); // сохраненные работы для текущего портфолио $portf_insert = $this->getWorks(); } if ($data['resume'] > 0) { $resume = new CFile($data['resume']); } $curr_hour_name = $this->CURRENCY_TYPE[$data['cost_type_hour']]; $curr_month_name = $this->CURRENCY_TYPE[$data['cost_type_month']]; // подготовка специализации для вывода в шаблон $spec = $data['spec']; $specString = professions::GetProfNameWP($spec, '/', null, false); list($category_name, $subcategory_name) = explode('/', $specString); $count_portf = $this->getCountWorks(); $answersExists = $this->_getCountAnswers(); include $_SERVER['DOCUMENT_ROOT'] . "/wizard/registration/steps/tpl.step.portfolio.php"; }
/** * Взять все данные по проекту из истории * * @param integer $prj_id Ид проекта * @return array */ function GetPrjHistory($prj_id) { global $DB; $sql = "SELECT p.*, city.city_name, country.country_name \n FROM projects_history AS p \n LEFT JOIN city ON city.id = p.city\n LEFT JOIN country ON country.id = p.country\n WHERE p.id=?i"; $project = $DB->row($sql, $prj_id); if ($project) { $project['spec_txt'] = ''; if ($project['specs']) { $sp = array(); $spec_t = preg_split("/,/", $project['specs']); foreach ($spec_t as $spec_t_item) { $spec_t_i = preg_split("/\\|/", $spec_t_item); array_push($sp, array('category_id' => $spec_t_i[0], 'subcategory_id' => $spec_t_i[1])); } $parts = array(); foreach ($sp as $item) { $name = ''; if ($item['subcategory_id']) { $name = professions::GetProfNameWP($item['subcategory_id'], ' / '); } elseif ($item['category_id']) { $name = professions::GetGroupName($item['category_id']); } else { continue; } $parts[] = $name; } $project['spec_txt'] = implode(' ', $parts); } if ($project['files']) { $files = preg_split("/,/", $project['files']); $project['attach'] = array(); $month = date('Ym'); foreach ($files as $file) { array_push($project['attach'], array('name' => $file, 'path' => 'projects/upload/' . $month)); } } } return $project; }
/** * достает профессии из sbr_to_spec и помещает их в $this->data['professions']. */ public function retrieveProfession() { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/professions.php'; global $DB; if (!$this->data['id']) { return; } $sql = 'SELECT category_id, subcategory_id FROM sbr_to_spec WHERE sbr_id = ?i ORDER BY id DESC'; $res = $DB->rows($sql, $this->data['id']); $this->data['professions'] = array(); if (is_array($res)) { foreach ($res as $prof) { $prof['prof_name'] = $prof['subcategory_id'] ? professions::GetProfNameWP($prof['subcategory_id'], ': ', '', false) : professions::GetGroupName($prof['category_id']); if ($prof['subcategory_id']) { $prof['default'] = $prof['subcategory_id']; $prof['default_column'] = 1; } else { $prof['default'] = $prof['category_id']; $prof['default_column'] = 0; } $this->data['professions'][] = $prof; } } else { $this->data['professions'] = array(); } }
// Все изменения $tmpPrj->_project переносим в переменную. $project = $tmpPrj->getProject(); if (trim($project['contacts']) != '') { $contacts = unserialize($project['contacts']) ? unserialize($project['contacts']) : $contacts; } if ($project['country']) { $location = country::GetCountryName($project['country']); if ($project['city']) { $location .= ': ' . city::GetCityName($project['city']); } $project['location'] = $location; } $prj_categories = $tmpPrj->getCategories(); if ($prj_categories) { foreach ($prj_categories as $ind => $category) { $prj_categories[$ind]['prof_name'] = $category['subcategory_id'] ? professions::GetProfNameWP($category['subcategory_id'], ': ', '', false) : professions::GetGroupName($category['category_id']); } } if ($step > 0) { $tmpPrj->fix(); } if (!$additional_header) { $additional_header = ''; } //$additional_header .= '<script type="text/javascript" src="/scripts/tawl_bem.js"></script>'; $js_file[] = 'tawl_bem.js'; if ($content == 'content2.php') { //$additional_header .= '<script type="text/javascript" src="/css/block/b-shadow/b-shadow.js"></script>'; $js_file[] = '/css/block/b-shadow/b-shadow.js'; } else { if ($content == 'new/tpl.step_1.php') {
/** * Информация о заказе в HTML по id в account_operations: логин, имя пользователя, где размещено, время действия. * @param integer $bill_id id операции в account_operations * @param integer $uid uid пользователя * @return string данные о заказе в виде HTML */ public function GetOrderInfo($bill_id, $uid) { include_once $_SERVER['DOCUMENT_ROOT'] . '/classes/professions.php'; global $DB; $sql = "SELECT * FROM mass_sending WHERE account_op_id = ? LIMIT 1"; $row = $DB->row($sql, $bill_id); $out = "Для " . $row['all_count'] . " " . getTermination($row['all_count'], array('пользователя', 'пользователей', 'пользователей')); $sql = "SELECT * FROM mass_sending_profs WHERE mass_sending_id = ?"; $row2 = $DB->rows($sql, $row['id']); if (is_array($row2) && count($row2)) { $sect = array(); foreach ($row2 as $ms) { if ((int) $ms['prof_id']) { $sect[] = professions::GetProfNameWP((int) $ms['prof_id']); } else { $sect[] = professions::GetGroupName((int) $ms['group_id']) . "/Все разделы"; //'Все разделы'; } } $out .= ', ' . implode(', ', $sect); } return $out; }
/** * Обработка информации шага проекты. */ public function actionProjects() { $prj_id = $_SESSION['view_wizard_project']; if (!$prj_id) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/attachedfiles.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/project_exrates.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/professions.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/country.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/city.php'; $prj_exrates = project_exrates::GetAll(); $categories = professions::GetAllGroupsLite(); $professions = professions::GetAllProfessions(); array_group($professions, 'groupid'); $professions[0] = array(); $addedPrc = is_pro() ? 0 : new_projects::PRICE_ADDED; $colorPrc = new_projects::PRICE_COLOR * ($addedPrc > 0 ? 1 : 0); $boldPrc = new_projects::PRICE_BOLD + $addedPrc; $logoPrc = new_projects::PRICE_LOGO + $addedPrc; $cTopPrice = new_projects::PRICE_CONTEST_TOP1DAY + $addedPrc; $pTopPrice = new_projects::PRICE_TOP1DAY + $addedPrc; $action = __paramInit('string', 'action', 'action', null); $attachedfiles_session = __paramInit('string', 'attachedfiles_session', 'attachedfiles_session', false); // проверяем есть ли уже созданый проект $projects = $this->getCreatedProjects(); $existPrjID = count($projects) > 0 ? $projects[0][id] : null; // выводим ранее сохраненный проект if ($action != 'create_project' && $existPrjID) { $data = $projects[0]; list($category, $subcategory) = explode('|', $data['categories']); $currency_name = $this->CURRENCY_TYPE[$data['currency']]; $priceby_name = $this->PRICEBY_TYPE[$data['priceby']]; $data['pro_only'] = $data['pro_only'] === 't'; $price = $data['payed']; $option = array(); $option['top'] = $data['top_count'] > 0; $option['top_count'] = $data['top_count']; $option['color'] = $data['is_color'] === 't'; $option['bold'] = $data['is_bold'] === 't'; $option['logo'] = $data['logo_id'] > 0; } elseif ($action == 'create_project') { // сохраняем новый проект или изменяем старый $in_office = __paramInit('int', null, 'in_office', 0); $type = __paramInit('string', null, 'kind'); if ($type == 'contest') { $data['kind'] = 7; $data['end_date'] = date('d-m-Y', strtotime(__paramInit('string', null, 'end_date_eng_format', 0))); $data['win_date'] = date('d-m-Y', strtotime(__paramInit('string', null, 'win_date_eng_format', 0))); } elseif ($in_office == 1) { $location = __paramInit('integer', null, 'location_column_id'); if ($location == 1) { $data['city'] = __paramInit('integer', null, 'location_db_id'); $data['country'] = country::getCountryByCityId($data['city']); } else { $data['country'] = __paramInit('integer', null, 'location_db_id'); } $data['kind'] = 4; } else { $data['kind'] = 1; } $data['name'] = __paramInit('string', null, 'name'); $data['descr'] = __paramInit('string', null, 'descr'); $category = __paramInit('int', null, 'r_category'); $subcategory = __paramInit('int', null, 'r_subcategory'); $agreement = __paramInit('int', null, 'agreement', 0); $data['pro_only'] = __paramInit('int', null, 'pro_only', 0) == 1 ? true : false; if ($agreement != 1) { $data['cost'] = __paramInit('int', null, 'cost', 0); $data['priceby'] = __paramInit('int', null, 'r_priceby', 0); $data['currency'] = __paramInit('int', null, 'r_currency', 0); $data['budget_type'] = __paramInit('int', null, 'budget_type', 0); } if (is_empty_html($data['descr'])) { $error['descr'] = 'Поле не заполнено'; } if (is_empty_html($data['name'])) { $error['name'] = 'Поле не заполнено'; } // проверяем длину необработанной строки, а иначе спецсимволы считаются как несколько символов if (strlen(stripslashes($_POST['name'])) > 60) { $error['name'] = 'Превышен лимит - 60 символов'; } if (!$category) { $error['category'] = 'Не выбран раздел'; } elseif ($subcategory) { $data['categories'] = "{$category}|{$subcategory}"; } else { $data['categories'] = $category; } if ($data['cost'] < 0) { $error['cost'] = 'Введите положительную сумму'; } if ($data['cost'] > 999999) { $error['cost'] = 'Слишком большая сумма'; } if ($data['cost'] > 0 && ($data['currency'] < 0 || $data['currency'] > 3)) { $error['currency'] = 'Валюта не определена'; } if ($data['cost'] > 0 && ($data['priceby'] < 1 || $data['priceby'] > 4)) { $error['priceby'] = 'Вид бюджета не определен'; } $descr_limit = projects::LIMIT_DESCR; if (strlen_real($data['descr']) > $descr_limit) { $error['descr'] = "Исчерпан лимит символов ({$descr_limit})"; } if ($data['kind'] == 7) { if (!preg_match("/^([0-9]{1,2})\\-([0-9]{1,2})\\-([0-9]{4})\$/", $data['end_date'], $o1) || !checkdate($o1[2], $o1[1], $o1[3])) { $error['end_date'] = 'Неправильная дата'; } if (!preg_match("/^([0-9]{1,2})\\-([0-9]{1,2})\\-([0-9]{4})\$/", $data['win_date'], $o2) || !checkdate($o2[2], $o2[1], $o2[3])) { $error['win_date'] = 'Неправильная дата'; } if (!$error['end_date'] && mktime(0, 0, 0, $o1[2], $o1[1], $o1[3]) <= mktime(0, 0, 0)) { $error['end_date'] = 'Дата окончания конкурса не может находиться в прошлом'; } if (!$error['win_date'] && mktime(0, 0, 0, $o2[2], $o2[1], $o2[3]) <= mktime(0, 0, 0, $o1[2], $o1[1], $o1[3])) { $error['win_date'] = 'Дата определения победителя должна быть больше даты окончания конкурса'; } } $option['top'] = __paramInit('int', null, 'option_top', 0); $option['top_count'] = __paramInit('int', null, 'option_top_count', 0); $option['color'] = __paramInit('int', null, 'option_color', 0); $option['bold'] = __paramInit('int', null, 'option_bold', 0); $option['logo'] = __paramInit('int', null, 'option_logo', 0); // логотип if ($option['logo'] == 1) { $data['logo_link'] = str_replace('http://', '', __paramInit('string', null, 'logo_link', null)); $data['logo_id'] = __paramInit('int', null, 'logo_id', null); // если выбрана опция "Логотип со ссылкой", то картинка должна быть обязательно if (!$data['logo_id']) { $error['logo_image'] = 'Отсутствует логотип'; } if ($data['logo_link'] === 'Адрес сайта') { $data['logo_link'] = ''; } if ($data['logo_link'] !== '' && !is_url($data['logo_link'])) { $error['logo_link'] = 'Не верно введен адрес'; } } else { $data['logo_id'] = null; } $price = 0; // закрепление на верху if ($option['top'] == 1 && $option['top_count'] > 0) { if ($option['top_count'] > 999) { $option['top_count'] = 999; } $price = (int) $option['top_count'] * ($data['kind'] == 7 ? $cTopPrice : $pTopPrice); $data['top_count'] = (int) $option['top_count']; $pay_option[] = array('wiz_uid' => $this->getWizardUserID(), 'op_code' => new_projects::OPCODE_PAYED, 'option' => self::PROJECT_OPTION_TOP, 'type' => $data['kind'] == 7 ? self::BILL_TYPE_CONTEST : self::BILL_TYPE_PROJECT, 'ammount' => $price); } else { $data['top_count'] = 0; } // выделение цветом if ($option['color'] == 1) { $price += (int) $colorPrc; $data['is_color'] = true; $pay_option[] = array('wiz_uid' => $this->getWizardUserID(), 'op_code' => new_projects::OPCODE_PAYED, 'option' => self::PROJECT_OPTION_COLOR, 'type' => $data['kind'] == 7 ? self::BILL_TYPE_CONTEST : self::BILL_TYPE_PROJECT, 'ammount' => $colorPrc); } else { $data['is_color'] = false; } // выделение жирным if ($option['bold'] == 1) { $price += (int) $boldPrc; $data['is_bold'] = true; $pay_option[] = array('wiz_uid' => $this->getWizardUserID(), 'op_code' => new_projects::OPCODE_PAYED, 'option' => self::PROJECT_OPTION_BOLD, 'type' => $data['kind'] == 7 ? self::BILL_TYPE_CONTEST : self::BILL_TYPE_PROJECT, 'ammount' => $boldPrc); } else { $data['is_bold'] = false; } if ($option['logo'] == 1) { $price += (int) $logoPrc; $pay_option[] = array('wiz_uid' => $this->getWizardUserID(), 'op_code' => new_projects::OPCODE_PAYED, 'option' => self::PROJECT_OPTION_LOGO, 'type' => $data['kind'] == 7 ? self::BILL_TYPE_CONTEST : self::BILL_TYPE_PROJECT, 'ammount' => $logoPrc); } if ($price > 0) { $data['payed'] = (int) $price; } if (!$error) { $data['wiz_uid'] = $this->getWizardUserID(); // если проект уже есть if ($existPrjID) { // то просто обновляем его $prj_id = $this->updateProject($data, $existPrjID); // и очищаем все платные опции для этого проекта wizard_billing::clearPayedOptions($prj_id); } else { $prj_id = $this->createProject($data); } if ($prj_id && $_POST['attachedfiles_session']) { $attachedfiles = new attachedfiles($_POST['attachedfiles_session']); $files = $attachedfiles->getFiles(array(1, 2, 3, 4)); $this->parent->addAttachedFiles($files, $prj_id); $attachedfiles->clear(); } if ($prj_id && $data['kind'] == 7) { $insert = array('wiz_uid' => $data['wiz_uid'], 'op_code' => new_projects::OPCODE_KON_NOPRO, 'type' => self::BILL_TYPE_CONTEST, 'ammount' => new_projects::getKonkursPrice(), 'parent' => $prj_id); wizard_billing::addPaidOption($insert); } if ($price > 0 && $prj_id) { foreach ($pay_option as $k => $opt) { $opt['parent'] = $prj_id; wizard_billing::addPaidOption($opt); } } if ($prj_id) { $_SESSION['view_wizard_project'] = $prj_id; header('Location: /wizard/registration/'); exit; } else { $error['project'] = 'Ошибка записи проекта'; } } $currency_name = __paramInit('string', null, 'currency'); $priceby_name = __paramInit('string', null, 'priceby'); } // Генерируем данные для вывода ошибок и заполнения полей $loc[] = country::GetCountryName($data['country']); if ($data['city']) { $loc[] = city::GetCityName($data['city']); } $location_name = implode(': ', $loc); $cat[] = professions::GetGroupName($category); if ($subcategory) { $cat[] = professions::GetProfName($subcategory); } $category_name = implode(': ', $cat); if ($data['logo_id']) { $file = new CFile($data['logo_id']); $logo_path = WDCPREFIX . '/' . $file->path . $file->name; } include $_SERVER['DOCUMENT_ROOT'] . '/wizard/registration/steps/tpl.step.project.php'; } else { $project = $this->getProjectById($prj_id); $attached = $this->getProjectAttach($prj_id); include $_SERVER['DOCUMENT_ROOT'] . '/wizard/registration/steps/tpl.step.project.view.php'; } }