app/views/courses/stats/submissions.html.erb
<h1>Submissions for <%= @course.title %></h1>
<% if [@start_time.hour, @start_time.min, @end_time.hour, @end_time.min].all? {|x| x == 0 } %>
<h2><%= @start_time.strftime("%d.%m.%Y") %> — <%= @end_time.strftime("%d.%m.%Y") %></h2>
<% else %>
<h2><%= @start_time.strftime("%d.%m.%Y %H:%M") %> — <%= @end_time.strftime("%d.%m.%Y %H:%M") %></h2>
<% end %>
<div id="chart-container"></div>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawChart);
function drawChart() {
var startTime = new Date(<%= @start_time.to_i * 1000 %>);
var endTime = new Date(<%= @end_time.to_i * 1000 %>);
var timeUnit = '<%= j(@time_unit) %>';
<%
json_args = {
:start_time => @start_time,
:end_time => @end_time,
:time_unit => @time_unit
}
json_path = organization_course_stat_path(@organization, @course, 'submissions', json_args)
%>
$.getJSON('<%= raw json_path %>', function(data) {
var dataTable = new google.visualization.DataTable();
dataTable.addColumn('datetime', 'Time');
dataTable.addColumn('number', 'Count');
dataTable.addColumn({type: 'string', role: 'tooltip'});
var dateFormatter = new google.visualization.DateFormat({
pattern: 'EEE dd.MM.yyyy HH:mm'
});
dateFormatter.format(dataTable, 0);
var options = {
width: 1200,
height: 600,
hAxis: {
title: 'Time'
},
vAxis: {
title: 'Submissions per ' + timeUnit,
minValue: 0
},
legend: 'none'
};
var chart = new google.visualization.AreaChart(document.getElementById('chart-container'));
var timeUnitGetter = ({
'minute': 'getMinutes',
'hour': 'getHours',
'day': 'getDate'
})[timeUnit];
var timeUnitSetter = ({
'minute': 'setMinutes',
'hour': 'setHours',
'day': 'setDate'
})[timeUnit];
$.each(data, function (i, count) {
var offset = startTime[timeUnitGetter]() + i;
var start = new Date(startTime);
start[timeUnitSetter](offset);
var end = new Date(startTime);
end[timeUnitSetter](offset + 1);
if (timeUnit != 'minute') {
end.setSeconds(end.getSeconds() - 1);
}
var tooltip = count + " submissions between\n" +
dateFormatter.formatValue(start) + " and " + dateFormatter.formatValue(end);
dataTable.addRow([start, count, tooltip]);
});
chart.draw(dataTable, options);
});
}
</script>