diff --git a/erpnext/education/doctype/lms_activity/__init__.py b/erpnext/education/doctype/lms_activity/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/erpnext/education/doctype/lms_activity/lms_activity.json b/erpnext/education/doctype/lms_activity/lms_activity.json
new file mode 100644
index 0000000000..f7bc30b10a
--- /dev/null
+++ b/erpnext/education/doctype/lms_activity/lms_activity.json
@@ -0,0 +1,208 @@
+{
+ "allow_copy": 0,
+ "allow_guest_to_view": 0,
+ "allow_import": 0,
+ "allow_rename": 0,
+ "beta": 0,
+ "creation": "2018-10-08 10:59:58.325210",
+ "custom": 0,
+ "docstatus": 0,
+ "doctype": "DocType",
+ "document_type": "",
+ "editable_grid": 1,
+ "engine": "InnoDB",
+ "fields": [
+ {
+ "allow_bulk_edit": 0,
+ "allow_in_quick_entry": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "course_name",
+ "fieldtype": "Link",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 1,
+ "in_standard_filter": 0,
+ "label": "Course Name",
+ "length": 0,
+ "no_copy": 0,
+ "options": "Course",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "translatable": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_in_quick_entry": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fetch_from": "",
+ "fieldname": "lesson_name",
+ "fieldtype": "Link",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 1,
+ "in_standard_filter": 0,
+ "label": "Lesson Name",
+ "length": 0,
+ "no_copy": 0,
+ "options": "Content",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "translatable": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_in_quick_entry": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "quiz_score",
+ "fieldtype": "Data",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Quiz Score",
+ "length": 0,
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "translatable": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_in_quick_entry": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "default": "Unattempted",
+ "fieldname": "quiz_status",
+ "fieldtype": "Select",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Quiz Status",
+ "length": 0,
+ "no_copy": 0,
+ "options": "\nUnattempted\nPassed\nFailed",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "translatable": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_in_quick_entry": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "lesson_status",
+ "fieldtype": "Select",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Lesson Status",
+ "length": 0,
+ "no_copy": 0,
+ "options": "\nOngoing\nCompleted",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "translatable": 0,
+ "unique": 0
+ }
+ ],
+ "has_web_view": 0,
+ "hide_heading": 0,
+ "hide_toolbar": 0,
+ "idx": 0,
+ "image_view": 0,
+ "in_create": 0,
+ "is_submittable": 0,
+ "issingle": 0,
+ "istable": 1,
+ "max_attachments": 0,
+ "modified": "2018-10-08 12:48:34.394511",
+ "modified_by": "Administrator",
+ "module": "Education",
+ "name": "LMS Activity",
+ "name_case": "",
+ "owner": "Administrator",
+ "permissions": [],
+ "quick_entry": 1,
+ "read_only": 0,
+ "read_only_onload": 0,
+ "show_name_in_global_search": 0,
+ "sort_field": "modified",
+ "sort_order": "DESC",
+ "track_changes": 1,
+ "track_seen": 0,
+ "track_views": 0
+}
\ No newline at end of file
diff --git a/erpnext/education/doctype/lms_activity/lms_activity.py b/erpnext/education/doctype/lms_activity/lms_activity.py
new file mode 100644
index 0000000000..cff70cbd8b
--- /dev/null
+++ b/erpnext/education/doctype/lms_activity/lms_activity.py
@@ -0,0 +1,10 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
+# For license information, please see license.txt
+
+from __future__ import unicode_literals
+import frappe
+from frappe.model.document import Document
+
+class LMSActivity(Document):
+ pass
diff --git a/erpnext/www/lms/__init__.py b/erpnext/www/lms/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/erpnext/www/lms/course.html b/erpnext/www/lms/course.html
new file mode 100644
index 0000000000..4538b9f573
--- /dev/null
+++ b/erpnext/www/lms/course.html
@@ -0,0 +1,63 @@
+{% extends "frappe_theme/templates/base.html" %}
+{% block title %}ERPNext Academy{% endblock %}
+
+{% from "templates/includes/media.html" import media %}
+
+{% block head_include %}
+
+
+{% endblock %}
+
+{% macro video(id) %}
+
+ VIDEO
+
+{% endmacro %}
+
+{% block content %}
+
+
+ {% if lesson.video_url is defined %}
+ {{ video("lesson,video") }}
+ {% endif %}
+
+
+
{{ lesson.name }}
+
+ 49 Mins
+ — Published on 28th October 2018.
+
+
+
+
+
+
+
+{% for lesson in lesson_list %}
+ {{ lesson }}
+{% endfor %}
+
+
+
+ {{ lesson.content }}
+
+
+
+
+
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/erpnext/www/lms/course.py b/erpnext/www/lms/course.py
new file mode 100644
index 0000000000..453c9c7905
--- /dev/null
+++ b/erpnext/www/lms/course.py
@@ -0,0 +1,2 @@
+# current_module = frappe.get_doc("Course", frappe.form_dict["lesson"])
+# current_lesson = frappe.get_doc("Lesson", frappe.form_dict["lesson"])
\ No newline at end of file
diff --git a/erpnext/www/lms/index.css b/erpnext/www/lms/index.css
new file mode 100644
index 0000000000..22be3be59e
--- /dev/null
+++ b/erpnext/www/lms/index.css
@@ -0,0 +1,101 @@
+.page-content {
+ padding-bottom: 0px !important;
+}
+
+.dashboard-section {
+ margin: auto;
+ max-width: 90%;
+}
+
+.dashboard-section h1 {
+ font-size: 1.5em;
+}
+
+@media(min-width: 768px) {
+ .dashboard-section {
+ max-width: 80%;
+ }
+}
+
+@media(min-width: 992px) {
+ .dashboard-section {
+ max-width: 65%;
+ }
+}
+
+.hero-content h1 {
+ font-size: 1.85em;
+ font-weight: 300;
+}
+
+.hero {
+ border-bottom: 0px;
+}
+
+.erp-hero {
+ border-bottom: 1px solid #e1e9f0;
+}
+
+.hero-content p {
+ margin-bottom: 100px;
+}
+
+.navbar {
+ border-bottom: 0px;
+}
+
+.main-illustration {
+ margin: -90px 0 -60px -32px;
+ min-height: 420px;
+}
+
+.hero-title {
+ font-size: 32px;
+}
+
+@media screen and (max-width: 750px) {
+ .main-illustration {
+ min-height: inherit;
+ }
+}
+
+@media screen and (max-width: 480px) {
+ .main-illustration {
+ margin: -60px 0 -20px -16px;
+ }
+
+ .hero-title {
+ font-size: 26px;
+ }
+
+ .hero-title+p {
+ font-size: 16px;
+ }
+}
+
+
+.modal-dialog {
+ max-width: 800px;
+ margin: 30px auto;
+}
+
+.modal-body {
+ position: relative;
+ padding: 0px;
+ background-color: black;
+}
+
+.close {
+ position: absolute;
+ right: -30px;
+ top: 0;
+ z-index: 999;
+ font-size: 2rem;
+ font-weight: normal;
+ color: #fff;
+ opacity: 1;
+}
+
+.video-btn {
+ color: white !important;
+}
\ No newline at end of file
diff --git a/erpnext/www/lms/index.html b/erpnext/www/lms/index.html
new file mode 100644
index 0000000000..1974d4f569
--- /dev/null
+++ b/erpnext/www/lms/index.html
@@ -0,0 +1,87 @@
+{% extends "frappe_theme/templates/base.html" %}
+{% block title %}ERPNext Academy{% endblock %}
+
+{% from "templates/includes/media.html" import media %}
+
+{% block head_include %}
+
+
+{% endblock %}
+
+{% macro featured_card(program_name, description, hero_image, code) %}
+
+{% endmacro %}
+
+{% block content %}
+
+
+
+
+
+
Become an ERPNext Expert
+
+
+ A platform for enterpreneurs, developers and implementors to learn the world's leading 100% Open
+ Source ERP
+
+
+ Enroll Now
+
+
+
+
+
+
Featured Programs
+
Master ERPNext with our Expert Learning Paths
+ {% for program in featured %}
+ {{ featured_card(program.program_name, program.description, program.hero_image, program.program_code) }}
+ {% endfor %}
+
+
+
+
+{% include "www/lms/templates/includes/highlights.html" %}
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/erpnext/www/lms/index.js b/erpnext/www/lms/index.js
new file mode 100644
index 0000000000..8fcda6e1e0
--- /dev/null
+++ b/erpnext/www/lms/index.js
@@ -0,0 +1,30 @@
+$(function () {
+ setTimeout(function () {
+ $(".later").fadeIn();
+ }, 1000);
+});
+
+$(document).ready(function () {
+
+ var $videoSrc;
+ // Gets the video src from the data-src on each button
+ $('.video-btn').click(function () {
+ $videoSrc = $(this).attr("data-src");
+ console.log($videoSrc);
+ });
+ console.log($videoSrc);
+
+
+ // when the modal is opened autoplay it
+ $('#myModal').on('shown.bs.modal', function (e) {
+
+ // set the video src to autoplay and not to show related video. Youtube related video is like a box of chocolates... you never know what you're gonna get
+ $("#ytplayer").attr('src', "https://www.youtube.com/embed/" + $videoSrc + "?autoplay=0");
+ })
+ // stop playing the youtube video when I close the modal
+ $('#myModal').on('hide.bs.modal', function (e) {
+ // a poor man's stop video
+ $("#ytplayer").attr('src', $videoSrc);
+ })
+ // document ready
+});
\ No newline at end of file
diff --git a/erpnext/www/lms/index.py b/erpnext/www/lms/index.py
new file mode 100644
index 0000000000..16772a4f5d
--- /dev/null
+++ b/erpnext/www/lms/index.py
@@ -0,0 +1,5 @@
+from __future__ import unicode_literals
+import frappe
+
+def get_context(context):
+ context.featured = frappe.get_all('Program', filters={'is_featured': 1}, fields=['program_name', 'program_code', 'description', 'hero_image'])
\ No newline at end of file
diff --git a/erpnext/www/lms/program.html b/erpnext/www/lms/program.html
new file mode 100644
index 0000000000..e079b4155a
--- /dev/null
+++ b/erpnext/www/lms/program.html
@@ -0,0 +1,70 @@
+{% extends "frappe_theme/templates/base.html" %}
+{% block title %}ERPNext Academy{% endblock %}
+
+{% block head_include %}
+
+
+{% endblock %}
+
+{% macro course_card(name) %}
+
+
+
+
+
{{ name }}
+
+ Course Content
+
+ {% for content in course_data[name] %}
+ {{ content }}
+ {% endfor %}
+
+
+
+
+
+
+
+{% endmacro %}
+
+{% block content %}
+
+
+
+
+
+
{{ program.program_name }}
+
{{ program.description }}
+
+
+ Continue with Course 2
+
+
+
+
+
+
Courses
+
Master ERPNext with our Expert Learning Paths
+ {% for course_item in course_list %}
+ {{ course_card(course_item) }}
+ {% endfor %}
+
+
+
+{% include "www/lms/templates/includes/highlights.html" %}
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/erpnext/www/lms/program.py b/erpnext/www/lms/program.py
new file mode 100644
index 0000000000..809e6cdd2d
--- /dev/null
+++ b/erpnext/www/lms/program.py
@@ -0,0 +1,20 @@
+from __future__ import unicode_literals
+import frappe
+
+
+# Get the classroom's route parameter from the url
+url_param = frappe.form_dict["code"]
+# Get classroom from classroom_name
+current_program = frappe.get_doc("Program", url_param)
+
+def get_context(context):
+ context.program = current_program
+ context.course_list, context.course_data = get_courses()
+
+def get_courses():
+ course_data = {}
+ course_names = [program.course_name for program in current_program.courses]
+ program_courses = [frappe.get_doc('Course', name) for name in course_names]
+ for course_item in program_courses:
+ course_data[course_item.name] = [content_item.content for content_item in course_item.course_content if content_item.content_type in ('Video', 'Article')]
+ return course_names, course_data
diff --git a/erpnext/www/lms/templates/includes/footer/footer.html b/erpnext/www/lms/templates/includes/footer/footer.html
new file mode 100644
index 0000000000..62aabea234
--- /dev/null
+++ b/erpnext/www/lms/templates/includes/footer/footer.html
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+ © Frappe Technologies Pvt. Ltd.
+
+
+
+
+
+
+
+
+
"Be the change, you wish to see in the world ~ M. K. Gandhi"
+
+
+
+
\ No newline at end of file
diff --git a/erpnext/www/lms/templates/includes/highlights.html b/erpnext/www/lms/templates/includes/highlights.html
new file mode 100644
index 0000000000..a97d699537
--- /dev/null
+++ b/erpnext/www/lms/templates/includes/highlights.html
@@ -0,0 +1,41 @@
+
+
+
Highlights
+
+
+
+
Curated Courses
+
Learning paths specifically designed for the your use cases, whether you are a user, developer
+ or an
+ implementer
+
+
+
+
+
+
+
Comprehensive Content
+
Content designed to cover all the fundamentals as well as expert tips and techniques to make
+ the most out of ERPNext.
+
+
+
+
+
+
+
Certification
+
ERPNext is open source and infinitely extensible. Customize it, build upon it, add your own
+ apps built with
+
Frappe Framework .
+
+
+
+
+
+
\ No newline at end of file