/** * Добавление поста в базу данных: */ public static function CreatePost($params, $safeMode = true) { $session = Session::getInstance(); $cache = KVS::getInstance(); $id = $cache->incr('Blog_BlogPostsModel', null, 'nextPostId'); $text_original = $params['text']; $params['title'] = TexyHelper::typo($params['title']); $params['text'] = TexyHelper::markup($params['text'], !$session->isAdminSession()); $params['text_full'] = TexyHelper::markup($params['text_full'], !$session->isAdminSession()); $record = array('id' => $id, 'ip' => $_SERVER['REMOTE_ADDR'], 'category' => 0, 'created_at' => time(), 'updated_at' => time(), 'link' => htmlspecialchars($params['link']), 'title' => $params['title'], 'text' => $params['text'], 'text_full' => $params['text_full']); if (HomeBoardHelper::existsBoard($params['homeboard'])) { $record['author'] = $params['homeboard']; } if (!$safeMode) { $record = array_merge($record, array('hidden' => (bool) @$params['hidden'], 'pinned' => (bool) @$params['pinned'], 'rated' => (bool) @$params['rated'], 'closed' => (bool) @$params['closed'], 'rateable' => (bool) @$params['rateable'], 'bumpable' => (bool) @$params['bumpable'], 'special_comment' => @$params['special_comment'])); } if (array_key_exists('category', $params) && !empty($params['category'])) { $category = Blog_BlogCategoryModel::GetCategoryByCode($params['category']); if ($category) { Blog_BlogCategoryModel::CountCategory($category['id'], true); $record['category'] = $category['id']; } } $dbh = PDOQuery::getInstance(); $dbh->insert('1chan_post', $record); $cache->set(__CLASS__, $id, 'raters', serialize(array($_SERVER['REMOTE_ADDR']))); $record['text_original'] = $text_original; EventModel::getInstance()->Broadcast('add_post', $record); return $id; }
/** * Добавление комментария: */ public static function CreateComment($params, $safeMode = true) { if (Blog_BlogPostsModel::PostExists($params['post_id'])) { $session = Session::getInstance(); $post = Blog_BlogPostsModel::GetPost($params['post_id']); // Запрет комментирования закрытых тредов: if ($post['closed'] == true) { return false; } $cache = KVS::getInstance(); $id = $cache->incr('Blog_BlogPostsModel', null, 'nextPostId'); $text_original = $params['text']; // Обработка: $params['text'] = TexyHelper::markup($params['text'], !$session->isAdminSession()); $record = array('id' => $id, 'post_id' => $params['post_id'], 'ip' => $_SERVER['REMOTE_ADDR'], 'created_at' => time(), 'text' => $params['text']); if (HomeBoardHelper::existsBoard($params['homeboard'])) { $record['author'] = $params['homeboard']; } if (!$safeMode) { $record = array_merge($record, array('special_comment' => @$params['special_comment'])); } $dbh = PDOQuery::getInstance(); $dbh->insert('1chan_comment', $record); if ($post['bumpable'] && time() - $post['created_at'] < 60 * 60 * 24 * 30) { $dbh->update_insecure('1chan_post', array('updated_at' => time(), 'comments' => '`comments`+1'), 'id = ' . $dbh->q($params['post_id']), 1, true); } else { $dbh->update_insecure('1chan_post', array('comments' => '`comments`+1'), 'id = ' . $dbh->q($params['post_id']), 1, true); } $record['text_original'] = $text_original; EventModel::getInstance()->Broadcast('add_comment', $record); /** * Сохраняем в кеше последние комментарии: */ $record['post_title'] = $post['title']; $cache->listAdd(__CLASS__, null, 'lastComments', $id); $cache->listTrim(__CLASS__, null, 'lastComments', 0, 31); return $id; } return false; }
/** * Действие просмотра поста комментария: */ public function getLastCommentsAjaxAction(Application $application) { $cache = KVS::getInstance(); if ($cache->exists(__CLASS__, $_GET['id'], 'preview')) { return unserialize($cache->get(__CLASS__, $_GET['id'], 'preview')); } $comment = Blog_BlogCommentsModel::GetComment($_GET['id']); $result = false; if ($comment) { $post = Blog_BlogPostsModel::GetPost($comment['post_id']); $comment['post_title'] = $post['title']; $comment['created_at'] = TemplateHelper::date('d M Y @ H:i', $comment['created_at']); $comment['author'] = array($comment['author'], HomeBoardHelper::getBoard($comment['author'])); unset($comment['ip']); $result = $comment; } elseif ($post = Blog_BlogPostsModel::GetPost($_GET['id'])) { $result = array('id' => $post['id'], 'post_id' => $post['id'], 'post_title' => $post['title'], 'text' => $post['text'], 'author' => array($post['author'], HomeBoardHelper::getBoard($post['author'])), 'created_at' => TemplateHelper::date('d M Y @ H:i', $post['created_at']), 'post_preview' => true); } $cache->set(__CLASS__, $_GET['id'], 'preview', serialize($result)); $cache->expire(__CLASS__, $_GET['id'], 'preview', 60 * 60); return $result; }
<textarea id="comment_form_text" name="text" rows="5"><?php echo @htmlspecialchars($blog_form['text']); ?> </textarea> <input type="submit" value="Отправить" /> <span class="b-homeboard-form"> <img src="http://<?php echo TemplateHelper::getSiteUrl(); ?> /ico/homeboards/anonymous.png" class="b-homeboard-form_icon js-homeboard-icon" /> <a href="javascript://" class="b-homeboard-form_link js-homeboard-link g-dynamic">Сменить</a> <div class="b-homeboard-form_select js-homeboard-select g-hidden"> <?php foreach (HomeBoardHelper::getBoards() as $board => $data) { ?> <a href="javascript://" name="<?php echo $board; ?> " title="<?php echo $data[1]; ?> " class="js-homeboard-select-link"> <img src="http://<?php echo TemplateHelper::getSiteUrl(); ?> /ico/homeboards/<?php echo $data[0]; ?> " class="b-homeboard-form_icon" />
<span> <a href="http://<?php echo TemplateHelper::getSiteUrl(); ?> /news/res/<?php echo $post['id']; ?> /" class="g-disabled"> №<?php echo $post['id']; ?> </a> </span> <?php if ($post['author'] != 'anonymous') { $author = HomeBoardHelper::getBoard($post['author']); ?> <span>|</span> <a href="http://<?php echo $post['author']; ?> /" class="b-comment_b-homeboard" title="Аноним выбрал принадлежность «<?php echo $author[1]; ?> »"> <img src="http://<?php echo TemplateHelper::getSiteUrl(); ?> /ico/homeboards/<?php echo $author[0]; ?>
/** * Получение коммента: */ public function getPostCommentAjaxAction() { $cache = KVS::getInstance(); $comment = Blog_BlogCommentsModel::GetComment($_GET['id']); $session = Session::getInstance(); $session->activeSet('last_visit_post_' . $comment['post_id'], time()); if ($comment) { if ($_GET['title']) { $post = Blog_BlogPostsModel::GetPost($comment['post_id']); $comment['post_title'] = $post['title']; } $comment['created_at'] = TemplateHelper::date('d M Y @ H:i', $comment['created_at']); $comment['author'] = array($comment['author'], HomeBoardHelper::getBoard($comment['author'])); unset($comment['ip']); return $comment; } return false; }
</a>)<?php } ?> <a href="#" class="js-remove-button g-hidden"><img src="http://<?php echo TemplateHelper::getSiteUrl(); ?> /ico/remove.gif" width="16" height="16" alt="<?php echo $comment['board_id']; ?> /<?php echo $comment['id']; ?> " /></a> <?php if ($comment['author'] && $comment['author'] != 'anonymous') { $author = HomeBoardHelper::getBoard($comment['author']); ?> <a href="http://<?php echo $comment['author']; ?> /" class="b-comment_b-homeboard" title="Аноним выбрал принадлежность «<?php echo $author[1]; ?> »"> <img src="http://<?php echo TemplateHelper::getSiteUrl(); ?> /ico/homeboards/<?php echo $author[0]; ?> " width="16" height="16" alt="" />
/** * Получение поста(ов) (ajax): */ public function getAjaxAction(Application $application) { $board = new Board_BoardModel($_GET['board']); $settings = $board->getSettings(); if (array_key_exists('id', $_GET)) { if (is_array($_GET['id'])) { $result = array(); foreach ($_GET['id'] as $id) { if ($post = $board->getPost($id)) { $post['created_at'] = TemplateHelper::date($_GET['board'] != 'int' ? 'd M Y @ H:i' : 'Y-m-d @ H:i', $post['created_at']); $post['board_title'] = $settings['title']; $post['author'] = array($post['author'] ? $post['author'] : 'anonymous', HomeBoardHelper::getBoard($post['author'])); unset($post['ip']); $result[] = $post; } } return $result; } else { if ($post = $board->getPost($_GET['id'])) { $post['created_at'] = TemplateHelper::date($_GET['board'] != 'int' ? 'd M Y @ H:i' : 'Y-m-d @ H:i', $post['created_at']); $post['board_title'] = $settings['title']; $post['author'] = array($post['author'] ? $post['author'] : 'anonymous', HomeBoardHelper::getBoard($post['author'])); unset($post['ip']); return $post; } return false; } } if (array_key_exists('thread_id', $_GET)) { if ($thread = $board->getThread($_GET['thread_id'], true)) { $result = array(); foreach ($thread['posts'] as $id => $post) { $post['created_at'] = TemplateHelper::date($_GET['board'] != 'int' ? 'd M Y @ H:i' : 'Y-m-d @ H:i', $post['created_at']); $post['board_title'] = $settings['title']; $post['author'] = array($post['author'] ? $post['author'] : 'anonymous', HomeBoardHelper::getBoard($post['author'])); unset($post['ip']); $result[] = $post; } return $result; } } return false; }