Файл: CMS/news/index.php
Строк: 381
<?php
define('CMS',TRUE);
define('ROOT', '../');
include('../core/inc.php');
$is_admin = is_admin(array(101)) ? true : false;
$id = !empty($_GET['id']) ? abs(intval($_GET['id'])) : 0;
$mod = !empty($_GET['m']) ? check($_GET['m']) : 'index';
$page = !empty($_GET['page']) ? abs(intval($_GET['page'])) : 0;
$onpage = !empty($config['news_num']) ? (int) $config['news_num'] : 10;
if ($page > 1) $from = ($page - 1) * $onpage; else $from = 0;
if (!empty($mod) && $mod == 'hide') {
if (empty($_COOKIE['hidenews'])) {
setcookie('hidenews', 1, time() + 3600 * 24 * 7, '/', '');
}
else {
setcookie('hidenews', '', 0, '/', '');
}
redirect( $config['site_url'] . DS . gen_uri('index', '', RND) );
}
else if (!empty($id) && !empty($mod) && $mod == 'end') { // Переадресация на последнюю страницу
$row = $db->selectRow("SELECT `news_id`, `news_comments` FROM ?_news WHERE `news_id` = ? LIMIT 1;", $id);
if (!empty($row)) {
$end = ceil( $row['news_comments'] / $onpage );
if ($end < 1) $end = 1;
gen_red('news', $row['news_id'], 'page=' . $end . '#down');
}
else {
$inSes->addMessage('Ошибка! Данной новости не существует!');
gen_red('index', '', RND);
}
}
else if (!empty($id) && !empty($mod) && $mod == 'viewcomm') { // Переход к сообщение
$cid = !empty($_GET['cid']) ? num($_GET['cid']) : 0;
$count = (int) $db->selectCell("SELECT COUNT(*) FROM ?_comments
WHERE `comm_id` <= ? AND `comm_post` = ? AND `comm_type` = 'news'
ORDER BY `comm_date` ASC LIMIT 1;", $cid, $id);
if (!empty($count)) {
$end = ceil( $count / $onpage );
if ($end < 1) $end = 1;
gen_red('comments', $id, 'page=' . $end . '#down');
}
else {
$inSes->addMessage('Ошибка! Комментарий к данной новости не существует!');
gen_red('index', '', RND);
}
}
else if (!empty($mod) && $mod == 'search') {
$q = !empty($_REQUEST['q']) ? (string) $_REQUEST['q'] : '';
$logic = !empty($_REQUEST['logic']) ? (string) $_REQUEST['logic'] : 'or';
$lang['OR'] = 'или';
$lang['AND'] = 'и';
$lang['SEARCH_WORD'] = '«%s»';
$error = '';
if (!empty($_REQUEST['q'])) {
if (!in_array($logic, array('and', 'or'))) {
$logic = 'or';
}
$logic = strtoupper( $logic );
$q = preg_replace('#[^a-zA-Zа-яА-Я0-9 -_@:;()+=.,&*!?<>#$"'/\]#siu', '', $q);
$q = preg_replace('/s/u', ' ', $q);
$q = preg_replace('/ {2,}/u', ' ', $q);
$q = strip_tags($q);
if (get_magic_quotes_gpc()) {
$q = stripslashes($q);
}
$q = trim( $q );
if ( $q == '' ) {
$inSes->addMessage('Произошла Ошибка! Вы не ввели запрос "Что искать?"');
gen_red('search', '', RND);
}
else {
$q = explode(' ', $q);
array_splice($q, 3);
$escape_array = array(
"x2a" => "", //*
"x22" => "", //"
"x2b" => "", //+
"x2d" => "", //-
"x7e" => "", //~
"x28" => "", //(
"x29" => "", //)
"x3c" => "", //<
"x3e" => "" //>
);
for($i = 0, $query = array(); $i < count( $q ); $i++) {
$query[] = sprintf($lang['SEARCH_WORD'], check($q[$i]));
$q[$i] = strtr($q[$i], $escape_array);
}
$query = implode(' ' . $lang[$logic] . ' ', $query);
for($i = 0, $part_of_query = '', $sep = ''; $i < count( $q ); $i++, $sep = $logic) {
$part_of_query .= $sep . " MATCH(`news_title`,`news_text`) AGAINST('" . mysql_escape_string($q[$i]) . "*' IN BOOLEAN MODE) ";
}
$onpage = !empty($config['news_num']) ? num($config['news_num']) : 10;
if ($page > 1) $from = ($page - 1) * $onpage; else $from = 0;
$rows = $db->selectPage( $total, "SELECT * FROM ?_news
WHERE " . $part_of_query . "
ORDER BY `news_time` DESC
LIMIT ?d, ?d", $from, $onpage);
if (!empty($rows) && $total > 0) {
$c = $from + 1;
$start = ($page - 1) * $onpage;
if ($start < 0) $start = 0;
if ($start > $total - 1) $start = $total - 1;
$stop = $start + $onpage;
if ($stop > $total) $stop = $total;
$v[] = '<div class="b">';
$v[] = '- Всего найдено: <strong>' . intval( $total ) . '</strong><br />';
$v[] = '- Показаны результаты с <strong>' . intval( $start + 1) . '</strong>';
$v[] = ' по <strong>' . intval( $stop ) . '</strong> место<br /></div>';
foreach( $rows as $row ) {
$icon = ($row['news_closed'] == 0) ? 'document_plus.gif' : 'document_minus.gif';
$v[] = '<div class="b">' . icon($icon, 'icons');
$v[] = '<a href="' . gen_uri('news', $row['news_id']) . '"><b>' . $row['news_title'] . '</b></a>';
$v[] = '<small> (' . get_date($row['news_time']) . ')</small><br />';
$v[] = format_text($row['news_text']) . '<br />';
$v[] = '- Разместил: ' . users_anketa($row['news_author']) . '<br /></div>';
}
show_header('Результаты поиска - ' . $query);
echo implode('',$v);
$_q = 'q=' . urlencode(implode(' ', $q));
$_q .= '&logic=' . strtolower($logic);
echo show_pages('search', $_q, 'p');
}
else {
show_header('Поиск по новостям');
show_error('По вашему запросу ' . $query . ' ни чего не найдено!');
}
}
}
else {
show_header('Поиск по новостям');
}
$form = new cmsForm(gen_uri('search', '', RND), 'post');
$form->addText('Ваш запрос:', 'q', request('q'));
$form->addRadio('', 'logic', strtolower($logic), array('and' => 'Все слова', 'or' => 'Любое из слов'));
echo $form->Submit('Искать');
unset($form);
}
else if (!empty($id) && !empty($mod) && $mod == 'add') { // Добавление комментариев
$msg = !empty($_POST['text']) ? check($_POST['text']) : '';
if ($is_logged) {
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
if (cms_strlen(trim($msg)) >= 5 && cms_strlen($msg) < 1000) {
$row = $db->selectRow("SELECT * FROM ?_news WHERE `news_id` = ? LIMIT 1;", $id);
if (!empty($row)) {
if (empty($row['news_closed'])) {
if (is_quarantine($log)) {
if (is_flood($log)) {
$msg = antimat($msg);
$msg = smiles($msg);
$date = date('Y-m-d H:i:s', SITE_TIME);
$db->query("INSERT INTO ?_comments SET `comm_post` = ?, `comm_text` = ?, `comm_author` = ?, `comm_type` = 'news', `comm_date` = ?, `comm_ip` = ?, `comm_ua` = ?", $id, $msg, $log, $date, $ip, $brow);
//$db->query("DELETE FROM ?_commnews WHERE `commnews_news_id` = ? AND `commnews_time` < (SELECT MIN(`commnews_time`) FROM (SELECT `commnews_time` FROM ?_commnews WHERE `commnews_news_id` = ? ORDER BY `commnews_time` DESC LIMIT " . $config['maxkommnews'] . ") AS del);", $id, $id);
$db->query("UPDATE ?_news SET `news_comments` = (`news_comments` + 1) WHERE `news_id` = ?;", $id);
$db->query("UPDATE ?_users SET `users_allcomments` = (`users_allcomments` + 1), `users_point` = (`users_point` + ?), `users_money` = (`users_money` + ?) WHERE `users_login` = ?", $config['comm_add_point'], $config['comm_add_money'], $log);
$inSes->addMessage('Сообщение успешно добавлено!', 'ok');
}
else $inSes->addMessage('Антифлуд! Разрешается отправлять сообщения раз в ' . flood_period() . ' секунд!');
}
else $inSes->addMessage('Карантин! Вы не можете писать в течении ' . round($config['karantin'] / 3600) . ' часов!');
}
else $inSes->addMessage('Ошибка! Комментирование данной новости запрещено!');
}
else $inSes->addMessage('Ошибка! Выбранная вами новость не существует, возможно она была удалена!');
}
else $inSes->addMessage('Ошибка! Слишком длинное или короткое сообщение!');
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
else $inSes->addMessage('Вы не авторизованы, чтобы добавить сообщение, необходимо');
gen_red('end', $id);
}
else if (!empty($mod) && $mod == 'del_comm') { // Удаление комментариев
$del = !empty($_POST['del']) ? intar($_POST['del']) : 0;
if (is_admin(array(101, 102, 103, 105))) {
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
if ($del > 0) {
$del = is_array($del) ? $del : array($del);
$del = implode(',', $del);
$db->query("DELETE FROM ?_comments WHERE `comm_id` IN(" . $del . ") AND `comm_type` = 'news'");
$db->query("UPDATE ?_news SET `news_comments` = (SELECT COUNT(1) FROM ?_comments
WHERE ?_news.`news_id` = ?_comments.`comm_post` AND `comm_type` = 'news');");
$inSes->addMessage('Выбранные комментарии успешно удалены!', 'ok');
}
else $inSes->addMessage('Ошибка! Отстутствуют выбранные комментарии для удаления!');
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
else $inSes->addMessage('Ошибка! Удалять сообщения могут только модераторы!');
gen_red('comments', '', RND);
}
else if (!empty($mod) && $mod == 'comments') { // Список последних комментариев
show_header('Новости сайта - Список последних комментариев');
$onpage = !empty($config['comm_num']) ? num($config['comm_num']) : 10;
if ($page > 1) $from = ($page - 1) * $onpage; else $from = 0;
$_SESSION[SP]['comm'] = !empty($_SESSION[SP]['comm']) ? num($_SESSION[SP]['comm']) : 1;
$_SESSION[SP]['comm'] = (!empty($_GET['sort']) && in_array($_GET['sort'],array(1,2))) ? num($_GET['sort']) : num($_SESSION[SP]['comm']);
$order = ($_SESSION[SP]['comm'] == 1) ? 'DESC' : 'ASC';
$coms = $db->selectPage( $total, "SELECT `c`.*, `v`.`visit_nowtime`, `u`.`users_gender`, `n`.`news_title`, `n`.`news_comments`
FROM ?_comments `c` LEFT JOIN ?_users `u`
ON `c`.`comm_author` = `u`.`users_login`
LEFT JOIN ?_users_visit `v`
ON `c`.`comm_author` = `v`.`visit_user`
LEFT JOIN ?_news `n`
ON `c`.`comm_post` = `n`.`news_id`
WHERE `c`.`comm_type` = 'news'
ORDER BY `c`.`comm_date` " . $order . "
LIMIT ?d, ?d", $from, $onpage );
echo '<div class="b"><span><b>Комментарии</b> (' . num($total) . ')</span><br />';
echo 'Показывать новые: ';
if ($_SESSION[SP]['comm'] == 1) echo '<a href="' . gen_uri('comments', $id, 'sort=2&' . RND) . '">вверху</a> | <b>внизу</b>';
else echo '<b>вверху</b> | <a href="' . gen_uri('comments', $id, 'sort=1&' . RND) . '">внизу</a>';
echo '</div>';
if (!empty($coms) && $total > 0) {
$is_admin = is_admin(array(101, 102, 103, 105));
if ($is_admin) {
echo '<form action="' . gen_uri('del_comm', '', 'rnd=' . $_SESSION['token']) . '" method="post" name="comments">';
}
$i = $from + 1;
foreach($coms as $com) {
$cid = num($com['comm_id']);
echo '<div class="b">';
echo '<div class="img">' . $i++ . '. ' . user_visit_icon($com['comm_author'], $com['users_gender'], $com['visit_nowtime']) . '</div>';
echo '<b>' . users_anketa($com['comm_author']) . '</b>';
echo '<div class="right"> (' . get_date(strtotime($com['comm_date'])) . ')</div><br />';
echo nl2br(bb_code($com['comm_text'])) . '<br />';
if (is_admin()) {
echo '<input type="checkbox" name="del[]" value="' . $cid . '" />';
}
if (!empty($config['anonymity'])) {
echo '<span class="data">(' . $com['comm_ua'] . ', ' . $com['comm_ip'] . ')</span>';
}
echo '</div>';
}
echo show_pages('comments', RND, 'p');
if ($is_admin) {
echo '<div class="b">';
echo '<input type="checkbox" name="master_box" title="Отметить всё" onclick="javascript:ckeck_uncheck_all()">';
echo '<input type="submit" class="btns" value="Удалить выбранное" /></form></div>';
echo <<<JSCRIPT
<script language='JavaScript' type="text/javascript">
<!--
function ckeck_uncheck_all() {
var frm = document.comments;
if(frm.master_box.checked == true){ frm.master_box.checked = false; }
else{ frm.master_box.checked = true; }
for (var i=0;i<frm.elements.length;i++) {
var elmnt = frm.elements[i];
if (elmnt.type=='checkbox') {
if(frm.master_box.checked == true){ elmnt.checked=false; }
else{ elmnt.checked=true; }
}
}
}
-->
</script>
JSCRIPT;
}
}
else {
show_error('Комментарии не найдены!');
}
}
else if (!empty($id) && !empty($mod) && $mod == 'news') { // Чтение новости
$row = $db->selectRow("SELECT * FROM ?_news WHERE `news_id` = ? LIMIT 1;", $id);
if (!empty($row)) {
if (!empty($_POST['del'])) {
$del = intar($_POST['del']);
if (is_admin(array(101, 102, 103, 105))) {
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
if ($del > 0) {
$del = is_array($del) ? $del : array($del);
$del = implode(',', $del);
$delcomments = $db->query("DELETE FROM ?_comments
WHERE `comm_id` IN(" . $del . ") AND `comm_post` = ? AND `comm_type` = 'news'", $id);
$db->query("UPDATE ?_news SET `news_comments` = (`news_comments` - ?) WHERE `news_id` = ?;", $delcomments, $id);
$inSes->addMessage('Выбранные комментарии успешно удалены!', 'ok');
}
else $inSes->addMessage('Ошибка! Отстутствуют выбранные комментарии для удаления!');
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
else $inSes->addMessage('Ошибка! Удалять сообщения могут только модераторы!');
gen_red('news', $id, RND);
}
show_header('Новости сайта - ' . $row['news_title']);
?>
<div class="b">
<?=icon('post_new.png', 'icons')?>
<b><?=$row['news_title']?></b><small> (<?=get_date($row['news_time'])?>)</small><br />
<?=nl2br(bb_code($row['news_text']))?><br />
- Разместил: <?=users_anketa($row['news_author'])?><br />
</div>
<?php
$comm_type = 'news';
$comm_url = 'news';
// Подключили комменты
include( MODULES_PATH . 'comments.inc.php' );
if ($is_logged) {
if (!empty($news['news_closed'])) {
show_error('Комментирование данной новости закрыто!');
}
else {
if (!empty($_GET['code'])) include( MODULES_PATH . 'code.inc.php' );
else if (!empty($_GET['smiles'])) include( MODULES_PATH . 'smiles.inc.php' );
$form = new cmsForm(gen_uri('add', $id, 'rnd=' . $_SESSION['token']), 'post', ' name="form"');
$form->addCode('Сообщение: <small>[<a href="' . gen_uri($mod, $id, 'smiles=1') . '">Смайлы</a>] ');
$form->addCode('[<a href="' . gen_uri($mod, $id, 'code=1') . '">ББ-коды</a>]</small><br />');
$form->addTextarea('', 'text', request('text'));
echo $form->Submit('Добавить', 'submit');
unset($form);
}
}
else {
show_login('Вы не авторизованы, для комментирования, необходимо');
}
}
else {
$inSes->addMessage('Ошибка! Выбранная вами новость не существует, возможно она была удалена!');
gen_red('index', '', RND);
}
}
else {
show_header('Новости сайта ' . $config['site_name']);
echo '<div class="b"><b>Новости</b> | ';
echo '<a href="/journal/' . gen_uri('index', '', RND) . '">Журнал</a></div>';
$rows = $db->selectPage($total, "SELECT * FROM ?_news ORDER BY `news_id` DESC LIMIT ?d, ?d", $from, $onpage);
if (!empty($rows) && $total > 0) {
foreach($rows as $row) {
$icon = ($row['news_closed'] == 0) ? 'document_plus.gif' : 'document_minus.gif';
?>
<div class="b">
<?=icon($icon, 'icons')?>
<a title="<?=$row['news_title']?>" href="<?=gen_uri('news', $row['news_id'])?>"><b><?=$row['news_title']?></b></a>
<small> (<?=get_date($row['news_time'])?>)</small><br />
<?=format_text($row['news_text'])?><br />
- Разместил: <?=users_anketa($row['news_author'])?><br />
</div>
<?php
}
echo show_pages('index', '', 'p');
}
else {
show_error('Новостей еще нет!');
}
echo '<div class="b">';
echo icon('mail.png') . ' <a title="RSS подписка" href="rss.xml">RSS подписка</a><br />';
echo icon('list.png') . ' <a href="' . gen_uri('comments', '', RND) . '">Комментарии</a><br />';
if (is_admin(array(101))) echo icon('add.png') . '<a href="' . gen_admin('?m=add_news') . '">Добавить новость</a>';
echo '</div>';
}
if (!empty($mod) && $mod != 'index') {
echo '<div class="b">';
echo icon('return.png') . ' <a title="К новостям" href="' . gen_uri('index', '', RND) . '">К новостям</a><br />';
echo '</div>';
}
show_footer();
?>