Basic functionality for seeing reports

This commit is contained in:
Michael 2023-09-10 08:00:44 +00:00
parent 8c9e4c46a0
commit c836b0ee8d
5 changed files with 216 additions and 14 deletions

View File

@ -107,6 +107,7 @@ abstract class BaseModeration extends BaseModule
$aside_sub = [ $aside_sub = [
'information' => [$this->t('Information'), [ 'information' => [$this->t('Information'), [
'overview' => ['moderation', $this->t('Overview'), 'overview'], 'overview' => ['moderation', $this->t('Overview'), 'overview'],
'reports' => ['moderation/reports', $this->t('Reports'), 'overview'],
]], ]],
'configuration' => [$this->t('Configuration'), [ 'configuration' => [$this->t('Configuration'), [
'users' => ['moderation/users', $this->t('Users'), 'users'], 'users' => ['moderation/users', $this->t('Users'), 'users'],

View File

@ -0,0 +1,108 @@
<?php
/**
* @copyright Copyright (C) 2010-2023, the Friendica project
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
namespace Friendica\Module\Moderation;
use Friendica\App;
use Friendica\Content\Pager;
use Friendica\Content\Text\BBCode;
use Friendica\Content\Text\Plaintext;
use Friendica\Core\L10n;
use Friendica\Core\Renderer;
use Friendica\Core\Session\Capability\IHandleUserSessions;
use Friendica\Database\Database;
use Friendica\Database\DBA;
use Friendica\Model\Contact;
use Friendica\Model\Post;
use Friendica\Module\BaseModeration;
use Friendica\Module\Response;
use Friendica\Navigation\SystemMessages;
use Friendica\Util\DateTimeFormat;
use Friendica\Util\Profiler;
use Psr\Log\LoggerInterface;
class Reports extends BaseModeration
{
/** @var Database */
private $database;
public function __construct(Database $database, App\Page $page, App $app, SystemMessages $systemMessages, IHandleUserSessions $session, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = [])
{
parent::__construct($page, $app, $systemMessages, $session, $l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters);
$this->database = $database;
}
protected function content(array $request = []): string
{
parent::content();
$total = $this->database->count('report');
$pager = new Pager($this->l10n, $this->args->getQueryString(), 10);
$query = $this->database->p("SELECT `report`.`id`, `report`.`cid`, `report`.`comment`, `report`.`forward`, `report`.`created`, `report`.`reporter-id`,
`report`.`category`, `report`.`rules`, `contact`.`micro`, `contact`.`name`, `contact`.`nick`, `contact`.`url`, `contact`.`addr` FROM report
INNER JOIN `contact` ON `contact`.`id` = `report`.`cid` ORDER BY `report`.`created` DESC LIMIT ?, ?", $pager->getStart(), $pager->getItemsPerPage());
$reports = [];
while ($report = $this->database->fetch($query)) {
$report['posts'] = [];
$report['created'] = DateTimeFormat::local($report['created'], DateTimeFormat::MYSQL);
$reports[$report['id']] = $report;
}
$this->database->close($query);
$condition = ["SELECT `post-view`.`created`, `post-view`.`guid`, `post-view`.`plink`, `post-view`.`title`, `post-view`.`body`, `report-post`.`rid`
FROM `report-post` INNER JOIN `post-view` ON `report-post`.`uri-id` = `post-view`.`uri-id`"];
$condition = DBA::mergeConditions($condition, ['rid' => array_keys($reports)]);
$posts = $this->database->p(array_shift($condition), $condition);
while ($post = $this->database->fetch($posts)) {
if (in_array($post['rid'], array_keys($reports))) {
$post['created'] = DateTimeFormat::local($post['created'], DateTimeFormat::MYSQL);
$post['body'] = BBCode::toPlaintext($post['body']);
$reports[$post['rid']]['posts'][] = $post;
}
}
$this->database->close($posts);
$t = Renderer::getMarkupTemplate('moderation/report/overview.tpl');
return Renderer::replaceMacros($t, [
// strings //
'$title' => $this->t('Moderation'),
'$page' => $this->t('List of reports'),
'$description' => $this->t('This page display reports created by our or remote users.'),
'$no_data' => $this->t('No report exists at this node.'),
'$h_reports' => $this->t('Reports'),
'$th_reports' => [$this->t('Created'), $this->t('Photo'), $this->t('Name'), $this->t('Comment'), $this->t('Category')],
// values //
'$baseurl' => $this->baseUrl,
'$reports' => $reports,
'$total_reports' => $this->tt('%s total report', '%s total reports', $total),
'$paginate' => $pager->renderFull($total),
'$contacturl' => ['contact_url', $this->t('Profile URL'), '', $this->t('URL of the reported contact.')],
]);
}
}

View File

@ -510,6 +510,7 @@ return [
'/item/source[/{guid}]' => [Module\Moderation\Item\Source::class, [R::GET, R::POST]], '/item/source[/{guid}]' => [Module\Moderation\Item\Source::class, [R::GET, R::POST]],
'/report/create' => [Module\Moderation\Report\Create::class, [R::GET, R::POST]], '/report/create' => [Module\Moderation\Report\Create::class, [R::GET, R::POST]],
'/reports' => [Module\Moderation\Reports::class, [R::GET, R::POST]],
'/users[/{action}/{uid}]' => [Module\Moderation\Users\Index::class, [R::GET, R::POST]], '/users[/{action}/{uid}]' => [Module\Moderation\Users\Index::class, [R::GET, R::POST]],
'/users/active[/{action}/{uid}]' => [Module\Moderation\Users\Active::class, [R::GET, R::POST]], '/users/active[/{action}/{uid}]' => [Module\Moderation\Users\Active::class, [R::GET, R::POST]],

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 2023.09-dev\n" "Project-Id-Version: 2023.09-dev\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-09-09 20:42+0000\n" "POT-Creation-Date: 2023-09-10 07:51+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -606,7 +606,8 @@ msgid "This is you"
msgstr "" msgstr ""
#: mod/photos.php:1141 mod/photos.php:1197 mod/photos.php:1277 #: mod/photos.php:1141 mod/photos.php:1197 mod/photos.php:1277
#: src/Object/Post.php:572 src/Object/Post.php:1094 #: src/Module/Moderation/Reports.php:96 src/Object/Post.php:572
#: src/Object/Post.php:1094
msgid "Comment" msgid "Comment"
msgstr "" msgstr ""
@ -2119,13 +2120,13 @@ msgstr ""
msgid "Site setup and configuration" msgid "Site setup and configuration"
msgstr "" msgstr ""
#: src/Content/Nav.php:335 src/Module/BaseModeration.php:127 #: src/Content/Nav.php:335 src/Module/BaseModeration.php:128
#: src/Module/Moderation/Blocklist/Contact.php:110 #: src/Module/Moderation/Blocklist/Contact.php:110
#: src/Module/Moderation/Blocklist/Server/Add.php:121 #: src/Module/Moderation/Blocklist/Server/Add.php:121
#: src/Module/Moderation/Blocklist/Server/Import.php:118 #: src/Module/Moderation/Blocklist/Server/Import.php:118
#: src/Module/Moderation/Blocklist/Server/Index.php:95 #: src/Module/Moderation/Blocklist/Server/Index.php:95
#: src/Module/Moderation/Item/Delete.php:61 #: src/Module/Moderation/Item/Delete.php:61
#: src/Module/Moderation/Summary.php:76 #: src/Module/Moderation/Reports.php:90 src/Module/Moderation/Summary.php:76
#: src/Module/Moderation/Users/Active.php:133 #: src/Module/Moderation/Users/Active.php:133
#: src/Module/Moderation/Users/Blocked.php:133 #: src/Module/Moderation/Users/Blocked.php:133
#: src/Module/Moderation/Users/Deleted.php:80 #: src/Module/Moderation/Users/Deleted.php:80
@ -4275,7 +4276,8 @@ msgstr ""
msgid "Job Parameters" msgid "Job Parameters"
msgstr "" msgstr ""
#: src/Module/Admin/Queue.php:78 src/Module/Settings/OAuth.php:74 #: src/Module/Admin/Queue.php:78 src/Module/Moderation/Reports.php:96
#: src/Module/Settings/OAuth.php:74
msgid "Created" msgid "Created"
msgstr "" msgstr ""
@ -5575,7 +5577,7 @@ msgstr ""
msgid "Overview" msgid "Overview"
msgstr "" msgstr ""
#: src/Module/BaseAdmin.php:89 src/Module/BaseModeration.php:111 #: src/Module/BaseAdmin.php:89 src/Module/BaseModeration.php:112
msgid "Configuration" msgid "Configuration"
msgstr "" msgstr ""
@ -5599,7 +5601,7 @@ msgstr ""
msgid "Inspect worker Queue" msgid "Inspect worker Queue"
msgstr "" msgstr ""
#: src/Module/BaseAdmin.php:106 src/Module/BaseModeration.php:119 #: src/Module/BaseAdmin.php:106 src/Module/BaseModeration.php:120
msgid "Diagnostics" msgid "Diagnostics"
msgstr "" msgstr ""
@ -5627,7 +5629,7 @@ msgstr ""
msgid "Addon Features" msgid "Addon Features"
msgstr "" msgstr ""
#: src/Module/BaseAdmin.php:121 src/Module/BaseModeration.php:128 #: src/Module/BaseAdmin.php:121 src/Module/BaseModeration.php:129
msgid "User registrations waiting for confirmation" msgid "User registrations waiting for confirmation"
msgstr "" msgstr ""
@ -5668,28 +5670,32 @@ msgid ""
"the main account." "the main account."
msgstr "" msgstr ""
#: src/Module/BaseModeration.php:112 src/Module/Moderation/Users/Index.php:148 #: src/Module/BaseModeration.php:110 src/Module/Moderation/Reports.php:95
msgid "Reports"
msgstr ""
#: src/Module/BaseModeration.php:113 src/Module/Moderation/Users/Index.php:148
#: src/Module/Moderation/Users/Index.php:158 #: src/Module/Moderation/Users/Index.php:158
msgid "Users" msgid "Users"
msgstr "" msgstr ""
#: src/Module/BaseModeration.php:114 #: src/Module/BaseModeration.php:115
msgid "Tools" msgid "Tools"
msgstr "" msgstr ""
#: src/Module/BaseModeration.php:115 #: src/Module/BaseModeration.php:116
msgid "Contact Blocklist" msgid "Contact Blocklist"
msgstr "" msgstr ""
#: src/Module/BaseModeration.php:116 #: src/Module/BaseModeration.php:117
msgid "Server Blocklist" msgid "Server Blocklist"
msgstr "" msgstr ""
#: src/Module/BaseModeration.php:117 src/Module/Moderation/Item/Delete.php:62 #: src/Module/BaseModeration.php:118 src/Module/Moderation/Item/Delete.php:62
msgid "Delete Item" msgid "Delete Item"
msgstr "" msgstr ""
#: src/Module/BaseModeration.php:120 src/Module/Moderation/Item/Source.php:76 #: src/Module/BaseModeration.php:121 src/Module/Moderation/Item/Source.php:76
msgid "Item Source" msgid "Item Source"
msgstr "" msgstr ""
@ -6160,6 +6166,7 @@ msgstr ""
#: src/Module/Contact/Advanced.php:134 #: src/Module/Contact/Advanced.php:134
#: src/Module/Moderation/Blocklist/Contact.php:122 #: src/Module/Moderation/Blocklist/Contact.php:122
#: src/Module/Moderation/Reports.php:96
#: src/Module/Moderation/Users/Active.php:126 #: src/Module/Moderation/Users/Active.php:126
#: src/Module/Moderation/Users/Blocked.php:126 #: src/Module/Moderation/Users/Blocked.php:126
#: src/Module/Moderation/Users/Create.php:70 #: src/Module/Moderation/Users/Create.php:70
@ -6283,6 +6290,7 @@ msgstr ""
#: src/Module/Contact/Follow.php:170 src/Module/Contact/Profile.php:396 #: src/Module/Contact/Follow.php:170 src/Module/Contact/Profile.php:396
#: src/Module/Contact/Unfollow.php:129 #: src/Module/Contact/Unfollow.php:129
#: src/Module/Moderation/Blocklist/Contact.php:133 #: src/Module/Moderation/Blocklist/Contact.php:133
#: src/Module/Moderation/Reports.php:105
#: src/Module/Notifications/Introductions.php:129 #: src/Module/Notifications/Introductions.php:129
#: src/Module/Notifications/Introductions.php:198 #: src/Module/Notifications/Introductions.php:198
msgid "Profile URL" msgid "Profile URL"
@ -7577,6 +7585,7 @@ msgid "Block New Remote Contact"
msgstr "" msgstr ""
#: src/Module/Moderation/Blocklist/Contact.php:122 #: src/Module/Moderation/Blocklist/Contact.php:122
#: src/Module/Moderation/Reports.php:96
msgid "Photo" msgid "Photo"
msgstr "" msgstr ""
@ -8138,6 +8147,33 @@ msgstr ""
msgid "3. Pick posts" msgid "3. Pick posts"
msgstr "" msgstr ""
#: src/Module/Moderation/Reports.php:91
msgid "List of reports"
msgstr ""
#: src/Module/Moderation/Reports.php:92
msgid "This page display reports created by our or remote users."
msgstr ""
#: src/Module/Moderation/Reports.php:93
msgid "No report exists at this node."
msgstr ""
#: src/Module/Moderation/Reports.php:96
msgid "Category"
msgstr ""
#: src/Module/Moderation/Reports.php:102
#, php-format
msgid "%s total report"
msgid_plural "%s total reports"
msgstr[0] ""
msgstr[1] ""
#: src/Module/Moderation/Reports.php:105
msgid "URL of the reported contact."
msgstr ""
#: src/Module/Moderation/Summary.php:53 #: src/Module/Moderation/Summary.php:53
msgid "Normal Account" msgid "Normal Account"
msgstr "" msgstr ""

View File

@ -0,0 +1,56 @@
<div id="adminpage">
<h1>{{$title}} - {{$page}}</h1>
<p>{{$description nofilter}}</p>
<h3>{{$h_reports}}</h3>
{{if $reports}}
<table class="table table-condensed table-striped table-bordered">
<thead>
<tr>
{{foreach $th_reports as $th}}
<th>
{{$th}}
</th>
{{/foreach}}
</tr>
</thead>
<tbody>
{{foreach $reports as $report}}
<tr>
<td>
{{$report.created}}
</td>
<td><img class="icon" src="{{$report.micro}}" alt="{{$report.nickname}}" title="{{$report.nickname}}"></td>
<td class="name">
<a href="contact/{{$report.cid}}" title="{{$report.nickname}}">{{$report.name}}</><br>
<a href="{{$report.url}}" title="{{$report.nickname}}">{{if $report.addr}}{{$report.addr}}{{else}}{{$report.url}}{{/if}}</a>
</td>
<td class="comment">{{if $report.comment}}{{$report.comment}}{{else}}N/A{{/if}}</td>
<td class="category">{{if $report.category}}{{$report.category}}{{else}}N/A{{/if}}</td>
</tr>
{{if $report.posts}}
<tr>
<td colspan="5">
<table class="table table-condensed table-striped table-bordered">
{{foreach $report.posts as $post}}
<tr>
<td>
<a href="display/{{$post.guid}}">{{$post.created}}</><br>
</td>
<td>
{{$post.body}}
</td>
</tr>
{{/foreach}}
</table>
</td>
</tr>
{{/if}}
{{/foreach}}
</tbody>
</table>
{{$paginate nofilter}}
{{else}}
<p>{{$no_data}}</p>
{{/if}}
</div>