mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-17 05:41:25 +02:00
@@ -3,3 +3,6 @@
|
||||
static/tmp
|
||||
static/js/ckeditor
|
||||
settings.py
|
||||
doc/.build
|
||||
doc/.static
|
||||
doc/.templates
|
||||
|
||||
@@ -39,14 +39,6 @@ def urls(prefix):
|
||||
include('modoboa.extensions.stats.urls'))
|
||||
|
||||
def menu(**kwargs):
|
||||
if kwargs["target"] == "admin_menu_bar":
|
||||
domain_id = kwargs['domain']
|
||||
return [
|
||||
{"label" : _("Statistics"),
|
||||
"name" : "stats",
|
||||
"url" : reverse('domindex', args=[domain_id]),
|
||||
"img" : static_url("pics/graph.png")}
|
||||
]
|
||||
if kwargs["target"] == "admin_menu_box":
|
||||
return [
|
||||
{"name" : "stats",
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
{% extends "nlayout.html" %}
|
||||
{% load i18n %}
|
||||
{% load admin_extras %}
|
||||
{% block middletitle %}{% trans "Global statistics" %}{% endblock %}
|
||||
{% block menu %}{% domains_menu "stats" user %}{% endblock %}
|
||||
{% block content %}
|
||||
{% include "stats/content.html" %}
|
||||
{% endblock %}
|
||||
@@ -1,114 +0,0 @@
|
||||
{% load i18n %}
|
||||
<link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}css/calendar.css" />
|
||||
<style type="text/css">
|
||||
#selectors {
|
||||
}
|
||||
#periodbox, #domainbox {
|
||||
float: left;
|
||||
margin-right: 20px;
|
||||
}
|
||||
#graphs {
|
||||
margin-top: 15px;
|
||||
float: none;
|
||||
}
|
||||
#customperiod {
|
||||
display: none;
|
||||
border: 1px solid #dddddd;
|
||||
float: left;
|
||||
padding: 3px;
|
||||
margin-top: -3px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script type="text/javascript">
|
||||
window.addEvent("domready", function() {
|
||||
var myCal = new Calendar({
|
||||
dateTravelStart: 'Y-m-d',
|
||||
dateTravelEnd : 'Y-m-d'
|
||||
}, {
|
||||
direction: 0, // -1 past, 0 past + future, 1 future
|
||||
pad: 1,
|
||||
offset: 1, // first day of the week: 0 = sunday, 1 = monday, etc..
|
||||
tweak: {x: -147, y: 18} // tweak calendar positioning
|
||||
});
|
||||
|
||||
getgraph_callback = function(resp) {
|
||||
if (resp.status == "ok") {
|
||||
$("graphs").set("html", resp.content);
|
||||
} else {
|
||||
infobox.error(resp.error);
|
||||
}
|
||||
}
|
||||
|
||||
get_period = function() {
|
||||
if ($("period").value != "custom") {
|
||||
$("customperiod").setStyle("display", "none");
|
||||
return "period=" + $("period").value;
|
||||
}
|
||||
$("customperiod").setStyle("display", "block");
|
||||
if ($("dateTravelStart").value == "" || $("dateTravelEnd").value == "") {
|
||||
return "";
|
||||
}
|
||||
return "period=custom"
|
||||
+ "&start=" + $("dateTravelStart").value
|
||||
+ "&end=" + $("dateTravelEnd").value;
|
||||
}
|
||||
|
||||
get_graph = function(evt) {
|
||||
{% if admin %}
|
||||
var url = "{% url getgraph_root %}" + $("domain").value + "/";
|
||||
{% else %}
|
||||
var url = "{% url getgraph domain.id %}";
|
||||
{% endif %}
|
||||
var p = get_period();
|
||||
|
||||
if (p == "") {
|
||||
return;
|
||||
}
|
||||
new Request.JSON({url : url + "?" + p, noCache: true,
|
||||
onSuccess : getgraph_callback}).get();
|
||||
}
|
||||
|
||||
{% if admin %}
|
||||
$("domain").addEvent("change", get_graph);
|
||||
{% endif %}
|
||||
$("period").addEvent("change", get_graph);
|
||||
$("customsend").addEvent("click", get_graph);
|
||||
});
|
||||
</script>
|
||||
<script type="text/javascript" src="{{ MEDIA_URL }}js/calendar.js"></script>
|
||||
|
||||
<div id="selectors">
|
||||
{% if admin %}
|
||||
<div id="domainbox">
|
||||
<label for="domain">{% trans "Domain:" %}</label>
|
||||
<select id="domain" name="domain">
|
||||
<option value="global" {% ifequal domain "global" %}selected{% endifequal %}>{% trans "Global" %}</option>
|
||||
{% for d in domains %}
|
||||
<option value="{{ d.id }}" {% ifequal d.name domain %}selected{% endifequal %}>{{ d.name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div id="periodbox">
|
||||
<label for="period">{% trans "Period:" %}</label>
|
||||
<select id="period" name="period">
|
||||
{% for p in periods %}
|
||||
<option value="{{ p.name }}" {% ifequal p.name period %}selected{% endifequal %}>{{ p.label }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
<div id="customperiod">
|
||||
{% url extensions.stats.main.custom_period as c_stats_url %}
|
||||
{% trans "Start" %}: <input id="dateTravelStart" name="start"
|
||||
value="{{ start }}" type="text"/>
|
||||
{% trans "End" %}: <input id="dateTravelEnd" name="end"
|
||||
value="{{ end }}" type="text" />
|
||||
<input type="button" id="customsend" value="ok">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="spacer"></div>
|
||||
<div id="graphs">
|
||||
{% include "stats/graphs.html" %}
|
||||
</div>
|
||||
@@ -1,8 +1,120 @@
|
||||
{% extends "admin/domain_header.html" %}
|
||||
{% block menu %}
|
||||
{% load admin_extras %}
|
||||
{% domain_menu domain.id "stats" user %}
|
||||
{% extends "admin/domains_header.html" %}
|
||||
{% load i18n %}
|
||||
{% block html_head %}
|
||||
<link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}css/calendar.css" />
|
||||
<style type="text/css">
|
||||
#selectors {
|
||||
}
|
||||
#periodbox, #domainbox {
|
||||
float: left;
|
||||
margin-right: 20px;
|
||||
}
|
||||
#graphs {
|
||||
margin-top: 15px;
|
||||
float: none;
|
||||
}
|
||||
#customperiod {
|
||||
display: none;
|
||||
border: 1px solid #dddddd;
|
||||
float: left;
|
||||
padding: 3px;
|
||||
margin-top: -3px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script type="text/javascript" src="{{ MEDIA_URL }}js/calendar.js"></script>
|
||||
<script type="text/javascript">
|
||||
window.addEvent("domready", function() {
|
||||
var myCal = new Calendar({
|
||||
dateTravelStart: 'Y-m-d',
|
||||
dateTravelEnd : 'Y-m-d'
|
||||
}, {
|
||||
direction: 0, // -1 past, 0 past + future, 1 future
|
||||
pad: 1,
|
||||
offset: 1, // first day of the week: 0 = sunday, 1 = monday, etc..
|
||||
tweak: {x: -147, y: 18} // tweak calendar positioning
|
||||
});
|
||||
|
||||
getgraph_callback = function(resp) {
|
||||
if (resp.status == "ok") {
|
||||
$("graphs").set("html", resp.content);
|
||||
} else {
|
||||
infobox.error(resp.error);
|
||||
}
|
||||
}
|
||||
|
||||
get_period = function() {
|
||||
if ($("period").value != "custom") {
|
||||
$("customperiod").setStyle("display", "none");
|
||||
return "period=" + $("period").value;
|
||||
}
|
||||
$("customperiod").setStyle("display", "block");
|
||||
if ($("dateTravelStart").value == "" || $("dateTravelEnd").value == "") {
|
||||
return "";
|
||||
}
|
||||
return "period=custom"
|
||||
+ "&start=" + $("dateTravelStart").value
|
||||
+ "&end=" + $("dateTravelEnd").value;
|
||||
}
|
||||
|
||||
get_graph = function(evt) {
|
||||
{% if user.is_superuser %}
|
||||
var url = "{% url getgraph_root %}" + $("domain").value + "/";
|
||||
{% else %}
|
||||
var url = "{% url getgraph domain.id %}";
|
||||
{% endif %}
|
||||
var p = get_period();
|
||||
|
||||
if (p == "") {
|
||||
return;
|
||||
}
|
||||
new Request.JSON({url : url + "?" + p, noCache: true,
|
||||
onSuccess : getgraph_callback}).get();
|
||||
}
|
||||
|
||||
{% if user.is_superuser %}
|
||||
$("domain").addEvent("change", get_graph);
|
||||
{% endif %}
|
||||
$("period").addEvent("change", get_graph);
|
||||
$("customsend").addEvent("click", get_graph);
|
||||
});
|
||||
</script>
|
||||
|
||||
{% endblock %}
|
||||
{% block domcontent %}
|
||||
{% include "stats/content.html" %}
|
||||
{% block pagetitle %}{% trans "Statistics" %}{% endblock %}
|
||||
{% block subcontent %}
|
||||
<div id="selectors">
|
||||
{% if user.is_superuser %}
|
||||
<div id="domainbox">
|
||||
<label for="domain">{% trans "Domain:" %}</label>
|
||||
<select id="domain" name="domain">
|
||||
<option value="global" {% ifequal domain "global" %}selected{% endifequal %}>{% trans "Global" %}</option>
|
||||
{% for d in domains %}
|
||||
<option value="{{ d.id }}" {% ifequal d.name domain %}selected{% endifequal %}>{{ d.name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div id="periodbox">
|
||||
<label for="period">{% trans "Period:" %}</label>
|
||||
<select id="period" name="period">
|
||||
{% for p in periods %}
|
||||
<option value="{{ p.name }}" {% ifequal p.name period %}selected{% endifequal %}>{{ p.label }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
<div id="customperiod">
|
||||
{% trans "Start" %}: <input id="dateTravelStart" name="start"
|
||||
value="{{ start }}" type="text"/>
|
||||
{% trans "End" %}: <input id="dateTravelEnd" name="end"
|
||||
value="{{ end }}" type="text" />
|
||||
<input type="button" id="customsend" value="ok">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="spacer"></div>
|
||||
<div id="graphs">
|
||||
{% include "stats/graphs.html" %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
from django.conf.urls.defaults import *
|
||||
|
||||
urlpatterns = patterns('modoboa.extensions.stats.views',
|
||||
url(r'^$', 'adminindex', name='fullindex'),
|
||||
url(r'^(?P<dom_id>\d+)/$', 'index', name='domindex'),
|
||||
url(r'^$', 'index', name='fullindex'),
|
||||
url(r'^graph/$', "getgraph", name="getgraph_root"),
|
||||
url(r'^graph/(?P<dom_id>\w+)/$', "getgraph", name="getgraph"),
|
||||
)
|
||||
|
||||
+15
-20
@@ -21,33 +21,28 @@ periods = [{"name" : "day", "label" : _("Day")},
|
||||
{"name" : "year", "label" : _("Year")},
|
||||
{"name" : "custom", "label" : _("Custom")}]
|
||||
|
||||
@login_required
|
||||
@user_passes_test(lambda u: u.is_superuser)
|
||||
def adminindex(request):
|
||||
domains = Domain.objects.all()
|
||||
return _render(request, 'stats/adminindex.html', {
|
||||
"admin" : True,
|
||||
"domain" : "global",
|
||||
"domains" : domains,
|
||||
"graphs" : graph_list,
|
||||
"periods" : periods,
|
||||
"period" : "day"})
|
||||
|
||||
@login_required
|
||||
@good_domain
|
||||
@permission_required("admin.view_mailboxes")
|
||||
def index(request, dom_id=None):
|
||||
def index(request):
|
||||
domain = None
|
||||
domains = None
|
||||
period = request.GET.has_key("period") and request.GET["period"] or "day"
|
||||
if request.user.has_perm("admin.view_mailboxes"):
|
||||
domain = Domain.objects.get(pk=dom_id)
|
||||
domid = request.GET.has_key("domid") and request.GET["domid"] or ""
|
||||
if request.user.is_superuser:
|
||||
domains = Domain.objects.all()
|
||||
else:
|
||||
domain = Domain.objects.get(pk=domid)
|
||||
|
||||
return _render(request, 'stats/index.html', {
|
||||
"domain" : domain,
|
||||
"graphs" : graph_list,
|
||||
"periods" : periods,
|
||||
"period" : period
|
||||
})
|
||||
"domains" : domains,
|
||||
"domain" : domain,
|
||||
"graphs" : graph_list,
|
||||
"periods" : periods,
|
||||
"period" : period,
|
||||
"selection" : "stats",
|
||||
"domid" : domid
|
||||
})
|
||||
|
||||
@login_required
|
||||
@good_domain
|
||||
|
||||
Reference in New Issue
Block a user