From e2073207215624c19f7096c16e255e1393f27879 Mon Sep 17 00:00:00 2001 From: Anand Chitipothu Date: Thu, 29 Apr 2021 10:48:12 +0530 Subject: [PATCH] feat: added home page - Refactored the lms_course page and added find_all method to find courses - Added CourseTeaser widget - Added /home as a portal page --- community/hooks.py | 1 + .../lms/doctype/lms_course/lms_course.py | 12 ++++++ .../lms/doctype/lms_course/test_lms_course.py | 20 +++++++++- community/lms/widgets/CourseTeaser.html | 11 ++++++ community/www/home/index.html | 39 +++++++++++++++++++ community/www/home/index.py | 7 ++++ 6 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 community/lms/widgets/CourseTeaser.html create mode 100644 community/www/home/index.html create mode 100644 community/www/home/index.py diff --git a/community/hooks.py b/community/hooks.py index abaedcb0..90ad31b8 100644 --- a/community/hooks.py +++ b/community/hooks.py @@ -150,6 +150,7 @@ primary_rules = [ # Any frappe default URL is blocked by profile-rules, add it here to unblock it whitelist = [ + "/home", "/login", "/update-password", "/update-profile", diff --git a/community/lms/doctype/lms_course/lms_course.py b/community/lms/doctype/lms_course/lms_course.py index 49404f08..8d6de54e 100644 --- a/community/lms/doctype/lms_course/lms_course.py +++ b/community/lms/doctype/lms_course/lms_course.py @@ -88,3 +88,15 @@ class LMSCourse(Document): member.batch_count = len(frappe.get_all("LMS Batch Membership", {"member": member.name, "member_type": "Mentor"})) course_mentors.append(member) return course_mentors + + def get_instructor(self): + return frappe.get_doc("User", self.owner) + + @staticmethod + def find_all(): + """Returns all published courses. + """ + rows = frappe.db.get_all("LMS Course", + filters={"is_published": True}, + fields='*') + return [frappe.get_doc(dict(row, doctype='LMS Course')) for row in rows] diff --git a/community/lms/doctype/lms_course/test_lms_course.py b/community/lms/doctype/lms_course/test_lms_course.py index 2f50829b..a54ab337 100644 --- a/community/lms/doctype/lms_course/test_lms_course.py +++ b/community/lms/doctype/lms_course/test_lms_course.py @@ -4,6 +4,7 @@ from __future__ import unicode_literals import frappe +from .lms_course import LMSCourse import unittest class TestLMSCourse(unittest.TestCase): @@ -26,6 +27,23 @@ class TestLMSCourse(unittest.TestCase): assert course.slug == "test-course" assert course.get_mentors() == [] + def test_find_all(self): + courses = LMSCourse.find_all() + assert courses == [] + + # new couse, but not published + course = self.new_course("Test Course") + assert courses == [] + + # publish the course + course.is_published = True + course.save() + + # now we should find one course + courses = LMSCourse.find_all() + assert [c.slug for c in courses] == [course.slug] + + # disabled this test as it is failing def _test_add_mentors(self): course = self.new_course("Test Course") assert course.get_mentors() == [] @@ -47,4 +65,4 @@ def new_user(name, email): email=email, first_name=name)) doc.insert() - return doc \ No newline at end of file + return doc diff --git a/community/lms/widgets/CourseTeaser.html b/community/lms/widgets/CourseTeaser.html new file mode 100644 index 00000000..df2b4e22 --- /dev/null +++ b/community/lms/widgets/CourseTeaser.html @@ -0,0 +1,11 @@ +
+

{{ course.title }}

+
+ {{ course.short_introduction or "" }} +
+ +
diff --git a/community/www/home/index.html b/community/www/home/index.html new file mode 100644 index 00000000..a36f5506 --- /dev/null +++ b/community/www/home/index.html @@ -0,0 +1,39 @@ +{% extends "templates/base.html" %} + +{% block content %} +
+ {{ HeroSection() }} + {{ ExploreCourses(courses) }} + {{ RecentSketches(recent_sketches) }} +
+{% endblock %} + +{% macro HeroSection() %} +
TODO: Hero +
+{% endmacro %} + +{% macro ExploreCourses(courses) %} +
+

Explore Courses

+
+ {% for course in courses %} +
+ {{ widgets.CoursePreview(course=course) }} +
+ {% endfor %} +
+{% endmacro %} + +{% macro RecentSketches(sketches) %} +
+

Recent Sketches

+
+ {% for sketch in sketches %} +
+ {{ widgets.SketchPreview(sketch=sketch) }} +
+ {% endfor %} +
+
+{% endmacro %} diff --git a/community/www/home/index.py b/community/www/home/index.py new file mode 100644 index 00000000..34f55b61 --- /dev/null +++ b/community/www/home/index.py @@ -0,0 +1,7 @@ +import frappe +from community.lms.models import Course, Sketch + +def get_context(context): + context.no_cache = 1 + context.courses = Course.find_all() + context.recent_sketches = Sketch.get_recent_sketches(limit=8)