ADD: Система флагов
Сделаем пока только «пожаловаться» без выбора причин и пояснений к этому.
This commit is contained in:
parent
4a0cf01c0a
commit
ab467806a5
|
@ -89,4 +89,5 @@ class ActionController extends \MainController
|
|||
|
||||
return ActionModel::getSearch($search, $type);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
51
app/Controllers/ReportController.php
Normal file
51
app/Controllers/ReportController.php
Normal file
|
@ -0,0 +1,51 @@
|
|||
<?php
|
||||
|
||||
namespace App\Controllers;
|
||||
|
||||
use Hleb\Constructor\Handlers\Request;
|
||||
use App\Models\NotificationsModel;
|
||||
use App\Models\PostModel;
|
||||
use App\Models\ReportModel;
|
||||
use Lori\Base;
|
||||
|
||||
class ReportController extends \MainController
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$uid = Base::getUid();
|
||||
$content_type = \Request::getPost('type');
|
||||
$post_id = \Request::getPostInt('post_id');
|
||||
$content_id = \Request::getPostInt('content_id');
|
||||
|
||||
if ($uid['user_trust_level'] < 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$post = PostModel::getPostId($post_id);
|
||||
Base::PageError404($post);
|
||||
|
||||
$type_id = 'comment_' . $content_id;
|
||||
if ($content_type == 'answer') {
|
||||
$type_id = 'answer_' . $content_id;
|
||||
}
|
||||
|
||||
$url_report = '/post/' . $post['post_id'] . '/' . $post['post_slug'] . '#' . $type_id;
|
||||
|
||||
// Оповещение админу
|
||||
$type = 20; // Система флагов
|
||||
$user_id = 1; // админу
|
||||
NotificationsModel::send($uid['user_id'], $user_id, $type, $post_id, $url_report, 1);
|
||||
|
||||
$data = [
|
||||
'report_user_id' => $uid['user_id'],
|
||||
'report_type' => $content_type,
|
||||
'report_content_id' => $content_id,
|
||||
'report_reason' => lang('Breaking the rules'),
|
||||
'report_url' => $url_report,
|
||||
'report_date' => date("Y-m-d H:i:s"),
|
||||
'report_status' => 0,
|
||||
];
|
||||
|
||||
ReportModel::send($data);
|
||||
}
|
||||
}
|
|
@ -10,8 +10,13 @@ return [
|
|||
'Create Post' => 'Написать пост',
|
||||
'Create' => 'Написать',
|
||||
'Reads' => 'Читают',
|
||||
'Saw' => 'Видел',
|
||||
'The post' => 'Поста',
|
||||
'Bodies' => 'Тела',
|
||||
'Thanks' => 'Спасибо',
|
||||
'Report' => 'Флаг',
|
||||
'Reports' => 'Флаги',
|
||||
'complained about' => 'пожаловался на',
|
||||
'Freely' => 'Свободно',
|
||||
'Useful resources' => 'Полезные ресурсы',
|
||||
'Comment deleted' => 'Комментарий удален',
|
||||
|
@ -314,6 +319,8 @@ return [
|
|||
'limit-post-day' => 'Вы исчерпали лимит постов на сегодня',
|
||||
'Registration by invite'=> 'Регистрация по инвайту',
|
||||
|
||||
'Breaking the rules' => 'Нарушение правил',
|
||||
|
||||
/* Meta - desc */
|
||||
'desc-user-all' => 'Список всех участников сортированных по дате регистрации на сайте',
|
||||
'title-profile' => '%1$s %2$s | Профиль на %3$s',
|
||||
|
|
|
@ -19,6 +19,7 @@ class NotificationsModel extends \MainModel
|
|||
// 11 - в ответах (@login)
|
||||
// 12 - в комментариях (@login)
|
||||
// 15 - аудит
|
||||
// 20 - флаг система
|
||||
|
||||
// Лист уведомлений
|
||||
public static function listNotification($user_id)
|
||||
|
|
41
app/Models/ReportModel.php
Normal file
41
app/Models/ReportModel.php
Normal file
|
@ -0,0 +1,41 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use App\Models\NotificationsModel;
|
||||
use DB;
|
||||
|
||||
class ReportModel extends \MainModel
|
||||
{
|
||||
// Записываем флаг
|
||||
public static function send($data)
|
||||
{
|
||||
$params = [
|
||||
'report_user_id' => $data['report_user_id'],
|
||||
'report_type' => $data['report_type'],
|
||||
'report_content_id' => $data['report_content_id'],
|
||||
'report_reason' => $data['report_reason'],
|
||||
'report_url' => $data['report_url'],
|
||||
'report_date' => $data['report_date'],
|
||||
'report_status' => $data['report_status'],
|
||||
];
|
||||
|
||||
$sql = "INSERT INTO reports(report_user_id,
|
||||
report_type,
|
||||
report_content_id,
|
||||
report_reason,
|
||||
report_url,
|
||||
report_date,
|
||||
report_status)
|
||||
|
||||
VALUES(:report_user_id,
|
||||
:report_type,
|
||||
:report_content_id,
|
||||
:report_reason,
|
||||
:report_url,
|
||||
:report_date,
|
||||
:report_status)";
|
||||
|
||||
return DB::run($sql, $params);
|
||||
}
|
||||
}
|
1
app/ThirdParty/URLScraper.php
vendored
1
app/ThirdParty/URLScraper.php
vendored
|
@ -4,6 +4,7 @@
|
|||
* MIT License
|
||||
* https://github.com/BertMaurau/php-url-scraper
|
||||
* @author Bert Maurau
|
||||
* См. https://github.com/orcnd/parseMetaTags
|
||||
*/
|
||||
|
||||
class URLScraper
|
||||
|
|
48
modules/admin/Controllers/ReportsController.php
Normal file
48
modules/admin/Controllers/ReportsController.php
Normal file
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
namespace Modules\Admin\Controllers;
|
||||
|
||||
use Hleb\Constructor\Handlers\Request;
|
||||
use Modules\Admin\Models\ReportModel;
|
||||
use App\Models\UserModel;
|
||||
use Lori\Base;
|
||||
|
||||
class ReportsController extends \MainController
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$uid = Base::getUid();
|
||||
$page = \Request::getInt('page');
|
||||
$page = $page == 0 ? 1 : $page;
|
||||
|
||||
$limit = 50;
|
||||
$pagesCount = ReportModel::getCount();
|
||||
$reports = ReportModel::get($page, $limit);
|
||||
|
||||
$result = array();
|
||||
foreach ($reports as $ind => $row) {
|
||||
$row['user'] = UserModel::getUser($row['report_user_id'], 'id');
|
||||
$row['date'] = lang_date($row['report_date']);
|
||||
$result[$ind] = $row;
|
||||
}
|
||||
|
||||
$data = [
|
||||
'pagesCount' => ceil($pagesCount / $limit),
|
||||
'pNum' => $page,
|
||||
'meta_title' => lang('Reports'),
|
||||
'sheet' => 'reports',
|
||||
];
|
||||
|
||||
return view('/templates/reports', ['data' => $data, 'uid' => $uid, 'reports' => $result]);
|
||||
}
|
||||
|
||||
// Ознакомился
|
||||
public function status()
|
||||
{
|
||||
$report_id = \Request::getPostInt('id');
|
||||
|
||||
ReportModel::setStatus($report_id);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
41
modules/admin/Models/ReportModel.php
Normal file
41
modules/admin/Models/ReportModel.php
Normal file
|
@ -0,0 +1,41 @@
|
|||
<?php
|
||||
|
||||
namespace Modules\Admin\Models;
|
||||
|
||||
use DB;
|
||||
use PDO;
|
||||
|
||||
class ReportModel extends \MainModel
|
||||
{
|
||||
public static function get($page, $limit)
|
||||
{
|
||||
$start = ($page - 1) * $limit;
|
||||
$sql = "SELECT
|
||||
report_id,
|
||||
report_user_id,
|
||||
report_type,
|
||||
report_content_id,
|
||||
report_reason,
|
||||
report_url,
|
||||
report_date,
|
||||
report_status
|
||||
FROM reports ORDER BY report_id DESC LIMIT $start, $limit";
|
||||
|
||||
return DB::run($sql)->fetchAll(PDO::FETCH_ASSOC);
|
||||
}
|
||||
|
||||
public static function getCount()
|
||||
{
|
||||
return DB::run("SELECT report_id FROM reports")->rowCount();
|
||||
}
|
||||
|
||||
// Изменим отмеку о занесении в бан-лист
|
||||
public static function setStatus($report_id)
|
||||
{
|
||||
$sql = "UPDATE reports
|
||||
SET report_status = 1
|
||||
WHERE report_id = :report_id";
|
||||
|
||||
return DB::run($sql, ['report_id' => $report_id]);
|
||||
}
|
||||
}
|
|
@ -23,6 +23,12 @@
|
|||
<span class="size-15 middle"><?= lang('Users'); ?></span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav<?php if ($data['sheet'] == 'reports') { ?> active<?php } ?>">
|
||||
<a title="<?= lang('Reports'); ?>" href="/admin/reports">
|
||||
<i class="icon-warning-empty middle mr10"></i>
|
||||
<span class="size-15 middle"><?= lang('Reports'); ?></span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav<?php if ($data['sheet'] == 'audits' || $data['sheet'] == 'audits') { ?> active<?php } ?>">
|
||||
<a title="<?= lang('Audit'); ?>" href="/admin/audits">
|
||||
<i class="icon-lightbulb middle mr10"></i>
|
||||
|
|
58
modules/admin/templates/reports.php
Normal file
58
modules/admin/templates/reports.php
Normal file
|
@ -0,0 +1,58 @@
|
|||
<?php include TEMPLATE_ADMIN_DIR . '/_block/header-admin.php'; ?>
|
||||
<div class="wrap">
|
||||
<main class="admin">
|
||||
<div class="white-box">
|
||||
<div class="pt5 pr15 pb5 pl15">
|
||||
<?= breadcrumb('/admin', lang('Admin'), '/admin/users', lang('Users'), $data['meta_title']); ?>
|
||||
|
||||
<div class="t-table">
|
||||
<div class="t-th">
|
||||
<span class="t-td center">N</span>
|
||||
<span class="t-td"><?= lang('Avatar'); ?></span>
|
||||
<span class="t-td"><?= lang('Information'); ?></span>
|
||||
<span class="t-td center"><?= lang('Saw'); ?></span>
|
||||
</div>
|
||||
<?php if ($reports) { ?>
|
||||
<?php foreach ($reports as $report) { ?>
|
||||
<div class="t-tr">
|
||||
<span class="t-td width-30 center">
|
||||
<?= $report['report_id']; ?>
|
||||
</span>
|
||||
<span class="t-td width-30">
|
||||
<a class="gray" href="/u/<?= $report['user']['user_login']; ?>">
|
||||
<?= user_avatar_img($report['user']['user_avatar'], 'max', $report['user']['user_login'], 'ava-24 mr5'); ?>
|
||||
<?= $report['user']['user_login']; ?>
|
||||
</a>
|
||||
</span>
|
||||
<span class="t-td">
|
||||
<div class="size-13 gray lowercase">
|
||||
<?= $report['report_type']; ?>
|
||||
<span class="mr5 ml5"> · </span>
|
||||
<?= $report['date']; ?>
|
||||
</div>
|
||||
<div class="mt5">
|
||||
<a href="<?= $report['report_url']; ?>"><?= $report['report_url']; ?></a>
|
||||
</div>
|
||||
</span>
|
||||
<span class="t-td center<?php if ($report['report_status'] == 0) { ?> delleted<?php } ?>">
|
||||
<span class="report-status" data-id="<?= $report['report_id']; ?>">
|
||||
<i class="icon-air gray size-21"></i>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<?php } else { ?>
|
||||
<p class="no-content gray">
|
||||
<i class="icon-info green middle"></i>
|
||||
<span class="middle"><?= lang('No users'); ?>...</span>
|
||||
</p>
|
||||
<?php } ?>
|
||||
</div>
|
||||
|
||||
<?= pagination($data['pNum'], $data['pagesCount'], null, '/admin/reports'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
<?php include TEMPLATE_ADMIN_DIR . '/_block/footer-admin.php'; ?>
|
|
@ -1,4 +1,16 @@
|
|||
$(function(){
|
||||
// Я читал флаг
|
||||
$(document).on('click', '.report-status', function() {
|
||||
let report_id = $(this).data('id');
|
||||
fetch("/admin/reports/status", {
|
||||
method: "POST",
|
||||
body: "id=" + report_id,
|
||||
headers:{'Content-Type': 'application/x-www-form-urlencoded'}
|
||||
})
|
||||
.then((response) => {
|
||||
location.reload();
|
||||
})
|
||||
});
|
||||
// Забанить / разбанить участника
|
||||
$(document).on('click', '.user-ban', function() {
|
||||
let user_id = $(this).data('id');
|
||||
|
|
|
@ -47,6 +47,15 @@
|
|||
<?php } ?>
|
||||
</a>
|
||||
<?php } ?>
|
||||
<?php if ($notif['notification_action_type'] == 20) { ?>
|
||||
<i class="icon-warning-empty middle red"></i>
|
||||
<span class="mr5 ml5"></span>
|
||||
<a class="gray" href="/u/<?= $notif['user_login']; ?>"><?= $notif['user_login']; ?></a>
|
||||
<?= lang('complained about'); ?>
|
||||
<a class="ntf2 lowercase" href="/notifications/read/<?= $notif['notification_id']; ?>">
|
||||
<?= lang('Comment'); ?>
|
||||
</a>
|
||||
<?php } ?>
|
||||
<?php if ($notif['notification_action_type'] == 15) { ?>
|
||||
<a class="ntf2 lowercase" href="/notifications/read/<?= $notif['notification_id']; ?>">
|
||||
<i class="icon-lightbulb middle red"></i>
|
||||
|
|
|
@ -88,6 +88,13 @@
|
|||
</a>
|
||||
</span>
|
||||
<?php } ?>
|
||||
<?php if ($uid['user_trust_level'] > 0) { ?>
|
||||
<span id="answer_dell" class="ml15">
|
||||
<a data-post_id="<?= $post['post_id']; ?>" data-type="answer" data-content_id="<?= $answer['answer_id']; ?>" class="msg-flag gray">
|
||||
<?= lang('Report'); ?>
|
||||
</a>
|
||||
</span>
|
||||
<?php } ?>
|
||||
</div>
|
||||
</div>
|
||||
<div id="answer_addentry<?= $answer['answer_id']; ?>" class="reply"></div>
|
||||
|
@ -184,13 +191,19 @@
|
|||
<?= lang('Edit'); ?>
|
||||
</a>
|
||||
</span>
|
||||
|
||||
<span id="comment_dell" class="mr5 ml5">
|
||||
<a data-type="comment" data-id="<?= $comment['comment_id']; ?>" class="type-action gray">
|
||||
<?= lang('Remove'); ?>
|
||||
</a>
|
||||
</span>
|
||||
<?php } ?>
|
||||
<?php if ($uid['user_trust_level'] > 0) { ?>
|
||||
<span id="answer_dell" class="ml15">
|
||||
<a data-post_id="<?= $post['post_id']; ?>"data-type="comment" data-content_id="<?= $comment['comment_id']; ?>" class="msg-flag gray">
|
||||
<?= lang('Report'); ?>
|
||||
</a>
|
||||
</span>
|
||||
<?php } ?>
|
||||
</div>
|
||||
</div>
|
||||
<div id="comment_addentry<?= $comment['comment_id']; ?>" class="reply"></div>
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
<?php if ($uid['user_trust_level'] >= Lori\Config::get(Lori\Config::PARAM_TL_ADD_COMM_QA)) { ?>
|
||||
<?php if ($post['post_closed'] == 0) { ?>
|
||||
<?php if ($post['post_is_deleted'] == 0 || $uid['user_trust_level'] == 5) { ?>
|
||||
<span class="mr5 ml5">
|
||||
<span class="ml15">
|
||||
<a data-post_id="<?= $post['post_id']; ?>" data-answer_id="<?= $answer['answer_id']; ?>" class="add-comment gray"><?= lang('Reply'); ?></a>
|
||||
</span>
|
||||
<?php } ?>
|
||||
|
@ -48,7 +48,7 @@
|
|||
<?php } ?>
|
||||
|
||||
<?php if ($uid['user_id'] == $answer['answer_user_id'] || $uid['user_trust_level'] == 5) { ?>
|
||||
<span id="answer_edit" class="mr5 ml5">
|
||||
<span id="answer_edit" class="ml15">
|
||||
<a class="editansw gray" href="/answer/edit/<?= $answer['answer_id']; ?>">
|
||||
<?= lang('Edit'); ?>
|
||||
</a>
|
||||
|
@ -56,7 +56,7 @@
|
|||
<?php } ?>
|
||||
|
||||
<?php if ($uid['user_id']) { ?>
|
||||
<span class="add-favorite gray mr5 ml5" data-id="<?= $answer['answer_id']; ?>" data-type="answer">
|
||||
<span class="add-favorite gray ml15" data-id="<?= $answer['answer_id']; ?>" data-type="answer">
|
||||
<?php if ($answer['favorite_user_id']) { ?>
|
||||
<?= lang('remove-favorites'); ?>
|
||||
<?php } else { ?>
|
||||
|
@ -67,12 +67,19 @@
|
|||
|
||||
<?php if ($uid['user_trust_level'] == 5) { ?>
|
||||
<span class="mr5 ml5"></span>
|
||||
<span id="answer_dell" class="mr5 ml5">
|
||||
<span id="answer_dell" class="ml15">
|
||||
<a data-type="answer" data-id="<?= $answer['answer_id']; ?>" class="type-action gray">
|
||||
<?= lang('Remove'); ?>
|
||||
</a>
|
||||
</span>
|
||||
<?php } ?>
|
||||
<?php if ($uid['user_trust_level'] > 0) { ?>
|
||||
<span id="answer_dell" class="ml15">
|
||||
<a data-post_id="<?= $post['post_id']; ?>" data-type="answer" data-content_id="<?= $answer['answer_id']; ?>" class="msg-flag gray">
|
||||
<?= lang('Report'); ?>
|
||||
</a>
|
||||
</span>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<div id="answer_addentry<?= $answer['answer_id']; ?>" class="reply"></div>
|
||||
</li>
|
||||
|
@ -135,7 +142,13 @@
|
|||
</a>
|
||||
</span>
|
||||
<?php } ?>
|
||||
|
||||
<?php if ($uid['user_trust_level'] > 0) { ?>
|
||||
<span id="answer_dell" class="ml5">
|
||||
<a data-post_id="<?= $post['post_id']; ?>" data-type="comment" data-content_id="<?= $comment['comment_id']; ?>" class="msg-flag gray">
|
||||
<?= lang('Report'); ?>
|
||||
</a>
|
||||
</span>
|
||||
<?php } ?>
|
||||
</div>
|
||||
</div>
|
||||
<div id="comment_addentry<?= $comment['comment_id']; ?>" class="reply"></div>
|
||||
|
|
|
@ -298,6 +298,18 @@
|
|||
photos: '#layer-photos',
|
||||
anim: 4
|
||||
});
|
||||
$(document).on('click', '.msg-flag', function() {
|
||||
let post_id = $(this).data('post_id');
|
||||
let content_id = $(this).data('content_id');
|
||||
let type = $(this).data('type');
|
||||
layer.confirm('Это нарушает правила сайта?',
|
||||
{icon: 5, title: '<?= lang('Report'); ?>',
|
||||
btn: ['<?= lang('Yes'); ?>', '<?= lang('No'); ?>']}, function(index) {
|
||||
$.post('/flag/repost', {type, post_id, content_id}, function(str){
|
||||
layer.msg('<?= lang('Thanks'); ?>!');
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<?php include TEMPLATE_DIR . '/footer.php'; ?>
|
|
@ -10,6 +10,7 @@ Route::before('Authorization@admin')->getGroup();
|
|||
Route::get('/favicon/add')->module('admin', 'Controllers\WebsController@favicon');
|
||||
Route::get('/word/del')->module('admin', 'Controllers\WordsController@deletes');
|
||||
Route::get('/audit/status')->module('admin', 'Controllers\AuditsController@status');
|
||||
Route::get('/reports/status')->module('admin', 'Controllers\ReportsController@status');
|
||||
|
||||
Route::getProtect();
|
||||
Route::get('/badge/user/add')->module('admin', 'Controllers\BadgesController@addUser');
|
||||
|
@ -67,4 +68,7 @@ Route::before('Authorization@admin')->getGroup();
|
|||
|
||||
Route::get('/words/add')->module('admin', 'Controllers\WordsController@addPage');
|
||||
Route::get('/words')->module('admin', 'Controllers\WordsController', ['all']);
|
||||
|
||||
Route::get('/reports')->module('admin', 'Controllers\ReportsController');
|
||||
Route::get('/reports/page/{page?}')->module('admin', 'Controllers\ReportsController')->where(['page' => '[0-9]+']);
|
||||
Route::endGroup();
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
Route::before('Authorization@noAuth')->getGroup();
|
||||
Route::getType('post');
|
||||
Route::get('/flag/repost')->controller('ReportController');
|
||||
Route::get('/backend/uploadimage')->controller('Post\EditPostController@uploadimage');
|
||||
Route::get('/status/action')->controller('ActionController@deletingAndRestoring');
|
||||
Route::get('/post/grabtitle')->controller('Post\AddPostController@grabMeta');
|
||||
|
|
Loading…
Reference in a new issue