2021-07-17 17:03:39 +02:00
|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace App\Controllers\Answer;
|
|
|
|
|
|
|
|
|
|
use Hleb\Constructor\Handlers\Request;
|
2021-08-18 11:29:16 +02:00
|
|
|
|
use App\Models\{NotificationsModel, ActionModel, AnswerModel, PostModel, UserModel};
|
|
|
|
|
use Lori\{Content, Base};
|
2021-07-17 17:03:39 +02:00
|
|
|
|
|
|
|
|
|
class AddAnswerController extends \MainController
|
|
|
|
|
{
|
|
|
|
|
public function index()
|
|
|
|
|
{
|
2021-08-18 11:29:16 +02:00
|
|
|
|
$post_id = Request::getPostInt('post_id');
|
2021-07-17 17:03:39 +02:00
|
|
|
|
$post = PostModel::getPostId($post_id);
|
|
|
|
|
Base::PageError404($post);
|
2021-08-01 20:43:50 +02:00
|
|
|
|
|
2021-07-17 17:03:39 +02:00
|
|
|
|
$answer_content = $_POST['answer']; // не фильтруем (для Markdown)
|
2021-08-18 11:29:16 +02:00
|
|
|
|
$ip = Request::getRemoteAddress();
|
2021-07-17 17:03:39 +02:00
|
|
|
|
$uid = Base::getUid();
|
2021-08-01 20:43:50 +02:00
|
|
|
|
|
2021-08-08 06:48:36 +02:00
|
|
|
|
// Если пользователь забанен / заморожен
|
2021-08-15 20:51:14 +02:00
|
|
|
|
$user = UserModel::getUser($uid['user_id'], 'id');
|
2021-08-08 06:48:36 +02:00
|
|
|
|
Base::accountBan($user);
|
|
|
|
|
Content::stopContentQuietМode($user);
|
|
|
|
|
|
2021-07-17 17:03:39 +02:00
|
|
|
|
$redirect = '/post/' . $post['post_id'] . '/' . $post['post_slug'];
|
|
|
|
|
Base::Limits($answer_content, lang('Bodies'), '6', '5000', $redirect);
|
2021-08-01 20:43:50 +02:00
|
|
|
|
|
2021-07-17 17:03:39 +02:00
|
|
|
|
// Ограничим частоту добавления (зависит от TL)
|
2021-08-15 20:51:14 +02:00
|
|
|
|
if ($uid['user_trust_level'] < 2) {
|
|
|
|
|
$num_answer = AnswerModel::getAnswerSpeed($uid['user_id']);
|
2021-07-24 14:57:01 +02:00
|
|
|
|
if (count($num_answer) > 10) {
|
2021-07-17 17:03:39 +02:00
|
|
|
|
Base::addMsg(lang('limit_answer_day'), 'error');
|
|
|
|
|
redirect('/');
|
|
|
|
|
}
|
|
|
|
|
}
|
2021-07-24 14:57:01 +02:00
|
|
|
|
|
2021-07-17 17:03:39 +02:00
|
|
|
|
$answer_published = 1;
|
2021-08-01 20:43:50 +02:00
|
|
|
|
if (Content::stopWordsExists($answer_content)) {
|
2021-07-24 14:57:01 +02:00
|
|
|
|
// Если меньше 2 ответов и если контент попал в стоп лист, то заморозка
|
2021-08-15 20:51:14 +02:00
|
|
|
|
$all_count = ActionModel::ceneralContributionCount($uid['user_id']);
|
2021-08-01 20:43:50 +02:00
|
|
|
|
if ($all_count < 2) {
|
2021-08-15 20:51:14 +02:00
|
|
|
|
ActionModel::addLimitingMode($uid['user_id']);
|
2021-07-24 14:57:01 +02:00
|
|
|
|
Base::addMsg(lang('limiting_mode_1'), 'error');
|
|
|
|
|
redirect('/');
|
|
|
|
|
}
|
2021-08-01 20:43:50 +02:00
|
|
|
|
|
2021-07-17 17:03:39 +02:00
|
|
|
|
$answer_published = 0;
|
|
|
|
|
Base::addMsg(lang('answer_audit'), 'error');
|
|
|
|
|
}
|
|
|
|
|
|
2021-08-06 16:46:45 +02:00
|
|
|
|
$answer_content = Content::change($answer_content);
|
|
|
|
|
|
2021-07-17 17:03:39 +02:00
|
|
|
|
$data = [
|
|
|
|
|
'answer_post_id' => $post_id,
|
|
|
|
|
'answer_content' => $answer_content,
|
|
|
|
|
'answer_published' => $answer_published,
|
|
|
|
|
'answer_ip' => $ip,
|
2021-08-15 20:51:14 +02:00
|
|
|
|
'answer_user_id' => $uid['user_id'],
|
2021-07-17 17:03:39 +02:00
|
|
|
|
];
|
2021-08-01 20:43:50 +02:00
|
|
|
|
|
2021-08-06 16:46:45 +02:00
|
|
|
|
$last_id = AnswerModel::addAnswer($data);
|
|
|
|
|
$url_answer = $redirect . '#answer_' . $last_id;
|
2021-08-01 20:43:50 +02:00
|
|
|
|
|
2021-07-17 17:03:39 +02:00
|
|
|
|
// Оповещение админу
|
|
|
|
|
if ($answer_published == 0) {
|
2021-08-15 20:51:14 +02:00
|
|
|
|
ActionModel::addAudit('answer', $uid['user_id'], $last_id);
|
2021-07-17 17:03:39 +02:00
|
|
|
|
$type = 15; // Упоминания в посте
|
2021-08-01 20:43:50 +02:00
|
|
|
|
$user_id = 1;
|
2021-08-15 20:51:14 +02:00
|
|
|
|
NotificationsModel::send($uid['user_id'], $user_id, $type, $last_id, $url_answer, 1);
|
2021-08-01 20:43:50 +02:00
|
|
|
|
}
|
|
|
|
|
|
2021-07-17 17:03:39 +02:00
|
|
|
|
// Уведомление (@login)
|
2021-08-06 16:46:45 +02:00
|
|
|
|
if ($message = Content::parseUser($answer_content, true, true)) {
|
2021-07-17 17:03:39 +02:00
|
|
|
|
foreach ($message as $user_id) {
|
|
|
|
|
// Запретим отправку себе
|
2021-08-15 20:51:14 +02:00
|
|
|
|
if ($user_id == $uid['user_id']) {
|
2021-07-17 17:03:39 +02:00
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
$type = 11; // Упоминания в ответе
|
2021-08-15 20:51:14 +02:00
|
|
|
|
NotificationsModel::send($uid['user_id'], $user_id, $type, $last_id, $url_answer, 1);
|
2021-07-17 17:03:39 +02:00
|
|
|
|
}
|
|
|
|
|
}
|
2021-08-18 11:29:16 +02:00
|
|
|
|
|
2021-08-03 22:23:02 +02:00
|
|
|
|
// Кто подписан на данный вопрос / пост
|
2021-08-04 08:26:26 +02:00
|
|
|
|
if ($focus_all = NotificationsModel::getFocusUsersPost($post['post_id'])) {
|
2021-08-08 06:48:36 +02:00
|
|
|
|
|
2021-08-03 22:23:02 +02:00
|
|
|
|
foreach ($focus_all as $focus_user) {
|
2021-08-15 20:51:14 +02:00
|
|
|
|
if ($focus_user['signed_user_id'] != $uid['user_id']) {
|
2021-08-03 22:23:02 +02:00
|
|
|
|
$type = 3; // Ответ на пост
|
2021-08-15 20:51:14 +02:00
|
|
|
|
NotificationsModel::send($uid['user_id'], $focus_user['signed_user_id'], $type, $last_id, $url_answer, 1);
|
2021-08-03 22:23:02 +02:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2021-08-01 20:43:50 +02:00
|
|
|
|
|
2021-07-17 17:03:39 +02:00
|
|
|
|
// Пересчитываем количество ответов для поста + 1
|
|
|
|
|
PostModel::updateCount($post_id, 'answers');
|
|
|
|
|
|
2021-08-01 20:43:50 +02:00
|
|
|
|
redirect($url_answer);
|
|
|
|
|
}
|
|
|
|
|
}
|