|
@@ -1,3 +1,4 @@
|
|
|
+import math
|
|
|
from datetime import datetime, timedelta
|
|
|
from django.conf import settings
|
|
|
from django.core.urlresolvers import reverse
|
|
@@ -7,11 +8,12 @@ from django.shortcuts import redirect
|
|
|
from django.template import RequestContext
|
|
|
from django.utils import formats, timezone
|
|
|
from django.utils.translation import ugettext as _
|
|
|
-import math
|
|
|
+from misago.admin import site
|
|
|
+from misago.admin.widgets import *
|
|
|
from misago.forms import FormLayout
|
|
|
from misago.forums.models import Thread, Post
|
|
|
from misago.messages import Message, BasicMessage
|
|
|
-from misago.overview.admin.forms import GenerateStatisticsForm
|
|
|
+from misago.overview.admin.forms import GenerateStatisticsForm, SearchSessionsForm
|
|
|
from misago.sessions.models import Session
|
|
|
from misago.users.models import User
|
|
|
|
|
@@ -142,17 +144,6 @@ def check_dates(date_start, date_end, precision):
|
|
|
or (precision == 'year' and date_diff / 31536000 < 1)):
|
|
|
return BasicMessage(_('Too few items to display on graph'), type='error')
|
|
|
return None
|
|
|
-
|
|
|
-
|
|
|
-def overview_forums(request, mode=None):
|
|
|
- return request.theme.render_to_response('overview/forums.html', {
|
|
|
- 'graph_posts': build_stat(Post, mode),
|
|
|
- 'graph_threads': build_stat(Thread, mode),
|
|
|
- 'posts': request.monitor['posts'],
|
|
|
- 'threads': request.monitor['threads'],
|
|
|
- 'mode': mode,
|
|
|
- }, context_instance=RequestContext(request));
|
|
|
-
|
|
|
|
|
|
def build_graph(model, date_start, date_end, precision):
|
|
|
if precision == 'day':
|
|
@@ -192,4 +183,46 @@ def build_graph(model, date_start, date_end, precision):
|
|
|
for i in stat['stat']:
|
|
|
if i > stat['max']:
|
|
|
stat['max'] = i
|
|
|
- return stat
|
|
|
+ return stat
|
|
|
+
|
|
|
+
|
|
|
+class OnlineList(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'] == 'hidden':
|
|
|
+ model = model.filter(hidden=True)
|
|
|
+ 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):
|
|
|
+ return items.filter(matched=1).filter(admin=0)
|