summaryrefslogtreecommitdiff
path: root/yaksh
diff options
context:
space:
mode:
Diffstat (limited to 'yaksh')
-rw-r--r--yaksh/templates/yaksh/monitor.html1
-rw-r--r--yaksh/templates/yaksh/statistics_question.html19
-rw-r--r--yaksh/urls.py1
-rw-r--r--yaksh/views.py29
4 files changed, 50 insertions, 0 deletions
diff --git a/yaksh/templates/yaksh/monitor.html b/yaksh/templates/yaksh/monitor.html
index ecb8b42..cb14ba5 100644
--- a/yaksh/templates/yaksh/monitor.html
+++ b/yaksh/templates/yaksh/monitor.html
@@ -39,6 +39,7 @@
{% if papers %}
<p>Number of papers: {{ papers|length }} </p>
+<p><a href="{{URL_ROOT}}/exam/manage/statistics/question/{{papers.0.question_paper.id}}">Question Statisitics</a></p>
<table border="1" cellpadding="3">
<tr>
<th> Name </th>
diff --git a/yaksh/templates/yaksh/statistics_question.html b/yaksh/templates/yaksh/statistics_question.html
new file mode 100644
index 0000000..d9fcd34
--- /dev/null
+++ b/yaksh/templates/yaksh/statistics_question.html
@@ -0,0 +1,19 @@
+{% extends "manage.html" %}
+
+{% block title %} Statistics {% endblock title %}
+
+{% block css %}
+<link rel="stylesheet" href="{{ URL_ROOT }}/static/yaksh/css/question_quiz.css" type="text/css" />
+{% endblock %}
+{% block subtitle %}
+Statistics for {{quiz_name}}
+{% endblock %}
+{% block manage %}
+<p><b>Total number of participants(including multiple attempts): {{ total }}</b></p>
+<table class="bordered-table zebra-striped">
+ <tr><th>Question</th><th>Type</th><th>Answered</th></tr>
+ {% for question, attempts in question_stats.items %}
+ <tr><td>{{ question.summary }}</td><td>{{ question.type }}</td><td>{{ attempts }} ({% widthratio attempts total 100 %}%)</td></tr>
+ {% endfor %}
+</table>
+{% endblock %}
diff --git a/yaksh/urls.py b/yaksh/urls.py
index 61222b8..ea6f5e8 100644
--- a/yaksh/urls.py
+++ b/yaksh/urls.py
@@ -50,6 +50,7 @@ urlpatterns = patterns('yaksh.views',
url(r'^manage/designquestionpaper/manual$', 'manual_questionpaper'),
url(r'^manage/designquestionpaper/manual/(?P<questionpaper_id>\d+)/$',\
'manual_questionpaper'),
+ url(r'^manage/statistics/question/(?P<questionpaper_id>\d+)/$','statistics'),
url(r'^ajax/questionpaper/(?P<query>.+)/$', 'ajax_questionpaper'),
url(r'^ajax/questions/filter/$', 'ajax_questions_filter'),
diff --git a/yaksh/views.py b/yaksh/views.py
index 755b33b..4724f98 100644
--- a/yaksh/views.py
+++ b/yaksh/views.py
@@ -1164,6 +1164,33 @@ def complete(request, reason=None, attempt_num=None, questionpaper_id=None):
else:
return my_redirect('/exam/')
+@login_required
+def statistics(request, questionpaper_id):
+ user = request.user
+ if not is_moderator(user):
+ raise Http404('You are not allowed to view this page')
+ questions_answered = []
+ question_stats = {}
+ papers = AnswerPaper.objects.filter(question_paper_id=questionpaper_id,
+ status='completed')
+ for paper in papers:
+ questions_answered += paper.questions_answered.split('|')
+ quiz_name = paper.question_paper.quiz.description
+ questions_answered = collections.Counter(map(int, filter(None,
+ questions_answered)))
+ total_attempt = papers.count()
+ questions = Question.objects.filter(id__in=paper.questions.split('|')).\
+ order_by('type')
+ for question in questions:
+ if question.id in questions_answered:
+ question_stats[question] = questions_answered[question.id]
+ else:
+ question_stats[question] = 0
+ context = {'question_stats': question_stats, 'quiz_name': quiz_name,
+ 'total': total_attempt}
+ return my_render_to_response('yaksh/statistics_question.html', context,
+ context_instance=RequestContext(request))
+
@login_required
def monitor(request, questionpaper_id=None):
@@ -1520,3 +1547,5 @@ def design_questionpaper(request):
context = {'form': form}
return my_render_to_response('yaksh/design_questionpaper.html',
context, context_instance=ci)
+
+