Вход Регистрация
Файл: 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('Произошла Ошибка! Вы не ввели запрос &quot;Что искать?&quot;');
            
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 .= '&amp;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&amp;' . RND) . '">вверху</a> | <b>внизу</b>';
    else echo 
'<b>вверху</b> | <a href="' . gen_uri('comments', $id, 'sort=1&amp;' . 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();

?>
Онлайн: 1
Реклама