public function rssVacancy($period = false) { // получаем объект вакансий global $vacancy; // получаем массив селекта "Раздел" global $arrDataSections; global $arrDataProfessions; // получаем массив селекта "Регион" global $arrDataRegions; global $arrDataCitys; $strWhere = $period ? "act_datetime>=DATE_ADD(CURRENT_TIMESTAMP, INTERVAL -" . $period . " DAY)" : false; $link = chpu::createChpuUrl($this->_host . 'index.php?do=yvl'); $arrLimit = array('strLimit' => '0,' . $this->_limit, 'calcRows' => false); $arrVacancy = $vacancy->getActiveAnnounces($arrLimit, $strWhere); /* * *** Формируем XML-документ **** */ $currDT = terms::currentDateTime(); $data = '<?xml version="1.0" encoding="' . $this->_charset . '"?>' . "\n" . '<source creation-time="' . terms::currentDateTime() . ' ' . $this->_timeZone . '" host="' . $this->_host . '">' . "\n" . ' <vacancies>' . "\n"; $defCurrency = 'USD'; if (!empty($arrVacancy)) { foreach ($arrVacancy as $value) { $date = strtotime($value['act_datetime']) ? strtotime($value['act_datetime']) : time(); // проверяем, если компания агентство, значит берем название агентства // если не агентство, смотрим, если не путое назв. комп, берем его // инчае ФИО if ($value['user_type'] === 'agent') { $agent = 'true'; $name = $value['agent_name']; } else { $agent = 'false'; if (!empty($value['company_name'])) { $name = $value['company_name']; } else { $name = $value['contacts_fio']; } } if (isset($arrDataCitys[$value['id_city']])) { $location = $arrDataRegions[$value['id_region']]['name'] . ', ' . $arrDataCitys[$value['id_city']]['name']; } else { $location = $arrDataRegions[$value['id_region']]['name']; } // Проверяем зарплату. Проверяем только ЗП до // если пустое, значит оговаривается при собеседовании //$value['pay_from'] . $value['pay_post'] $salary = !empty($value['pay_post']) ? $value['pay_post'] : 'оговаривается при собеседовании'; $data .= ' <vacancy>' . "\n" . ' <url>' . chpu::createChpuUrl($this->_host . 'index.php?do=vacancy&action=view&id=' . $value['tId']) . '</url>' . "\n" . ' <creation-date>' . date('Y-m-d H:i:s', $date) . ' ' . $this->_timeZone . '</creation-date>' . "\n" . ' <salary>' . $salary . '</salary>' . "\n" . ' <currency>' . (!empty($value['currency']) ? $value['currency'] : $defCurrency) . '</currency>' . "\n" . ' <category>' . "\n" . ' <industry>' . $arrDataSections[$value['id_section']]['name'] . '</industry>' . "\n" . ' <specialization>' . $arrDataProfessions[$value['id_profession']]['name'] . '</specialization>' . "\n" . ' </category>' . "\n" . ' <job-name>' . $value['title'] . '</job-name>' . "\n" . ' <addresses>' . "\n" . ' <address>' . "\n" . ' <location>' . $location . '</location>' . "\n" . ' </address>' . "\n" . ' </addresses>' . "\n" . ' <company>' . "\n" . ' <name>' . $name . '</name>' . "\n" . ' <hr-agency>' . $agent . '</hr-agency>' . "\n" . ' </company>' . "\n" . ' </vacancy>' . "\n"; } } $data .= ' </vacancies>' . "\n" . '</source>'; return $data; }
} } else { $arrErrors[] = ERROR_EMPTY_FIELDS; } $smarty->assign('return_data', array('email' => $_POST['email'])); } elseif (isset($_GET['i']) && $_GET['i']) { if ($userData = $user->checkLinkToChangePassword()) { // генерируем новый пароль $password = strings::randomString(CONF_REGISTER_USER_PASSWORD); $mailer = new mailer(); // массив для замены в шаблоне $mailer->setAddReplace(array('%NEW_PASSWORD%' => $password)); if ($mailer->sendEmail(CONF_MAIL_ADMIN_EMAIL, false, false, $userData['email'], $userData['email'], CONF_SITE_NAME . MAIL_SUBJ_NEW_PASS, 'new.pass.txt')) { // если письмо успешно отправлено, обновляем пароль if ($user->updateUser(array('password' => md5($password)), "id IN (" . secure::escQuoteData($userData['id']) . ") AND password IN (" . secure::escQuoteData($userData['password']) . ")")) { messages::messageChangeSaved(MENU_NEW_PASS, MESSAGE_NEW_PASS_SUCCESS, chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?ut=' . $_SESSION['sd_user'][DB_PREFIX . 'conf']['user_type'] . '&do=authorize'), 10000); } else { $arrErrors[] = db::$message_error; } } else { $arrErrors[] = ERROR_SEND_EMAIL; } } else { messages::error404(); } } $smarty->assignByRef('errors', $arrErrors); } } else { messages::error404(); }
/** * public функция записывает данные объявления из БД в переменную переданную по ссылке * * @var reference - ссылка на переменную для записи данных объявления * * return bool */ public function setEditData(&$reference, $checkUserId = true) { $arrAnnData = $this->retAnnSubj(); if (!empty($checkUserId) && !empty($arrAnnData['id_user']) && !isset($_SESSION['sd_user']['job_conf']['id'])) { die('<script type="text/javascript">window.location="' . chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?do=authorize') . '";</script>'); } elseif (!empty($checkUserId) && !empty($arrAnnData['id_user']) && $_SESSION['sd_user']['job_conf']['id'] !== $arrAnnData['id_user']) { return false; } else { $reference['arrServiceFields'] = array_diff_key($arrAnnData, $this->arrBindFields, $this->arrNoBindFields); } $reference['arrBindFields'] = array_intersect_key($arrAnnData, $this->arrBindFields); $reference['arrNoBindFields'] = array_intersect_key($arrAnnData, $this->arrNoBindFields); return true; }
/** * Функция отправляет жалобу на комментарий * * @param array $arrComment - массив данных комментария * @param array $arrNews - массив данных новости * @param string $recipient - адрес получателя * * @return bool */ public function sendComplaintComment($arrComment, $arrNews, $recipient) { $mailer = new mailer(); // проверяем, кому уходит письмо if (CONF_MAIL_ADMIN_EMAIL == $recipient) { $newsLink = CONF_SCRIPT_URL . CONF_ADMIN_FILE . '?m=manager&s=news&do=filter&id=' . $arrNews['id'] . '&id_user=&author=&title=&sDate=&eDate=&records='; } else { $newsLink = chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?do=news&action=view&id=' . $arrNews['tId']); } // массив для замены в шаблоне $mailer->setAddReplace(array('%NEWS_TITLE%' => $arrNews['title'], '%NEWS_LINK%' => $newsLink, '%COMPLAINT_DATE%' => date(terms::dateFormatFromSmarty(CONF_DATE_FORMAT, CONF_TIME_FORMAT), strtotime(terms::currentDateTime())), '%COMMENT_DATE%' => date(terms::dateFormatFromSmarty(CONF_DATE_FORMAT, CONF_TIME_FORMAT), strtotime($arrComment['datetime'])), '%AUTHOR%' => $arrComment['name'], '%COMMENT_TEXT%' => CONF_MAIL_FORMAT_HTML ? nl2br($arrComment['text']) : $arrComment['text'])); // отправляем письмо администратору return $mailer->sendEmail(CONF_MAIL_ADMIN_EMAIL, CONF_SITE_NAME, false, $recipient, false, MAIL_SUBJ_NEWS_COMMENTS_COMPLAINT, 'news.comments.complaint.txt'); }
// получаем общее количество новостей $allRecords = $news->cntNews(); // формируем странциы $strPages = strings::generatePage($allRecords, $offset, CONF_NEWS_PERPAGE, $path); //передаем в шаблон строку сформированных страниц $smarty->assignByRef('string_page', $strPages); // массив всех новостей $smarty->assignByRef('news', $arrNews); // для блока боковой части $currMonth = terms::currentDateTime('n'); $smarty->assignByRef('currMonth', $currMonth); //$smarty->assignByRef('arrMonth', $arrAddDict['Month']['values']); } elseif (isset($_GET['month'])) { messages::error404(); } elseif (!empty($_GET['year']) && ($year = chpu::getId_out_tId($_GET['year'])) && 4 == strlen($year)) { $arrNamePage[] = array('name' => MENU_ACTION_ARCHIVED, 'link' => chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?do=news&action=archive')); $arrNamePage[] = array('name' => $year, 'link' => false); //смещение, всегда 0 (затем берется из $_GET) $offset = !empty($_GET['offset']) && validate::checkNaturalNumber($_GET['offset']) ? validate::checkNaturalNumber($_GET['offset']) : 0; //получаем массив, содержащий текущий обработанный URL $path = CONF_SCRIPT_URL . 'index.php?do=news&action=archive&year=' . $year . '&page=offset&'; $strWhere = "token IN ('archived') AND YEAR(`datetime`)=" . secure::escQuoteData($year); $arrOrderBy = array('datetime' => 'DESC'); $arrLimit = array('strLimit' => $offset . ',' . CONF_NEWS_PERPAGE, 'calcRows' => true); $arrNews = $news->getNewses($strWhere, $arrOrderBy, $arrLimit, false); // формируем страницы // получаем общее количество новостей $allRecords = $news->cntNews(); // формируем странциы $strPages = strings::generatePage($allRecords, $offset, CONF_NEWS_PERPAGE, $path); //передаем в шаблон строку сформированных страниц
/** * функция отсылает строку запроса к БД * получает и отправляет на обработку результат запроса * возвращает одну строку результата в виде массива данных * * @param (string) $strQuery - строка запроса к БД * * @return array массив данных */ static function dbSingleQuery($strQuery) { self::dbQuery($strQuery); $row = self::dbGetRow(); if (!empty(self::$tIdForce)) { if (defined('CONF_ENABLE_CHPU') && defined('CONF_ENABLE_TRANSLITERATION_CHPU') && CONF_ENABLE_CHPU && CONF_ENABLE_TRANSLITERATION_CHPU) { chpu::chpuTranslit($row); } elseif (!empty($row)) { $row['tId'] =& $row['id']; } // сбрасываем флаг свойства self::$tIdForce self::$tIdForce = false; } /** * Проверяем значение идентификатора записи tId (ЧПУ с транслитерацией) * Должно совпадать со значением хранимым в глобале $_GET['tId'] * Иначе в URL запрошен некорректный адрес страницы - выдаем страницу ошибки HTTP/1.0 404 Not Found */ if (!empty($_GET['tId']) && !empty($row['tId']) && $row['tId'] != $_GET['tId']) { messages::error404(); } return $row; }
$hand = new hand(); // ответ пользователю if (isset($_GET['result']) && !empty($_POST)) { } else { // проверяем наличие в сессии необходимых параметров и установлена ли цена в тарифной сетке для выбранной услуги if (isset($_SESSION['payment']) && isset($_SESSION['payment']['service']) && $payments->checkPriceInTariff($_SESSION['payment']['service'], $arrTariffs) && !empty($_SESSION['payment']['id'])) { // Сохраняем запрос оплаты if (isset($_POST['pay'])) { if (validate::postDataNotEmpty()) { // заполняем обязательные поля $hand->arrBindFields = array('order_id' => $_POST['order_id'], 'action' => $_SESSION['payment']['service'], 'user_id' => $_SESSION['sd_user']['data']['id'], 'record_id' => $_SESSION['payment']['id'], 'amount' => $_POST['amount'], 'currency' => HAND_CONF_CURRENCY, 'payment_type' => $_POST['payment']); // заполняем дополнительные поля $hand->additionalFields = array('description' => $payments->generatePaymentDescription($_SESSION['payment']['service']), 'payment_type_desc' => $handPaymentTypes[$_POST['payment']]); if (!$hand->recRecord()) { $arrErrors[] = ERROR_UNABLE_PERFORM_OPERATION; } else { unset($_SESSION['payment']); messages::messageChangeSaved(MESSAGE_PYMENT_SUCCESSFULLY_ADDED, false, chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?ut=' . $_SESSION['sd_user'][DB_PREFIX . 'conf']['user_type'] . '&do=user.data')); } } else { $arrErrors[] = HAND_ERROR_NOT_ALL_PAYMENT_DETAILS; } } $arrData = array('order_id' => time(), 'amount' => $arrTariffs[$_SESSION['payment']['service']], 'description' => $payments->generatePaymentDescription($_SESSION['payment']['service'])); $smarty->assignByRef('arrData', $arrData); $smarty->assignByRef('handPaymentTypes', $handPaymentTypes); $smarty->assign('include_template', SD_ROOT_DIR . 'core/mods/payments/hand/templates/hand.pay.form.tpl'); } else { $arrErrors[] = ERROR_PAY_SYSTEM_NOT_DEFINE_PRICE; } }
$new_password = md5($_POST['new_password']); if (md5($_POST['password']) !== $_SESSION['sd_user']['data']['password']) { $arrErrors[] = ERROR_PASSWORD; } if (strlen($_POST['new_password']) < CONF_REGISTER_USER_PASSWORD) { $arrErrors[] = ERROR_PASSWORD_SHORT; } if (md5($_POST['password']) === md5($_POST['new_password'])) { $arrErrors[] = ERROR_PASSWORD_NOT_NEW_PASSWORD; } if ($_POST['new_password'] !== $_POST['confirm_password']) { $arrErrors[] = ERROR_PASSWORD_NOT_CONFIRM_PASSWORD; } } else { $arrErrors[] = ERROR_EMPTY_FIELDS; } if (!$arrErrors) { $user->updateUser(array('password' => md5($_POST['new_password'])), "id IN (" . secure::escQuoteData($_SESSION['sd_user']['data']['id']) . ")"); // обновляем пароль в сессии tools::updateSessionData($_SESSION['sd_user']['data'], array('password' => md5($_POST['new_password']))); messages::messageChangeSaved(MESSAGE_PASSWORD_HAS_BEEEN_CHANGED, false, chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?ut=' . $_SESSION['sd_user'][DB_PREFIX . 'conf']['user_type'] . '&do=user.data')); } else { $smarty->assignByRef('errors', $arrErrors); } } } else { messages::error404(); } } else { messages::error404(); }
switch ($state) { case 'moderate': $user_type = 'employer' === $_SESSION['sd_user'][DB_PREFIX . 'conf']['user_type'] ? 'employer' : 'competitor'; // очищаем куки и сессию пользователя $user->clearUserSessionAndCookie(); messages::messageChangeSaved(MESSAGE_ACCOUNT_MODERATE, MESSAGE_ACCOUNT_MODERATE_TEXT, chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?ut=' . $user_type), 10000); break; case 'active': messages::messageChangeSaved(MESSAGE_REGISTER_SUCCESS, false, chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?ut=' . $_SESSION['sd_user'][DB_PREFIX . 'conf']['user_type'] . '&do=user.data')); break; case 'payment': $user_type = 'employer' === $_SESSION['sd_user'][DB_PREFIX . 'conf']['user_type'] ? 'employer' : 'competitor'; $_SESSION['payment'] = array('service' => 'register_' . strtolower($_POST['type']), 'id' => $_SESSION['sd_user']['data']['id'], 'user_type' => $_POST['type']); // очищаем куки и сессию пользователя $user->clearUserSessionAndCookie(); messages::messageChangeSaved(MESSAGE_REGISTER_SUCCESS_DO_PAYMENT, MESSAGE_REGISTER_SUCCESS_DO_PAYMENT_TEXT, chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?ut=' . $user_type . '&do=payments'), 10000); break; } } else { $arrErrors[] = ERROR_NOT_CHANGE_DATA; } } } else { $arrErrors[] = ERROR_EMPTY_FIELDS; $smarty->assign('return_data', array('type' => $_POST['type'], 'first_name' => $_POST['first_name'], 'last_name' => $_POST['last_name'], 'phone' => $_POST['phone'])); } } else { $arrErrors[] = ERROR_NOT_SELECT_GROUP; $smarty->assign('return_data', array('type' => '', 'first_name' => $_POST['first_name'], 'last_name' => $_POST['last_name'], 'phone' => $_POST['phone'])); } $smarty->assignByRef('errors', $arrErrors);
*/ $arrAction = array('news' => false, 'articles' => false, 'vacancy' => false, 'resume' => false); // определяем контент для отображения isset($_GET['action']) && isset($arrAction[$_GET['action']]) ? $arrAction[$_GET['action']] = true : null; /** * Показываем НОВОСТИ */ if ($arrAction['news']) { $rss = new rss(); header("Content-type: application/rss+xml"); echo $rss->rssNews(); exit; } elseif ($arrAction['articles']) { $rss = new rss(); header("Content-type: application/rss+xml"); if (isset($_GET['subaction']) && 'section' === $_GET['subaction'] && !empty($_GET['id']) && ($id = chpu::getId_out_tId($_GET['id']))) { echo $rss->rssArticles($id); } else { echo $rss->rssArticles(); } exit; } elseif ($arrAction['vacancy']) { // инициируем объект $rss = new rss(); header("Content-type: application/rss+xml"); if (isset($_GET['subaction']) && ('section' === $_GET['subaction'] || 'region' === $_GET['subaction']) && isset($_GET['id']) && (int) abs($_GET['id'])) { echo $rss->rssVacancy($_GET['subaction'], $_GET['id']); } else { echo $rss->rssVacancy(); } exit;
} elseif (isset($_POST['action'])) { // удаление if ('del' === $_POST['action'] && isset($_POST['subscr'])) { $strWhere = "id IN (" . implode(',', secure::escQuoteData(array_keys($_POST['subscr']))) . ")"; $subscription->delSubscriptions($strWhere); messages::messageChangeSaved(MESSAGE_CHANGE_SAVED, false, chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?ut=' . $_SESSION['sd_user'][DB_PREFIX . 'conf']['user_type'] . '&do=subscription')); } elseif ('pay' === $_POST['action'] && isset($_POST['subscr'])) { // проверяем, чтобы в масиве была только одна подписка и получаем ее if (count($_POST['subscr']) === 1 && ($ps = each($_POST['subscr']))) { $_SESSION['payment'] = array('service' => 'subscr_' . $ps['value'], 'id' => $ps['key']); die('<script type="text/javascript">window.location="' . chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?ut=' . $_SESSION['sd_user'][DB_PREFIX . 'conf']['user_type'] . '&do=payments') . '";</script>'); } else { messages::messageChangeSaved(MESSAGE_WARNING_PAYMENT_NO_MORE_THAN_ONE_RECORD, false, chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?ut=' . $_SESSION['sd_user'][DB_PREFIX . 'conf']['user_type'] . '&do=subscription'), 5000); } } messages::messageChangeSaved(MESSAGE_WARNING_NOT_SELECT_RECORDS, false, chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?ut=' . $_SESSION['sd_user'][DB_PREFIX . 'conf']['user_type'] . '&do=subscription')); } /** * ФОРМИРУЕМ СПИСКИ ПОДПИСОК */ // передаем массив активных подписок $arrSubscr = $subscription->getSubscriptions("id_user IN (" . secure::escQuoteData($_SESSION['sd_user']['data']['id']) . ") AND token IN ('active')", false, false, false) or $arrSubscr = array(); $statData['allSubscr'] = $subscription->cntSubscriptions(); $smarty->assignByRef('subscriptions', $arrSubscr); $smarty->assignByRef('allRecords', $statData['allSubscr']); // проверяем, включены ли платные подписки // и получаем массив подписок ожидающих оплаты $arrPaySubscr = $arrPayments['subscr_vacancy'] || $arrPayments['subscr_resume'] ? $subscription->getSubscriptions("id_user IN (" . secure::escQuoteData($_SESSION['sd_user']['data']['id']) . ") AND token IN ('payment')", false, false, false) : false; // передаем массив подписок ожидающих оплаты $smarty->assign('paySubscr', $arrPaySubscr); /* * * ПОЛУЧАЕМ СТАТИСТИЧЕСКИЕ ДАННЫЕ О ПОДПИСКАХ ** */
/** * protected функция производит запись данных в таблицу БД * * @param array $arrBindFields - массив полей обязательных для заполнения * @param array $arrNoBindFields - массив полей не обязательных для заполнения * @param string $typeAnnounce - тип объявления или false * * @return bool */ protected function recSubscr(&$arrBindFields, &$arrNoBindFields, $typeAnnounce) { // Для подписок добавляемых с объявлением if (!empty($typeAnnounce) && !empty($arrNoBindFields['id_announce']) && isset($GLOBALS[$typeAnnounce])) { $objCaller =& $GLOBALS[$typeAnnounce]; if (!($arrAnnounceData = $objCaller->retDataSubj())) { return false; } // заполняем период подписки из настройки панели администратора $arrBindFields['period'] = CONF_SUBSCRIPTIONS_ANNOUNCE_PERIOD; // запролняем сервисные поля $this->arrServiceFields = array_intersect_key($arrAnnounceData, $this->arrServiceFields); } else { // Проверяем тип подписки на платность // и количество бесплатных подписок пользователя if (!$this->arrPayments['subscr_' . $arrBindFields['type_subscription']] || $this->cntSubscriptions("id_announce IN ('0') AND id_user IN (" . secure::escQuoteData($_SESSION['sd_user']['data']['id']) . ") AND payment IN ('no') AND type_subscription IN (" . secure::escQuoteData($arrBindFields['type_subscription']) . ") AND token IN ('active')") < @constant('CONF_SUBSCRIPTIONS_FREE_' . strtoupper($arrBindFields['type_subscription']))) { // если доступны бесплатные подписки, формируем данные для добавления бесплатной подписки $this->arrServiceFields['token'] = 'active'; } else { // если бесплатные подписки уже не доступны, формируем платную подписку $this->arrServiceFields['token'] = 'payment'; $this->arrServiceFields['token_datetime'] = terms::calcDateTimeOfTerm(CONF_SUBSCRIPTIONS_PAYMENT_DELETE); $this->arrServiceFields['payment'] = 'yes'; } $this->arrServiceFields['date_lastsend'] = terms::currentDate(); } // записываем данные в таблицу $result = $this->setSubscrSubj($arrBindFields, $arrNoBindFields) && $this->addEntry() ? true : false; // если подписка не платная, возвращаем результат if ('payment' !== $this->arrServiceFields['token']) { return $result; } else { // иначе, формируем даные для оплаты и переадресовываем пользователя на страницу оплат // проверяем, есть ли у нас ID только что добавленной записи if (!($id = $this->getLine_id())) { // если нет, возвращаем false return false; } else { // иначе, формируем данные и переадресовываем пользователя на страницу оплат $_SESSION['payment'] = array('service' => 'subscr_' . strtolower($arrBindFields['type_subscription']), 'id' => $id); messages::messageChangeSaved(MESSAGE_SUBSCRIPTION_ADD_PAYMENT, MESSAGE_SUBSCRIPTION_ADD_PAYMENT_TEXT, chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?ut=' . $_SESSION['sd_user'][DB_PREFIX . 'conf']['user_type'] . '&do=payments'), 15000); } } }
/** * public функция записывает данные объявления из БД в переменную переданную по ссылке * * @var reference - ссылка на переменную для записи данных объявления * * return bool */ public function setEditData(&$reference, $checkUserId = true) { $arrAnnData = $this->retAnnSubj(); if (!empty($checkUserId)) { if (!empty($arrAnnData['id_user']) && empty($_SESSION['sd_user']['job_conf']['id'])) { die('<script type="text/javascript">window.location="' . chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?do=authorize') . '";</script>'); } if (!empty($arrAnnData['id_user']) && $_SESSION['sd_user']['job_conf']['id'] != $arrAnnData['id_user']) { return false; } if (!empty($arrAnnData['image'])) { foreach (explode(',', $arrAnnData['image']) as $image) { @copy('uploads/images/photos/' . $image, 'uploads/temporary/' . $image); } } } else { $reference['arrServiceFields'] = array_diff_key($arrAnnData, $this->arrBindFields, $this->arrNoBindFields); } $reference['arrBindFields'] = array_intersect_key($arrAnnData, $this->arrBindFields); $reference['arrNoBindFields'] = array_intersect_key($arrAnnData, $this->arrNoBindFields); if (is_array($this->arrFieldsXmlData) && !empty($this->arrFieldsXmlData)) { foreach ($this->arrFieldsXmlData as $nameField => &$contentField) { if (!empty($arrAnnData[$nameField])) { foreach ($arrAnnData[$nameField] as $key => &$valFields) { $reference['arrFieldsXmlData'][$nameField][$key]['arrBindFields'] = isset($contentField[1]['arrBindFields']) ? array_intersect_key($valFields, $contentField[1]['arrBindFields']) : false; $reference['arrFieldsXmlData'][$nameField][$key]['arrNoBindFields'] = isset($contentField[1]['arrNoBindFields']) ? array_intersect_key($valFields, $contentField[1]['arrNoBindFields']) : false; } } else { $reference['arrFieldsXmlData'][$nameField] = false; } } } return true; }
/** * private функция рассылки почтовых сообщений * * @param string $typeAnnounce - тип объявления (должно соответствовать имени таблицы БД) * @param array $arrAnnounceData - массив данных объявления * @param bool $screenMessageOn [default = true] - завершение работы скрипта, выводом информационного сообщения * * @return bool */ private function sendEmails(&$typeAnnounce, &$arrAnnounceData, $screenMessageOn = true) { if (isset($_SESSION['referer'])) { unset($_SESSION['referer']); } $user_type = !empty($_SESSION['sd_user'][DB_PREFIX . 'conf']['user_type']) ? 'ut=' . $_SESSION['sd_user'][DB_PREFIX . 'conf']['user_type'] . '&' : ''; switch ($arrAnnounceData['token']) { case 'new': /** * отправляем письмо пользователю */ $mailer = new mailer(); // дата удаления неактивированного объявления $deldate = date(terms::dateFormatFromSmarty(CONF_DATE_FORMAT, CONF_TIME_FORMAT), strtotime(terms::calcDateTimeOfTerm(constant('CONF_' . strtoupper($typeAnnounce) . '_ACTIVATE_THERM')))); $mailer->setAddReplace(array('%ANNOUNCE_TYPE%' => constant('MAIL_ANNOUNCE_TYPE_' . strtoupper($typeAnnounce)), '%ANNOUNCE_TITLE%' => $arrAnnounceData['title'], '%CODE%' => $arrAnnounceData['unikey'], '%DELDATE%' => $deldate, '%ACTIVATE_PAGE%' => CONF_SCRIPT_URL . 'index.php?' . $user_type . 'do=' . $typeAnnounce . '&action=activate', '%ACTIVATE_LINK%' => CONF_SCRIPT_URL . 'index.php?' . $user_type . 'do=' . $typeAnnounce . '&action=activate&code=' . $arrAnnounceData['unikey'])); $result = $mailer->sendEmail(CONF_MAIL_ADMIN_EMAIL, CONF_SITE_NAME, false, $arrAnnounceData['email'], $arrAnnounceData['email'], MAIL_SUBJ_ACTIVATE_ANNOUNCE . constant('MAIL_ANNOUNCE_TYPE_' . strtoupper($typeAnnounce)) . ' - ' . $arrAnnounceData['title'], 'announce.user.activate.txt'); unset($mailer); // уничтожаем объект if (!$result && !empty($screenMessageOn)) { messages::printDie(ERROR_SEND_EMAIL); } elseif (!empty($screenMessageOn)) { messages::messageChangeSaved(ANNOUNCE_ADD_ACTIVATE_TITLE, ANNOUNCE_ADD_ACTIVATE_MESSAGE, CONF_SCRIPT_URL . 'index.php?ut=' . $_SESSION['sd_user'][DB_PREFIX . 'conf']['user_type'] . '&do=' . $typeAnnounce . '&action=activate', 5000); } else { return $result; } case 'moderate': // массив для замены в шаблоне $arrAddReplace = array('%ANNOUNCE_TYPE%' => constant('MAIL_ANNOUNCE_TYPE_' . strtoupper($typeAnnounce)), '%ANNOUNCE_TITLE%' => $arrAnnounceData['title']); /** * отправляем письмо администратору */ $mailer = new mailer(); // передаем массив для замены в шаблоне $mailer->setAddReplace($arrAddReplace + array('%ADMIN_PANEL_LINK%' => CONF_SCRIPT_URL . CONF_ADMIN_FILE . '?m=announces&s=' . $typeAnnounce . 's&action=moderate')); $mailer->sendEmail(CONF_MAIL_ADMIN_EMAIL, CONF_SITE_NAME, false, CONF_MAIL_ADMIN_EMAIL, false, MAIL_SUBJ_NEW_ANNOUNCE . $arrAnnounceData['title'], empty($arrAnnounceData['comments']) ? 'adm.moderate.announce.txt' : 'adm.edited.announce.txt'); unset($mailer); // уничтожаем объект /** * отправляем письмо пользователю */ $mailer = new mailer(); // передаем массив для замены в шаблоне $mailer->setAddReplace($arrAddReplace); $result = $mailer->sendEmail(CONF_MAIL_ADMIN_EMAIL, CONF_SITE_NAME, false, $arrAnnounceData['email'], $arrAnnounceData['email'], MAIL_SUBJ_MODERATE_ANNOUNCE . constant('MAIL_ANNOUNCE_TYPE_' . strtoupper($typeAnnounce)) . ' - ' . $arrAnnounceData['title'], 'announce.user.moderate.txt'); unset($mailer); // уничтожаем объект if (!$result && !empty($screenMessageOn)) { messages::printDie(ERROR_SEND_EMAIL); } elseif (!empty($screenMessageOn)) { $link = !empty($arrAnnounceData['id_user']) ? CONF_SCRIPT_URL . 'index.php?ut=' . $_SESSION['sd_user'][DB_PREFIX . 'conf']['user_type'] . '&do=user.announces&action=' . $typeAnnounce . '&token=' . $arrAnnounceData['token'] : CONF_SCRIPT_URL . 'index.php?ut=' . $_SESSION['sd_user'][DB_PREFIX . 'conf']['user_type']; messages::messageChangeSaved(ANNOUNCE_ADD_MODERATION_TITLE, ANNOUNCE_ADD_MODERATION_MESSAGE, chpu::createChpuUrl($link), 5000); } else { return $result; } case 'correction': /** * отправляем письмо пользователю */ $mailer = new mailer(); // дата удаления не исправленного объявления $deldate = date(terms::dateFormatFromSmarty(CONF_DATE_FORMAT, CONF_TIME_FORMAT), strtotime(terms::calcDateTimeOfTerm(constant('CONF_' . strtoupper($typeAnnounce) . '_CORRECTION_THERM')))); $mailer->setAddReplace(array('%ANNOUNCE_TYPE%' => constant('MAIL_ANNOUNCE_TYPE_' . strtoupper($typeAnnounce)), '%ANNOUNCE_TITLE%' => $arrAnnounceData['title'], '%DELDATE%' => $deldate, '%USER_PANEL_LINK%' => chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?do=user.announces&action=' . $typeAnnounce . '&token=' . $arrAnnounceData['token']), '%COMMENTS%' => CONF_MAIL_FORMAT_HTML ? nl2br($arrAnnounceData['comments']) : $arrAnnounceData['comments'])); $result = $mailer->sendEmail(CONF_MAIL_ADMIN_EMAIL, CONF_SITE_NAME, false, $arrAnnounceData['email'], $arrAnnounceData['email'], MAIL_SUBJ_NEW_ANNOUNCE_CORRECTION . constant('MAIL_ANNOUNCE_TYPE_' . strtoupper($typeAnnounce)) . ' - ' . $arrAnnounceData['title'], 'announce.user.correction.txt'); unset($mailer); // уничтожаем объект if (!$result && !empty($screenMessageOn)) { messages::printDie(ERROR_SEND_EMAIL); } else { return $result; } case 'payment': /** * отправляем письмо пользователю */ $mailer = new mailer(); // дата удаления неоплаченого объявления $deldate = date(terms::dateFormatFromSmarty(CONF_DATE_FORMAT, CONF_TIME_FORMAT), strtotime(terms::calcDateTimeOfTerm(constant('CONF_' . strtoupper($typeAnnounce) . '_PAYMENT_THERM')))); $mailer->setAddReplace(array('%ANNOUNCE_TYPE%' => constant('MAIL_ANNOUNCE_TYPE_' . strtoupper($typeAnnounce)), '%ANNOUNCE_TITLE%' => $arrAnnounceData['title'], '%CODE%' => $arrAnnounceData['unikey'], '%DELDATE%' => $deldate, '%PAYMENT_LINK%' => CONF_SCRIPT_URL . 'index.php?' . $user_type . 'do=' . $typeAnnounce . '&action=payment&id=' . $arrAnnounceData['id'])); $result = $mailer->sendEmail(CONF_MAIL_ADMIN_EMAIL, CONF_SITE_NAME, false, $arrAnnounceData['email'], $arrAnnounceData['email'], MAIL_SUBJ_NEW_ANNOUNCE_PAYMENT . constant('MAIL_ANNOUNCE_TYPE_' . strtoupper($typeAnnounce)) . ' - ' . $arrAnnounceData['title'], 'announce.user.payment.txt'); unset($mailer); // уничтожаем объект if (!$result && !empty($screenMessageOn)) { messages::printDie(ERROR_SEND_EMAIL); } elseif (!empty($screenMessageOn)) { $_SESSION['payment'] = array('service' => 'add_' . $typeAnnounce, 'announce_type' => $typeAnnounce, 'id' => $arrAnnounceData['id'], 'tId' => $arrAnnounceData['tId'], 'announce_title' => $arrAnnounceData['title']); messages::messageChangeSaved(ANNOUNCE_ADD_PAYMENT_TITLE, ANNOUNCE_ADD_PAYMENT_MESSAGE, chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?ut=' . $_SESSION['sd_user'][DB_PREFIX . 'conf']['user_type'] . '&do=payments'), 5000); } else { return $result; } case 'active': // транслитерация ЧПУ chpu::chpuTranslit($arrAnnounceData); if (CONF_ANNOUNCE_ADD_SUCCESS_ADMIN_INFORM) { $mailer = new mailer(); // массив для замены в шаблоне $mailer->setAddReplace(array('%ANNOUNCE_TYPE%' => constant('MAIL_ANNOUNCE_TYPE_' . strtoupper($typeAnnounce)), '%ANNOUNCE_TITLE%' => $arrAnnounceData['title'], '%ANNOUNCE_LINK%' => chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?do=' . $typeAnnounce . '&action=view&id=' . $arrAnnounceData['tId']), '%ADMIN_PANEL_LINK%' => CONF_SCRIPT_URL . CONF_ADMIN_FILE . '?m=announces&s=' . $typeAnnounce . 's')); // отправляем письмо администратору $mailer->sendEmail(CONF_MAIL_ADMIN_EMAIL, CONF_SITE_NAME, false, CONF_MAIL_ADMIN_EMAIL, false, MAIL_SUBJ_NEW_ANNOUNCE . constant('MAIL_ANNOUNCE_TYPE_' . strtoupper($typeAnnounce)) . ' - ' . $arrAnnounceData['title'], 'adm.add.announce.txt'); unset($mailer); // уничтожаем объект } if (CONF_ANNOUNCE_ADD_SUCCESS_USER_INFORM) { $mailer = new mailer(); $mailer->setAddReplace(array('%ANNOUNCE_TYPE%' => constant('MAIL_ANNOUNCE_TYPE_' . strtoupper($typeAnnounce)), '%ANNOUNCE_TITLE%' => $arrAnnounceData['title'], '%ANNOUNCE_LINK%' => chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?do=' . $typeAnnounce . '&action=view&id=' . $arrAnnounceData['tId']), '%USER_PANEL_LINK%' => chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?do=user.announces&action=' . $typeAnnounce . '&token=' . $arrAnnounceData['token']))); // отправляем письмо пользователю $result = $mailer->sendEmail(CONF_MAIL_ADMIN_EMAIL, CONF_SITE_NAME, false, $arrAnnounceData['email'], $arrAnnounceData['email'], MAIL_SUBJ_NEW_ANNOUNCE . constant('MAIL_ANNOUNCE_TYPE_' . strtoupper($typeAnnounce)) . ' - ' . $arrAnnounceData['title'], 'announce.user.added.txt'); unset($mailer); // уничтожаем объект if (!$result && !empty($screenMessageOn)) { messages::printDie(ERROR_SEND_EMAIL); } } if (!empty($screenMessageOn)) { messages::messageChangeSaved(ANNOUNCE_ADD_SUCCESS_TITLE, ANNOUNCE_ADD_SUCCESS_MESSAGE, chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?ut=' . $_SESSION['sd_user'][DB_PREFIX . 'conf']['user_type'] . '&do=' . $typeAnnounce . '&action=view&id=' . $arrAnnounceData['tId']), 5000); } else { return true; } case 'deleted': case 'archived': /** * отправляем письмо пользователю */ $mailer = new mailer(); $mailer->setAddReplace(array('%ANNOUNCE_TYPE%' => constant('MAIL_ANNOUNCE_TYPE_' . strtoupper($typeAnnounce)), '%ANNOUNCE_TITLE%' => $arrAnnounceData['title'], '%COMMENTS%' => $arrAnnounceData['comments'])); $result = $mailer->sendEmail(CONF_MAIL_ADMIN_EMAIL, CONF_SITE_NAME, false, $arrAnnounceData['email'], $arrAnnounceData['email'], MAIL_SUBJ_NEW_ANNOUNCE_DELETED . constant('MAIL_ANNOUNCE_TYPE_' . strtoupper($typeAnnounce)) . ' - ' . $arrAnnounceData['title'], 'announce.user.deleted.txt'); unset($mailer); // уничтожаем объект if (!$result && !empty($screenMessageOn)) { messages::printDie(ERROR_SEND_EMAIL); } else { return $result; } case 'vip': case 'hot': /** * отправляем письмо пользователю */ $mailer = new mailer(); $mailer->setAddReplace(array('%ANNOUNCE_TYPE%' => constant('MAIL_ANNOUNCE_TYPE_' . strtoupper($typeAnnounce)), '%ANNOUNCE_TITLE%' => $arrAnnounceData['title'], '%STATUS%' => strtoupper($arrAnnounceData['token']))); $result = $mailer->sendEmail(CONF_MAIL_ADMIN_EMAIL, CONF_SITE_NAME, false, $arrAnnounceData['email'], $arrAnnounceData['email'], MAIL_SUBJ_NEW_ANNOUNCE_DELETED . constant('MAIL_ANNOUNCE_TYPE_' . strtoupper($typeAnnounce)) . ' - ' . $arrAnnounceData['title'], 'announce.user.' . $arrAnnounceData['token'] . '.reset.txt'); unset($mailer); // уничтожаем объект if (!$result && !empty($screenMessageOn)) { messages::printDie(ERROR_SEND_EMAIL); } else { return $result; } default: return false; } }
*/ $arrActions = array('detail' => false); // определяем шаблон для отображения isset($_GET['action']) && isset($arrActions[$_GET['action']]) ? $arrActions[$_GET['action']] = true : null; if ($arrActions['detail']) { $arrFields = array(array('users', 'first_name'), array('users', 'last_name'), array('users', 'middle_name'), array('users', 'phone'), array('conf_users', 'addition_phone_1'), array('conf_users', 'addition_phone_2'), array('conf_users', 'company_name'), array('conf_users', 'company_city'), array('conf_users', 'company_url'), array('conf_users', 'company_description'), array('conf_users', 'logo'), array('conf_users', 'hide_additional_company_data')); // если передан id компании if (isset($_GET['id']) && !empty($_GET['id'])) { if ($uData = $user->getCombinedUserData($_GET['id'], $arrFields)) { $smarty->assignByRef('uData', $uData); // инициируем "Наименование страницы" отображаемое в заголовке формы $arrNamePage = array(array('name' => MENU_COMPANIES, 'link' => chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?ut=' . $_SESSION['sd_user'][DB_PREFIX . 'conf']['user_type'] . '&do=companies')), array('name' => $uData['company_name'], 'link' => false)); $strWhere = "id_user IN (" . secure::escQuoteData($_GET['id']) . ") AND token IN ('active')"; $arrOrderBy = array('act_datetime' => 'DESC'); $smarty->assign('vacancys', $vacancy->getAnnounces($strWhere, false, $arrOrderBy)); $smarty->assign('link', chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?ut=' . $_SESSION['sd_user'][DB_PREFIX . 'conf']['user_type'] . '&do=vacancy&action=view&id=')); } else { //$arrErrors[] = ERROR_SELECTED_COMPANY; messages::error404(); } } } else { // Формируем TITLE страницы $arrTitle = array(); $seo = seo::getTitle('companies', $currLang); $arrTitle[] = array('name' => !empty($seo) ? $seo : MENU_COMPANIES); // СЕО данные $smarty->assign('meta_keywords', seo::getKeywords('companies', $currLang)); $smarty->assign('meta_description', seo::getDescription('companies', $currLang)); //смещение, всегда 0 (затем берется из $_GET) $offset = !empty($_GET['offset']) && is_numeric($_GET['offset']) && $_GET['offset'] > 0 ? $_GET['offset'] : 0;
/** * private функция формирует RSS для резюме * * @param (string) $type - тип, может быть section или region (по умолчанию false) * @param (int) $id - id раздела или региона, резюме которого необходимо показать (по умолчанию false) * * @return string */ protected function rssResume($type = false, $id = false) { // получаем объект резюме global $resume; // получаем массив селекта "Раздел" global $arrDataSections; // получаем массив селекта "Регион" global $arrDataRegions; // формируем данные шапки $this->title[] = array('name' => MENU_RESUMES); $this->link = chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?do=rss&action=resume'); $this->description = MENU_RESUMES; // проверяем просмотр по разделу if ($type && $id) { $strWhere = "id_" . $type . " IN (" . secure::escQuoteData($id) . ")"; $arrType = $type === 'section' ? $arrType =& $arrDataSections : ($arrType =& $arrDataRegions); // Дописываем данные по разделу в шапку $this->title[] = array('name' => $arrType[$id]['name']); $this->description .= ' - ' . $arrType[$id]['name']; } else { $strWhere = false; } /***** Формируем XML-документ *****/ $data = '<?xml version="1.0" encoding="' . CONF_DEFAULT_CHARSET . '" ?> <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"> <channel> <atom:link href="' . $this->link . '" rel="self" type="application/rss+xml" /> <title>' . strings::formTitle($this->title) . '</title> <link>' . $this->link . '</link> <description>' . $this->description . '</description> <language>ru</language> <pubDate>' . $this->pubDate . '</pubDate> <image> <url>' . $this->siteLogo . '</url> <title>' . strings::formTitle($this->title) . '</title> <link>' . $this->link . '</link> </image>'; // если есть активные объявления if ($arrResume = $resume->getActiveAnnounces(array('strLimit' => '0,' . CONF_RSS_RESUME_COUNT, 'calcRows' => false), $strWhere)) { foreach ($arrResume as $value) { $LFName = $value['visibility'] !== 'membershc' && $value['visibility'] !== 'visiblehc' ? ANNOUNCE_CONTACTS_LASTNAME . ' ' . ANNOUNCE_CONTACTS_FIRSTNAME . ': ' . $value['last_name'] . ' ' . $value['first_name'] . '<br>' : ''; $data .= '<item> <title>' . $value['title'] . ' - ' . $value['pay_from'] . ' ' . $value['currency'] . ' (' . $arrDataRegions[$value['id_region']]['name'] . ')</title> <link>' . chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?do=resume&action=view&id=' . $value['tId']) . '</link> <pubDate>' . terms::RFCDate($value['act_datetime']) . '</pubDate> <guid>' . chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?do=resume&action=view&id=' . $value['tId']) . '</guid> <category domain="' . chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?do=resume&action=section&id=' . $arrDataSections[$value['id_section']]['tId']) . '">' . $arrDataSections[$value['id_section']]['name'] . '</category> <category domain="' . chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?do=resume&action=region&id=' . $arrDataRegions[$value['id_region']]['tId']) . '">' . $arrDataRegions[$value['id_region']]['name'] . '</category> <description><![CDATA[' . '<b>' . $arrDataSections[$value['id_section']]['name'] . '</b><br><br>' . $LFName . ANNOUNCE_AGE . ': ' . $value['age'] . '<br>' . ANNOUNCE_SELECT_EXPIREWORK . ': ' . $value['expire_work'] . '<br>' . ANNOUNCE_SELECT_EDUCATION . ': ' . $value['education'] . ']]></description> </item>'; } } $data .= '</channel> </rss>'; return $data; }
$smarty->assign('user_type', $_SESSION['sd_user'][DB_PREFIX . 'conf']['user_type']); // передаем в Smarty права пользователя $smarty->assign('codex', $_SESSION['sd_' . DB_PREFIX . 'codex']); // значения, возвращаемые в форму } } else { // если пользователь не вошел, проверяем его Кукисы и очищаем их, либо делаем автоматический вход if (!isset($_SESSION['sd_user']) && isset($_COOKIE['remid']) && $_COOKIE['remid'] && isset($_COOKIE['remh']) && $_COOKIE['remh']) { // проверяем, есть ли в кукисах наши параметры $arrData = $user->getUser("id IN (" . secure::escQuoteData((int) $_COOKIE['remid']) . ")"); // если пользователь с таким id найден, сверяем хеш if (!empty($arrData)) { // выполняем вход if ($_COOKIE['remh'] === $user->cookieUserHash($arrData)) { $user->authorizeUser($arrData['email'], $arrData['password'], false, true); die('<script type="text/javascript">window.location="' . chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?ut=' . $_SESSION['sd_user'][DB_PREFIX . 'conf']['user_type']) . '";</script>'); } else { cookies::deleteAccessCookie(); } } else { cookies::deleteAccessCookie(); } } else { cookies::deleteAccessCookie(); } if (!isset($_SESSION['sd_' . DB_PREFIX . 'codex'])) { // записываем в сессию права пользователя $_SESSION['sd_' . DB_PREFIX . 'codex'] = $group->setUserRights('guest', 'guest'); } // определяем тип пользователя, по умолчанию $_SESSION['sd_user'][DB_PREFIX . 'conf']['user_type'] = !isset($_GET['ut']) ? 'competitor' : ('competitor' !== $_GET['ut'] && 'employer' !== $_GET['ut'] ? 'competitor' : $_GET['ut']);
/** * функция выводит страницы [предыдущая] 1 2 3 4 … [следующая] * * @param (int) $a - количество элементов в массиве * @param (int) $offset - смещение в массиве([$offset ... $offset+$q]) * @param (int) $q - количество элементов на странице * @param (string) $path - текущая ссылка ("index.php?do=news&") * @param (bool) $noCHPU - параметр, указывающий что не нужно приводить сслыки к ЧПУ (по умолчанию FALSE). Параметр был введен для метода strings::generatePage - т.к. он используется и в админке и в польз. части, а в админке ЧПУ не нужно никогда. Параметр можно использовать и в др. необходимых местах. * * @return (string) $out */ static function generatePage($a, $offset, $q, $path, $noCHPU = false) { $out = '<span style="block_pages">'; if ($a > $q) { $offset % $q ? $offset = $q : null; /***** Левая часть строки *****/ // [prev] if ($offset > 0) { $out .= '<a href="' . chpu::createChpuUrl($path . 'offset=' . ($offset - $q), $noCHPU) . '" class="pages" rel="nofollow">< </a> '; } else { $out .= ''; } // digital links $k = $offset / $q; // не более 3 страниц слева $min = $k - 3; if ($min < 0) { $min = 0; } else { if ($min >= 1) { $out .= '<a href="' . chpu::createChpuUrl($path . 'offset=0', $noCHPU) . '" class="pages" rel="nofollow">1</a> '; $min != 1 ? $out .= '... ' : null; } } for ($i = $min; $i < $k; $i++) { $m = $i * $q + $q; $m > $a ? $m = $a : null; $out .= '<a href="' . chpu::createChpuUrl($path . 'offset=' . $i * $q, $noCHPU) . '" class="pages" rel="nofollow">' . ($i + 1) . '</a> '; } /*****************************************/ /***** Текущая страница (центр строки) *****/ if (strcmp($offset, 'show_all')) { $min = $offset + $q; $min > $a ? $min = $a : null; $out .= '<span class="curr_page">' . ($k + 1) . '</span> '; } else { $min = $q; $min > $a ? $min = $a : null; $out .= '<a href="' . chpu::createChpuUrl($path . 'offset=0', $noCHPU) . '" class="pages" rel="nofollow">1</a> '; } /*****************************************/ /***** Правая часть строки *****/ // не более 3 страниц справа $min = $k + 4; $min > $a / $q ? $min = $a / $q : null; for ($i = $k + 1; $i < $min; $i++) { $m = $i * $q + $q; $m > $a ? $m = $a : null; $out .= '<a href="' . chpu::createChpuUrl($path . 'offset=' . $i * $q, $noCHPU) . '" class="pages" rel="nofollow">' . ($i + 1) . '</a> '; } if ($min * $q < $a) { $min * $q < $a - $q ? $out .= '... ' : null; $pg_offset = !($a % $q) ? $a - $q : $a - $a % $q; $out .= '<a href="' . chpu::createChpuUrl($path . 'offset=' . $pg_offset, $noCHPU) . '" class="pages" rel="nofollow">' . ceil($a / $q) . '</a> '; } /*****************************************/ //[next] if (strcmp($offset, 'show_all')) { if ($offset < $a - $q) { $out .= '<a href="' . chpu::createChpuUrl($path . 'offset=' . ($offset + $q), $noCHPU) . '" class="pages" rel="nofollow"> ></a> '; } else { $out .= ''; } } //[show all] /* if ($all) { if (strcmp($offset, 'show_all')) { $out .= ' | <a href="' . chpu::createChpuUrl($path . 'offset=show_all', $noCHPU) . '" class="pages" rel="nofollow">все</a>'; } else { $out .= ' | <B>все</B>'; } } */ } else { return ' '; } return $out . '</span>'; }
if ($arrCompanies = $user->getCombinedUsersData($arrFields, $strWhere, false, false)) { foreach ($arrCompanies as $value) { $xml .= '<url><loc>' . chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?do=companies&action=detail&id=' . $value['tId']) . '</loc><priority>0.5</priority><changefreq>daily</changefreq></url>' . "\n"; } } // Работаем со списком вакансий $xml .= '<url><loc>' . chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?ut=competitor&do=vacancy') . '</loc><priority>1.0</priority><changefreq>hourly</changefreq></url>' . "\n"; // Работаем с вакансиями по городам foreach ($arrDataRegions as $value) { $xml .= '<url><loc>' . chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?ut=competitor&do=vacancy&action=regions&id=' . $value['tId']) . '</loc><priority>1.0</priority><changefreq>hourly</changefreq></url>' . "\n"; } // Работаем с вакансиями по разделам foreach ($arrDataSections as $value) { $xml .= '<url><loc>' . chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?ut=competitor&do=vacancy&action=sections&id=' . $value['tId']) . '</loc><priority>1.0</priority><changefreq>hourly</changefreq></url>' . "\n"; } // Работаем со списком резюме $xml .= '<url><loc>' . chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?ut=employer&do=resume') . '</loc><priority>1.0</priority><changefreq>hourly</changefreq></url>' . "\n"; // Работаем с резюме по городам foreach ($arrDataRegions as $value) { $xml .= '<url><loc>' . chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?ut=employer&do=resume&action=regions&id=' . $value['tId']) . '</loc><priority>1.0</priority><changefreq>hourly</changefreq></url>' . "\n"; } // Работаем с резюме по разделам foreach ($arrDataSections as $value) { $xml .= '<url><loc>' . chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?ut=employer&do=resume&action=sections&id=' . $value['tId']) . '</loc><priority>1.0</priority><changefreq>hourly</changefreq></url>' . "\n"; } $xml .= '</urlset>'; die($xml); } else { } $smarty->assignByRef('errors', $arrErrors); $smarty->assignByRef('arrActions', $arrActions);
/** * @package * @todo */ !defined('SDG') ? die('Triple protection!') : null; /** * иницализация массива подключаемых шаблонов: по умолчанию все значения - false * для подключения шаблона, необходимо установить значение - true * шаблоны подключаются в порядке установленном в файле головного шаблона */ $arrAction = array('view' => false); /** * Подключаем выбранный мод */ if (!empty($_GET['mod'])) { $arrNamePage = array(array('name' => MENU_PAYMENTS, 'link' => chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?ut=' . $_SESSION['sd_user'][DB_PREFIX . 'conf']['user_type'] . '&do=payments')), array('name' => strtoupper($_GET['mod']), 'link' => false)); // проверяем: существует ли выбранный мод (и включен ли он) и наличие обязательных файлов мода // а также, для модов требующих авторизацию пользователя, авторизирован ли пользователь if (!$payments->issetMod("id IN (" . secure::escQuoteData($_GET['mod']) . ") AND token IN ('active')") || !$payments->checkBindFiles($_GET['mod']) || $_GET['mod'] == 'hand' && !$user->getAuthorized()) { $arrErrors[] = ERROR_PAY_SYSTEM_NOT_EXISTS; } else { // если проверка прошла, подключаем тарифную сетку мода include_once 'core/mods/payments/' . $_GET['mod'] . '/conf/' . $_GET['mod'] . '.tariffs.php'; include_once 'core/mods/payments/' . $_GET['mod'] . '/conf/' . $_GET['mod'] . '.conf.php'; include_once 'core/mods/payments/' . $_GET['mod'] . '/lang/' . (!empty($_COOKIE['currLang']) ? $_COOKIE['currLang'] : CONF_LANGUAGE) . '/' . $_GET['mod'] . '.lang.php'; include_once 'core/mods/payments/' . $_GET['mod'] . '/lang/' . (!empty($_COOKIE['currLang']) ? $_COOKIE['currLang'] : CONF_LANGUAGE) . '/lang._custom.php'; include_once 'core/mods/payments/' . $_GET['mod'] . '/classes/' . $_GET['mod'] . '.class.php'; include_once 'core/mods/payments/' . $_GET['mod'] . '/index.php'; } } else { !($modsList = $payments->getActiveMods()) ? $arrErrors[] = ERROR_NOT_PAY_SYSTEM : null;
//передаем в шаблон строку сформированных страниц $smarty->assignByRef('strPages', $strPages); // СЕО данные $smarty->assign('meta_keywords', MENU_ARTICLES . ', ' . $section['name']); $smarty->assign('meta_description', MENU_ARTICLES . ' - ' . $section['name']); $arrAction['section'] = true; } else { messages::error404(); } } elseif ('view' === $_GET['action'] && !empty($_GET['id']) && validate::checkNaturalNumber($_GET['id'])) { if ($article = $articles->getPublishedArticle("id IN (" . secure::escQuoteData($_GET['id']) . ")")) { if (!empty($sections['full'][$article['id_section']])) { $smarty->assignByRef('article', $article); //var_dump ($section = $artsections -> getSectionById($article['id_section'])); $section = $sections['full'][$article['id_section']]; $arrNamePage = array(array('name' => MENU_ARTICLES, 'link' => chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?ut=' . $_SESSION['sd_user'][DB_PREFIX . 'conf']['user_type'] . '&do=articles')), array('name' => $section['name'], 'link' => chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?ut=' . $_SESSION['sd_user'][DB_PREFIX . 'conf']['user_type'] . '&do=articles&action=section&id=' . $section['tId'])), array('name' => $article['title'], 'link' => false)); // Формируем TITLE страницы $arrTitle = array(); CONF_ARTICLES_TITLE_SECTION_SITE ? $arrTitle[] = array('name' => MENU_ARTICLES) : null; CONF_ARTICLES_TITLE_SECTION_ARTICLE ? $arrTitle[] = array('name' => $section['name']) : null; CONF_ARTICLES_TITLE_ARTICLE_NAME ? $arrTitle[] = array('name' => $article['title']) : null; // проверка голосований за статью // проверяем наличие id статьи в куках пользователя // если $vote = true, значит пользователь уже голосовал за статью $vote = isset($_COOKIE['artvote']) && $_COOKIE['artvote'] ? !in_array($article['id'], explode(':', $_COOKIE['artvote'])) ? false : true : false; // проверяем ip последнего голосовавшего !$vote ? $_SERVER['REMOTE_ADDR'] === $article['ip_last'] ? $vote = true : null : null; $smarty->assignByRef('vote', $vote); // СЕО данные $smarty->assignByRef('meta_keywords', $article['meta_keywords']); $smarty->assignByRef('meta_description', $article['meta_description']);
!$securimage->check($_POST['keystring']) ? $arrErrors[] = ERROR_CAPTCHA : null; } } else { $arrErrors[] = ERROR_EMPTY_FIELDS; } /////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////// if (!$arrErrors) { $mailer = new mailer(); // массив для замены в шаблоне CONF_MAIL_FORMAT_HTML ? $message = nl2br($_POST['message']) : ($message =& $_POST['message']); $mailer->setAddReplace(array('%FEEDBACK%' => &$message)); // проверяем, если есть дополнительный словарь тем, то используем его $toAddress = isset($arrAddDict['FeedbackSubject']) && ($address = array_search($_POST['subject'], $arrAddDict['FeedbackSubject']['values'])) ? $address : CONF_MAIL_ADMIN_EMAIL; // пытамеся отправить сообщение if (!$mailer->sendEmail($_POST['email'], $_POST['email'], $_POST['email'], $toAddress, $toAddress, $_POST['subject'], 'feedback.txt')) { $arrErrors[] = ERROR_SEND_EMAIL; } else { messages::messageChangeSaved(MESSAGE_WAS_SEND, false, chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?ut=' . $_SESSION['sd_user'][DB_PREFIX . 'conf']['user_type'] . '&do=feedback')); } } $return_data['subject'] = !empty($_POST['subject']) ? $_POST['subject'] : ''; $return_data['email'] = !empty($_POST['email']) ? $_POST['email'] : ''; $return_data['message'] = !empty($_POST['message']) ? $_POST['message'] : ''; } // проверяем, если есть дополнительный словарь тем, то бере темы из него $feedBackSubject = isset($arrAddDict['FeedbackSubject']) ? $arrAddDict['FeedbackSubject']['values'] : $arrSysDict['FeedbackSubject']['values']; $smarty->assign('sid', md5(time())); $smarty->assignByRef('return_data', $return_data); $smarty->assignByRef('subject', $feedBackSubject); $smarty->assignByRef('errors', $arrErrors);
if (isset($_GET['id_section'])) { // проверяем наличие всех необходимых полей в поисковом запросе foreach ($arrFields as $key => $value) { !isset($_GET[$key]) ? $arrErrors = ERROR_SEARCH_NONE_REQUIRED_FIELDS : null; } if (!$arrErrors) { // создаем объект $search = new search('resume'); $arrFields = array('id_section' => validate::checkNaturalNumber($_GET['id_section']), 'id_profession' => validate::checkNaturalNumber($_GET['id_profession']), 'id_region' => validate::checkNaturalNumber($_GET['id_region']), 'id_city' => validate::checkNaturalNumber($_GET['id_city']), 'chart_work' => in_array($search->decodeSearchString($_GET['chart_work']), $arrAddDict['ChartWork']['values']) ? $search->decodeSearchString($_GET['chart_work']) : false, 'expire_work' => in_array($search->decodeSearchString($_GET['expire_work']), $arrAddDict['ExpireWorkSearch']['values']) ? $search->decodeSearchString($_GET['expire_work']) : false, 'education' => in_array($search->decodeSearchString($_GET['education']), $arrAddDict['Education']['values']) ? $search->decodeSearchString($_GET['education']) : false, 'age_from' => validate::checkNaturalNumber($_GET['age_from']), 'age_post' => validate::checkNaturalNumber($_GET['age_post']), 'pay_from' => validate::checkNaturalNumber($_GET['pay_from']), 'pay_post' => validate::checkNaturalNumber($_GET['pay_post']), 'currency' => in_array($_GET['currency'], $arrSysDict['Currency']['values']) ? $_GET['currency'] : false, 'gender' => array_key_exists($_GET['gender'], $arrSysDict['Gender']['values']) ? $_GET['gender'] : false, 'user_type' => $_GET['user_type'], 'period' => array_key_exists($_GET['period'], $arrSysDict['SearchPeriod']['values']) ? $_GET['period'] : 0, 'records' => in_array($_GET['records'], $arrSysDict['AnnounceRecords']['values']) ? $_GET['records'] : 5); // смещение, всегда 0 (затем берется из $_GET) $offset = isset($_GET['offset']) ? (int) abs($_GET['offset']) : 0; // производим поиск $arrData = $search->searchResume($arrFields + array('offset' => $offset)); if ($arrData['result']) { // формируем ссылку $path = 'index.php?ut=' . $_SESSION['sd_user'][DB_PREFIX . 'conf']['user_type'] . '&do=search.resume&id_section=' . $arrFields['id_section'] . '&id_profession=' . $arrFields['id_profession'] . '&id_region=' . $arrFields['id_region'] . '&id_city=' . $arrFields['id_city'] . '&chart_work=' . $arrFields['chart_work'] . '&expire_work=' . $arrFields['expire_work'] . '&education=' . $arrFields['education'] . '&age_from=' . $arrFields['age_from'] . '&age_post=' . $arrFields['age_post'] . '&pay_from=' . $arrFields['pay_from'] . '&pay_post=' . $arrFields['pay_post'] . '&currency=' . $arrFields['currency'] . '&gender=' . $arrFields['gender'] . '&user_type=' . $arrFields['user_type'] . '&period=' . $arrFields['period'] . '&records=' . $arrFields['records'] . '&'; // формируем странциы $strPages = strings::generatePage($arrData['records'], $offset, $arrFields['records'], $path, true); // передаем в шаблон необходимые данные $smarty->assign('link', CONF_SCRIPT_URL . 'index.php?ut=' . $_SESSION['sd_user'][DB_PREFIX . 'conf']['user_type'] . '&do=resume&action=view&id='); $smarty->assignByRef('return_data', $arrData['result']); $smarty->assignByRef('string_page', $strPages); } else { $arrErrors[] = MESSAGE_NOT_FOUND_RECORDS; } } } // имя страницы $arrNamePage = array(array('name' => MENU_SEARCH_RESUME, 'link' => chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?ut=' . $_SESSION['sd_user'][DB_PREFIX . 'conf']['user_type'] . '&do=search')), array('name' => MENU_ADVANCED_SEARCH_RESUME, 'link' => chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?ut=' . $_SESSION['sd_user'][DB_PREFIX . 'conf']['user_type'] . '&do=search.resume'))); $smarty->assignByRef('retFields', $arrFields); $smarty->assignByRef('errors', $arrErrors);
/** * Функция отправляет пользователю сообщение о том, что его статья возвращена на редактирование * * @param (array) $arrData - массив данных статьи * * @return void */ public function sendUserCorrectionArticle(&$arrData) { /** Получаем данные пользователя **/ $user = new user(); if ($uData = $user->getUser("id IN (" . secure::escQuoteData($arrData['id']) . ")")) { $mailer = new mailer(); // массив для замены в шаблоне $mailer->setAddReplace(array('%ARTICLE_TITLE%' => $arrData['title'], '%PUBLICATION_DATE%' => date(terms::dateFormatFromSmarty(CONF_DATE_FORMAT, CONF_TIME_FORMAT), strtotime($arrData['datetime'])), '%COMMENTS%' => CONF_MAIL_FORMAT_HTML ? nl2br($arrData['comments']) : $arrData['comments'], '%DELDATE%' => date(terms::dateFormatFromSmarty(CONF_DATE_FORMAT, CONF_TIME_FORMAT), strtotime(terms::calcDateTimeOfTerm(CONF_ARTICLES_CORRECTION_THERM))), '%USER_PANEL_LINK%' => chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?do=user.articles&action=correction'))); // отправляем письмо администратору $mailer->sendEmail(CONF_MAIL_ADMIN_EMAIL, CONF_SITE_NAME, false, $uData['email'], $uData['first_name'], MAIL_MODERATE_ARTICLES_CORRECTION . ': ' . $arrData['title'], 'user.article.correction.txt'); unset($mailer); // уничтожаем объект } unset($user); // уничтожаем объект }
$arrNamePage = array(array('name' => MENU_ANNOUNCES_NAVIGATOR, 'link' => false), array('name' => FORM_RESUMES_HEAD, 'link' => chpu::createChpuUrl($path . '&action=regions')), array('name' => $arrDataRegions[$arrDataCitys[$id]['parent_id']]['name'], 'link' => chpu::createChpuUrl($path . '&action=regions&id=' . $arrDataRegions[$arrDataCitys[$id]['parent_id']]['tId'])), array('name' => $arrDataCitys[$id]['name'], 'link' => false)); if (!empty($arrDataCitys[$id]['title'])) { $smarty->assignByRef('page_title', $arrDataCitys[$id]['title']); } if (!empty($arrDataCitys[$id]['meta_keywords'])) { $smarty->assignByRef('meta_keywords', $arrDataCitys[$id]['meta_keywords']); } if (!empty($arrDataCitys[$id]['meta_description'])) { $smarty->assignByRef('meta_description', $arrDataCitys[$id]['meta_description']); } } elseif (isset($_GET['id'])) { messages::error404(); } else { $smarty->assign('return_data', false); // инициируем "Наименование страницы" отображаемое в заголовке формы $arrNamePage = array(array('name' => MENU_ANNOUNCES_NAVIGATOR, 'link' => false), array('name' => FORM_RESUMES_HEAD, 'link' => chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?ut=' . $_SESSION['sd_user'][DB_PREFIX . 'conf']['user_type'] . '&do=resume&action=regions'))); } } elseif (!empty($arrActPage['vip']) || !empty($arrActPage['hot'])) { $offset = isset($_GET['offset']) ? (int) abs($_GET['offset']) : 0; //смещение, всегда 0 (затем берется из $_GET) $status = !empty($arrActPage['vip']) ? 'vip' : 'hot'; $arrLimit = array('strLimit' => $offset . ', ' . CONF_ANNOUNCE_PERPAGE_SITE, 'calcRows' => true); $smarty->assign('return_data', $resume->getActiveAnnounces($arrLimit, $status)); $allRecords = $resume->cntAnnounces(); $path = CONF_SCRIPT_URL . 'index.php?ut=' . $_SESSION['sd_user'][DB_PREFIX . 'conf']['user_type'] . '&do=resume'; $strPages = strings::generatePage($allRecords, $offset, CONF_ANNOUNCE_PERPAGE_SITE, $path . '&action=' . $status . '&page=offset&'); // формируем страницы $smarty->assign('link', $path . '&action=view&id='); $smarty->assignByRef('string_page', $strPages); //передаем в шаблон строку сформированных страниц // инициируем "Наименование страницы" отображаемое в заголовке формы
if (validate::postDataNotEmpty()) { // проверяем капчу if (isset($_POST['keystring'])) { $securimage = new securimage(); !$securimage->check($_POST['keystring']) ? $arrErrors[] = ERROR_CAPTCHA : null; } $_POST['remember'] = isset($_POST['remember']) ? true : false; if ($user->issetUser("email IN (" . secure::escQuoteData($_POST['email']) . ") AND password IN ('" . md5($_POST['password']) . "') AND token IN ('active', 'new')")) { if ($user->authorizeUser($_POST['email'], $_POST['password'], $_POST['remember'])) { unset($_SESSION['user_fail_auth']); if (isset($_SESSION['referer']) && !strstr($_SESSION['referer'], 'do=payments')) { $referer = $_SESSION['referer']; unset($_SESSION['referer']); die('<script type="text/javascript">window.location="' . $referer . '";</script>'); } else { die('<script type="text/javascript">window.location="' . chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?do=user.data') . '";</script>'); } } else { $arrErrors[] = ERROR_AUTHORIZE_ACCOUNT_NOT_ACTIVATE; } } else { $arrErrors[] = ERROR_DATA; } } else { $arrErrors[] = ERROR_EMPTY_FIELDS; } // Если есть ошибки, сохраняем в сессии количество входов, для вывода капчи. $arrErrors ? isset($_SESSION['user_fail_auth']) ? $_SESSION['user_fail_auth']++ : ($_SESSION['user_fail_auth'] = 1) : null; $return_data['email'] = $_POST['email']; } // проверяем, нужно ли выводить капчу
/** * protected функция отправки пользователю сообщения о том, что на сайт его добавил администратор * * @param (array) $arrData - Данные пользователя array('email' => email, 'password' => password) * * @return void */ protected function addUserSendEmail($arrData) { $mailer = new mailer(); $mailer->setAddReplace(array('%AUTHORIZE_LINK%' => chpu::createChpuUrl(CONF_SCRIPT_URL . 'index.php?do=authorize'), '%USER_LOGIN%' => $arrData['email'], '%USER_PASSWORD%' => $arrData['password'])); $mailer->sendEmail(CONF_MAIL_ADMIN_EMAIL, false, false, $arrData['email'], false, MAIL_SUBJ_ADM_USER_ADD, 'user.add.admin.txt'); }