Commit 49184b4b authored by SANCHIT JAIN's avatar SANCHIT JAIN

Merge branch 'master' of https://git.cse.iitb.ac.in/ARFA/ARFA

parents a0335296 16fb181d
......@@ -5,15 +5,18 @@ from .models import *
class QuestionForm(forms.ModelForm):
class meta:
model = Question
fields = ('question_text',)
# class QuestionForm(forms.ModelForm):
# class Meta:
# model = Question
# fields = ('question_text',)
class OptionsForm(forms.ModelForm):
class meta:
model = Options
fields = ('option_value',)
# class OptionsForm(forms.ModelForm):
# class Meta:
# model = Options
# fields = ('option_value',)
class
\ No newline at end of file
class TestForm(forms.ModelForm):
class Meta:
model = Test
exclude = ['test_ID', 'ownsership']
\ No newline at end of file
......@@ -33,6 +33,13 @@ class Test(models.Model):
start_time = models.DateTimeField(auto_now=False, auto_now_add=False)
max_marks = models.FloatField(null=True)
# class TestQuestions(models.Model):
# test_ID = models.ForeignKey(
# 'Test', on_delete=models.CASCADE)
# q_ID = models.ForeignKey(
# 'Question', on_delete=models.CASCADE)
class Subject(models.Model):
subject_ID = models.CharField(max_length=20,primary_key=True)
subject = models.CharField(max_length=20)
......
......@@ -9,4 +9,50 @@ Create Test
{%block body%}
<h1> You CAN CREATE A Test HERE prof {{username}}</h1>
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.min.css">
<div class="container">
<div class="panel-default">
<div class="panel-heading">
<h3 class="panel-title">Choose which questions are to be a part of the test</h3>
</div>
<ul class="list-group">
<!-- <ul> -->
<form method="POST" action="create_Test">
{% csrf_token %}
{{ TestForm }}
{%for question in questions%}
<li class="list-group-item">
<!-- <li> -->
<div class="row toggle">
<div class="col-xs-10">
<input type="checkbox" value= "True" name = "{{question.q_id}}" >
{{question.question_text}} {{question.q_id}} </br>
</div>
</div>
<div>
<hr></hr>
<ul>
{%for option in question.option_details%}
<li> {{option.is_answer}}
{{option.option_text}}
</li>
<!-- marks -->
{%endfor%}
<label> marks
<input type="number" name="{{question.q_id}}" min="0" max="10" placeholder="4" step="0.25" value="4">
<input type="number" name="{{question.q_id}}" min="-10" max="0" placeholder="-1" step="0.25" value="0">
</label>
</ul>
</div>
</li>
{%endfor%}
<button type="submit" class="btn btn-login float-right">Submit</button>
</form>
</ul>
</div>
</div>
{%endblock%}
\ No newline at end of file
......@@ -5,9 +5,9 @@ profile
{%endblock%}
{%block head%}
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">
<!-- <link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.0/js/bootstrap.min.js"></script>
<script src="//code.jquery.com/jquery-1.11.1.min.js"></script>
<script src="//code.jquery.com/jquery-1.11.1.min.js"></script> -->
{% load static %}
<link rel="stylesheet" href="{% static 'ARFA_app/home.css' %}" type="text/css">
......@@ -48,7 +48,7 @@ profile
{%endblock%}
{%block body%}
<link href="http://fontawesome.io/assets/font-awesome/css/font-awesome.css" rel="stylesheet" media="screen">
<!-- <link href="http://fontawesome.io/assets/font-awesome/css/font-awesome.css" rel="stylesheet" media="screen"> -->
<div class="container">
<div class="row user-menu-container square">
<div class="col-md-7 user-details">
......@@ -224,7 +224,7 @@ profile
<p id = "demo">
</p>
<!-- <button type="button" class="btn btn-login float-right" onclick="loadTest()">Load Test</button> -->
<button type="button" class="btn btn-login float-right" onclick="loadTest()">Load Test</button> -->
<form action="testHome" method='POST'>
{% csrf_token %}
......@@ -241,13 +241,13 @@ profile
{% for question, options in data.questions.items %}
<li style="font-weight: bold;">Question : {{ question }}</li>
{% for option in options %}
<input type="checkbox" value= "{{option.1}}" name = "{{option.0}}" >{{ option.2 }} </br>
<input type="checkbox" name = "{{option.0}}" value= "{{option.1}}" >{{ option.2 }} </br>
{% endfor %}
{% endfor %}
<button type="submit" class="btn btn-login float-right">Submit</button>
</form>
</ol>
{%endblock%}
......@@ -4,7 +4,7 @@
View personal Question
{%endblock%}
{%block body%}
<h1> You CAN VIEW personal QUESTION HERE prof {{username}}</h1>
<h1> You CAN VIEW all questions QUESTION HERE prof {{username}}</h1>
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.min.css">
<div class="container">
<div class="panel-default">
......
from .models import *
from django.db import IntegrityError
from __future__ import unicode_literals
from django.http import HttpResponse
from django.shortcuts import render,redirect
from . import models
from .models import Responses
from .models import Test
from .models import Question
from .models import Options
from .models import Student
from django.contrib.auth.decorators import login_required
from django.http import HttpResponse
from django.views.decorators.cache import cache_control
import json
from django.db import connection
from django.db import IntegrityError
def evaluate(responses, otherData):
#create evaluation object
......@@ -52,3 +66,47 @@ def evaluate(responses, otherData):
print "Integrity error - evaluation not recorded"
pass
def getOptions(question): #returns queryset
return models.Options.objects.get(q_ID = question)
def get_all_questions(request):
args={'username':request.session['username']}
# args = {'username':'mathura'}
cursor = connection.cursor()
cursor.execute(''' SELECT s.subject,q."q_ID" as q_ID,q.question_text,q.topic,q.subtopic,q.source,
q.difficulty_set,q.image_link,q.visibility,q.ownership,o."option_Value" as option_details,
o."is_Answer"
FROM "ARFA_app_question" as q,
"ARFA_app_options" as o,"ARFA_app_subject" as s
WHERE ( q.faculty_id = %s or q.visibility='public' ) and s."subject_ID" = q."subject_ID_id" and q."q_ID" = o."q_ID_id"
order by s.subject,q_ID ''',[args['username']])
rows = cursor.fetchall()
# print(len(rows))
columns = [col[0] for col in cursor.description]
res=[]
options_so_far = []
preval = []
first = True
for val in rows :
if(first==True):
first=False
preval = list(val[:-1])
options_so_far = [{"option_text":val[-2],"is_answer":val[-1]}]
else:
if not(preval[0]==val[0] and preval[1]==val[1]):
preval[-1] = options_so_far
# preval[1] = "q"+str(preval[1])
t = dict(zip(columns[:-1], preval))
res.append(t)
options_so_far = [{"option_text":val[-2],"is_answer":val[-1]}]
preval = list(val[:-1])
else:
options_so_far.append({"option_text":val[-2],"is_answer":val[-1]})
if not(first):
preval[-1] = options_so_far
# preval[1] = "q"+str(preval[1])
t = dict(zip(columns[:-1], preval))
res.append(t)
return res
\ No newline at end of file
......@@ -9,8 +9,9 @@ from .models import Test
from .models import Question
from .models import Options
from .models import Student
from . import engine
from .engine import evaluate
from . import utilities
from .utilities import evaluate
from . import forms
from django.contrib.auth.decorators import login_required
from django.http import HttpResponse
......@@ -227,7 +228,7 @@ def result(request):
responses.append({int(q):data[q]})
#call evaluate function
engine.evaluate(responses,
utilities.evaluate(responses,
{'username':request.session['username'], 'testID':responseObj.test_ID_id})
return HttpResponse("Result page should be here")
......@@ -295,44 +296,7 @@ def view_all_question(request):
if(request.session.get('role',None)!="faculty"):
return render(request,'ARFA_app/not_a_faculty.html')
args={'username':request.session['username']}
# args = {'username':'mathura'}
cursor = connection.cursor()
cursor.execute(''' SELECT s.subject,q."q_ID" as q_ID,q.question_text,q.topic,q.subtopic,q.source,
q.difficulty_set,q.image_link,q.visibility,q.ownership,o."option_Value" as option_details,
o."is_Answer"
FROM "ARFA_app_question" as q,
"ARFA_app_options" as o,"ARFA_app_subject" as s
WHERE ( q.faculty_id = %s or q.visibility='public' ) and s."subject_ID" = q."subject_ID_id" and q."q_ID" = o."q_ID_id"
order by s.subject,q_ID ''',[args['username']])
rows = cursor.fetchall()
# print(len(rows))
columns = [col[0] for col in cursor.description]
res=[]
options_so_far = []
preval = []
first = True
for val in rows :
if(first==True):
first=False
preval = list(val[:-1])
options_so_far = [{"option_text":val[-2],"is_answer":val[-1]}]
else:
if not(preval[0]==val[0] and preval[1]==val[1]):
preval[-1] = options_so_far
preval[1] = "q"+str(preval[1])
t = dict(zip(columns[:-1], preval))
res.append(t)
options_so_far = [{"option_text":val[-2],"is_answer":val[-1]}]
preval = list(val[:-1])
else:
options_so_far.append({"option_text":val[-2],"is_answer":val[-1]})
if not(first):
preval[-1] = options_so_far
preval[1] = "q"+str(preval[1])
t = dict(zip(columns[:-1], preval))
res.append(t)
res = utilities.get_all_questions(request)
args={'username':request.session['username'],'questions':res}
args.update(request.session.get('args',None))
......@@ -340,8 +304,58 @@ def view_all_question(request):
def create_Test(request):
args={'username':request.session['username']}
if(request.session.get('session',None)!=True):
return render(request,'ARFA_app/login.html')
if(request.session.get('role',None)!="faculty"):
return render(request,'ARFA_app/not_a_faculty.html')
res = utilities.get_all_questions(request)
test = None
TestForm = forms.TestForm()
args={'username':request.session['username'],'questions':res, 'TestForm':TestForm}
if request.method == "GET":
print res
return render(request,'ARFA_app/create_Test.html',args)
if request.method == "POST":
data = dict(request.POST.copy()) #copy to make QueryDict mutable. HttpResponse is immutable
data.pop('csrfmiddlewaretoken')
if not data: #only csrf token was sent, display create test page
return render(request,'ARFA_app/create_Test.html',args)
if TestForm.is_valid():
test = TestForm.save()
# for attr in dir(Test):
# print attr
# try:
# data.pop(attr)
# except KeyError as e:
# pass
#data is being sent
#create test object
# test = Test()
containsObj = models.Contains(test_ID=test)
for q in data.keys():
try:
int(q)
containsObj.q_ID_id = q
#data[q] is an array ['True', 'pos_marks', 'neg_marks']
containsObj.marks_pos = data[q][1]
containsObj.marks_neg = data[q][2]
containsObj.pk = None
containsObj.save()
except ValueError as e:
data.pop(q)
continue
# for q in data:
print data
def view_personal_Test(request):
args={'username':request.session['username']}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment