public function run() { $attachedfiles = new attachedfiles(); $attachedfiles_session = $attachedfiles->getSession(); //Хеш безопасности целосности параметров формы //сейчас используется для загрузчика файлов $param_hash = tservices_helper::getOrderUrlHash(array((int) $this->order_id, $attachedfiles_session), $this->uid); //собираем шаблон $this->render('t-service-order-messages-form', array('order_id' => $this->order_id, 'param_hash' => $param_hash, 'is_scroll' => $this->is_scroll, 'attachedfiles_session' => $attachedfiles_session)); }
public function getParams() { $bs_ids = $this->getFields(); if (!is_array($bs_ids) || empty($bs_ids)) { return ''; } array_walk($bs_ids, function (&$value) { $href = tservices_helper::getOrderCardUrl($value); $value = sprintf(ReservesTServiceOrderModel::NUM_FORMAT, $value); $value = "<a href=\"{$href}\" target=\"_blank\">{$value}</a>"; }); return implode(', ', $bs_ids); }
private function getOrderText() { switch ($this->order['type']) { case TServiceOrderModel::TYPE_TSERVICE: $service = sprintf(self::TEXT_TSERVICE, tservices_helper::card_link($this->order['tu_id'], $this->order['title'])); break; case TServiceOrderModel::TYPE_PROJECT: $service = sprintf(self::TEXT_PROJECT, $this->order['tu_id']); break; case TServiceOrderModel::TYPE_PERSONAL: $service = ''; break; } $pay_text = isset($this->order['reserve']) ? self::PAY_RESERVE : self::PAY_DIRECT; return sprintf(self::ORDER_TEXT, $this->order['id'], $service, $pay_text); }
/** * Метод сразу печатает в поток окошко попапа * см 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); }
<?php $this->renderClip('employer-profile'); ?> <br/> <div class="b-txt">Исполнитель:</div> <?php $this->renderClip('freelancer-profile'); ?> <?php } ?> </div> <div class="b-layout b-layout_bordbot_dedfe0 b-layout_margbot_20 b-layout_padleft_60 b-layout_padbot_20 b-layout__txt_padleft_null_iphone"> <?php echo tservices_helper::showFlashMessages(); ?> <div id="tservices_order_status_<?php echo $order['id']; ?> " class="b-fon b-fon_bg_f5 b-fon_pad_10 b-fon_margbot_20 b-fon_overflow_hidden"> <?php echo $this->renderClip('order-status'); ?> </div> <?php if ($order['type'] == TServiceOrderModel::TYPE_TSERVICE) { ?> <div class="b-layout__txt b-layout__txt_bold">Что вы получите</div>
<?php /** * Попап при заказе ТУ для заказчика. */ $title = reformat($title, 30, 0, 1); $price = tservices_helper::cost_format($price, true, false, false); $days = $days . ' ' . ending($days, 'день', 'дня', 'дней'); $show_popup = isset($_POST['popup']); ?> <div id="tservices_orders_status_popup" class="b-shadow b-shadow_center b-shadow_width_520 <?php if (!$show_popup) { ?> b-shadow_hide <?php } ?> b-shadow__quick" style="display:block;"> <div class="b-shadow__body b-shadow__body_pad_15_20"> <h2 class="b-layout__title"> Заказ услуги </h2> <div class="b-layout__txt b-layout__txt_padbot_10"> Вы заказываете у исполнителя <b><?php echo $frl_fullname; ?> </b><br/> услугу «<b><?php echo $title; ?> </b>» <br/>
<?php /** * Шаблон письма уведомление заказчику о создании заказа услуги (УВ-3). */ /** * Тема письма. */ $smail->subject = "Ваш заказ «{$order['title']}» успешно создан"; $order_price = tservices_helper::cost_format($order['order_price'], true, false, false); $title = reformat(htmlspecialchars($order['title']), 30, 0, 1); $order_url = $GLOBALS['host'] . tservices_helper::getOrderCardUrl($order['id']); $tu_url = $GLOBALS['host'] . tservices_helper::card_link($order['tu_id'], $order['title']); $order_days = tservices_helper::days_format($order['order_days']); $cancel_url = $GLOBALS['host'] . tservices_helper::getOrderStatusUrl($order['id'], 'cancel', $order['emp_id']); ?> Здравствуйте. <br/> <br/> Ваш заказ «<a href="<?php echo $order_url; ?> "><?php echo $title; ?> </a>» успешно создан, а исполнитель <?php echo $frl_fullname; ?> получил уведомление о нем. Как только исполнитель обговорит с вами условия сотрудничества и подтвердит заказ, начнется выполнение работы. Ожидайте, пожалуйста. <br/><br/>
/** * Вынесение решения арбитром * @param array $form * @return \xajaxResponse */ function reservesArbitrageApply($form) { $objResponse = new xajaxResponse(); $order_id = @$form['order_id']; $price_pay = (int) @$form['price']; //Сумма для выплаты исполнителю $allow_fb_frl = (bool) @$form['allow_fb_frl']; $allow_fb_emp = (bool) @$form['allow_fb_emp']; $orderModel = TServiceOrderModel::model(); $orderModel->attributes(array('is_adm' => hasPermissions('tservices'))); $order = $orderModel->getCard((int) $order_id, get_uid(false)); if (!$order) { return $objResponse; } $reservesArbitrage = new ReservesArbitrage(); $reservesArbitrage->db()->start(); try { if ($price_pay > $order['reserve_data']['price']) { $price_pay = $order['reserve_data']['price']; } $price_back = $order['reserve_data']['price'] - $price_pay; //запоминаем суммы, которые надо выплатить сторонам, закрываем арбитраж и заказ $ok = $reservesArbitrage->closeArbitrage($order['reserve_data'], array('price_pay' => $price_pay, 'price_back' => $price_back, 'allow_fb_frl' => $allow_fb_frl, 'allow_fb_emp' => $allow_fb_emp)); if ($ok) { $is_emp = true; //Закрываем заказ от лица заказчика $orderModel->changeStatus($order_id, 'close', $is_emp); //Отправляем уведомления $reservesSmail = new ReservesSmail(); $reservesSmail->onApplyArbitrage($order, $price_pay); $order = $orderModel->getOrderData(); //Новый статус отображаем без перезагрузки $order['reserve_data']['arbitrage_price'] = $price_pay; $order['reserve_data']['arbitrage_date_close'] = date('Y-m-d H:i:s'); //Так как мы в статусах используем обьект то обновляем его данные $order['reserve']->setReserveData($order['reserve_data']); //$order['status'] = TServiceOrderModel::STATUS_EMPCLOSE; //Генерируем документы try { $doc = new DocGenReserves($order); if ($price_pay > 0) { $doc->generateActCompletedFrl(); } $doc->generateArbitrageReport(); } catch (Exception $e) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/log.php'; $log = new log('reserves_docs/' . SERVER . '-%d%m%Y.log', 'a', "%d.%m.%Y %H:%M:%S: "); $log->writeln(sprintf("Order Id = %s: %s", $order['id'], iconv('CP1251', 'UTF-8', $e->getMessage()))); } $tservicesOrderHistory = new tservices_order_history($order_id); $tservicesOrderHistory->reserveArbitrageDecide($price_pay, $price_back); $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); } } catch (Exception $e) { $reservesArbitrage->db()->rollback(); $sHtml = tservices_helper::getMessage($e->getMessage(), 'error'); $objResponse->call('TServices_Order.showBeforeStatus', $order_id, $sHtml); return $objResponse; } $reservesArbitrage->db()->commit(); $objResponse->call('TServices_Order.hideBeforeStatus', $order_id); return $objResponse; }
<?php echo reformat($theme['sbr_name'], 40, 0, 1); ?> </a> <?php } else { ?> <b><?php echo reformat(htmlspecialchars($theme['sbr_name']), 40, 0, 1); ?> </b> <?php } ?> на сумму <?php echo tservices_helper::cost_format($theme['num'], true, false, false); ?> <?php } elseif ($theme['opinion_type'] == 3) { ?> <?php if ($is_emp) { ?> за проект<?php } else { ?> за выполнение проекта<?php } ?> <?php if ($theme['kind'] == 9) {
href="javascript:void(0);" data-popup="<?php echo TServiceOrderFeedback::getPopupId($order_id); ?> " data-duplicate="1" data-url="<?php echo $order_url; ?> "> Завершить сотрудничество </a> <span class="b-buttons__txt b-button__txt_padbot_10_ipad">  или  </span> <a class="b-layout__link" href="<?php echo tservices_helper::getOrderStatusUrl($order_id, 'fix'); ?> " onClick="" data-duplicate="2">вернуть заказ в работу</a> </div> <div class="b-layout__txt b-layout__txt_fontsize_11 b-layout__txt_padleft_20 b-layout__txt_padbot_10"> <span class="b-icon b-icon_sbr_oattent b-icon_top_1 b-icon_margleft_-20"></span><?php echo $no_reserve_warning; ?> </div> <?php } $this->widget('TServiceOrderFeedback', array('data' => array('idx' => $order_id, 'hash' => $hash, 'pay_type' => $pay_type, 'rating' => $frl_rating, 'is_close' => false))); ?> </td>
<?php /** * Шаблон письма уведомление заказчику о создании заказа услуги (УВ-1-2). */ /** * Тема письма. */ $smail->subject = 'Подтверждение заказа услуги'; $tu_url = $GLOBALS['host'] . tservices_helper::card_link($tu_id, $tu_title); $new_order_url = $GLOBALS['host'] . tservices_helper::getNewOrderUrl($code); ?> Здравствуйте. <br/> <br/> <p>Вы получили это письмо, т.к. ваш e-mail адрес был указан на сайте FL.ru при заказе услуги «<a href="<?php echo $tu_url; ?> "><?php echo $tu_title; ?> </a>».</p> <p>Для оформления заказа, пожалуйста, перейдите по ссылке <?php echo $new_order_url; ?> или скопируйте ее в адресную строку браузера.</p> <p>Если вы не заказывали услугу на сайте FL.ru ине указывали свой e-mail – просто проигнорируйте письмо. Вероятно, один из наших пользователей ошибся адресом.</p> <br/> <br/> С уважением, <br/>
/** * Генерирует данные для карты сайта * * @param inetger $key Номер файла * @return array */ function getSitemapUrls($key = 0) { global $DB; switch ($this->type) { case 'freelancers': $result = array(); require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/professions.php'; $prfs = new professions(); $profs = $prfs->GetAllProfessions("", 0, 1); foreach ($profs as $prof) { $result[] = array('loc' => '/freelancers/' . $prof['link'] . '/', 'lastmod' => date('Y-m-d H:i:s'), 'posttime' => date('Y-m-d H:i:s')); $sql = "SELECT COUNT(s.uid) as count \n FROM ( SELECT * FROM fu WHERE spec_orig = '81' UNION ALL SELECT fu.* FROM fu INNER JOIN spec_add_choise sp ON sp.user_id = fu.uid AND sp.prof_id = '81' WHERE fu.is_pro = true \n UNION ALL \n SELECT fu.* FROM fu INNER JOIN spec_paid_choise pc ON pc.user_id = fu.uid AND pc.prof_id = '81' AND pc.paid_to > NOW() ) as s WHERE s.is_banned = '0'"; $count_pages = ceil($DB->val($sql) / FRL_PP); for ($n = $count_pages; $n > 1; $n--) { $result[] = array('loc' => '/freelancers/' . $prof['link'] . '/?page=' . $n, 'lastmod' => date('Y-m-d H:i:s'), 'posttime' => date('Y-m-d H:i:s')); } } break; case 'other': $sql = "SELECT loc, NOW() AS lastmod, NOW() AS posttime FROM vw_sitemap_other"; $result = $DB->rows($sql); break; default: $sql = $this->_rtSql ? $this->_rtSql : $this->sql; $result = $DB->rows($sql); break; } $strlen = $this->sitemap_lngth; if (!$result) { return false; } foreach ($result as $val) { switch ($this->type) { case 'projects': $loc = sitemap::PUBLIC_HOST . getFriendlyURL('project', $val['p_id']); break; case 'blogs': $loc = sitemap::PUBLIC_HOST . getFriendlyURL("blog", $val['b_id']); break; case 'commune': $loc = sitemap::PUBLIC_HOST . getFriendlyURL('commune', $val['m_id']); break; case 'articles': $loc = sitemap::PUBLIC_HOST . getFriendlyURL('article', $val['a_id']); break; case 'interview': $loc = sitemap::PUBLIC_HOST . getFriendlyURL('interview', $val['i_id']); break; case 'regions': $loc = sitemap::PUBLIC_HOST . '/freelancers/' . ($val['link'] ? $val['link'] . '/' : '') . $val['translit_country_name'] . '/' . ($val['translit_city_name'] ? $val['translit_city_name'] . '/' : ''); break; case 'tservices': $loc = sitemap::PUBLIC_HOST . tservices_helper::card_link($val['t_id'], $val['t_name']); break; default: $loc = sitemap::PUBLIC_HOST . $val['loc']; break; } if ($this->type == 'userpages') { $x = "<url>"; $x .= "<loc>{$loc}/info/</loc>"; $x .= "<lastmod>" . date("c", strtotime($val['lastmod'])) . "</lastmod>"; $x .= "<priority>{$this->priority}</priority>"; $x .= "</url>"; $x .= "<url>"; $x .= "<loc>{$loc}/opinions/</loc>"; $x .= "<lastmod>" . date("c", strtotime($val['lastmod'])) . "</lastmod>"; $x .= "<priority>{$this->priority}</priority>"; $x .= "</url>"; $x .= "<url>"; $x .= "<loc>{$loc}/journal/</loc>"; $x .= "<lastmod>" . date("c", strtotime($val['lastmod'])) . "</lastmod>"; $x .= "<priority>{$this->priority}</priority>"; $x .= "</url>"; } else { $x = "<url>"; $x .= "<loc>{$loc}</loc>"; $x .= "<lastmod>" . date("c", strtotime($val['lastmod'])) . "</lastmod>"; $x .= "<priority>{$this->priority}</priority>"; $x .= "</url>"; } $strlen = $strlen + strlen($x); // Максимальный вес файла if ($strlen >= sitemap::MAX_SIZE_FILE) { $strlen = $this->sitemap_lngth; $key = $key + 1; } $ret[$key][] = $x; // Максимальное количество ссылок if (count($ret[$key]) >= sitemap::MAX_SIZE_COUNT / ($this->type == 'userpages' ? 5 : 1)) { $strlen = $this->sitemap_lngth; $key = $key + 1; } $this->end_date = $val['lastmod']; } return $ret; }
public function getUrl() { return sprintf('/tu/%d/%s.html', $this->id, tservices_helper::translit($this->title)); }
<?php /** * Попап при заказе ТУ для заказчика c интерфейсом резерва по "новой БС". */ $title = reformat($title, 30, 0, 1); $days = $days . ' ' . ending($days, 'день', 'дня', 'дней'); $priceFormated = tservices_helper::cost_format($price, true, false, false); $priceWithTaxFormated = tservices_helper::cost_format($priceWithTax, true, false, false); $show_popup = isset($_POST['popup']); ?> <script type="text/javascript"> var RESERVE_ALL_TAX = <?php echo $reserveAllTaxJSON; ?> ; </script> <div id="tservices_orders_status_popup" class="b-shadow b-shadow_center b-shadow_width_520 <?php if (!$show_popup) { ?> b-shadow_hide <?php } ?> b-shadow__quick" style="display:block;"> <div class="b-shadow__body b-shadow__body_pad_20"> <h2 class="b-layout__title"> Заказ услуги </h2> <div class="b-layout__txt b-layout__txt_padbot_20"> Для заказа услуги вам необходимо выбрать способ оплаты работы (с резервированием суммы или без него). </div>
//------------------------------------------------------------------------------ //Форматирование кол-ва отзывов if ($data['total_feedbacks']) { $total = intval($data['total_feedbacks']); $plus = intval($data['plus_feedbacks']); $data['perplus_feedbacks'] = $plus > 0 ? round($plus * 100 / $total) : 0; } $feedbacks = $tservices->setPage(feedbacks_per_page)->getFeedbacks($data['id']); $is_feedbacks_paginator = $data['total_feedbacks'] > count($feedbacks); //------------------------------------------------------------------------------ //SEO SeoTags::getInstance()->initTServicesCard($data, $user_obj); $page_title = SeoTags::getInstance()->getTitle(); $page_descr = SeoTags::getInstance()->getDescription(); $page_keyw = SeoTags::getInstance()->getKeywords(); $canonical_url = $GLOBALS['host'] . tservices_helper::card_link($data['id'], $data['title']); //------------------------------------------------------------------------------ //Получение текстового наименования города возможной встречи if ($data['is_meet'] === 't') { $city = new city(); $data['location'] = 'г. ' . $city->getCityName($data['city']); } //------------------------------------------------------------------------------ //Виджет попап окошка при заказе услуги //непоказываем фрилансерам $tserviceOrderPopup = NULL; $is_frl = !is_emp() && get_uid(false); if (!$is_frl) { require_once $_SERVER['DOCUMENT_ROOT'] . '/tu/widgets/TServiceOrderPopup.php'; $tserviceOrderPopup = new TServiceOrderPopup(); $tserviceOrderPopup->init(array('title' => $data['title'], 'frl_fullname' => "{$user_obj->uname} {$user_obj->usurname} [{$user_obj->login}]", 'price' => $data['price'], 'days' => $data['days'], 'category_id' => $data['category_id']));
<?php /** * П-21 - Исполнителю об успешно зарезервированной сумме */ $smail->subject = "Сумма по заказу «{$order['title']}» зарезервирована"; $title = reformat(htmlspecialchars($order['title']), 30, 0, 1); $order_url = $GLOBALS['host'] . tservices_helper::getOrderCardUrl($order['id']); $reserve_price = tservices_helper::cost_format($order['reserve_data']['price'], true, false, false); ?> Заказчик зарезервировал сумму <?php echo $reserve_price; ?> в заказе «<a href="<?php echo $order_url; ?> "><?php echo $title; ?> </a>». Далее вы можете начать выполнение работы по заказу. Успешного вам сотрудничества! <a href="<?php echo $order_url; ?> ">Перейти к заказу</a>
<?php /* * Шаблон пиьсма уведомление исполнителю о старте работ и списании суммы, с задолженностью. (УВ-5) */ $smail->subject = "Подтверждение заказа на услугу «{$order['title']}»"; $order_url = $GLOBALS['host'] . tservices_helper::getOrderCardUrl($order['id']); $title = reformat(htmlspecialchars($order['title']), 30, 0, 1); $order_days = tservices_helper::days_format($order['order_days']); $order_end_date = date('d.m.Y', strtotime("+ {$order['order_days']} days", strtotime($order['accept_date']))); $tax_price = tservices_helper::cost_format($order['tax_price'], true, false, false); $order_price = tservices_helper::cost_format($order['order_price'], true, false, false); $tax = $order['tax'] * 100; ?> Здравствуйте. <br/> <br/> Только что вы подтвердили заказ «<a href="<?php echo $order_url; ?> "><?php echo $title; ?> </a>» (предложенный заказчиком <?php echo $emp_fullname; ?> ) и начали его выполнение. Сумма заказа – <?php echo $order_price; ?> .
public function getTypeUrl() { $src_id = @$this->reserve_data['src_id']; if (!$src_id) { return false; } return tservices_helper::getOrderCardUrl($src_id); }
<?php /* * Шаблон уведомления исполнителю о том, что заказчик оставил ответный отзыв (УВ-12) * Так же используется при отправле ЛС поэтому все переводы каретки (новая строка) будут заменены <br/> при выводе сообщения и при отправке письма */ $smail->subject = "Отзыв в заказе «{$order['title']}»"; $title = reformat(htmlspecialchars($order['title']), 30, 0, 1); $order_url = $GLOBALS['host'] . tservices_helper::getOrderCardUrl($order['id']); $tu_url = $order['tu_id'] ? $GLOBALS['host'] . tservices_helper::card_link($order['tu_id'], $order['title']) : ''; $emp_feedback = reformat(htmlspecialchars($order['emp_feedback']), 30); $emp_is_good = $order['emp_rating'] > 0; $feedback_url = $GLOBALS['host'] . "/users/{$order['freelancer']['login']}/opinions/"; ?> По результатам сотрудничества в заказе «<a href="<?php echo $order_url; ?> "><?php echo $title; ?> </a>» заказчик оставил вам <?php if ($emp_is_good) { ?> положительный<?php } else { ?> отрицательный<?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'); 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;
public function actionNewOrder() { $code = __paramInit('string', 'code', 'code', ''); $activation_data = $this->order_model->getOrderActivation($code); if (!$activation_data) { $this->missingAction(null); } $this->order_model->deleteOrderActivation($code); $is_new = !($activation_data['user_id'] > 0); $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']) { $this->redirect('/registration/'); } $status = $user_data['ret']; $user = $user_data['user']; $this->uid = $user->uid; $service_id = intval($activation_data['tu_id']); $debt_info = $this->order_model->isDebt($this->uid); //блокируем возможность заказать если у исполнителя долг //и вышли все сроки погашения if ($debt_info && $debt_info['is_blocked'] == 't') { $this->missingAction(null); } $activation_data['options']['emp_id'] = $this->uid; $this->order_model->attributes($activation_data['options']); $order = $this->order_model->create($service_id); //Не удалось создать заказ показываем 404 if (!$order) { $this->missingAction(null); } //Уведомляем все стороны $tservices_smail = new tservices_smail(); $tservices_smail->newOrder($order); //Если юзер уже бывалый пользователь то редиректим на карточку заказа $order_url = sprintf(tservices_helper::url('order_card_url'), $order['id']); if (!$is_new) { if ($status == users::AUTH_STATUS_2FA) { $_SESSION['ref_uri'] = $order_url; $order_url = '/auth/second/'; } $this->redirect($order_url); } //Берем доп.инфу о фрилансере $freelancer = new freelancer(); $freelancer->GetUserByUID($order['frl_id']); //Если юзер новичек то показываем ему логин/пароль и статус заказа $this->layout = '//layouts/content-full-width'; $this->render('new-order', array('order_url' => $order_url, 'login' => $user->login, 'passwd' => $user->passwd, 'freelancer' => (array) $freelancer)); }
/** * Возвращает общую сумму резерва за указанную дату * * @return boolean */ public function getSummary() { $filterData = $this->getFilterData(); if (!isset($filterData['date_reserve']) || !$filterData['date_reserve']) { return false; } return tservices_helper::cost_format($this->getReservesListPrice(), false); }
<?php echo tservices_helper::cost_format($el['price'], true); ?> </div> <?php if (isset($video['image']) && !empty($video['image'])) { ?> <div class="b-icon b-icon__play b-icon_absolute b-icon_bot_14 b-icon_left_4"></div> <?php } ?> <?php if ($el['file']) { ?> <img width="200" height="150" class="b-pic b-pic_margbot_10" src="<?php echo tservices_helper::image_src($el['file'], $user->login); ?> "> <?php } else { ?> <div class="b-pic b-pic_margbot_10 b-pic_no_img b-pic_w200_h150 b-pic_bg_f2"></div> <?php } ?> </a> <figcaption class="b-txt"> <a href="<?php if ($el['is_blocked'] == 't') { echo 'javascript:void(0)';
/** * Установка исполнителя проекта. * * @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; }
<?php /* * Шаблон письма уведомление исполнителю об отмене заказа со стороны заказчика. (УВ-7) * Так же используется при отправле ЛС поэтому все переводы каретки (\n) будут заменены <br/> при выводе сообщения и при отправке письма */ $smail->subject = "Отмена заказа на типовую услугу «{$order['title']}»"; $order_url = $GLOBALS['host'] . tservices_helper::getOrderCardUrl($order['id']); $title = reformat(htmlspecialchars($order['title']), 30, 0, 1); ?> Здравствуйте. Сожалеем, но заказчик <?php echo $emp_fullname; ?> отменил свой заказ «<a href="<?php echo $order_url; ?> "><?php echo $title; ?> </a>». Вы можете связаться с заказчиком и уточнить у него причину отказа. <a href="<?php echo $order_url; ?> ">Связаться с заказчиком</a> С уважением, команда <a href="<?php
<?php $smail->subject = "Подозрительная сделка на FL.ru"; $order_url = $GLOBALS['host'] . tservices_helper::getOrderCardUrl($order_id); if ($date_reserve) { $date_reserve = date('d.m.Y H:i:s', strtotime($date_reserve)); } $date_payout = date('d.m.Y H:i:s'); $price = tservices_helper::cost_format($price); ?> Номер сделки: <a href="<?php echo $order_url; ?> "><?php echo $num; ?> </a><br/> Логин и ФИО Заказчика: <?php echo $emp; ?> <br/> Логин и ФИО Исполнителя: <?php echo $frl; ?> <br/> Invoice ID: <?php echo $invoiceId; ?> <br/> Дата и время резервирования: <?php echo $date_reserve;
<?php /** * Если создан заказ, предложен исполнителю, и в течение суток от него не было никаких действий * (отказа или подтверждения), то отправляем исполнителю почтовое уведомление:. */ $title = reformat(htmlspecialchars($order['title']), 30, 0, 1); $order_url = $GLOBALS['host'] . tservices_helper::getOrderCardUrl($order['id']); $order_price = tservices_helper::cost_format($order['order_price'], true, false, false); $order_days = tservices_helper::days_format($order['order_days']); $accept_url = $GLOBALS['host'] . tservices_helper::getOrderStatusUrl($order['id'], 'accept', $order['frl_id']); $decline_url = $GLOBALS['host'] . tservices_helper::getOrderStatusUrl($order['id'], 'decline', $order['frl_id']); ?> Напоминаем, что вчера Заказчик <?php echo $emp_fullname; ?> предложил вам заказ на услугу «<a href="<?php echo $order_url; ?> "><?php echo $title; ?> </a>» на сумму <?php echo $order_price; ?> со сроком выполнения <?php echo $order_days; ?> .<br/> Вы можете перейти к заказу и обговорить условия сотрудничества, начать выполнение заказа или отказаться от него.
<?php /* * Шаблон письма уведомление заказчику о подтверждении заказа и старте работ. (УВ-6) * Так же используется при отправле ЛС поэтому все переводы каретки (\n) будут заменены <br/> при выводе сообщения и при отправке письма */ $smail->subject = "Подтверждение заказа на услугу «{$order['title']}»"; $order_url = $GLOBALS['host'] . tservices_helper::getOrderCardUrl($order['id']); $title = reformat(htmlspecialchars($order['title']), 30, 0, 1); $order_price = tservices_helper::cost_format($order['order_price'], true, false, false); $order_days = tservices_helper::days_format($order['order_days']); $order_end_date = date('d.m.Y', strtotime("+ {$order['order_days']} days", strtotime($order['accept_date']))); ?> Здравствуйте. Исполнитель <?php echo $frl_fullname; ?> подтвердил ваш заказ «<a href="<?php echo $order_url; ?> "><?php echo $title; ?> </a>» и начал его выполнение. Сумма заказа – <?php echo $order_price; ?> . Срок выполнения работы – <?php echo $order_days; ?>
/** * Получить директорию для загружаемого файла. * * @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); }
<?php if ($hasVideo) { ?> <div class="b-icon b-icon__play b-icon_absolute b-icon_bot_4 b-icon_left_4"></div> <?php } ?> <?php echo $thumbnail200x150; ?> </a> <a class="b-pic__price-box b-pic__price-box_pay b-pic__price-box b-pic__price-box_noline" href="javascript:void(0);" data-url="<?php echo $tservice_url; ?> " onclick="TServices_Catalog.orderNow(this);"><?php echo tservices_helper::cost_format($tservice['price'], true); ?> <?php if ($sold_count > 0) { ?> <span title="Количество продаж услуги"><span class="b-icon b-icon__tu2 b-icon_top_2"></span> <?php echo number_format($sold_count, 0, '', ' '); ?> </span> <?php } ?> </a> </div> <div class="b-layout__txt b-layout__txt_padtop_10 b-layout_overflow_hidden">