summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhardythe12012-03-22 17:50:34 +0530
committerhardythe12012-03-22 17:50:34 +0530
commit246478f4ef75ae713e96a64d210bd3710bed3df9 (patch)
treec09755a4861bb734b035c685e2f5782952e3d9b1
parentb1ba290f249d84989cb3cc38d018482794582a46 (diff)
downloadonline_test-246478f4ef75ae713e96a64d210bd3710bed3df9.tar.gz
online_test-246478f4ef75ae713e96a64d210bd3710bed3df9.tar.bz2
online_test-246478f4ef75ae713e96a64d210bd3710bed3df9.zip
Tagging functionality in quiz
-rw-r--r--testapp/exam/forms.py98
-rw-r--r--testapp/exam/views.py37
-rw-r--r--testapp/static/exam/js/show_question.js60
-rw-r--r--testapp/static/exam/js/show_quiz.js50
-rw-r--r--testapp/templates/exam/edit_quiz.html16
-rw-r--r--testapp/templates/exam/grade_user.html2
-rw-r--r--testapp/templates/exam/show_quiz.html4
-rw-r--r--testapp/templates/exam/showquestions.html4
8 files changed, 162 insertions, 109 deletions
diff --git a/testapp/exam/forms.py b/testapp/exam/forms.py
index a6844bb..f48a674 100644
--- a/testapp/exam/forms.py
+++ b/testapp/exam/forms.py
@@ -24,32 +24,23 @@ PWD_CHARS = letters + punctuation + digits
class UserRegisterForm(forms.Form):
"""A Class to create new form for User's Registration. It has the various fields and functions required to register a new user to the system"""
- username = forms.CharField(max_length=30,
- help_text='Letters, digits, period and underscores only.')
+ username = forms.CharField(max_length=30, help_text='Letters, digits, period and underscores only.')
email = forms.EmailField()
- password = forms.CharField(max_length=30,
- widget=forms.PasswordInput())
- confirm_password = forms.CharField(max_length=30,
- widget=forms.PasswordInput())
+ password = forms.CharField(max_length=30, widget=forms.PasswordInput())
+ confirm_password = forms.CharField(max_length=30, widget=forms.PasswordInput())
first_name = forms.CharField(max_length=30)
last_name = forms.CharField(max_length=30)
- roll_number = forms.CharField(max_length=30,
- help_text="Use a dummy if you don't have one.")
- institute = forms.CharField(max_length=128,
- help_text='Institute/Organization')
- department = forms.CharField(max_length=64,
- help_text='Department you work/study at')
- position = forms.CharField(max_length=64,
- help_text='Student/Faculty/Researcher/Industry/etc.')
+ roll_number = forms.CharField(max_length=30, help_text="Use a dummy if you don't have one.")
+ institute = forms.CharField(max_length=128, help_text='Institute/Organization')
+ department = forms.CharField(max_length=64, help_text='Department you work/study at')
+ position = forms.CharField(max_length=64, help_text='Student/Faculty/Researcher/Industry/etc.')
def clean_username(self):
u_name = self.cleaned_data["username"]
-
if u_name.strip(UNAME_CHARS):
msg = "Only letters, digits, period and underscore characters are "\
"allowed in username"
raise forms.ValidationError(msg)
-
try:
User.objects.get(username__exact = u_name)
raise forms.ValidationError("Username already exists.")
@@ -100,20 +91,18 @@ class UserLoginForm(forms.Form):
def clean(self):
super(UserLoginForm, self).clean()
- try:
- u_name, pwd = self.cleaned_data["username"], self.cleaned_data["password"]
- user = authenticate(username = u_name, password = pwd)
- except Exception:
- raise forms.ValidationError("Username and/or Password is not entered")
-
+ try:
+ u_name, pwd = self.cleaned_data["username"], self.cleaned_data["password"]
+ user = authenticate(username = u_name, password = pwd)
+ except Exception:
+ raise forms.ValidationError("Username and/or Password is not entered")
if not user:
raise forms.ValidationError("Invalid username/password")
-
return user
class QuizForm(forms.Form):
"""Creates a form to add or edit a Quiz. It has the related fields and functions required."""
-
+
start_date = forms.DateField(initial=datetime.date.today)
duration = forms.IntegerField()
active = forms.BooleanField(required = False)
@@ -124,43 +113,42 @@ class QuizForm(forms.Form):
start_date = self.cleaned_data["start_date"]
duration = self.cleaned_data["duration"]
active = self.cleaned_data['active']
- description = self.cleaned_data["description"]
+ description = self.cleaned_data["description"]
- new_quiz = Quiz()
- new_quiz.start_date=start_date
- new_quiz.duration=duration
- new_quiz.active=active
- new_quiz.description=description
- new_quiz.save()
+ new_quiz = Quiz()
+ new_quiz.start_date=start_date
+ new_quiz.duration=duration
+ new_quiz.active=active
+ new_quiz.description=description
+ new_quiz.save()
class QuestionForm(forms.Form):
- """Creates a form to add or edit a Question. It has the related fields and functions required."""
-
- summary = forms.CharField(widget = forms.Textarea(attrs={'cols': 40, 'rows': 1}))
- description = forms.CharField(widget = forms.Textarea(attrs={'cols': 40, 'rows': 1}))
- points = forms.FloatField()
- test = forms.CharField(widget = forms.Textarea(attrs={'cols': 40, 'rows': 1}))
- options = forms.CharField(widget = forms.Textarea(attrs={'cols': 40, 'rows': 1}),required=False)
- type = forms.CharField(max_length=8, widget=forms.Select(choices=QUESTION_TYPE_CHOICES))
- active = forms.BooleanField(required=False)
- tags = TagField(widget=TagAutocomplete(),required=False)
-
- def save(self):
+ """Creates a form to add or edit a Question. It has the related fields and functions required."""
+
+ summary = forms.CharField(widget = forms.Textarea(attrs={'cols': 40, 'rows': 1}))
+ description = forms.CharField(widget = forms.Textarea(attrs={'cols': 40, 'rows': 1}))
+ points = forms.FloatField()
+ test = forms.CharField(widget = forms.Textarea(attrs={'cols': 40, 'rows': 1}))
+ options = forms.CharField(widget = forms.Textarea(attrs={'cols': 40, 'rows': 1}),required=False)
+ type = forms.CharField(max_length=8, widget=forms.Select(choices=QUESTION_TYPE_CHOICES))
+ active = forms.BooleanField(required=False)
+ tags = TagField(widget=TagAutocomplete(),required=False)
+
+ def save(self):
summary = self.cleaned_data["summary"]
description = self.cleaned_data["description"]
points = self.cleaned_data['points']
- test = self.cleaned_data["test"]
+ test = self.cleaned_data["test"]
options = self.cleaned_data['options']
- type = self.cleaned_data["type"]
- active = self.cleaned_data["active"]
+ type = self.cleaned_data["type"]
+ active = self.cleaned_data["active"]
new_question = Question()
- new_question.summary = summary
- new_question.description = description
- new_question.points = points
- new_question.test = test
- new_question.options = options
- new_question.type = type
- new_question.active = active
- new_question.save()
-
+ new_question.summary = summary
+ new_question.description = description
+ new_question.points = points
+ new_question.test = test
+ new_question.options = options
+ new_question.type = type
+ new_question.active = active
+ new_question.save()
diff --git a/testapp/exam/views.py b/testapp/exam/views.py
index 325d0aa..dedf68c 100644
--- a/testapp/exam/views.py
+++ b/testapp/exam/views.py
@@ -111,6 +111,14 @@ def edit_quiz(request):
quiz.active = active[j]
quiz.description = description[j]
quiz.save()
+ edit_tags=tags[j]
+ quiz.save()
+ for tag in quiz.tags.all():
+ quiz.tags.remove(tag)
+ tags_split = edit_tags.split(',')
+ for i in range(0,len(tags_split)-1):
+ tag = tags_split[i].strip()
+ quiz.tags.add(tag)
j += 1
return my_redirect("/exam/manage/showquiz/")
@@ -244,7 +252,14 @@ def add_quiz(request,quiz_id=None):
d.duration = form['duration'].data
d.active = form['active'].data
d.description = form['description'].data
- d.save()
+ d.save()
+ quiz = Quiz.objects.get(id=quiz_id)
+ for tag in quiz.tags.all():
+ quiz.tags.remove(tag)
+ tags = form['tags'].data.split(',')
+ for i in range(0,len(tags)-1):
+ tag = tags[i].strip()
+ quiz.tags.add(tag)
return my_redirect("/exam/manage/showquiz")
else:
@@ -264,6 +279,15 @@ def add_quiz(request,quiz_id=None):
form.initial['duration'] = d.duration
form.initial['description']= d.description
form.initial['active'] = d.active
+ form_tags = d.tags.all()
+ form_tags_split = form_tags.values('name')
+ initial_tags = ""
+
+ for tag in form_tags_split:
+ initial_tags = initial_tags + str(tag['name']).strip() + ","
+ if (initial_tags == ","):
+ initial_tags = ""
+ form.initial['tags']=initial_tags
return my_render_to_response('exam/add_quiz.html',{'form':form},context_instance=RequestContext(request))
@@ -582,6 +606,14 @@ def show_all_quiz(request):
form.initial['duration'] = d.duration
form.initial['active']= d.active
form.initial['description'] = d.description
+ form_tags = d.tags.all()
+ form_tags_split = form_tags.values('name')
+ initial_tags = ""
+ for tag in form_tags_split:
+ initial_tags = initial_tags + str(tag['name']).strip() + ","
+ if (initial_tags == ","):
+ initial_tags = ""
+ form.initial['tags']=initial_tags
forms.append(form)
return my_render_to_response('exam/edit_quiz.html',
{'forms':forms},
@@ -698,12 +730,9 @@ def grade_user(request, username):
paper.save()
context = {'data': data}
- print context
return my_render_to_response('exam/user_data.html', context,
context_instance=RequestContext(request))
else:
context = {'data': data}
- print context
return my_render_to_response('exam/grade_user.html', context,
context_instance=RequestContext(request))
-
diff --git a/testapp/static/exam/js/show_question.js b/testapp/static/exam/js/show_question.js
index ccacbdd..e3ed1cc 100644
--- a/testapp/static/exam/js/show_question.js
+++ b/testapp/static/exam/js/show_question.js
@@ -1,23 +1,39 @@
function confirm_delete(frm)
- {
- var r = confirm("Are you Sure ?");
- if(r==false)
- {
- for(i=0;i<frm.question.length;i++)
- {
- frm.question[i].checked=false;
- }
- location.replace("{{URL_ROOT}}/exam/manage/showquestion");
- }
- }
- function confirm_edit(frm)
- {
- var n = 0;
- for(i=0;i<frm.question.length;i++)
- {
- if(frm.question[i].checked==true)
- n = n+1;
- }
- if(n==0)
- location.replace("{{URL_ROOT}}/exam/manage/showquestion");
- }
+{
+ var n=0;
+ for (var i =0;i<frm.question.length;i++)
+ {
+ if (frm.question[i].checked == false)
+ n = n + 1 ;
+ }
+ if(n==frm.question.length)
+ {
+ alert("Please Select at least one Question");
+ return false;
+ }
+ var r = confirm("Are you Sure ?");
+ if(r==false)
+ {
+ for(i=0;i<frm.question.length;i++)
+ {
+ frm.question[i].checked=false;
+ }
+ return false;
+ }
+}
+function confirm_edit(frm)
+{
+ var n = 0;
+ for (var i =0;i<frm.question.length;i++)
+ {
+ if (frm.question[i].checked == false)
+ n = n + 1 ;
+ }
+ if(n == frm.question.length)
+ {
+ alert("Please Select at least one Question");
+ return false;
+ }
+ else
+ return true;
+}
diff --git a/testapp/static/exam/js/show_quiz.js b/testapp/static/exam/js/show_quiz.js
index db48a37..55813c9 100644
--- a/testapp/static/exam/js/show_quiz.js
+++ b/testapp/static/exam/js/show_quiz.js
@@ -1,23 +1,39 @@
- function my_confirm(frm)
- {
- var r = confirm("Are you Sure ?");
- if(r==false)
- {
+function confirm_delete(frm)
+{
+ var n=0;
+ for (var i =0;i<frm.quiz.length;i++)
+ {
+ if (frm.quiz[i].checked == false)
+ n = n + 1 ;
+ }
+ if(n==frm.quiz.length)
+ {
+ alert("Please Select at least one Quiz");
+ return false;
+ }
+ var r = confirm("Are you Sure ?");
+ if(r==false)
+ {
for(i=0;i<frm.quiz.length;i++)
{
frm.quiz[i].checked=false;
}
- location.replace("{{URL_ROOT}}/exam/manage/showquiz");
- }
- }
- function confirm_edit(frm)
- {
- var n = 0;
- for (var i =0;i<frm.quiz.length;i++)
- {
+ return false;
+ }
+}
+function confirm_edit(frm)
+{
+ var n = 0;
+ for (var i =0;i<frm.quiz.length;i++)
+ {
if (frm.quiz[i].checked == false)
n = n + 1 ;
- }
- if(n == frm.quiz.length)
- location.replace("{{URL_ROOT}}/exam/manage/showquiz");
- }
+ }
+ if(n == frm.quiz.length)
+ {
+ alert("Please Select at least one Quiz");
+ return false;
+ }
+ else
+ return true;
+}
diff --git a/testapp/templates/exam/edit_quiz.html b/testapp/templates/exam/edit_quiz.html
index 2ab01bb..8e4917d 100644
--- a/testapp/templates/exam/edit_quiz.html
+++ b/testapp/templates/exam/edit_quiz.html
@@ -5,14 +5,17 @@
{% block css %}
<link rel="stylesheet" href="{{ URL_ROOT }}/static/exam/css/question_quiz.css" type="text/css" />
-<style type='text/css'>
-table th, table td
- {
- text-align: left;
- }
-</style>
+<link rel="stylesheet" media="all" type="text/css" href="{{ URL_ROOT }}/static/exam/css/autotaggit.css" />
{% endblock %}
+{% block script %}
+<script src="{{ URL_ROOT }}/static/exam/js/edit_quiz.js"></script>
+<script src="/static/taggit_autocomplete_modified/jquery.min.js" type="text/javascript"></script>
+<script src="/static/taggit_autocomplete_modified/jquery.autocomplete.js" type="text/javascript"></script>
+{% endblock %}
+
+{% block onload %} onload = 'javascript:form_load();' {% endblock %}
+
{% block manage %}
<form name=frm action="{{URL_ROOT}}/exam/manage/editquiz/" method="post">
{% csrf_token %}
@@ -22,6 +25,7 @@ table th, table td
<tr><td><b>Start Date: <td>{{ form.start_date}}
<tr><td><b>Duration: <td> {{ form.duration }}
<tr><td><b>Active: <td> {{ form.active }}
+ <tr><td><b>Tags: <td> {{ form.tags }}
<tr><td><b>Description: <td> {{ form.description }}
<hr>
{% endfor %}
diff --git a/testapp/templates/exam/grade_user.html b/testapp/templates/exam/grade_user.html
index 5ffb199..7137548 100644
--- a/testapp/templates/exam/grade_user.html
+++ b/testapp/templates/exam/grade_user.html
@@ -63,7 +63,7 @@ Start time: {{ paper.start_time }} <br/>
<div id="contentDiv">
<div id="myContent{{question.id}}" style="padding:5px; display:none;">
<p> Description : {{ question.description }} </p>
- <p> Test : {{ question.test }} </p>
+ <p> Test : {{ question.test }} </p>
</div>
</div>
<div class="question-form">
diff --git a/testapp/templates/exam/show_quiz.html b/testapp/templates/exam/show_quiz.html
index 1a4c289..886a696 100644
--- a/testapp/templates/exam/show_quiz.html
+++ b/testapp/templates/exam/show_quiz.html
@@ -24,8 +24,8 @@
<br><br>
<button class="btn" type="button" onClick='location.replace("{{URL_ROOT}}/exam/manage/addquiz");'>Add New Quiz</button>&nbsp;&nbsp;
-<button class="btn" type="submit" name='edit' value='edit' onClick="confirm_edit(frm);" >Edit Selected</button>&nbsp;&nbsp;
-<button class="btn" type="submit" name="delete" value='delete' onClick="my_confirm(frm);">Delete Selected</button>
+<button class="btn" type="submit" name='edit' value='edit' onClick="return confirm_edit(frm);" >Edit Selected</button>&nbsp;&nbsp;
+<button class="btn" type="submit" name="delete" value='delete' onClick="return confirm_delete(frm);">Delete Selected</button>
</form>
{% endif %}
diff --git a/testapp/templates/exam/showquestions.html b/testapp/templates/exam/showquestions.html
index d406522..62b40e4 100644
--- a/testapp/templates/exam/showquestions.html
+++ b/testapp/templates/exam/showquestions.html
@@ -15,7 +15,7 @@
{% endfor %}
<br>
<button class="btn" type="button" onclick='location.replace("{{URL_ROOT}}/exam/manage/addquestion/");'>Add Question</button>&nbsp;&nbsp;
-<button class="btn" type="submit" name='edit' value='edit' onClick="confirm_edit(frm);">Edit Selected</button>&nbsp;&nbsp;
-<button class="btn" type="submit" onClick="confirm_delete(frm);" name='delete' value='delete'>Delete Selected</button>
+<button class="btn" type="submit" name='edit' value='edit' onClick="return confirm_edit(frm);">Edit Selected</button>&nbsp;&nbsp;
+<button class="btn" type="submit" onClick="return confirm_delete(frm);" name='delete' value='delete'>Delete Selected</button>
</form>
{% endblock %}