if ($spec_cnt = __paramInit('int', NULL, 'spec_cnt')) { $err = professions::buySpec($uid, $spec_cnt, $tr_id, '1 mon', 0); if ($err) { $error['spec'] = $err; } else { $_SESSION['bill.GET']['addinfo'] = "<a href=\"/users/{$_SESSION['login']}/setup/specaddsetup/\">—траница управлени¤ специализаци¤ми</a>"; } } else { $error['spec'] = 'Ќе верно указано заначение количества доп. специализаций '; } } } if ($answer_pay) { if ($_POST['answers_sum'] > 0) { $num_answers = intval($_POST['num_answers']); if (!($err = $answers->BuyByFM($uid, $num_answers, $tr_id, 0))) { $_SESSION['answers_ammount'] = $_POST['num_answers']; } if ($err) { $error['answers'] = $err; } } } if ($account->check_transaction($tr_id, $uid) && !$error) { $account->commit_transaction($tr_id, $uid, 'null'); } if (!$error) { header("Location: /bill/success/"); exit; } else { $_SESSION['bill.GET']['error'] = current($error);
/** * Обработка и оплата операций * * @global type $DB * @param type $option * @return boolean */ function billingOperation($option, $transaction_id) { global $DB; $ok = false; $account = new account(); switch ($option['op_code']) { // Аккаунт ПРО у фрилансера case 48: case 49: case 50: case 51: case 76: // Удаляем операции по покупке ответов - публикуем ответы $prof = new payed(); $ok = $prof->SetOrderedTarif($this->uid, $transaction_id, 1, "Аккаунт PRO", $option['op_code'], $error); if ($ok) { $_SESSION['pro_last'] = payed::ProLast($_SESSION['login']); $_SESSION['pro_last'] = $_SESSION['pro_last']['freeze_to'] ? false : $_SESSION['pro_last']['cnt']; $userdata = new users(); $_SESSION['pro_test'] = $userdata->GetField($this->uid, $error2, 'is_pro_test', false); $this->clearBlockedOperations(step_freelancer::OFFERS_OP_CODE); $step_frl = new step_freelancer(); $offers = $step_frl->getWizardOffers($this->uid, 'all', false); if ($offers) { require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/users.php"; $step_frl->log = $this->log; $step_frl->user = new users(); $step_frl->user->GetUserByUID($this->uid); $step_frl->transferOffers($offers); } $this->showProjectsFeedbacks(); } break; // Аккаунт ПРО у работодателя // Аккаунт ПРО у работодателя case 15: $prof = new payed(); $ok = $prof->SetOrderedTarif($this->uid, $transaction_id, 1, "Аккаунт PRO", $option['op_code'], $error); if ($ok) { $_SESSION['pro_last'] = payed::ProLast($_SESSION['login']); $_SESSION['pro_last'] = $_SESSION['pro_last']['freeze_to'] ? false : $_SESSION['pro_last']['cnt']; $userdata = new users(); $_SESSION['pro_test'] = $userdata->GetField($this->uid, $error2, 'is_pro_test', false); } // Обновляем выбор цвета для проектов тк он для ПРО бесплатный $colorProjects = $this->updateColorProject(); $prj = new new_projects(); foreach ($colorProjects as $k => $project) { $delete_color[] = $project['op_id']; if ($project['country'] == null) { $project['country'] = 'null'; } if ($project['city'] == null) { $project['city'] = 'null'; } $project['name'] = addslashes($project['name']); $project['descr'] = addslashes($project['descr']); if ($project['logo_id'] <= 0) { $project['logo_id'] = 'null'; } $project['payed_items'] = $project['payed_items'] | '010'; $project['is_color'] = 't'; $prj->editPrj($project, false); } // Удаляем данные операции if ($delete_color) { $this->deleteDraftAccountOperation($delete_color); } break; // Публикация конкурса // Публикация конкурса case new_projects::OPCODE_KON: case new_projects::OPCODE_KON_NOPRO: require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/wizard/step_wizard_registration.php'; $drafts = new drafts(); $draft = $drafts->getDraft($option['parent_id'], $this->uid, 1); // Если еще не опубликован if (!$draft['prj_id']) { $project_id = $draft['id']; $error = $account->Buy($bill_id, $transaction_id, $option['op_code'], $this->uid, $option['descr'], $option['comment'], 1, 0); $ok = $bill_id > 0; if ($bill_id) { $color = $DB->val("SELECT id FROM draft_account_operations WHERE parent_id = ? AND op_type = 'contest' AND option = 'color' AND uid = ?", $project_id, wizard::getUserIDReg()); $draft['billing_id'] = $bill_id; $draft['folder_id'] = 'null'; $draft['payed'] = '0'; $draft['payed_items'] = '000'; if (is_pro() && $color > 0) { $draft['is_color'] = 't'; } else { $draft['is_color'] = 'f'; } $draft['win_date'] = date('d-m-Y', strtotime($draft['win_date'])); $draft['end_date'] = date('d-m-Y', strtotime($draft['end_date'])); $draft['is_bold'] = 'f'; $draft['user_id'] = $this->uid; if ($draft['country'] == null) { $draft['country'] = 'null'; } if ($draft['city'] == null) { $draft['city'] = 'null'; } $draft['name'] = addslashes($draft['name']); $draft['descr'] = addslashes($draft['descr']); if ($draft['logo_id'] <= 0) { $draft['logo_id'] = 'null'; } $prj = new new_projects(); $attachedfiles_tmpdraft_files = drafts::getAttachedFiles($option['parent_id'], 4); if ($attachedfiles_tmpdraft_files) { $attachedfiles_tmpdraft_files = array_map(create_function('$a', 'return array("id" => $a);'), $attachedfiles_tmpdraft_files); } if ($attachedfiles_tmpdraft_files) { $month = date('Ym'); $dir = 'projects/upload/' . $month . '/'; $files = step_wizard_registration::transferFiles($attachedfiles_tmpdraft_files, 'file_projects', $dir); } $spec = $draft["categories"]; $spec = explode("|", $spec); $spec = array(array('category_id' => $spec[0], 'subcategory_id' => $spec[1])); $prj->addPrj($draft, $files); $prj->saveSpecs($draft["id"], $spec); // смотрим были ли выбраны платные опции для опубликованного конкурса if ($draft['id'] != $project_id && $draft['id'] > 0) { if ($this->sleep[$project_id]) { foreach ($this->sleep[$project_id] as $k => $opt) { $opt['parent_id'] = $draft['id']; $this->billingOperation($opt); } } else { //Обновляем родителя на всякий случай $update = array("parent_id" => $draft['id']); $DB->update("draft_account_operations", $update, "parent_id = ? AND op_type = 'contest' AND uid = ?", $project_id, wizard::getUserIDReg()); $this->sleep_parent[$project_id] = $draft['id']; } $DB->update("draft_projects", array('prj_id' => $draft['id']), "id = ? AND uid = ?", $project_id, wizard::getUserIDReg()); } } } break; // Платный проект/конкурс // Платный проект/конкурс case 53: $prj = new new_projects(); if ($this->sleep_parent[$option['parent_id']]) { $option['parent_id'] = $this->sleep_parent[$option['parent_id']]; } $project = $prj->getProject($option['parent_id']); if (!$project['id']) { $this->sleep[$option['parent_id']][$option['id']] = $option; return true; } else { unset($this->sleep[$option['parent_id']]); } if ($project['country'] == null) { $project['country'] = 'null'; } if ($project['city'] == null) { $project['city'] = 'null'; } $project['name'] = addslashes($project['name']); $project['descr'] = addslashes($project['descr']); if ($project['logo_id'] <= 0) { $project['logo_id'] = 'null'; } $project['folder_id'] = 'null'; $items = array(); switch ($option['option']) { case 'top': $project['top_days'] = $option['op_count']; break; case 'color': $is_pay = $project['payed_items'] & '010'; if ($is_pay != '010') { $project['payed_items'] = $project['payed_items'] | '010'; $project['is_color'] = 't'; $items['color'] = true; if (is_pro()) { $is_payed = true; $prj->SavePayedInfo($items, $project['id'], null, $project['top_days']); $prj->editPrj($project, false); } } else { $is_payed = true; } break; case 'bold': $is_pay = $project['payed_items'] & '001'; if ($is_pay != '001') { $project['payed_items'] = $project['payed_items'] | '001'; $project['is_bold'] = 't'; $items['bold'] = true; } else { $is_payed = true; } break; case 'logo': $is_pay = $project['payed_items'] & '100'; if ($is_pay != '100') { $key = md5(microtime()); $prj = new tmp_project($key); $prj->init(1); $fu = new CFile($option['src_id']); $ext = $fu->getext(); $tmp_dir = $prj->getDstAbsDir(); $tmp_name = $fu->secure_tmpname($tmp_dir, '.' . $ext); $tmp_name = substr_replace($tmp_name, "", 0, strlen($tmp_dir)); $fu->table = 'file_projects'; $r = $fu->_remoteCopy($tmp_dir . $tmp_name); $project['payed_items'] = $project['payed_items'] | '100'; $project['logo_id'] = $fu->id; $items['logo'] = true; if ($option['extra']) { $project['link'] = $option['extra']; } } else { $is_payed = true; } break; } if (!$is_payed) { $error = $account->Buy($bill_id, $transaction_id, $option['op_code'], $this->uid, $option['descr'], $option['comment'], $option['ammount'], 0); $ok = $bill_id > 0; $project['billing_id'] = $bill_id; $prj->SavePayedInfo($items, $project['id'], $bill_id, $project['top_days']); $prj->editPrj($project, false); } else { $ok = true; } break; // Платные ответы на проекты // Платные ответы на проекты case 61: $answers = new projects_offers_answers(); $error = $answers->BuyByFM($this->uid, $option['op_count'], $transaction_id, 0); if (!$error) { $ok = true; $_SESSION['answers_ammount'] = $option['op_count']; // Публикуем ответы $step_frl = new step_freelancer(); $offers = $step_frl->getWizardOffers($this->uid, $option['op_count']); if ($offers) { require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/users.php"; $step_frl->log = $this->log; $step_frl->user = new users(); $step_frl->user->GetUserByUID($this->uid); $step_frl->transferOffers($offers); } } break; } return $ok; }
$comm_blocked = $contest->is_pro || $contest->is_moder ? $_POST['comm_blocked'] : $contest->offer['comm_blocked'] == 't'; $comment = change_q_x(antispam(substr($_POST['comment'], 0, 30000)), false, true, 'b|br|i|p|ul|li|cut|h[1-6]{1}', false, false); if (!$contest->ChangeOffer($contest->offer['id'], $comment, $_POST['files'], $comm_blocked)) { header('Location: ' . getFriendlyURL('project', $project['id']) . "?offer={$contest->offer['id']}"); exit; } } } } else { $obj_offer->ChangeOfferKon($uid, $project['id'], $_POST['ps_work_pict'], $_POST['ps_work_prev_pict']); header('Location: ' . getFriendlyURL('project', $project['id']) . '?' . intval($project['id']) . $from_prm_s); } } break; case 'buy': if (!($error = $answers->BuyByFM($_SESSION['uid'], $_POST['ammount']))) { header('Location: ' . getFriendlyURL('project', $project['id'])); exit; } break; case 'payed_is_color': $offer_id = __paramInit('int', null, 'id_offers'); $account = new account(); $transaction_id = $account->start_transaction(get_uid()); $project_id = $obj_offer->getProjectIDByOfferID($offer_id); $error_buy = $account->Buy($billing_id, $transaction_id, $answers->color_op_code, get_uid(), 'Выделение ответа на проект цветом', "Выделение <a href='" . getFriendlyURL('project', $project_id) . "#freelancer_{$_SESSION['uid']}' target='_blank'>ответа на проект</a> цветом", 1, 1); $is_color = 't'; $payed_items = '1'; if ($error_buy) { $is_color = 'f'; $payed_items = '0';
session_start(); get_uid(); if (!$_SESSION['uid']) { header("Location: /fbd.php"); exit; } if (is_emp()) { header("Location: /frl_only.php"); exit; } $answers = new projects_offers_answers(); $action = isset($_GET['action']) ? $_GET['action'] : ''; if ($action == 'buy') { if (isset($_POST['back_uri'])) { $_SESSION['bill.GET']['back'] = $_POST['back_uri']; } $ammount = $_POST['ammount']; $cost = $answers->op_codes[$ammount]; if (!($error = $answers->BuyByFM($_SESSION['uid'], $ammount))) { $_SESSION['answers_ammount'] = $_POST['ammount']; header("Location: /service/offers/offers_payed.php?answers={$ammount}&cost={$cost}"); exit; } } $page_title = "Ответы на проекты - фриланс, удаленная работа на FL.ru"; $css_file = "projects.css"; $js_file = array('/css/block/b-promo/b-promo.js'); $content = "content.php"; $header = "../../header.php"; $footer = "../../footer.html"; include $rpath . "template2.php";
private function setAnswers() { global $DB; $uid = (int) $_POST['uid']; $amount = (int) $_POST['amount']; if ($amount != 1 && $amount != 5 && $amount != 10) { $this->jsonError('Некорректное значение количества FM'); } $role = $DB->val("SELECT role FROM users WHERE uid = {$uid}"); $role = $role[0]; if ($role === '0') { $answers = new projects_offers_answers(); $error = $answers->BuyByFM($uid, $amount); if ($error === 0) { $this->jsonOk(); } else { $this->jsonError($error ? $error : 'Произошла неизвестная ошибка'); } } else { $this->jsonError('Пользователь не найден или является работодателем'); } }