12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- from datetime import timedelta
- from django.core.urlresolvers import reverse
- from django.shortcuts import redirect
- from django.template import RequestContext
- from django.utils import timezone
- from django.utils.translation import ugettext as _
- from misago import messages
- from misago.acl.exceptions import ACLError403
- from misago.apps.errors import error403, error404
- from misago.apps.warnuser import alerts
- from misago.apps.warnuser.forms import WarnMemberForm
- from misago.decorators import block_guest, check_csrf
- from misago.markdown.factory import basic_markdown
- from misago.models import User, Warn, WarnLevel
- from misago.shortcuts import render_to_response
- @block_guest
- @check_csrf
- def warn_user(request, user, slug):
- try:
- user = User.objects.get(pk=user)
- except User.DoesNotExist:
- return error404(request, _("Requested user could not be found."))
- try:
- request.acl.warnings.allow_warning_members()
- user.acl().warnings.allow_warning()
- except ACLError403 as e:
- return error403(request, e)
- if not WarnLevel.objects.get_level(1):
- messages.error(request, _("No warning levels have been defined."))
- return redirect(request.POST.get('retreat',
- reverse('user', kwargs={
- 'user': user.pk,
- 'username': user.username_slug,
- })))
- current_warning_level = user.get_current_warning_level()
- next_warning_level = WarnLevel.objects.get_level(user.warning_level + 1)
- if not next_warning_level:
- return render_to_response('warn_user/max_level.html',
- {
- 'warned_user': user,
- 'retreat': request.POST.get('retreat'),
- },
- context_instance=RequestContext(request))
- form = WarnMemberForm(initial={'reason': request.POST.get('reason')})
- if ('origin' in request.POST
- and request.POST.get('origin') == 'warning-form'):
- form = WarnMemberForm(request.POST, request=request)
- if form.is_valid():
- user.warning_level += 1
- if next_warning_level.expires_after_minutes:
- user.warning_level_update_on = timezone.now()
- user.warning_level_update_on += timedelta(
- minutes=next_warning_level.expires_after_minutes)
- else:
- user.warning_level_update_on = None
- user.save(force_update=True)
- reason_preparsed = None
- if form.cleaned_data['reason']:
- reason_preparsed = basic_markdown(form.cleaned_data['reason'])
- warning = Warn.objects.create(
- user=user,
- reason=form.cleaned_data['reason'],
- reason_preparsed=reason_preparsed,
- given_on=timezone.now(),
- giver=request.user,
- giver_username=request.user.username,
- giver_slug=request.user.username_slug,
- giver_ip=request.session.get_ip(request),
- giver_agent=request.META.get('HTTP_USER_AGENT'))
- alerts.you_have_been_warned(request.user, user, warning)
- messages.success(request,
- _("%(user)s warning level has been increased.") % {
- 'user': user.username})
- return redirect(request.POST.get('retreat',
- reverse('user', kwargs={
- 'user': user.pk,
- 'username': user.username_slug,
- })))
- return render_to_response('warn_user/form.html',
- {
- 'warned_user': user,
- 'current_warning_level': current_warning_level,
- 'next_warning_level': next_warning_level,
- 'form': form,
- 'retreat': request.POST.get('retreat'),
- },
- context_instance=RequestContext(request))
|