Compare commits

...

20 Commits

Author SHA1 Message Date
pateljannat
709f0c2274 fix: profile profession section width 2021-07-26 11:42:30 +05:30
pateljannat
be47700e7c Merge branch 'main' of https://github.com/frappe/community into upcoming-courses 2021-07-26 11:14:38 +05:30
pateljannat
40842830a4 fix: profile page social icons position 2021-07-26 11:14:32 +05:30
pateljannat
11d070fa0d fix: condition for chapter description 2021-07-23 19:16:36 +05:30
pateljannat
dd2f830a33 fix: upcoming course and doctype cleanup 2021-07-23 19:07:26 +05:30
Jannat Patel
324033e9ee Merge pull request #160 from fossunited/only-show-published-courses
fix: minor issues
2021-07-20 17:35:18 +05:30
pateljannat
86596d0cfe fix: minor issues 2021-07-20 17:19:18 +05:30
Jannat Patel
9323cfd748 Merge pull request #159 from rmehta/fix-global-container
fix(style): max-width on container padding
2021-07-20 13:06:36 +05:30
Jannat Patel
d125b02cec fix: added max width to container padding 2021-07-20 13:05:15 +05:30
Rushabh Mehta
276d64a66a fix(style): don't mess with global container styles 2021-07-20 09:30:58 +05:30
Rushabh Mehta
79eb381a41 Merge pull request #157 from rmehta/remove-old-styles
fix(cleanup): remove old styles
2021-07-19 17:19:54 +05:30
Rushabh Mehta
44f9c0dfd3 fix(minor): remove old styles 2021-07-19 17:14:52 +05:30
Jannat Patel
0ca4cd724e Merge pull request #156 from fossunited/fix-only-show-published-courses
fix: only show the published courses on All Courses page
2021-07-19 17:11:03 +05:30
Anand Chitipothu
8a3e31f021 fix: only show the published courses on All Courses page
Closes #155
2021-07-19 17:03:38 +05:30
Jannat Patel
9be8a1af0b Merge pull request #154 from fossunited/fix-invite-email
Fix invite email
2021-07-19 13:43:36 +05:30
Anand Chitipothu
b9cac20613 fix: the delay in sending signup email 2021-07-19 13:32:18 +05:30
Anand Chitipothu
e6d5e6d37b fix: "Hello None" in the signup email
We were trying to show the full_name, but invite request only knows the email.
2021-07-19 13:31:44 +05:30
Jannat Patel
0abfcac7da Merge pull request #153 from fossunited/improve-email-templates
fix: fixed the email message sent out on signup
2021-07-19 13:23:55 +05:30
Anand Chitipothu
b70e8b9acc fix: fixed the email message sent out on signup
Currently updated keeping Mon.School in mind.
2021-07-19 13:14:13 +05:30
Jannat Patel
3b1e1aa3c3 Merge pull request #152 from fossunited/cleanup
fix: Cleanup
2021-07-19 12:49:22 +05:30
13 changed files with 120 additions and 415 deletions

View File

@@ -9,7 +9,6 @@
"course", "course",
"title", "title",
"description", "description",
"locked",
"index_" "index_"
], ],
"fields": [ "fields": [
@@ -24,12 +23,6 @@
"fieldtype": "Markdown Editor", "fieldtype": "Markdown Editor",
"label": "Description" "label": "Description"
}, },
{
"default": "0",
"fieldname": "locked",
"fieldtype": "Check",
"label": "Locked"
},
{ {
"fieldname": "course", "fieldname": "course",
"fieldtype": "Link", "fieldtype": "Link",
@@ -52,7 +45,7 @@
"link_fieldname": "chapter" "link_fieldname": "chapter"
} }
], ],
"modified": "2021-05-13 21:05:20.531890", "modified": "2021-07-23 19:03:57.946831",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "LMS", "module": "LMS",
"name": "Chapter", "name": "Chapter",

View File

