Commit 128cf262 by Matthew Mongeau

Display textbooks in course navigation, handle in urls and views.

parent 6db5893b
...@@ -31,6 +31,7 @@ setup( ...@@ -31,6 +31,7 @@ setup(
"section = xmodule.backcompat_module:SemanticSectionDescriptor", "section = xmodule.backcompat_module:SemanticSectionDescriptor",
"sequential = xmodule.seq_module:SequenceDescriptor", "sequential = xmodule.seq_module:SequenceDescriptor",
"slides = xmodule.backcompat_module:TranslateCustomTagDescriptor", "slides = xmodule.backcompat_module:TranslateCustomTagDescriptor",
"textbook = xmodule.textbook_module:TextbookDescriptor",
"vertical = xmodule.vertical_module:VerticalDescriptor", "vertical = xmodule.vertical_module:VerticalDescriptor",
"video = xmodule.video_module:VideoDescriptor", "video = xmodule.video_module:VideoDescriptor",
"videodev = xmodule.backcompat_module:TranslateCustomTagDescriptor", "videodev = xmodule.backcompat_module:TranslateCustomTagDescriptor",
......
...@@ -7,6 +7,7 @@ from xmodule.graders import load_grading_policy ...@@ -7,6 +7,7 @@ from xmodule.graders import load_grading_policy
from xmodule.modulestore import Location from xmodule.modulestore import Location
from xmodule.seq_module import SequenceDescriptor, SequenceModule from xmodule.seq_module import SequenceDescriptor, SequenceModule
from xmodule.timeparse import parse_time, stringify_time from xmodule.timeparse import parse_time, stringify_time
from xmodule.textbook_module import TextbookDescriptor
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
...@@ -53,6 +54,10 @@ class CourseDescriptor(SequenceDescriptor): ...@@ -53,6 +54,10 @@ class CourseDescriptor(SequenceDescriptor):
return grading_policy return grading_policy
@property
def textbooks(self):
return [child for child in self.get_children() if type(child) == TextbookDescriptor]
@lazyproperty @lazyproperty
def grading_context(self): def grading_context(self):
......
from xmodule.x_module import XModule
from xmodule.xml_module import XmlDescriptor
from lxml import etree
class TextbookModule(XModule):
def __init__(self, system, location, definition, instance_state=None,
shared_state=None, **kwargs):
XModule.__init__(self, system, location, definition,
instance_state, shared_state, **kwargs)
class TextbookDescriptor(XmlDescriptor):
module_class = TextbookModule
def __init__(self, system, definition=None, **kwargs):
super(TextbookDescriptor, self).__init__(system, definition, **kwargs)
self.title = self.metadata["title"]
@classmethod
def definition_from_xml(cls, xml_object, system):
return { 'children': [] }
@property
def table_of_contents(self):
raw_table_of_contents = open(self.metadata['table_of_contents_url'], 'r') # TODO: This will need to come from S3
table_of_contents = etree.parse(raw_table_of_contents).getroot()
return table_of_contents
...@@ -6,19 +6,17 @@ from courseware.courses import get_course_with_access ...@@ -6,19 +6,17 @@ from courseware.courses import get_course_with_access
from lxml import etree from lxml import etree
@login_required @login_required
def index(request, course_id, page=0): def index(request, course_id, book_index, page=0):
course = get_course_with_access(request.user, course_id, 'load') course = get_course_with_access(request.user, course_id, 'load')
staff_access = has_access(request.user, course, 'staff') staff_access = has_access(request.user, course, 'staff')
# TODO: This will need to come from S3 textbook = course.textbooks[int(book_index)]
raw_table_of_contents = open('lms/templates/book_toc.xml', 'r') table_of_contents = textbook.table_of_contents
table_of_contents = etree.parse(raw_table_of_contents).getroot()
return render_to_response('staticbook.html', return render_to_response('staticbook.html',
{'page': int(page), 'course': course, {'page': int(page), 'course': course,
'table_of_contents': table_of_contents, 'table_of_contents': table_of_contents,
'staff_access': staff_access}) 'staff_access': staff_access})
def index_shifted(request, course_id, page): def index_shifted(request, course_id, page):
return index(request, course_id=course_id, page=int(page) + 24) return index(request, course_id=course_id, page=int(page) + 24)
...@@ -16,7 +16,9 @@ def url_class(url): ...@@ -16,7 +16,9 @@ def url_class(url):
<li class="info"><a href="${reverse('info', args=[course.id])}" class="${url_class('info')}">Course Info</a></li> <li class="info"><a href="${reverse('info', args=[course.id])}" class="${url_class('info')}">Course Info</a></li>
% if user.is_authenticated(): % if user.is_authenticated():
% if settings.MITX_FEATURES.get('ENABLE_TEXTBOOK'): % if settings.MITX_FEATURES.get('ENABLE_TEXTBOOK'):
<li class="book"><a href="${reverse('book', args=[course.id])}" class="${url_class('book')}">Textbook</a></li> % for index, textbook in enumerate(course.textbooks):
<li class="book"><a href="${reverse('book', args=[course.id, index])}" class="${url_class('book')}">${textbook.title}</a></li>
% endfor
% endif % endif
% if settings.MITX_FEATURES.get('ENABLE_DISCUSSION'): % if settings.MITX_FEATURES.get('ENABLE_DISCUSSION'):
<li class="discussion"><a href="${reverse('questions')}">Discussion</a></li> <li class="discussion"><a href="${reverse('questions')}">Discussion</a></li>
......
...@@ -126,9 +126,9 @@ if settings.COURSEWARE_ENABLED: ...@@ -126,9 +126,9 @@ if settings.COURSEWARE_ENABLED:
#Inside the course #Inside the course
url(r'^courses/(?P<course_id>[^/]+/[^/]+/[^/]+)/info$', url(r'^courses/(?P<course_id>[^/]+/[^/]+/[^/]+)/info$',
'courseware.views.course_info', name="info"), 'courseware.views.course_info', name="info"),
url(r'^courses/(?P<course_id>[^/]+/[^/]+/[^/]+)/book$', url(r'^courses/(?P<course_id>[^/]+/[^/]+/[^/]+)/book/(?P<book_index>[^/]*)/$',
'staticbook.views.index', name="book"), 'staticbook.views.index', name="book"),
url(r'^courses/(?P<course_id>[^/]+/[^/]+/[^/]+)/book/(?P<page>[^/]*)$', url(r'^courses/(?P<course_id>[^/]+/[^/]+/[^/]+)/book/(?P<book_index>[^/]*)/(?P<page>[^/]*)$',
'staticbook.views.index'), 'staticbook.views.index'),
url(r'^courses/(?P<course_id>[^/]+/[^/]+/[^/]+)/book-shifted/(?P<page>[^/]*)$', url(r'^courses/(?P<course_id>[^/]+/[^/]+/[^/]+)/book-shifted/(?P<page>[^/]*)$',
'staticbook.views.index_shifted'), 'staticbook.views.index_shifted'),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment