Compare commits

..

3 Commits

Author SHA1 Message Date
pateljannat
037e946bbe fix: mentors cleanup 2021-08-04 19:07:14 +05:30
pateljannat
a51c8de1eb fix: profile progress and review links 2021-08-04 14:01:52 +05:30
Jannat Patel
53dc517180 Merge pull request #165 from fossunited/quiz-cleanup
refactor: Quiz cleanup
2021-08-03 19:04:37 +05:30
10 changed files with 51 additions and 120 deletions

View File

@@ -1,5 +1,5 @@
{% set color = member.get_palette() %} {% set color = member.get_palette() %}
<a href="/{{member.username}}"> <a class="button-links" href="/{{member.username}}">
<span class="avatar {{ avatar_class }}" title="{{ member.full_name }}"> <span class="avatar {{ avatar_class }}" title="{{ member.full_name }}">
{% if member.user_image %} {% if member.user_image %}
<img class="avatar-frame standard-image" style="object-fit: cover;" src="{{ member.user_image }}" title="{{ member.full_name }}"> <img class="avatar-frame standard-image" style="object-fit: cover;" src="{{ member.user_image }}" title="{{ member.full_name }}">

View File

@@ -37,6 +37,7 @@
"fieldname": "member_type", "fieldname": "member_type",
"fieldtype": "Select", "fieldtype": "Select",
"in_list_view": 1, "in_list_view": 1,
"in_standard_filter": 1,
"label": "Member Type", "label": "Member Type",
"options": "\nStudent\nMentor\nStaff" "options": "\nStudent\nMentor\nStaff"
}, },
@@ -44,7 +45,6 @@
"default": "Member", "default": "Member",
"fieldname": "role", "fieldname": "role",
"fieldtype": "Select", "fieldtype": "Select",
"in_standard_filter": 1,
"label": "Role", "label": "Role",
"options": "\nMember\nAdmin" "options": "\nMember\nAdmin"
}, },
@@ -63,9 +63,10 @@
{ {
"fetch_from": "batch.course", "fetch_from": "batch.course",
"fieldname": "course", "fieldname": "course",
"fieldtype": "Data", "fieldtype": "Link",
"in_list_view": 1, "in_list_view": 1,
"label": "Course" "label": "Course",
"options": "LMS Course"
}, },
{ {
"fieldname": "current_lesson", "fieldname": "current_lesson",
@@ -83,7 +84,7 @@
], ],
"index_web_pages_for_search": 1, "index_web_pages_for_search": 1,
"links": [], "links": [],
"modified": "2021-07-06 20:50:46.885325", "modified": "2021-08-04 17:10:42.708479",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "LMS", "module": "LMS",
"name": "LMS Batch Membership", "name": "LMS Batch Membership",

View File

@@ -74,8 +74,11 @@ class LMSCourse(Document):
mentors = frappe.get_all("LMS Course Mentor Mapping", {"course": self.name}, ["mentor"]) mentors = frappe.get_all("LMS Course Mentor Mapping", {"course": self.name}, ["mentor"])
for mentor in mentors: for mentor in mentors:
member = frappe.get_doc("User", mentor.mentor) member = frappe.get_doc("User", mentor.mentor)
# TODO: change this to count query member.batch_count = frappe.db.count("LMS Batch Membership",
member.batch_count = len(frappe.get_all("LMS Batch Membership", {"member": member.name, "member_type": "Mentor"})) {
"member": member.name,
"member_type": "Mentor"
})
course_mentors.append(member) course_mentors.append(member)
return course_mentors return course_mentors
@@ -238,21 +241,6 @@ class LMSCourse(Document):
membership.batch_title = frappe.db.get_value("LMS Batch", membership.batch, "title") membership.batch_title = frappe.db.get_value("LMS Batch", membership.batch, "title")
return all_memberships return all_memberships
def get_mentors(self, batch=None):
filters = {
"course": self.name,
"member_type": "Mentor"
}
if batch:
filters["batch"] = batch
memberships = frappe.get_all(
"LMS Batch Membership",
filters,
["member"])
member_names = [m['member'] for m in memberships]
return find_all("User", name=["IN", member_names])
def get_students(self, batch=None): def get_students(self, batch=None):
"""Returns (email, full_name, username) of all the students of this batch as a list of dict. """Returns (email, full_name, username) of all the students of this batch as a list of dict.
""" """

View File

