summaryrefslogtreecommitdiff
path: root/website/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'website/views.py')
-rw-r--r--website/views.py98
1 files changed, 80 insertions, 18 deletions
diff --git a/website/views.py b/website/views.py
index 4a52495..5aee28e 100644
--- a/website/views.py
+++ b/website/views.py
@@ -1,6 +1,6 @@
# Create your views here.
-from django.http import HttpResponse
+from django.http import HttpResponse, JsonResponse
from django.shortcuts import render
from django.shortcuts import render_to_response, render, redirect
from django.template import loader
@@ -13,21 +13,27 @@ from django.views.decorators.csrf import (csrf_exempt, csrf_protect,
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User
from website.models import (Proposal, Comments, Ratings, Question,
- AnswerPaper, Profile)
+ AnswerPaper, Profile, UploadModel)
from website.forms import (ProposalForm, UserRegisterForm, UserRegistrationForm,
- UserLoginForm, WorkshopForm,QuestionUploadForm) # ,ContactForm
+ UserLoginForm, WorkshopForm,QuestionUploadForm
+ )# ,ContactForm
from website.models import Proposal, Comments, Ratings
from social.apps.django_app.default.models import UserSocialAuth
from django.contrib.auth import authenticate, login, logout
-from datetime import datetime
+from datetime import datetime, date
from django import template
from django.core.mail import EmailMultiAlternatives
-import os
+import os, re
from nccps2018.config import *
from website.send_mails import send_email
from django.contrib.auth.models import Group
from django.contrib import messages
+from zipfile import ZipFile
+try:
+ from StringIO import StringIO as string_io
+except ImportError:
+ from io import BytesIO as string_io
@@ -1094,6 +1100,30 @@ def edit_question(request, qid=None):
def quiz_intro(request):
return render(request, 'quiz_intro.html')
+
+def calculate_leader():
+ profiles = Profile.objects.all()
+ leaderboard = {p:0 for p in profiles}
+ marks = {
+ '5': [date(2018, 10, 29), date(2018, 11, 4)],
+ '10': [date(2018, 11, 5), date(2018, 11, 12)]
+ }
+ answers = AnswerPaper.objects.all()
+
+ for i in leaderboard:
+ profiles = AnswerPaper.objects.filter(participant=i)
+ for p in profiles:
+ if p.validate_ans==1:
+ if marks['5'][0] <= p.answered_q.question_day <= marks['5'][1]:
+ leaderboard[i] +=5
+ else:
+ leaderboard[i] +=1
+
+
+ sorted_leaderboard = sorted(leaderboard.items(), key=lambda kv: kv[1])
+ return sorted_leaderboard
+
+
@login_required
def take_quiz(request):
user = request.user
@@ -1162,24 +1192,56 @@ def take_quiz(request):
except:
pass
+ today = datetime.today().date()
+ if today > date(2018, 11, 4):
+ set_visible = 0
+ else:
+ set_visible = 1
+ sorted_leaderboard = calculate_leader()
+
return render(request, 'take_quiz.html', {
- 'question_list' : questions
+ 'question_list' : questions,
+ 'set_visible': set_visible,
+ "leaderboard": sorted_leaderboard[::-1]
})
-def leaderboard(request):
- profiles = Profile.objects.all()
- leaderboard = {p:0 for p in profiles}
+def leaderboard(request):
+ sorted_leaderboard = calculate_leader()
+ return render(request, "leaderboard.html", {'leaderboard': sorted_leaderboard[::-1]})
- answers = AnswerPaper.objects.all()
- for i in leaderboard:
- profile_data = AnswerPaper.objects.filter(participant=i)
- for pro in profile_data:
- if pro.validate_ans==1:
- leaderboard[i] +=1
-
- sorted_leaderboard = sorted(leaderboard.items(), key=lambda kv: kv[1])
- return render(request, "leaderboard.html", {'leaderboard': sorted_leaderboard[::-1]})
+@login_required
+def view_solutions(request,id=None):
+ ''''Show solutions to participants after a specific date'''
+ question_ans_list = Question.objects.all()
+ today = datetime.today().date()
+ if today < date(2018, 11, 15):
+ set_visible = 0
+ else:
+ set_visible = 1
+ if request.method == 'POST':
+ filename = UploadModel.objects.all()
+ attachment_path = os.path.dirname(filename[0].model_file.path)
+ zipfile_name = string_io()
+ zipfile = ZipFile(zipfile_name, "w")
+ attachments = os.listdir(attachment_path)
+ for file in attachments:
+ file_path = os.sep.join((attachment_path, file))
+ zipfile.write(file_path, os.path.basename(file_path))
+ zipfile.close()
+ zipfile_name.seek(0)
+ response = HttpResponse(content_type='application/zip')
+ response['Content-Disposition'] = 'attachment; filename={0}.zip'.format(
+ "Solutions"
+ )
+ response.write(zipfile_name.read())
+ return response
+
+
+ return render(request, 'view_solutions.html', {"question_ans_list": question_ans_list,
+ "set_visible": set_visible
+ })
+ \ No newline at end of file