Пример #1
0
 public function process_event(&$event)
 {
     global $DB;
     $this->force_connect();
     $r = false;
     switch ($event->type) {
         case 'ProjectPosted':
             $project_id = $event->data['id'];
             $this->log->notice('New project posted #id = ' . $project_id);
             $obj_project = new projects();
             $project = $obj_project->GetPrjCust($project_id);
             // Не выбран испольнитель (если испольнитель выбран, то не пишем ответ на этот проект)
             if ($project && $project['exec_id'] == 0 && $project['kind'] == 1) {
                 $autoresponses = autoresponse::getListForProject($project);
                 foreach ($autoresponses as $autoresponse) {
                     $freelancer = $autoresponse->data['freelancer'];
                     $contacts_freelancer = $autoresponse->data['contacts_freelancer'];
                     // Проверяем если проект только для про, то и пользователь который на него отвечает должен быть ПРО
                     if ($project['pro_only'] == 't' && !payed::CheckPro($freelancer->login)) {
                         continue;
                     }
                     // Проверяем если проект только для верифицированных, то и пользователь который на него отвечает должен быть верифицирован
                     if ($project['verify_only'] == 't' && !$freelancer->IsVerified()) {
                         continue;
                     }
                     // Проверка, что текущий пользователь не является владельцем проекта
                     if ($project['user_id'] == $freelancer->uid) {
                         continue;
                     }
                     // Добавление нового отзыва к проекту
                     $obj_offer = new projects_offers();
                     $save_contacts = serialize($contacts_freelancer);
                     $DB->start();
                     $error_offer = $obj_offer->AddOffer($freelancer->uid, $project['id'], '', '', '', '', '', '', antispam(stripslashes($autoresponse->data['descr'])), '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', $autoresponse->toBoolean($autoresponse->data['only_4_cust']), 0, 0, false, false, $save_contacts, 0, $autoresponse->data['id']);
                     // В случае добавление автоответа, уменьшаем счетчик автоответов для пользователя (в транзакции)
                     if ($error_offer || !$autoresponse->reduce($freelancer, $obj_offer, $project_id)) {
                         $this->log->notice('Rollback autoresponse posted for project #id = ' . $project_id);
                         $DB->rollback();
                     } else {
                         $obj_project->incrementViews($project_id);
                         $this->log->notice(sprintf('New autoresponse #%d posted for project #%d', $obj_offer->offer_id, $project_id));
                         $DB->commit();
                     }
                 }
             }
             break;
     }
     return PGQ_EVENT_OK;
 }
Пример #2
0
 /**
  * run - display template and edit data
  *
  * @access public
  *
  */
 public function run()
 {
     $tpl = new template();
     $helper = new helper();
     $projects = new projects();
     $user = new users();
     $tpl->assign('objTickets', $this);
     $tpl->assign('helper', $helper);
     $tpl->assign('allProjects', $projects->getAll());
     $tpl->assign('userProjectrelation', $user->getUserProjectRelation($_SESSION['userdata']['id']));
     $tpl->assign('numText', '');
     //Closed Tickets
     $tpl->assign('allClosedTickets', $this->getUserTickets('0,1', $_SESSION['userdata']['id']));
     //Open Tickets
     $tpl->assign('allOpenTickets', $this->getUserTickets('3,2,4,5,6', $_SESSION['userdata']['id']));
     $tpl->assign('role', $_SESSION['userdata']['role']);
     $tpl->assign('numPages', $this->getNumPages());
     $tpl->display('tickets.showMy');
 }
Пример #3
0
 public static function createProjectSelectList()
 {
     $engine = EngineAPI::singleton();
     $projects = projects::getProjects();
     $output = '<ul class="pickList">';
     foreach ($projects as $project) {
         $output .= sprintf('<li><a href="list.php?listType=project&amp;projectID=%s" class="btn">%s</a></li>', $project['ID'], $project['projectName']);
     }
     $output .= '</ul>';
     return $output;
 }
Пример #4
0
 public static function generateProjectCheckList($selected = array())
 {
     if (!is_array($selected)) {
         return FALSE;
     }
     $allProjects = projects::getProjects();
     $output = "";
     foreach ($allProjects as $project) {
         $output .= sprintf('<li><label class="checkbox" for="%s"><input type="checkbox" id="%s" name="projects[]" value="%s"%s> %s</label></li>', htmlSanitize("project_" . $project['ID']), htmlSanitize("project_" . $project['ID']), htmlSanitize($project['ID']), in_array($project['ID'], $selected) ? " checked" : "", htmlSanitize($project['projectName']));
     }
     return "<ul class='checkboxList'>{$output}</ul>";
 }
Пример #5
0
 /**
  * run - display template and edit data
  *
  * @access public
  *
  */
 public function run()
 {
     $tpl = new template();
     $helper = new helper();
     $projects = new projects();
     //Show closed tickets? (1=yes, 0=no)
     $closedTickets = 1;
     //if(isset($_POST['closedTickets'])===true){
     //$closedTickets = 0;
     //}
     $tpl->assign('closedTickets', $closedTickets);
     $tpl->assign('allTickets', $this->getAllBySearch('', '', $closedTickets));
     $tpl->assign('status', $this->state);
     $tpl->assign('role', $_SESSION['userdata']['role']);
     $tpl->assign('rowsPerPage', $this->rowsPerPage);
     $tpl->assign('objTickets', $this);
     $tpl->assign('helper', $helper);
     $tpl->assign('numPages', $this->getNumPages());
     $tpl->assign('allProjects', $projects->getAll());
     $tpl->display('tickets.showAll');
 }
Пример #6
0
 /**
  * run - display template and edit data
  *
  * @access public
  */
 public function run()
 {
     $tpl = new template();
     $id = '';
     if (isset($_GET['id']) === true) {
         $id = (int) $_GET['id'];
     }
     $client = $this->getClient($id);
     if (empty($client) === false) {
         $file = new files();
         $project = new projects();
         $msgKey = '';
         if ($_SESSION['userdata']['role'] == 'admin') {
             $tpl->assign('admin', true);
         }
         if (isset($_POST['upload'])) {
             if (isset($_FILES['file'])) {
                 $msgKey = $file->upload($_FILES, 'client', $id);
             }
         }
         $comment = new comments();
         //Add comment
         if (isset($_POST['comment']) === true) {
             $mail = new mailer();
             $values = array('text' => $_POST['text'], 'date' => date("Y-m-d H:i:s"), 'userId' => $_SESSION['userdata']['id'], 'moduleId' => $id, 'commentParent' => $_POST['father']);
             $comment->addComment($values, 'client');
         }
         $tpl->assign('userClients', $this->getClientsUsers($id));
         $tpl->assign('comments', $comment->getComments('client', $id));
         $tpl->assign('imgExtensions', array('jpg', 'jpeg', 'png', 'gif', 'psd', 'bmp', 'tif', 'thm', 'yuv'));
         $tpl->assign('info', $msgKey);
         $tpl->assign('client', $client);
         $tpl->assign('clientProjects', $project->getClientProjects($id));
         $tpl->assign('files', $file->getFilesByModule('client'));
         //var_dump($file->getFilesByModule('client')); die();
         $tpl->display('clients.showClient');
     } else {
         $tpl->display('general.error');
     }
 }
