diff options
Diffstat (limited to 'yaksh')
-rw-r--r-- | yaksh/forms.py | 24 | ||||
-rw-r--r-- | yaksh/templates/manage.html | 2 | ||||
-rw-r--r-- | yaksh/templates/registration/password_change_done.html | 16 | ||||
-rw-r--r-- | yaksh/templates/registration/password_change_form.html | 18 | ||||
-rw-r--r-- | yaksh/templates/user.html | 2 | ||||
-rw-r--r-- | yaksh/templates/yaksh/course_detail.html | 31 | ||||
-rw-r--r-- | yaksh/templates/yaksh/editprofile.html | 21 | ||||
-rw-r--r-- | yaksh/templates/yaksh/password_changed.html | 15 | ||||
-rw-r--r-- | yaksh/templates/yaksh/profile_updated.html | 15 | ||||
-rw-r--r-- | yaksh/templates/yaksh/view_profile.html | 48 | ||||
-rw-r--r-- | yaksh/urls.py | 10 | ||||
-rw-r--r-- | yaksh/views.py | 67 |
12 files changed, 259 insertions, 10 deletions
diff --git a/yaksh/forms.py b/yaksh/forms.py index 84cf1c4..f4d1b02 100644 --- a/yaksh/forms.py +++ b/yaksh/forms.py @@ -187,3 +187,27 @@ class CourseForm(forms.ModelForm): class Meta: model = Course fields = ['name', 'active', 'enrollment'] + +class EditProfile(forms.Form): + """ edit profile form for students and moderators """ + + first_name = forms.CharField(max_length=30) + last_name = forms.CharField(max_length=30) + institute = forms.CharField\ + (max_length=128) + department = forms.CharField\ + (max_length=64) + roll_number = forms.CharField\ + (max_length=30) + position = forms.CharField\ + (max_length=64) + + def save(self, user): + user.first_name = self.cleaned_data['first_name'] + user.last_name = self.cleaned_data['last_name'] + user.profile.department = self.cleaned_data['department'] + user.profile.institute = self.cleaned_data['institute'] + user.profile.roll_number = self.cleaned_data['roll_number'] + user.profile.position = self.cleaned_data['position'] + user.save() + user.profile.save() diff --git a/yaksh/templates/manage.html b/yaksh/templates/manage.html index 11e2187..a10291b 100644 --- a/yaksh/templates/manage.html +++ b/yaksh/templates/manage.html @@ -30,6 +30,8 @@ <li><a href="{{ URL_ROOT }}/exam/manage/gradeuser">Grade User</a></li> <li><a href="{{ URL_ROOT }}/exam/manage/monitor">Monitor</a></li> <li><a href="{{ URL_ROOT }}/exam/manage/courses">Courses</a></li> +<li><a href="{{ URL_ROOT }}/exam/manage/viewprofile">My Profile</a></li> +<li><a href="{{ URL_ROOT }}/exam/changepassword">Change Password</a></li> </ul> <ul style="float:right;"> <li><strong><a style='cursor:pointer' onClick='location.replace("{{URL_ROOT}}/exam/complete/");'>Log out</a></strong></li> diff --git a/yaksh/templates/registration/password_change_done.html b/yaksh/templates/registration/password_change_done.html new file mode 100644 index 0000000..fef07d1 --- /dev/null +++ b/yaksh/templates/registration/password_change_done.html @@ -0,0 +1,16 @@ +{% extends "base.html" %} + +{% block title %}Password change successful{% endblock %} +{% block pagetitle %}Online Test {% endblock %} +{% block script %} +<script type="text/javascript"> + window.setTimeout(function() + { + location.href="{{ URL_ROOT }}/exam/" + }, 2000); +</script> +{% endblock %} +{% block content %} +<h3>Your password has been changed successfully.</h3> +<h4>Redirecting ...</h4> +{% endblock %}
\ No newline at end of file diff --git a/yaksh/templates/registration/password_change_form.html b/yaksh/templates/registration/password_change_form.html new file mode 100644 index 0000000..48292f8 --- /dev/null +++ b/yaksh/templates/registration/password_change_form.html @@ -0,0 +1,18 @@ +{% extends "base.html" %} +<!DOCTYPE html> +{% block title %} Change Password {% endblock %} + +{% block pagetitle %} Online Test {% endblock %} + +{% block content %} +<form action="" method="post" > + {% csrf_token %} + <center> + <table class=span1> + {{ form }} + </table> + </center> + <center><button class="btn" type="submit">Change Password</button> + <button class="btn" type="button" name="button" onClick='location.replace("{{URL_ROOT}}/exam/");'>Cancel</button></center> +</form> +{% endblock content %} diff --git a/yaksh/templates/user.html b/yaksh/templates/user.html index 00151d2..b3931cf 100644 --- a/yaksh/templates/user.html +++ b/yaksh/templates/user.html @@ -30,6 +30,8 @@ <ul> <li><a href="{{ URL_ROOT }}/exam/quizzes">Quizzes</a></li> <li><a href="{{ URL_ROOT }}/exam/results">Results</a></li> + <li><a href="{{ URL_ROOT }}/exam/viewprofile">My Profile</a></li> + <li><a href="{{ URL_ROOT }}/exam/changepassword">Change Password</a></li> </ul> <ul style="float:right;"> <li><strong><a style='cursor:pointer' onClick='location.replace("{{URL_ROOT}}/exam/complete/");'>Log out</a></strong></li> diff --git a/yaksh/templates/yaksh/course_detail.html b/yaksh/templates/yaksh/course_detail.html index ed56585..2e17035 100644 --- a/yaksh/templates/yaksh/course_detail.html +++ b/yaksh/templates/yaksh/course_detail.html @@ -7,21 +7,44 @@ {% block css %} <link rel="stylesheet" media="all" type="text/css" href="{{ URL_ROOT }}/static/yaksh/css/course.css" /> {% endblock %} - +{% block script %} +<script language="JavaScript" type="text/javascript" src="{{ URL_ROOT }}/static/yaksh/js/jquery-1.4.2.min.js"></script> +<script> +$(document).ready(function(){ +$(".checkall").click( function(){ + if($(this).attr("checked")) { + $("#enroll-all input:checkbox").each(function(index, element) { + $(this).attr('checked', true); + }); + } + else { + $("#enroll-all input:checkbox").each(function(index, element) { + $(this).attr('checked', false); + }); + } + }); +}); +</script> +{% endblock %} {% block manage %} <div class="row"> <div class="span6 wrap"> <center><b><u>Requests</u></b></center><br> + <form action="{{URL_ROOT}}/exam/manage/enroll/{{ course.id }}" method="post"> + {% csrf_token %} + <input type="checkbox" class="checkall"/><font size="2">Enroll all</font> + <div id="enroll-all"> {% for request in course.get_requests %} <div class="well"> <div class="row"> - <div class="span3" style="padding-top:10px"> - {{ request.username }} + <div class="span3" style="padding-top:10px"> + <input type="checkbox" name="check" value="{{ request.id }}"></input> <a href="#" data-toggle="tooltip" title=" Institute: {{ request.profile.institute }}
Department: {{ request.profile.department}}
Roll Number: {{ request.profile.roll_number }}">{{ request.username }}</a><br> </div> <a class="btn success" href="{{URL_ROOT}}/exam/manage/enroll/{{ course.id }}/{{ request.id }}/"> Enroll </a> <a class="btn danger" href="{{URL_ROOT}}/exam/manage/reject/{{ course.id }}/{{ request.id }}/"> Reject </a> </div> </div> {% endfor %} + </div> </div> <div class="span6 wrap"> <center><b><u>Rejected</u></b></center><br> @@ -38,6 +61,8 @@ </div> </div> <br> +<button class="btn" type="submit" name='enroll' value='enroll'>Enroll</button> +</form> <div class="row"> <div class="span6 offset4 wrap"> <center><b><u>Enrolled</u></b></center><br> diff --git a/yaksh/templates/yaksh/editprofile.html b/yaksh/templates/yaksh/editprofile.html new file mode 100644 index 0000000..b4cf037 --- /dev/null +++ b/yaksh/templates/yaksh/editprofile.html @@ -0,0 +1,21 @@ +{% extends "base.html" %} + +{% block title %} Edit Profile {% endblock %} + +{% block pagetitle %} Online Test {% endblock %} +{% block formtitle %} Please fill in the following details {% endblock %} + +{% block content %} + +<form action="" method="post" > + {% csrf_token %} + <center> + <table class=span1> + {{ form.as_table }} + </table> + </center> + <center><button class="btn" type="submit">Edit Profile</button> + <button class="btn" type="button" name="button" onClick='location.replace("{{URL_ROOT}}/exam/");'>Cancel</button> </center> +</form> + +{% endblock content %} diff --git a/yaksh/templates/yaksh/password_changed.html b/yaksh/templates/yaksh/password_changed.html new file mode 100644 index 0000000..cce2d53 --- /dev/null +++ b/yaksh/templates/yaksh/password_changed.html @@ -0,0 +1,15 @@ +{% extends "base.html" %} +<!DOCTYPE html> +{% block title %} Profile {% endblock %} + +{% block pagetitle %} Online Test {% endblock %} + +{% block script %} +<script> + window.setTimeout(function(){ location.href="{{ URL_ROOT }}/exam/" }, 2000); +</script> +{% endblock script %} +{% block content %} +<h3>Your Password is changed {{ user.first_name }}</h3> +<h3>Redirecting...</h3> +{% endblock content %} diff --git a/yaksh/templates/yaksh/profile_updated.html b/yaksh/templates/yaksh/profile_updated.html new file mode 100644 index 0000000..6ccf177 --- /dev/null +++ b/yaksh/templates/yaksh/profile_updated.html @@ -0,0 +1,15 @@ +{% extends "base.html" %} +<!DOCTYPE html> +{% block title %} Profile {% endblock %} + +{% block pagetitle %} Online Test {% endblock %} + +{% block script %} +<script> + window.setTimeout(function(){ location.href="{{ URL_ROOT }}/exam/" }, 2000); +</script> +{% endblock script %} +{% block content %} +<h3>Your Profile is changed {{ user.first_name }}</h3> +<h3>Redirecting...</h3> +{% endblock content %} diff --git a/yaksh/templates/yaksh/view_profile.html b/yaksh/templates/yaksh/view_profile.html new file mode 100644 index 0000000..27bc5da --- /dev/null +++ b/yaksh/templates/yaksh/view_profile.html @@ -0,0 +1,48 @@ +{% extends "base.html" %} + +{% block title %} View Profile {% endblock %} + +{% block pagetitle %} Online Test {% endblock %} +{% block css %} +<link rel="stylesheet" media="all" type="text/css" href="{{ URL_ROOT }}/static/yaksh/css/base.css" /> +{% endblock %} +{% block content %} +<ul> + <a href={{ URL_ROOT }}/exam/manage/editprofile>Edit Profile</a> + <a href={{ URL_ROOT }}/exam/>Back to Home</a> +</ul> + + <table width="398" border="0" align="center" cellpadding="0"> + <tr> + <td height="26" colspan="2"><h2>Your Profile Information</h2> </td> + </tr> + <tr> + <td width="82" valign="top"><h3>Firstname:</h3></td> + <td width="165" valign="top"><h4>{{ user.first_name }}</h4></td> + </tr> + <tr> + <td valign="top"><h3>Lastname:</h3></td> + <td valign="top"><h4>{{ user.last_name }}</h4></td> + </tr> + <tr> + <td valign="top"><h3>Email:</h3><h3></td> + <td valign="top"><h4>{{ user.email }}</h4></td> + </tr> + <tr> + <td valign="top"><h3>Institute:</h3></td> + <td valign="top"><h4>{{ user.profile.institute }}</h4></td> + </tr> + <tr> + <td valign="top"><h3>Department:</h3></td> + <td valign="top"><h4>{{ user.profile.department }}</h4></td> + </tr> + <tr> + <td valign="top"><h3>Roll Number:</h3></td> + <td valign="top"><h4>{{ user.profile.roll_number }}</h4></td> + </tr> + <tr> + <td valign="top"><h3>Position:</h3></td> + <td valign="top"><h4>{{ user.profile.position }}</h4></td> + </tr> +</table> +{% endblock %} diff --git a/yaksh/urls.py b/yaksh/urls.py index b2f894f..584064d 100644 --- a/yaksh/urls.py +++ b/yaksh/urls.py @@ -1,7 +1,8 @@ from django.conf.urls import patterns, url from yaksh import views from django.contrib.auth.views import password_reset, password_reset_confirm,\ - password_reset_done, password_reset_complete + password_reset_done, password_reset_complete, password_change,\ + password_change_done urlpatterns = [ url(r'^forgotpassword/$', password_reset, name="password_reset"), @@ -11,6 +12,8 @@ urlpatterns = [ name='password_reset_done'), url(r'^password_reset/complete/$', password_reset_complete, name='password_reset_complete'), + url(r'^changepassword/$', 'password_change', name='password_change'), + url(r'^password_change/done/$', 'password_change_done', name='password_change_done'), ] urlpatterns += [ url(r'^$', views.index), @@ -34,7 +37,6 @@ urlpatterns += [ views.skip), url(r'^enroll_request/(?P<course_id>\d+)/$', views.enroll_request), url(r'^self_enroll/(?P<course_id>\d+)/$', views.self_enroll), - url(r'^manage/$', views.prof_manage), url(r'^manage/addquestion/$', views.add_question), url(r'^manage/addquestion/(?P<question_id>\d+)/$', views.add_question), @@ -74,4 +76,8 @@ urlpatterns += [ url(r'manage/toggle_status/(?P<course_id>\d+)/$', views.toggle_course_status), url(r'^ajax/questionpaper/(?P<query>.+)/$', views.ajax_questionpaper), url(r'^ajax/questions/filter/$', views.ajax_questions_filter), + url(r'^manage/editprofile/$', views.edit_profile), + url(r'^manage/viewprofile/$', views.view_profile), + url(r'^manage/enroll/(?P<course_id>\d+)', views.enroll) ] + diff --git a/yaksh/views.py b/yaksh/views.py index 8b0a131..2738a26 100644 --- a/yaksh/views.py +++ b/yaksh/views.py @@ -22,7 +22,7 @@ from yaksh.models import Quiz, Question, QuestionPaper, QuestionSet, Course from yaksh.models import Profile, Answer, AnswerPaper, User, TestCase from yaksh.forms import UserRegisterForm, UserLoginForm, QuizForm,\ QuestionForm, RandomQuestionForm, TestCaseFormSet,\ - QuestionFilterForm, CourseForm + QuestionFilterForm, CourseForm, EditProfile from yaksh.xmlrpc_clients import code_server from settings import URL_ROOT from yaksh.models import AssignmentUpload @@ -603,20 +603,31 @@ def courses(request): @login_required def course_detail(request, course_id): user = request.user + ci = RequestContext(request) if not is_moderator(user): raise Http404('You are not allowed to view this page') course = get_object_or_404(Course, creator=user, pk=course_id) - return my_render_to_response('yaksh/course_detail.html', {'course': course}) + return my_render_to_response('yaksh/course_detail.html', {'course': course}, + context_instance=ci) @login_required -def enroll(request, course_id, user_id, was_rejected=False): +def enroll(request, course_id, user_id=None, was_rejected=False): user = request.user + ci = RequestContext(request) if not is_moderator(user): raise Http404('You are not allowed to view this page') course = get_object_or_404(Course, creator=user, pk=course_id) - user = get_object_or_404(User, pk=user_id) - course.enroll(was_rejected, user) + if request.method == 'POST': + enroll_ids = request.POST.getlist('check') + if enroll_ids is None: + return my_render_to_response('yaksh/course_detail.html', {'course': course}, + context_instance=ci) + else: + course.enroll(was_rejected, *enroll_ids) + else: + user = get_object_or_404(User, pk=user_id) + course.enroll(was_rejected, user) return course_detail(request, course_id) @@ -954,3 +965,49 @@ def design_questionpaper(request): context = {'form': form, 'questionpaper':True} return my_render_to_response('yaksh/design_questionpaper.html', context, context_instance=ci) + +@login_required +def view_profile(request): + """ view moderators and users profile """ + + context = {} + user = request.user + ci = RequestContext(request) + if not user.is_authenticated(): + raise Http404('You are not allowed to view this page!') + else: + return my_render_to_response('yaksh/view_profile.html', + context_instance=ci) + +@login_required +def edit_profile(request): + """ edit profile details facility for moderator and students """ + + context = {} + user = request.user + ci = RequestContext(request) + data = {} + if not user.is_authenticated(): + raise Http404('You are not allowed to view this page!') + if request.method == 'POST': + form = EditProfile(request.POST) + if form.is_valid(): + data = form.cleaned_data + form.save(user) + return my_render_to_response('yaksh/profile_updated.html', + context_instance=ci) + else: + context['form'] = form + return my_render_to_response('yaksh/editprofile.html', context, + context_instance=ci) + else: + data['first_name'] = user.first_name + data['last_name'] = user.last_name + data['institute'] = user.profile.institute + data['department'] = user.profile.department + data['roll_number'] = user.profile.roll_number + data['position'] = user.profile.position + form = EditProfile(initial=data) + context['form'] = form + return my_render_to_response('yaksh/editprofile.html', context, + context_instance=ci) |