From 246478f4ef75ae713e96a64d210bd3710bed3df9 Mon Sep 17 00:00:00 2001 From: hardythe1 Date: Thu, 22 Mar 2012 17:50:34 +0530 Subject: Tagging functionality in quiz --- testapp/exam/forms.py | 98 ++++++++++++++----------------- testapp/exam/views.py | 37 ++++++++++-- testapp/static/exam/js/show_question.js | 60 ++++++++++++------- testapp/static/exam/js/show_quiz.js | 50 ++++++++++------ testapp/templates/exam/edit_quiz.html | 16 +++-- testapp/templates/exam/grade_user.html | 2 +- testapp/templates/exam/show_quiz.html | 4 +- testapp/templates/exam/showquestions.html | 4 +- 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 - + {% endblock %} +{% block script %} + + + +{% endblock %} + +{% block onload %} onload = 'javascript:form_load();' {% endblock %} + {% block manage %}
{% csrf_token %} @@ -22,6 +25,7 @@ table th, table td Start Date: {{ form.start_date}} Duration: {{ form.duration }} Active: {{ form.active }} + Tags: {{ form.tags }} Description: {{ form.description }}
{% 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 }}
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 @@

   -   - +   + {% 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 %}
   -   - +   + {% endblock %} -- cgit