mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-18 05:51:26 +02:00
New *information* page to display usefull information for super administrators.
see #304 & #307
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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'),
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user