/** * События в заказе ТУ * * @return array */ public static function getTServicesOrdersTip() { $uid = get_uid(FALSE); $is_emp = is_emp(); $tips = array("Новое сообщение в заказе", "В заказах %d %s", "Новое событие в заказе", "В заказах %d %s и %d %s"); $msg_ending = array("новое сообщение", "новых сообщения", "новых сообщений"); $event_ending = array("новое событие", "новых события", "новых событий"); $tip = 'Мои заказы'; $link = ''; //@todo: здесь используются каунты без кеша //по мере заполнения БД они будут тормозить. Нужно переделать! $tserviceMsgModel = TServiceMsgModel::model(); $newTserviceMsgCount = $tserviceMsgModel->countNew($uid); $tserviceOrderModel = TServiceOrderModel::model(); $newTserviceOrderEventCount = $tserviceOrderModel->getCountEvents($uid, $is_emp); $total = $newTserviceMsgCount + $newTserviceOrderEventCount; $code = $newTserviceMsgCount > 0 ? 1 : 0; $code .= $newTserviceOrderEventCount > 0 ? 1 : 0; switch ($code) { case '10': $tip = $newTserviceMsgCount == 1 ? sprintf($tips[0]) : sprintf($tips[1], $newTserviceMsgCount, ending($newTserviceMsgCount, $msg_ending[0], $msg_ending[1], $msg_ending[2])); break; case '01': $tip = $newTserviceOrderEventCount == 1 ? sprintf($tips[2]) : sprintf($tips[1], $newTserviceOrderEventCount, ending($newTserviceOrderEventCount, $event_ending[0], $event_ending[1], $event_ending[2])); $link = $tserviceOrderModel->getLastEventOrderURL($uid, $is_emp); break; case '11': $tip = sprintf($tips[3], $newTserviceMsgCount, ending($newTserviceMsgCount, $msg_ending[0], $msg_ending[1], $msg_ending[2]), $newTserviceOrderEventCount, ending($newTserviceOrderEventCount, $event_ending[0], $event_ending[1], $event_ending[2])); break; } return array('count' => $total, 'tip' => $tip, 'link' => !empty($link) ? $link : ($is_emp ? "/users/" . $_SESSION['login'] : '') . "/tu-orders/"); }
/** * Инициализация контроллера. */ public function init() { parent::init(); $this->is_adm = hasPermissions('tservices'); $this->is_emp = (bool) is_emp(); $this->layout = '//layouts/content-with-right-sidebar-fixed'; $this->order_model = TServiceOrderModel::model(); }
public function run() { $debt_info = TServiceOrderModel::model()->isDebt($this->user_id); if (!$debt_info) { return; } //собираем шаблон $this->render('t-service-order-debt-message', array('debt_info' => $debt_info)); }
function tservices_order_auth($email, $name, $surname, $options) { $objResponse =& new xajaxResponse(); $name = substr(strip_tags(trim(stripslashes($name))), 0, 21); //Для регистрации $surname = substr(strip_tags(trim(stripslashes($surname))), 0, 21); //Для регистрации $email = substr(strip_tags(trim(stripslashes($email))), 0, 64); //Для регистрации и авторизации $tu_id = intval(@$options['tu_id']); $tservices = new tservices(); $tService = $tservices->getCard($tu_id); if (!$tService) { return $objResponse; } if (is_email($email)) { //Забираем только нужные нам ключи $options = array_intersect_key($options, array('extra' => '', 'is_express' => '', 'paytype' => '')); //Проверка входных параметров $is_valid_extra = !isset($options['extra']) || isset($options['extra']) && count(array_intersect(array_keys($tService['extra']), $options['extra'])) == count($options['extra']); $is_valid_express = !isset($options['is_express']) || isset($options['is_express']) && $options['is_express'] == '1' && $tService['is_express'] == 't'; $is_valid_paytype = isset($options['paytype']) && in_array($options['paytype'], array('0', '1')); if (!($is_valid_extra && $is_valid_express && $is_valid_paytype)) { return $objResponse; } $tservices_auth_smail = new tservices_auth_smail(); $user = new users(); $user->GetUser($email, true, true); //Проверяем на всякий случай там точно мыло совпало а то может логин $is_email = $user->email == $email; //Создаем хеш для ссылки активации $code = TServiceOrderModel::model()->newOrderActivation(array('user_id' => $user->uid > 0 ? $user->uid : null, 'tu_id' => $tService['id'], 'uname' => !empty($name) ? $name : null, 'usurname' => !empty($surname) ? $surname : null, 'email' => $email, 'options' => $options)); // Пользователь найден, ведь у него есть email. А как еще проверить? if ($user->uid > 0 && $is_email) { if (is_emp($user->role)) { $tservices_auth_smail->orderByOldUser($email, $tService, $code); $objResponse->call('TServices_Order_Auth.showSuccess', 'На указанную вами почту отправлено письмо со ссылкой-подтверждением. Пожалуйста, перейдите по ней для завершения процесса заказа услуги.'); } else { $objResponse->call('TServices_Order_Auth.showError', 'email', 'Данный e-mail принадлежит фрилансеру'); } } else { $tservices_auth_smail->orderByNewUser($email, $tService, $code); $objResponse->call('TServices_Order_Auth.showSuccess', 'На указанную вами почту отправлено письмо со ссылкой-подтверждением. Пожалуйста, перейдите по ней для завершения процесса заказа услуги.'); } } else { $objResponse->call('TServices_Order_Auth.showError', 'email', 'Неверно указана почта'); } return $objResponse; }
if (!isset($_SERVER['DOCUMENT_ROOT']) || !strlen($_SERVER['DOCUMENT_ROOT'])) { $_SERVER['DOCUMENT_ROOT'] = rtrim(realpath(pathinfo(__FILE__, PATHINFO_DIRNAME) . '/../../'), '/'); } require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/stdf.php'; //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'; //------------------------------------------------------------------------------ $results = array(); //$profiler = new profiler(); //------------------------------------------------------------------------------ //$profiler->start('fill_frl_mem'); //------------------------------------------------------------------------------ $code = TServiceOrderModel::model()->newOrderActivation(array('email' => '*****@*****.**', 'tu_id' => rand(100, 1000))); $results['code'] = sprintf('/tu/new-order/%s/', $code); //$results['test'] = 'test'; /* $uid = 6; $account = new account(); $ok = $account->GetInfo($uid, true); $results['GetInfo'] = (int)$ok; if($ok) { $sum = -777; $scomment = 'Это описание перевода для системы'; $ucomment = 'Это описание перевода для "истории" в аккаунте юзера'; $trs_sum = $sum; $op_date = date('c');//, strtotime($_POST['date']));
public function updateDocs($types = array(), $is_create = false, $override_data = array()) { ini_set('max_execution_time', 300); //ini_set('memory_limit', '512M'); if (empty($types)) { $is_create = true; } if (!$this->isReserveData()) { return false; } $orderModel = TServiceOrderModel::model(); $orderModel->attributes(array('is_adm' => true)); $orderData = $orderModel->getCard($this->getSrcId(), 0); if (!$orderData || !$orderModel->isReserve()) { return false; } $reserveInstance = $orderModel->getReserve(); if ($is_create) { //Если зарезервировали if ($reserveInstance->isStatusReserved()) { $base_doc_types[] = DocGenReserves::RESERVE_SPECIFICATION_TYPE; $base_doc_types[] = DocGenReserves::RESERVE_OFFER_CONTRACT_TYPE; $base_doc_types[] = DocGenReserves::RESERVE_OFFER_AGREEMENT_TYPE; } //Если резерв по безналу то нужен счет if (!$reserveInstance->isReserveByService()) { $base_doc_types[] = DocGenReserves::BANK_INVOICE_TYPE; } //Если сделка закрыта и исполнителю полагается выплата либо выплата в процессе if ($reserveInstance->isStatusPayInprogress() || $reserveInstance->isClosed() && (!$reserveInstance->isArbitrage() || $reserveInstance->isStatusPayPayed())) { $base_doc_types[] = DocGenReserves::ACT_COMPLETED_FRL_TYPE; } //Если сделка закрыта либо выплата в процессе if ($reserveInstance->isClosed() || $reserveInstance->isStatusPayInprogress()) { $base_doc_types[] = DocGenReserves::LETTER_FRL_TYPE; } //Если сделка закрыта if ($reserveInstance->isClosed()) { $base_doc_types[] = DocGenReserves::ACT_SERVICE_EMP_TYPE; $base_doc_types[] = DocGenReserves::AGENT_REPORT_TYPE; } //Если сделка закрыта по арбитражу if ($reserveInstance->isArbitrage() && $reserveInstance->isArbitrageClosed()) { $base_doc_types[] = DocGenReserves::ARBITRAGE_REPORT_TYPE; } $types = array_merge($types, $base_doc_types); } $types = array_unique($types); require_once ABS_PATH . '/classes/DocGen/DocGenReserves.php'; $this->getOrderHistory(); $doc = new DocGenReserves($orderData); $doc->deleteFiles($this->getSrcId(), $types); if (!empty($override_data)) { foreach ($override_data as $key => $value) { $doc->setOverrideField($key, $value); } } foreach ($types as $type) { switch ($type) { case DocGenReserves::BANK_INVOICE_TYPE: $reserveBank = $reserveInstance->getReservesBank(); if ($reserveBank) { $reqv = $reserveBank->getCheckByReserveId($reserveInstance->getID()); if ($reqv) { $reserveInstance->getReservesBank()->generateInvoice2($reqv); } } break; case DocGenReserves::ACT_COMPLETED_FRL_TYPE: $doc->generateActCompletedFrl(); break; case DocGenReserves::ACT_SERVICE_EMP_TYPE: $doc->generateActServiceEmp(); break; case DocGenReserves::AGENT_REPORT_TYPE: $doc->generateAgentReport(); break; case DocGenReserves::RESERVE_OFFER_CONTRACT_TYPE: //case DocGenReserves::RESERVE_OFFER_AGREEMENT_TYPE: $doc->generateOffers(); break; case DocGenReserves::RESERVE_SPECIFICATION_TYPE: $doc->generateSpecification(); break; case DocGenReserves::LETTER_FRL_TYPE: $doc->generateInformLetterFRL(); break; case DocGenReserves::ARBITRAGE_REPORT_TYPE: $doc->generateArbitrageReport(); break; } } return true; }
<?php //0028504 ini_set('display_errors', 1); error_reporting(E_ALL ^ E_NOTICE); ini_set('max_execution_time', 0); ini_set('memory_limit', '512M'); if (!isset($_SERVER['DOCUMENT_ROOT']) || !strlen($_SERVER['DOCUMENT_ROOT'])) { $_SERVER['DOCUMENT_ROOT'] = rtrim(realpath(pathinfo(__FILE__, PATHINFO_DIRNAME) . '/../../'), '/'); } require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/stdf.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/tu/models/TServiceOrderModel.php'; //------------------------------------------------------------------------------ exit; $tservicesOrderModel = new TServiceOrderModel(); $tservicesOrderModel->clearDebt(78809);
/** * Получить директорию для загружаемого файла. * * @param type $order_id * @param type $sess * @param type $uid * @param type $hash * * @return bool */ public static function getUploadPath($order_id, $sess, $uid, $hash) { require_once ABS_PATH . '/classes/tservices/tservices_helper.php'; $_hash = tservices_helper::getOrderUrlHash(array($order_id, $sess), $uid); //Если проверка принадлежности по хешу неудалась //то пробуем получить через БД if ($hash !== $_hash) { require_once ABS_PATH . '/tu/models/TServiceOrderModel.php'; $isMember = TServiceOrderModel::model()->isOrderMember($order_id, $uid); if (!$isMember) { return false; } } return sprintf(self::UPLOAD_FILE_PATH, '', $order_id); }
require_once $_SERVER['DOCUMENT_ROOT'] . '/tu/widgets/TServiceOrderFeedback.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/tu/models/TServiceOrderModel.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/tu/models/TServiceMsgModel.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/reserves/ReservesArbitragePopup.php'; // Формируем JS внизу страницы define('JS_BOTTOM', true); $js_file[] = 'mootools-form-validator.js'; $js_file[] = 'tservices/tservices_order.js'; $page = __paramInit('int', 'page', 'page', 1); if ($page <= 0) { $page = 1; } $on_page = 10; $tu_order_status = __paramInit('string', 's', 's', NULL); $is_owner = $user->uid == $uid; $tserviceOrderModel = new TServiceOrderModel(); //Если параметры не проходят валидацию то редирект на основную по умолчанию if (!$tserviceOrderModel->attributes(array('status' => $tu_order_status))) { header("Location: /users/{$user->login}/tu-orders/", TRUE, 301); exit; } $orders_list = $tserviceOrderModel->setPage($on_page, $page)->getListForEmp($user->uid); $tu_orders_cnts = $tserviceOrderModel->getCounts($user->uid); //Если вообще ничего нет то 404 if (!$tu_orders_cnts['total']) { include ABS_PATH . "/404.php"; exit; } //Виджет для рендера статуса $tserviceOrderStatusWidget = new TServiceOrderStatus(); $tserviceOrderStatusWidget->setIsOwner($is_owner);
} require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/payed.php'; $is_pro = payed::CheckPro($user->login); $no_banner = !!$is_pro; $user = new freelancer(); $user->GetUser($name); if (!$page && !$user->tabs[0] && $user->tabs[7]) { $page = $_GET['p'] = 'tu'; } elseif (!$page && !$user->tabs[0] && (!$user->tabs[3] && !hasPermissions('users')) && !$user->tabs[5] && !$user->tabs[6]) { $page = $_GET['p'] = 'opinions'; } //------------------------------------------------------------------------------ // Проверяем блокировку ТУ в профиле за не погашенный долг в ЛС require_once $_SERVER['DOCUMENT_ROOT'] . '/tu/models/TServiceOrderModel.php'; $hide_tu_for_others = FALSE; $_debt_info = TServiceOrderModel::model()->isDebt($user->uid); if ($_debt_info && $user->uid != $uid && $_debt_info['is_blocked'] == 't') { $hide_tu_for_others = TRUE; } //------------------------------------------------------------------------------ $action = __paramInit('string', NULL, 'action'); switch ($action) { case 'change_bn': if (!hasPermissions('users')) { break; } $frl = new freelancer(); $frl->boss_note = __paramInit('string', NULL, 'boss_note', ''); $frl->boss_rate = __paramInit('int', NULL, 'boss_rate', 0); $frl->update($user->uid, $res); unset($frl);
/** * Запрос на обновление истории заказа * * @param type $order_id * @return \xajaxResponse */ function getOrderHistory($order_id) { $objResponse =& new xajaxResponse(); $uid = get_uid(false); $order_id = intval($order_id); $orderModel = TServiceOrderModel::model(); $orderModel->attributes(array('is_adm' => hasPermissions('tservices'))); $order = $orderModel->getCard($order_id, $uid); if (!$order) { return $objResponse; } $tserviceOrderHistoryWidget = new TServiceOrderHistory(); $tserviceOrderHistoryWidget->setOrderId($order_id); $tserviceOrderHistoryWidget->init(); ob_start(); $tserviceOrderHistoryWidget->run(); $historyHtml = ob_get_contents(); ob_end_clean(); $objResponse->assign('history', 'innerHTML', $historyHtml); //Заодно обновляем индикатор статуса $orderStatusIndicator = new OrderStatusIndicator(); $orderStatusIndicator->order = $order; $html = $orderStatusIndicator->getAjaxRender(); $objResponse->assign('order_status_indicator', 'innerHTML', $html); return $objResponse; }
$uid = get_uid(); // Предложения по проектам. $obj_offer = new projects_offers(); $po_waste = projects_offers::GetFrlOffersWaste($uid); $pocnt[0] = $po_summary['total'] - (int) $po_waste['total']; $pocnt[2] = $po_summary['selected'] - (int) $po_waste['selected']; $pocnt[3] = $po_summary['executor_2'] - (int) $po_waste['executor']; $pocnt[4] = $po_summary['refused'] - (int) $po_waste['refused']; $pocnt[5] = (int) $po_waste['total']; $pocnt[1] = $pocnt[0] - $pocnt[2] - $pocnt[3] - $pocnt[4] - $pocnt[6]; $page = __paramInit('int', 'page', 'page', 1); $pages = 1; $prj_count = 0; //Получаем количество заказов по ТУ require_once $_SERVER['DOCUMENT_ROOT'] . '/tu/models/TServiceOrderModel.php'; $tu_cnts = TServiceOrderModel::model()->getCounts($uid, FALSE); ?> <h1 class="b-page__title" id="prj_name_<?php echo $project['id']; ?> "><?php echo $sBox1; echo reformat($sTitle, 30, 0, 1); ?> </h1> <ul class="frl-prj-sort"> <?php if ($tu_cnts['total'] > 0) { ?> <li><a href="/tu-orders/">Все заказы</a> <span><?php echo $tu_cnts['total'];
public function doActivation($code) { $activation_data = $this->getActivation($code); if (!$activation_data) { return false; } $this->deleteActivation($code); $current_uid = get_uid(false); if ($current_uid) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/employer.php'; $user = new employer(); $user->GetUserByUID($current_uid); $status = 1; } else { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/registration.php'; $registration = new registration(); $user_data = $registration->autoRegistationAndLogin(array('uid' => $activation_data['user_id'], 'role' => 1, 'email' => $activation_data['email'], 'uname' => $activation_data['uname'], 'usurname' => $activation_data['usurname'])); if (!$user_data || !$user_data['ret']) { return self::REDIRECT_AUTH_FAIL; } $status = $user_data['ret']; $user = $user_data['user']; } $uid = $user->uid; $redirect = false; $data = $activation_data['data']; switch ($activation_data['type']) { case GuestConst::TYPE_PERSONAL_ORDER: $data['emp_id'] = $uid; require_once $_SERVER['DOCUMENT_ROOT'] . '/tu/models/TServiceOrderModel.php'; $orderModel = TServiceOrderModel::model(); if ($order = $orderModel->createPersonal($data)) { $tservices_smail = new tservices_smail(); $tservices_smail->newOrder($order); $redirect = sprintf(tservices_helper::url('order_card_url'), $order['id']); } break; case GuestConst::TYPE_VACANCY: require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects.php'; $data['state'] = projects::STATE_MOVED_TO_VACANCY; $date_public = null; $redirect_layout = '/public/?step=1&kind=4&public=%s&popup=1'; case GuestConst::TYPE_PROJECT: require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects.php'; $key = md5(uniqid($uid)); $tmpPrj = new tmp_project($key); $tmpPrj->initForUser($user); if (isset($data['IDResource']) && !empty($data['IDResource'])) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/uploader/uploader.php'; $uploader = new uploader($data['IDResource']); $attachedfiles_files = $uploader->getFiles(); $tmpPrj->clearAttaches(); $tmpPrj->addAttachedFiles($attachedfiles_files, false); $uploader->clear(); } if ($prj = $tmpPrj->addSimpleProject($data)) { $_SESSION['new_public'] = 1; $redirect = getFriendlyURL('project', $prj); if (isset($redirect_layout)) { $redirect = sprintf($redirect_layout, $prj['id']); } $src_id = $prj['id']; //Если проект был создан при переходе с лендинга //то привязываем его для статистики if (isset($data['landingProjectId'])) { require_once ABS_PATH . '/classes/LandingProjects.php'; LandingProjects::model()->linkWithProject($data['landingProjectId'], $src_id, !$activation_data['user_id']); } } break; } //Обновляем приглашение if (isset($activation_data['invite_id']) && $activation_data['invite_id'] > 0) { $guestInviteModel = new GuestInviteModel(); $guestInviteModel->updateDateComeInvite($activation_data['invite_id'], array('src_id' => isset($src_id) ? $src_id : null, 'date_public' => isset($date_public) ? $date_public : null)); } //Мессага с паролями для новеньких if (!$activation_data['user_id'] && !$current_uid) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/Helpers/SubBarNotificationHelper.php'; SubBarNotificationHelper::getInstance()->setMessage($activation_data['type'], array('login' => $user->login, 'password' => $user->passwd), $user->uid); } elseif ($status == users::AUTH_STATUS_2FA) { $_SESSION['ref_uri'] = $redirect; $redirect = '/auth/second/'; } return $redirect; }
ini_set('display_errors', 1); error_reporting(E_ALL ^ E_NOTICE); ini_set('max_execution_time', 0); ini_set('memory_limit', '512M'); if (!isset($_SERVER['DOCUMENT_ROOT']) || !strlen($_SERVER['DOCUMENT_ROOT'])) { $_SERVER['DOCUMENT_ROOT'] = rtrim(realpath(pathinfo(__FILE__, PATHINFO_DIRNAME) . '/../../'), '/'); } require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/stdf.php"; //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'; //------------------------------------------------------------------------------ $results = array(); //------------------------------------------------------------------------------ //$profiler->start('fill_frl_mem'); //------------------------------------------------------------------------------ $tservicesOrderModel = new TServiceOrderModel(); $results['Cnt Event For Frelancer'] = $tservicesOrderModel->getCountEvents(7, FALSE); $results['Cnt Event For Employer'] = $tservicesOrderModel->getCountEvents(33, TRUE); //------------------------------------------------------------------------------ //$profiler->stop('fill_frl_mem'); //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ array_walk($results, function (&$value, $key) { $value = sprintf('%s = %s' . PHP_EOL, $key, $value); }); print_r(implode('', $results)); exit;
/** * Проверка возможности отправить сообщение ползователю. * * @global type $DB * @staticvar null $exists_allowed * * @param type $to_id * @param type $from_id * * @return bool */ public static function isAllowed($to_id, $from_id = null) { $is_auth = isset($_SESSION['uid']) && $_SESSION['uid'] > 0; if (!$from_id && !$is_auth) { return false; } if (!$from_id) { $from_id = $_SESSION['uid']; } if ($is_auth && (currentUserHasPermissions('users') || is_emp())) { return true; } $is_allowed = self::_isAllowed($to_id, $from_id); if (!$is_allowed) { //Была ли уже проверка доступности //тогда пользователю запрещено писать $key_check_is_allowed = sprintf(self::KEY_CHECK_IS_ALLOWED, $from_id, $to_id); $mem = new memBuff(); if ($mem->get($key_check_is_allowed)) { return false; } //Иначе делаем проверку //Которые уже хотя бы раз общались с заказчиком через личку, //например если заказчик инициировал общение или они ранее общались $proxy_db = new DB(); $is_allowed = $proxy_db->val('SELECT messages_dialog_count(?i, ?i)', $to_id, $from_id) > 0; //Которых заказчик выбрал исполнителем в любом своем проекте if (!$is_allowed) { require_once ABS_PATH . '/classes/projects.php'; $is_allowed = (bool) projects::isExec($from_id, $to_id); } //В список условий я бы еще добавил проведение заказа на сайте - если есть завершенный заказ //(с резервом или без, по ТУ, проекту или прямой) с данным заказчиком, то тоже разрешать //исполнителю писать ему в личку, так как в заказе светится логин заказчика и они уже сотрудничали. if (!$is_allowed) { require_once ABS_PATH . '/tu/models/TServiceOrderModel.php'; $is_allowed = (bool) TServiceOrderModel::hasSuccessfulOrder($from_id, $to_id); } //Если фрилансер был выбран на любое призовое место в конкурсе то //он может писать сообщения заказчику. if (!$is_allowed) { require_once ABS_PATH . '/classes/contest.php'; $is_allowed = (bool) contest::isPrizePlace($from_id, $to_id); } if ($is_allowed) { self::setIsAllowed($to_id, $from_id, true); } $mem->set($key_check_is_allowed, 1, 0, self::KEY_CHECK_TAG_IS_ALLOWED); } return $is_allowed; }
ini_set('display_errors', 1); error_reporting(E_ALL ^ E_NOTICE); ini_set('max_execution_time', 0); ini_set('memory_limit', '512M'); if (!isset($_SERVER['DOCUMENT_ROOT']) || !strlen($_SERVER['DOCUMENT_ROOT'])) { $_SERVER['DOCUMENT_ROOT'] = rtrim(realpath(pathinfo(__FILE__, PATHINFO_DIRNAME) . '/../../'), '/'); } require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/stdf.php'; //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'; //------------------------------------------------------------------------------ $results = array(); //------------------------------------------------------------------------------ //$profiler->start('fill_frl_mem'); //------------------------------------------------------------------------------ $tservicesOrderModel = new TServiceOrderModel(); $results['Cnt Event For Frelancer'] = $tservicesOrderModel->getCountEvents(7, false); $results['Cnt Event For Employer'] = $tservicesOrderModel->getCountEvents(33, true); //------------------------------------------------------------------------------ //$profiler->stop('fill_frl_mem'); //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ array_walk($results, function (&$value, $key) { $value = sprintf('%s = %s' . PHP_EOL, $key, $value); }); print_r(implode('', $results)); exit;
/** * Рассылка уведомлений фрилансерам * не активных по заказу ТУ 24 и 72 часа соответственно. * * @return int */ public function inactiveOrders() { $host = $GLOBALS['host']; $message = Template::render(TSERVICES_TPL_MAIL_PATH . TSERVICES_TPL_BASE_LAYOUT, array('host' => $host, 'params' => '', 'content' => '%CONTENT%')); $this->message = nl2br($message); $count = 0; $subjects = array(24 => "У вас не подтвержден заказ", 72 => "У вас все еще не подтвержден заказ"); $model = TServiceOrderModel::model(); foreach ($subjects as $hours => $subject) { $page = 0; $data = $model->getInactiveOrders($hours, ++$page, 200); if (!$data) { continue; } $this->subject = $subject; $this->recipient = ''; $massId = $this->send('text/html'); do { foreach ($data as $el) { $freelancer = array('uname' => $el['frl_uname'], 'usurname' => $el['frl_usurname'], 'login' => $el['frl_login'], 'email' => $el['frl_email']); $employer = array('uname' => $el['emp_uname'], 'usurname' => $el['emp_usurname'], 'login' => $el['emp_login'], 'email' => $el['emp_email']); $content = Template::render(TSERVICES_TPL_MAIL_PATH . "inactive_order_{$hours}h_frl.tpl.php", array('order' => $el, 'emp_fullname' => $this->_formatFullname($employer))); $this->recipient[] = array('email' => $this->_formatFullname($freelancer, true), 'extra' => array('CONTENT' => $content)); $count++; } $this->bind($massId, true); } while ($data = $model->getInactiveOrders($hours, ++$page, 200)); } return $count; }
/** * Оплата услуг. * * @param array $order Данные по оплачивоемой услуге * * @return bool */ public function paymentOrder($order) { $_op_code = self::getOpCodeByDiscount($order['op_code']); switch ($_op_code) { // Верификация банковской картой через ЯКассу case 191: $error = $this->account->Buy($account_operation_id, $this->transaction, $order['op_code'], $this->user['uid'], $order['descr'], $order['comment']); if (!$error) { $success = true; //Устанавливаем флаг верификации require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/Verification.php'; $verify = new Verification(); $verify->cardYK($this->user['uid']); //Обновляем сессию //@todo: эта штука не работает! $session = new session(); $session->UpdateVerification($this->user['login']); //Обновляем имя и фамилию $fio = mb_unserialize($order['option']); if (isset($fio['uname']) && isset($fio['usurname'])) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php'; $u = new users(); $u->GetUserByUID($this->user['uid']); $u->uname = $fio['uname']; $u->usurname = $fio['usurname']; $u->Update($this->user['uid'], $db_errors); } //Назначаем возврат require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/billing/BillPayback.php'; BillPayback::getInstance()->requestPayback($order['id'], $this->paymentSysParams['invoiceId'], $order['ammount']); } break; //------------------------------------------------------------------ // Верификация через FF //------------------------------------------------------------------ // Верификация через FF case 117: require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/Verification.php'; $error = $this->account->Buy($account_operation_id, $this->transaction, Verification::FF_OP_CODE, $this->user['uid'], $order['comment'], $order['descr'], 1, 0); $verify = new Verification(); $verify->data = unserialize($order['option']); $this->_db->query('UPDATE verify_ff SET is_pro = ?, bill_id = ? WHERE id = ?', false, $account_operation_id, $order['src_id']); if ($verify->verify($this->user['uid'])) { $this->_db->query('UPDATE verify_ff SET result = TRUE WHERE id = ?', $order['src_id']); $success = true; } break; //------------------------------------------------------------------ // Конкурс //------------------------------------------------------------------ // Конкурс case 9: case 106: case 121: case 122: case 123: case 124: case 125: case 126: case 127: case 128: case 129: case 130: // Платный конкурс // Платный конкурс case 86: // Платный проект (вакансия, устаревший опкод) // Платный проект (вакансия, устаревший опкод) case 53: //Покупка вакансии //Покупка вакансии case 113: //пользователь не PRO //пользователь не PRO case 192: //пользователь PRO //Платные услуги проектов //пользователь PRO //Платные услуги проектов case 138: case 139: case 140: case 141: require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/drafts.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/uploader/uploader.php'; // Публикуем платный проект if ($order['parent_table'] == 'draft_projects') { $draft_id = $order['parent_id']; $this->project_key = md5(uniqid($this->user['uid'])); $tmpPrj = new tmp_project($this->project_key); $tmpPrj->initFromDraft($draft_id, $this->user['uid']); $tproject = $tmpPrj->getProject(); $isMovedToVacancy = false; // Нет конкурса значит его уже опубликовали и оплатили, оставляем деньги на личном счете if ((int) $tproject['prj_id'] <= 0) { // Не тратим деньги на такой конкурс if ($tmpPrj->isKonkurs() && strtotime($tproject['end_date']) <= time()) { $success = true; break; } $error = $tmpPrj->saveProject($this->user['uid'], $proj, $this->ordersPromoCodes); $success = !$error; // Отработали все по конкурсу удаляем его чтобы не мешал (после отработки всех операций) $this->setAfterQuery($this->_db->parse('DELETE FROM draft_projects WHERE id = ? AND uid = ?', $draft_id, $this->user['uid']), $order['parent_id']); $sql = 'UPDATE draft_projects SET prj_id = ? WHERE id = ? AND uid = ?'; $this->_db->query($sql, $proj['id'], $draft_id, $this->user['uid']); } else { $success = true; } } elseif ($order['parent_table'] == 'projects') { $prj_id = $order['parent_id']; $this->project_key = md5(uniqid($this->user['uid'])); $tmpPrj = new tmp_project($this->project_key); $tmpPrj->setInitFromDB($prj_id); $tproject = $tmpPrj->getProject(); $isMovedToVacancy = $tmpPrj->isStateMovedToVacancy(); // Если закрыт или заблокирован не тратим деньги if ($tproject['closed'] == 't' || $tproject['is_blocked'] == 't') { $success = true; break; } switch ($order['option']) { case 'top': $tmpPrj->setAddedTopDays($order['op_count']); break; case 'logo': $LogoFile = new CFile($order['src_id']); $tmpPrj->initLogo($LogoFile, $order['descr']); break; case 'urgent': $tmpPrj->setProjectField('urgent', 't'); break; case 'hide': $tmpPrj->setProjectField('hide', 't'); break; case 'office': $tmpPrj->setProjectField('old_state', $tproject['state']); $tmpPrj->setProjectField('state', projects::STATE_PUBLIC); //Если оплачивается не перемещенная вакансия //то работаем как обычно и подымаем вверх if ($tproject['state'] != projects::STATE_MOVED_TO_VACANCY) { $tmpPrj->setProjectField('post_now', true); } break; } $error = $tmpPrj->saveProject($this->user['uid'], $proj, $this->ordersPromoCodes); $success = !$error; if ($success) { if (isset($tmpPrj->account_operation_id) && $tmpPrj->account_operation_id > 0) { $account_operation_id = $tmpPrj->account_operation_id; } switch ($order['option']) { case 'office': if ($tproject['state'] == projects::STATE_MOVED_TO_VACANCY) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/smail.php'; $smail = new smail(); $smail->sendMovedToVacancySuccessPayed($tproject); require_once $_SERVER['DOCUMENT_ROOT'] . '/guest/models/GuestInviteModel.php'; $guestInviteModel = new GuestInviteModel(); $guestInviteModel->updateDatePublicBySrc($prj_id, array(GuestConst::TYPE_PROJECT, GuestConst::TYPE_VACANCY)); require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/autoresponse.php'; $autoresponse = new autoresponse(); $autoresponse->reduceByProject($prj_id); } break; } } } //Сохраняем, чтобы показать попап юзеру $memBuff = new memBuff(); $memBuff->add('bill_ok_project_' . $this->user['uid'], $proj['id']); //Если это оплата вакансии или конкусра то предлагаем еще купить платные опции if (in_array($order['option'], array('office', 'contest')) && !$isMovedToVacancy) { $memBuff->add('bill_ok_project_payed_' . $this->user['uid'], true); } break; //------------------------------------------------------------------ // Платное место в карусели //------------------------------------------------------------------ // Платное место в карусели case 65: // На главной странице $catalog = 0; case 73: // В каталоге require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/pay_place.php'; $payPlace = new pay_place(isset($catalog) ? $catalog : 1); $buyMain = $this->account->Buy($account_operation_id, $this->transaction, $order['op_code'], $this->user['uid'], $order['comment'], $order['descr'], $order['op_count'], 0, $order['promo_code']); if ($buyMain === 0) { $options = unserialize($order['option']); if (isset($options['adHead'])) { //поддержка старого режима $success = $payPlace->addUser($this->user['uid'], $options['adHead'], $options['adText'], $options['adImg']); } else { $success = $payPlace->addUserRequest($this->user['uid'], $options); } } break; //------------------------------------------------------------------ // ПРО аккаунт фрилансеры //------------------------------------------------------------------ // ПРО аккаунт фрилансеры case 47: // Тестовый ПРО на 1 неделю if (payed::IsUserWasPro($this->user['uid'])) { return false; break; } case 15: // Про на 1 месяц (emp) // Про на 1 месяц (emp) case 48: // Про на 1 месяц (frl) // Про на 1 месяц (frl) case 118: // Про на 3 месяца (emp) // Про на 3 месяца (emp) case 49: // Про на 3 месяца (frl) // Про на 3 месяца (frl) case 119: // Про на 6 месяцeв (emp) // Про на 6 месяцeв (emp) case 50: // Про на 6 месяцев (frl) // Про на 6 месяцев (frl) case 120: // Про на 1 год (emp) // Про на 1 год (emp) case 51: // Про на 1 год (frl) // Про на 1 год (frl) case 132: // Про на 1 день (frl) // Про на 1 день (frl) case 131: // Про на 1 неделю (frl) // Про на 1 неделю (frl) case 163: // Тестовый ПРО на месяц // Тестовый ПРО на месяц case 164: // PROFI на 1 месяц require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/payed.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/freelancer.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/employer.php'; $payed = new payed(); $user = is_emp($this->user['role']) ? new employer() : new freelancer(); $success = $payed->SetOrderedTarif($this->user['uid'], $this->transaction, $order['op_count'], $order['comment'], $order['op_code'], $order['promo_code'], $error); if ($success) { if (isset($payed->account_operation_id) && $payed->account_operation_id > 0) { $account_operation_id = $payed->account_operation_id; } // Обновим сессию сразу! if (get_uid(false) == $this->user['uid']) { $_SESSION['pro_last'] = payed::ProLast($this->user['login']); $_SESSION['pro_last'] = $_SESSION['pro_last']['is_freezed'] ? false : $_SESSION['pro_last']['cnt']; if ($_SESSION['pro_last']['is_freezed']) { $_SESSION['payed_to'] = $_SESSION['pro_last']['cnt']; } } else { $membuff = new memBuff(); $membuff->set('is_changed_pro_' . $this->user['uid'], true); //Этот подход не работает //$session = new session(); //$session->UpdateProEndingDate($this->user['login']); } if ($order['auto'] == 't') { $user->setPROAutoProlong('on', $this->user['uid']); } else { $user->setPROAutoProlong('off', $this->user['uid']); } //Опубликовать перемещенные вакансии при покупке ПРО //@todo: Теперь вакансии для всех платные разница лишь в цене для ПРО дешевле //поэтому отключаем публикацию после покупки ПРО //https://beta.free-lance.ru/mantis/view.php?id=28579 /* if (is_emp($this->user['role'])) { require_once($_SERVER['DOCUMENT_ROOT'] . "/classes/projects.php"); $project = new projects(); $project->publishedMovedToVacancy($this->user); }*/ //Чистим кеш каталога PROFI пользователей if ($order['op_code'] == 164) { freelancer::clearCacheProfiCatalog(); } } break; //------------------------------------------------------------------ //------------------------------------------------------------------ case 45: // рассылка по каталогу require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/masssending.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/messages.php'; $masssending = masssending::Get($order['parent_id']); $masssending = $masssending[0]; $error = $this->account->Buy($account_operation_id, $this->transaction, masssending::OPER_CODE, $this->user['uid'], $order['descr'], $order['comment'], $masssending['pre_sum'], 0, $order['promo_code']); if ($error) { break; } masssending::UpdateAcOpID($order['parent_id'], $account_operation_id); $success = (bool) messages::Masssending($masssending['user_id'], $masssending['id'], $masssending['msgtext'], $masssending['posted_time']); break; //------------------------------------------------------------------ /* * Погашение задолженности */ //------------------------------------------------------------------ /* * Погашение задолженности */ case 135: $error = $this->account->Buy($account_operation_id, $this->transaction, $order['op_code'], $this->user['uid'], $order['descr'], $order['comment'], 1, 1, 0, 0, $order['ammount']); if (!$error) { $success = true; //Начисление погашенной комиссии и удаление блокировки ТУ require_once $_SERVER['DOCUMENT_ROOT'] . '/tu/models/TServiceOrderModel.php'; TServiceOrderModel::model()->clearDebt($this->user['uid']); } break; //------------------------------------------------------------------- /* * Операции над бизнес логикой резерва средств * при успешном зачислении денег */ //------------------------------------------------------------------- /* * Операции над бизнес логикой резерва средств * при успешном зачислении денег */ case 136: $success = false; $data = @$this->list_service[$order['id']]['info']; if (!$data) { break; } require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/reserves/ReservesModelFactory.php'; $reserveInstance = ReservesModelFactory::getInstance($data['type']); //Уже была зарезервирована или нет нужный параметров то //ничего не покупаем деньги остаются на ЛС if (!$reserveInstance || !isset($this->paymentSysParams['invoiceId'])) { break; } //Невозможно сменить статус сделки выходим $reserveInstance->setReserveData($data); if (!$reserveInstance->allowChangeStatus(ReservesModel::STATUS_RESERVE)) { break; } $ret = $this->account->Buy($account_operation_id, $this->transaction, $order['op_code'], $this->user['uid'], $order['descr'], $order['comment'], $order['ammount']); if ($ret === 0) { //Успешно купили услугу и теперь меняем статус резерва $data['invoice_id'] = $this->paymentSysParams['invoiceId']; $data['acc_op_id'] = $account_operation_id; $reserveInstance->setReserveData($data); $success = $reserveInstance->changeStatus(ReservesModel::STATUS_RESERVE); } break; //------------------------------------------------------------------ /* * Завершение покупки автоответов. */ //------------------------------------------------------------------ /* * Завершение покупки автоответов. */ case 137: $success = false; $ret = $this->account->Buy($account_operation_id, $this->transaction, $order['op_code'], $this->user['uid'], $order['descr'], $order['comment'], $order['ammount'], 1, $order['promo_code']); if ($ret === 0 && isset($order['parent_id']) && intval($order['parent_id'])) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/autoresponse.php'; autoresponse::$db = $GLOBALS['DB']; // Активация покупки услуги автоответа if ($autoresponse = autoresponse::get($order['parent_id'])) { $autoresponse->activate(); $success = true; } } break; //------------------------------------------------------------------ // Закрепление в каталоге фрилансеров //------------------------------------------------------------------ // Закрепление в каталоге фрилансеров case 142: // В корневом разделе // В корневом разделе case 143: // В разделе $is_spec = false; case 144: // В подразделе if (!isset($is_spec)) { $is_spec = true; } $success = false; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/freelancer_binds.php'; $freelancer_binds = new freelancer_binds(); $freelancer_binds->prepare($this->user['uid'], $order['src_id'], $is_spec, $order['op_count']); $ret = $this->account->Buy($account_operation_id, $this->transaction, $order['op_code'], $this->user['uid'], $freelancer_binds->bind_info['descr'], $freelancer_binds->bind_info['comment'], $order['ammount'], 1, $order['promo_code']); if ($ret === 0) { $success = $freelancer_binds->create(); } break; //------------------------------------------------------------------ // Продление закрепления в каталоге фрилансеров //------------------------------------------------------------------ // Продление закрепления в каталоге фрилансеров case 148: // В корневом разделе // В корневом разделе case 149: // В разделе $is_spec = false; case 150: // В подразделе if (!isset($is_spec)) { $is_spec = true; } $success = false; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/freelancer_binds.php'; $freelancer_binds = new freelancer_binds(); $bind_id = $freelancer_binds->isUserBinded($this->user['uid'], $order['src_id'], $is_spec); $ret = true; if ($bind_id) { $freelancer_binds->getProlongInfo($this->user['uid'], $order['src_id'], $is_spec, $order['op_count']); $ret = $this->account->Buy($account_operation_id, $this->transaction, $order['op_code'], $this->user['uid'], $freelancer_binds->bind_info['descr'], $freelancer_binds->bind_info['comment'], $order['ammount']); } if ($ret === 0) { $success = $freelancer_binds->prolong($bind_id, $order['op_count'], $order['src_id'], $is_spec); } break; //------------------------------------------------------------------ // Поднятие закрепления в каталоге фрилансеров //------------------------------------------------------------------ // Поднятие закрепления в каталоге фрилансеров case 151: // В корневом разделе // В корневом разделе case 152: // В разделе $is_spec = false; case 153: // В подразделе // В подразделе case 194: //Оплата из буфера if (!isset($is_spec)) { $is_spec = $order['src_id'] > 0; } $success = false; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/freelancer_binds.php'; $freelancer_binds = new freelancer_binds(); $bind_id = $freelancer_binds->isUserBinded($this->user['uid'], $order['src_id'], $is_spec); if ($bind_id) { $freelancer_binds->getUpInfo($this->user['uid'], $order['src_id'], $is_spec); $ret = $this->account->Buy($account_operation_id, $this->transaction, $order['op_code'], $this->user['uid'], $freelancer_binds->bind_info['descr'], '', $order['ammount']); if ($ret === 0) { $success = $freelancer_binds->up($bind_id, $order['src_id'], $is_spec); } } break; //------------------------------------------------------------------ // Закрепление/продление в каталоге услуг //------------------------------------------------------------------ // Закрепление/продление в каталоге услуг case 155: // В лендинге // В лендинге case 156: // В корневом разделе // В корневом разделе case 157: // В разделе // В разделе case 158: // В подразделе $success = false; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/tservices/tservices_binds.php'; $tservices_binds = new tservices_binds(tservices_binds::KIND_LANDING); $tservices_binds->setKindByOpCode($_op_code); $option = unserialize($order['option']); $tservice_id = isset($option['tservice_id']) ? $option['tservice_id'] : $order['option']; $is_prolong = isset($option['is_prolong']) ? $option['is_prolong'] : false; $tservices_binds->prepare($this->user['uid'], $tservice_id, $order['src_id'], $order['op_count'], $is_prolong); if ($tservices_binds->bind_info) { $ret = $this->account->Buy($account_operation_id, $this->transaction, $order['op_code'], $this->user['uid'], $tservices_binds->bind_info['descr'], $tservices_binds->bind_info['comment'], $order['ammount']); if ($ret === 0) { $success = $is_prolong ? $tservices_binds->update() : $tservices_binds->create(); } } break; //------------------------------------------------------------------ // Поднятие закрепления в каталоге услуг //------------------------------------------------------------------ // Поднятие закрепления в каталоге услуг case 159: // В лендинге // В лендинге case 160: // В корневом разделе // В корневом разделе case 161: // В разделе // В разделе case 162: // В подразделе // В подразделе case 193: //Оплата из буфера $success = false; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/tservices/tservices_binds.php'; $tservices_binds = new tservices_binds(tservices_binds::KIND_LANDING); $tservices_binds->setKindByOpCode($_op_code); $bind = $tservices_binds->getItemById($order['src_id']); $tservices_binds->makeUpInfo($bind); if ($tservices_binds->bind_info) { $ret = $this->account->Buy($account_operation_id, $this->transaction, $order['op_code'], $this->user['uid'], $tservices_binds->bind_info['descr'], $tservices_binds->bind_info['comment'], $order['ammount']); if ($ret === 0) { $success = $tservices_binds->update(); } } break; } if ($success) { $update = array('status' => self::STATUS_COMPLETE); $this->update($order['id'], $update); $memBuff = new memBuff(); $memBuff->delete('last_operation_' . $order['uid'] . '_' . $order['service']); //Если только что была оплата из яндекс.кассы if ($this->paymentSysParams['invoiceId']) { //Фиксируем ID транзакции $label = op_codes::getLabel($order['op_code']); if (isset($account_operation_id) && $account_operation_id > 0) { $label = (empty($label) ? '' : "{$label},") . "trans_{$account_operation_id}"; } // Посылаем данные о покупке в google analytics $this->_db->query("SELECT pgq.insert_event('statistic', 'service_payed', ?)", http_build_query(array('is_emp' => is_emp($this->user['role']), 'label' => $label, 'ammount' => floatval($order['ammount']), 'cid' => $this->getCid()))); } } return $success; }
$accountToolTip = null; if ($barNotifies['bill']) { $accountToolTip = $barNotifies['bill']['message']; $accountBtnActive = (bool)$barNotifies['bill']['message']; } if (!$accountToolTip && $oldAccountToolTip) { $accountToolTip = $oldAccountToolTip; $accountBtnActive = true; } elseif (!$accountToolTip && (int)$_SESSION['bn_sum']) { $accountToolTip = "У вас на счету " . number_format(round(zin($_SESSION['bn_sum']),2), 2, ",", " ") . " бонусных руб."; } */ //@todo детект наличия заказов по ТУ require_once $_SERVER['DOCUMENT_ROOT'] . '/tu/models/TServiceOrderModel.php'; $_SESSION['tu_orders'] = TServiceOrderModel::model()->isExist($_SESSION['uid']) > 0; $role = $_SESSION['role']; if (is_emp($role)) { include $_SERVER['DOCUMENT_ROOT'] . "/templates/personal_emp.php"; } else { include $_SERVER['DOCUMENT_ROOT'] . "/templates/personal_frl.php"; } //include_once($_SERVER['DOCUMENT_ROOT'].'/user/safety_phone.php'); } else { $projects_active = $grey_main && $kind != 8 && $kind != 2 && $kind != 4; $konkurs_active = $grey_main && $kind == 2; $vacancy_active = $grey_main && $kind == 4; $grey_catalog = isset($grey_catalog) && @$grey_catalog == 1; ?> <div class="b-bar b-bar_fixed"> <div class="l-outer">
/** * Отклонение арбитража * @param int $order_id * @return \xajaxResponse */ function reservesArbitrageCancel($order_id) { $objResponse = new xajaxResponse(); //Получаем заказ и проверяем его if (!$order_id) { return $objResponse; } $orderModel = TServiceOrderModel::model(); $orderModel->attributes(array('is_adm' => hasPermissions('tservices'))); $order = $orderModel->getCard((int) $order_id, get_uid(false)); if (!$order || !isset($order['reserve_data']['arbitrage_id'])) { return $objResponse; } //Удаляем арбитраж $reservesArbitrage = new ReservesArbitrage(); $ok = $reservesArbitrage->removeArbitrage($order['reserve_data']['id']); if ($ok) { //Отправляем уведомления $reservesSmail = new ReservesSmail(); $reservesSmail->onRemoveArbitrage($order); $history = new tservices_order_history($order_id); $history->reserveArbitrageCancel(); //Новый статус отображаем без перезагрузки unset($order['reserve_data']['arbitrage_id']); $tserviceOrderStatusWidget = new TServiceOrderStatus(); $tserviceOrderStatusWidget->setIsOwner(false); $tserviceOrderStatusWidget->setOrder($order); $tserviceOrderStatusWidget->init(); ob_start(); $tserviceOrderStatusWidget->run(); $sHtml = ob_get_contents(); ob_end_clean(); $objResponse->assign('tservices_order_status_' . $order_id, 'innerHTML', $sHtml); } return $objResponse; }
<?php require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/stdf.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/tu/models/TServiceOrderModel.php'; require_once ABS_PATH . '/classes/DocGen/DocGenReserves.php'; $order_id = __paramInit('int', 'order_id', null, 759); $user_id = __paramInit('int', 'uid', null, 239549); $orderModel = new TServiceOrderModel(); $order = $orderModel->getCard($order_id, $user_id); $doc = new DocGenReserves($order); echo $doc->generateSpecification();
/** * Доступ к файлам переписки в заказе (возможно по БС). * * @param type $params * * @return type */ protected function _orders($params) { require_once $_SERVER['DOCUMENT_ROOT'] . '/tu/models/TServiceOrderModel.php'; $orderModel = TServiceOrderModel::model(); return $orderModel->isOrderMember($params['order_id'], $this->uid); }
/** * Переопределяем события после изменения статуса * резерва оплаты для заказов ТУ * * @param type $new_status */ public function afterChangeStatus($new_status) { $success = false; $time = time(); switch ($new_status) { case self::STATUS_CANCEL: //Отмена заказа заказчиком то отменяем заказ если была попытка зарезервировать if ($_SESSION['uid'] == $this->reserve_data['emp_id']) { require_once ABS_PATH . "/classes/billing.php"; $billing = new billing($this->reserve_data['emp_id']); $billing->cancelReserveByOrder('reserves', $this->reserve_data['id']); } $success = true; break; case self::STATUS_ERR: $this->getOrderHistory()->reservePriceErr(); break; case self::STATUS_RESERVE: //После успешного резервирования средств //переводим заказ в статус начала работы $src_id = @$this->reserve_data['src_id']; $success = $this->db()->update($this->TABLE_TSERVICE_ORDER, array('status' => TServiceOrderModel::STATUS_ACCEPT, 'accept_date' => date('Y-m-d H:i:s', $time)), 'id = ?i', $src_id); if ($success) { $orderModel = TServiceOrderModel::model(); $order = $orderModel->getShortCard($src_id); if ($order) { //@todo: можно передать просто $this ? $reserveInstance = ReservesModelFactory::getInstance(ReservesModelFactory::TYPE_TSERVICE_ORDER); if ($reserveInstance) { $reserveInstance->setSrcObject($orderModel); $reserveInstance->setReserveData($this->reserve_data); $order['reserve'] = $reserveInstance; } $this->getOrderHistory()->reservePriceSuccess($this->reserve_data['price']); $order['reserve_data'] = $this->reserve_data; $reservesSmail = new ReservesSmail(); $reservesSmail->attributes(array('order' => $order)); $reservesSmail->onReserveOrder(); //Генерируем документы require_once ABS_PATH . '/classes/DocGen/DocGenReserves.php'; $doc = new DocGenReserves($order); $doc->generateSpecification(); } } break; case self::STATUS_PAYED: case self::STATUS_ARBITRAGE: //@todo: генерируем документ когда резерв закрыт после всех выплат $src_id = @$this->reserve_data['src_id']; $orderModel = TServiceOrderModel::model(); $order = $orderModel->getShortCard($src_id); if ($order) { $this->getOrderHistory(); require_once ABS_PATH . '/classes/DocGen/DocGenReserves.php'; $order['reserve_data'] = $this->reserve_data; $order['reserve'] = $this; $doc = new DocGenReserves($order); $doc->generateActServiceEmp(); $doc->generateAgentReport(); } default: $success = true; } return $success; }
throw new Exception('No order_ids param'); } $doc_types = $doc_types ? explode(',', $doc_types) : $doc_types; if (!$doc_types || !count($doc_types)) { throw new Exception('No types param'); } //успешные сделки $rows = $DB->rows("\n SELECT \n fro.src_id,\n array_agg(fro.doc_type)::int[] AS doc_types\n FROM file_reserves_order AS fro \n WHERE \n fro.src_id IN(?l)\n GROUP BY fro.src_id \n ", $order_ids); if ($rows) { foreach ($rows as $row) { $order_id = $row['src_id']; $exists_doc_types = $DB->array_to_php2($row['doc_types']); $exists_doc_types = array_unique($exists_doc_types); $results[] = sprintf("Order Id = %s", $order_id); try { $orderModel = TServiceOrderModel::model(); $orderModel->attributes(array('is_adm' => true)); $orderData = $orderModel->getCard($order_id, 0); if (!$orderData || !$orderModel->isStatusEmpClose() || !$orderModel->isReserve()) { $results[] = 'Not isStatusEmpClose'; continue; } $reserveInstance = $orderModel->getReserve(); if (!$reserveInstance->isClosed()) { $results[] = 'Not isClosed'; continue; } deleteFiles($order_id, $doc_types); $exists_doc_types = array_diff($exists_doc_types, $doc_types); $base_doc_types = array(10, 20, 30, 40, 50, 60); if ($reserveInstance->isArbitrage()) {
<li class="b-menu__item b-menu__item_last <?php echo $activ_tab == 11 ? 'b-menu__item_active' : ''; ?> " <?php echo $activ_tab == 11 ? 'data-menu-opener="true" data-menu-descriptor="profile-nav"' : ''; ?> > <a class="b-menu__link" href="/users/<?php echo $user->login; ?> /rating/" title="Рейтинг" > <span class="b-menu__b1">Рейтинг</span> </a> </li> <?php if (($user->uid == $uid || hasPermissions('users')) && TServiceOrderModel::model()->isExist($user->uid)) { ?> <li class="b-menu__item b-menu__item_last <?php echo $activ_tab == 12 ? 'b-menu__item_active' : ''; ?> " <?php echo $activ_tab == 12 ? 'data-menu-opener="true" data-menu-descriptor="profile-nav"' : ''; ?> > <a class="b-menu__link" href="/users/<?php echo $user->login; ?> /tu-orders/" title="Заказы" > <span class="b-menu__b1">Заказы</span> </a> </li>