mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2024-11-22 01:21:07 +00:00
Adds models for reporting
This commit is contained in:
parent
7337a357fa
commit
e59c127686
7 changed files with 90 additions and 8 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -2,6 +2,7 @@
|
|||
/venv
|
||||
*.pyc
|
||||
*.swp
|
||||
**/__pycache__
|
||||
|
||||
# VSCode
|
||||
/.vscode
|
||||
|
@ -15,4 +16,4 @@
|
|||
/images/
|
||||
|
||||
# Testing
|
||||
.coverage
|
||||
.coverage
|
||||
|
|
48
bookwyrm/migrations/0049_report_reportcomment.py
Normal file
48
bookwyrm/migrations/0049_report_reportcomment.py
Normal file
|
@ -0,0 +1,48 @@
|
|||
# Generated by Django 3.0.7 on 2021-03-09 00:55
|
||||
|
||||
import bookwyrm.models.fields
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('bookwyrm', '0048_merge_20210308_1754'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Report',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created_date', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_date', models.DateTimeField(auto_now=True)),
|
||||
('remote_id', bookwyrm.models.fields.RemoteIdField(max_length=255, null=True, validators=[bookwyrm.models.fields.validate_remote_id])),
|
||||
('note', models.TextField(blank=True, null=True)),
|
||||
('resolved', models.BooleanField(default=False)),
|
||||
('reporter', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='reporter', to=settings.AUTH_USER_MODEL)),
|
||||
('statuses', models.ManyToManyField(to='bookwyrm.Status')),
|
||||
('user', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ReportComment',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created_date', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_date', models.DateTimeField(auto_now=True)),
|
||||
('remote_id', bookwyrm.models.fields.RemoteIdField(max_length=255, null=True, validators=[bookwyrm.models.fields.validate_remote_id])),
|
||||
('note', models.TextField()),
|
||||
('report', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='bookwyrm.Report')),
|
||||
('user', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
]
|
|
@ -21,6 +21,7 @@ from .tag import Tag, UserTag
|
|||
|
||||
from .user import User, KeyPair, AnnualGoal
|
||||
from .relationship import UserFollows, UserFollowRequest, UserBlocks
|
||||
from .report import Report, ReportComment
|
||||
from .federated_server import FederatedServer
|
||||
|
||||
from .import_job import ImportJob, ImportItem
|
||||
|
|
|
@ -4,7 +4,7 @@ from .base_model import BookWyrmModel
|
|||
|
||||
|
||||
class FederatedServer(BookWyrmModel):
|
||||
""" store which server's we federate with """
|
||||
""" store which servers we federate with """
|
||||
|
||||
server_name = models.CharField(max_length=255, unique=True)
|
||||
# federated, blocked, whatever else
|
||||
|
|
23
bookwyrm/models/report.py
Normal file
23
bookwyrm/models/report.py
Normal file
|
@ -0,0 +1,23 @@
|
|||
""" flagged for moderation """
|
||||
from django.db import models
|
||||
from .base_model import BookWyrmModel
|
||||
|
||||
|
||||
class Report(BookWyrmModel):
|
||||
""" reported status or user """
|
||||
|
||||
reporter = models.ForeignKey(
|
||||
"User", related_name="reporter", on_delete=models.PROTECT
|
||||
)
|
||||
note = models.TextField(null=True, blank=True)
|
||||
user = models.ForeignKey("User", on_delete=models.PROTECT)
|
||||
statuses = models.ManyToManyField("Status")
|
||||
resolved = models.BooleanField(default=False)
|
||||
|
||||
|
||||
class ReportComment(BookWyrmModel):
|
||||
""" updates on a report """
|
||||
|
||||
user = models.ForeignKey("User", on_delete=models.PROTECT)
|
||||
note = models.TextField()
|
||||
report = models.ForeignKey(Report, on_delete=models.PROTECT)
|
|
@ -20,6 +20,13 @@ class ReportViews(TestCase):
|
|||
local=True,
|
||||
localname="mouse",
|
||||
)
|
||||
self.local_user = models.User.objects.create_user(
|
||||
"rat@local.com",
|
||||
"rat@mouse.mouse",
|
||||
"password",
|
||||
local=True,
|
||||
localname="rat",
|
||||
)
|
||||
models.SiteSettings.objects.create()
|
||||
|
||||
def test_reports_page(self):
|
||||
|
@ -39,7 +46,7 @@ class ReportViews(TestCase):
|
|||
request = self.factory.get("")
|
||||
request.user = self.local_user
|
||||
request.user.is_superuser = True
|
||||
report = models.Report.objects.create()
|
||||
report = models.Report.objects.create(reporter=self.local_user, user=self.rat)
|
||||
|
||||
result = view(request, report.id)
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@ from django.views import View
|
|||
from bookwyrm import models
|
||||
|
||||
|
||||
# pylint: disable= no-self-use
|
||||
# pylint: disable=no-self-use
|
||||
@method_decorator(login_required, name="dispatch")
|
||||
@method_decorator(
|
||||
permission_required("bookwyrm.moderate_user", raise_exception=True),
|
||||
|
@ -21,11 +21,13 @@ from bookwyrm import models
|
|||
class Reports(View):
|
||||
""" list of reports """
|
||||
|
||||
def get(self, request, status="open"):
|
||||
def get(self, request):
|
||||
""" view current reports """
|
||||
resolved = request.GET.get("resolved")
|
||||
data = {
|
||||
"status": status
|
||||
} # {"reports": models.Report.objects.filter(status=status)}
|
||||
"resolved": resolved,
|
||||
"reports": models.Report.objects.filter(resolved=resolved),
|
||||
}
|
||||
return TemplateResponse(request, "settings/reports.html", data)
|
||||
|
||||
|
||||
|
@ -34,5 +36,5 @@ class Report(View):
|
|||
|
||||
def get(self, request, report_id):
|
||||
""" load a report """
|
||||
data = {"report": get_object_or_404(models.REport, id=report_id)}
|
||||
data = {"report": get_object_or_404(models.Report, id=report_id)}
|
||||
return TemplateResponse(request, "settings/report.html", data)
|
||||
|
|
Loading…
Reference in a new issue