diff --git a/frappe/boot.py b/frappe/boot.py index a54e6e2f07..37d89365c4 100644 --- a/frappe/boot.py +++ b/frappe/boot.py @@ -8,6 +8,7 @@ import frappe import frappe.defaults import frappe.desk.desk_page from frappe.core.doctype.navbar_settings.navbar_settings import get_app_logo, get_navbar_settings +from frappe.desk.doctype.form_tour.form_tour import get_onboarding_ui_tours from frappe.desk.doctype.route_history.route_history import frequently_visited_links from frappe.desk.form.load import get_meta_bundle from frappe.email.inbox import get_email_accounts @@ -68,11 +69,7 @@ def get_bootinfo(): bootinfo.home_folder = frappe.db.get_value("File", {"is_home_folder": 1}) bootinfo.navbar_settings = get_navbar_settings() bootinfo.notification_settings = get_notification_settings() - bootinfo.onboarding_tours = ( - frappe.parse_json(frappe.db.get_single_value("Form Tour Settings", "onboarding_tours") or "[]") - if frappe.get_system_settings("enable_onboarding") - else [] - ) + bootinfo.onboarding_tours = get_onboarding_ui_tours() set_time_zone(bootinfo) # ipinfo diff --git a/frappe/desk/doctype/form_tour/form_tour.py b/frappe/desk/doctype/form_tour/form_tour.py index 2271563e71..0b1a22f64c 100644 --- a/frappe/desk/doctype/form_tour/form_tour.py +++ b/frappe/desk/doctype/form_tour/form_tour.py @@ -1,6 +1,8 @@ # Copyright (c) 2021, Frappe Technologies and contributors # License: MIT. See LICENSE +import json + import frappe from frappe.model.document import Document from frappe.modules.export_file import export_to_files @@ -32,40 +34,12 @@ class FormTour(Document): def on_update(self): frappe.cache().delete_key("bootinfo") - if self.ui_tour: - form_tour_settings = frappe.get_doc("Form Tour Settings", "Form Tour Settings") - in_settings = False - child_index = 0 - for tour in form_tour_settings.form_tours: - if tour.form_tour == self.name: - in_settings = True - child_index = tour.idx - form_tour_settings.remove(tour) - if not in_settings: - child_index = len(form_tour_settings.form_tours) + 1 - child = frappe.new_doc("Form Tour Settings Item") - child.update( - { - "idx": child_index, - "form_tour": self.name, - "parent": "Form Tour Settings", - "parentfield": "form_tours", - "parenttype": "Form Tour Settings", - } - ) - child.save() - form_tour_settings.form_tours.insert(child_index, child) - form_tour_settings.save() + if frappe.conf.developer_mode and self.is_standard: export_to_files([["Form Tour", self.name]], self.module) def on_trash(self): - if self.ui_tour: - form_tour_settings = frappe.get_doc("Form Tour Settings", "Form Tour Settings") - for tour in form_tour_settings.form_tours: - if tour.form_tour == self.name: - form_tour_settings.remove(tour) - form_tour_settings.save() + frappe.cache().delete_key("bootinfo") @frappe.whitelist() @@ -76,3 +50,31 @@ def reset_tour(tour_name): onboarding_status.pop(tour_name, None) user_doc.onboarding_status = frappe.as_json(onboarding_status) user_doc.save() + + +@frappe.whitelist() +def update_user_status(value, step): + from frappe.utils.telemetry import capture + + step = frappe.parse_json(step) + tour = frappe.parse_json(value) + + capture( + frappe.scrub(f"{step.parent}_{step.title}"), + app="frappe_ui_tours", + properties={"is_completed": tour.is_completed}, + ) + frappe.db.set_value( + "User", frappe.session.user, "onboarding_status", value, update_modified=False + ) + + frappe.cache().hdel("bootinfo", frappe.session.user) + + +def get_onboarding_ui_tours(): + if not frappe.get_system_settings("enable_onboarding"): + return [] + + ui_tours = frappe.get_all("Form Tour", filters={"ui_tour": 1}, fields=["page_route", "name"]) + + return [[tour.name, json.loads(tour.page_route)] for tour in ui_tours] diff --git a/frappe/desk/doctype/form_tour_settings/__init__.py b/frappe/desk/doctype/form_tour_settings/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/frappe/desk/doctype/form_tour_settings/form_tour_settings.js b/frappe/desk/doctype/form_tour_settings/form_tour_settings.js deleted file mode 100644 index a9d7f62890..0000000000 --- a/frappe/desk/doctype/form_tour_settings/form_tour_settings.js +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (c) 2023, Frappe Technologies and contributors -// For license information, please see license.txt - -frappe.ui.form.on("Form Tour Settings", { - refresh(frm) { - frm.dashboard.add_comment( - "This page is used to set priority for the UI form tours. If there are more than 1 matching tours found for the page, the tour with the highest priority will run.", - "blue", - true - ); - }, -}); diff --git a/frappe/desk/doctype/form_tour_settings/form_tour_settings.json b/frappe/desk/doctype/form_tour_settings/form_tour_settings.json deleted file mode 100644 index 755c347264..0000000000 --- a/frappe/desk/doctype/form_tour_settings/form_tour_settings.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "actions": [], - "allow_rename": 1, - "creation": "2023-05-11 18:07:26.879273", - "default_view": "List", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "onboarding_tours", - "form_tours" - ], - "fields": [ - { - "fieldname": "form_tours", - "fieldtype": "Table", - "label": "Form Tours", - "options": "Form Tour Settings Item" - }, - { - "default": "\"[]\"", - "fieldname": "onboarding_tours", - "fieldtype": "Small Text", - "hidden": 1, - "label": "Onboarding Tours" - } - ], - "index_web_pages_for_search": 1, - "issingle": 1, - "links": [], - "modified": "2023-05-24 12:05:52.676242", - "modified_by": "Administrator", - "module": "Desk", - "name": "Form Tour Settings", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "delete": 1, - "email": 1, - "print": 1, - "read": 1, - "role": "System Manager", - "share": 1, - "write": 1 - } - ], - "sort_field": "modified", - "sort_order": "DESC", - "states": [] -} \ No newline at end of file diff --git a/frappe/desk/doctype/form_tour_settings/form_tour_settings.py b/frappe/desk/doctype/form_tour_settings/form_tour_settings.py deleted file mode 100644 index 5c711f207b..0000000000 --- a/frappe/desk/doctype/form_tour_settings/form_tour_settings.py +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright (c) 2023, Frappe Technologies and contributors -# For license information, please see license.txt - -import json - -import frappe -from frappe.model.document import Document - - -class FormTourSettings(Document): - def before_save(self): - self.onboarding_tours = json.dumps( - [[tour.form_tour, json.loads(tour.page_route)] for tour in self.form_tours] - ) - - -@frappe.whitelist() -def update_user_status(value, step): - from frappe.utils.telemetry import capture - - step = frappe.parse_json(step) - tour = frappe.parse_json(value) - # from frappe.utils.telemetry import capture - capture( - frappe.scrub(f"{step.parent}_{step.title}"), - app="frappe_ui_tours", - properties={"is_completed": tour.is_completed}, - ) - frappe.db.set_value( - "User", frappe.session.user, "onboarding_status", value, update_modified=False - ) - frappe.cache().hdel("bootinfo", frappe.session.user) diff --git a/frappe/desk/doctype/form_tour_settings/test_form_tour_settings.py b/frappe/desk/doctype/form_tour_settings/test_form_tour_settings.py deleted file mode 100644 index 95838ecb97..0000000000 --- a/frappe/desk/doctype/form_tour_settings/test_form_tour_settings.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2023, Frappe Technologies and Contributors -# See license.txt - -# import frappe -from frappe.tests.utils import FrappeTestCase - - -class TestFormTourSettings(FrappeTestCase): - pass diff --git a/frappe/desk/doctype/form_tour_settings_item/__init__.py b/frappe/desk/doctype/form_tour_settings_item/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/frappe/desk/doctype/form_tour_settings_item/form_tour_settings_item.json b/frappe/desk/doctype/form_tour_settings_item/form_tour_settings_item.json deleted file mode 100644 index 01f05393a3..0000000000 --- a/frappe/desk/doctype/form_tour_settings_item/form_tour_settings_item.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "actions": [], - "allow_rename": 1, - "creation": "2023-05-11 18:10:15.194034", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "form_tour", - "view", - "list_view", - "page_route" - ], - "fields": [ - { - "fieldname": "form_tour", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Form Tour", - "options": "Form Tour", - "read_only": 1 - }, - { - "fetch_from": "form_tour.view_name", - "fieldname": "view", - "fieldtype": "Data", - "in_list_view": 1, - "label": "View", - "read_only": 1 - }, - { - "fetch_from": "form_tour.list_name", - "fieldname": "list_view", - "fieldtype": "Data", - "in_list_view": 1, - "label": "List View", - "read_only": 1 - }, - { - "fetch_from": "form_tour.page_route", - "fieldname": "page_route", - "fieldtype": "Data", - "hidden": 1, - "in_list_view": 1, - "label": "Page Route", - "read_only": 1 - } - ], - "index_web_pages_for_search": 1, - "istable": 1, - "links": [], - "modified": "2023-05-17 22:22:58.507769", - "modified_by": "Administrator", - "module": "Desk", - "name": "Form Tour Settings Item", - "owner": "Administrator", - "permissions": [], - "sort_field": "modified", - "sort_order": "DESC", - "states": [] -} \ No newline at end of file diff --git a/frappe/desk/doctype/form_tour_settings_item/form_tour_settings_item.py b/frappe/desk/doctype/form_tour_settings_item/form_tour_settings_item.py deleted file mode 100644 index 0958b000ad..0000000000 --- a/frappe/desk/doctype/form_tour_settings_item/form_tour_settings_item.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2023, Frappe Technologies and contributors -# For license information, please see license.txt - -# import frappe -from frappe.model.document import Document - - -class FormTourSettingsItem(Document): - pass diff --git a/frappe/public/js/onboarding_tours/onboarding_tours.js b/frappe/public/js/onboarding_tours/onboarding_tours.js index 63ecd6d670..63215d3659 100644 --- a/frappe/public/js/onboarding_tours/onboarding_tours.js +++ b/frappe/public/js/onboarding_tours/onboarding_tours.js @@ -42,7 +42,7 @@ frappe.ui.OnboardingTour = class OnboardingTour { } frappe.call({ - method: "frappe.desk.doctype.form_tour_settings.form_tour_settings.update_user_status", + method: "frappe.desk.doctype.form_tour.form_tour.update_user_status", args: { value: JSON.stringify(frappe.boot.user.onboarding_status), step: JSON.stringify(step.options.step_info), @@ -87,7 +87,7 @@ frappe.ui.OnboardingTour = class OnboardingTour { } this.last_step_saved = step; frappe.call({ - method: "frappe.desk.doctype.form_tour_settings.form_tour_settings.update_user_status", + method: "frappe.desk.doctype.form_tour.form_tour.update_user_status", args: { value: JSON.stringify(frappe.boot.user.onboarding_status), step: JSON.stringify(step), diff --git a/frappe/utils/install.py b/frappe/utils/install.py index 50feab0475..df918c27e0 100644 --- a/frappe/utils/install.py +++ b/frappe/utils/install.py @@ -14,8 +14,6 @@ def before_install(): frappe.reload_doc("core", "doctype", "doctype_action") frappe.reload_doc("core", "doctype", "doctype_link") frappe.reload_doc("desk", "doctype", "form_tour_step") - frappe.reload_doc("desk", "doctype", "form_tour_settings") - frappe.reload_doc("desk", "doctype", "form_tour_settings_item") frappe.reload_doc("desk", "doctype", "form_tour") frappe.reload_doc("core", "doctype", "doctype")