Пример #7
0
/**
 * Изменение блокировки проекта.
 * 
 * @param int    $project_id ID проекта
 * @param int    $act_id     ID нового действия (admin_actions)
 * @param int    $src_id     ID исходного действия (projects_blocked)
 * @param string $reason     причина
 * @param int    $reason_id  ID причины, если она выбрана из списка (таблица admin_reasons, где act_id = 9)
 *
 * @return object xajaxResponse
 */
function updatePrjBlock($project_id, $act_id, $src_id, $reason = '', $reason_id = null)
{
    session_start();
    $objResponse = new xajaxResponse();
    if (hasPermissions('projects')) {
        require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects.php';
        $projects = new projects();
        $project = $projects->GetPrjCust($project_id);
        $sObjLink = '/projects/?pid=' . $project_id;
        // лог админских действий
        $reason_id = $reason_id ? $reason_id : null;
        $reason = str_replace('%USERNAME%', $project['uname'] . ' ' . $project['usurname'], $reason);
        $reason = change_q($reason, false, 0, true);
        if ($act_id == 10 && $src_id) {
            // разблокируем проект
            $projects->UnBlocked($project_id);
            // пишем лог админских действий
            admin_log::addLog(admin_log::OBJ_CODE_PROJ, 10, $project['user_id'], $project_id, $project['name'], $sObjLink, 0, '', $reason_id, $reason);
            // так как появилось новое действие в логе?
            $objResponse->script('window.location="/siteadmin/admin_log/?site=proj";');
        } elseif ($act_id == 9 && $src_id) {
            // редактируем текущую блокировку в projects_blocked, admin_log обновится триггером
            admin_log::updateProjBlock($src_id, $reason, $reason_id);
            $reason = reformat($project['blocked_reason'], 24, 0, 0, 1, 24);
            $objResponse->script('window.location.reload(true)');
        } elseif ($act_id == 9 && !$src_id) {
            // блокируем проект
            $sBlockId = $projects->Blocked($project_id, $reason, $reason_id, $_SESSION['uid']);
            $project = $projects->GetPrjCust($project_id);
            // пишем лог админских действий
            admin_log::addLog(admin_log::OBJ_CODE_PROJ, 9, $project['user_id'], $project_id, $project['name'], $sObjLink, 0, '', $reason_id, $reason, $sBlockId);
            // так как появилось новое действие в логе?
            $objResponse->script('window.location="/siteadmin/admin_log/?site=proj";');
        }
    }
    return $objResponse;
}
Пример #8
0
    $prj_content = $prj->getSimilarProjects($project['id'], 5, $project_specs);
    if ($prj_content) {
        //Список специализаций через запятую
        $str_specs = projects::getGroupLinks($project_specs);
        ?>
        <div class="b-layout b-layout_margright_270 b-layout_marg_null_ipad">
            <h3 class="b-layout__title b-layout__title_padbot_20">
                <?php 
        if ($str_specs) {
            ?>
                    Другие проекты по <?php 
            echo ending(count($project_specs), 'специализации', 'специализациям', 'специализациям');
            ?>
 
                    &laquo;<?php 
            echo projects::getGroupLinks($project_specs);
            ?>
&raquo;
                <?php 
        } else {
            ?>
                    Возможно вас заинтересуют другие проекты
                <?php 
        }
        ?>
            </h3>
            <?php 
        echo $prj_content;
        ?>
            <div class="b-pager">
                <ul class="b-pager__list">
Пример #9
0
<?php

$currentProjectsIDs = array_keys(sessionGet('currentProject'));
$projectListHTML = '<ul id="selectProjectsList">';
try {
    if (($projects = projects::getProjects()) === FALSE) {
        throw new Exception("Error retrieving project list.");
    }
    foreach ($projects as $project) {
        $projectListHTML .= sprintf("<li><label><input type='checkbox' value='%s' data-label='%s'%s> %s</label></li>", $project['ID'], $project['projectName'], in_array($project['ID'], $currentProjectsIDs) ? " checked='checked'" : '', $project['projectName']);
    }
} catch (Exception $e) {
    $projectListHTML .= "<li>" . $e->getMessage() . "</li>";
}
$projectListHTML .= '</ul>';
localvars::add('projectModalList', $projectListHTML);
?>
{engine name="csrf"}
<!-- Modal - Select Current Projects -->
<div id="selectProjectsModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
	<div class="modal-header">
		<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
		<h3>Your current projects:</h3>
	</div>
	<div class="modal-body">{local var="projectModalList"}</div>
	<div class="modal-footer">
		<button class="btn" data-dismiss="modal" aria-hidden="true">Cancel</button>
		<button class="btn btn-primary" onclick="saveSelectedProjects();">Save changes</button>
	</div>
</div>
Пример #10
0
 /**
  * Cоздание заказа на базе проекта.
  */
 public function actionNewProjectOrder()
 {
     //@todo: на период разработки резерва заказов
     if (!tservices_helper::isAllowOrderReserve()) {
         $this->missingAction(null);
     }
     $offer_id = __paramInit('int', 'offer_id', 'offer_id', null);
     $projects = new projects();
     $projectData = $projects->getProjectByOfferId($offer_id, $this->uid);
     if (!$projectData) {
         $this->missingAction(null);
     }
     $freelancer = new freelancer();
     $freelancer->GetUserByUID($projectData['frl_id']);
     if ($freelancer->uid <= 0) {
         $this->missingAction(null);
     }
     $form = new NewOrderForm();
     $form->setDefaults(array('title' => addslashes(htmlspecialchars_decode($projectData['name'], ENT_QUOTES)), 'description' => addslashes(htmlspecialchars_decode($projectData['descr'], ENT_QUOTES)), 'order_price' => $projectData['currency'] == 2 ? $projectData['cost'] : ''));
     if (isset($_POST) && sizeof($_POST) > 0 && $form->isValid($_POST)) {
         $data = $form->getValues();
         $data['frl_id'] = $freelancer->uid;
         $data['emp_id'] = $this->uid;
         $data['tu_id'] = $projectData['id'];
         if ($order = $this->order_model->createFromProject($data)) {
             $projects->SetExecutor($projectData['id'], $projectData['frl_id'], $projectData['user_id']);
             $tservices_smail = new tservices_smail();
             $tservices_smail->newOrder($order);
             $this->redirect(sprintf(tservices_helper::url('order_card_url'), $order['id']));
         }
     }
     //Выводим в сайдбар виджет индикатор статуса заказа
     $this->getClips()->add('sidebar', $this->widget('OrderStatusIndicator', array(), true));
     $this->render('new-order-form', array('title' => 'Новый заказ по проекту', 'submit_title' => 'Выбрать исполнителем и предложить заказ', 'cansel_url' => getFriendlyURL('project', $projectData), 'form' => $form, 'freelancer' => $freelancer));
 }
Пример #11
0
    case "prj_trash":
        $location = __paramInit('string', null, 'location', '/');
        $prj_id = __paramInit('int', null, 'project_id');
        $do_remove = __paramInit('bool', null, 'do_remove');
        $projects = new projects();
        if ($prj_id) {
            $error .= $projects->switchTrashProject(get_uid(false), $prj_id, $do_remove);
        }
        header("Location: " . str_replace($GLOBALS['host'], '', $location));
        //перекидываем на текущую страницу, чтобы нельзя было повторить POST по F5
        exit;
        break;
    case "prj_express_public":
        $location = __paramInit('string', null, 'location', '/');
        $prj_id = __paramInit('int', null, 'project_id');
        $projects = new projects();
        if ($prj_id && $user->is_pro == 't') {
            $error .= $projects->publishedMovedToVacancy(array('uid' => $uid), $prj_id);
        }
        header("Location: " . str_replace($GLOBALS['host'], '', $location));
        //перекидываем на текущую страницу, чтобы нельзя было повторить POST по F5
        exit;
        break;
}
$header = "../header.php";
$footer = "../footer.html";
if (!$user->login) {
    include ABS_PATH . "/404.php";
    exit;
}
$obj_memcache = new memBuff();
Пример #12
0
$log->TRACE(payed::getPROEnding(true, 1));
// За 1 день для тех у кого включено автопродление
$log->TRACE(payed::getPROEnding(false, 3));
// За 3 дня для тех у кого не включено автопродление
$log->TRACE(payed::getPROEnding(false, 1));
// За 1 день для тех у кого не включено автопродление
//@todo: пока отключаем уведомления об автопродлении ПРО так как отключили автопродление
//@todo: тут еще и пытается продлить
//$log->TRACE( payed::checkAutoPRO());
// рассылаем email для тех у кого включено автопродление PRO и он закончится через 1 день
// @todo: пока автопродление не используется
// @todo: кстати непонятно зачем отдельный метод если getPROEnding справяется с этой задачей?
//$log->TRACE( payed::AlertPROEnding() );
//------------------------------------------------------------------------------
// Функция автоподьема проектов если в них в течении 2х дней не было ни одного ответа
$log->TRACE(projects::autoSetTopProject());
// Раз в час пересчитываем счетчики сообществ (пересчитываем только сообщество "Общение")
$log->TRACE(commune::recalcThemesCountCommunes(commune::COMMUNE_BLOGS_ID));
if (date('H') == 1) {
    $log->TRACE($mail->SendWarnings());
    // Отправляет предупреждению юзеру о том, что аккаунт ПРО истекает в ближайшие дни.
    $temp = new users();
    $rpath = '';
    $log->TRACE($temp->DropInactive());
    // Пишем статистику для админки #0003426
    $log->TRACE(stats::writeGeneralStat());
    // Пересчет цен работ фрилансеров в портфолио
    $log->TRACE(professions::calcAvgPrices());
}
if (date('H') == 2) {
    $log->TRACE($mail->ContestReminder());
Пример #13
0
<?php

require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/stdf.php";
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/projects.php";
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/CFile.php";
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/users.php";
$ret = 'ok:::-!-:::';
if (isset($_POST['project_id']) && isset($_POST['emp_id']) && is_array($_FILES['attach'])) {
    $prj_id = isset($_POST['project_id']) ? intval($_POST['project_id']) : 0;
    $project = new projects();
    $prj = $project->GetPrj(0, $prj_id, 1);
    if ($prj['id'] == $prj_id && $_POST['emp_id'] == $prj['user_id']) {
        $attaches = array();
        if (is_array($_FILES['attach']) && !empty($_FILES['attach']['name'])) {
            foreach ($_FILES['attach']['name'] as $key => $v) {
                if (!$_FILES['attach']['name'][$key]) {
                    continue;
                }
                $attaches[] = new CFile(array('name' => $_FILES['attach']['name'][$key], 'type' => $_FILES['attach']['type'][$key], 'tmp_name' => $_FILES['attach']['tmp_name'][$key], 'error' => $_FILES['attach']['error'][$key], 'size' => $_FILES['attach']['size'][$key]));
            }
        }
        if ($attaches) {
            $files = array();
            $error = false;
            $err = '';
            $emp = new users();
            $emp->GetUser($emp->GetField($prj['user_id'], $ee, 'login'));
            $dir = $emp->login;
            foreach ($attaches as $attach) {
                $attach->max_size = 2097152;
                $attach->proportional = 1;
/**
 * Отдает HTML для Редактирование проектов и конкурсов
 * 
 * @param  object $objResponse xajaxResponse
 * @param  string $rec_id идентификатор записи
 * @param  string $rec_type тип записи
 * @param  array $aParams дополнительные параметры с UID отправителя. остальные - опционально
 * @return string
 */
function _admEditProjectsParseForm(&$objResponse, $rec_id = '', $rec_type = '', $aParams = array())
{
    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/city.php';
    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/country.php';
    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects.php';
    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/professions.php';
    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/attachedfiles.php';
    $sTmpKey = md5(uniqid($_SESSION['uid']));
    $tmpPrj = new tmp_project($sTmpKey);
    $prj = $tmpPrj->init(1, $rec_id);
    $tmpPrj->fix();
    // $aFolders   = projects::getUserFolders( $prj['user_id'] ); // папки
    $remTPeriod = $tmpPrj->getRemainingTopPeriod($remTD, $remTH, $remTM, $remtverb);
    // закрепление
    // страны и города
    $countries = country::GetCountries();
    if ($prj['country']) {
        $cities = city::GetCities($prj['country']);
    }
    // разделы
    $categories = professions::GetAllGroupsLite();
    $professions = professions::GetAllProfessions();
    array_group($professions, 'groupid');
    $professions[0] = array();
    $project_categories = new_projects::getSpecs($rec_id);
    if (empty($project_categories)) {
        $project_categories[] = array('category_id' => 0, 'subcategory_id' => 0);
    }
    ob_start();
    include_once $_SERVER['DOCUMENT_ROOT'] . '/user/adm_edit_tpl/projects.php';
    $sHtml = ob_get_contents();
    ob_end_clean();
    // текст
    $sOnReady = "if(document.getElementById('adm_edit_descr')) \n        document.getElementById('adm_edit_descr').value = (\$('adm_edit_descr_source')? \$('adm_edit_descr_source').value : null);";
    // аттачи
    $sAttach = getAttachedFilesJs(projects::GetAllAttach($rec_id), tmp_project::MAX_FILE_COUNT, tmp_project::MAX_FILE_SIZE, 'project');
    $objResponse->assign('h4_adm_edit', 'innerHTML', 'Редактировать ' . ($rec_type == '7' ? 'конкурс' : 'проект'));
    $objResponse->assign('div_adm_edit', 'innerHTML', $sHtml);
    $objResponse->script("\$('div_adm_reason').setStyle('display', 'none');");
    $objResponse->script("adm_edit_content.editMenuItems = ['', 'Основное', 'Файлы', 'Платные услуги'];");
    $objResponse->script('adm_edit_content.edit();');
    $objResponse->script($sAttach);
    $objResponse->script($sOnReady);
    $objResponse->script("var mx = new MultiInput('adm_edit_professions','category_line'); mx.init();");
    $objResponse->script('xajax_getAdmEditReasons(' . admin_log::ACT_ID_EDIT_PROJECTS . ');');
    // для конкурса даты окончания и определения победителей
    if ($prj['kind'] == 7) {
        $objResponse->script("new tcal ({ 'formname': 'adm_edit_frm', 'controlname': 'adm_edit_end_date', 'iconId': 'end_date_btn', 'clickEvent': function(){ adm_edit_content.hideError('end_date'); } });");
        $objResponse->script("new tcal ({ 'formname': 'adm_edit_frm', 'controlname': 'adm_edit_win_date', 'iconId': 'win_date_btn', 'clickEvent': function(){ adm_edit_content.hideError('win_date'); } });");
    }
}
Пример #15
0
     }
     if ($action == 'edit') {
         if ($_POST['cancel'] || $sbr->edit($_POST, $_FILES)) {
             $ok = true;
             if ($_POST['send'] && ($sbr->status == sbr::STATUS_CANCELED || $sbr->status == sbr::STATUS_REFUSED)) {
                 $ok = $sbr->resendCanceled($sbr->id);
             }
             if ($ok) {
                 header_location_exit($sbr->isDraft() ? '/norisk2/?site=drafts' : "/norisk2/?id={$sbr->id}");
             }
         }
     }
     break;
 case 'new':
     $inner = $fpath . 'new.php';
     $projects_cnt = projects::CountMyProjects($sbr->uid, false, true);
     break;
 case 'Stage':
     $inner = 'stage.php';
     $stage_id = __paramInit('int', 'id', 'id');
     if (!($stage = $sbr->initFromStage($stage_id))) {
         break;
     }
     $feedback_sent = isset($_SESSION["thnx_block{$stage_id}"]);
     if ($feedback_sent) {
         unset($_SESSION["thnx_block{$stage_id}"]);
     }
     if ($action == 'resolve_changes') {
         $resend = __paramInit('bool', NULL, 'resend');
         $cancel = __paramInit('bool', NULL, 'cancel');
         $version = __paramInit('int', NULL, 'version');
Пример #16
0
 /**
  * Обрабатываем данные для ввывода информации по шагу 
  */
 public function actionProjects()
 {
     require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/projects.php";
     require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/professions.php";
     $prj_id = __paramInit('int', 'project', null, 0);
     if ($prj_id > 0) {
         $obj_project = new projects();
         $project = $obj_project->GetPrjCust($prj_id);
     }
     if ($project['id'] > 0) {
         require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/users.php";
         require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/opinions.php";
         // Загружаем данные по отзывам автора проекта
         $op_data = opinions::getCounts($project['user_id'], array('frl', 'norisk', 'all', 'total'));
         //$op_data['norisk']['a'] = ( (int)$op_data['norisk']['p'] + (int)$op_data['norisk']['n'] + (int)$op_data['norisk']['m'] );
         //$op_data['all']['a']    = ( (int)$op_data['all']['p']    + (int)$op_data['all']['n']    + (int)$op_data['all']['m'] );
         $op_data['total']['a'] = (int) $op_data['total']['p'] + (int) $op_data['total']['n'] + (int) $op_data['total']['m'];
         $user = new users();
         $user->GetUserByUID($project['user_id']);
         $registered = strtolower(ElapsedMnths(strtotime($project['reg_date'])));
         $is_offer = $this->isOfferProject($project['id']);
         $count_offer = $this->countOffers();
         $count_pay_offer = $this->countPayOffers();
         // Максимальное количество ответов для пользователя
         $max_offers = 3 + $count_pay_offer;
         // Обработка запросов на странице
         $action = __paramInit('string', null, 'action');
         if ($action && ($count_offer < $max_offers || $project['kind'] == 7 || $action == 'paid_offer')) {
             $error = $this->actionProcessingProjects($action, $project);
         }
         include $_SERVER['DOCUMENT_ROOT'] . "/wizard/registration/steps/tpl.step.answer.php";
     } else {
         $filter = array();
         $category = $_COOKIE[$this->parent->getCookieName('categories')];
         $subcategory = $_COOKIE[$this->parent->getCookieName('subcategories')];
         if ($category > 0) {
             $cat[] = professions::GetGroupName($category);
             $filter['active'] = 't';
             $filter['my_specs'] = 'f';
             $filter['categories'][0] = array($category => '0');
             if ($subcategory > 0) {
                 $cat[] = professions::GetProfName($subcategory);
                 unset($filter['categories'][0]);
                 $filter['categories'][1] = array($subcategory => '1');
             }
             $category_name = implode(": ", $cat);
         }
         $obj_project = new new_projects();
         $obj_project->page_size = step_freelancer::DEF_PROJECTS_PER_PAGE;
         $projects = $obj_project->getProjects($count, -1, 1, false, $filter, true, false, NULL, true);
         include $_SERVER['DOCUMENT_ROOT'] . "/wizard/registration/steps/tpl.step.search.php";
     }
 }
Пример #17
0
 <span><?php 
echo blogs::NumsBlockedThreads();
?>
</span></td>
        <td>
            <?php 
if ($mode == 'projects') {
    ?>
<strong onmouseover="hm_open(2)" onmouseout="hm_close(2)">Проекты</strong><?php 
} else {
    ?>
<a href="/siteadmin/ban-razban/?mode=projects" onmouseover="hm_open(2)" onmouseout="hm_close(2)">Проекты</a><?php 
}
?>
 <span><?php 
echo projects::NumsBlockedProjects();
?>
</span><br>
            <table cellpadding="0" cellspacing="0" border="0" class="in-stat-menu" style="display: none; width: 160px" id="in-stat-menu2" onmouseover="hm_open(2)" onmouseout="hm_close(2)">
            <tr><td><a href="/siteadmin/ban-razban/?mode=complain">Жалобы на проект</a></td></tr>
            </table>
        </td>
        <td>
            <?php 
if ($mode == 'sdelau') {
    ?>
<strong onmouseover="hm_open(3)" onmouseout="hm_close(3)">Предложения "Сделаю"</strong><?php 
} else {
    ?>
<a href="/siteadmin/ban-razban/?mode=sdelau" onmouseover="hm_open(3)" onmouseout="hm_close(3)">Предложения "Сделаю"</a><?php 
}
Пример #18
0
    errorHandle::errorMsg($e->getMessage());
    $error = TRUE;
}
// build the form for displaying
if (forms::validID()) {
    try {
        if (($builtForm = forms::build($engine->cleanGet['MYSQL']['formID'], $engine->cleanGet['MYSQL']['objectID'], $error)) === FALSE) {
            throw new Exception("Error building form.");
        }
        localvars::add("form", $builtForm);
        localvars::add("leftnav", navigation::buildProjectNavigation($engine->cleanGet['MYSQL']['formID']));
        localvars::add("objectID", $engine->cleanGet['MYSQL']['objectID']);
        //////////
        // Project Tab Stuff
        $selectedProjects = objects::getProjects($engine->cleanGet['MYSQL']['objectID']);
        localVars::add("projectOptions", projects::generateProjectChecklist($selectedProjects));
        // Project Tab Stuff
        //////////
    } catch (Exception $e) {
        log::insert("Data Entry: Object: Error", $engine->cleanGet['MYSQL']['objectID'], $engine->cleanGet['MYSQL']['formID'], $e->getMessage());
        errorHandle::errorMsg($e->getMessage());
    }
}
localVars::add("results", displayMessages());
// Display warning if form is not part of current project
forms::checkFormInCurrentProjects($engine->cleanGet['MYSQL']['formID']);
localvars::add("actionHeader", isnull($engine->cleanGet['MYSQL']['objectID']) ? "Add" : "Edit");
localvars::add("parentHeader", isnull($parentObject) ? "" : "<h2>Adding Child to Parent '" . $parentObject['data'][$form['objectTitleField']] . "'</h2>");
$engine->eTemplate("include", "header");
?>
Пример #19
0
$footer = '../footer.html';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects_offers.php';
session_start();
$uid = get_uid();
$pid = intvalPgSql((int) trim($_GET['pid']));
$wid = intvalPgSql((int) trim($_GET['wid']));
$name = trim($_GET['user']);
$user_obj = new users();
$user_obj->GetUser($name);
$uid = $user_obj->GetUid($error, $name);
$proj = array();
$proj = (array) $user_obj;
// Проект.
$obj_project = new projects();
$project = $obj_project->GetPrjCust($pid);
if (!$project || !$user_obj->uid) {
    $fpath = '../';
    include '../404.php';
    exit;
} else {
    // Предложения по данному проекту.
    $obj_offer = new projects_offers();
    $offer = $obj_offer->GetPrjOffer($pid, $user_obj->uid);
    $width = $height = 0;
    if (!$offer) {
        $fpath = '../';
        include '../404.php';
        exit;
    } else {
Пример #20
0
  	foreach ( $project_attach as $attach )
  	{
  		$str = viewattachLeft( NULL, $attach["name"], $attach['path'], $file, 0, 0, 0, 0, 0, 0, $nn );
  		echo '<div class = "flw_offer_attach">', $str, '</div>';
          $nn++;
  	}
  	?>
  	       </div>
          </td>
  	</tr>
  <?php } //elseif */
?>
                <div class="b-menu b-menu_crumbs b-menu_padtop_30">
                    <ul class="b-menu__list">
                        <li class="b-menu__item b-menu__item_fontsize_11">Раздел: <?php 
echo projects::getSpecsStr($project['id'], '&#160;&rarr;&#160;', ', ', 'b-menu__link');
?>
</li>
                    </ul>
                </div>
                
                <?php 
if (!$is_offer && ($count_offer < $max_offers || $project['kind'] == 7)) {
    ?>
                <div class="i-prompt">
                    <div class="b-prompt b-prompt_left_-260 b-prompt_top_35 b-prompt_width_240">
                        <div class="b-prompt__txt b-prompt__txt_color_fd6c30 b-prompt__txt_italic">Если проект вас заинтересовал, оставьте заказчику свое предложение</div>
                        <div class="b-prompt__arrow b-prompt__arrow_left_70 b-prompt__arrow_3"></div>
                    </div>
                </div>
                
Пример #21
0
$psortorder = !isset($_POST['psortorder']) ? $_SESSION['psortorder'] : $_POST['psortorder'];
$_SESSION['psortorder'] = $psortorder;

if (empty($_SESSION['psearchstring'])) $_SESSION['psearchstring'] = '';
$psearchstring = !isset($_POST['psearchstring']) ? $_SESSION['psearchstring'] : clearVars($_POST['psearchstring']);
$_SESSION['psearchstring'] = $psearchstring;

if (empty($_SESSION['pstatus'])) $_SESSION['pstatus'] = 1;
$pstatus = !isset($_POST['pstatus']) ? $_SESSION['pstatus'] : $_POST['pstatus'];
$_SESSION['pstatus'] = $pstatus;

$status_options = array( -1 => $dict['all_projects'],
1 => $dict['pr_enabled_only'],
0 => $dict['pr_disabled_only'] );

$projects = new projects();
        $xajax    = $xajax_todo->getJavascript('includes/xajax');
$pr_formvars = new project_foo();

if (!empty($_POST['formsend']))
{
    /* Wenn das Eintrag gelöschet werden soll, dann brauchen wir
    * es zuerst nicht auf $_POST Variablen auswerten
    */
    if (!empty($_POST['deleteprojectdata']) && !empty($_POST['projectid']))
    {
        if ($projects->isDeletable($_POST['projectid']))
        {
            if (!$projects->deleteProject($_POST['projectid']))
            {
                $erg = $projects->getPostVars();
Пример #22
0
	<?php 
    if ($prj['name']) {
        ?>
<strong><?php 
        echo $prj['name'];
        ?>
</strong><?php 
    }
    ?>
<br>
	<?php 
    echo reformat($prj['descr'], 96);
    ?>
<br><br>
	<?php 
    $projects = new projects();
    $attach = $projects->GetAllAttach($prj['id']);
    for ($j = 0; $j < count($attach); ++$j) {
        if ($attach[$j]['name']) {
            print '<div class="flw_offer_attach"><a href="/users/' . $prj['login'] . '/upload/' . $attach[$j]['name'] . '" target="_blank">Загрузить</a> (' . $attach[$j]['ftype'] . '; ' . ConvertBtoMB($attach[$j]['size']) . ' )</div>';
        }
    }
    ?>
	<?php 
    if ($uid != $_SESSION['uid'] && $prj['closed'] == 'f') {
        ?>
<form action="/contacts/?from=<?php 
        echo $user->login;
        ?>
#form" method="post"><input type="hidden" name="prjname" value="<?php 
        echo $prj['name'] ? $prj['name'] : 'заголовок отсутствует';
Пример #23
0
    </table>
    
    <?php 
        $aCategory = array();
        foreach ($log as $aOne) {
            $sObjName = $aOne['object_name'] ? $aOne['object_name'] : '<без названия>';
            $sObjLink = $aOne['object_link'] ? $aOne['object_link'] : 'javascript:void(0);';
            $sActClass = '';
            $nRowSpan = $aOne['admin_comment'] ? 6 : 5;
            if (in_array($aOne['act_id'], $aRed)) {
                $sActClass = 'color-a30000';
            } elseif (in_array($aOne['act_id'], $aGreen)) {
                $sActClass = 'color-45a300';
            }
            if (!isset($aCategory[$aOne['object_id']])) {
                $aCategory[$aOne['object_id']] = projects::getSpecsStr($aOne['object_id'], ' / ', ', ', true);
            }
            $sCategory = $aCategory[$aOne['object_id']];
            ?>
    <table class="lenta-project">
	<tr>
    	<td class="cell-number"><h4>#<?php 
            echo $aOne['object_id'];
            ?>
</h4></td>
    	<td class="cell-body"><h4>Проект: <a href="<?php 
            echo $sObjLink;
            ?>
"><?php 
            echo hyphen_words(reformat($sObjName, 60), true);
            ?>
Пример #24
0
if (!DEVELOPMENT && is_dir('install')) {
    $user->errors[] = 'err_416';
    $action = 'login';
    $user->empl_id = 0;
}
// Danach, ob wir schon nicht in eine andere Richtung gehen sollten...
if ($action != 'login') {
    $action = empty($_POST['action']) ? $action : $_POST['action'];
    // Und jetzt merken wir uns unsere Seite...
    $_SESSION['action'] = $action;
}
if (empty($_SESSION['default_project_id'])) {
    if ($options_array['pr_id'] > 0) {
        $_SESSION['default_project_id'] = $options_array['pr_id'];
    } else {
        $_pr = new projects();
        $_SESSION['default_project_id'] = $_pr->get_first_project();
    }
}
// Auf dieser Stelle initialisieren wir allgemein gültige Variablen...
$JavaScript = '';
//Jetzt wird eigene Logik für bestimmte Seite hinzugefügt
switch ($action) {
    case 'activity_acquisition':
        require 'includes/taet.app.php';
        break;
    case 'projects':
        require 'includes/projects.app.php';
        break;
    case 'projectposition':
        require 'includes/projectposition.app.php';
Пример #25
0
<?php

if (!defined('IN_STDF')) {
    header("HTTP/1.0 404 Not Found");
    exit;
}
//require_once($_SERVER['DOCUMENT_ROOT'] . "/xajax/projects.common.php");
//$xajax->printJavascript('/xajax/');
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/projects.php";
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/professions.php";
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/HTML/projects_lenta.php";
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/sbr.php";
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/stop_words.php';
$projects = new projects();
$stop_words = new stop_words(hasPermissions('projects'));
if ($_POST['openclose'] == 1) {
    $_GET["open"] = 1;
    $_GET["closed"] = 0;
} elseif ($_POST['openclose'] == 2) {
    $_GET["closed"] = 1;
    $_GET["open"] = 0;
}
$uid = $user->uid;
$is_emp = is_emp();
$is_owner = $uid == get_uid(false);
$is_adm = !$is_owner && hasPermissions('projects');
//print_r($_POST);
$closed = $_GET["closed"] ? "true" : ($_GET["all"] ? "" : "false");
$kind = __paramInit('int', 'kind', 'kind', 0);
$trash = __paramInit('int', 'trash', 'trash', 0);
if ($trash) {
Пример #26
0
/**
 * формирует превью проекта на главной странице.
 */
function GetPreview($data)
{
    $objResponse = new xajaxResponse();
    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects.php';
    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/attachedfiles.php';
    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/CFile.php';
    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/HTML/projects_lenta.php';
    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/project_exrates.php';
    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/memBuff2.php';
    $kind = 1;
    $memBuff = new memBuff();
    $htmlLenta = $memBuff->get('projectsLentaHTML');
    if (!$htmlLenta) {
        $prj = new new_projects();
        $prjs = $prj->getProjects($num_prjs, -1, 1, false, null, true);
        foreach ($prjs as &$proj) {
            // стираем принадлежность проекта к пользователю, чтобы не появилось кнопок РЕДАКТИРОВАТЬ и пр.
            unset($proj['user_id']);
        }
        unset($proj);
        $htmlPrj = new HTMLProjects();
        $htmlPrj->template = '/projects/tpl.lenta.new.php';
        $prj_content = $htmlPrj->ShowProjects($num_prjs, $prjs, 1, 1, null, true);
        $prfs = new professions();
        $profs = $prfs->GetAllProfessions('', 0, 1);
        // подложка с лентой проектов
        ob_start();
        include $_SERVER['DOCUMENT_ROOT'] . '/templates/main.php';
        $htmlLenta = ob_get_clean();
        // кэшируем ленту проектов
        $memBuff->set('projectsLentaHTML', $htmlLenta, 1800);
    }
    // подготавливаем данные для шаблона в ленту проектов
    $row = array();
    $row['kind'] = __paramValue('int', $data['kind']);
    $row['cost'] = __paramValue('int', $data['cost']);
    $row['currency'] = __paramValue('int', $data['currency_db_id']);
    $row['priceby'] = __paramValue('int', $data['priceby_db_id']);
    $row['name'] = stripslashes(__paramValue('html', $data['name'], null, true));
    $contacts = array('phone' => array('name' => 'Телефон', 'value' => ''), 'site' => array('name' => 'Сайт', 'value' => ''), 'icq' => array('name' => 'ICQ', 'value' => ''), 'skype' => array('name' => 'Skype', 'value' => ''), 'email' => array('name' => 'E-mail', 'value' => ''));
    if (isset($data['contacts'])) {
        foreach ($data['contacts'] as $name => $value) {
            if (!isset($contacts[$name])) {
                continue;
            }
            switch ($name) {
                case 'site':
                    if (!url_validate(ltrim(ltrim($value, 'http://'), 'https://')) && trim($value) != '') {
                        $error["contact_{$name}"] = 'Поле заполнено некорректно';
                    }
                    if (strpos($value, 'htt') === false && trim($value) != '') {
                        $value = 'http://' . $value;
                    }
                    break;
                case 'email':
                    if (!is_email($value) && trim($value) != '') {
                        $error["contact_{$name}"] = 'Поле заполнено некорректно';
                    }
                    break;
            }
            $contacts[$name]['value'] = __paramValue('htmltext', stripslashes($value));
        }
        $row['contacts'] = serialize($contacts);
    }
    $descrFull = stripslashes(__paramValue('html', $data['descr'], null, true));
    $descr = preg_replace('/^ /', "", $descrFull);
    $descr = preg_replace("/(\n) /", "\$1", $descr);
    $descr = reformat(strip_tags(htmlspecialchars(LenghtFormatEx(htmlspecialchars_decode($descr, ENT_QUOTES), 180), ENT_QUOTES), '<br />'), 50, 1, 0, 1);
    $descr = preg_replace("//", '&nbsp;', $descr);
    $row['descr'] = $descr;
    $row['t_is_payed'] = $data['logo_ok'] || $data['top_ok'];
    $row['t_is_ontop'] = __paramValue('bool', $data['top_ok']);
    $row['t_pro_only'] = $data['pro_only'] ? 't' : 'f';
    $row['t_verify_only'] = $data['verify_only'] ? 't' : 'f';
    $row['t_urgent'] = $data['urgent'] ? 't' : 'f';
    $row['t_hide'] = $data['hide'] ? 't' : 'f';
    $row['create_date'] = date('Y-m-d H:i', strtotime(date('Y-m-d H:i:s')) - 120);
    // делаем дату публикации 2 минуты назад
    $row['end_date'] = __paramValue('string', $data['end_date']);
    $row['win_date'] = __paramValue('string', $data['win_date']);
    $row['country'] = __paramValue('int', $data['project_location_columns'][0]);
    $row['city'] = __paramValue('int', $data['project_location_columns'][1]);
    list($row['country_name'], $row['city_name']) = explode(': ', __paramValue('string', $data['location']));
    $logoOK = __paramValue('bool', $data['logo_ok']);
    $topOK = __paramValue('bool', $data['top_ok']);
    $row['link'] = __paramValue('string', $data['link']);
    if ($logoOK) {
        $logoAttach = new attachedfiles($data['logo_attachedfiles_session']);
        $logoFiles = $logoAttach->getFiles(array(1));
        if (count($logoFiles)) {
            $logoFile = array_pop($logoFiles);
            // загружено может быть несколько файлов, берем последний
            $logoCFile = new CFile($logoFile['id']);
        } elseif (__paramValue('int', $data['logo_file_id'])) {
            $logoCFile = new CFile(__paramValue('int', $data['logo_file_id']));
        }
        $row['logo_name'] = $logoCFile->name;
        $row['logo_path'] = $logoCFile->path;
    }
    $is_ajax = true;
    // подготовка данных для подробной страницы проекта
    $project = $row;
    $categories = array();
    for ($i = 0; $i < 3; ++$i) {
        $categoryID = __paramValue('int', $data['project_profession' . $i . '_columns'][0]);
        $subcategoryID = __paramValue('int', $data['project_profession' . $i . '_spec_columns'][0]);
        if ($categoryID || $subcategoryID) {
            $categories[] = array('category_id' => $categoryID, 'subcategory_id' => $subcategoryID);
        }
    }
    $project['spec_txt'] = projects::_getSpecsStr($categories, ' / ', ', ', true);
    $project['ico_payed'] = $logoOK;
    $project['is_upped'] = $topOK;
    $project['descr'] = $descrFull;
    $project['logo_id'] = $logoCFile->id;
    $project['prefer_sbr'] = __paramValue('bool', $data['prefer_sbr']) ? 't' : 'f';
    $project['urgent'] = __paramValue('bool', $data['urgent']) ? 't' : 'f';
    $project['hide'] = __paramValue('bool', $data['hide']) ? 't' : 'f';
    if (trim($project['contacts']) != '') {
        $contacts_employer = unserialize($project['contacts']);
        $empty_contacts_employer = 0;
        foreach ($contacts_employer as $name => $contact) {
            if (trim($contact['value']) == '') {
                $empty_contacts_employer++;
            }
        }
        $is_contacts_employer_empty = count($contacts_employer) == $empty_contacts_employer;
    }
    $isPreview = true;
    $project_exRates = project_exrates::GetAll();
    $translate_exRates = array(0 => 2, 1 => 3, 2 => 4, 3 => 1);
    ob_start();
    include $_SERVER['DOCUMENT_ROOT'] . '/public/new/tpl.preview.php';
    ?>
    <?php 
    $htmlProject = ob_get_clean();
    $objResponse->assign('project_preview_lenta', 'innerHTML', $htmlLenta);
    $objResponse->assign('project_preview_content', 'innerHTML', $htmlProject);
    $objResponse->script('Public.showPreview()');
    return $objResponse;
}
Пример #27
0
			</div>
		</div>
	</div>
</div>

<?php 
}
//if
?>


<?php 
foreach ($list as $row) {
    ?>
	<?php 
    $project = projects::initData($row);
    ?>
	<?php 
    if ($row['t_is_ontop'] && !$row['strong_top'] && isset($_COOKIE['hidetopprjlenta']) && $_COOKIE['hidetopprjlenta'] == 1 && $_COOKIE['hidetopprjlenta_time'] < strtotime($row['create_date'])) {
        $hidetopprjlenta_more = 1;
    }
    ?>
	<div class="b-post <?php 
    echo $row['is_color'] == 't' ? 'b-post_bg_fffded' : '';
    ?>
 b-post_padbot_15 b-post_margbot_20 b-post_bordbot_eee b-post_relative <?php 
    echo $row['t_is_ontop'] && !$row['strong_top'] ? 'topprjpay' : '';
    ?>
" id="project-item<?php 
    echo $row['id'];
    ?>
Пример #28
0
                 exit;
             }
         }
     }
     break;
 case "warn":
     if (hasPermissions('projects')) {
         require_once ABS_PATH . "/classes/messages.php";
         require_once ABS_PATH . "/classes/users.php";
         require_once ABS_PATH . "/classes/projects.php";
         $usr = new users();
         $usr->Warn($_GET["ulogin"]);
         $threadid = intval(trim($_GET['threadid']));
         $uid = get_uid();
         //messages::SendWarn($_GET["ulogin"],$_GET['blogid'],$_GET['threadid']); - это тут не работает!
         $tprj = new projects();
         $tprj->DeletePublicProject(intval($_GET["prid"]), get_uid(), hasPermissions('projects'));
     }
     break;
 case "post_offers_filter":
     $offers_filter = new offers_filter();
     $f_category = $_POST['pf_categofy'];
     if ((int) $_POST['comboe_column_id'] === 1 && $_POST['comboe_db_id'] > 0) {
         $f_category[1][$_POST['comboe_db_id']] = 1;
     }
     if ((int) $_POST['comboe_column_id'] === 0 && $_POST['comboe_db_id'] > 0) {
         $f_category[0][$_POST['comboe_db_id']] = 0;
     }
     if ($_POST['pf_category'] && !$_POST['pf_subcategory']) {
         $f_category[0][$_POST['pf_category']] = 0;
     }
Пример #29
0
function setReadAllProject()
{
    session_start();
    $objResponse = new xajaxResponse();
    if (is_emp()) {
        projects::SetReadAll(get_uid(false));
        $tip = notifications::getEmpGroupTip();
        $objResponse->script("\n            \$('new_offers_content').dispose();\n            \$\$('.new-offer-image').each(function(elm) {\n                var span = new Element('span', {'html': \$(elm).getNext().get('html')});\n                \$(elm).getNext().dispose();\n                \$(elm).grab(span, 'after');\n                \$(elm).dispose();\n            });\n            \n            var mt = \$\$('.b-user-menu-tasks-clause a');\n            if(mt)\n            {\n                mt.set('title','{$tip['tip']}');\n                var mt_cnt = mt.getElement('.b-user-menu-clause-quantity');    \n                if(mt_cnt){" . ($tip['count'] > 0 ? "mt_cnt.set('html',{$tip['count']})" : "mt_cnt.destroy();") . "}\n            }\n        ");
    }
    return $objResponse;
}
Пример #30
0
 /**
  * Переход проекта в другой возможный стастус
  * 
  * @param string $new_status
  * @return boolean
  */
 public function changeStatus($new_status)
 {
     $list = $this->is_emp ? $this->STATUS_EMP_LIST : $this->STATUS_FRL_LIST;
     $next = $this->STATUS_NEXT;
     //Существует ли новый статус
     if (!isset($list[$new_status])) {
         return FALSE;
     }
     $status = $list[$new_status];
     //Есть ли принадлежность для него?
     if (!isset($this->current_table[$status])) {
         return FALSE;
     }
     $prop = $this->current_table[$status][1];
     $current_status = @$this->{$prop}['status'];
     //Есть ли текущий статус и возможен ли переход в новый
     if (!isset($next[$current_status]) || !in_array($list[$new_status], $next[$current_status])) {
         return FALSE;
     }
     $data = array('status' => $status);
     $time = time();
     //Действия перед сменой статуса
     switch ($status) {
         case self::STATUS_DECLINE:
         case self::STATUS_CANCEL:
             //Нельзя отказаться если уже согласился
             if ($this->project['status'] == self::STATUS_ACCEPT) {
                 return FALSE;
             }
             //Убираем из исполнителей
             $obj_project = new projects();
             $err = $obj_project->ClearExecutor($this->project['id'], $this->project['user_id']);
             if (!empty($err)) {
                 return FALSE;
             }
             $obj_offer = new projects_offers();
             if ($this->project['kind'] == 9) {
                 //У персонального проекта переводим в отказ
                 if ($status == self::STATUS_CANCEL) {
                     $obj_offer->SetRefused($this->offer['id'], $this->project['id'], $this->project['exec_id']);
                 } else {
                     $this->db()->update(self::TABLE_OFFERS, array('status' => -1), 'id = ?i', $this->offer['id']);
                 }
             } else {
                 //Переводим в кандидаты
                 $obj_offer->SetSelected($this->offer['id'], $this->project['id'], $this->project['exec_id'], true);
             }
             $this->project['exec_id'] = NULL;
             //Если это персональный проект
             //то закрываем его после отказа
             if ($this->project['kind'] == 9) {
                 $this->project['close_date'] = date('Y-m-d H:i:s', $time);
                 $this->project['closed'] = TRUE;
                 $this->db()->update(self::TABLE_PROJECTS, array('close_date' => $this->project['close_date'], 'closed' => $this->project['closed']), 'id = ?i', $this->project['id']);
             }
             break;
         case self::STATUS_ACCEPT:
             $now = date("Y-m-d H:i:s");
             $this->db()->update(self::TABLE_OFFERS, array('status' => 0), 'id = ?i', $this->offer['id']);
             $this->db()->update(self::TABLE_PROJECTS, array('accept_date' => $now), 'id = ?i', $this->project['id']);
             $this->offer['status'] = 0;
             //@todo: как снять проект с публикации???
             //будем учитывать этатус = 0 в выборках
             break;
         case self::STATUS_EMPCLOSE:
         case self::STATUS_FRLCLOSE:
             $data['close_date'] = date('Y-m-d H:i:s', $time);
             $data['closed'] = TRUE;
             $this->project['close_date'] = $data['close_date'];
             $this->project['closed'] = $data['closed'];
             break;
     }
     $table = $this->current_table[$status][0];
     $id = @$this->{$prop}['id'];
     $is_ok = $this->db()->update($table, $data, 'id = ?i', $id);
     if ($is_ok) {
         $this->{$prop}['status'] = $status;
         //Высылаем уведомления о смене статуса
         $mes = new projects_smail();
         //Действия после успешной смены статуса
         switch ($status) {
             case self::STATUS_ACCEPT:
                 $mes->onStartWorking($this->project, $this->offer);
                 break;
             case self::STATUS_CANCEL:
                 $mes->onRefuseFrl($this->project, $this->offer);
                 break;
             case self::STATUS_DECLINE:
                 $mes->onRefuseEmp($this->project, $this->offer);
                 break;
             case self::STATUS_EMPCLOSE:
             case self::STATUS_FRLCLOSE:
                 //Нет смысла тут пытаться уведомлять не имея еще отзыва!
                 //$mes->onFinish($this->project, $this->is_emp);
                 break;
         }
     }
     return $is_ok;
 }