diff --git a/common/lib/xmodule/xmodule/course_module.py b/common/lib/xmodule/xmodule/course_module.py index 2c69c449ba..8b2d5a6c92 100644 --- a/common/lib/xmodule/xmodule/course_module.py +++ b/common/lib/xmodule/xmodule/course_module.py @@ -352,6 +352,13 @@ class CourseDescriptor(SequenceDescriptor): """ return self.metadata.get('tabs') + @property + def pdf_textbooks(self): + """ + Return the pdf_textbooks config, as a python object, or None if not specified. + """ + return self.metadata.get('pdf_textbooks') + @tabs.setter def tabs(self, value): self.metadata['tabs'] = value diff --git a/lms/djangoapps/courseware/tabs.py b/lms/djangoapps/courseware/tabs.py index a47141b183..b31aeb6b5a 100644 --- a/lms/djangoapps/courseware/tabs.py +++ b/lms/djangoapps/courseware/tabs.py @@ -119,6 +119,16 @@ def _textbooks(tab, user, course, active_page): for index, textbook in enumerate(course.textbooks)] return [] +def _pdf_textbooks(tab, user, course, active_page): + """ + Generates one tab per textbook. Only displays if user is authenticated. + """ + if user.is_authenticated(): + # since there can be more than one textbook, active_page is e.g. "book/0". + return [CourseTab(textbook['tab_title'], reverse('pdf_book', args=[course.id, index]), + active_page == "pdftextbook/{0}".format(index)) + for index, textbook in enumerate(course.pdf_textbooks)] + return [] def _staff_grading(tab, user, course, active_page): if has_access(user, course, 'staff'): @@ -198,6 +208,7 @@ VALID_TAB_TYPES = { 'discussion': TabImpl(need_name, _discussion), 'external_link': TabImpl(key_checker(['name', 'link']), _external_link), 'textbooks': TabImpl(null_validator, _textbooks), + 'pdf_textbooks': TabImpl(null_validator, _pdf_textbooks), 'progress': TabImpl(need_name, _progress), 'static_tab': TabImpl(key_checker(['name', 'url_slug']), _static_tab), 'peer_grading': TabImpl(null_validator, _peer_grading), diff --git a/lms/djangoapps/staticbook/views.py b/lms/djangoapps/staticbook/views.py index 6750d151ce..24f3964713 100644 --- a/lms/djangoapps/staticbook/views.py +++ b/lms/djangoapps/staticbook/views.py @@ -30,3 +30,23 @@ def index(request, course_id, book_index, page=None): def index_shifted(request, course_id, page): return index(request, course_id=course_id, page=int(page) + 24) + + +@login_required +def pdf_index(request, course_id, book_index, chapter=None, page=None): + course = get_course_with_access(request.user, course_id, 'load') + staff_access = has_access(request.user, course, 'staff') + + book_index = int(book_index) + textbook = course.pdf_textbooks[book_index] + +# if page is None: +# page = textbook.start_page + + return render_to_response('static_pdfbook.html', + {'book_index': book_index, + 'course': course, + 'textbook': textbook, + 'page': page, + 'chapter': chapter, + 'staff_access': staff_access}) diff --git a/lms/templates/static_pdfbook.html b/lms/templates/static_pdfbook.html new file mode 100644 index 0000000000..29cf00d83f --- /dev/null +++ b/lms/templates/static_pdfbook.html @@ -0,0 +1,111 @@ +<%inherit file="main.html" /> +<%namespace name='static' file='static_content.html'/> +<%block name="title">