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; }
/** * 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'); }
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&projectID=%s" class="btn">%s</a></li>', $project['ID'], $project['projectName']); } $output .= '</ul>'; return $output; }
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>"; }
/** * 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'); }
/** * 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'); } }
/** * Изменение блокировки проекта. * * @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; }
$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), 'специализации', 'специализациям', 'специализациям'); ?> «<?php echo projects::getGroupLinks($project_specs); ?> » <?php } else { ?> Возможно вас заинтересуют другие проекты <?php } ?> </h3> <?php echo $prj_content; ?> <div class="b-pager"> <ul class="b-pager__list">
<?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>
/** * 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)); }
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();
$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());
<?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'); } });"); } }
} 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');
/** * Обрабатываем данные для ввывода информации по шагу */ 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"; } }
<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 }
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"); ?>
$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 {
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'], ' → ', ', ', '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>
$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();
<?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'] : 'заголовок отсутствует';
</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); ?>
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';
<?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) {
/** * формирует превью проекта на главной странице. */ 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("//", ' ', $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; }
</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']; ?>
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; }
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; }
/** * Переход проекта в другой возможный стастус * * @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; }