- <?php
- App::view($config['themes'].'/index');
-
- $id = param('id');
-
- switch ($act):
- ############################################################################################
- ## Главная страница ##
- ############################################################################################
- case 'index':
- show_title('Новости сайта');
-
- if (is_admin([101, 102])){
- echo '<div class="form"><a href="/admin/news">Управление новостями</a></div>';
- }
-
- $total = DB::run() -> querySingle("SELECT count(*) FROM `news`;");
- $page = App::paginate(App::setting('postnews'), $total);
-
- $config['description'] = 'Список новостей (Стр. '.$page['current'].')';
-
- if ($total > 0) {
- $querynews = DB::run() -> query("SELECT * FROM `news` ORDER BY `time` DESC LIMIT ".$page['offset'].", ".$config['postnews'].";");
-
- while ($data = $querynews -> fetch()) {
- echo '<div class="b">';
- echo $data['closed'] == 0 ? '<i class="fa fa-plus-square-o"></i> ' : '<i class="fa fa-minus-square-o"></i> ';
- echo '<b><a href="/news/'.$data['id'].'">'.$data['title'].'</a></b><small> ('.date_fixed($data['time']).')</small></div>';
-
- if (!empty($data['image'])) {
- echo '<div class="img"><a href="/uploads/news/'.$data['image'].'">'.resize_image('uploads/news/', $data['image'], 75, ['alt' => $data['title']]).'</a></div>';
- }
-
- if(stristr($data['text'], '[cut]')) {
- $data['text'] = current(explode('[cut]', $data['text'])).' <a href="/news/'.$data['id'].'">Читать далее »</a>';
- }
-
- echo '<div>'.App::bbCode($data['text']).'</div>';
- echo '<div style="clear:both;">Добавлено: '.profile($data['author']).'<br />';
- echo '<a href="/news/'.$data['id'].'/comments">Комментарии</a> ('.$data['comments'].') ';
- echo '<a href="/news/'.$data['id'].'/end">»</a></div>';
- }
-
- App::pagination($page);
- } else {
- show_error('Новостей еще нет!');
- }
-
- echo '<i class="fa fa-rss"></i> <a href="/news/rss">RSS подписка</a><br />';
- echo '<i class="fa fa-comment"></i> <a href="/news/allcomments">Комментарии</a><br />';
- break;
-
- ############################################################################################
- ## Чтение новости ##
- ############################################################################################
- case 'view':
-
- $data = DB::run() -> queryFetch("SELECT * FROM `news` WHERE `id`=? LIMIT 1;", [$id]);
-
- if (!empty($data)) {
-
- if (is_admin()){
- echo '<div class="form"><a href="/admin/news?act=edit&id='.$id.'">Редактировать</a> / ';
- echo '<a href="/admin/news?act=del&del='.$id.'&token='.$_SESSION['token'].'" onclick="return confirm(\'Вы действительно хотите удалить данную новость?\')">Удалить</a></div>';
- }
-
- $config['newtitle'] = $data['title'];
- $config['description'] = strip_str($data['text']);
-
- echo '<div class="b"><i class="fa fa-file-o"></i> ';
- echo '<b>'.$data['title'].'</b><small> ('.date_fixed($data['time']).')</small></div>';
-
- if (!empty($data['image'])) {
-
- echo '<div class="img"><a href="/uploads/news/'.$data['image'].'">'.resize_image('uploads/news/', $data['image'], 75, ['alt' => $data['title']]).'</a></div>';
- }
-
- $data['text'] = str_replace('[cut]', '', $data['text']);
- echo '<div>'.App::bbCode($data['text']).'</div>';
- echo '<div style="clear:both;">Добавлено: '.profile($data['author']).'</div><br />';
-
- if ($data['comments'] > 0) {
- echo '<div class="act"><i class="fa fa-comment"></i> <b>Последние комментарии</b></div>';
-
- $querycomm = DB::run() -> query("SELECT * FROM `comments` WHERE relate_type=? AND `relate_id`=? ORDER BY `time` DESC LIMIT 5;", ['news', $id]);
- $comments = $querycomm -> fetchAll();
- $comments = array_reverse($comments);
-
- foreach ($comments as $comm) {
- echo '<div class="b">';
- echo '<div class="img">'.user_avatars($comm['user']).'</div>';
-
- echo '<b>'.profile($comm['user']).'</b>';
- echo '<small> ('.date_fixed($comm['time']).')</small><br />';
- echo user_title($comm['user']).' '.user_online($comm['user']).'</div>';
-
- echo '<div>'.App::bbCode($comm['text']).'<br />';
-
- if (is_admin() || empty($config['anonymity'])) {
- echo '<span class="data">('.$comm['brow'].', '.$comm['ip'].')</span>';
- }
-
- echo '</div>';
- }
-
- if ($data['comments'] > 5) {
- echo '<div class="act"><b><a href="/news/'.$data['id'].'/comments">Все комментарии</a></b> ('.$data['comments'].') ';
- echo '<a href="/news/'.$data['id'].'/end">»</a></div><br />';
- }
- }
-
- if (empty($data['closed'])) {
-
- if (empty($data['comments'])){
- show_error('Комментариев еще нет!');
- }
-
- if (is_user()) {
- echo '<div class="form"><form action="/news/'.$id.'/create?read=1" method="post">';
- echo '<input type="hidden" name="token" value="'.$_SESSION['token'].'">';
- echo '<textarea id="markItUp" cols="25" rows="5" name="msg"></textarea><br />';
- echo '<input type="submit" value="Написать" /></form></div>';
-
- echo '<br />';
- echo '<a href="/rules">Правила</a> / ';
- echo '<a href="/smiles">Смайлы</a> / ';
- echo '<a href="/tags">Теги</a><br /><br />';
- } else {
- show_login('Вы не авторизованы, чтобы добавить сообщение, необходимо');
- }
- } else {
- show_error('Комментирование данной новости закрыто!');
- }
- } else {
- show_error('Ошибка! Выбранная вами новость не существует, возможно она была удалена!');
- }
-
- echo '<i class="fa fa-arrow-circle-left"></i> <a href="/news">К новостям</a><br />';
- break;
-
- ############################################################################################
- ## Комментарии ##
- ############################################################################################
- case 'comments':
- $datanews = DB::run() -> queryFetch("SELECT * FROM `news` WHERE `id`=? LIMIT 1;", [$id]);
-
- if (!empty($datanews)) {
-
- $total = DB::run() -> querySingle("SELECT count(*) FROM `comments` WHERE relate_type=? AND `relate_id`=?;", ['news', $id]);
- $page = App::paginate(App::setting('postnews'), $total);
-
- $config['newtitle'] = 'Комментарии - '.$datanews['title'];
- $config['description'] = 'Комментарии - '.$datanews['title'].' (Стр. '.$page['current'].')';
-
- echo '<h1><a href="/news/'.$datanews['id'].'">'.$datanews['title'].'</a></h1>';
-
- if ($total > 0) {
-
- $is_admin = is_admin();
- if ($is_admin) {
- echo '<form action="/news/'.$id.'/delete?page='.$page['current'].'" method="post">';
- echo '<input type="hidden" name="token" value="'.$_SESSION['token'].'">';
- }
-
- $querycomm = DB::run() -> query("SELECT * FROM `comments` WHERE relate_type=? AND `relate_id`=? ORDER BY `time` ASC LIMIT ".$page['offset'].", ".$config['postnews'].";", ['news', $id]);
-
- while ($data = $querycomm -> fetch()) {
-
- echo '<div class="b" id="comment_'.$data['id'].'"">';
- echo '<div class="img">'.user_avatars($data['user']).'</div>';
-
- if ($is_admin) {
- echo '<span class="imgright"><input type="checkbox" name="del[]" value="'.$data['id'].'" /></span>';
- }
-
- echo '<b>'.profile($data['user']).'</b>';
- echo '<small> ('.date_fixed($data['time']).')</small><br />';
- echo user_title($data['user']).' '.user_online($data['user']).'</div>';
-
- echo '<div>'.App::bbCode($data['text']).'<br />';
-
- if (is_admin() || empty($config['anonymity'])) {
- echo '<span class="data">('.$data['brow'].', '.$data['ip'].')</span>';
- }
-
- echo '</div>';
- }
-
- if ($is_admin) {
- echo '<span class="imgright"><input type="submit" value="Удалить выбранное" /></span></form>';
- }
-
- App::pagination($page);
- }
-
- if (empty($datanews['closed'])) {
-
- if (!$total) {
- show_error('Комментариев еще нет!');
- }
-
- if (is_user()) {
- echo '<div class="form"><form action="/news/'.$id.'/create" method="post">';
- echo '<input type="hidden" name="token" value="'.$_SESSION['token'].'">';
- echo '<textarea id="markItUp" cols="25" rows="5" name="msg"></textarea><br />';
- echo '<input type="submit" value="Написать" /></form></div>';
-
- echo '<br />';
- echo '<a href="/rules">Правила</a> / ';
- echo '<a href="/smiles">Смайлы</a> / ';
- echo '<a href="/tags">Теги</a><br /><br />';
- } else {
- show_login('Вы не авторизованы, чтобы добавить сообщение, необходимо');
- }
- } else {
- show_error('Комментирование данной новости закрыто!');
- }
- } else {
- show_error('Ошибка! Выбранная новость не существует, возможно она была удалена!');
- }
-
- echo '<i class="fa fa-arrow-circle-left"></i> <a href="/news">К новостям</a><br />';
- break;
-
- ############################################################################################
- ## Добавление комментариев ##
- ############################################################################################
- case 'create':
-
- $msg = check(Request::input('msg'));
- $token = check(Request::input('token'));
- $page = abs(intval(Request::input('page', 1)));
-
- if (is_user()) {
-
- $data = DB::run() -> queryFetch("SELECT * FROM `news` WHERE `id`=? LIMIT 1;", [$id]);
-
- $validation = new Validation();
-
- $validation -> addRule('equal', [$token, $_SESSION['token']], 'Неверный идентификатор сессии, повторите действие!')
- -> addRule('equal', [is_flood($log), true], 'Антифлуд! Разрешается комментировать раз в '.flood_period().' сек!')
- -> addRule('not_empty', $data, 'Выбранной новости не существует, возможно она было удалена!')
- -> addRule('string', $msg, 'Слишком длинный или короткий комментарий!', true, 5, 1000)
- -> addRule('empty', $data['closed'], 'Комментирование данной новости запрещено!');
-
- if ($validation->run()) {
-
- $msg = antimat($msg);
-
- DB::run() -> query("INSERT INTO `comments` (relate_type, relate_category_id, `relate_id`, `text`, `user`, `time`, `ip`, `brow`) VALUES (?, ?, ?, ?, ?, ?, ?, ?);", ['news', 0, $id, $msg, $log, SITETIME, App::getClientIp(), App::getUserAgent()]);
-
- DB::run() -> query("DELETE FROM `comments` WHERE relate_type=? AND `relate_id`=? AND `time` < (SELECT MIN(`time`) FROM (SELECT `time` FROM `comments` WHERE relate_type=? AND `relate_id`=? ORDER BY `time` DESC LIMIT ".$config['maxkommnews'].") AS del);", ['news', $id, 'news', $id]);
-
- DB::run() -> query("UPDATE `news` SET `comments`=`comments`+1 WHERE `id`=?;", [$id]);
- DB::run() -> query("UPDATE `users` SET `allcomments`=`allcomments`+1, `point`=`point`+1, `money`=`money`+5 WHERE `login`=?", [$log]);
-
- notice('Комментарий успешно добавлен!');
-
- if (isset($_GET['read'])) {
- redirect('/news/'.$id);
- }
-
- redirect('/news/'.$id.'/end');
-
- } else {
- show_error($validation->getErrors());
- }
- } else {
- show_login('Вы не авторизованы, чтобы добавить сообщение, необходимо');
- }
-
- echo '<i class="fa fa-arrow-circle-up"></i> <a href="/news/'.$id.'/comments?page='.$page.'">Вернуться</a><br />';
- echo '<i class="fa fa-arrow-circle-left"></i> <a href="/news">К новостям</a><br />';
- break;
-
- ############################################################################################
- ## Удаление комментариев ##
- ############################################################################################
- case 'delete':
-
- $token = check(Request::input('token'));
- $del = intar(Request::input('del'));
- $page = abs(intval(Request::input('page', 1)));
-
- if (is_admin()) {
- if ($token == $_SESSION['token']) {
- if (!empty($del)) {
-
- $del = implode(',', $del);
-
- $delcomments = DB::run() -> exec("DELETE FROM `comments` WHERE relate_type='news' AND `relate_id`=".$id." AND `id` IN (".$del.");");
-
- DB::run() -> query("UPDATE `news` SET `comments`=`comments`-? WHERE `id`=?;", [$delcomments, $id]);
-
- notice('Выбранные комментарии успешно удалены!');
- redirect('/news/'.$id.'/comments?page='.$page);
-
- } else {
- show_error('Ошибка! Отстутствуют выбранные комментарии для удаления!');
- }
- } else {
- show_error('Ошибка! Неверный идентификатор сессии, повторите действие!');
- }
- } else {
- show_error('Ошибка! Удалять комментарии могут только модераторы!');
- }
-
- echo '<i class="fa fa-arrow-circle-up"></i> <a href="/news/'.$id.'/comments?page='.$page.'">Вернуться</a><br />';
- echo '<i class="fa fa-arrow-circle-left"></i> <a href="/news">К новостям</a><br />';
- break;
-
- ############################################################################################
- ## Переадресация на последнюю страницу ##
- ############################################################################################
- case 'end':
-
- $query = DB::run() -> queryFetch("SELECT count(*) as `total_comments` FROM `comments` WHERE relate_type=? AND `relate_id`=? LIMIT 1;", ['news', $id]);
-
- if (!empty($query)) {
- $total_comments = (empty($query['total_comments'])) ? 1 : $query['total_comments'];
- $end = ceil($total_comments / $config['postnews']);
-
- redirect('/news/'.$id.'/comments?page='.$end);
-
- } else {
- show_error('Ошибка! Данной новости не существует!');
- }
-
- echo '<i class="fa fa-arrow-circle-left"></i> <a href="/news">К новостям</a><br />';
- break;
-
- endswitch;
-
- App::view($config['themes'].'/foot');