/** * Добавление новой ссылки (ajax): */ public function addAjaxAction(Application $application) { if (ControlModel::isLiveCaptcha()) { return array('isValid' => 'captcha'); } 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); return true; } return array('isValid' => $validator->isValid(), 'validationResults' => $validator->getValidationResults()); }
/** * Действие "поделиться ссылкой" через букмарклет: */ public function shareLinkAction(Application $application, Template $template) { $kvs = KVS::getInstance(); $validator = new ValidatorHelper($_GET); $validator->assertExists('title', ''); $validator->assertLength('title', 70, ''); $validator->assertExists('link', ''); $validator->assertRegexp('link', ValidatorHelper::URL_REGEXP, ''); $validator->assertLength('description', 128, ''); if ($validator->isValid()) { $key = md5(strtolower($_GET['link'])); $ip = md5($_SERVER['REMOTE_ADDR']); $counter = $kvs->get(__CLASS__, 'shared_links_ip', $ip); if (!$kvs->exists(__CLASS__, 'shared_links', $key) && !$kvs->exists(__CLASS__, 'shared_links_ban', $ip)) { if ($kvs->exists(__CLASS__, 'shared_links_ip', $ip)) { if ($counter > 5) { $kvs->set(__CLASS__, 'shared_links_ban', $ip, true); $kvs->expire(__CLASS__, 'shared_links_ban', $ip, 5 * 60); } else { $lifetime = $kvs->lifetime(__CLASS__, 'shared_links_ip', $ip); $kvs->set(__CLASS__, 'shared_links_ip', $ip, ++$counter); $kvs->expire(__CLASS__, 'shared_links_ip', $ip, $lifetime); } } else { $kvs->set(__CLASS__, 'shared_links_ip', $ip, 1); $kvs->expire(__CLASS__, 'shared_links_ip', $ip, 60); } JabberBot::send('-=% /me Отправлена ссылка: ' . $_GET['link'] . ' (' . $_GET['title'] . ')' . "\n" . (!empty($_GET['description']) ? 'С описанием: ' . $_GET['description'] : '')); $kvs->set(__CLASS__, 'shared_links', $key, true); $kvs->expire(__CLASS__, 'shared_links', $key, 60 * 60); $template->headerOk(); $template->headerContentTypeWOCharset('image/png'); readfile(WEB_DIR . '/ico/tick.png'); exit; } } $template->headerBadRequest(); exit; }
/** * Действие валидации поста (ajax): */ public function validatePostAjaxAction(Application $application) { $session = Session::getInstance(); $validator = new ValidatorHelper($_POST); $validator->assertExists('title', 'Не введен заголовок'); $validator->assertLength('title', 70, 'Заголовок слишком длинный'); $validator->assertExists('text', 'Не введен вводный текст'); $validator->assertLength('text', 1024, 'Вводный текст слишком длинный'); if (!$session->isModeratorSession()) { $validator->assertLength('text_full', 5096, 'Подробный текст слишком длинный'); } if ($_POST['link'] != '') { $validator->assertRegexp('link', ValidatorHelper::URL_REGEXP, 'Ссылка введена неверно'); } if ($validator->fieldValid('link')) { $validator->assertTrue('link', ControlModel::CheckLinkfilter($_POST['link']) == false, 'Ссылка запрещена'); } 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') != '.', 'Точка в конце заголовка'); } if ($_POST['category'] != '') { $validator->assertTrue('category', Blog_BlogCategoryModel::CategoryExists($_POST['category']), 'Неверный ключ категории'); } return array('isValid' => $validator->isValid(), 'validationResults' => $validator->getValidationResults()); }