diff --git a/lms/djangoapps/courseware/tabs.py b/lms/djangoapps/courseware/tabs.py index 45b4e1821c..36b11d9795 100644 --- a/lms/djangoapps/courseware/tabs.py +++ b/lms/djangoapps/courseware/tabs.py @@ -11,6 +11,7 @@ actually generates the CourseTab. from collections import namedtuple import logging +import json from django.conf import settings from django.core.urlresolvers import reverse @@ -20,6 +21,9 @@ from fs.errors import ResourceNotFoundError from courseware.access import has_access from static_replace import replace_urls +from open_ended_grading.peer_grading_service import PeerGradingService +from student.models import unique_id_for_user + log = logging.getLogger(__name__) class InvalidTabsException(Exception): @@ -28,7 +32,10 @@ class InvalidTabsException(Exception): """ pass -CourseTab = namedtuple('CourseTab', 'name link is_active') +CourseTabBase = namedtuple('CourseTab', 'name link is_active has_img img') + +def CourseTab(name, link, is_active, has_img=False, img=""): + return CourseTabBase(name, link, is_active, has_img, img) # encapsulate implementation for a tab: # - a validation function: takes the config dict and raises @@ -104,6 +111,28 @@ def _staff_grading(tab, user, course, active_page): return [CourseTab('Staff grading', link, active_page == "staff_grading")] return [] +def _peer_grading(tab, user, course, active_page): + if user.is_authenticated(): + link = reverse('peer_grading', args=[course.id]) + peer_gs = PeerGradingService(settings.PEER_GRADING_INTERFACE) + pending_grading=False + tab_name = "Peer grading" + img_path= "" + try: + notifications = json.loads(peer_gs.get_notifications(course.id,unique_id_for_user(user))) + if notifications['success']: + if notifications['student_needs_to_peer_grade']: + pending_grading=True + except: + #Non catastrophic error, so no real action + log.info("Problem with getting notifications from peer grading service.") + + if pending_grading: + img_path = "/static/images/slider-handle.png" + + tab = [CourseTab(tab_name, link, active_page == "peer_grading", pending_grading, img_path)] + return tab + return [] #### Validators @@ -140,6 +169,7 @@ VALID_TAB_TYPES = { 'textbooks': TabImpl(null_validator, _textbooks), 'progress': TabImpl(need_name, _progress), 'static_tab': TabImpl(key_checker(['name', 'url_slug']), _static_tab), + 'peer_grading': TabImpl(null_validator, _peer_grading), 'staff_grading': TabImpl(null_validator, _staff_grading), } diff --git a/lms/djangoapps/open_ended_grading/peer_grading_service.py b/lms/djangoapps/open_ended_grading/peer_grading_service.py index 9ef0383fb5..8e0f8cbbaa 100644 --- a/lms/djangoapps/open_ended_grading/peer_grading_service.py +++ b/lms/djangoapps/open_ended_grading/peer_grading_service.py @@ -79,6 +79,7 @@ class PeerGradingService(GradingService): self.show_calibration_essay_url = self.url + '/show_calibration_essay/' self.save_calibration_essay_url = self.url + '/save_calibration_essay/' self.get_problem_list_url = self.url + '/get_problem_list/' + self.get_notifications_url = self.url + '/get_notifications/' def get_next_submission(self, problem_location, grader_id): response = self.get(self.get_next_submission_url, @@ -116,6 +117,11 @@ class PeerGradingService(GradingService): response = self.get(self.get_problem_list_url, params) return response + def get_notifications(self, course_id, grader_id): + params = {'course_id': course_id, 'student_id': grader_id} + response = self.get(self.get_notifications_url, params) + return response + _service = None def peer_grading_service(): diff --git a/lms/templates/courseware/course_navigation.html b/lms/templates/courseware/course_navigation.html index 5ae69908fb..ec9004c0e8 100644 --- a/lms/templates/courseware/course_navigation.html +++ b/lms/templates/courseware/course_navigation.html @@ -18,7 +18,12 @@ def url_class(is_active):
    % for tab in get_course_tabs(user, course, active_page):
  1. - ${tab.name | h} + + ${tab.name | h} + % if tab.has_img == True: + + %endif +
  2. % endfor <%block name="extratabs" /> diff --git a/lms/templates/peer_grading/peer_grading.html b/lms/templates/peer_grading/peer_grading.html index 484bb94182..2eb33cae05 100644 --- a/lms/templates/peer_grading/peer_grading.html +++ b/lms/templates/peer_grading/peer_grading.html @@ -8,7 +8,7 @@ <%block name="title">${course.number} Peer Grading -<%include file="/courseware/course_navigation.html" args="active_page='staff_grading'" /> +<%include file="/courseware/course_navigation.html" args="active_page='peer_grading'" /> <%block name="js_extra"> <%static:js group='peer_grading'/> diff --git a/lms/templates/peer_grading/peer_grading_problem.html b/lms/templates/peer_grading/peer_grading_problem.html index d493e84ace..9f23c0f0b1 100644 --- a/lms/templates/peer_grading/peer_grading_problem.html +++ b/lms/templates/peer_grading/peer_grading_problem.html @@ -9,7 +9,7 @@ <%block name="title">${course.number} Peer Grading. -<%include file="/courseware/course_navigation.html" args="active_page='staff_grading'" /> +<%include file="/courseware/course_navigation.html" args="active_page='peer_grading'" /> <%block name="js_extra"> <%static:js group='peer_grading'/>