views.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. from django.utils.translation import ugettext as _
  2. from misago.admin import site
  3. from misago.apps.admin.widgets import ListWidget
  4. from misago.apps.admin.online.forms import SearchSessionsForm
  5. from misago.conf import settings
  6. from django.utils import timezone
  7. from datetime import timedelta
  8. class List(ListWidget):
  9. admin = site.get_action('online')
  10. id = 'list'
  11. columns = (
  12. ('owner', _("Session Owner")),
  13. ('start', _("Session Start"), 25),
  14. ('last', _("Last Click"), 25),
  15. )
  16. default_sorting = 'start'
  17. sortables = {
  18. 'start': 0,
  19. 'last': 0,
  20. }
  21. hide_actions = True
  22. pagination = 50
  23. search_form = SearchSessionsForm
  24. empty_message = _('Looks like nobody is currently online on forums.')
  25. def set_filters(self, model, filters):
  26. if 'username' in filters:
  27. model = model.filter(user__username__istartswith=filters['username'])
  28. if 'ip_address' in filters:
  29. model = model.filter(ip__startswith=filters['ip_address'])
  30. if 'useragent' in filters:
  31. model = model.filter(agent__icontains=filters['useragent'])
  32. if filters['type'] == 'registered':
  33. model = model.filter(user__isnull=False)
  34. if filters['type'] == 'guest':
  35. model = model.filter(user__isnull=True)
  36. if filters['type'] == 'crawler':
  37. model = model.filter(crawler__isnull=False)
  38. return model
  39. def prefetch_related(self, items):
  40. return items.prefetch_related('user')
  41. def select_items(self, items):
  42. sessions_expiration = timezone.now() - timedelta(seconds=settings.online_counting_frequency)
  43. return items.filter(matched=1).filter(admin=0).filter(last__gte=sessions_expiration)