Files
vapemap/app/moderation/views.py
Andrew Williams b8d4b4f82d Addition of content reporting
New app called "moderation" which handles the reporting, and in the future, management of incorrect records in the database.
2013-04-06 01:07:33 +01:00

57 lines
2.1 KiB
Python

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)