/** * Действие просмотра лога модераторских действий: */ public function getModActionsAction(Application $application, Template $template) { $template->setParameter('title', 'Последние действия модераторов'); $template->setParameter('board_id', 'news'); $modlog = ControlModel::getLogModEvent(); $this['comments'] = array_reverse($modlog); return true; }
/** * Добавление новой ссылки: */ public function addAction(Application $application, Template $template) { $session = Session::getInstance(); if (parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST) != TemplateHelper::getSiteUrl()) { return false; } if (ControlModel::isLiveCaptcha()) { $catpcha = false; $this['live_form'] = $_POST; if (@$_POST['captcha']) { if ($_POST['captcha'] !== $session->instantGet('captcha_' . $_POST['captcha_key'], false)) { $template->setParameter('captcha_err', true); $captcha = true; } else { $session->persistenceSet('captcha_mode', false); } } else { $captcha = true; } $key = 'live'; $template->setParameter('title', 'Добавление ссылки'); $template->setParameter('captcha_key', $key); $session->instantSet('captcha_' . $key, true); if ($captcha) { return true; } } if ($_SERVER['REQUEST_METHOD'] == 'POST') { ControlModel::checkContent($_POST['description']); $validator = new ValidatorHelper($_POST); $validator->assertExists('link', 'Не введена ссылка'); $validator->assertRegexp('link', ValidatorHelper::URL_REGEXP, 'Ссылка введена неверно'); if ($validator->fieldValid('link')) { $validator->assertTrue('link', Blog_BlogOnlineModel::CheckCategory($_POST['link']) !== false, 'Данная ссылка не может участвовать в ленте'); } if ($validator->fieldValid('link')) { $validator->assertTrue('link', Blog_BlogOnlineModel::CheckLinkPosted($_POST['link']) != true, 'Ссылка уже участвует в ленте'); } $validator->assertTrue('timeout', ControlModel::getLiveInterval() == 0, 'Таймаут ' . TemplateHelper::ending(ControlModel::getLiveInterval(), 'секунда', 'секунды', 'секунд')); $validator->assertTrue('link', !ControlModel::CheckLinkfilter($params['link']), 'Запрещенная ссылка'); $validator->assertExists('description', 'Не введено описание'); $validator->assertLength('description', 100, 'Описание длиннее 100 символов'); if ($validator->isValid()) { Blog_BlogOnlineModel::CreateLink($_POST); $template->headerSeeOther('http://' . TemplateHelper::getSiteUrl() . '/live/'); return false; } $session->instantSet('live_errors', $validator->getValidationResults()); $session->instantSet('live_form', $_POST); $template->headerSeeOther('http://' . TemplateHelper::getSiteUrl() . '/live/'); return false; } return false; }
/** * Предварительный просмотр: */ public function previewAction(Application $application, Template $template) { if ($_SERVER['REQUEST_METHOD'] != 'POST') { die($application->go('errors_error404')); } $session = Session::getInstance(); if (!$session->isAdminSession()) { die($application->go('errors_error403')); } $template->setParameter('title', $_POST['title']); $this['preview_content'] = $_POST['content']; return true; }
public function indexAction(Application $application, Template $template) { $template->setParameter('title', 'Форс-о-метр'); if (array_key_exists('query', $_GET)) { $query = $this['query'] = $_GET['query']; $search = new SphinxClient(); $search->SetServer('localhost', 3312); $search->SetGroupBy('created_at', SPH_GROUPBY_MONTH); // Полный поиск (запрос): $search->ResetFilters(); $search->SetMatchMode(SPH_MATCH_PHRASE); $search->AddQuery($query, 'forceometer'); // Поиск уникальных в месяц (запрос): $search->ResetFilters(); $search->SetMatchMode(SPH_MATCH_PHRASE); $search->SetFilter('uniq_m', array(1)); $search->AddQuery($query, 'forceometer'); // Поиск уникальных вообще (запрос): $search->ResetFilters(); $search->SetMatchMode(SPH_MATCH_PHRASE); $search->SetFilter('uniq_f', array(1)); $search->AddQuery($query, 'forceometer'); $query_result = $search->RunQueries(); // Поиск уникальных постеров месяца (вообще): $search->ResetFilters(); $search->SetMatchMode(SPH_MATCH_FULLSCAN); $search->SetFilter('uniq_m', array(1)); $bare_query = $search->Query('', 'forceometer'); /* $search -> ResetFilters(); $search -> SetMatchMode(SPH_MATCH_FULLSCAN); $bare_query2 = $search -> Query('', 'forceometer'); */ if (!$query_result || $query_result[0]['total_found'] == 0) { $this['not_found'] = 1; return true; } $result = array('posts' => array(), 'posters' => array(), 'uniq_m' => array(), 'uniq_f' => array()); for ($y = 2009; $y <= date('Y'); $y++) { for ($m = 1; $m <= 12; $m++) { // Пропуск несуществующих дат и текущего месяца: if ($y == 2009 && $m < 3) { continue; } if ($y == date('Y') && $m >= date('m')) { break; } $stamp = $y . '-' . ($m < 10 ? '0' . $m : $m) . '-01'; $result['posts'][$stamp] = 0; $result['posters'][$stamp] = 0; $result['uniq_m'][$stamp] = 0; $result['uniq_f'][$stamp] = 0; } } // Проходим результаты: if ($query_result[0]['matches']) { foreach ($query_result[0]['matches'] as $match) { $date = $match['attrs']['@groupby']; $stamp = substr($date, 0, 4) . '-' . substr($date, 4, 2) . '-01'; if (array_key_exists($stamp, $result['posts'])) { $result['posts'][$stamp] = $match['attrs']['@count']; } } } if ($bare_query['matches']) { foreach ($bare_query['matches'] as $match) { $date = $match['attrs']['@groupby']; $stamp = substr($date, 0, 4) . '-' . substr($date, 4, 2) . '-01'; if (array_key_exists($stamp, $result['posters'])) { $result['posters'][$stamp] = $match['attrs']['@count']; } } } if ($query_result[1]['matches']) { foreach ($query_result[1]['matches'] as $match) { $date = $match['attrs']['@groupby']; $stamp = substr($date, 0, 4) . '-' . substr($date, 4, 2) . '-01'; if (array_key_exists($stamp, $result['uniq_m'])) { $result['uniq_m'][$stamp] = $match['attrs']['@count']; } } } /* if ($bare_query2['matches']) { foreach($bare_query2['matches'] as $match) { $date = $match['attrs']['@groupby']; $stamp = substr($date, 0, 4) .'-'. substr($date, 4, 2) .'-01'; if (array_key_exists($stamp, $result['uniq_f'])) $result['uniq_f'][$stamp] = $match['attrs']['@count']; } }*/ foreach ($result['posts'] as $date => $count) { if ($count == 0) { unset($result['posts'][$date]); unset($result['posters'][$date]); unset($result['uniq_f'][$date]); unset($result['uniq_m'][$date]); } } $this['results'] = json_encode($result); unset($result); return true; } return true; }
/** * Комната чата: */ public function chatAction(Application $application, Template $template) { if ($_GET['id']) { $room = Chat_ChatRoomsModel::GetRoom($_GET['id']); } elseif ($_GET['alias']) { $room = Chat_ChatRoomsModel::GetRoomByAlias($_GET['alias']); } if ($room) { $template->setParameter('title', '«' . $room['title'] . '» чат'); $this['room'] = $room; EventModel::getInstance()->Broadcast('view_chat'); return true; } $template->setParameter('title', 'Комната не существует'); EventModel::getInstance()->Broadcast('view_chat'); return true; }
public function indexAction(Application $application, Template $template) { $template->setParameter('title', 'Доступ запрещен'); return true; }
/** * Действие добавления поста: */ public function addPostAction(Application $application, Template $template) { $session = Session::getInstance(); $settings = ControlModel::GetSettings(); if ($session->isJustCreated()) { return false; } if (!$session->persistenceGet('rules_accepted')) { $template->headerSeeOther('http://' . TemplateHelper::getSiteUrl() . '/help/news/?confirm'); } $this['form_errors'] = array(); $this['blog_form'] = array(); if ($_SERVER['REQUEST_METHOD'] == 'POST') { $text_test = ControlModel::checkContent($_POST['text']); $text_full_test = ControlModel::checkContent($_POST['text_full']); $validator = new ValidatorHelper($_POST); if (ControlModel::isPostCaptcha()) { $validator->assertExists('captcha_key', 'Введите капчу'); if ($_POST['captcha_key']) { $validator->assertEqual('captcha', $session->instantGet('captcha_' . $_POST['captcha_key'], false), 'Капча введена неверно'); } } $validator->assertExists('title', 'Не введен заголовок'); $validator->assertLength('title', 70, 'Заголовок слишком длинный'); $validator->assertExists('text', 'Не введен вводный текст'); $validator->assertLength('text', 1024, 'Вводный текст слишком длинный'); if (!$session->isModeratorSession()) { $validator->assertLength('text_full', 5096, 'Подробный текст слишком длинный'); } $validator->assertNotExists('email', 'Заполнено лишнее поле'); if ($validator->fieldValid('title')) { $validator->assertLengthMore('title', 3, 'Заголовок слишком короткий'); } if ($validator->fieldValid('text')) { $validator->assertLengthMore('text', 15, 'Вводный текст слишком короткий'); } if ($validator->fieldValid('title')) { $validator->assertTrue('title', mb_substr($_POST['title'], -1, 1, 'UTF-8') != '.', 'Точка в конце заголовка'); } $validator->assertTrue('text', $text_test && $text_full_test, 'Запрещенное слово из вордфильтра'); $validator->assertTrue('timeout', ControlModel::getPostInterval() == 0, 'Таймаут ' . TemplateHelper::ending(ControlModel::getPostInterval(), 'секунда', 'секунды', 'секунд')); if ($_POST['link'] != '') { $validator->assertRegexp('link', ValidatorHelper::URL_REGEXP, 'Ссылка введена неверно'); } if ($validator->fieldValid('link')) { $validator->assertTrue('link', ControlModel::CheckLinkfilter($_POST['link']) == false, 'Ссылка запрещена'); } if ($_POST['category'] != '') { $validator->assertTrue('category', Blog_BlogCategoryModel::CategoryExists($_POST['category']), 'Неверный ключ категории'); } if ($validator->isValid()) { $id = Blog_BlogPostsModel::CreatePost($_POST, true); if (ControlModel::checkModrights(Blog_BlogCategoryModel::GetCategoryIdByCode($_POST['category']))) { if ($_POST['rated']) { Blog_BlogPostsModel::RatedPost($id, true); } if ($_POST['pinned']) { Blog_BlogPostsModel::PinPost($id, true); } if ($_POST['notrateable']) { Blog_BlogPostsModel::RateablePost($id, false); } if ($_POST['closed']) { Blog_BlogPostsModel::ClosePost($id, true); } } if (ControlModel::isPostPremoderation()) { Blog_BlogPostsModel::HidePost($id, true); Blog_BlogPostsModel::SetSpecialComment($id, 'Пост ожидает модерации'); } if (ControlModel::isPostHandApproving()) { Blog_BlogPostsModel::RateablePost($id, false); } $session->persistenceSet('captcha_mode', false); $session->persistenceSet('captcha_mode_length', @$settings['captcha_length']); $template->headerSeeOther('http://' . TemplateHelper::getSiteUrl() . '/news/res/' . $id . '/'); return false; } $this['form_errors'] = $validator->getValidationResults(); $this['blog_form'] = $_POST; } if (ControlModel::isPostCaptcha()) { $key = 'post'; $template->setParameter('captcha_key', $key); $session->instantSet('captcha_' . $key, true); } $template->setParameter('title', 'Добавить пост'); $template->setParameter('board_id', 'news'); $template->setParameter('section', 'add'); EventModel::getInstance()->Broadcast('view_add_post'); return true; }
public function indexAction(Application $application, Template $template) { $template->setParameter('title', 'Ничего не найдено'); $template->headerNotFound(); return true; }
public function indexAction(Application $application, Template $template) { $template->setParameter('title', 'Свершилась ошибка'); return true; }
/** * Просмотр последних постов: */ public function lastBoardPostsAction(Application $application, Template $template) { $template->setParameter('title', 'Последние посты разделов'); $page = @$_GET['page'] ? $_GET['page'] : 0; $this['posts'] = Board_BoardModel::getLastPosts($page, $pages); $template->setParameter('total_pages', ceil($pages - 1)); $template->setParameter('current_page', $page); $template->setParameter('link_pages', 'http://' . TemplateHelper::getSiteUrl() . '/service/last_board_posts/%d/'); return true; }
/** * Список загруженных файлов: */ public function staticFilesAction(Application $application, Template $template) { if ($_SERVER['REQUEST_METHOD'] == 'POST') { if (array_key_exists('upload', $_FILES)) { StaticModel::CreateFile($_FILES['upload']); } } $template->setParameter('menu', 'static'); $template->setParameter('submenu', 'static_files'); $this['files'] = StaticModel::GetFiles(); return true; }