Commit edc4a72b authored by Rahul-chunduru's avatar Rahul-chunduru

ui for images in questions

parent 0a4a3412
# -*- coding: utf-8 -*-
# Generated by Django 1.11.16 on 2018-11-26 08:57
from __future__ import unicode_literals
import django.core.validators
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='ContactUs',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=200)),
('phone_number', models.CharField(max_length=10)),
('email_ID', models.CharField(max_length=200)),
('text', models.CharField(max_length=200)),
],
),
migrations.CreateModel(
name='Contains',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('marks_pos', models.FloatField(null=True)),
('marks_neg', models.FloatField(null=True)),
],
),
migrations.CreateModel(
name='Created_BY',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
],
),
migrations.CreateModel(
name='Evaluation',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('marks', models.FloatField(null=True)),
],
),
migrations.CreateModel(
name='Faculty',
fields=[
('name', models.CharField(max_length=200)),
('phone_number', models.CharField(max_length=10)),
('email_ID', models.CharField(max_length=200)),
('address', models.CharField(max_length=400)),
('username', models.CharField(max_length=200, primary_key=True, serialize=False)),
('password', models.CharField(max_length=200, validators=[django.core.validators.MinLengthValidator(4)])),
('salary', models.IntegerField(default=0)),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='Options',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('option_ID', models.IntegerField()),
('option_Value', models.CharField(max_length=1000)),
('is_Answer', models.BooleanField(default=False)),
],
),
migrations.CreateModel(
name='Question',
fields=[
('q_ID', models.AutoField(primary_key=True, serialize=False)),
('topic', models.CharField(max_length=20)),
('subtopic', models.CharField(max_length=20)),
('time_stamp', models.DateTimeField(auto_now=True)),
('source', models.CharField(max_length=200)),
('difficulty_set', models.CharField(max_length=20)),
('difficulty_observed', models.CharField(max_length=20)),
('question_text', models.CharField(max_length=1000)),
('image_link', models.CharField(max_length=200)),
('num_appeared', models.IntegerField(default=0)),
('num_correct', models.IntegerField(default=0)),
('visibility', models.CharField(max_length=20)),
('ownership', models.CharField(max_length=20)),
('faculty', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ARFA_app.Faculty')),
],
),
migrations.CreateModel(
name='QuestionImage',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('image', models.FileField(upload_to='QuestionImages/')),
('imageDesc', models.CharField(max_length=100)),
('orderNum', models.IntegerField(default=1)),
('question', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ARFA_app.Question')),
],
),
migrations.CreateModel(
name='Responses',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('Response_value', models.BooleanField(default=False)),
('option_ID', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ARFA_app.Options')),
('q_ID', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ARFA_app.Question')),
],
),
migrations.CreateModel(
name='Student',
fields=[
('name', models.CharField(max_length=200)),
('phone_number', models.CharField(max_length=10)),
('email_ID', models.CharField(max_length=200)),
('address', models.CharField(max_length=400)),
('username', models.CharField(max_length=200, primary_key=True, serialize=False)),
('password', models.CharField(max_length=200, validators=[django.core.validators.MinLengthValidator(4)])),
('Standard', models.IntegerField(default=12)),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='Subject',
fields=[
('subject_ID', models.CharField(max_length=20, primary_key=True, serialize=False)),
('subject', models.CharField(max_length=20)),
],
),
migrations.CreateModel(
name='Takes',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('time_stamp', models.DateTimeField(auto_now=True)),
('total_marks', models.FloatField(null=True)),
('rank', models.IntegerField(default=0)),
('student', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ARFA_app.Student')),
],
),
migrations.CreateModel(
name='Test',
fields=[
('test_ID', models.AutoField(primary_key=True, serialize=False)),
('test_name', models.CharField(max_length=200, unique=True)),
('visibility_student', models.CharField(max_length=20)),
('ownership', models.CharField(max_length=20)),
('expected_time_for_completion', models.DurationField(blank=True)),
('start_time', models.DateTimeField()),
('max_marks', models.IntegerField(null=True)),
],
),
migrations.AddField(
model_name='takes',
name='test_ID',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ARFA_app.Test'),
),
migrations.AddField(
model_name='responses',
name='student_ID',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ARFA_app.Student'),
),
migrations.AddField(
model_name='responses',
name='test_ID',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ARFA_app.Test'),
),
migrations.AddField(
model_name='question',
name='subject_ID',
field=models.ForeignKey(default='M', on_delete=django.db.models.deletion.CASCADE, to='ARFA_app.Subject'),
),
migrations.AddField(
model_name='options',
name='q_ID',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ARFA_app.Question'),
),
migrations.AddField(
model_name='faculty',
name='subject_ID',
field=models.ForeignKey(default='M', on_delete=django.db.models.deletion.CASCADE, to='ARFA_app.Subject'),
),
migrations.AddField(
model_name='evaluation',
name='q_ID',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ARFA_app.Question'),
),
migrations.AddField(
model_name='evaluation',
name='student',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ARFA_app.Student'),
),
migrations.AddField(
model_name='evaluation',
name='test_ID',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ARFA_app.Test'),
),
migrations.AddField(
model_name='created_by',
name='faculty',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ARFA_app.Faculty'),
),
migrations.AddField(
model_name='created_by',
name='test_ID',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ARFA_app.Test'),
),
migrations.AddField(
model_name='contains',
name='q_ID',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ARFA_app.Question'),
),
migrations.AddField(
model_name='contains',
name='test_ID',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ARFA_app.Test'),
),
migrations.AlterUniqueTogether(
name='takes',
unique_together=set([('student', 'test_ID')]),
),
migrations.AlterUniqueTogether(
name='responses',
unique_together=set([('student_ID', 'test_ID', 'q_ID', 'option_ID')]),
),
migrations.AlterUniqueTogether(
name='options',
unique_together=set([('q_ID', 'option_ID')]),
),
migrations.AlterUniqueTogether(
name='evaluation',
unique_together=set([('student', 'test_ID', 'q_ID')]),
),
migrations.AlterUniqueTogether(
name='created_by',
unique_together=set([('faculty', 'test_ID')]),
),
migrations.AlterUniqueTogether(
name='contains',
unique_together=set([('q_ID', 'test_ID')]),
),
]
......@@ -16,6 +16,12 @@ Total Time :<b > {{total_time.hours}} {{total_time.minutes}} </b>
<h2 align="center" style=" text-decoration: underline;"><b> {{testName.test_name}} </b> </h2>
</div>
<script>
function submitExam()
{
document.getElementById('ExamForm').submit() ;
}
</script>
<script>
// Set the date we're counting down to
var countDownDate = new Date( {{ end_time }} );
......@@ -51,19 +57,37 @@ var x = setInterval(function() {
<div style="margin-left: 5%; margin-top: 10%">
<ol>
<font size="3">
<form class="exam-form" method="POST" action="/arfa/result">
<form class="exam-form" method="POST" action="/arfa/result" id="ExamForm">
<p style="margin-right: 5%"> <b> Questions </b></p>
{% csrf_token %}
<input name="testID" value="{{testID}}" type="hidden" >
{% for question, options in questions.items %}
{{images}}
{% for question, data in questions.items %}
<div class="row" style="margin-top: 10px; margin-bottom: 10px">
<li style="font-weight: bold;" > {{ question }}</li>
{% for option in options %}
<li style="font-weight: bold;margin-left: 10px; margin-bottom: 10px" > {{ question }}<br></li>
<!-- adding an image -->
{% for image in data.images %}
{%load static%}
{%if image.0 %}
<div align="center" style="margin-top:30px">
<img src = "{% static "" %}{{ image.0 }}" width="35%" height="35%" >
<p style="margin-top:5px">{{image.1}}</p>
{%endif%}
</div>
{% endfor %}
{% for option in data.options %}
<input type="checkbox" name = "{{option.0}}" value= "{{option.1}}" > {{ option.2 }} </br>
{% endfor %}
</div>
{% endfor %}
<button type="submit" class="btn btn-login" style="float: right;">Submit</button>
<button onclick="submitExam()" class="btn btn-login" style="float: right;">Submit</button>
</form>
</font>
......
......@@ -34,7 +34,9 @@ View all Question
</li>
{%else%}
<li>
<p>
{{option.option_text}}
</p>
</li>
{%endif%}
{%endfor%}
......
......@@ -4,7 +4,12 @@
View personal Question
{%endblock%}
{%block body%}
<h1> You CAN VIEW personal QUESTION HERE prof {{username}}</h1>
<style>
p {
font-size: 130%
}
</style>
<h2 align="center"> You CAN VIEW personal QUESTIONS HERE prof {{username}}</h2>
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.min.css">
<div class="container">
<div class="panel-default">
......@@ -18,7 +23,17 @@ View personal Question
<!-- <li> -->
<div class="row toggle">
<div class="col-xs-10">
{{question.question_text}}
<p> <b> Question. </b> {{question.question_text}} </p>
{%if question.ip%}
{%load static%}
<div align="center">
<img src = "{% static "" %}{{question.ip|slice:"16:" }}" width="35%" height="35%">
<p style="margin-top:5px">
{{question.imdesc}}
</p>
</div>
{%endif%}
</div>
</div>
<div>
......@@ -31,7 +46,9 @@ View personal Question
</li>
{%else%}
<li>
<p>
{{option.option_text}}
</p>
</li>
{%endif%}
{%endfor%}
......
......@@ -265,13 +265,16 @@ def loadStudentTest(request):
args = {}
args['username'] = request.session['username']
args['is_session'] = True
test_ID = request.POST['testID']
taken_res=models.Takes.objects.filter(student__username = args['username'], test_ID__test_ID= test_ID)
if taken_res:
return redirect('/arfa')
testName = Test.objects.values('test_name').get(pk=test_ID)
st = Test.objects.values('start_time').get(pk=test_ID)
start_time = st['start_time']
# start_time = start_time + datetime.timedelta(hours=5,minutes=30)
M = Test.objects.values('max_marks').get(pk=test_ID)
total_time = Test.objects.values('expected_time_for_completion').get(pk=test_ID)
end_time = start_time + total_time['expected_time_for_completion']
......@@ -279,20 +282,32 @@ def loadStudentTest(request):
secs = (total_time['expected_time_for_completion'].seconds)
hours = secs // 3600
minute = (secs % 3600) // 60
questions = Contains.objects.filter(test_ID=test_ID).values('q_ID')
options = models.Options.objects.select_related('q_ID').filter(q_ID__in = questions)
print test_ID
print questions.all()
images = models.QuestionImage.objects.select_related('q_ID').filter(q_ID__in = questions)
questionsJSON = {}
for option in options:
if option.q_ID.question_text in questionsJSON:
questionsJSON[option.q_ID.question_text].append(
questionsJSON[option.q_ID.question_text]['options'].append(
[option.q_ID.q_ID, option.pk, option.option_Value])
else:
questionsJSON[option.q_ID.question_text] = [[option.q_ID.q_ID,
questionsJSON[option.q_ID.question_text] = {}
questionsJSON[option.q_ID.question_text]['options'] = [[option.q_ID.q_ID,
option.pk, option.option_Value]]
# print option.option_Value
# print option.q_ID.q_ID
# imageJSON = {}
for image in images:
if (image.q_ID.question_text in questionsJSON) and \
('images' in questionsJSON[image.q_ID.question_text]):
questionsJSON[option.q_ID.question_text]['images'].append(
[str(image.image)[16:],image.imageDesc])
else:
questionsJSON[option.q_ID.question_text] = {}
questionsJSON[option.q_ID.question_text]['images'] = [[str(image.image)[16:],
image.imageDesc]]
args['questions'] = questionsJSON
args['testName'] = testName
args['testID'] = test_ID
......@@ -381,11 +396,13 @@ def view_personal_question(request):
args={'username':request.session['username'], 'is_session':True}
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.visibility,q.ownership,o."option_Value" as option_details,
q.difficulty_set,q.visibility,q.ownership,q.image as ip , q."imageDesc" as imdesc,
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 and s."subject_ID" = q."subject_ID_id" and q."q_ID" = o."q_ID_id"
FROM ("ARFA_app_question" as u LEFT OUTER JOIN "ARFA_app_questionimage" as v ON
u."q_ID" = v."q_ID_id") as q,
"ARFA_app_options" as o,"ARFA_app_subject" as s
WHERE q.faculty_id = %s 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()
columns = [col[0] for col in cursor.description]
......@@ -433,75 +450,6 @@ def view_all_question(request):
args.update(request.session.get('args',None))
return render(request,'ARFA_app/view_all_question.html',args)
# def create_Test(request):
# 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
# form = forms.TestForm()
# args={'username':request.session['username'],'questions':res, 'TestForm':TestForm,
# 'is_session':True}
# if request.method == "GET":
# return render(request,'ARFA_app/create_Test.html',args)
# if request.method == "POST":
# form = TestForm(request.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)
# print vars(form)
# #TODO: validation - starttime < now
# if form.is_valid():
# test = form.save()
# creator = models.Created_BY(test_ID=test,faculty=models.Faculty.objects.filter(username=request.session['username']).get())
# creator.save()
# else:
# if form.errors:
# for field in form:
# print field.errors
# return HttpResponse("Test Form Invalid")
# for attr in dir(Test):
# # print attr
# try:
# data.pop(attr)
# except KeyError as e:
# pass
# containsObj = models.Contains(test_ID=test)
# # print data
# for q in data.keys():
# if len(data[q]) != 3:
# continue
# 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()
# print "success"
# print containsObj
# except ValueError as e:
# data.pop(q)
# print e
# continue
# #schedule ranking function when test is finished
# tasks.testRanks(test.test_ID, test.start_time+test.expected_time_for_completion)
# return render(request,'ARFA_app/view_personal_Test.html',args)
def create_Test(request):
if(request.session.get('session',None)!=True):
return render(request,'ARFA_app/login.html')
......
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