@@ -30,10 +30,13 @@ class InviteRequest(Document):
return user return user
def send_email(self): def send_email(self):
subject = _("Your request has been approved.") site_name = "Mon.School"
subject = _("Welcome to {0}!").format(site_name)
args = { args = {
"full_name": self.full_name, "full_name": self.full_name,
"signup_form_link": "/new-sign-up?invite_code={0}".format(self.name), "signup_form_link": "/new-sign-up?invite_code={0}".format(self.name),
"site_name": site_name,
"site_url": frappe.utils.get_url() "site_url": frappe.utils.get_url()
} }
frappe.sendmail( frappe.sendmail(
@@ -42,7 +45,8 @@ class InviteRequest(Document):
subject=subject, subject=subject,
header=[subject, "green"], header=[subject, "green"],
template = "lms_invite_request_approved", template = "lms_invite_request_approved",
args=args) args=args,
now=True)
@frappe.whitelist(allow_guest=True) @frappe.whitelist(allow_guest=True)
def create_invite_request(invite_email): def create_invite_request(invite_email):

View File

@@ -21,14 +21,14 @@
"engine": "InnoDB", "engine": "InnoDB",
"field_order": [ "field_order": [
"title", "title",
"short_code",
"video_link", "video_link",
"column_break_3",
"is_published",
"disable_self_learning",
"image", "image",
"section_break_5", "column_break_3",
"tags", "tags",
"is_published",
"upcoming",
"disable_self_learning",
"section_break_5",
"short_introduction", "short_introduction",
"description" "description"
], ],
@@ -53,11 +53,6 @@
"fieldtype": "Check", "fieldtype": "Check",
"label": "Published" "label": "Published"
}, },
{
"fieldname": "short_code",
"fieldtype": "Data",
"label": "Short Code"
},
{ {
"fieldname": "column_break_3", "fieldname": "column_break_3",
"fieldtype": "Column Break" "fieldtype": "Column Break"
@@ -92,6 +87,12 @@
"fieldname": "tags", "fieldname": "tags",
"fieldtype": "Data", "fieldtype": "Data",
"label": "Tags" "label": "Tags"
},
{
"default": "0",
"fieldname": "upcoming",
"fieldtype": "Check",
"label": "Is an Upcoming Course"
} }
], ],
"index_web_pages_for_search": 1, "index_web_pages_for_search": 1,
@@ -118,7 +119,7 @@
"link_fieldname": "course" "link_fieldname": "course"
} }
], ],
"modified": "2021-07-09 15:05:05.372430", "modified": "2021-07-23 19:01:29.765570",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "LMS", "module": "LMS",
"name": "LMS Course", "name": "LMS Course",
@@ -141,6 +142,5 @@
"sort_field": "creation", "sort_field": "creation",
"sort_order": "DESC", "sort_order": "DESC",
"title_field": "title", "title_field": "title",
"track_changes": 1, "track_changes": 1
"track_views": 1
} }

View File

@@ -27,12 +27,13 @@
"fieldname": "lesson", "fieldname": "lesson",
"fieldtype": "Link", "fieldtype": "Link",
"label": "Lesson", "label": "Lesson",
"options": "Lesson" "options": "Lesson",
"read_only": 1
} }
], ],
"index_web_pages_for_search": 1, "index_web_pages_for_search": 1,
"links": [], "links": [],
"modified": "2021-06-23 17:58:57.642873", "modified": "2021-07-23 19:06:12.551633",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "LMS", "module": "LMS",
"name": "LMS Quiz", "name": "LMS Quiz",

View File

@@ -8,9 +8,11 @@
<div class="chapter-content collapse navbar-collapse" id="{{ chapter.get_slugified_chapter_title() }}"> <div class="chapter-content collapse navbar-collapse" id="{{ chapter.get_slugified_chapter_title() }}">
{% if chapter.description %}
<div class="chapter-description muted-text"> <div class="chapter-description muted-text">
{{ chapter.description }} {{ chapter.description }}
</div> </div>
{% endif %}
<div class="lessons"> <div class="lessons">

View File

