From 32c50090eb9e07d24ef690bd69f250f0893e6d2b Mon Sep 17 00:00:00 2001 From: Piotr Mitros Date: Mon, 21 May 2012 19:27:00 -0400 Subject: [PATCH] Very draft/prototype edits. Moving CMS components in LMS. --- djangoapps/courseware/modules/seq_module.py | 4 +- djangoapps/courseware/modules/x_module.py | 78 +++++++++++++++++---- 2 files changed, 68 insertions(+), 14 deletions(-) diff --git a/djangoapps/courseware/modules/seq_module.py b/djangoapps/courseware/modules/seq_module.py index 00350f0c62..210c11d451 100644 --- a/djangoapps/courseware/modules/seq_module.py +++ b/djangoapps/courseware/modules/seq_module.py @@ -20,7 +20,9 @@ class Module(XModule): @classmethod def get_xml_tags(c): - return ["sequential", 'tab'] + obsolete_tags = ["sequential", 'tab'] + modern_tags = ["problemset", "videosequence"] + return obsolete_tags + modern_tags def get_html(self): self.render() diff --git a/djangoapps/courseware/modules/x_module.py b/djangoapps/courseware/modules/x_module.py index 0898ac4f8f..0d0ce707e7 100644 --- a/djangoapps/courseware/modules/x_module.py +++ b/djangoapps/courseware/modules/x_module.py @@ -17,6 +17,39 @@ class XModule(object): ''' Tags in the courseware file guaranteed to correspond to the module ''' return [] + @classmethod(c): + def get_usage_tags(c): + ''' We should convert to a real module system + For now, this tells us whether we use this as an xmodule, a CAPA response type + or a CAPA input type ''' + return ['xmodule'] + + def __init__(self, system = None, xml = None, item_id = None, + json = None, track_url=None, state=None): + ''' In most cases, you must pass state or xml''' + if not item_id: + raise ValueError("Missing Index") + if not xml and not json: + raise ValueError("xml or json required") + if not system: + raise ValueError("System context required") + + self.xml = xml + self.json = json + self.item_id = item_id + self.state = state + + if system: + ## These are temporary; we really should go + ## through self.system. + self.ajax_url = system.ajax_url + self.tracker = system.track_function + self.filestore = system.filestore + self.render_function = system.render_function + self.system = system + + ### Functions used in the LMS + def get_completion(self): ''' This is mostly unimplemented. It gives a progress indication -- e.g. 30 minutes of 1.5 hours watched. 3 of 5 problems done, etc. ''' @@ -45,6 +78,12 @@ class XModule(object): ''' return "Unimplemented" + # TODO: + # def get_header_js(self): + # ''' Filename of common js that needs to be included in the header + # ''' + # raise NotImplementedError + def get_init_js(self): ''' JavaScript code to be run when problem is shown. Be aware that this may happen several times on the same page @@ -63,17 +102,30 @@ class XModule(object): get is a dictionary-like object ''' return "" - def __init__(self, system, xml, item_id, track_url=None, state=None): - ''' In most cases, you must pass state or xml''' - self.xml = xml - self.item_id = item_id - self.state = state + ### Functions used in the CMS + def get_xml(self): + ''' For conversions between JSON and legacy XML representations. + ''' + if self.xml: + return self.xml + else: + raise NotImplementedError - if system: - ## These are temporary; we really should go - ## through self.system. - self.ajax_url = system.ajax_url - self.tracker = system.track_function - self.filestore = system.filestore - self.render_function = system.render_function - self.system = system + def get_json(self): + ''' For conversions between JSON and legacy XML representations. + ''' + if self.json: + raise NotImplementedError + return self.json # TODO: Return context as well -- files, etc. + else: + raise NotImplementedError + + def handle_cms_json(self): + raise NotImplementedError + + def render(self, size): + ''' Size: [thumbnail, small, full] + Small ==> what we drag around + Full ==> what we edit + ''' + raise NotImplementedError