diff --git a/frontend/src/components/AppSidebar.vue b/frontend/src/components/AppSidebar.vue index b09ec4c3..6a5f3b93 100644 --- a/frontend/src/components/AppSidebar.vue +++ b/frontend/src/components/AppSidebar.vue @@ -659,6 +659,106 @@ const setUpOnboarding = () => { } } +const addMyPoints = () => { + const roles = userResource.data?.roles || [] + if (roles.includes('LMS Student') || roles.includes('LMS Schoolchild')) { + sidebarLinks.value.push({ + label: __('My points'), + icon: 'Award', + to: 'my_points', + external: true, + activeFor: [], + }) + } +} + +const addLeaderBoard = () => { + if (user) { + sidebarLinks.value.push({ + label: __('Leader Board'), + icon: 'Trophy', + to: 'leaderboardsample', + external: true, + activeFor: [], + }) + } +} + +const addChatGPT = () => { + const roles = userResource.data?.roles || [] + let URL = '' + let nameLabel = '' + if (roles.includes('LMS Schoolchild') || roles.includes('LMS Student') || roles.includes('Course Creator')) { + if (roles.includes('LMS Schoolchild')) { + URL = 'chatgpt-schoolchild' + nameLabel = __('ChatGPT for Schoolers') + } else if (roles.includes('LMS Student')) { + URL = 'chatgpt-schoolchild' + nameLabel = __('ChatGPT for Students') + } else if (roles.includes('Course Creator')) { + URL = 'ai-teachers' + nameLabel = __('ChatGPT for Teachers') + } + + sidebarLinks.value.push({ + label: nameLabel, + icon: 'Cpu', + to: URL, + external: true, + activeFor: [], + }) + } +} + +const addMyChild = () => { + const roles = userResource.data?.roles || [] + if (roles.includes('Parent')) { + sidebarLinks.value.push({ + label: __('My Child'), + icon: 'User', + to: 'my-child', + activeFor: [], + external: true, + }) + } + +} + +//test of new page +const addProfile = () => { + const roles = userResource.data?.roles || [] + if (roles.includes('LMS Student')) { + sidebarLinks.value.push({ + label: __('Student Profile'), + icon: 'Home', + to: 'StudentProfile', + activeFor: [], + }) + } else if (roles.includes('LMS Schoolchild')) { + sidebarLinks.value.push({ + label: __('Schoolchildren Profile'), + icon: 'Home', + to: 'SchoolchildrenProfile', + activeFor: [], + }) + } else if (roles.includes('Course Creator')) { + sidebarLinks.value.push({ + label: __('Course Creator Profile'), + icon: 'Home', + to: 'CourseCreatorProfile', + activeFor: [], + }) + } else { + sidebarLinks.value.push({ + label: __('Parent Profile'), + icon: 'Home', + to: 'ParentProfile', + activeFor: [], + }) + } + +} + watch(userResource, () => { addContactUsDetails() if (userResource.data) { @@ -670,6 +770,12 @@ watch(userResource, () => { addQuizzes() addAssignments() setUpOnboarding() + + addMyPoints() + addLeaderBoard() + addChatGPT() + addMyChild() + addProfile() } }) diff --git a/lms/lms/user.py b/lms/lms/user.py index 5e31e5d8..68547975 100644 --- a/lms/lms/user.py +++ b/lms/lms/user.py @@ -1,9 +1,9 @@ import frappe from frappe import _ from frappe.model.naming import append_number_if_name_exists -from frappe.utils import escape_html, random_string -from frappe.website.utils import cleanup_page_name, is_signup_disabled - +from frappe.website.utils import cleanup_page_name +from frappe.website.utils import is_signup_disabled +from frappe.utils import random_string, escape_html from lms.lms.utils import get_country_code @@ -19,12 +19,12 @@ def validate_username_duplicates(doc, method): doc.username = doc.email.replace("@", "").replace(".", "") -def after_insert(doc, method): - doc.add_roles("LMS Student") +'''def after_insert(doc, method): + doc.add_roles("LMS Student")''' @frappe.whitelist(allow_guest=True) -def sign_up(email, full_name, verify_terms, user_category): +def sign_up(email, full_name, verify_terms, user_category, user_role, phone): if is_signup_disabled(): frappe.throw(_("Sign Up is disabled"), _("Not Allowed")) @@ -48,6 +48,7 @@ def sign_up(email, full_name, verify_terms, user_category): { "doctype": "User", "email": email, + "phone": escape_html(phone), "first_name": escape_html(full_name), "verify_terms": verify_terms, "user_category": user_category, @@ -62,11 +63,15 @@ def sign_up(email, full_name, verify_terms, user_category): user.insert() # set default signup role as per Portal Settings - default_role = frappe.db.get_single_value("Portal Settings", "default_role") + default_role = frappe.db.get_value("Portal Settings", None, "default_role") if default_role: user.add_roles(default_role) + elif user_role: # set Role + user.add_roles(user_role) # Если роль передана, добавляем её + else: + user.add_roles("LMS Student") # Иначе добавляем роль по умолчанию - user.add_roles("LMS Student") + #user.add_roles("LMS Student") set_country_from_ip(None, user.name) if user.flags.email_sent: @@ -79,8 +84,8 @@ def set_country_from_ip(login_manager=None, user=None): if not user and login_manager: user = login_manager.user user_country = frappe.db.get_value("User", user, "country") - if user_country: - return + # if user_country: + # return frappe.db.set_value("User", user, "country", get_country_code()) return diff --git a/lms/templates/signup-form.html b/lms/templates/signup-form.html index e78020dd..58f01ddf 100644 --- a/lms/templates/signup-form.html +++ b/lms/templates/signup-form.html @@ -11,21 +11,24 @@ +
+ + +
{% if frappe.db.get_single_value("LMS Settings", "user_category") %}
- +
-
@@ -48,6 +51,9 @@
{% endif %} +

+ {{ _("Проверьте почту — там письмо для подтверждения регистрации. Если его нет во «Входящих», проверьте «Спам».") }} +

@@ -78,22 +84,30 @@ e.preventDefault(); const email = ($("#signup_email").val() || "").trim(); const full_name = frappe.utils.xss_sanitise(($("#signup_fullname").val() || "").trim()); + const phone = ($("#signup_phone").val() || "").trim(); - if (!email || !validate_email(email) || !full_name) { - login.set_status('{{ _("Valid email and name required") }}', 'red'); + if (!email || !validate_email(email) || !full_name || !validate_phone(phone)) { + login.set_status('{{ _("Valid email, name, and phone required") }}', 'red'); return false; } frappe.call({ - method: "lms.lms.user.sign_up", + method: "lms.overrides.user.sign_up", args: { "email": email, "full_name": full_name, + "phone": phone, "verify_terms": $("#signup-terms").prop("checked") ? 1 : 0, - "user_category": $("#user_category").length ? $("#user_category").val() : "" + "user_category": $("#user_category").length ? $("#user_category").val() : "", + "user_role": $("#user_role").length ? $("#user_role").val() : "" }, statusCode: login.login_handlers }) return false; } + + const validate_phone = (phone) => { + const phone_regex = /^[0-9\-\+\s]{10,15}$/; + return phone_regex.test(phone); + }