12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- from django.utils.translation import ugettext as _
- from misago.admin import site
- from misago.apps.admin.widgets import ListWidget
- from misago.apps.admin.online.forms import SearchSessionsForm
- from misago.conf import settings
- from django.utils import timezone
- from datetime import timedelta
- class List(ListWidget):
- admin = site.get_action('online')
- id = 'list'
- columns = (
- ('owner', _("Session Owner")),
- ('start', _("Session Start"), 25),
- ('last', _("Last Click"), 25),
- )
- default_sorting = 'start'
- sortables = {
- 'start': 0,
- 'last': 0,
- }
- hide_actions = True
- pagination = 50
- search_form = SearchSessionsForm
- empty_message = _('Looks like nobody is currently online on forums.')
- def set_filters(self, model, filters):
- if 'username' in filters:
- model = model.filter(user__username__istartswith=filters['username'])
- if 'ip_address' in filters:
- model = model.filter(ip__startswith=filters['ip_address'])
- if 'useragent' in filters:
- model = model.filter(agent__icontains=filters['useragent'])
- if filters['type'] == 'registered':
- model = model.filter(user__isnull=False)
- if filters['type'] == 'guest':
- model = model.filter(user__isnull=True)
- if filters['type'] == 'crawler':
- model = model.filter(crawler__isnull=False)
- return model
- def prefetch_related(self, items):
- return items.prefetch_related('user')
- def select_items(self, items):
- sessions_expiration = timezone.now() - timedelta(seconds=settings.online_counting_frequency)
- return items.filter(matched=1).filter(admin=0).filter(last__gte=sessions_expiration)
|