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:
2013-04-06 01:07:33 +01:00
parent d5584246d2
commit b8d4b4f82d
19 changed files with 612 additions and 2 deletions

57
app/moderation/views.py Normal file
View 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)