Орла
Области
Компаний
Пользователи
Галерея
Фиксированные новости
Орла
Отзывы о фирмах
Тарифы
Пользователи
Области
Банкоматы
Торговые точки
Доска объявлений
Курсы валют
Скидки
организации Орла
организации области
товары
сайты
сайты Орел
Данные
Разделы
Поиск
Поиск запросы
Статистика
Показы каталога организаций
Статистика клиенты
Пользователи
Сайты
Управление сайтом
Анкета
Аптеки
Афиша
Афиша новая
Баннеры
Бизнес >
Викторина
Голосование
Гость на сайте
Истории
Календарь событий
Каталоги >
Конкурс красоты
Конкурс аудио
Консультации
Меню
Новое на сайте
Новости >
Организации >
Программа ТВ
Публикации
Разделы сайта
Рассылка
Рестораны
Секрет фирмы >
Сервисы >
Ссылки
Тесты
Файловый менеджер
Форум
Фотогалерея
Обратная связь
Недвижимость
Новый год
Тексты
Пользователи
Юридический рейтинг
Отзывы на товары
Бан пользователей
Жалобы
Новые тесты
Коронавирус
Файловый менеджер
Имя файла
Comments.php
Содержимое
<?php namespace app\comments; use app\core\models\Expression; use app\forum\Articl; use app\forum\Discuss; use App; use app\forum\triggers\AnswerTrigger; use app\users\notifications\NotificationRepository; use app\users\UserRepository; /** * Класс комментариев. * В конструкторе нужно передать $objectType - news, afisha, public * Class Comments * @package app\comments */ class Comments { /** * Тип объекта из tip_obj таблицы forum_discuss * @var string */ private $_objectType; /** * Comments constructor. * @param $objectType */ public function __construct($objectType) { $this->_objectType = $objectType; return $this; } /** * Функция возвращает массив - количество обсуждений, связанных с новостью, афишей или публикацией, * в качестве параметра передается массив ID новостей * @param array $objectIds * @return array [ * 'object_id' => 'count', * .... * ] */ public function getDiscussCount(array $objectIds = []) { $sth = App::$pdo->prepare(" select count(*) as total, id_obj from articl, forum_discuss where id_parent=id_articl and id_obj in (".implode(',', $objectIds).") and tip_obj='{$this->_objectType}' GROUP BY id_obj "); $sth->execute(); $discussItems = $sth->fetchAll(); $returnArray = []; foreach ($objectIds as $objectId) { $value = 0; foreach ($discussItems as $item) { if ($item['id_obj'] == $objectId) { $value = $item['total']; } } $returnArray[$objectId] = $value; } return $returnArray; } /** * Функция возвращает количество комментариев, по id сущности, например по ID новости, * @param $id * @return int */ public function getDiscussCountById($id) { return App::$command ->createCommand(' select count(*) as total, id_obj from articl, forum_discuss where id_parent=id_articl and id_obj = :id_obj and tip_obj="'.$this->_objectType.'" GROUP BY id_obj ') ->bindValue(':id_obj', $id) ->queryOne('total', 0); } /** * Функция возвращает true если для сущности (новости, афиши) с $id есть комментарии и false в противном случае * @param $id * @return bool */ public function isDiscussById($id) { $command = App::$command->createCommand(' SELECT COUNT(id) as total FROM forum_discuss WHERE id_obj = :id_obj and tip_obj = "'.$this->_objectType.'" '); $command->bindValue(':id_obj', $id); return $command->queryOne('total', 0) > 0; } /** * Функция начинает дискуссию для сущности (новости, афиши) с $id * @param $id - ID сущности (новости, афиши) * @param $userId - ID пользователя, от которого будет публиковаться комментарий * @param $forumId - ID форума, к которому привязываемся. * @param $theme - тема форума * @param $message - собщение форума * @param $date - дата создания сообщения * @return bool */ public function startDiscuss($id, $userId, $forumId, $theme, $message, $date = null) { $articl = new Articl(); $articl->id_author = $userId; $articl->data = $date == null ? new Expression('NOW()') : $date; $articl->id_forum = $forumId ; $articl->id_parent = 0; $articl->tema = $theme; $articl->body = $message; $articl->ip = App::$request->getIp(); $articl->moder = '0'; $articl->podpis = 1; $articl->cookie = App::$cookies->get('sid', ''); $articl->fcookie = App::$cookies->get('fsid', ''); if ($articl->save() == false) { return false; } $articl->id_parent = $articl->id; $articl->save(); $discuss = new Discuss(); $discuss->id_obj = $id; $discuss->tip_obj = $this->_objectType; $discuss->id_forum = $forumId; $discuss->id_articl = $articl->id; $discuss->save(); return $articl->id; } /** * Функция добавляет сообщение * @param $id - ID сущности (новости, афиши, публикации) * @param $userId - идентификатор пользователя, от которого добавляется комментарий * @param $forumId - идентификатор форума, куда добавляется комментарий. * @param $commentParentId * @param $message * @param $date - дата создания сообщения * @return bool */ public function addMessage($id, $userId, $forumId, $commentParentId, $message, $date = null) { $model = new Articl(); $model->id_author = $userId; $model->data = $date == null ? new Expression('NOW()') : $date; $model->id_forum = $forumId; $model->id_parent = $id; $model->tema = ''; $model->body = $message; $model->ip = App::$request->getIp(); $model->moder = '0'; $model->podpis = 1; $model->cookie = App::$cookies->get('sid', ''); $model->fcookie = App::$cookies->get('fsid', ''); $model->comment_parent_id = $commentParentId; if ($model->save()) { // уведомление об ответе на сообщение new AnswerTrigger($model->id, new UserRepository(), new NotificationRepository()); return $model->id; } else { return false; } } /** * Функция возвращает ID дискуссии, зная ID сущности (новости, публикации) * @param $id * @return mixed|null */ public function getDiscussId($id) { $command = App::$command->createCommand(' SELECT id_articl FROM forum_discuss WHERE id_obj = :id_obj AND tip_obj = "'.$this->_objectType.'" ORDER BY id_articl ASC LIMIT 1; '); $command->bindValue(':id_obj', $id); return $command->queryOne('id_articl'); } /** * Возвращает ID сущности (новости, афиши), которая связана с комментарием $commentId * @param $commentId * @return bool|mixed|null */ public function getEntityIdByCommentId($commentId) { $command = App::$command->createCommand(' SELECT id_parent FROM articl WHERE id = :comment_id '); $command->bindValue(':comment_id', $commentId); $commentId = $command->queryOne('id_parent', null); if ($commentId == null) { return false; } // ищем ID новости по корневому комментарию. $command = App::$command->createCommand(' SELECT id_obj as news_id FROM forum_discuss WHERE id_articl = '.(int)$commentId.' AND tip_obj = "'.$this->_objectType.'" '); return $command->queryOne('news_id', null); } /** * Функция возвращает массив прикрепленных изображений к комментарию $commentId * @param $commentId * @return array */ public function getImages($commentId) { $command = App::$command->createCommand(' SELECT id, image FROM articl_photo WHERE articl_id = '.(int)$commentId.' '); return $command->queryAll(); } public static function getComment($id) { return App::$command ->createCommand(' SELECT * FROM articl WHERE id = :id ') ->bindValue(':id', $id) ->queryOne(); } /** * Функция возвращает дерево комментариев, сгруппированных по parent_id * @return array */ public function getCommentsTreeArray($id) { $discussId = static::getDiscussId($id); if ($discussId == null) { return []; } $comments = App::$command->createCommand(' SELECT articl.id, articl.data, articl.id_author, articl.id_forum, articl.id_parent, articl.tema, articl.body, articl.comment_parent_id, user.name as user_name, user.avatar as user_photo FROM articl LEFT JOIN `user` ON user.id = articl.id_author WHERE articl.id_parent = :id_parent ORDER BY articl.id ASC '); $comments->bindValue(':id_parent', $discussId); $comments = $comments->queryAll(); foreach ($comments as $key => $comment) { $comments[$key]['images'] = self::getImages($comment['id']); $comments[$key]['voted_plus'] = [];//NewsCommentsLikes::getPlusVotesArray($comment['id']); $comments[$key]['voted_minus'] = [];//NewsCommentsLikes::getMinusVotesArray($comment['id']); } $transformComments = []; foreach ($comments as $key => $comment) { $transformComments[$comment['comment_parent_id']][] = $comment; } return $transformComments; } public static function isAllowToEdit(array $comment) { if (App::$user->isGuest()) { return false; } $login = App::$user->getUserLogin(); $adminLocalLevel = App::$adminList->getLocalLevel($login); if ($adminLocalLevel < 500 && $comment['id_author'] != App::$user->getId()) { return false; } if ($adminLocalLevel < 500) { $datetime2 = new \DateTime(); $datetime1 = new \DateTime($comment['data']); $interval = $datetime1->diff($datetime2); $minutes = $interval->h * 60; $minutes = $interval->i + $minutes; if ($minutes > 30) { return false; } } return true; } public static function isAllowToDelete(array $comment) { if (App::$user->isGuest() == true) { return false; } $login = App::$user->getUserLogin(); if (App::$adminList->getLocalLevel($login) < 500) { return false; } return true; } }
/app/comments/
Имя
Дата
Размер
..
2026-10-01
forms
2017-07-11
helpers
2017-06-08
images
2021-09-02
CommentFormEditor.php
2018-07-11
498 байт
Comments.php
2019-01-31
11 кб.
CommentsView.php
2017-06-08
499 байт
ForumObjects.php
2017-08-16
1 кб.
ICommentVote.php
2017-01-26
578 байт
TreeCommentsRenderer.php
2019-08-08
5 кб.
/app/comments
Загрузить файлы
Файл 1
Файл 2
Файл 3