Вход Регистрация
Файл: inc/Comments.php
Строк: 413
<?php

/* Комментарии */

class Comments {

    
// Настройки и т. п.
    
public $sys$connect$user;

    
// установки
    
public $count_comm;
    private 
$did$type$author$adm$redirect;

    function 
__construct($did$type$author$adm$redirect$title 'Комментарии') {

        global 
$sys$connect$user;

        
// установки
        
$this->did $did;
        
$this->type $type;
        
// автор темы и т. п.
        
$this->author $author;
        
// Доступ для админки
        
$this->adm $adm;
        
// Адрес перенаправления
        
$this->redirect $redirect;

        
// Настройки
        
$this->sys $sys;
        
$this->connect $connect;

        
// Юзер
        
if (isset($user))
            
$this->user $user;

        
// количество комментариев
        
$this->count_comm self::CountMess($did$type);

        
// Заголовок
        
echo '<div class="title">'.$title.' ('.$this->count_comm.')</div>';

    }

    
/* Удаление комментария */

    
public static function Del($id) {

        global 
$connect;

        
$del_comm $connect->prepare("delete from `comments` where `id` = ?");

        
$file GlobFiles::findById($idGlobFiles::FilesGlobFiles::MaskComment);

        if (
$file// чистим мусор
            
unlink($file);

        return 
$del_comm->execute(array($id)); // удаляем сообщение

    
}

    
/* Удаление старых комментариев */

    
public static function DelOldMess($did$type$date) {

        global 
$connect;

        
/* Чистим мусор и удаляем сообщения */

        
$data $connect->prepare("select * from `comments` where `did` = :did and type = :type and `date` < :date order by `id` desc");
        
$data->bindValue(':did'$didPDO::PARAM_INT);
        
$data->bindValue(':type'$typePDO::PARAM_INT);
        
$data->bindValue(':date'$datePDO::PARAM_INT);
        
$data->execute();
        
$sql $data->fetchAll();

        foreach (
$sql as $row)
            
self::Del($row['id']);

        return 
true;

    }

    
/* Удаление комментариев юзера */

    
public static function DelUserMess($uid) {

        global 
$connect;

        
$data $connect->prepare("select * from `comments` where `uid` = :uid order by `id` desc");
        
$data->bindValue(':uid'$uidPDO::PARAM_INT);
        
$data->execute();
        
$sql $data->fetchAll();

        foreach (
$sql as $row)
            
self::Del($row['id']);

        return 
true;

    }

    
/* Удаление комментариев */

    
public static function DelMess($did$type) {

        global 
$connect;

        
$data $connect->prepare("select * from `comments` where `did` = :did and `type` = :type order by `id` desc");
        
$data->bindValue(':did'$didPDO::PARAM_INT);
        
$data->bindValue(':type'$typePDO::PARAM_INT);
        
$data->execute();
        
$sql $data->fetchAll();

        foreach (
$sql as $row)
            
self::Del($row['id']);

        return 
true;

    }

    
/* Удаление комментариев во всем разделе */

    
public static function AllDelMess($type) {

        global 
$connect;

        
$data $connect->prepare("select * from `comments` where `type` = :type order by `id` desc");
        
$data->bindValue(':type'$typePDO::PARAM_INT);
        
$data->execute();
        
$sql $data->fetchAll();

        foreach (
$sql as $row)
            
self::Del($row['id']);

        return 
true;

    }

    
/* Количество комментариев */

    
public static function CountMess($did$type) {

        global 
$connect;

        
$stmt_comm $connect->prepare("select count(*) from `comments` where `did` = ? and `type` = ?");
        
$stmt_comm->execute(array($did$type));
        
$count_comm $stmt_comm->fetchColumn();

        return 
$count_comm;

    }

    
/* Количество комментариев во всем разделе */

    
public static function AllMess($type) {

        global 
$connect;

        
$stmt_comm $connect->prepare("select count(*) from `comments` where `type` = ?");
        
$stmt_comm->execute(array($type));
        
$count_comm $stmt_comm->fetchColumn();

        return 
$count_comm;

    }

    
/* Количество новых комментариев */

    
public static function NewMess($did$type$time false$me 0) {

        global 
$connect;

        if (!
$time)
             
$time mktime(000);

        
$stmt_comm $connect->prepare("select count(*) from `comments` where `did` = ? and `type` = ? and `date` > ? and `uid` != ?");
        
$stmt_comm->execute(array($did$type$time$me));
        
$count_comm $stmt_comm->fetchColumn();

        return 
$count_comm;

    }

    
/* Количество новых комментариев во всем разделе */

    
public static function AllNewMess($type$time false$me 0) {

        global 
$connect;

        if (!
$time)
             
$time mktime(000);

        
$stmt_comm $connect->prepare("select count(*) from `comments` where `type` = ? and `date` > ? and `uid` != ?");
        
$stmt_comm->execute(array($type$time$me));
        
$count_comm $stmt_comm->fetchColumn();

        return 
$count_comm;

    }

    
/* Форма ввода */

    
public function InsertForm($insert_notif$cit_notif$ans_notif$attach false) {

        if (isset(
$this->user)) {

            
SmilesAndBB();

            
// prepared
            
$strow $this->connect->prepare("select * from `comments` where `id` = ? and `type` = ? and `did` = ?");
            
$in_comment $this->connect->prepare("insert into `comments` set `date` = ?, `uid` = ?, `text` = ?, `did` = ?, `type` = ?");

            if (isset(
$_GET['file'])) {
                
$strow->execute(array($_GET['file'], $this->type$this->did));
                
$row $strow->fetch();
                
$file GlobFiles::findById($_GET['file'], GlobFiles::FilesGlobFiles::MaskComment);
                if (
$row && ($this->adm || $row['uid'] == $this->user['id']) && $file) {
                    if (isset(
$_POST['yes'])) {
                        
unlink($file);
                        
header('Location: '.$this->redirect);
                    }
                    elseif (isset(
$_POST['no'])) {
                        
header('Location: '.$this->redirect);
                    }
                    echo 
'<div class="menu">
                    <form action="" method="POST">
                    <input type="submit" name="yes" value="Удалить файл ('
.basename($file).')"/>
                    <input type="submit" name="no" value="Отмена"/>
                    </form></div>'
;
                } else {
                    
header('Location: '.$this->redirect);
                }
            }
            elseif (isset(
$_GET['edit'])) {
                
$strow->execute(array($_GET['edit'], $this->type$this->did));
                
$row $strow->fetch();
                if (
$row && $row['read'] == && $row['uid'] == $this->user['id']) {
                    
$file GlobFiles::findById($_GET['edit'], GlobFiles::FilesGlobFiles::MaskComment);
                    if (isset(
$_POST['yes'])) {
                        
$error '';
                        if (empty(
$_POST['text'])) {
                            
$error.= 'Введите сообщение!<br/>';
                        }
                        elseif (
mb_strlen($_POST['text']) < || mb_strlen($_POST['text']) > 2500) {
                            
$error.= 'Текст должен содержать не менее 2 символов и не более 2500 символов!<br/>';
                        }
                        if (
$attach && file_exists($_FILES['filename']['tmp_name'])) {
                            if (!
BeforeUpload::AttachIMG($_FILES['filename'])) {
                                
$error.= 'Неверный тип файла!<br/>';
                            }
                            if (
$_FILES['filename']['size'] > $this->sys['system']['upload_chat']) {
                                
$error.= 'Максимальный размер файла - '.byte_conv($this->sys['system']['upload_chat']).'!<br/>';
                            }
                        }
                        if (
$error) {
                            echo 
'<div class="menu">'.$error.'</div>';
                        } else {
                            
$stmt $this->connect->prepare("update `comments` set `text` = ? where `id` = ?");
                            if (
$stmt->execute(array($_POST['text'], $_GET['edit']))) {
                                
// Загрузка файла
                                
if ($attach && file_exists($_FILES['filename']['tmp_name'])) {
                                    
$files $_GET['edit']."_comment_".random_int(1111199999)."_".$_FILES['filename']['name'];
                                    
move_uploaded_file($_FILES['filename']['tmp_name'], $_SERVER["DOCUMENT_ROOT"]."/files/".$files);
                                    if (
$file)
                                        
unlink($file);
                                }
                                
header('Location: '.$this->redirect);
                            } else {
                                echo 
'<div class="menu">Произошла ошибка!</div>';
                            }
                        }
                    }
                    elseif (isset(
$_POST['no'])) {
                        
header('Location: '.$this->redirect);
                    }
                    echo 
'<div class="menu">
                    <form action="" method="POST" enctype="multipart/form-data">
                    Сообщение:<br/><textarea data-select-range id="message" name="text" rows="5" cols="25">'
.$row['text'].'</textarea><br/>
                    '
.($attach 'Прикрепить изображение:<br/><input type="file" name="filename"><br/>
                    '
.($file 'Старое изображение: '.iconFile($file).'<a data-noajax href="/files/'.basename($file).'">'.basename($file).'</a> ('.get_filesize($file).')<br/>' '') : '').'
                    <input type="submit" name="yes" value="Сохранить ('
.intval($_GET['edit']).')"/>
                    <input type="submit" name="no" value="Отмена"/>
                    </form></div>'
;
                } else {
                    
header('Location: '.$this->redirect);
                }
            }
            elseif (isset(
$_GET['cit'])) {
                
$strow->execute(array($_GET['cit'], $this->type$this->did));
                
$row $strow->fetch();
                if (
$row) {
                    
$file GlobFiles::findById($_GET['cit'], GlobFiles::FilesGlobFiles::MaskComment);
                    
$cit str_replace(['[cit]''[/cit]'], null'[u]'.(($row_u user($row['uid'])) ? $row_u['login'] : 'DELETED').'[/u] ('.date('d.m.Y H:i'$row['date']).')[br]'.$row['text'].($file '[br]Файл: [url='.ROOT.'/files/'.basename($file).']'.basename($file).'[/url] ('.get_filesize($file).')' ''));
                    if (isset(
$_POST['yes'])) {
                        
$error '';
                        if (
$this->user['datereg'] > time() - 60 $this->sys['system']['fludtime'] && $this->user['admin'] == 0) {
                            
$error.= 'Для возможности отправлять сообщения с момента регистрации должно пройти: '.restime(60 $this->sys['system']['fludtime']).'!<br/>';
                        }
                        elseif (isset(
$_SESSION['guest_add']) && $_SESSION['guest_add'] > time() - $this->sys['system']['antiflud']) {
                            
$error.= 'Антифлуд! Лимит - '.quantDec($this->sys['system']['antiflud'], ['секунда''секунды''секунд']).'!<br/>';
                        }
                        elseif (
mb_strlen($_POST['text']) > 2500) {
                            
$error.= 'Текст должен содержать не более 2500 символов!<br/>';
                        }
                        if (
$attach && file_exists($_FILES['filename']['tmp_name'])) {
                            if (!
BeforeUpload::AttachIMG($_FILES['filename'])) {
                                
$error.= 'Неверный тип файла!<br/>';
                            }
                            if (
$_FILES['filename']['size'] > $this->sys['system']['upload_chat']) {
                                
$error.= 'Максимальный размер файла - '.byte_conv($this->sys['system']['upload_chat']).'!<br/>';
                            }
                        }
                        if (
$error) {
                            echo 
'<div class="menu">'.$error.'</div>';
                        } else {
                            
$message '[cit]'.$cit.'[/cit][br]'.$_POST['text'];
                            if (
$in_comment->execute(array(time(), $this->user['id'], $message$this->did$this->type))) {
                                
// Загрузка файла
                                
if ($attach && file_exists($_FILES['filename']['tmp_name'])) {
                                    
$lid $this->connect->LastInsertId();
                                    
$files $lid."_comment_".random_int(1111199999)."_".$_FILES['filename']['name'];
                                    
move_uploaded_file($_FILES['filename']['tmp_name'], $_SERVER["DOCUMENT_ROOT"]."/files/".$files);
                                }
                                if (
$this->author && $this->author != $this->user['id'])
                                    
notification($insert_notif$this->author);
                                if (
$row['uid'] != $this->user['id'] && $row['uid'] != $this->author)
                                    
notification($cit_notif$row['uid']);
                                
ratingUser($this->sys['rating']['chat'], $this->user['id']);
                                
$_SESSION['guest_add'] = time();
                                
header('Location: '.$this->redirect);
                            } else {
                                echo 
'<div class="menu">Произошла ошибка!</div>';
                            }
                        }
                    }
                    elseif (isset(
$_POST['no'])) {
                        
header('Location: '.$this->redirect);
                    }
                    echo 
'<div class="menu">
                    <form action="" method="POST" enctype="multipart/form-data">
                    <div class="cit">'
.nl2br(smiles(bb(bblinks($cit)))).'</div>
                    Сообщение:<br/><textarea data-select-range id="message" name="text" rows="5" cols="25"></textarea><br/>
                    '
.($attach 'Прикрепить изображение:<br/><input type="file" name="filename"><br/>' '').'
                    <input type="submit" name="yes" value="Цитировать ('
.intval($_GET['cit']).')"/>
                    <input type="submit" name="no" value="Отмена"/>
                    </form></div>'
;
                } else {
                    
header('Location: '.$this->redirect);
                }
            } else {
                if (isset(
$_POST['refresh'])) {
                    
header('Location: '.$this->redirect);
                }
                elseif (isset(
$_POST['addmess'])) {
                    
$error '';
                    if (
$this->user['datereg'] > time() - 60 $this->sys['system']['fludtime'] && $this->user['admin'] == 0) {
                        
$error.= 'Для возможности отправлять сообщения с момента регистрации должно пройти: '.restime(60 $this->sys['system']['fludtime']).'!<br/>';
                    }
                    elseif (isset(
$_SESSION['guest_add']) && $_SESSION['guest_add'] > time() - $this->sys['system']['antiflud']) {
                        
$error.= 'Антифлуд! Лимит - '.quantDec($this->sys['system']['antiflud'], ['секунда''секунды''секунд']).'!<br/>';
                    }
                    elseif (empty(
$_POST['text'])) {
                        
$error.= 'Введите сообщение!<br/>';
                    }
                    elseif (
mb_strlen($_POST['text']) < || mb_strlen($_POST['text']) > 2500) {
                        
$error.= 'Текст должен содержать не менее 2 символов и не более 2500 символов!<br/>';
                    }
                    if (
$attach && file_exists($_FILES['filename']['tmp_name'])) {
                        if (!
BeforeUpload::AttachIMG($_FILES['filename'])) {
                            
$error.= 'Неверный тип файла!<br/>';
                        }
                        if (
$_FILES['filename']['size'] > $this->sys['system']['upload_chat']) {
                            
$error.= 'Максимальный размер файла - '.byte_conv($this->sys['system']['upload_chat']).'!<br/>';
                        }
                    }
                    if (
$error) {
                        echo 
'<div class="menu">'.$error.'</div>';
                    } else {
                        if (
$in_comment->execute(array(time(), $this->user['id'], $_POST['text'], $this->did$this->type))) {
                            
// Загрузка файла
                            
if ($attach && file_exists($_FILES['filename']['tmp_name'])) {
                                
$lid $this->connect->LastInsertId();
                                
$files $lid."_comment_".random_int(1111199999)."_".$_FILES['filename']['name'];
                                
move_uploaded_file($_FILES['filename']['tmp_name'], $_SERVER["DOCUMENT_ROOT"]."/files/".$files);
                            }
                            if (
$this->author && $this->author != $this->user['id'])
                                
notification($insert_notif$this->author);
                            if (isset(
$_GET['ans']) && user($_GET['ans']) && $_GET['ans'] != $this->user['id'] && $_GET['ans'] != $this->author)
                                
notification($ans_notif$_GET['ans']);
                            
ratingUser($this->sys['rating']['chat'], $this->user['id']);
                            
$_SESSION['guest_add'] = time();
                            
header('Location: '.$this->redirect);
                        } else {
                            echo 
'<div class="menu">Ошибка при добавлении сообщения!</div>';
                        }
                    }
                }
                echo 
'<div class="menu">
                <form action="" method="POST" enctype="multipart/form-data">
                Сообщение:<br/><textarea data-select-range id="message" name="text" rows="5" cols="25">'
.(isset($_GET['ans']) && ($row_u user($_GET['ans'])) && $_GET['ans'] != $this->user['login'] ? '[b]'.$row_u['login'].'[/b], ' '').'</textarea><br/>
                '
.($attach 'Прикрепить изображение:<br/><input type="file" name="filename"><br/>' '').'
                <input type="submit" name="addmess" value="Написать"/>
                <input type="submit" name="refresh" value="Обновить">
                </form></div>'
;

            }

        }

    }

    
/* Для модератора */

    
public function moder() {

        
// prepared
        
$stmt_num $this->connect->prepare("select count(*) from `comments` where `id` = ? and `type` = ? and `did` = ?");

        if (
$this->adm) {
            if (isset(
$_GET['del'])) {
                
$stmt_num->execute(array($_GET['del'], $this->type$this->did));
                if (
$stmt_num->fetchColumn()) {
                    if (isset(
$_POST['yes'])) {
                        if (
self::Del($_GET['del'])) {
                            
header('Location: '.$this->redirect);
                        } else {
                            echo 
'<div class="menu">Произошла ошибка!</div>';
                        }
                    }
                    elseif (isset(
$_POST['no'])) {
                        
header('Location: '.$this->redirect);
                    }
                    echo 
'<div class="menu">
                    <form action="" method="POST">
                    <input type="submit" name="yes" value="Удалить ('
.intval($_GET['del']).')"/>
                    <input type="submit" name="no" value="Отмена"/>
                    </form></div>'
;
                } else {
                    
header('Location: '.$this->redirect);
                }
            }
            elseif (
$this->count_comm 0) {
                if (isset(
$_GET['clear'])) {
                    if (isset(
$_POST['yes'])) {
                        if (
self::DelMess($this->did$this->type)) {
                            
header('Location: '.$this->redirect);
                        } else {
                            echo 
'<div class="menu">Произошла ошибка!</div>';
                        }
                    }
                    elseif (isset(
$_POST['no'])) {
                        
header('Location: '.$this->redirect);
                    }
                    echo 
'<div class="menu">
                    <form action="" method="POST">
                    <input type="submit" name="yes" value="Подтвердить очистку комментариев"/>
                    <input type="submit" name="no" value="Отмена"/>
                    </form></div>'
;
                } else {
                    echo 
'<div class="forlink"><a href="?clear" class="links"><img src="/img/clear.png" alt="clear">Очистить комментарии</a></div>'
                }
            }
        }

    }

    
/* Вывод комментариев */

    
public function output() {

        if (
$this->count_comm == 0) {
            echo 
'<div class="menu">Комментариев нет!</div>';
        } else {

            
// прочитано кем-то
            
$read $this->connect->prepare("update `comments` set `read` = ? where `did` = ? and `type` = ? and `read` = ? and `uid` != ?");
            
$read->execute(array(1$this->did$this->type0, ($this->user['id'] ?? 0)));

            
$page = new Pagination($this->count_comm10);

            
$data $this->connect->prepare("select * from `comments` where `did` = :did and `type` = :type order by `id` desc limit :start, 10");
            
$data->bindValue(':did'$this->didPDO::PARAM_INT);
            
$data->bindValue(':type'$this->typePDO::PARAM_INT);
            
$data->bindValue(':start'$page->startPDO::PARAM_INT);
            
$data->execute();
            
$sql $data->fetchAll();

            foreach (
$sql as $row) {

                
$file GlobFiles::findById($row['id'], GlobFiles::FilesGlobFiles::MaskComment);

                
$row_u user($row['uid']);

                echo 
'<div class="menu">'.profileLink($row_u).' ('.daytime($row['date']).')<span class="online">'.online($row['uid']).'</span>
                <div class="butt1">
                '
.(isset($this->user) ? ($row_u && $row_u['id'] != $this->user['id'] ? '<a href="?ans='.$row_u['id'].'">Отв.</a>' '').'
                <a href="?cit='
.$row['id'].'">Цит.</a>
                '
.($row['read'] == && $row['uid'] == $this->user['id'] ? '<a href="?edit='.$row['id'].'">Ред.</a>' '') : '').
                (
$this->adm '<a href="?del='.$row['id'].'">Уд.</a>' '').'
                </div><hr/>'
.nl2br(smiles(bb(bblinks($row['text'])))).
                (
$file '<hr/>Файл: '.iconFile($file).'<a data-noajax href="/files/'.basename($file).'">'.basename($file).'</a> ('.get_filesize($file).')'.($this->adm || (isset($this->user) && $row['uid'] == $this->user['id']) ? '<a href="?file='.$row['id'].'"><img src="/img/delete.png" alt="delete"></a>' '') : '').'</div>';

            }

            
$page->navigation();

        }

    }

}
Онлайн: 4
Реклама