@@ -1,30 +0,0 @@
<div class="batch">
<div class="batch-details">
<div class="">Session every {{batch.sessions_on}}</div>
<div>{{frappe.utils.format_time(batch.start_time, "short")}} -
{{frappe.utils.format_time(batch.end_time, "short")}}
</div>
<div>Starting {{frappe.utils.format_date(batch.start_date, "medium")}}</div>
<div class="course-type" style="color: #888; padding: 10px 0px;">mentors</div>
{% for m in course.get_mentors(batch.name) %}
<div>
{{ widgets.Avatar(member=m, avatar_class="avatar-medium" ) }}
<span class="instructor-title">{{m.full_name}}</span>
</div>
{% endfor %}
</div>
{% if can_manage or can_join %}
<div class="cta">
<div class="">
{% if can_manage %}
<a href="/courses/{{ course.name }}/home?batch={{ batch.name }}" class="btn btn-primary manage-batch" data-batch="{{ batch.name | urlencode }}"
data-course="{{ course.name | urlencode }}">Manage</a>
{% elif can_join %}
<button class="join-batch btn btn-secondary" data-batch="{{ batch.name | urlencode }}"
data-course="{{ course.name | urlencode }}">Join this Batch</button>
{% endif %}
</div>
</div>
{% endif %}
</div>

View File

@@ -18,9 +18,11 @@
<div class="review-card-footer"> <div class="review-card-footer">
<div> <div>
{{ widgets.Avatar(member=review.owner_details, avatar_class="avatar-medium") }} {{ widgets.Avatar(member=review.owner_details, avatar_class="avatar-medium") }}
<span class="course-instructor"> <a class="button-links" href="/{{review.owner_details.username}}">
{{ review.owner_details.full_name }} <span class="course-instructor">
</span> {{ review.owner_details.full_name }}
</span>
</a>
</div> </div>
<div class="rating"> <div class="rating">
{% for i in [1, 2, 3, 4, 5] %} {% for i in [1, 2, 3, 4, 5] %}

View File

