/** * Действие скрытого поста: */ public function hiddenPostAjaxAction(Application $application) { if (!Session::getInstance()->isAdminSession()) { return false; } $post = Blog_BlogPostsModel::GetPost($_GET['id']); if ($post && ControlModel::checkModrights($post['category'])) { Blog_BlogPostsModel::HidePost($_GET['id'], !$post['hidden'], date("d-m-Y H:i:s") . ' ' . $_SESSION['auth']['name'] . (!$post['hidden'] ? ' скрыл' : ' показал') . ' пост.' . '<br />Причина: ' . (!empty($_GET['why']) ? '<em>' . $_GET['why'] . '</em>' : 'не указана')); if (!$post['hidden']) { Blog_BlogPostsModel::SetSpecialComment($_GET['id'], 'Причина: ' . (!empty($_GET['why']) ? '<em>' . $_GET['why'] . '</em>' : 'не указана')); } else { Blog_BlogPostsModel::SetSpecialComment($_GET['id'], ''); } ControlModel::logModEvent(date("d-m-Y H:i:s") . ' ' . $_SESSION['auth']['name'] . '<br />' . (!$post['hidden'] ? ' скрыл' : ' показал') . ' пост <a href="http://' . TemplateHelper::getSiteUrl() . '/news/res/' . $post['id'] . '/" class="js-cross-link">>>' . $post['id'] . '</a>' . '<br />Причина: ' . (!empty($_GET['why']) ? '<em>' . $_GET['why'] . '</em>' : 'не указана')); JabberBot::send('-=$ /me (модлог) ' . $_SESSION['auth']['name'] . (!$post['hidden'] ? ' скрыл' : ' показал') . ' пост http://' . TemplateHelper::getSiteUrl() . '/news/res/' . $post['id'] . '/' . "\n" . 'Причина: ' . (!empty($_GET['why']) ? $_GET['why'] : 'не указана')); } 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; }