From ba4200079321af56a36f64c1ea618527c85cbcd3 Mon Sep 17 00:00:00 2001
From: Andreas <andreasv@fsmpi.rwth-aachen.de>
Date: Sat, 20 May 2017 02:16:14 +0200
Subject: [PATCH] made statistics filterable per semester

---
 static/moderator.js  |  6 ++++--
 stats.py             | 20 ++++++++++++++++++--
 templates/stats.html | 28 +++++++++++++++++++++++-----
 3 files changed, 45 insertions(+), 9 deletions(-)

diff --git a/static/moderator.js b/static/moderator.js
index e7ee4f5..6fa226f 100644
--- a/static/moderator.js
+++ b/static/moderator.js
@@ -289,9 +289,11 @@ var moderator = {
 								bsum += b.y[i]
 							return bsum-asum;
 						});
-						for (var i = 0; i < traces.length; i++)
-							if (i > 20)
+						for (var i = 0; i < traces.length; i++) {
+							if (i > 30) {
 								traces[i].visible = "legendonly";
+							}
+						}
 						$(this.divobj).html("");
 						Plotly.newPlot(this.divobj.id, traces, layout, { "modeBarButtonsToRemove": ['sendDataToCloud','hoverCompareCartesian'], "displaylogo": false});
 					}
diff --git a/stats.py b/stats.py
index cd3f5b6..d57e0fc 100644
--- a/stats.py
+++ b/stats.py
@@ -2,13 +2,23 @@ from server import *
 import json
 from jobs import date_json_handler
 from hashlib import md5
+from datetime import datetime
 
 @app.route('/internal/stats')
 @app.route('/internal/stats/<semester>')
 @register_navbar('Statistiken', icon='stats')
 @mod_required
-def stats(semester=None):
-	return render_template('stats.html',semester=semester)
+def stats():
+	semester = query('SELECT DISTINCT semester from courses WHERE semester != ""');
+	for s in semester:
+		year = int(s['semester'][0:4])
+		if s['semester'].endswith('ss'):
+			s['from'] = datetime(year,4,1)
+			s['to'] =   datetime(year,10,1)
+		if s['semester'].endswith('ws'):
+			s['from'] = datetime(year,10,1)
+			s['to'] =   datetime(year+1,4,1)
+	return render_template('stats.html',semester=semester,filter=request.args.get('filter'))
 
 statsqueries = {}
 statsqueries['formats_views'] = "SELECT formats.description AS labels, count(DISTINCT log.id) AS `values` FROM log JOIN videos ON (videos.id = log.video) JOIN formats ON (formats.id = videos.video_format) GROUP BY formats.id"
@@ -115,6 +125,12 @@ def stats_viewsperday(req, param=""):
 		data[row['date']][row['trace']] = row['y']
 	end = date.today()
 	res = [{'name': trace, 'x': [], 'y': []} for trace in traces]
+
+	filter = request.args.get('filter')
+	if filter:
+		filter = filter.split('-')
+		start = date.fromtimestamp(int(filter[0]))
+		end = date.fromtimestamp(int(filter[1]))
 	while start and start <= end:
 		for trace in res:
 			trace['x'].append(start)
diff --git a/templates/stats.html b/templates/stats.html
index c7cb96a..099673e 100644
--- a/templates/stats.html
+++ b/templates/stats.html
@@ -3,7 +3,7 @@
 <div class="panel-group">
 	<div class="panel panel-default">
 		<div class="panel-heading">
-			<h1 class="panel-title">Statistiken</h1>
+			<h1 class="panel-title">Gesamt</h1>
 		</div>
 		<div class="panel-body">
 			<div class="row col-xs-12">
@@ -11,13 +11,31 @@
 				<div class="col-xs-12 col-md-6 plot-view" data-url="{{url_for('stats_generic', req="lectures_count")}}"></div>
 				<div class="col-xs-12 col-md-6 plot-view" data-type="pie" data-url="{{url_for('stats_generic', req="categories_courses")}}"></div>
 				<div class="col-xs-12 col-md-6 plot-view" data-type="pie" data-url="{{url_for('stats_generic', req="categories_lectures")}}"></div>
-				<!--<div class="col-xs-12 col-md-6 plot-view" data-type="pie" data-url="{{url_for('stats_generic', req="organizer_courses")}}"></div>-->
-				<!--<div class="col-xs-12 col-md-6 plot-view" data-type="pie" data-url="{{url_for('stats_generic', req="formats_views")}}"></div>-->
-				<div class="col-xs-12 plot-view" data-url="{{url_for('stats_viewsperday', req="global")}}"></div>
-				<div class="col-xs-12 plot-view" data-url="{{url_for('stats_viewsperday', req="courses")}}"></div>
+				<div class="col-xs-12 col-md-6 plot-view" data-type="pie" data-url="{{url_for('stats_generic', req="organizer_courses")}}"></div>
+			</div>
+		</div>
+	</div>
+	<div class="panel panel-default">
+		<div class="panel-heading">
+			<span class="panel-title"><a name="semesterstats"></a>Semester <select id="semesterselect" name="semester"><option value="">alle</option></select></span>
+		</div>
+		<div class="panel-body"  >
+			<div class="row col-xs-12">
+				<div class="col-xs-12 plot-view" data-url="{{url_for('stats_viewsperday', req="global", filter=filter)}}"></div>
+				<div class="col-xs-12 plot-view" data-url="{{url_for('stats_viewsperday', req="courses", filter=filter)}}"></div>
 			</div>
 		</div>
 	</div>
 </div>
+<script>
+$( document ).ready(function () {
+	{% for s in semester if s.semester != '' %}
+	$("#semesterselect").append('<option value="{{ s.from.timestamp()|int }}-{{ s.to.timestamp()|int }}">{{ s.semester }}</option>');
+	{% endfor %}
+	$("#semesterselect").val("{{ filter }}")
+	$("#semesterselect").on("change", function () {
+		window.location.href="{{ url_for('stats') }}?filter="+$("#semesterselect").val()+"#semesterstats";
+	});
+});
 </script>
 {% endblock %}
-- 
GitLab