diff --git a/community/__init__.py b/community/__init__.py index 95d1338e..43b477a7 100644 --- a/community/__init__.py +++ b/community/__init__.py @@ -3,3 +3,5 @@ from __future__ import unicode_literals __version__ = '0.0.1' +# load the methods from the lms api +from .lms import api # noqa diff --git a/community/hooks.py b/community/hooks.py index c7d5210e..048b98b5 100644 --- a/community/hooks.py +++ b/community/hooks.py @@ -127,14 +127,9 @@ scheduler_events = { # # auto_cancel_exempted_doctypes = ["Auto Repeat"] -from .routing import install_regex_converter -install_regex_converter() - # Add all simple route rules here primary_rules = [ - {"from_route": "/sketches", "to_route": "sketches"}, {"from_route": "/sketches/", "to_route": "sketches/sketch"}, - {"from_route": "/courses", "to_route": "courses"}, {"from_route": "/courses/", "to_route": "courses/course"}, {"from_route": "/courses//", "to_route": "courses/topic"}, {"from_route": "/hackathons", "to_route": "hackathons"}, @@ -147,13 +142,18 @@ whitelist = [ "/login", "/update-password", "/update-profile", - "/third-party-apps" + "/third-party-apps", + "/website_script.js", + "/courses", + "/sketches", + "/admin", + "/socket.io", ] whitelist_rules = [{"from_route": p, "to_route": p[1:]} for p in whitelist] # regex rule to match all profiles profile_rules = [ - {"from_route": "/", "to_route": "profiles/profile"}, + {"from_route": "/", "to_route": "profiles/profile"}, ] website_route_rules = primary_rules + whitelist_rules + profile_rules diff --git a/community/lms/api.py b/community/lms/api.py new file mode 100644 index 00000000..ab69ede4 --- /dev/null +++ b/community/lms/api.py @@ -0,0 +1,23 @@ +"""API methods for the LMS. +""" + +import frappe + +@frappe.whitelist() +def autosave_section(section, code): + """Saves the code edited in one of the sections. + """ + doc = frappe.get_doc( + doctype="Code Revision", + section=section, + code=code, + author=frappe.session.user) + doc.insert() + return {"name": doc.name} + +@frappe.whitelist() +def get_section(name): + """Saves the code edited in one of the sections. + """ + doc = frappe.get_doc("LMS Section", name) + return doc and doc.as_dict() diff --git a/community/lms/doctype/lms_section/lms_section.py b/community/lms/doctype/lms_section/lms_section.py index ad40ece6..f51fec69 100644 --- a/community/lms/doctype/lms_section/lms_section.py +++ b/community/lms/doctype/lms_section/lms_section.py @@ -3,9 +3,27 @@ # For license information, please see license.txt from __future__ import unicode_literals -# import frappe +import frappe from frappe.model.document import Document class LMSSection(Document): def __repr__(self): return f"" + + def get_latest_code_for_user(self): + """Returns the latest code for the logged in user. + """ + if not frappe.session.user or frappe.session.user == "Guest": + return self.contents + result = frappe.get_all('Code Revision', + fields=["code"], + filters={ + "author": frappe.session.user, + "section": self.name + }, + order_by="creation desc", + page_length=1) + if result: + return result[0]['code'] + else: + return self.contents diff --git a/community/www/courses/topic.html b/community/www/courses/topic.html index 67df39dc..bf23c6d2 100644 --- a/community/www/courses/topic.html +++ b/community/www/courses/topic.html @@ -44,7 +44,7 @@ {% if s.type == "text" %} {{ render_section_text(s) }} {% elif s.type == "example" or s.type == "code" %} - {{ LiveCodeEditor(s.name, s.contents) }} + {{ LiveCodeEditor(s.name, s.get_latest_code_for_user()) }} {% else %}
Unknown section type: {{s.type}}
{% endif %} @@ -63,11 +63,40 @@