From 26ca38c6243eaa1d94bca68481eb60b2276ab7b2 Mon Sep 17 00:00:00 2001 From: ankitjavalkar Date: Wed, 16 May 2018 17:53:55 +0530 Subject: Allow moderator to switch between student and moderator roles --- yaksh/views.py | 46 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 7 deletions(-) (limited to 'yaksh/views.py') diff --git a/yaksh/views.py b/yaksh/views.py index c6b1184..7cfb03f 100644 --- a/yaksh/views.py +++ b/yaksh/views.py @@ -63,18 +63,27 @@ def my_render_to_response(request, template, context=None, **kwargs): return render(request, template, context, **kwargs) -def is_moderator(user): +def is_moderator(user, group_name='moderator'): """Check if the user is having moderator rights""" - if user.groups.filter(name='moderator').exists(): - return True + try: + group = Group.objects.get(name='moderator') + return user.profile.is_moderator and user in group.user_set.all() + except Profile.DoesNotExist: + return False + except Group.DoesNotExist: + return False -def add_to_group(users): +def add_as_moderator(users, group_name='moderator'): """ add users to moderator group """ - group = Group.objects.get(name="moderator") + try: + group = Group.objects.get(name=group_name) + except Group.DoesNotExist: + raise Http404('The Group {0} does not exist.'.format(group_name)) for user in users: if not is_moderator(user): - user.groups.add(group) + user.profile.is_moderator = True + user.profile.save() CSV_FIELDS = ['name', 'username', 'roll_number', 'institute', 'department', @@ -1755,6 +1764,29 @@ def search_teacher(request, course_id): return my_render_to_response(request, 'yaksh/addteacher.html', context) +@login_required +@email_verified +def toggle_moderator_role(request): + """ Allow moderator to switch to student and back """ + + user = request.user + + try: + group = Group.objects.get(name='moderator') + except Group.DoesNotExist: + raise Http404('The Moderator group does not exist') + + if not user.profile.is_moderator: + raise Http404('You are not allowed to view this page!') + + if user not in group.user_set.all(): + group.user_set.add(user) + else: + group.user_set.remove(user) + + return my_redirect('/exam/') + + @login_required @email_verified def add_teacher(request, course_id): @@ -1775,7 +1807,7 @@ def add_teacher(request, course_id): if request.method == 'POST': teacher_ids = request.POST.getlist('check') teachers = User.objects.filter(id__in=teacher_ids) - add_to_group(teachers) + add_as_moderator(teachers) course.add_teachers(*teachers) context['status'] = True context['teachers_added'] = teachers -- cgit From 69a07a92309105b289f4d08957729bda68727bf2 Mon Sep 17 00:00:00 2001 From: ankitjavalkar Date: Thu, 5 Jul 2018 17:46:00 +0530 Subject: - Add buttons to Moderator and Student templates - Modify _add_to_moderator function to _toggle_moderator_function in order to allow addition and removal of moderator group link --- yaksh/views.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'yaksh/views.py') diff --git a/yaksh/views.py b/yaksh/views.py index 7cfb03f..bda2774 100644 --- a/yaksh/views.py +++ b/yaksh/views.py @@ -66,7 +66,7 @@ def my_render_to_response(request, template, context=None, **kwargs): def is_moderator(user, group_name='moderator'): """Check if the user is having moderator rights""" try: - group = Group.objects.get(name='moderator') + group = Group.objects.get(name=group_name) return user.profile.is_moderator and user in group.user_set.all() except Profile.DoesNotExist: return False @@ -172,8 +172,10 @@ def quizlist_user(request, enrolled=None, msg=None): ) title = 'All Courses' - context = {'user': user, 'courses': courses, 'title': title, - 'msg': msg} + context = { + 'user': user, 'courses': courses, + 'title': title, 'msg': msg + } return my_render_to_response(request, "yaksh/quizzes_user.html", context) -- cgit From e7c18d17c8b5ed193e4e34bdfe2072951d996530 Mon Sep 17 00:00:00 2001 From: ankitjavalkar Date: Wed, 11 Jul 2018 17:19:56 +0530 Subject: Fix tests --- yaksh/views.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'yaksh/views.py') diff --git a/yaksh/views.py b/yaksh/views.py index bda2774..ecd7efd 100644 --- a/yaksh/views.py +++ b/yaksh/views.py @@ -30,7 +30,7 @@ from yaksh.code_server import get_result as get_result_from_code_server from yaksh.models import ( Answer, AnswerPaper, AssignmentUpload, Course, FileUpload, Profile, QuestionPaper, QuestionSet, Quiz, Question, TestCase, User, - FIXTURES_DIR_PATH, Lesson, LessonFile, LearningUnit, LearningModule, + FIXTURES_DIR_PATH, MOD_GROUP_NAME, Lesson, LessonFile, LearningUnit, LearningModule, CourseStatus ) from yaksh.forms import ( @@ -63,7 +63,7 @@ def my_render_to_response(request, template, context=None, **kwargs): return render(request, template, context, **kwargs) -def is_moderator(user, group_name='moderator'): +def is_moderator(user, group_name=MOD_GROUP_NAME): """Check if the user is having moderator rights""" try: group = Group.objects.get(name=group_name) @@ -74,7 +74,7 @@ def is_moderator(user, group_name='moderator'): return False -def add_as_moderator(users, group_name='moderator'): +def add_as_moderator(users, group_name=MOD_GROUP_NAME): """ add users to moderator group """ try: group = Group.objects.get(name=group_name) -- cgit