@@ -53,15 +53,19 @@
{% set query_parameter = "?batch=" + membership.batch if membership and membership.batch else "" %} {% set query_parameter = "?batch=" + membership.batch if membership and membership.batch else "" %}
{% if membership %} {% if course.upcoming %}
<div class="view-course-link is-default">
Upcoming Course <img class="ml-3" src="/assets/community/icons/black-arrow.svg" />
</div>
<a class="stretched-link" href="/courses/{{ course.name }}"></a>
{% elif membership %}
<div class="view-course-link is-primary"> <div class="view-course-link is-primary">
Continue Course <img class="ml-3" src="/assets/community/icons/white-arrow.svg" /> Continue Course <img class="ml-3" src="/assets/community/icons/white-arrow.svg" />
</div> </div>
<a class="stretched-link" href="{{ course.get_learn_url(lesson_index) }}{{ query_parameter }}"></a> <a class="stretched-link" href="{{ course.get_learn_url(lesson_index) }}{{ query_parameter }}"></a>
{% else %} {% else %}
<div class="view-course-link"> <div class="view-course-link">
View Course <img class="ml-3" src="/assets/community/icons/black-arrow.svg" /> View Course <img class="ml-3" src="/assets/community/icons/black-arrow.svg" />
</div> </div>

View File

@@ -10,7 +10,8 @@ class CustomUser(User):
""" """
return frappe.get_all( return frappe.get_all(
'LMS Course', { 'LMS Course', {
'owner': self.name 'owner': self.name,
'is_published': True
}) })
def get_palette(self): def get_palette(self):
@@ -62,9 +63,16 @@ class CustomUser(User):
def get_mentored_courses(self): def get_mentored_courses(self):
""" Returns all courses mentored by this user """ """ Returns all courses mentored by this user """
return frappe.get_all("LMS Course Mentor Mapping", mentored_courses = []
mapping = frappe.get_all("LMS Course Mentor Mapping",
{ {
"mentor": self.name "mentor": self.name,
}, },
["name", "course"] ["name", "course"]
) )
for map in mapping:
if frappe.db.get_value("LMS Course", map.course, "is_published"):
mentored_courses.append(map)
return mentored_courses

View File

@@ -1,4 +1,3 @@
@import "./style.css"; @import "./style.css";
@import "./vars.css"; @import "./vars.css";
@import "./style.less";

View File

