diff --git a/.editorconfig b/.editorconfig index dd608df2..0984f25b 100644 --- a/.editorconfig +++ b/.editorconfig @@ -26,4 +26,4 @@ indent_style = tab # HTML, CSS, javascript, JSON and YAML [*.{html,css,js,json,yml,yaml}] -indent_size = 2 +indent_size = 4 diff --git a/school/fixtures/custom_field.json b/school/fixtures/custom_field.json index 0eb474a6..c48b71f9 100644 --- a/school/fixtures/custom_field.json +++ b/school/fixtures/custom_field.json @@ -80,10 +80,10 @@ "in_standard_filter": 0, "insert_after": "country", "is_virtual": 0, - "label": "Acceptance for Terms of Use and/or Privacy Policy", + "label": "Acceptance for Terms and/or Policies", "length": 0, "mandatory_depends_on": null, - "modified": "2021-12-31 19:15:34.932910", + "modified": "2021-12-31 19:15:34.932911", "module": null, "name": "User-verify_terms", "no_copy": 0, diff --git a/school/hooks.py b/school/hooks.py index 63c792cb..0a11804c 100644 --- a/school/hooks.py +++ b/school/hooks.py @@ -162,6 +162,8 @@ update_website_context = [ jinja = { "methods": [ "school.page_renderers.get_profile_url", + "school.overrides.user.get_enrolled_courses", + "school.overrides.user.get_course_membership", "school.overrides.user.get_authored_courses", "school.overrides.user.get_palette", "school.lms.utils.get_membership", @@ -185,7 +187,9 @@ jinja = { "school.lms.utils.get_initial_members", "school.lms.utils.get_sorted_reviews", "school.lms.utils.is_instructor", - "school.lms.utils.convert_number_to_character" + "school.lms.utils.convert_number_to_character", + "school.lms.utils.get_signup_optin_checks", + "school.lms.utils.get_popular_courses" ], "filters": [] } diff --git a/school/lms/doctype/course_chapter/course_chapter.json b/school/lms/doctype/course_chapter/course_chapter.json index 1b5395c0..ee8544bf 100644 --- a/school/lms/doctype/course_chapter/course_chapter.json +++ b/school/lms/doctype/course_chapter/course_chapter.json @@ -59,7 +59,7 @@ "link_fieldname": "chapter" } ], - "modified": "2022-03-08 15:21:10.389729", + "modified": "2022-03-14 17:57:00.707416", "modified_by": "Administrator", "module": "LMS", "name": "Course Chapter", @@ -93,6 +93,7 @@ } ], "search_fields": "title", + "show_title_field_in_link": 1, "sort_field": "modified", "sort_order": "DESC", "states": [], diff --git a/school/lms/doctype/course_lesson/course_lesson.json b/school/lms/doctype/course_lesson/course_lesson.json index fd113a0c..c38059ac 100644 --- a/school/lms/doctype/course_lesson/course_lesson.json +++ b/school/lms/doctype/course_lesson/course_lesson.json @@ -9,6 +9,7 @@ "engine": "InnoDB", "field_order": [ "chapter", + "course", "include_in_preview", "column_break_4", "title", @@ -69,11 +70,20 @@ { "fieldname": "help", "fieldtype": "HTML" + }, + { + "fetch_from": "chapter.course", + "fieldname": "course", + "fieldtype": "Link", + "hidden": 1, + "label": "Course", + "options": "LMS Course", + "read_only": 1 } ], "index_web_pages_for_search": 1, "links": [], - "modified": "2022-03-08 17:56:50.504143", + "modified": "2022-03-14 18:56:31.969801", "modified_by": "Administrator", "module": "LMS", "name": "Course Lesson", diff --git a/school/lms/doctype/lms_batch_membership/lms_batch_membership.json b/school/lms/doctype/lms_batch_membership/lms_batch_membership.json index 35f74e35..07061b24 100644 --- a/school/lms/doctype/lms_batch_membership/lms_batch_membership.json +++ b/school/lms/doctype/lms_batch_membership/lms_batch_membership.json @@ -1,6 +1,6 @@ { "actions": [], - "creation": "2021-03-18 19:52:10.673835", + "creation": "2022-02-07 12:01:40.929633", "doctype": "DocType", "editable_grid": 1, "engine": "InnoDB", @@ -24,8 +24,6 @@ { "fieldname": "batch", "fieldtype": "Link", - "in_list_view": 1, - "in_standard_filter": 1, "label": "Batch", "options": "LMS Batch" }, @@ -117,7 +115,7 @@ ], "index_web_pages_for_search": 1, "links": [], - "modified": "2021-12-16 14:49:25.964853", + "modified": "2022-03-09 15:17:15.386067", "modified_by": "Administrator", "module": "LMS", "name": "LMS Batch Membership", @@ -138,5 +136,6 @@ ], "quick_entry": 1, "sort_field": "modified", - "sort_order": "DESC" + "sort_order": "DESC", + "states": [] } \ No newline at end of file diff --git a/school/lms/doctype/lms_course/lms_course.json b/school/lms/doctype/lms_course/lms_course.json index b40ac09b..dad39ff4 100644 --- a/school/lms/doctype/lms_course/lms_course.json +++ b/school/lms/doctype/lms_course/lms_course.json @@ -20,13 +20,14 @@ "column_break_3", "instructors", "tags", + "status", "section_break_7", "is_published", - "column_break_9", + "column_break_10", "upcoming", - "column_break_11", + "column_break_12", "disable_self_learning", - "section_break_5", + "section_break_18", "short_introduction", "description", "chapters", @@ -42,7 +43,8 @@ "in_list_view": 1, "label": "Title", "reqd": 1, - "unique": 1 + "unique": 1, + "width": "200" }, { "fieldname": "description", @@ -65,10 +67,6 @@ "fieldtype": "Data", "label": "Video Embed Link" }, - { - "fieldname": "section_break_5", - "fieldtype": "Section Break" - }, { "fieldname": "short_introduction", "fieldtype": "Small Text", @@ -108,6 +106,7 @@ "fieldtype": "Table MultiSelect", "in_standard_filter": 1, "label": "Instructors", + "max_height": "50px", "options": "Course Instructor" }, { @@ -115,14 +114,6 @@ "fieldtype": "Section Break", "label": "Course Settings" }, - { - "fieldname": "column_break_9", - "fieldtype": "Column Break" - }, - { - "fieldname": "column_break_11", - "fieldtype": "Column Break" - }, { "fieldname": "certification_section", "fieldtype": "Section Break", @@ -147,6 +138,27 @@ "fieldtype": "Table", "label": "Related Courses", "options": "Related Courses" + }, + { + "default": "In Progress", + "fieldname": "status", + "fieldtype": "Select", + "hidden": 1, + "label": "Status", + "options": "In Progress\nReady for Review\nApproved", + "read_only": 1 + }, + { + "fieldname": "section_break_18", + "fieldtype": "Section Break" + }, + { + "fieldname": "column_break_10", + "fieldtype": "Column Break" + }, + { + "fieldname": "column_break_12", + "fieldtype": "Column Break" } ], "is_published_field": "is_published", @@ -172,7 +184,7 @@ "link_fieldname": "course" } ], - "modified": "2022-03-08 15:20:58.501082", + "modified": "2022-03-14 17:56:46.514391", "modified_by": "Administrator", "module": "LMS", "name": "LMS Course", diff --git a/school/lms/doctype/lms_course/lms_course.py b/school/lms/doctype/lms_course/lms_course.py index 24b2c9c2..de9bc76f 100644 --- a/school/lms/doctype/lms_course/lms_course.py +++ b/school/lms/doctype/lms_course/lms_course.py @@ -12,6 +12,24 @@ from school.lms.utils import get_chapters class LMSCourse(Document): + def validate(self): + self.validate_instructors() + self.validate_status() + + def validate_instructors(self): + if self.is_new() and not self.instructors: + frappe.get_doc({ + "doctype": "Course Instructor", + "instructor": self.owner, + "parent": self.name, + "parentfield": "instructors", + "parenttype": "LMS Course" + }).save(ignore_permissions=True) + + def validate_status(self): + if self.is_published: + self.status = "Approved" + def on_update(self): if not self.upcoming and self.has_value_changed("upcoming"): self.send_email_to_interested_users() @@ -184,3 +202,11 @@ def search_course(text): }) """ return courses + +@frappe.whitelist() +def submit_for_review(course): + chapters = frappe.get_all("Chapter Reference", {"parent": course}) + if not len(chapters): + return "No Chp" + frappe.db.set_value("LMS Course", course, "status", "Ready for Review") + return "OK" diff --git a/school/lms/doctype/lms_course/test_lms_course.py b/school/lms/doctype/lms_course/test_lms_course.py index 64d27695..1dcefab0 100644 --- a/school/lms/doctype/lms_course/test_lms_course.py +++ b/school/lms/doctype/lms_course/test_lms_course.py @@ -12,8 +12,6 @@ class TestLMSCourse(unittest.TestCase): frappe.db.sql('delete from `tabLMS Course Mentor Mapping`') frappe.db.sql('delete from `tabLMS Course`') - - def test_new_course(self): course = new_course("Test Course") assert course.title == "Test Course" diff --git a/school/lms/doctype/lms_settings/lms_settings.json b/school/lms/doctype/lms_settings/lms_settings.json index 752ac995..2fa1f3f5 100644 --- a/school/lms/doctype/lms_settings/lms_settings.json +++ b/school/lms/doctype/lms_settings/lms_settings.json @@ -14,9 +14,12 @@ "signup_settings_section", "terms_of_use", "terms_page", - "column_break_12", + "column_break_9", "privacy_policy", "privacy_policy_page", + "column_break_12", + "cookie_policy", + "cookie_policy_page", "mentor_request_section", "mentor_request_creation", "mentor_request_status_update" @@ -97,6 +100,7 @@ "fieldname": "privacy_policy_page", "fieldtype": "Link", "label": "Privacy Policy Page", + "mandatory_depends_on": "privacy_policy", "options": "Web Page" }, { @@ -108,6 +112,24 @@ "fieldname": "portal_course_creation", "fieldtype": "Check", "label": "Enable Course Creation from Portal" + }, + { + "fieldname": "column_break_9", + "fieldtype": "Column Break" + }, + { + "default": "0", + "fieldname": "cookie_policy", + "fieldtype": "Check", + "label": "Show Cookie Policy on Signup" + }, + { + "depends_on": "cookie_policy", + "fieldname": "cookie_policy_page", + "fieldtype": "Link", + "label": "Cookie Policy Page", + "mandatory_depends_on": "cookie_policy", + "options": "Web Page" } ], "index_web_pages_for_search": 1, diff --git a/school/lms/doctype/lms_settings/lms_settings.py b/school/lms/doctype/lms_settings/lms_settings.py index 0681a991..8d9ef1ed 100644 --- a/school/lms/doctype/lms_settings/lms_settings.py +++ b/school/lms/doctype/lms_settings/lms_settings.py @@ -5,9 +5,10 @@ from __future__ import unicode_literals import frappe from frappe.model.document import Document +from frappe import _ class LMSSettings(Document): - pass + pass @frappe.whitelist() def check_profile_restriction(): diff --git a/school/lms/utils.py b/school/lms/utils.py index 1eae98e7..cf0fd163 100644 --- a/school/lms/utils.py +++ b/school/lms/utils.py @@ -3,6 +3,7 @@ import frappe from frappe.utils import flt, cint, cstr from school.lms.md import markdown_to_html import string +from frappe import _ RE_SLUG_NOTALLOWED = re.compile("[^a-z0-9]+") @@ -296,3 +297,43 @@ def is_instructor(course): def convert_number_to_character(number): return string.ascii_uppercase[number] + +def get_signup_optin_checks(): + + mapper = frappe._dict({ + "terms_of_use": { + "page_name": "terms_page", + "title": _("Terms of Use") + }, + "privacy_policy": { + "page_name": "privacy_policy_page", + "title": _("Privacy Policy") + }, + "cookie_policy": { + "page_name": "cookie_policy_page", + "title": _("Cookie Policy") + } + }) + checks = ["terms_of_use", "privacy_policy", "cookie_policy"] + links = [] + + for check in checks: + if frappe.db.get_single_value("LMS Settings", check): + page = frappe.db.get_single_value("LMS Settings", mapper[check].get("page_name")) + route = frappe.db.get_value("Web Page", page, "route") + links.append("" + mapper[check].get("title") + "") + + return (", ").join(links) + +def get_popular_courses(): + courses = frappe.get_all("LMS Course", {"is_published": 1, "upcoming": 0}) + course_membership = [] + + for course in courses: + course_membership.append({ + "course": course.name, + "members": cint(frappe.db.count("LMS Batch Membership", {"course": course.name})) + }) + + course_membership = sorted(course_membership, key = lambda x: x.get("members"), reverse=True) + return course_membership[:3] diff --git a/school/lms/web_form/chapter/chapter.js b/school/lms/web_form/chapter/chapter.js index 699703c5..5315afbf 100644 --- a/school/lms/web_form/chapter/chapter.js +++ b/school/lms/web_form/chapter/chapter.js @@ -1,3 +1,5 @@ frappe.ready(function() { - // bind events here -}) \ No newline at end of file + frappe.web_form.after_save = () => { + window.location.href = `/courses/${frappe.web_form.doc.course}`; + } +}); diff --git a/school/lms/web_form/chapter/chapter.json b/school/lms/web_form/chapter/chapter.json index a1db2177..fc2b8afc 100644 --- a/school/lms/web_form/chapter/chapter.json +++ b/school/lms/web_form/chapter/chapter.json @@ -8,7 +8,7 @@ "allow_print": 0, "amount": 0.0, "amount_based_on_field": 0, - "apply_document_permissions": 0, + "apply_document_permissions": 1, "button_label": "Save", "creation": "2022-03-07 18:41:07.058806", "doc_type": "Course Chapter", @@ -19,7 +19,7 @@ "is_standard": 1, "login_required": 1, "max_attachment_size": 0, - "modified": "2022-03-07 18:41:07.058806", + "modified": "2022-03-14 18:48:01.704325", "modified_by": "Administrator", "module": "LMS", "name": "chapter", diff --git a/school/lms/web_form/course/course.js b/school/lms/web_form/course/course.js index 23ad7a61..1aae8b5c 100644 --- a/school/lms/web_form/course/course.js +++ b/school/lms/web_form/course/course.js @@ -1,7 +1,5 @@ frappe.ready(function() { - frappe.web_form.after_save = () => { - setTimeout(() => { - window.location.href = `/courses/${frappe.web_form.doc.name}`; - }) - } + frappe.web_form.after_save = () => { + window.location.href = `/dashboard#courses-created`; + } }); diff --git a/school/lms/web_form/course/course.json b/school/lms/web_form/course/course.json index 01eb9e76..f12d692e 100644 --- a/school/lms/web_form/course/course.json +++ b/school/lms/web_form/course/course.json @@ -20,7 +20,7 @@ "is_standard": 1, "login_required": 1, "max_attachment_size": 0, - "modified": "2022-03-09 10:10:30.069458", + "modified": "2022-03-11 12:32:22.512115", "modified_by": "Administrator", "module": "LMS", "name": "course", @@ -121,7 +121,7 @@ { "allow_read_on_all_link_options": 0, "fieldname": "description", - "fieldtype": "Data", + "fieldtype": "Text", "hidden": 0, "label": "Description", "max_length": 0, diff --git a/school/lms/web_form/lesson/lesson.js b/school/lms/web_form/lesson/lesson.js index afc067af..49c264fd 100644 --- a/school/lms/web_form/lesson/lesson.js +++ b/school/lms/web_form/lesson/lesson.js @@ -1,17 +1,5 @@ frappe.ready(function() { - frappe.web_form.after_save = () => { - setTimeout(() => { - - frappe.call({ - method: "school.lms.doctype.course_lesson.course_lesson.get_lesson_info", - args: { - "lesson_name": frappe.web_form.doc.name - }, - callback: (data) => { - window.location.href = data.message; - } - }); - - }); + frappe.web_form.after_save = () => { + window.location.href = `/courses/` }; }); diff --git a/school/lms/web_form/lesson/lesson.json b/school/lms/web_form/lesson/lesson.json index 0aebf239..2c519587 100644 --- a/school/lms/web_form/lesson/lesson.json +++ b/school/lms/web_form/lesson/lesson.json @@ -21,7 +21,7 @@ "is_standard": 1, "login_required": 1, "max_attachment_size": 0, - "modified": "2022-03-09 09:55:58.406164", + "modified": "2022-03-14 18:49:33.526455", "modified_by": "Administrator", "module": "LMS", "name": "lesson", @@ -38,7 +38,7 @@ "title": "Lesson", "web_form_fields": [ { - "allow_read_on_all_link_options": 1, + "allow_read_on_all_link_options": 0, "fieldname": "chapter", "fieldtype": "Link", "hidden": 0, @@ -78,7 +78,7 @@ { "allow_read_on_all_link_options": 0, "fieldname": "body", - "fieldtype": "Data", + "fieldtype": "Text", "hidden": 0, "label": "Body", "max_length": 0, diff --git a/school/lms/web_template/courses_enrolled/courses_enrolled.html b/school/lms/web_template/courses_enrolled/courses_enrolled.html index b45c9e12..f254a3ef 100644 --- a/school/lms/web_template/courses_enrolled/courses_enrolled.html +++ b/school/lms/web_template/courses_enrolled/courses_enrolled.html @@ -1,35 +1,27 @@ -{% set member = frappe.get_doc("User", frappe.session.user) %} -
- {% set enrolled = member.get_enrolled_courses().in_progress + member.get_enrolled_courses().completed %} - {% if enrolled | length %} -
-
- {{ _("Courses Enrolled") }} -
-
- {% for course in enrolled %} - {{ widgets.CourseCard(course=course) }} - {% endfor %} -
-
- {% else %} - {% set site_name = frappe.db.get_single_value("System Settings", "app_name") %} -
-
-
-
{{ _("You haven't enrolled for any courses") }}
-
{{ _("Here are a few courses we recommend for you to get started with {0}").format(site_name) }}
-
- {% set recommended_courses = [course1, course2, course3] %} -
- {% for recommended_course in recommended_courses %} - {% if recommended_course %} - {% set course_details = frappe.get_doc("LMS Course", recommended_course) %} - {{ widgets.CourseCard(course=course_details) }} - {% endif %} - {% endfor %} -
-
-
- {% endif %} +{% set enrolled = get_enrolled_courses().in_progress + get_enrolled_courses().completed %} +{% if enrolled | length %} +
+ {% for course in enrolled %} + {{ widgets.CourseCard(course=course) }} + {% endfor %}
+{% else %} +{% set site_name = frappe.db.get_single_value("System Settings", "app_name") %} +
+
+
+
{{ _("You haven't enrolled for any courses") }}
+
{{ _("Here are a few courses we recommend for you to get started with {0}").format(site_name) }}
+
+ {% set recommended_courses = get_popular_courses() %} +
+ {% for course in recommended_courses %} + {% if course %} + {% set course_details = frappe.get_doc("LMS Course", course.course) %} + {{ widgets.CourseCard(course=course_details) }} + {% endif %} + {% endfor %} +
+
+
+{% endif %} diff --git a/school/lms/web_template/courses_enrolled/courses_enrolled.json b/school/lms/web_template/courses_enrolled/courses_enrolled.json index 9571085f..cf482cac 100644 --- a/school/lms/web_template/courses_enrolled/courses_enrolled.json +++ b/school/lms/web_template/courses_enrolled/courses_enrolled.json @@ -3,41 +3,9 @@ "creation": "2021-10-21 11:29:50.424865", "docstatus": 0, "doctype": "Web Template", - "fields": [ - { - "__unsaved": 1, - "fieldname": "recommended_courses", - "fieldtype": "Section Break", - "label": "Recommended Courses for new users", - "reqd": 0 - }, - { - "__unsaved": 1, - "fieldname": "course1", - "fieldtype": "Link", - "label": "Course 1", - "options": "LMS Course", - "reqd": 1 - }, - { - "__unsaved": 1, - "fieldname": "course2", - "fieldtype": "Link", - "label": "Course 2", - "options": "LMS Course", - "reqd": 1 - }, - { - "__unsaved": 1, - "fieldname": "course3", - "fieldtype": "Link", - "label": "Course 3", - "options": "LMS Course", - "reqd": 1 - } - ], + "fields": [], "idx": 0, - "modified": "2021-10-28 19:36:11.372396", + "modified": "2022-03-14 09:44:28.266320", "modified_by": "Administrator", "module": "LMS", "name": "Courses Enrolled", diff --git a/school/lms/widgets/Reviews.html b/school/lms/widgets/Reviews.html index 56c11e67..f4331e0b 100644 --- a/school/lms/widgets/Reviews.html +++ b/school/lms/widgets/Reviews.html @@ -92,14 +92,16 @@
{{ _("Help us improve our course material.") }}
- {% if is_eligible_to_review(course.name, membership) %} - - {{ _("Write a review") }} - - {% elif frappe.session.user == "Guest" %} - {{ _("Login") }} - {% elif not membership %} -
{{ _("Start Learning") }}
+ {% if not is_instructor(course.name) %} + {% if is_eligible_to_review(course.name, membership) %} + + {{ _("Write a review") }} + + {% elif frappe.session.user == "Guest" %} + {{ _("Login") }} + {% elif not membership %} +
{{ _("Start Learning") }}
+ {% endif %} {% endif %}
diff --git a/school/overrides/user.py b/school/overrides/user.py index d3b095ab..da199318 100644 --- a/school/overrides/user.py +++ b/school/overrides/user.py @@ -102,16 +102,6 @@ class CustomUser(User): "owner": self.name }) - def get_course_membership(self, member_type=None): - """ Returns all memberships of the user """ - filters = { - "member": self.name - } - if member_type: - filters["member_type"] = member_type - - return frappe.get_all("LMS Batch Membership", filters, ["name", "course", "progress"]) - def get_mentored_courses(self): """ Returns all courses mentored by this user """ mentored_courses = [] @@ -130,31 +120,53 @@ class CustomUser(User): return mentored_courses - def get_enrolled_courses(self): - in_progress = [] - completed = [] - memberships = self.get_course_membership("Student") - for membership in memberships: - course = frappe.db.get_value("LMS Course", membership.course, - ["name", "upcoming", "title", "image", "enable_certification"], as_dict=True) - progress = cint(membership.progress) - if progress < 100: - in_progress.append(course) - else: - completed.append(course) - return { - "in_progress": in_progress, - "completed": completed - } -def get_authored_courses(member): +def get_enrolled_courses(): + in_progress = [] + completed = [] + memberships = get_course_membership(member_type="Student") + for membership in memberships: + course = frappe.db.get_value("LMS Course", membership.course, + ["name", "upcoming", "title", "image", "enable_certification"], as_dict=True) + progress = cint(membership.progress) + if progress < 100: + in_progress.append(course) + else: + completed.append(course) + + return { + "in_progress": in_progress, + "completed": completed + } + +def get_course_membership(member=frappe.session.user, member_type=None): + """ Returns all memberships of the user """ + filters = { + "member": member + } + if member_type: + filters["member_type"] = member_type + + return frappe.get_all("LMS Batch Membership", filters, ["name", "course", "progress"]) + + +def get_authored_courses(member=frappe.session.user, only_published=True): """Returns the number of courses authored by this user. """ - return frappe.get_all( - 'LMS Course', { - 'instructor': member, - 'is_published': True - }) + course_details = [] + + filters = { + "instructor": member + } + if only_published: + filters["is_published"] = True + courses = frappe.get_all('LMS Course', filters) + + for course in courses: + course_details.append(frappe.db.get_value("LMS Course", course, + ["name", "upcoming", "title", "image", "enable_certification"], as_dict=True)) + + return course_details def get_palette(full_name): """ diff --git a/school/patches.txt b/school/patches.txt index 996ddade..a0a0de43 100644 --- a/school/patches.txt +++ b/school/patches.txt @@ -22,3 +22,4 @@ school.patches.v0_0.add_progress_to_membership #20-10-2021 execute:frappe.delete_doc("Workspace", "LMS", ignore_missing=True, force=True) #24-10-2021 execute:frappe.delete_doc("Custom Field", "User-verify_age", ignore_missing=True, force=True) school.patches.v0_0.multiple_instructors #11-02-2022 +school.patches.v0_0.set_course_in_lesson #14-03-2022 diff --git a/school/patches/v0_0/set_course_in_lesson.py b/school/patches/v0_0/set_course_in_lesson.py new file mode 100644 index 00000000..3825b330 --- /dev/null +++ b/school/patches/v0_0/set_course_in_lesson.py @@ -0,0 +1,7 @@ +import frappe + +def execute(): + lessons = frappe.get_all("Course Lesson", fields=["name", "chapter"]) + for lesson in lessons: + course = frappe.db.get_value("Course Chapter", lesson.chapter, "course") + frappe.db.set_value("Course Lesson", lesson.name, "course", course) diff --git a/school/public/css/style.css b/school/public/css/style.css index 327ad8f3..8ad21492 100644 --- a/school/public/css/style.css +++ b/school/public/css/style.css @@ -73,9 +73,9 @@ input[type=checkbox] { } .common-page-style { - padding-bottom: 5rem; + padding: 4rem 0 5rem; min-height: 60vh; - padding-top: 3rem; + font-size: var(--text-base); } .common-card-style { @@ -1226,7 +1226,7 @@ pre { width: fit-content; position: fixed; top: 40%; - right: 7%; + right: 10%; max-width: 400px; z-index: 4; } @@ -1426,3 +1426,23 @@ pre { .carousel-inner { overflow: inherit; } + +.dashboard .nav-link { + color: var(--text-muted); + padding: var(--padding-md) 0; + margin-right: var(--margin-xl); +} + +.dashboard .nav-link.active { + font-weight: 600; + border-bottom: 1px solid var(--primary); + color: var(--text-color); +} + +.dashboard .nav-link:hover { + color: inherit; +} + +.dashboard .nav { + border-bottom: 1px solid var(--border-color); +} diff --git a/school/public/js/profile.js b/school/public/js/profile.js index b0aa3ccc..da0a5b9b 100644 --- a/school/public/js/profile.js +++ b/school/public/js/profile.js @@ -1,10 +1,10 @@ frappe.ready(() => { - hide_profile_for_guest_users(); + hide_profile_and_dashboard_for_guest_users(); }); -const hide_profile_for_guest_users = () => { +const hide_profile_and_dashboard_for_guest_users = () => { if (frappe.session.user == "Guest") { - var link_array = $('.nav-link').filter((i, elem) => $(elem).text().trim() === "My Profile"); - link_array.length && $(link_array[0]).addClass("hide"); + let links = $('.nav-link').filter((i, elem) => $(elem).text().trim() === "My Profile" || $(elem).text().trim() === "Dashboard"); + links.length && links.each((i, elem) => $(elem).addClass("hide")); } }; diff --git a/school/templates/courses_created.html b/school/templates/courses_created.html new file mode 100644 index 00000000..434474ad --- /dev/null +++ b/school/templates/courses_created.html @@ -0,0 +1,23 @@ +{% set courses = get_authored_courses(only_published=False) %} +{% if courses | length %} +
+ {% for course in courses %} + {{ widgets.CourseCard(course=course) }} + {% endfor %} +
+{% else %} +
+
+ +
+
+
{{ _("No courses created") }}
+
{{ _("Help others learn something new.") }}
+
+
+ + {{ _("Create a Course") }} + +
+
+{% endif %} diff --git a/school/templates/signup-form.html b/school/templates/signup-form.html index 91c77910..1c668757 100644 --- a/school/templates/signup-form.html +++ b/school/templates/signup-form.html @@ -10,24 +10,6 @@ - {% set terms_of_use = frappe.db.get_single_value("LMS Settings", "terms_of_use") %} - {% set privacy_policy = frappe.db.get_single_value("LMS Settings", "privacy_policy") %} - - {% if terms_of_use or privacy_policy %} - - {% if terms_of_use %} - {% set terms_page = frappe.db.get_single_value("LMS Settings", "terms_page") %} - {% set terms_page_route = frappe.db.get_value("Web Page", terms_page, "route") %} - {% set terms_link = "" + _("Terms of Use") + "" %} - {% endif %} - - {% if privacy_policy %} - {% set privacy_policy_page = frappe.db.get_single_value("LMS Settings", "privacy_policy_page") %} - {% set privacy_page_route = frappe.db.get_value("Web Page", privacy_policy_page, "route") %} - {% set privacy_link = "" + _("Privacy Policy") + "" %} - {% endif %} - - {% set final_link = terms_link + _(" and ") + privacy_link if terms_of_use and privacy_policy else terms_link if terms_of_use else privacy_link %}
@@ -37,13 +19,12 @@ data-fieldtype="Check" data-fieldname="terms" id="signup-terms" required> - {{ _("I have read and agree to your {0}").format(final_link) }} + {{ _("I have read and agree to your {0}").format(get_signup_optin_checks()) }}

- {% endif %}