123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- from django.core.urlresolvers import reverse as django_reverse
- from django.db.models import Q
- from django.template import RequestContext
- from django.utils.translation import ugettext as _
- from misago.admin import site
- from misago.apps.admin.widgets import *
- from misago.messages import Message
- from misago.models import Ban
- from misago.apps.admin.bans.forms import BanForm, SearchBansForm
- def reverse(route, target=None):
- if target:
- return django_reverse(route, kwargs={'target': target.pk})
- return django_reverse(route)
- """
- Views
- """
- class List(ListWidget):
- """
- List Bans
- """
- admin = site.get_action('bans')
- id = 'list'
- columns = (
- ('ban', _("Ban"), 50),
- ('expires', _("Expires")),
- )
- default_sorting = 'expires'
- sortables = {
- 'ban': 1,
- 'expires': 0,
- }
- pagination = 20
- search_form = SearchBansForm
- empty_message = _('No bans are currently set.')
- empty_search_message = _('No bans have been found.')
- nothing_checked_message = _('You have to check at least one ban.')
- actions = (
- ('delete', _("Lift selected bans"), _("Are you sure you want to lift selected bans?")),
- )
- def set_filters(self, model, filters):
- if 'ban' in filters:
- model = model.filter(ban__contains=filters['ban'])
- if 'reason' in filters:
- model = model.filter(Q(reason_user__contains=filters['reason']) | Q(reason_admin__contains=filters['reason']))
- if 'type' in filters:
- model = model.filter(type__in=filters['type'])
- return model
- def get_item_actions(self, item):
- return (
- self.action('pencil', _("Edit Ban"), reverse('admin_bans_edit', item)),
- self.action('remove', _("Lift Ban"), reverse('admin_bans_delete', item), post=True, prompt=_("Are you sure you want to lift this ban?")),
- )
- def action_delete(self, items, checked):
- Ban.objects.filter(id__in=checked).delete()
- self.request.monitor['bans_version'] = int(self.request.monitor['bans_version']) + 1
- return Message(_('Selected bans have been lifted successfully.'), 'success'), reverse('admin_bans')
- class New(FormWidget):
- """
- Create Ban
- """
- admin = site.get_action('bans')
- id = 'new'
- fallback = 'admin_bans'
- form = BanForm
- submit_button = _("Set Ban")
- def get_new_url(self, model):
- return reverse('admin_bans_new')
- def get_edit_url(self, model):
- return reverse('admin_bans_edit', model)
- def submit_form(self, form, target):
- new_ban = Ban(
- type=form.cleaned_data['type'],
- ban=form.cleaned_data['ban'],
- reason_user=form.cleaned_data['reason_user'],
- reason_admin=form.cleaned_data['reason_admin'],
- expires=form.cleaned_data['expires']
- )
- new_ban.save(force_insert=True)
- self.request.monitor['bans_version'] = int(self.request.monitor['bans_version']) + 1
- return new_ban, Message(_('New Ban has been set.'), 'success')
- class Edit(FormWidget):
- """
- Edit Ban
- """
- admin = site.get_action('bans')
- id = 'edit'
- name = _("Edit Ban")
- fallback = 'admin_bans'
- form = BanForm
- target_name = 'ban'
- notfound_message = _('Requested Ban could not be found.')
- submit_fallback = True
- def get_url(self, model):
- return reverse('admin_bans_edit', model)
- def get_edit_url(self, model):
- return self.get_url(model)
- def get_initial_data(self, model):
- return {
- 'type': model.type,
- 'ban': model.ban,
- 'reason_user': model.reason_user,
- 'reason_admin': model.reason_admin,
- 'expires': model.expires,
- }
- def submit_form(self, form, target):
- target.type = form.cleaned_data['type']
- target.ban = form.cleaned_data['ban']
- target.reason_user = form.cleaned_data['reason_user']
- target.reason_admin = form.cleaned_data['reason_admin']
- target.expires = form.cleaned_data['expires']
- target.save(force_update=True)
- self.request.monitor['bans_version'] = int(self.request.monitor['bans_version']) + 1
- return target, Message(_('Changes in ban have been saved.'), 'success')
- class Delete(ButtonWidget):
- """
- Delete Ban
- """
- admin = site.get_action('bans')
- id = 'delete'
- fallback = 'admin_bans'
- notfound_message = _('Requested Ban could not be found.')
- def action(self, target):
- target.delete()
- self.request.monitor['bans_version'] = int(self.request.monitor['bans_version']) + 1
- if target.type == 0:
- return Message(_('E-mail and username Ban "%(ban)s" has been lifted.') % {'ban': target.ban}, 'success'), False
- if target.type == 1:
- return Message(_('Username Ban "%(ban)s" has been lifted.') % {'ban': target.ban}, 'success'), False
- if target.type == 2:
- return Message(_('E-mail Ban "%(ban)s" has been lifted.') % {'ban': target.ban}, 'success'), False
- if target.type == 3:
- return Message(_('IP Ban "%(ban)s" has been lifted.') % {'ban': target.ban}, 'success'), False
|