@@ -390,7 +390,7 @@ input[type=checkbox] {
letter-spacing: -0.0175em letter-spacing: -0.0175em
} }
@media (min-width: 576px) { @media (min-width: 576px) and (max-width: 992px) {
.container { .container {
padding-left: 1rem; padding-left: 1rem;
padding-right: 1rem; padding-right: 1rem;
@@ -653,9 +653,14 @@ div.custom-checkbox>label>input:checked+img {
color: #FFFFFF; color: #FFFFFF;
} }
.is-default {
background-color: white;
border: 1px solid #C8CFD5;
box-sizing: border-box;
}
.course-home-outline { .course-home-outline {
margin-top: 3rem; margin-top: 3rem;
flex: 1;
} }
.small-title { .small-title {
@@ -673,6 +678,7 @@ div.custom-checkbox>label>input:checked+img {
.chapter-description { .chapter-description {
height: fit-content; height: fit-content;
padding-left: 1rem; padding-left: 1rem;
padding-right: 1rem;
} }
.chapter-icon { .chapter-icon {
@@ -680,26 +686,39 @@ div.custom-checkbox>label>input:checked+img {
} }
.course-outline-instructor-parent { .course-outline-instructor-parent {
display: flex; display: grid;
justify-content: space-between; grid-gap: 2rem;
grid-template-columns: 4fr 1fr;
}
@media (max-width: 768px) {
.course-outline-instructor-parent {
grid-gap: 1rem;
}
} }
@media (max-width: 600px) { @media (max-width: 600px) {
.course-outline-instructor-parent { .course-outline-instructor-parent {
flex-direction: column;
padding: 0px 24px 0px; padding: 0px 24px 0px;
grid-template-columns: none;
} }
} }
.profile-parent-section { .profile-parent-section {
display: flex; display: grid;
justify-content: space-between; grid-gap: 2rem;
grid-template-columns: 4fr 1fr;
}
@media (max-width: 768px) {
.profile-parent-section {
grid-gap: 1rem;
}
} }
@media (max-width: 600px) { @media (max-width: 600px) {
.profile-parent-section { .profile-parent-section {
flex-direction: column; grid-template-columns: none;
} }
} }
@@ -731,18 +750,6 @@ div.custom-checkbox>label>input:checked+img {
margin-top: 3rem; margin-top: 3rem;
} }
@media (min-width: 1024px) {
.course-overview-section {
margin-left: 2rem;
}
}
@media (min-width: 600px) {
.course-overview-section {
margin-left: 1rem;
}
}
.lesson-info { .lesson-info {
font-size: 16px; font-size: 16px;
line-height: 250%; line-height: 250%;
@@ -900,14 +907,18 @@ div.custom-checkbox>label>input:checked+img {
} }
.description-card { .description-card {
padding: 24px; padding: 1.5rem;
flex-direction: column; flex-direction: column;
} }
.overview-card { .overview-card {
padding: 24px 26px 24px; padding: 1.5rem;
width: 256px; width: 256px;
flex-direction: column; flex-direction: column;
display: grid;
-moz-column-gap: 1rem;
column-gap: 1rem;
row-gap: 1rem;
} }
@media (max-width: 768px) { @media (max-width: 768px) {
@@ -940,10 +951,6 @@ div.custom-checkbox>label>input:checked+img {
} }
} }
.overtime-item {
margin: 16px 0px 16px;
}
.view-all-mentors { .view-all-mentors {
width: 100%; width: 100%;
display: flex; display: flex;
@@ -1012,8 +1019,7 @@ div.custom-checkbox>label>input:checked+img {
} }
.course-details-outline { .course-details-outline {
margin-top: 16px; margin-top: 1rem;
flex: 1;
} }
.lesson-content-card { .lesson-content-card {
@@ -1022,14 +1028,15 @@ div.custom-checkbox>label>input:checked+img {
} }
.course-content-parent { .course-content-parent {
display: flex; display: grid;
justify-content: space-between; grid-gap: 2rem;
grid-template-columns: 2fr minmax(600px, 5fr);
} }
@media (max-width: 768px) { @media (max-width: 1024px) {
.course-content-parent { .course-content-parent {
display: flex;
flex-direction: column-reverse; flex-direction: column-reverse;
justify-content: center;
} }
} }
@@ -1044,8 +1051,7 @@ div.custom-checkbox>label>input:checked+img {
} }
.lesson-pagination-parent { .lesson-pagination-parent {
margin: 1rem 0px 0px 2rem; margin-top: 1rem;
flex: 3;
} }
@media (max-width: 768px) { @media (max-width: 768px) {
@@ -1129,7 +1135,7 @@ div.custom-checkbox>label>input:checked+img {
line-height: 156%; line-height: 156%;
letter-spacing: -0.0175em; letter-spacing: -0.0175em;
text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.64); text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.64);
padding: 20px; padding: 1.5rem;
} }
@media (max-width: 375px) { @media (max-width: 375px) {
@@ -1153,7 +1159,7 @@ div.custom-checkbox>label>input:checked+img {
height: fit-content; height: fit-content;
box-shadow: 0px 1px 1px rgb(0 0 0 / 16%); box-shadow: 0px 1px 1px rgb(0 0 0 / 16%);
border-radius: 4px; border-radius: 4px;
margin-top: 25px; margin-top: 2rem;
} }
@media (max-width: 375px) { @media (max-width: 375px) {
@@ -1169,6 +1175,7 @@ div.custom-checkbox>label>input:checked+img {
left: 174px; left: 174px;
font-size: 12px; font-size: 12px;
line-height: 165%; line-height: 165%;
width: fit-content;
} }
@media (max-width: 500px) { @media (max-width: 500px) {
@@ -1186,7 +1193,6 @@ div.custom-checkbox>label>input:checked+img {
} }
.social-icons { .social-icons {
float: right;
margin: 16px; margin: 16px;
} }
@@ -1216,12 +1222,6 @@ div.custom-checkbox>label>input:checked+img {
flex-direction: column; flex-direction: column;
} }
@media (min-width: 600px) {
.course-creator-progress-parent {
margin-left: 2rem;
}
}
.course-creator-section { .course-creator-section {
margin-top: 3rem; margin-top: 3rem;
} }

View File

@@ -1,307 +0,0 @@
h2 {
margin: 20px 0px;
color: black;
}
.teaser {
background: white;
border-radius: 9px;
border: 1px solid #C4C4C4;
.teaser-body {
padding: 20px;
box-shadow: 0px 5px 10px rgb(0 0 0 / 10%)
}
.teaser-footer {
padding: 20px;
}
}
.sketch-teaser {
.teaser();
width: 220px;
margin-bottom: 30px;
margin-top: 30px;
svg {
width: 200px;
height: 200px;
}
.sketch-image {
padding: 10px;
}
.sketch-footer {
border-top: 1px solid#C4C4C4;
padding: 10px;
background: #F6F6F6;
border-radius: 0px 0px 10px 10px;
}
}
.course-teaser {
.teaser();
color: #444;
margin-bottom: 20px;
margin-top: 20px;
h3, h4 {
color: black;
font-weight: bold;
}
.course-body, .course-footer {
padding: 20px;
}
.course-body {
min-height: 8em;
}
.course-footer {
border-top: 1px solid #ddd;
}
a, a:hover {
color: inherit;
text-decoration: none;
}
}
.anchor_style {
color: inherit;
}
.anchor_style:hover {
text-decoration: none
}
section {
padding: 60px 0px;
}
section h2 {
margin-bottom: 40px;
font-size: 48px;
line-height: 58px;
font-weight: bold;
}
section.lightgray {
background: #F6F6F6;
}
#hero .jumbotron {
background: inherit;
}
.chapter-teaser {
.teaser();
color: #444;
margin: 20px 0px;
h3, h4 {
color: black;
font-weight: bold;
}
}
.field-width {
width: 40%;
display: inline-block;
}
.footer-grouped-links {
display: none;
}
.footer-info {
border-top: 0px;
margin-top: 0px;
.footer-col-right {
padding-top: 1.8rem;
}
}
.web-footer {
border-top: 1px solid #E2E6E9;
padding: 0px;
padding: 2rem 0px;
margin-top: 2rem;
}
.course-type {
text-transform: uppercase;
font-size: 1.0em;
font-weight: bold;
color: var(--tag-color);
}
.instructor-title {
color: black;
}
.instructor-subtitle {
font-size: 0.8em;
color: var(--text-color);
}
// .mentors-wrapper {
// .gray-section();
// }
.chapter-number {
background: var(--text-color);
color: white;
height: 24px;
min-width: 24px;
margin-right: 5px;
}
.sidebar {
background: var(--sidebar-bg);
border: 1px solid var(--sidebar-border);
margin: 20px 0px;
border-radius: 10px;
padding: 1px 20px 20px 20px;
}
.sidebar h3 {
margin-top: 20px;
color: black;
}
.sidebar-batch {
background: var(--sidebar-bg);
color: var(--text-color);
position: fixed;
left: 0;
height: 100%;
}
.sidebar-batch a {
padding: 16px 8px 8px 16px;
display: block;
}
.sidebar .notice {
margin-top: 10px;
padding: 10px;
border-radius: 10px;
border: 1px dashed var(--text-color);
}
.sidebar .notice a {
color: inherit;
text-decoration: underline;
}
// LiveCode editor
.livecode-editor {
.CodeMirror {
border: 1px solid #ddd;
background: #ffe;
height: auto;
}
.CodeMirror-scroll {
max-height: 310px;
min-height: 310px;
}
.controls {
padding: 10px 0px;
}
canvas {
border: 5px solid #ddd;
position: relative;
z-index: 0;
}
.output {
position: absolute;
z-index: 1;
width: 300px;
left: 0px;
top: 0px;
background-color: rgba(255, 255, 255, 0);
max-height: 300px;
white-space: pre-wrap;
word-wrap: break-word;
margin: 0px;
margin-left: 20px;
padding: 4px;
color: #888;
}
@media (max-width: 768px) {
.canvas-wrapper {
padding-top: 10px;
}
.code-wrapper {
min-height: 50px;
}
.CodeMirror {
min-height: 50px;
}
}
}
.sketch-header {
input#sketch-title {
font-weight: bold;
}
}
.lesson-teaser {
line-height: 40px;
}
#hero h1 {
color: black !important;
}
.lesson-page {
margin: 20px 0px;
}
.exercise-image svg {
width: 200px;
height: 200px;
border: 1px solid #ddd;
margin-bottom: 20px;
}
.svg-200 svg {
width: 200px;
height: 200px;
}
.livecode-editor-small .livecode-editor {
.CodeMirror-scroll {
max-height: 160px;
min-height: 160px;
}
canvas {
width: 150px;
height: 150px;
}
}
.mentor-dashboard {
margin-top: 20px;
.submission {
margin: 40px 0px 0px 20px;
}
}
.no-preview-message {
width: fit-content;
margin: 50px 0px 50px;
color: black;
}

View File

@@ -1,9 +1,8 @@
<div> <div>
{% set site_link = "<a href='" + site_url + "'>" + site_url + "</a>" %} {% set site_link = "<a href='" + site_url + "'>" + site_name + "</a>" %}
<p>{{_("Dear Community Member,")}}</p> <p>{{_("Hi,")}}</p>
<p>{{_("Your Invite Request to be a part of {0} has <p>{{_("Welcome to {0}!").format(site_name)}}</p>
been approved.").format(site_link)}}</p> <p>Click on the link below to complete your sign up and set a new password</p>
<p>Click on the link below to complete your Sign up and set a new password</p>
<p style="margin: 15px 0px;"> <p style="margin: 15px 0px;">
<a href="{{ signup_form_link }}" rel="nofollow" class="btn btn-primary">{{ _("Complete Sign Up") }}</a> <a href="{{ signup_form_link }}" rel="nofollow" class="btn btn-primary">{{ _("Complete Sign Up") }}</a>
</p> </p>
@@ -14,5 +13,5 @@
</p> </p>
<br> <br>
<p>Thanks and Regards,</p> <p>Thanks and Regards,</p>
<p>Your Community.</p> <p>{{site_name}}</p>
</div> </div>

View File

@@ -5,7 +5,7 @@ def get_context(context):
context.courses = get_courses() context.courses = get_courses()
def get_courses(): def get_courses():
course_names = frappe.get_all("LMS Course", pluck="name") course_names = frappe.get_all("LMS Course", filters={"is_published": True}, pluck="name")
courses = [] courses = []
for course in course_names: for course in course_names:
courses.append(frappe.get_doc("LMS Course", course)) courses.append(frappe.get_doc("LMS Course", course))

View File

@@ -20,34 +20,36 @@
{% macro ProfileBanner(member) %} {% macro ProfileBanner(member) %}
<div class=""> <div class="">
<div class="profile-banner" style="background-image: url(/assets/community/images/profile-banner.png)"> <div class="profile-banner" style="background-image: url(/assets/community/images/profile-banner.png)">
<div class="profile-avatar"> <div class="profile-avatar">
{{ widgets.Avatar(member=member, avatar_class="avatar-xl") }} {{ widgets.Avatar(member=member, avatar_class="avatar-xl") }}
<div class="profile-name"> {{ member.full_name }} </div> <div class="profile-name"> {{ member.full_name }} </div>
{% if member.get_authored_courses() | length %} {% if member.get_authored_courses() | length %}
<div class="creator-badge"> Creator </div> <div class="creator-badge"> Creator </div>
{% endif %} {% endif %}
</div> </div>
</div> </div>
<div class="profile-info"> <div class="profile-info">
{% if member.profession %} <div class="profile-profession">
<span class="profile-profession"> {{ member.profession }} </span> {% if member.profession %}
{% endif %} <span class=""> {{ member.profession }} </span>
<div class="social-icons">
{% if member.linkedin %}
<a class="linkedin" href="{{ member.linkedin }}">
<img src="/assets/community/images/linkedin.png">
</a>
{% endif %}
{% if member.medium %}
<a class="medium" href="{{ member.medium}}">
<img src="/assets/community/icons/medium.svg">
</a>
{% endif %}
{% if member.github %}
<a class="github" href="{{ member.github }}">
<img src="/assets/community/icons/github.svg">
</a>
{% endif %} {% endif %}
<span class="social-icons">
{% if member.linkedin %}
<a class="linkedin" href="{{ member.linkedin }}">
<img src="/assets/community/images/linkedin.png">
</a>
{% endif %}
{% if member.medium %}
<a class="medium" href="{{ member.medium}}">
<img src="/assets/community/icons/medium.svg">
</a>
{% endif %}
{% if member.github %}
<a class="github" href="{{ member.github }}">
<img src="/assets/community/icons/github.svg">
</a>
{% endif %}
</span>
</div> </div>
</div> </div>
</div> </div>