From 6b09383890b8367628124a854810326d7bbac7c4 Mon Sep 17 00:00:00 2001 From: adityacp Date: Wed, 27 Apr 2016 16:42:32 +0530 Subject: changes after comments --- yaksh/models.py | 10 +++++-- yaksh/templates/yaksh/addteacher.html | 23 ++++++++++----- yaksh/templates/yaksh/courses.html | 38 +++++++++++++++++++++--- yaksh/templates/yaksh/viewcourse.html | 51 -------------------------------- yaksh/tests.py | 16 ++++++---- yaksh/urls.py | 3 +- yaksh/views.py | 55 ++++++++++++++++++++++++++--------- 7 files changed, 112 insertions(+), 84 deletions(-) delete mode 100644 yaksh/templates/yaksh/viewcourse.html diff --git a/yaksh/models.py b/yaksh/models.py index 6db1298..bb85085 100644 --- a/yaksh/models.py +++ b/yaksh/models.py @@ -24,13 +24,11 @@ class Profile(models.Model): position = models.CharField(max_length=64) def is_moderator(self, user): - return True if user.groups.filter(name='moderator').exists() else False + return user.groups.filter(name='moderator').exists() def _add_to_group(self, user): group = Group.objects.get(name="moderator") user.groups.add(group) - user.profile.position = "Faculty" - user.profile.save() languages = ( ("python", "Python"), @@ -139,6 +137,12 @@ class Course(models.Model): rejected_teachers.append(teacher) return added_teachers, rejected_teachers + def get_teachers(self): + return self.teachers.all() + + def remove_teachers(self, *teachers): + self.teachers.remove(*teachers) + def __unicode__(self): return self.name diff --git a/yaksh/templates/yaksh/addteacher.html b/yaksh/templates/yaksh/addteacher.html index b438262..790c06c 100644 --- a/yaksh/templates/yaksh/addteacher.html +++ b/yaksh/templates/yaksh/addteacher.html @@ -25,8 +25,10 @@

No results found

{% else %}
Search Results

+
Search results does not include teachers already added

+ @@ -34,8 +36,10 @@ {% for teacher in teachers %} + {% if teacher not in course.get_teachers %} + @@ -43,6 +47,7 @@ + {% endif %} {% endfor %}
Username First Name Last Name EmailDepartment Position
{{ teacher.username }} {{ teacher.first_name }} {{ teacher.last_name }} {{ teacher.email }}{{ teacher.profile.department }} {{ teacher.profile.position }}
@@ -51,31 +56,35 @@ {% if status == True and teachers_added or teachers_rejected %}
-

Note: Teacher(s) without profile are rejected

+

Teacher(s) without profile are rejected

Teacher(s) Added

+ {% if teachers_added %} {% for teacher in teachers_added %}
-
-
{{ teacher.get_full_name }}
-
+
{{ teacher.get_full_name }}
{% endfor %} + {% else %} +
No Teacher(s) Added
+ {% endif %}
Teacher(s) Rejected

+ {% if teachers_rejected %} {% for teacher in teachers_rejected %}
-
-
{{ teacher.get_full_name }}
-
+
{{ teacher.get_full_name }}
{% endfor %} + {% else %} +
No Teacher(s) Rejected
+ {% endif %}
diff --git a/yaksh/templates/yaksh/courses.html b/yaksh/templates/yaksh/courses.html index 245c3cb..43a9535 100644 --- a/yaksh/templates/yaksh/courses.html +++ b/yaksh/templates/yaksh/courses.html @@ -11,10 +11,13 @@ {% block manage %} View Allotted Courses
{% if not courses %} -
You have not created any courses
+

No new Courses added

{% else %} -

Course(s) created by you

+

Course(s) Added

{% for course in courses %} + {% if user != course.creator %} +

{{course.creator.get_full_name}} added you to this course

+ {% endif %}
@@ -28,11 +31,39 @@ {% endif %}

{{ course.name }} -
+

+ {% if user == course.creator %} +
+
+
Teacher(s) Added to {{ course }}
+ {% if course.get_teachers %} +
+
+ {% csrf_token %} + {% for teacher in course.get_teachers %} +
+
+
+  {{ teacher.get_full_name }} +
+
+
+ {% endfor %} + +
+ {% else %} +
No Teacher(s) Added
+ {% endif %} + +
+
+ {% endif %}
+ {% if user == course.creator %} + {% endif %}

Quiz(zes)

{% if course.get_quizzes %} @@ -48,7 +79,6 @@


{% endfor %} - {% endif %} diff --git a/yaksh/templates/yaksh/viewcourse.html b/yaksh/templates/yaksh/viewcourse.html deleted file mode 100644 index a3ef3e6..0000000 --- a/yaksh/templates/yaksh/viewcourse.html +++ /dev/null @@ -1,51 +0,0 @@ -{% extends "manage.html" %} - -{% block title %} Courses {% endblock title %} - -{% block subtitle %} Courses {% endblock %} - -{% block css %} - -{% endblock %} - -{% block manage %} -

Course(s) Allotted


-{% if not courses %} -

You are not added to any course(s)

-{% else %} -{% for course in courses %} -

{{ course.creator.get_full_name }} added you to this course

-
-
-
-
-

- Course - {% if course.active %} - Active - {% else %} - Closed - {% endif %} -

- {{ course.name }} -
-
-
-

Quiz(zes)

- {% if course.get_quizzes %} - {% for quiz in course.get_quizzes %} - {{ quiz.description }}
- {% endfor %} - {% else %} -

No quiz - {% endif %} -

-
-
-
-

-{% endfor %} - - -{% endif %} -{% endblock %} diff --git a/yaksh/tests.py b/yaksh/tests.py index d69882d..bd733c3 100644 --- a/yaksh/tests.py +++ b/yaksh/tests.py @@ -60,13 +60,13 @@ def tearDownModule(): ############################################################################### class ProfileTestCases(unittest.TestCase): def setUp(self): - self.user = User.objects.get(pk=1) + self.user1 = User.objects.get(pk=1) self.profile = Profile.objects.get(pk=1) - self.user1 = User.objects.get(pk=3) + self.user2 = User.objects.get(pk=3) def test_user_profile(self): """ Test user profile""" - self.assertEqual(self.user.username, 'demo_user') + self.assertEqual(self.user1.username, 'demo_user') self.assertEqual(self.profile.user.username, 'demo_user') self.assertEqual(int(self.profile.roll_number), 1) self.assertEqual(self.profile.institute, 'IIT') @@ -74,9 +74,9 @@ class ProfileTestCases(unittest.TestCase): self.assertEqual(self.profile.position, 'Student') def test_is_moderator(self): - result = self.user1.profile.is_moderator(self.user1) + result = self.user2.profile.is_moderator(self.user2) self.assertTrue(result) - result = self.user.profile.is_moderator(self.user) + result = self.user1.profile.is_moderator(self.user1) self.assertFalse(result) ############################################################################### @@ -454,3 +454,9 @@ class CourseTestCases(unittest.TestCase): added_list, rejected_list = self.course.add_teachers(self.student1, self.student2) self.assertSequenceEqual(added_list, [self.student2]) self.assertSequenceEqual(rejected_list, [self.student1]) + + def test_remove_teachers(self): + """ Test to remove teachers from a course""" + self.course.add_teachers(self.student1, self.student2) + self.course.remove_teachers(self.student1) + self.assertSequenceEqual(self.course.get_teachers(), [self.student2]) diff --git a/yaksh/urls.py b/yaksh/urls.py index 7f42faf..1716818 100644 --- a/yaksh/urls.py +++ b/yaksh/urls.py @@ -87,5 +87,6 @@ urlpatterns += [ views.reject, {'was_enrolled': True}), url(r'^manage/searchteacher/(?P\d+)/$', views.search_teacher), url(r'^manage/addteacher/(?P\d+)/$', views.add_teacher), - url(r'^manage/viewcourse/$', views.view_courses) + url(r'^manage/viewcourse/$', views.view_courses), + url(r'^manage/remove_teachers/(?P\d+)/$', views.remove_teachers) ] diff --git a/yaksh/views.py b/yaksh/views.py index a56182b..dd8cc2b 100644 --- a/yaksh/views.py +++ b/yaksh/views.py @@ -596,10 +596,12 @@ def self_enroll(request, course_id): @login_required def courses(request): user = request.user + ci = RequestContext(request) if not is_moderator(user): raise Http404('You are not allowed to view this page') courses = Course.objects.filter(creator=user) - return my_render_to_response('yaksh/courses.html', {'courses': courses}) + return my_render_to_response('yaksh/courses.html', {'courses': courses}, + context_instance=ci) @login_required @@ -608,8 +610,12 @@ def course_detail(request, course_id): ci = RequestContext(request) if not is_moderator(user): raise Http404('You are not allowed to view this page') - course = Course.objects.filter(Q(creator=user)|Q(teachers=user), pk=course_id).first() - return my_render_to_response('yaksh/course_detail.html', {'course': course}) + course = Course.objects.filter(Q(creator=user)|Q(teachers=user), + pk=course_id).first() + if user != course.creator and user not in course.teachers.all(): + raise Http404('You are not allowed to view this page') + return my_render_to_response('yaksh/course_detail.html', {'course': course}, + context_instance=ci) @login_required @@ -618,7 +624,8 @@ def enroll(request, course_id, user_id=None, was_rejected=False): ci = RequestContext(request) if not is_moderator(user): raise Http404('You are not allowed to view this page') - course = Course.objects.filter(Q(creator=user)|Q(teachers=user), pk=course_id).first() + course = Course.objects.filter(Q(creator=user)|Q(teachers=user), + pk=course_id).first() if request.method == 'POST': enroll_ids = request.POST.getlist('check') else: @@ -637,7 +644,8 @@ def reject(request, course_id, user_id=None, was_enrolled=False): ci = RequestContext(request) if not is_moderator(user): raise Http404('You are not allowed to view this page') - course = Course.objects.filter(Q(creator=user)|Q(teachers=user), pk=course_id).first() + course = Course.objects.filter(Q(creator=user)|Q(teachers=user), + pk=course_id).first() if request.method == 'POST': reject_ids = request.POST.getlist('check') else: @@ -655,7 +663,8 @@ def toggle_course_status(request, course_id): user = request.user if not is_moderator(user): raise Http404('You are not allowed to view this page') - course = Course.objects.filter(Q(creator=user)|Q(teachers=user), pk=course_id).first() + course = Course.objects.filter(Q(creator=user)|Q(teachers=user), + pk=course_id).first() if course.active: course.deactivate() else: @@ -982,9 +991,6 @@ def view_profile(request): user = request.user ci = RequestContext(request) - if not is_moderator(user): - raise Http404('You are not allowed to view this page!') - context = {} if has_profile(user): return my_render_to_response('yaksh/view_profile.html', {'user':user}) @@ -996,6 +1002,7 @@ def view_profile(request): return my_render_to_response('yaksh/editprofile.html', context, context_instance=ci) + @login_required def edit_profile(request): """ edit profile details facility for moderator and students """ @@ -1031,12 +1038,18 @@ def edit_profile(request): context_instance=ci) +@login_required def search_teacher(request, course_id): """ search teachers for the course """ + user = request.user + ci = RequestContext(request) + + if not is_moderator(user): + raise Http404('You are not allowed to view this page!') + + context = {} course = get_object_or_404(Course, creator=user, pk=course_id) context['course'] = course - if not user.is_authenticated() or not is_moderator(user): - raise Http404('You are not allowed to view this page!') if request.method == 'POST': u_name = request.POST.get('uname') @@ -1074,15 +1087,16 @@ def add_teacher(request, course_id): teacher_ids = request.POST.getlist('check') teachers = User.objects.filter(id__in=teacher_ids) teachers_added, teachers_rejected = course.add_teachers(*teachers) + context['status'] = True context['teachers_added'] = teachers_added context['teachers_rejected'] = teachers_rejected - context['status'] = True return my_render_to_response('yaksh/addteacher.html', context, context_instance=ci) else: return my_render_to_response('yaksh/addteacher.html', context, context_instance=ci) + @login_required def view_courses(request): """ show courses allotted to a user """ @@ -1093,6 +1107,21 @@ def view_courses(request): raise Http404('You are not allowed to view this page!') courses = Course.objects.filter(teachers=user) - return my_render_to_response('yaksh/viewcourse.html', {'courses': courses}, + return my_render_to_response('yaksh/courses.html', {'courses': courses}, context_instance=ci) + +@login_required +def remove_teachers(request, course_id): + """ show courses allotted to a user """ + + user = request.user + 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) + if request.method == "POST": + teacher_ids = request.POST.getlist('remove') + teachers = User.objects.filter(id__in=teacher_ids) + course.remove_teachers(*teachers) + return my_redirect('/exam/manage/courses') -- cgit