Commit 26eaf898 by Julian Arni

Allow progress without leaderboard and vice-versa

parent da2d0ed6
...@@ -11,14 +11,27 @@ from xmodule.xml_module import XmlDescriptor ...@@ -11,14 +11,27 @@ from xmodule.xml_module import XmlDescriptor
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
class FolditModule(XModule): class FolditModule(XModule):
css = {'scss': [resource_string(__name__, 'css/foldit/leadeboard.scss')]}
def __init__(self, system, location, definition, descriptor, def __init__(self, system, location, definition, descriptor,
instance_state=None, shared_state=None, **kwargs): instance_state=None, shared_state=None, **kwargs):
XModule.__init__(self, system, location, definition, descriptor, XModule.__init__(self, system, location, definition, descriptor,
instance_state, shared_state, **kwargs) instance_state, shared_state, **kwargs)
# ooh look--I'm lazy, so hardcoding the 7.00x required level. """
# If we need it generalized, can pull from the xml later
self.required_level = 4 Example:
self.required_sublevel = 5 <foldit show_basic_score="true"
required_level="4"
required_sublevel="3"
show_leaderboard="false"/>
"""
req_level = self.metadata.get("required_level")
req_sublevel = self.metadata.get("required_sublevel")
# default to what Spring_7012x uses
self.required_level = req_level if req_level else 4
self.required_sublevel = req_sublevel if req_sublevel else 5
def parse_due_date(): def parse_due_date():
""" """
...@@ -83,16 +96,47 @@ class FolditModule(XModule): ...@@ -83,16 +96,47 @@ class FolditModule(XModule):
self.required_level, self.required_level,
self.required_sublevel) self.required_sublevel)
showbasic = (self.metadata.get("show_basic_score") == "true")
showleader = (self.metadata.get("show_leaderboard") == "true")
context = { context = {
'due': self.due_str, 'due': self.due_str,
'success': self.is_complete(), 'success': self.is_complete(),
'goal_level': goal_level, 'goal_level': goal_level,
'completed': self.completed_puzzles(), 'completed': self.completed_puzzles(),
'top_scores': self.puzzle_leaders(), 'top_scores': self.puzzle_leaders(),
'show_basic': showbasic,
'show_leader': showleader,
'folditbasic': self.get_basicpuzzles_html(),
'folditchallenge': self.get_challenge_html()
} }
return self.system.render_template('foldit.html', context) return self.system.render_template('foldit.html', context)
def get_basicpuzzles_html(self):
"""
Render html for the basic puzzle section.
"""
goal_level = '{0}-{1}'.format(
self.required_level,
self.required_sublevel)
context = {
'due': self.due_str,
'success': self.is_complete(),
'goal_level': goal_level,
'completed': self.completed_puzzles(),
}
return self.system.render_template('folditbasic.html', context)
def get_challenge_html(self):
"""
Render html for challenge (i.e., the leaderboard)
"""
context = {
'top_scores': self.puzzle_leaders()}
return self.system.render_template('folditchallenge.html', context)
def get_score(self): def get_score(self):
""" """
...@@ -109,7 +153,7 @@ class FolditModule(XModule): ...@@ -109,7 +153,7 @@ class FolditModule(XModule):
class FolditDescriptor(XmlDescriptor, EditingDescriptor): class FolditDescriptor(XmlDescriptor, EditingDescriptor):
""" """
Module for adding open ended response questions to courses Module for adding Foldit problems to courses
""" """
mako_template = "widgets/html-edit.html" mako_template = "widgets/html-edit.html"
module_class = FolditModule module_class = FolditModule
...@@ -129,6 +173,6 @@ class FolditDescriptor(XmlDescriptor, EditingDescriptor): ...@@ -129,6 +173,6 @@ class FolditDescriptor(XmlDescriptor, EditingDescriptor):
@classmethod @classmethod
def definition_from_xml(cls, xml_object, system): def definition_from_xml(cls, xml_object, system):
""" """
For now, don't need anything from the xml Get the xml_object's attributes.
""" """
return {} return {'metadata': xml_object.attrib}
<section class="foldit"> <section class="foldit">
<p><strong>Due:</strong> ${due}
<p>
<strong>Status:</strong>
% if success:
You have successfully gotten to level ${goal_level}.
% else:
You have not yet gotten to level ${goal_level}.
% endif
</p>
<h3>Completed puzzles</h3>
<table>
<tr>
<th>Level</th>
<th>Submitted</th>
</tr>
% for puzzle in completed:
<tr>
<td>${'{0}-{1}'.format(puzzle['set'], puzzle['subset'])}</td>
<td>${puzzle['created'].strftime('%Y-%m-%d %H:%M')}</td>
</tr>
% endfor
</table>
</br>
<h3>Puzzle Leaderboard</h3> % if show_basic:
${folditbasic}
% endif
<table> % if show_leader:
<tr> ${folditchallenge}
<th>User</th> % endif
<th>Score</th>
</tr>
% for pair in top_scores:
<tr>
<td>${pair[0]}</td>
<td>${pair[1]}</td>
</tr>
% endfor
</table>
</section> </section>
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