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);
 }
Exemple #5
0
        <?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/> 
            услугу &laquo;<b><?php 
echo $title;
?>
</b>&raquo;
            <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/>
Ваш заказ &laquo;<a href="<?php 
echo $order_url;
?>
"><?php 
echo $title;
?>
</a>&raquo; успешно создан, а исполнитель <?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">&#160; или &#160;</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 при заказе услуги &laquo;<a href="<?php 
echo $tu_url;
?>
"><?php 
echo $tu_title;
?>
</a>&raquo;.</p>
<p>Для оформления заказа, пожалуйста, перейдите по ссылке <?php 
echo $new_order_url;
?>
 или скопируйте ее в адресную строку браузера.</p>
<p>Если вы не заказывали услугу на сайте FL.ru ине указывали свой e-mail – просто проигнорируйте письмо. Вероятно, один из наших пользователей ошибся адресом.</p>
<br/>
<br/>
С уважением, 
<br/>
Exemple #12
0
 /**
  * Генерирует данные для карты сайта
  *
  * @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;
 }
Exemple #13
0
 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>
Exemple #15
0
//------------------------------------------------------------------------------
//Форматирование кол-ва отзывов
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;
?>
 в заказе &laquo;<a href="<?php 
echo $order_url;
?>
"><?php 
echo $title;
?>
</a>&raquo;. Далее вы можете начать выполнение работы по заказу.
Успешного вам сотрудничества!

<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/>
Только что вы подтвердили заказ &laquo;<a href="<?php 
echo $order_url;
?>
"><?php 
echo $title;
?>
</a>&raquo; (предложенный заказчиком <?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/";
?>
По результатам сотрудничества в заказе &laquo;<a href="<?php 
echo $order_url;
?>
"><?php 
echo $title;
?>
</a>&raquo; 
заказчик оставил вам <?php 
if ($emp_is_good) {
    ?>
положительный<?php 
} else {
    ?>
отрицательный<?php 
}
?>
 отзыв:
Exemple #20
0
//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);
 }
Exemple #23
0
                    <?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;
?>
 отменил свой заказ &laquo;<a href="<?php 
echo $order_url;
?>
"><?php 
echo $title;
?>
</a>&raquo;. 
Вы можете связаться с заказчиком и уточнить у него причину отказа.

<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;
?>
 предложил вам заказ на услугу 
&laquo;<a href="<?php 
echo $order_url;
?>
"><?php 
echo $title;
?>
</a>&raquo; на сумму <?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;
?>
 подтвердил ваш заказ &laquo;<a href="<?php 
echo $order_url;
?>
"><?php 
echo $title;
?>
</a>&raquo; и начал его выполнение. 
Сумма заказа – <?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">