@@ -1214,7 +1214,19 @@ input[type=checkbox] {
left: 174px; left: 174px;
font-size: 12px; font-size: 12px;
line-height: 165%; line-height: 165%;
width: fit-content; width: 85%;
}
@media (max-width: 1200px) {
.profile-profession {
width: 75%;
}
}
@media (max-width: 767px) {
.profile-profession {
width: 60%;
}
} }
@media (max-width: 500px) { @media (max-width: 500px) {
@@ -1228,6 +1240,7 @@ input[type=checkbox] {
.profile-profession { .profile-profession {
top: 5px; top: 5px;
left: 70px; left: 70px;
width: 75%;
} }
} }

View File

@@ -7,8 +7,8 @@
<div class="questions"> <div class="questions">
{% for question in quiz.questions %} {% for question in quiz.questions %}
<div class="question {% if loop.index == 1 %} active-question {% else %} hide {% endif %}" <div class="question {% if loop.index == 1 %} active-question {% else %} hide {% endif %}"
data-question="{{ question.question }}"data-multi="{{ question.multiple}}" data-qt-index="{{ loop.index }}"> data-question="{{ question.question }}" data-multi="{{ question.multiple}}" data-qt-index="{{ loop.index }}">
<p>{{ question.question }}</p> <p>{{ frappe.utils.md_to_html(question.question) }}</p>
{% if question.multiple %} {% if question.multiple %}
<small class="font-weight-bold">Choose all answers that apply:</small> <small class="font-weight-bold">Choose all answers that apply:</small>

View File

@@ -24,9 +24,6 @@ def get_common_context(context):
if batch: if batch:
context.batch = batch context.batch = batch
context.members = course.get_mentors(membership.batch) + course.get_students(membership.batch)
context.member_count = len(context.members)
context.course.query_parameter = "?batch=" + membership.batch if membership and membership.batch else "" context.course.query_parameter = "?batch=" + membership.batch if membership and membership.batch else ""
context.livecode_url = get_livecode_url() context.livecode_url = get_livecode_url()

View File

@@ -102,24 +102,33 @@
</div> </div>
{{ widgets.MemberCard(member=course.get_instructor(), show_course_count=True, dimension_class="member-card-large") }} {{ widgets.MemberCard(member=course.get_instructor(), show_course_count=True, dimension_class="member-card-large") }}
</div> </div>
{% if course.get_course_progress() %} {% set progress = course.get_course_progress() %}
{% if progress %}
<div class="course-progress-section"> <div class="course-progress-section">
<div class="course-home-headings"> <div class="course-home-headings">
Your Progress Your Progress
</div> </div>
<div class="common-card-style progress-card"> <div class="common-card-style progress-card">
<p class="small-title"> <p class="small-title">
{% if progress != 100 %}
Great work so far! Great work so far!
{% else %}
Excellent Work on completing this course 👏
{% endif %}
</p> </p>
<p class="progress-text"> <p class="progress-text">
{% if progress != 100 %}
Challenge yourself to complete the lessons and grow professionally. Challenge yourself to complete the lessons and grow professionally.
{% else %}
You have reached a new level in your journey to success!
{% endif %}
</p> </p>
<div class="progress-percentage"> <div class="progress-percentage">
{{ frappe.utils.rounded(course.get_course_progress()) }}% {{ frappe.utils.rounded(progress) }}%
</div> </div>
<div class="progress"> <div class="progress">
<div class="progress-bar" role="progressbar" style="width: {{ course.get_course_progress() }}%" <div class="progress-bar" role="progressbar" style="width: {{ progress }}%"
aria-valuenow="{{ course.get_course_progress() }}" aria-valuemin="0" aria-valuemax="100"></div> aria-valuenow="{{ progress }}" aria-valuemin="0" aria-valuemax="100"></div>
</div> </div>
</div> </div>
</div> </div>
@@ -187,55 +196,3 @@
{% endif %} {% endif %}
</div> </div>
{% endmacro %} {% endmacro %}
{% macro BatchSection(course) %}
<div class="row">
<div class="col-lg-8 col-md-12">
{% if course.is_mentor(frappe.session.user) %}
{{ BatchSectionForMentors(course, course.get_batches(mentor=frappe.session.user)) }}
{% else %}
{{ BatchSectionForStudents(course, course.get_upcoming_batches()) }}
{% endif %}
</div>
</div>
{% endmacro %}
{% macro BatchSectionForMentors(course, mentor_batches) %}
<h2>Your Batches</h2>
{% if mentor_batches %}
<div class="row">
{% for batch in mentor_batches %}
<div class="col-lg-4 col-md-6">
{{ widgets.RenderBatch(course=course, batch=batch, can_manage=True) }}
</div>
{% endfor %}
</div>
<a class="add-batch margin-bottom" href="/add-a-new-batch?new=1&course={{course.name}}">Add a new batch</a>
{% else %}
<div class="mentor_message">
<p>
You are a mentor for this course.
</p>
<a class="" href="/add-a-new-batch?new=1&course={{course.name}}">Create your first batch</a>
</div>
{% endif %}
{% endmacro %}
{% macro BatchSectionForStudents(course, upcoming_batches) %}
{% if upcoming_batches %}
<div class="mt-5">
<h3 class="upcoming">Upcoming Batches</h3>
<div class="row">
{% for batch in upcoming_batches %}
<div class="col-lg-4 col-md-6">
{{ widgets.RenderBatch(course=course, batch=batch, can_join=True) }}
</div>
{% endfor %}
</div>
{% else %}
<div class="mt-5 upcoming">There are no Upcoming Batches for this course currently.</div>
{% endif %}
</div>
{% endmacro %}

View File

@@ -35,21 +35,24 @@
{% endif %} {% endif %}
<span class="social-icons"> <span class="social-icons">
{% if member.linkedin %} {% if member.linkedin %}
<a class="linkedin" href="{{ member.linkedin }}"> <a class="linkedin button-links" href="{{ member.linkedin }}">
<img src="/assets/community/images/linkedin.png"> <img src="/assets/community/images/linkedin.png">
</a> </a>
{% endif %} {% endif %}
{% if member.medium %} {% if member.medium %}
<a class="medium" href="{{ member.medium}}"> <a class="medium button-links" href="{{ member.medium}}">
<img src="/assets/community/icons/medium.svg"> <img src="/assets/community/icons/medium.svg">
</a> </a>
{% endif %} {% endif %}
{% if member.github %} {% if member.github %}
<a class="github" href="{{ member.github }}"> <a class="github button-links" href="{{ member.github }}">
<img src="/assets/community/icons/github.svg"> <img src="/assets/community/icons/github.svg">
</a> </a>
{% endif %} {% endif %}
</span> </span>
{% if frappe.session.user == member.email %}
<a class="dark-links pull-right" href="edit-profile?name={{ member.email }}">Edit Profile</a>
{% endif %}
</div> </div>
</div> </div>
</div> </div>