feat: new lesson redirect

This commit is contained in:
Jannat Patel
2022-08-08 11:47:23 +05:30
parent 0723f3091c
commit 65edd2ce22
8 changed files with 52 additions and 13 deletions

View File

@@ -135,8 +135,6 @@ website_route_rules = [
{"from_route": "/sketches/<sketch>", "to_route": "sketches/sketch"},
{"from_route": "/courses/<course>", "to_route": "courses/course"},
{"from_route": "/courses/<course>/<certificate>", "to_route": "courses/certificate"},
{"from_route": "/hackathons/<hackathon>", "to_route": "hackathons/hackathon"},
{"from_route": "/hackathons/<hackathon>/<project>", "to_route": "hackathons/project"},
{"from_route": "/courses/<course>/learn", "to_route": "batch/learn"},
{"from_route": "/courses/<course>/learn/<int:chapter>.<int:lesson>", "to_route": "batch/learn"},
{"from_route": "/courses/<course>/progress", "to_route": "batch/progress"},

View File

@@ -35,7 +35,7 @@
<div class="mt-2 mb-8">
<button class="btn btn-sm btn-secondary btn-save-chapter"
data-index="{{ loop.index }}" data-chapter="{{ chapter.name }}"> {{ _('Save') }} </button>
<button class="btn btn-sm btn-secondary btn-lesson ml-4"> {{ _("New Lesson") }} </button>
<a class="btn btn-sm btn-secondary btn-lesson ml-4" href="/courses/{{ course.name }}/learn/0.0"> {{ _("New Lesson") }} </a>
</div>
{% endif %}

View File

@@ -29,3 +29,4 @@ execute:frappe.delete_doc("Workspace", "School", ignore_missing=True, force=True
lms.patches.v0_0.move_certification_to_certificate
lms.patches.v0_0.quiz_submission_member
lms.patches.v0_0.delete_old_module_docs #08-07-2022
lms.patches.v0_0.delete_course_web_forms

View File

@@ -0,0 +1,6 @@
import frappe
def execute():
frappe.delete_doc("Web Form", "lesson", ignore_missing=True, force=True)
frappe.delete_doc("Web Form", "chapter", ignore_missing=True, force=True)
frappe.delete_doc("Web Form", "course", ignore_missing=True, force=True)

View File

@@ -1,6 +1,16 @@
{% extends "templates/base.html" %}
{% from "www/macros/livecode.html" import LiveCodeEditorJS, LiveCodeEditor with context %}
{% block title %} {{ lesson.title }} - {{ course.title }} {% endblock %}
{% block title %}
{% if lesson.title %}
{{ lesson.title }} - {{ course.title }}
{% else %}
{{ _("New Lesson") }}
{% endif %}
{% endblock %}
{% block head_include %}
{% include "public/icons/symbol-defs.svg" %}
@@ -12,6 +22,7 @@
{% endblock %}
{% block content %}
<div class="common-page-style lesson-page">
<div class="container course-details-page">
@@ -29,25 +40,31 @@
</div>
{% endblock %}
<!-- BreadCrumb -->
{% macro BreadCrumb(course, lesson) %}
<div class="breadcrumb">
<a class="dark-links" href="/courses">{{ _("All Courses") }}</a>
<img class="ml-1 mr-1" src="/assets/lms/icons/chevron-right.svg">
<a class="dark-links" href="/courses/{{ course.name }}">{{ course.title }}</a>
<img class="ml-1 mr-1" src="/assets/lms/icons/chevron-right.svg">
<span class="breadcrumb-destination">{{ lesson.title }}</span>
<span class="breadcrumb-destination">{{ lesson.title if lesson.title else _("New Lesson") }}</span>
</div>
{% endmacro %}
<!-- Lesson Details -->
{% macro LessonContent(lesson) %}
{% set instructors = get_instructors(course.name) %}
{% set is_instructor = is_instructor(course.name) %}
<div class="common-card-style lesson-content">
<div class="lesson-title">
<div class="course-home-headings title mb-0
{% if membership %} is-member {% endif %}
{% if membership or is_instructor %} eligible-for-submission {% endif %}" data-lesson="{{ lesson.name }}"
data-course="{{ course.name }}">{{ lesson.title }}</div>
<div class="course-home-headings title mb-0 {% if membership %} is-member {% endif %}
{% if membership or is_instructor %} eligible-for-submission {% endif %}"
{% if lesson.edit_mode %} data-placeholder="{{ _('Title') }}" contenteditable="true" {% endif %}
data-lesson="{{ lesson.name }}" data-course="{{ course.name }}"
> {% if lesson.title %} {{ lesson.title }} {% endif %} </div>
<span class="lesson-progress {{hide if get_progress(course.name, lesson.name) != 'Complete' else ''}}">{{ _("COMPLETED") }}</span>
{% if is_instructor %}

View File

@@ -3,7 +3,6 @@ import frappe
from lms.www.utils import get_common_context, redirect_to_lesson
from lms.lms.utils import get_lesson_url
from frappe.utils import cstr, flt
from lms.www import batch
def get_context(context):
get_common_context(context)
@@ -11,13 +10,22 @@ def get_context(context):
chapter_index = frappe.form_dict.get("chapter")
lesson_index = frappe.form_dict.get("lesson")
lesson_number = f"{chapter_index}.{lesson_index}"
if not chapter_index or not lesson_index:
print(chapter_index, lesson_index, type(chapter_index), type(lesson_index))
if (not chapter_index and chapter_index != 0) or (not lesson_index and lesson_index != 0):
if context.batch:
index_ = get_lesson_index(context.course, context.batch, frappe.session.user) or "1.1"
else:
index_ = "1.1"
redirect_to_lesson(context.course, index_)
if chapter_index == 0 and lesson_index == 0:
context.lesson = frappe._dict()
context.lesson.edit_mode = True
else:
set_lesson_context(context, lesson_number)
def set_lesson_context(context, lesson_number):
context.lesson = get_current_lesson_details(lesson_number, context)
neighbours = get_neighbours(lesson_number, context.lessons)
context.next_url = get_url(neighbours["next"], context.course)
@@ -38,19 +46,23 @@ def get_context(context):
"is_member": context.membership is not None
}
def get_current_lesson_details(lesson_number, context):
details_list = list(filter(lambda x: cstr(x.number) == lesson_number, context.lessons))
if not len(details_list):
redirect_to_lesson(context.course)
return details_list[0]
def get_url(lesson_number, course):
return get_lesson_url(course.name, lesson_number) and get_lesson_url(course.name, lesson_number) + course.query_parameter
def get_lesson_index(course, batch, user):
lesson = batch.get_current_lesson(user)
return lesson and course.get_lesson_index(lesson)
def get_page_extensions(context):
default_value = ["lms.plugins.PageExtension"]
classnames = frappe.get_hooks("lms_lesson_page_extensions") or default_value
@@ -59,6 +71,7 @@ def get_page_extensions(context):
e.set_context(context)
return extensions
def get_neighbours(current, lessons):
current = flt(current)
numbers = sorted(lesson.number for lesson in lessons)

View File

@@ -72,8 +72,8 @@
{% endif %}
</div>
<div {% if course.edit_mode %} data-placeholder="{{ _('Title') }}" contenteditable="true" {% endif %}
class="course-card-wide-title" id="title" data-course="{{ course.name | urlencode }}">{% if course.title %} {{ course.title }} {% endif %}</div>
<div {% if course.edit_mode %} data-placeholder="{{ _('Title') }}" contenteditable="true" {% endif %} id="title"
class="course-card-wide-title" data-course="{{ course.name | urlencode }}">{% if course.title %} {{ course.title }} {% endif %}</div>
<div {% if course.edit_mode %} contenteditable="true" data-placeholder="{{ _('Short Introduction') }}"
{% endif %} id="intro" >{% if course.short_introduction %} {{ course.short_introduction }} {% endif %}</div>

View File

@@ -17,6 +17,7 @@ def get_context(context):
else:
set_course_context(context, course_name)
def set_course_context(context, course_name):
course = frappe.db.get_value("LMS Course", course_name,
["name", "title", "image", "short_introduction", "description", "published", "upcoming", "disable_self_learning",
@@ -61,15 +62,18 @@ def set_course_context(context, course_name):
"keywords": course.title
}
def get_user_interest(course):
return frappe.db.count("LMS Course Interest", {
"course": course,
"user": frappe.session.user
})
def show_start_learing_cta(course, membership, restriction):
return not course.disable_self_learning and not membership and not course.upcoming and not restriction.get("restrict") and not is_instructor(course.name)
def redirect_to_courses_list():
frappe.local.flags.redirect_location = "/courses"
raise frappe.Redirect