mirror of
https://github.com/nikdoof/vapemap.git
synced 2025-12-22 14:19:23 +00:00
Addition of content reporting
New app called "moderation" which handles the reporting, and in the future, management of incorrect records in the database.
This commit is contained in:
57
app/moderation/views.py
Normal file
57
app/moderation/views.py
Normal file
@@ -0,0 +1,57 @@
|
||||
import json
|
||||
from django.http import HttpResponseBadRequest
|
||||
from django.views.generic import View
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from braces.views import AjaxResponseMixin, JSONResponseMixin
|
||||
from moderation.models import FlaggedObject
|
||||
|
||||
|
||||
class FlagObjectView(JSONResponseMixin, AjaxResponseMixin, View):
|
||||
"""
|
||||
Ajax capable view to flag a object for moderation
|
||||
"""
|
||||
|
||||
def render_invalid_response(self, reason='invalid-request'):
|
||||
return HttpResponseBadRequest(content=json.dumps({
|
||||
'result': 'invalid-request',
|
||||
'reason': reason,
|
||||
}), content_type=self.get_content_type())
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
||||
pass
|
||||
|
||||
def post_ajax(self, request, *args, **kwargs):
|
||||
data = request.raw_post_data
|
||||
if not data:
|
||||
return self.render_invalid_response()
|
||||
try:
|
||||
data = json.loads(data)
|
||||
except ValueError:
|
||||
return self.render_invalid_response('invalid-json')
|
||||
if not isinstance(data, dict):
|
||||
return self.render_invalid_response('invalid-json')
|
||||
if not 'app' in data or not 'model' in data:
|
||||
return self.render_invalid_response('no-app-or-model')
|
||||
if not 'flag_type' in data or not 'note' in data:
|
||||
return self.render_invalid_response('missing-fields')
|
||||
try:
|
||||
ct = ContentType.objects.get(app_label=data['app'], model=data['model'])
|
||||
except ContentType.DoesNotExist:
|
||||
return self.render_invalid_response('unknown-object-type')
|
||||
cls = ct.model_class()
|
||||
try:
|
||||
cls.objects.get(pk=data['id'])
|
||||
except cls.DoesNotExist:
|
||||
return self.render_invalid_response('does-not-exist')
|
||||
if request.user.is_authenticated():
|
||||
user = request.user
|
||||
else:
|
||||
user = None
|
||||
flag = FlaggedObject(object_type=ct, object_id=data['id'], flag_type_id=data['flag_type'],
|
||||
note=data['note'], user=user)
|
||||
flag.save()
|
||||
result = {
|
||||
'result': 'ok',
|
||||
'flag_id': flag.pk,
|
||||
}
|
||||
return self.render_json_response(result)
|
||||
Reference in New Issue
Block a user