fix: restrict profile and mark as complete
This commit is contained in:
@@ -172,6 +172,7 @@ jinja = {
|
||||
#]
|
||||
|
||||
profile_mandatory_fields = [
|
||||
"first_name",
|
||||
"last_name",
|
||||
"user_image",
|
||||
"bio",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"actions": [],
|
||||
"allow_rename": 1,
|
||||
"autoname": "hash",
|
||||
"creation": "2021-12-07 12:20:37.143096",
|
||||
"doctype": "DocType",
|
||||
"editable_grid": 1,
|
||||
@@ -61,10 +62,11 @@
|
||||
"index_web_pages_for_search": 1,
|
||||
"istable": 1,
|
||||
"links": [],
|
||||
"modified": "2021-12-14 11:42:24.844113",
|
||||
"modified": "2021-12-21 10:05:43.377876",
|
||||
"modified_by": "Administrator",
|
||||
"module": "LMS",
|
||||
"name": "Certification",
|
||||
"naming_rule": "Random",
|
||||
"owner": "Administrator",
|
||||
"permissions": [],
|
||||
"sort_field": "modified",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"actions": [],
|
||||
"allow_rename": 1,
|
||||
"autoname": "hash",
|
||||
"creation": "2021-12-07 12:15:46.078717",
|
||||
"doctype": "DocType",
|
||||
"editable_grid": 1,
|
||||
@@ -74,10 +75,11 @@
|
||||
"index_web_pages_for_search": 1,
|
||||
"istable": 1,
|
||||
"links": [],
|
||||
"modified": "2021-12-10 12:12:58.827429",
|
||||
"modified": "2021-12-21 09:58:42.343823",
|
||||
"modified_by": "Administrator",
|
||||
"module": "LMS",
|
||||
"name": "Education Detail",
|
||||
"naming_rule": "Random",
|
||||
"owner": "Administrator",
|
||||
"permissions": [],
|
||||
"sort_field": "modified",
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
],
|
||||
"index_web_pages_for_search": 1,
|
||||
"links": [],
|
||||
"modified": "2021-12-14 14:02:46.474260",
|
||||
"modified": "2021-12-21 09:34:35.018280",
|
||||
"modified_by": "Administrator",
|
||||
"module": "LMS",
|
||||
"name": "Function",
|
||||
@@ -37,6 +37,16 @@
|
||||
"role": "System Manager",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "All",
|
||||
"select": 1,
|
||||
"share": 1
|
||||
}
|
||||
],
|
||||
"sort_field": "modified",
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
],
|
||||
"index_web_pages_for_search": 1,
|
||||
"links": [],
|
||||
"modified": "2021-12-14 14:38:10.405473",
|
||||
"modified": "2021-12-21 09:35:20.443192",
|
||||
"modified_by": "Administrator",
|
||||
"module": "LMS",
|
||||
"name": "Industry",
|
||||
@@ -37,6 +37,16 @@
|
||||
"role": "System Manager",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "All",
|
||||
"select": 1,
|
||||
"share": 1
|
||||
}
|
||||
],
|
||||
"sort_field": "modified",
|
||||
|
||||
@@ -14,7 +14,7 @@ def check_profile_restriction():
|
||||
force_profile_completion = frappe.db.get_single_value("LMS Settings", "force_profile_completion")
|
||||
user = frappe.db.get_value("User", frappe.session.user, ["profile_complete", "username"], as_dict=True)
|
||||
return {
|
||||
"redirect": force_profile_completion and not user.profile_complete,
|
||||
"restrict": force_profile_completion and not user.profile_complete,
|
||||
"username": user.username,
|
||||
"prefix": frappe.get_hooks("profile_url_prefix") or "/users/"
|
||||
"prefix": frappe.get_hooks("profile_url_prefix")[0] or "/users/"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"actions": [],
|
||||
"allow_rename": 1,
|
||||
"autoname": "hash",
|
||||
"creation": "2021-12-14 14:42:48.823215",
|
||||
"doctype": "DocType",
|
||||
"editable_grid": 1,
|
||||
@@ -12,19 +13,20 @@
|
||||
{
|
||||
"fieldname": "function",
|
||||
"fieldtype": "Link",
|
||||
"ignore_user_permissions": 1,
|
||||
"in_list_view": 1,
|
||||
"label": "Function",
|
||||
"options": "Function",
|
||||
"reqd": 1
|
||||
"options": "Function"
|
||||
}
|
||||
],
|
||||
"index_web_pages_for_search": 1,
|
||||
"istable": 1,
|
||||
"links": [],
|
||||
"modified": "2021-12-14 14:42:48.823215",
|
||||
"modified": "2021-12-21 10:07:01.448239",
|
||||
"modified_by": "Administrator",
|
||||
"module": "LMS",
|
||||
"name": "Preferred Function",
|
||||
"naming_rule": "Random",
|
||||
"owner": "Administrator",
|
||||
"permissions": [],
|
||||
"sort_field": "modified",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"actions": [],
|
||||
"allow_rename": 1,
|
||||
"autoname": "hash",
|
||||
"creation": "2021-12-14 14:44:06.808797",
|
||||
"doctype": "DocType",
|
||||
"editable_grid": 1,
|
||||
@@ -21,10 +22,11 @@
|
||||
"index_web_pages_for_search": 1,
|
||||
"istable": 1,
|
||||
"links": [],
|
||||
"modified": "2021-12-14 14:44:21.215262",
|
||||
"modified": "2021-12-21 10:07:14.537564",
|
||||
"modified_by": "Administrator",
|
||||
"module": "LMS",
|
||||
"name": "Preferred Industry",
|
||||
"naming_rule": "Random",
|
||||
"owner": "Administrator",
|
||||
"permissions": [],
|
||||
"sort_field": "modified",
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
],
|
||||
"index_web_pages_for_search": 1,
|
||||
"links": [],
|
||||
"modified": "2021-12-12 10:02:39.584832",
|
||||
"modified": "2021-12-21 09:35:44.265910",
|
||||
"modified_by": "Administrator",
|
||||
"module": "LMS",
|
||||
"name": "Skill",
|
||||
@@ -37,6 +37,16 @@
|
||||
"role": "System Manager",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "All",
|
||||
"select": 1,
|
||||
"share": 1
|
||||
}
|
||||
],
|
||||
"sort_field": "modified",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"actions": [],
|
||||
"allow_rename": 1,
|
||||
"autoname": "hash",
|
||||
"creation": "2021-12-07 12:22:44.139341",
|
||||
"doctype": "DocType",
|
||||
"editable_grid": 1,
|
||||
@@ -21,10 +22,11 @@
|
||||
"index_web_pages_for_search": 1,
|
||||
"istable": 1,
|
||||
"links": [],
|
||||
"modified": "2021-12-13 14:42:43.962186",
|
||||
"modified": "2021-12-21 09:59:31.631132",
|
||||
"modified_by": "Administrator",
|
||||
"module": "LMS",
|
||||
"name": "Skills",
|
||||
"naming_rule": "Random",
|
||||
"owner": "Administrator",
|
||||
"permissions": [],
|
||||
"sort_field": "modified",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"actions": [],
|
||||
"allow_rename": 1,
|
||||
"autoname": "hash",
|
||||
"creation": "2021-12-07 12:17:49.571045",
|
||||
"doctype": "DocType",
|
||||
"editable_grid": 1,
|
||||
@@ -70,10 +71,11 @@
|
||||
"index_web_pages_for_search": 1,
|
||||
"istable": 1,
|
||||
"links": [],
|
||||
"modified": "2021-12-09 16:25:48.104205",
|
||||
"modified": "2021-12-21 09:58:56.254035",
|
||||
"modified_by": "Administrator",
|
||||
"module": "LMS",
|
||||
"name": "Work Experience",
|
||||
"naming_rule": "Random",
|
||||
"owner": "Administrator",
|
||||
"permissions": [],
|
||||
"sort_field": "modified",
|
||||
|
||||
@@ -14,7 +14,7 @@ frappe.ready(function () {
|
||||
frappe.web_form.validate = () => {
|
||||
let information_missing;
|
||||
const data = frappe.web_form.get_values();
|
||||
data.work_experience.forEach(exp => {
|
||||
data.work_experience && data.work_experience.length && data.work_experience.forEach(exp => {
|
||||
if (!exp.current && !exp.to_date) {
|
||||
information_missing = true
|
||||
frappe.msgprint('To Date is mandatory in Work Experience.');
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"is_standard": 1,
|
||||
"login_required": 1,
|
||||
"max_attachment_size": 0,
|
||||
"modified": "2021-12-20 13:20:19.810134",
|
||||
"modified": "2021-12-21 11:05:56.505121",
|
||||
"modified_by": "Administrator",
|
||||
"module": "LMS",
|
||||
"name": "profile",
|
||||
@@ -330,7 +330,7 @@
|
||||
"fieldname": "preferred_location",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"label": "Preferred Location",
|
||||
"label": "Preferred Locations",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"options": "",
|
||||
@@ -411,7 +411,7 @@
|
||||
"label": "Location Preference",
|
||||
"max_length": 0,
|
||||
"max_value": 0,
|
||||
"options": "Travel to work\nOffice close to Home",
|
||||
"options": "Travel\nOffice close to Home",
|
||||
"read_only": 0,
|
||||
"reqd": 0,
|
||||
"show_in_filter": 0
|
||||
@@ -456,4 +456,4 @@
|
||||
"show_in_filter": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,6 +51,12 @@ class CustomUser(User):
|
||||
if len(self.username) < 4:
|
||||
frappe.throw(_("Username cannot be less than 4 characters"))
|
||||
|
||||
def get_username_from_first_name(self):
|
||||
return frappe.scrub(self.first_name) + str(random.randint(0, 99))
|
||||
|
||||
def remove_illegal_characters(self):
|
||||
return re.sub("[^\w]+", "", self.username).strip("_")
|
||||
|
||||
def validate_skills(self):
|
||||
unique_skills = []
|
||||
for skill in self.skill:
|
||||
@@ -61,12 +67,18 @@ class CustomUser(User):
|
||||
else:
|
||||
frappe.throw(_("Skills must be unique"))
|
||||
|
||||
def validate_completion(self):
|
||||
all_fields_have_value = True
|
||||
if frappe.db.get_single_value("LMS Settings", "force_profile_completion"):
|
||||
profile_mandatory_fields = frappe.get_hooks("profile_mandatory_fields")
|
||||
docfields = frappe.get_meta(self.doctype).fields
|
||||
|
||||
def get_username_from_first_name(self):
|
||||
return frappe.scrub(self.first_name) + str(random.randint(0, 99))
|
||||
for field in profile_mandatory_fields:
|
||||
if not self.get(field):
|
||||
all_fields_have_value = False
|
||||
break
|
||||
|
||||
def remove_illegal_characters(self):
|
||||
return re.sub("[^\w]+", "", self.username).strip("_")
|
||||
self.profile_complete = all_fields_have_value
|
||||
|
||||
def get_authored_courses(self) -> int:
|
||||
"""Returns the number of courses authored by this user.
|
||||
|
||||
@@ -86,6 +86,17 @@ class LiveCodeExtension(PageExtension):
|
||||
"templates/livecode/extension_footer.html",
|
||||
context)
|
||||
|
||||
def set_mandatory_fields_for_profile():
|
||||
profile_form = frappe.get_doc("Web Form", "profile")
|
||||
profile_mandatory_fields = frappe.get_hooks("profile_mandatory_fields")
|
||||
for field in profile_form.web_form_fields:
|
||||
field.reqd = 0
|
||||
if field.fieldname in profile_mandatory_fields:
|
||||
print(field.fieldname)
|
||||
field.reqd = 1
|
||||
|
||||
profile_form.save()
|
||||
|
||||
def quiz_renderer(quiz_name):
|
||||
quiz = frappe.get_doc("LMS Quiz", quiz_name)
|
||||
context = dict(quiz=quiz)
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
frappe.ready(() => {
|
||||
hide_profile_for_guest_users();
|
||||
restrict_users_to_profile_page();
|
||||
});
|
||||
|
||||
const hide_profile_for_guest_users = () => {
|
||||
@@ -9,19 +8,3 @@ const hide_profile_for_guest_users = () => {
|
||||
link_array.length && $(link_array[0]).addClass("hide");
|
||||
}
|
||||
};
|
||||
|
||||
const restrict_users_to_profile_page = () => {
|
||||
setTimeout(() => {
|
||||
var link_array = $('.nav-link').filter((i, elem) => $(elem).text().trim() === "My Profile");
|
||||
if (frappe.session.user != "Guest" && link_array.length && !$(link_array[0]).hasClass("active")) {
|
||||
frappe.call({
|
||||
"method": "school.lms.doctype.lms_settings.lms_settings.check_profile_restriction",
|
||||
"callback": (data) => {
|
||||
if (data.message && data.message.redirect) {
|
||||
window.location.href = `${data.message.prefix}${data.message.username}`;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}, 10);
|
||||
};
|
||||
|
||||
@@ -43,9 +43,9 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="course-buttons">
|
||||
{% if not course.disable_self_learning and not membership and not course.upcoming %}
|
||||
{% if not course.disable_self_learning and not membership and not course.upcoming and not restriction.restrict %}
|
||||
<div class="button wide-button start-learning is-primary join-batch" data-course="{{ course.name | urlencode }}">
|
||||
Start Learning
|
||||
{{ _("Start Learning") }}
|
||||
<img class="ml-2" src="/assets/school/icons/white-arrow.svg" />
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import frappe
|
||||
from school.lms.doctype.lms_settings.lms_settings import check_profile_restriction
|
||||
|
||||
def get_context(context):
|
||||
context.no_cache = 1
|
||||
@@ -20,6 +21,7 @@ def get_context(context):
|
||||
context.membership = membership
|
||||
if context.course.upcoming:
|
||||
context.is_user_interested = get_user_interest(context.course.name)
|
||||
context.restriction = check_profile_restriction()
|
||||
context.metatags = {
|
||||
"title": course.title,
|
||||
"image": course.image,
|
||||
|
||||
@@ -9,9 +9,16 @@
|
||||
{% block content %}
|
||||
<div class="common-page-style">
|
||||
<div class="container">
|
||||
{% if restriction.restrict %}
|
||||
{% set site_link = "<a href='/edit-profile'> profile </a>" %}
|
||||
<div class="empty-state">
|
||||
<div class="course-home-headings text-center mb-0" style="color: inherit;">{{ _("You haven't completed your profile.") }}</div>
|
||||
<p class="small text-center">{{ _("Complete your {0} to access the courses.").format(site_link) }}</p>
|
||||
</div>
|
||||
|
||||
{% else %}
|
||||
|
||||
{% include "school/templates/search_course/search_course.html" %}
|
||||
|
||||
<div class="course-list">
|
||||
{% set title = _("Live Courses") %}
|
||||
{% set courses = live_courses %}
|
||||
@@ -23,6 +30,7 @@
|
||||
{% set classes = "upcoming-courses mt-10" %}
|
||||
{% include "school/templates/course_list.html" %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
import frappe
|
||||
from school.lms.doctype.lms_settings.lms_settings import check_profile_restriction
|
||||
|
||||
def get_context(context):
|
||||
context.no_cache = 1
|
||||
context.live_courses, context.upcoming_courses = get_courses()
|
||||
context.restriction = check_profile_restriction()
|
||||
context.metatags = {
|
||||
"title": "All Courses",
|
||||
"image": frappe.db.get_single_value("Website Settings", "banner_image"),
|
||||
|
||||
@@ -290,12 +290,16 @@
|
||||
<div class="profile-card-row">
|
||||
<div class="institute-name"> {{ edu.institution_name }} </div>
|
||||
<div class="profile-item"> {{ edu.degree_type }} <span></span> {{ edu.major }}
|
||||
{% if not member.hide_private %} <span></span>
|
||||
{% if not member.hide_private %}
|
||||
<!-- {% if edu.grade_type %} {{ edu.grade_type }} {% endif %} -->
|
||||
{% if edu.grade %} {{ edu.grade }} {% endif %}
|
||||
{% if edu.grade %} <span></span> {{ edu.grade }} {% endif %}
|
||||
{% endif %}
|
||||
</div>
|
||||
<div> {{ frappe.utils.format_date(edu.start_date, "MMM YYYY") }} - {{ frappe.utils.format_date(edu.end_date, "MMM YYYY") }} </div>
|
||||
<div>
|
||||
{% if edu.start_date %}
|
||||
{{ frappe.utils.format_date(edu.start_date, "MMM YYYY") }} -
|
||||
{% endif %}
|
||||
{{ frappe.utils.format_date(edu.end_date, "MMM YYYY") }} </div>
|
||||
<div> {{ edu.location }} </div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
Reference in New Issue
Block a user