feat: course enrollment and my courses page

This commit is contained in:
pateljannat
2021-03-03 17:44:46 +05:30
parent b4eb9580af
commit acea59767d
17 changed files with 259 additions and 79 deletions

View File

@@ -2,10 +2,10 @@
{% block title %}{{ 'Courses' }}{% endblock %}
{% from "www/courses/macros/card.html" import course_card, topic_card %}
{% block head_include %}
<meta name="description" content="Courses" />
<meta name="keywords" content="Courses {{course.title}}" />
<style>
</style>
<meta name="description" content="Courses" />
<meta name="keywords" content="Courses {{course.title}}" />
<style>
</style>
{% endblock %}
{% block content %}
@@ -13,22 +13,32 @@
<div class='container pb-5'>
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item" aria-current="page"><a href="/courses">Courses</a></li>
<li class="breadcrumb-item" aria-current="page"><a href="/courses">Courses</a></li>
</ol>
</nav>
<h1>{{ course.title }}</h1>
<div>{{ course.description }}</div>
{% if course_enrolled %}
<p>
<div class="badge badge-info">Enrolled</div>
</p>
{% endif %}
<div>
{% if not course_enrolled %}
<button class="btn btn-dark btn-enroll float-right" data-course={{course.name}}>Enroll</button>
{% endif %}
<h1>{{ course.title }}</h1>
</div>
<div>{{ frappe.utils.md_to_html(course.description) }}</div>
</div>
<div class='container'>
<div class="list-group">
{% for topic in course.topics %}
{% for topic in course.topics %}
<div class="list-group-item">
<h5><a href="/courses/topic?course={{course.name}}&topic={{topic.name}}">{{topic.title}}</a></h5>
<div>{{topic.description}}</div>
</div>
{% endfor %}
{% endfor %}
</div>
</div>
</section>

View File

@@ -0,0 +1,17 @@
/* frappe.ready(() => {
var url_params = new URLSearchParams(window.location.search);
frappe.call('community.www.courses.course.has_enrolled', { course: url_params.get("course") }, (data) => {
if (data.message) {
$(".btn-enroll").addClass("hide");
$(".enrollment-details").removeClass("hide");
}
})
}) */
$('.btn-enroll').on('click', (e) => {
frappe.call('community.www.courses.course.enroll', { course: $(e.target).attr("data-course") }, (data) => {
$(".btn-enroll").addClass("hide");
$(".enrollment-details").removeClass("hide");
});
});

View File

@@ -1,23 +1,35 @@
import frappe
def get_context(context):
context.no_cache = 1
try:
course_id = frappe.form_dict['course']
except KeyError:
frappe.local.flags.redirect_location = '/courses'
raise frappe.Redirect
context.course = get_course(course_id)
context.no_cache = 1
try:
course_id = frappe.form_dict['course']
except KeyError:
frappe.local.flags.redirect_location = '/courses'
raise frappe.Redirect
context.course = get_course(course_id)
context.course_enrolled = has_enrolled(course_id)
def get_course(name):
course = frappe.db.get_value('Community Course', name,
['name', 'title', 'description'], as_dict=1)
course['topics'] = frappe.db.get_all('Community Course Topic',
filters={
'course': name
},
fields=['name', 'title', 'description'],
order_by='creation'
)
print(course)
return course
course = frappe.db.get_value('Community Course', name,
['name', 'title', 'description'], as_dict=1)
course['topics'] = frappe.db.get_all('Community Course Topic',
filters={
'course': name
},
fields=['name', 'title', 'description'],
order_by='creation'
)
return course
def has_enrolled(course):
return frappe.db.get_value("Community Course Enrollment", {"course": course, "owner": frappe.session.user})
@frappe.whitelist()
def enroll(course):
return frappe.get_doc({
"doctype": "Community Course Enrollment",
"course": course
}).save()

View File

@@ -2,8 +2,8 @@
<div class="card mb-5 w-100">
<div class="card-body">
<h5 class="card-title"><a href="/courses/course?course={{course.name}}">{{course.title}}</a></h5>
<p class="card-text">{{course.description}}</p>
<a href="/courses/course?id={{course.name}}" class="card-link">See more &rarr;</a>
<p class="card-text">{{ frappe.utils.md_to_html(course.description[:250]) }}</p>
<a href="/courses/course?course={{course.name}}" class="card-link">See more &rarr;</a>
</div>
</div>
{% endmacro %}