Commit a57e0fa2 by chrisndodge

Merge pull request #1819 from MITx/feature/ichuang/fix-edit-links-and-giturl

make "edit" links work - fixes giturl (was broken by xblocks migration)
parents 4b925520 f88b5794
...@@ -108,6 +108,22 @@ def add_histogram(get_html, module, user): ...@@ -108,6 +108,22 @@ def add_histogram(get_html, module, user):
histogram = grade_histogram(module_id) histogram = grade_histogram(module_id)
render_histogram = len(histogram) > 0 render_histogram = len(histogram) > 0
if settings.MITX_FEATURES.get('ENABLE_LMS_MIGRATION'):
[filepath, filename] = getattr(module.descriptor, 'xml_attributes', {}).get('filename', ['', None])
osfs = module.system.filestore
if filename is not None and osfs.exists(filename):
# if original, unmangled filename exists then use it (github
# doesn't like symlinks)
filepath = filename
data_dir = osfs.root_path.rsplit('/')[-1]
giturl = getattr(module.lms, 'giturl', '') or 'https://github.com/MITx'
edit_link = "%s/%s/tree/master/%s" % (giturl, data_dir, filepath)
else:
edit_link = False
# Need to define all the variables that are about to be used
giturl = ""
data_dir = ""
source_file = module.lms.source_file # source used to generate the problem XML, eg latex or word source_file = module.lms.source_file # source used to generate the problem XML, eg latex or word
# useful to indicate to staff if problem has been released or not # useful to indicate to staff if problem has been released or not
...@@ -121,12 +137,15 @@ def add_histogram(get_html, module, user): ...@@ -121,12 +137,15 @@ def add_histogram(get_html, module, user):
staff_context = {'fields': [(field.name, getattr(module, field.name)) for field in module.fields], staff_context = {'fields': [(field.name, getattr(module, field.name)) for field in module.fields],
'lms_fields': [(field.name, getattr(module.lms, field.name)) for field in module.lms.fields], 'lms_fields': [(field.name, getattr(module.lms, field.name)) for field in module.lms.fields],
'xml_attributes' : getattr(module.descriptor, 'xml_attributes', {}),
'location': module.location, 'location': module.location,
'xqa_key': module.lms.xqa_key, 'xqa_key': module.lms.xqa_key,
'source_file': source_file, 'source_file': source_file,
'source_url': '%s/%s/tree/master/%s' % (giturl, data_dir, source_file),
'category': str(module.__class__.__name__), 'category': str(module.__class__.__name__),
# Template uses element_id in js function names, so can't allow dashes # Template uses element_id in js function names, so can't allow dashes
'element_id': module.location.html_id().replace('-', '_'), 'element_id': module.location.html_id().replace('-', '_'),
'edit_link': edit_link,
'user': user, 'user': user,
'xqa_server': settings.MITX_FEATURES.get('USE_XQA_SERVER', 'http://xqa:server@content-qa.mitx.mit.edu/xqa'), 'xqa_server': settings.MITX_FEATURES.get('USE_XQA_SERVER', 'http://xqa:server@content-qa.mitx.mit.edu/xqa'),
'histogram': json.dumps(histogram), 'histogram': json.dumps(histogram),
......
...@@ -8,7 +8,8 @@ INHERITABLE_METADATA = ( ...@@ -8,7 +8,8 @@ INHERITABLE_METADATA = (
# How many days early to show a course element to beta testers (float) # How many days early to show a course element to beta testers (float)
# intended to be set per-course, but can be overridden in for specific # intended to be set per-course, but can be overridden in for specific
# elements. Can be a float. # elements. Can be a float.
'days_early_for_beta' 'days_early_for_beta',
'giturl' # for git edit link
) )
def compute_inherited_metadata(descriptor): def compute_inherited_metadata(descriptor):
......
...@@ -102,6 +102,7 @@ class XmlDescriptor(XModuleDescriptor): ...@@ -102,6 +102,7 @@ class XmlDescriptor(XModuleDescriptor):
'start', 'due', 'graded', 'display_name', 'url_name', 'hide_from_toc', 'start', 'due', 'graded', 'display_name', 'url_name', 'hide_from_toc',
'ispublic', # if True, then course is listed for all users; see 'ispublic', # if True, then course is listed for all users; see
'xqa_key', # for xqaa server access 'xqa_key', # for xqaa server access
'giturl', # url of git server for origin of file
# information about testcenter exams is a dict (of dicts), not a string, # information about testcenter exams is a dict (of dicts), not a string,
# so it cannot be easily exportable as a course element's attribute. # so it cannot be easily exportable as a course element's attribute.
'testcenter_info', 'testcenter_info',
...@@ -222,6 +223,7 @@ class XmlDescriptor(XModuleDescriptor): ...@@ -222,6 +223,7 @@ class XmlDescriptor(XModuleDescriptor):
definition, children = cls.definition_from_xml(definition_xml, system) definition, children = cls.definition_from_xml(definition_xml, system)
if definition_metadata: if definition_metadata:
definition['definition_metadata'] = definition_metadata definition['definition_metadata'] = definition_metadata
definition['filename'] = [ filepath, filename ]
return definition, children return definition, children
...@@ -315,6 +317,7 @@ class XmlDescriptor(XModuleDescriptor): ...@@ -315,6 +317,7 @@ class XmlDescriptor(XModuleDescriptor):
model_data['children'] = children model_data['children'] = children
model_data['xml_attributes'] = {} model_data['xml_attributes'] = {}
model_data['xml_attributes']['filename'] = definition.get('filename', ['', None]) # for git link
for key, value in metadata.items(): for key, value in metadata.items():
if key not in set(f.name for f in cls.fields + cls.lms.fields): if key not in set(f.name for f in cls.fields + cls.lms.fields):
model_data['xml_attributes'][key] = value model_data['xml_attributes'][key] = value
......
## The JS for this is defined in xqa_interface.html ## The JS for this is defined in xqa_interface.html
${module_content} ${module_content}
%if location.category in ['problem','video','html']: %if location.category in ['problem','video','html','combinedopenended']:
% if edit_link: % if edit_link:
<div> <div>
<a href="${edit_link}">Edit</a> / <a href="${edit_link}">Edit</a>
<a href="#${element_id}_xqa-modal" onclick="javascript:getlog('${element_id}', { % if xqa_key:
/ <a href="#${element_id}_xqa-modal" onclick="javascript:getlog('${element_id}', {
'location': '${location}', 'location': '${location}',
'xqa_key': '${xqa_key}', 'xqa_key': '${xqa_key}',
'category': '${category}', 'category': '${category}',
'user': '${user}' 'user': '${user}'
})" id="${element_id}_xqa_log">QA</a> })" id="${element_id}_xqa_log">QA</a>
% endif
</div> </div>
% endif % endif
<div><a href="#${element_id}_debug" id="${element_id}_trig">Staff Debug Info</a></div> <div><a href="#${element_id}_debug" id="${element_id}_trig">Staff Debug Info</a></div>
...@@ -61,6 +63,12 @@ location = ${location | h} ...@@ -61,6 +63,12 @@ location = ${location | h}
<tr><td>${name}</td><td><pre style="display:inline-block; margin: 0;">${field | h}</pre></td></tr> <tr><td>${name}</td><td><pre style="display:inline-block; margin: 0;">${field | h}</pre></td></tr>
%endfor %endfor
</table> </table>
<table>
<tr><th>XML attributes</th></tr>
%for name, field in xml_attributes.items():
<tr><td>${name}</td><td><pre style="display:inline-block; margin: 0;">${field | h}</pre></td></tr>
%endfor
</table>
category = ${category | h} category = ${category | h}
</div> </div>
%if render_histogram: %if render_histogram:
......
...@@ -52,7 +52,8 @@ class LmsNamespace(Namespace): ...@@ -52,7 +52,8 @@ class LmsNamespace(Namespace):
start = Date(help="Start time when this module is visible", scope=Scope.settings) start = Date(help="Start time when this module is visible", scope=Scope.settings)
due = Date(help="Date that this problem is due by", scope=Scope.settings) due = Date(help="Date that this problem is due by", scope=Scope.settings)
source_file = String(help="DO NOT USE", scope=Scope.settings) source_file = String(help="source file name (eg for latex)", scope=Scope.settings)
giturl = String(help="url root for course data git repository", scope=Scope.settings)
xqa_key = String(help="DO NOT USE", scope=Scope.settings) xqa_key = String(help="DO NOT USE", scope=Scope.settings)
ispublic = Boolean(help="Whether this course is open to the public, or only to admins", scope=Scope.settings) ispublic = Boolean(help="Whether this course is open to the public, or only to admins", scope=Scope.settings)
graceperiod = Timedelta( graceperiod = Timedelta(
......
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