views.py 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. from django.core.urlresolvers import reverse as django_reverse
  2. from django.utils.translation import ugettext as _
  3. from misago.admin import site
  4. from misago.admin.widgets import *
  5. from misago.utils import slugify
  6. from misago.users.admin.users.forms import SearchUsersForm
  7. from misago.users.models import User
  8. def reverse(route, target=None):
  9. if target:
  10. return django_reverse(route, kwargs={'target': target.pk, 'slug': slugify(target.username)})
  11. return django_reverse(route)
  12. """
  13. Views
  14. """
  15. class List(ListWidget):
  16. admin = site.get_action('users')
  17. id = 'list'
  18. columns=(
  19. ('username_slug', _("User Name"), 35),
  20. ('join_date', _("Join Date")),
  21. )
  22. default_sorting = 'username'
  23. sortables={
  24. 'username_slug': 1,
  25. 'join_date': 0,
  26. }
  27. pagination = 25
  28. search_form = SearchUsersForm
  29. nothing_checked_message = _('You have to check at least one user.')
  30. actions=(
  31. ('reset', _("Reset passwords"), _("Are you sure you want to reset selected members passwords?")),
  32. ('remove_avs', _("Remove avatars"), _("Are you sure you want to reset selected members passwords?")),
  33. ('delete', _("Delete selected"), _("Are you sure you want to delete selected users?")),
  34. )
  35. def set_filters(self, model, filters):
  36. if 'role' in filters:
  37. model = model.filter(roles__in=filters['role']).distinct()
  38. if 'rank' in filters:
  39. model = model.filter(rank__in=filters['rank'])
  40. if 'username' in filters:
  41. model = model.filter(username_slug__contains=filters['username'])
  42. if 'email' in filters:
  43. model = model.filter(email__contains=filters['email'])
  44. if 'activation' in filters:
  45. model = model.filter(activation__in=filters['activation'])
  46. return model
  47. def get_item_actions(self, request, item):
  48. return (
  49. self.action('pencil', _("Edit User Details"), reverse('admin_users_edit', item)),
  50. self.action('remove', _("Delete User"), reverse('admin_users_delete', item), post=True, prompt=_("Are you sure you want to delete this user account?")),
  51. )
  52. def action_delete(self, request, items, checked):
  53. for user in items:
  54. if unicode(user.pk) in checked:
  55. if user.pk == request.user.id:
  56. return BasicMessage(_('You cannot delete yourself.'), 'error'), reverse('admin_users')
  57. if user.is_god():
  58. return BasicMessage(_('You cannot delete system administrator.'), 'error'), reverse('admin_users')
  59. User.objects.filter(id__in=checked).delete()
  60. User.objects.resync_monitor(request.monitor)
  61. return BasicMessage(_('Selected users have been deleted successfully.'), 'success'), reverse('admin_users')
  62. class Delete(ButtonWidget):
  63. admin = site.get_action('users')
  64. id = 'delete'
  65. fallback = 'admin_users'
  66. notfound_message = _('Requested user account could not be found.')
  67. def action(self, request, target):
  68. if target.pk == request.user.id:
  69. return BasicMessage(_('You cannot delete yourself.'), 'error'), False
  70. if target.is_god():
  71. return BasicMessage(_('You cannot delete system administrator.'), 'error'), False
  72. target.delete()
  73. User.objects.resync_monitor(request.monitor)
  74. return BasicMessage(_('User "%(name)s" has been deleted.' % {'name': target.username}), 'success'), False