New *information* page to display usefull information for super administrators.

see #304 & #307
This commit is contained in:
Antoine Nguyen
2012-12-24 14:17:53 +01:00
parent 11856c41ad
commit e9730097cb
5 changed files with 64 additions and 11 deletions
@@ -0,0 +1,17 @@
{% load i18n libextras %}
<h2>{% trans "Information" %} <small>{% trans "Various information about Modoboa" %}</small></h2><hr>
<p>Modoboa <strong>{% get_version %}</strong> {% trans "is currently in use." %}</p>
<h3>{% trans "Active users" %}</h3>
<table class="table">
<tr>
<th>{% trans "Name" %}</th>
<th>{% trans "Group name" %}</th>
<th>{% trans "Last login" %}</th>
</tr>
{% connected_users as users %}{% for u in users %}<tr>
<td>{{ u.username }}</td>
<td>{{ u.group }}</td>
<td>{{ u.last_login }}</td>
</tr>{% endfor %}
</table>
@@ -54,6 +54,10 @@ def settings_menu(selection, user):
"url" : "parameters/",
"img" : "",
"label" : _("Parameters")},
{"name" : "info",
"class" : "ajaxlink",
"url" : "info/",
"label" : _("Information")}
]
return render_to_string('common/menu.html', {
"entries" : entries,
+1
View File
@@ -16,6 +16,7 @@ urlpatterns = patterns(
(r'^settings/parameters/save/$', 'saveparameters'),
(r'^settings/extensions/$', 'viewextensions'),
(r'^settings/extensions/save/$', 'saveextensions'),
(r'^settings/info/$', 'information'),
(r'^permissions/remove/$', 'remove_permission'),
+8
View File
@@ -560,6 +560,14 @@ def saveextensions(request):
status="ok", respmsg=_("Modifications applied.")
))
@login_required
@user_passes_test(lambda u: u.is_superuser)
def information(request, tplname="admin/information.html"):
return ajax_simple_response({
"status" : "ok",
"content" : render_to_string(tplname, {})
})
def import_domain(user, row):
"""Specific code for domains import"""
dom = Domain()
+34 -11
View File
@@ -1,12 +1,14 @@
# coding: utf-8
import os
import datetime
from django.utils import timezone
from django.conf import settings
from django import template
from django.contrib import messages
from django.template import Template, Context
from django.template.loader import render_to_string
from django.core.urlresolvers import reverse
from django.contrib.sessions.models import Session
from datetime import datetime
from django.utils.translation import ugettext as _, ugettext_lazy
from modoboa.lib import events
from modoboa.lib.sysutils import exec_cmd
@@ -16,16 +18,8 @@ register = template.Library()
@register.simple_tag
def get_version():
if os.path.isdir("%s/.hg" % settings.MODOBOA_DIR):
version = "dev-"
code, output = exec_cmd("hg id -i", cwd=settings.MODOBOA_DIR)
version += output.rstrip()
return version
elif os.path.exists("%s/VERSION" % settings.MODOBOA_DIR):
code, output = exec_cmd("cat %s/VERSION" % settings.MODOBOA_DIR)
return output.rstrip()
else:
return "Unknown"
import pkg_resources
return pkg_resources.get_distribution("modoboa").version
@register.simple_tag
def join(items, sep=','):
@@ -180,3 +174,32 @@ def progress_color(value):
@register.filter
def fromunix(value):
return datetime.datetime.fromtimestamp(int(value))
class ConnectedUsers(template.Node):
def __init__(self, varname):
self.varname = varname
def render(self, context):
from modoboa.admin.models import User
sessions = Session.objects.filter(expire_date__gte=timezone.now())
uid_list = []
# Build a list of user ids from that query
for session in sessions:
data = session.get_decoded()
uid = data.get('_auth_user_id', None)
if uid:
uid_list.append(uid)
# Query all logged in users based on id list
context[self.varname] = [User.objects.get(pk=uid) for uid in uid_list]
return ''
@register.tag
def connected_users(parser, token):
try:
tag, a, varname = token.split_contents()
except ValueError:
raise template.TemplateSyntaxError('connected_users usage: {% connected_users as users %}')
return ConnectedUsers(varname)