/** * Метод сразу печатает в поток окошко попапа * см render. * * @return bool */ public function run() { //Для фрилансера ненужен попап if ($this->is_auth && !$this->is_emp) { return false; } $is_emp = $this->is_emp && $this->is_auth; $is_allowOrderReserve = tservices_helper::isAllowOrderReserve($this->data['category_id']); //Для анонимуса и заказчика показываем соответствующий попап с учетом доступа $sufix = $is_emp ? 'emp' : 'reg'; //Задействуем для этого юзера и категории ТУ новую БС с резервом или нет $sufix .= $is_allowOrderReserve ? '-reserve' : ''; if ($is_emp && $is_allowOrderReserve) { $reservesTaxes = ReservesTaxes::model(); $this->data['reserveTax'] = $reservesTaxes->getTax($this->data['price'], true); $this->data['priceWithTax'] = $reservesTaxes->calcWithTax($this->data['price']); $this->data['reserveAllTaxJSON'] = json_encode($reservesTaxes->getList()); } $this->render("t-service-order-popup-{$sufix}", $this->data); }
/** * Установка исполнителя проекта. * * @param integer $po_id id предложения к проекту * @param unknown_type $prj_id id проекта * @param unknown_type $user_id id юзера-исполнителя * * @return xajax response */ function SelectProjectExecutor($po_id, $prj_id, $user_id, $type, $exec_po_id = 0) { session_start(); $user = new users(); $prj = new projects(); $prj_offer = new projects_offers(); $po_id = intval($po_id); $prj_id = intval($prj_id); $exec_po_id = intval($exec_po_id); $user_id = intval($user_id); $user_name = $user->GetName($user_id, $error); $emp_id = get_uid(false); $emp_name = $user->GetName($emp_id, $error); $objResponse = new xajaxResponse(); $pod = new projects_offers_dialogue(); $pod->markReadEmp(array($po_id), $emp_id); //Не позволяем производить действия с заблокированным проектом if (projects::CheckBlocked(intval($prj_id))) { $objResponse->script("document.location.href='/projects/index.php?pid=" . intval($prj_id) . "'"); return $objResponse; } $project = $prj->GetPrj($emp_id, $prj_id, 1); if (tservices_helper::isAllowOrderReserve()) { //@todo: отправляем на форму нового заказа на базе проекта для текущего предложения фрилансера $objResponse->script("document.location.href='/new-project-order/{$po_id}/'"); return $objResponse; } if ($error = $prj->SetExecutor($prj_id, $user_id, $emp_id)) { $objResponse->alert($error); return $objResponse; } $project['exec_id'] = $user_id; //Отправляем уведомления участникам сделки $smail = new projects_smail(); $smail->onSetExecutorFrl($project); $smail->onSetExecutorEmp($project); //Отправляем СМС уведомление ProjectsSms::model($project['exec_id'])->sendStatus($project['status'], $project['id'], $project['kind']); require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/external/base.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/external/api/api.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/external/api/mobile.php'; externalApi_Mobile::addPushMsg($user_id, 'prj_select_performer', array('from_user_id' => $project['user_id'], 'name' => $project['name'], 'project_id' => $project['id'])); // Если находимся в "Не определен", тогда предыдущий исполнитель (если он был) сам попадает в "Не определен". // Перезагружаем в этом случае страницу. if ($type == 'o' && $project['exec_id']) { $objResponse->script("document.location.href=document.location.href.replace(/(&v=\\d*)?#offers\$/,'&v=" . mt_rand(1, 99999) . "#offers')"); return $objResponse; } list($po_offers_count, $msg_offers_count) = $prj_offer->CountPrjOffers($prj_id, 'offers'); $objResponse->assign('po_offers_count', 'innerHTML', $po_offers_count); if ($msg_offers_count > 0) { $objResponse->assign('op_count_offers_new_msgs', 'innerHTML', '<img src="/images/ico_envelop.gif" alt="" width="10" height="8" border="0"> ' . $msg_offers_count . ' ' . ending($msg_offers_count, 'новое сообщение', 'новых сообщения', 'новых сообщений')); } else { $objResponse->assign('op_count_offers_new_msgs', 'innerHTML', ''); if ($type == 'o') { $objResponse->remove('sort_box'); } } list($po_executor_count, $msg_executor_count) = $prj_offer->CountPrjOffers($prj_id, 'executor'); $objResponse->assign('po_executor_count', 'innerHTML', $po_executor_count); if ($msg_executor_count > 0) { $objResponse->assign('op_count_executor_new_msgs', 'innerHTML', '<img src="/images/ico_envelop.gif" alt="" width="10" height="8" border="0"> ' . $msg_executor_count . ' ' . ending($msg_executor_count, 'новое сообщение', 'новых сообщения', 'новых сообщений')); } else { $objResponse->assign('op_count_executor_new_msgs', 'innerHTML', ''); if ($type == 'i') { $objResponse->remove('sort_box'); } } list($po_candidate_count, $msg_candidate_count) = $prj_offer->CountPrjOffers($prj_id, 'candidate'); $objResponse->assign('po_candidate_count', 'innerHTML', $po_candidate_count); if ($msg_candidate_count > 0) { $objResponse->assign('op_count_candidate_new_msgs', 'innerHTML', '<img src="/images/ico_envelop.gif" alt="" width="10" height="8" border="0"> ' . $msg_candidate_count . ' ' . ending($msg_candidate_count, 'новое сообщение', 'новых сообщения', 'новых сообщений')); } else { $objResponse->assign('op_count_candidate_new_msgs', 'innerHTML', ''); if ($type == 'c') { $objResponse->remove('sort_box'); } } list($po_refuse_count, $msg_refuse_count) = $prj_offer->CountPrjOffers($prj_id, 'refuse'); $objResponse->assign('po_refuse_count', 'innerHTML', $po_refuse_count); if ($msg_refuse_count > 0) { $objResponse->assign('op_count_refuse_new_msgs', 'innerHTML', '<img src="/images/ico_envelop.gif" alt="" width="10" height="8" border="0"> ' . $msg_refuse_count . ' ' . ending($msg_refuse_count, 'новое сообщение', 'новых сообщения', 'новых сообщений')); } else { $objResponse->assign('op_count_refuse_new_msgs', 'innerHTML', ''); if ($type == 'r') { $objResponse->remove('sort_box'); } } if ($exec_po_id > 0) { //$objResponse->assign("po_b_exec_" . $exec_po_id, "innerHTML", '<a id="po_img_exec_' . $exec_po_id . '" class="b-button-multi__link" onclick="xajax_SelectProjectExecutor(' . $exec_po_id . ', ' . $prj_id . ', ' . $user_id . ', ' . "'" . $type . "'" . ', ' . $po_id . ');" href="javascript:void(0)" title="Буду работать с этим человеком."><span class="b-button-multi__inner"><span class="b-button-multi__icon b-button-multi__icon_green"></span><span class="b-button-multi__txt">Исполнитель</span></span></a>'); } //$objResponse->assign("po_b_exec_" . $po_id, "innerHTML", '<a id="po_img_exec_' . $po_id . '" class="b-button-multi__link" href="javascript:void(0)" title="Буду работать с этим человеком."><span class="b-button-multi__inner"><span class="b-button-multi__icon b-button-multi__icon_green"></span><span class="b-button-multi__txt">Исполнитель</span></span></a>'); //$objResponse->assign("po_b_select_" . $po_id, "innerHTML", '<a id="po_img_select_' . $po_id . '" class="b-button-multi__link" onclick="xajax_SelectProjectOffer(' . $po_id . ', ' . $prj_id . ', ' . $user_id . ', ' . "'" . $type . "'" . ');" href="javascript:void(0)" title="Прошел предварительный отбор. Может быть исполнителем"><span class="b-button-multi__inner"><span class="b-button-multi__icon b-button-multi__icon_blue"></span><span class="b-button-multi__txt">Кандидат</span></span></a>'); // $objResponse->assign("po_b_refuse_" . $po_id, "innerHTML", '<a id="po_img_refuse_' . $po_id . '" class="b-button-multi__link" onclick="show_fpopup(' . "'po_b_refuse_" . $po_id . "', 'po_m_refuse_" . $po_id . "'" . ');" href="javascript:void(0)" title="Этот человек мне не подходит. Может быть в следующий раз."><span class="b-button-multi__inner"><span class="b-button-multi__icon b-button-multi__icon_red"></span><span class="b-button-multi__txt">Отказать</span></span></a>'); $objResponse->script("removeNoteBar('{$user_name['login']}');"); $objResponse->remove('po_' . $po_id); $objResponse->remove('po_u_' . $po_id); $objResponse->remove('po_bar_' . $po_id); $offer = $prj_offer->GetPrjOffer($project['id'], $project['exec_id']); $sHtml = projects_helper::renderStatus($project, $offer); $objResponse->assign('project_status_' . $prj_id, 'innerHTML', $sHtml); --$_SESSION['offers_on_page']; if ($_SESSION['offers_on_page'] == 0) { $objResponse->script("document.location.href='/projects/index.php?pid=" . intval($prj_id) . '&type=' . $type . "'"); } return $objResponse; }
/** * Создание персонального заказа. */ public function actionNewPersonalOrder() { //@todo: на период разработки резерва заказов if (!tservices_helper::isAllowOrderReserve()) { $this->missingAction(null); } $login = __paramInit('string', 'user', 'user', null); $freelancer = new freelancer(); $freelancer->GetUser($login); if ($freelancer->uid <= 0) { $this->missingAction(null); } $form = new NewOrderForm(); if (isset($_POST) && sizeof($_POST) > 0 && $form->isValid($_POST)) { $data = $form->getValues(); $data['frl_id'] = $freelancer->uid; $data['emp_id'] = $this->uid; if ($order = $this->order_model->createPersonal($data)) { $tservices_smail = new tservices_smail(); $tservices_smail->newOrder($order); $this->redirect(sprintf(tservices_helper::url('order_card_url'), $order['id'])); } } //Выводим в сайдбар виджет индикатор статуса заказа $this->getClips()->add('sidebar', $this->widget('OrderStatusIndicator', array(), true)); $this->render('new-order-form', array('title' => 'Новый заказ', 'submit_title' => 'Предложить заказ', 'cansel_url' => '/', 'form' => $form, 'freelancer' => $freelancer)); }
//require_once($_SERVER['DOCUMENT_ROOT'] . "/classes/config.php"); //require_once($_SERVER['DOCUMENT_ROOT'] . "/classes/profiler.php"); //require_once($_SERVER['DOCUMENT_ROOT'] . "/classes/account.php"); //require_once($_SERVER['DOCUMENT_ROOT'] . "/classes/mem_storage.php"); //require_once($_SERVER['DOCUMENT_ROOT'] . '/tu/models/TServiceOrderModel.php'); require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/tservices/tservices_helper.php'; //------------------------------------------------------------------------------ $results = array(); //$profiler = new profiler(); //------------------------------------------------------------------------------ //$profiler->start('fill_frl_mem'); //------------------------------------------------------------------------------ $_SESSION['login'] = '******'; $results['test1'] = tservices_helper::isAllowOrderReserve(1); $results['test2'] = tservices_helper::isAllowOrderReserve(10); $_SESSION['login'] = '******'; $results['test3'] = tservices_helper::isAllowOrderReserve(10); unset($_SESSION['login']); $results['test4'] = tservices_helper::isAllowOrderReserve(10); unset($allow_categories_to_reserve, $allow_users_to_reserve); $results['test5'] = tservices_helper::isAllowOrderReserve(777, 'vasya'); //------------------------------------------------------------------------------ //$profiler->stop('fill_frl_mem'); //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ array_walk($results, function (&$value, $key) { $value = sprintf('%s = %s' . PHP_EOL, $key, $value); }); print_r(implode('', $results)); exit;
/** * Редактирование стоимости и сроков заказа ТУ * * @param type $order_id * @param type $price * @param type $days * * @return \xajaxResponse */ function tservicesOrdersSetPrice($order_id, $price, $days, $paytype) { $objResponse =& new xajaxResponse(); $uid = get_uid(false); $price = intval($price); $days = intval($days); $paytype = intval($paytype); //Валидация входных параметров $validator = new validation(); $valid = $validator->is_natural_no_zero($price) && $validator->greater_than_equal_to($price, 300); $valid = $valid && $validator->is_natural_no_zero($days) && $validator->numeric_interval($days, 1, 730); $valid = $valid && in_array($valid, array(TServiceOrderModel::PAYTYPE_DEFAULT, TServiceOrderModel::PAYTYPE_RESERVE)); if (!$valid) { return $objResponse; } //Получение заказа $orderModel = TServiceOrderModel::model(); $order_id = intval($order_id); $old_order = $orderModel->getCard($order_id, $uid); if (!$old_order) { return $objResponse; } //Валидация возможности изменений $is_new_status = $old_order['status'] == TServiceOrderModel::STATUS_NEW; $is_owner = $old_order['emp_id'] == $uid; $is_reserve_accepted = isset($old_order['reserve_data']); if (!($is_new_status && $is_owner && !$is_reserve_accepted)) { return $objResponse; } //Проверка возможности смены типа оплаты $is_reserve = tservices_helper::isOrderReserve($paytype); if ($is_reserve && !tservices_helper::isAllowOrderReserve($old_order['category_id'])) { return $objResponse; } if (!$is_reserve) { $paytype = TServiceOrderModel::PAYTYPE_DEFAULT; } $data = array('order_price' => $price, 'order_days' => $days, 'pay_type' => $paytype); //Меняем if ($orderModel->edit($order_id, $data, $old_order['tax'])) { $order = $old_order; $order['order_price'] = $price; $order['order_days'] = $days; $order['pay_type'] = $paytype; //Сохранить действие в историю $history = new tservices_order_history($order_id); $history->save($order, $old_order); //Уведомление на почту $tservices_smail = new tservices_smail(); $tservices_smail->changeOrder2($order, $old_order); //Обновляем интерфейс цен и сроков $objResponse->script("\$('tu-container-price').set('html', '" . tservices_helper::cost_format($price) . "');"); $objResponse->script("\$('tu-container-days').set('html', '" . tservices_helper::days_format($days) . "');"); $objResponse->script("\$('tu_edit_budjet_price').set('value', '" . $price . "');"); $objResponse->script("\$('tu_edit_budjet_days').set('value', '" . $days . "');"); //Обновляем сообщение статуса, т.к. вторая сторона тоже могла его изменить $tserviceOrderStatusWidget = new TServiceOrderStatus(); $tserviceOrderStatusWidget->setIsEmp(true); $tserviceOrderStatusWidget->setOrder($order); $tserviceOrderStatusWidget->init(); ob_start(); $tserviceOrderStatusWidget->run(); $statusHtml = ob_get_contents(); ob_end_clean(); $objResponse->assign('tservices_order_status_' . $order_id, 'innerHTML', $statusHtml); $objResponse->script("\n \$('tu-container-price').getParent()\n .removeClass('b-layout__link_bordbot_dot_" . ($is_reserve ? '000' : 'ee1d16') . "')\n .addClass('b-layout__link_bordbot_dot_" . ($is_reserve ? 'ee1d16' : '000') . "');\n \$('tu-container-price').getPrevious('span').set('html','" . ($is_reserve ? 'Бюджет:' : 'Стоимость:') . "'); \n "); } return $objResponse; }
/** * Метод сразу печатает в поток окошко попапа * см render * * @return boolean */ public function run() { //Задействуем для этого юзера и категории ТУ новую БС с резервом или нет $sufix = tservices_helper::isAllowOrderReserve($this->order['category_id']) ? '-reserve' : ''; $this->render("t-service-order-change-cost{$sufix}-popup", array('order' => $this->order)); }
public function testIsAllowOrderReserve() { $this->assertTrue(tservices_helper::isAllowOrderReserve(1)); }
$user_phone_projects = user_phone::getInstance()->render(user_phone::PLACE_PROJECTS); // Формируем JS внизу страницы define('JS_BOTTOM', true); $css_file = array('/css/block/b-frm-filtr/b-frm-filtr.css', '/css/block/b-opinion/b-opinion.css', '/css/block/b-free-share/b-free-share.css', '/css/block/b-note/b-note.css', '/css/block/b-button-multi/b-button-multi.css', '/css/block/b-prev/b-prev.css', '/css/nav.css', '/css/projects3.css'); $js_file[] = '/css/block/b-shadow/b-shadow.js'; if (!is_emp() && get_uid(false)) { $js_file[] = '/scripts/uploader.js'; $js_file[] = '/scripts/project_abuse.js'; } $status_content = null; if (in_array($project['kind'], array(1, 5, 9))) { $feedback_form = ''; $off_status = false; if ($project['exec_id'] > 0) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/tservices/tservices_helper.php'; if (tservices_helper::isAllowOrderReserve()) { require_once $_SERVER['DOCUMENT_ROOT'] . '/tu/models/TServiceOrderModel.php'; $orderModel = TServiceOrderModel::model(); $order_id = $orderModel->isExistByType($project['id'], $project['exec_id'], TServiceOrderModel::TYPE_PROJECT); $order_url = $order_id ? tservices_helper::getOrderCardUrl($order_id) : null; $off_status = $order_id ? true : false; } } if (!$off_status) { $js_file[] = '/scripts/projects/projects_status.js'; if ($project['kind'] == 9 && !isset($user_offer) && isset($offers)) { $user_offer = $offers[0]; } $status_content = projects_helper::renderStatus($project, $user_offer ? $user_offer : $exec_info); if ($status_content) { $feedback_form = projects_helper::renderFeedback($project['status']);