refactor: make desk settings user specific

Signed-off-by: Akhil Narang <me@akhilnarang.dev>
This commit is contained in:
Akhil Narang 2024-09-19 17:48:30 +05:30
parent 99f233c6c7
commit 895ca9a30b
No known key found for this signature in database
GPG key ID: 9DCC61E211BF645F
6 changed files with 106 additions and 111 deletions

View file

@ -437,16 +437,9 @@ def add_layouts(bootinfo):
def get_desk_settings():
role_list = frappe.get_all("Role", fields=["*"], filters=dict(name=["in", frappe.get_roles()]))
desk_settings = {}
from frappe.core.doctype.user.user import desk_properties
from frappe.core.doctype.role.role import desk_properties
for role in role_list:
for key in desk_properties:
desk_settings[key] = desk_settings.get(key) or role.get(key)
return desk_settings
return frappe.get_value("User", frappe.session.user, desk_properties, as_dict=True)
def get_notification_settings():

View file

@ -1,6 +1,6 @@
import frappe
from ..role import desk_properties
from ...user.user import desk_properties
def execute():

View file

@ -14,18 +14,7 @@
"disabled",
"is_custom",
"desk_access",
"two_factor_auth",
"navigation_settings_section",
"search_bar",
"notifications",
"list_settings_section",
"list_sidebar",
"bulk_actions",
"view_switcher",
"form_settings_section",
"form_sidebar",
"timeline",
"dashboard"
"two_factor_auth"
],
"fields": [
{
@ -73,69 +62,6 @@
"fieldname": "column_break_4",
"fieldtype": "Column Break"
},
{
"fieldname": "navigation_settings_section",
"fieldtype": "Section Break",
"label": "Navigation Settings"
},
{
"default": "1",
"fieldname": "search_bar",
"fieldtype": "Check",
"label": "Search Bar"
},
{
"fieldname": "list_settings_section",
"fieldtype": "Section Break",
"label": "List Settings"
},
{
"default": "1",
"fieldname": "list_sidebar",
"fieldtype": "Check",
"label": "Sidebar"
},
{
"default": "1",
"fieldname": "bulk_actions",
"fieldtype": "Check",
"label": "Bulk Actions"
},
{
"fieldname": "form_settings_section",
"fieldtype": "Section Break",
"label": "Form Settings"
},
{
"default": "1",
"fieldname": "form_sidebar",
"fieldtype": "Check",
"label": "Sidebar"
},
{
"default": "1",
"fieldname": "timeline",
"fieldtype": "Check",
"label": "Timeline"
},
{
"default": "1",
"fieldname": "dashboard",
"fieldtype": "Check",
"label": "Dashboard"
},
{
"default": "1",
"fieldname": "view_switcher",
"fieldtype": "Check",
"label": "View Switcher"
},
{
"default": "1",
"fieldname": "notifications",
"fieldtype": "Check",
"label": "Notifications"
},
{
"default": "0",
"fieldname": "is_custom",
@ -148,7 +74,7 @@
"idx": 1,
"index_web_pages_for_search": 1,
"links": [],
"modified": "2024-03-23 16:03:36.854123",
"modified": "2024-09-19 17:07:08.672124",
"modified_by": "Administrator",
"module": "Core",
"name": "Role",

View file

@ -4,17 +4,6 @@
import frappe
from frappe.model.document import Document
from frappe.website.path_resolver import validate_path
desk_properties = (
"search_bar",
"notifications",
"list_sidebar",
"bulk_actions",
"view_switcher",
"form_sidebar",
"timeline",
"dashboard",
)
from frappe.website.router import clear_routing_cache
STANDARD_ROLES = ("Administrator", "System Manager", "Script Manager", "All", "Guest")
@ -29,21 +18,13 @@ class Role(Document):
if TYPE_CHECKING:
from frappe.types import DF
bulk_actions: DF.Check
dashboard: DF.Check
desk_access: DF.Check
disabled: DF.Check
form_sidebar: DF.Check
home_page: DF.Data | None
is_custom: DF.Check
list_sidebar: DF.Check
notifications: DF.Check
restrict_to_domain: DF.Link | None
role_name: DF.Data
search_bar: DF.Check
timeline: DF.Check
two_factor_auth: DF.Check
view_switcher: DF.Check
# end: auto-generated types
def before_rename(self, old, new, merge=False):
@ -78,10 +59,6 @@ class Role(Document):
if self.name == "Guest":
self.desk_access = 0
if not self.desk_access:
for key in desk_properties:
self.set(key, 0)
def remove_roles(self):
frappe.db.delete("Has Role", {"role": self.name})
frappe.clear_cache()

View file

@ -50,6 +50,17 @@
"desk_theme",
"code_editor_type",
"banner_image",
"navigation_settings_section",
"search_bar",
"notifications",
"list_settings_section",
"list_sidebar",
"bulk_actions",
"view_switcher",
"form_settings_section",
"form_sidebar",
"timeline",
"dashboard",
"change_password",
"new_password",
"logout_all_sessions",
@ -748,6 +759,69 @@
"fieldname": "default_app",
"fieldtype": "Select",
"label": "Default App"
},
{
"fieldname": "navigation_settings_section",
"fieldtype": "Section Break",
"label": "Navigation Settings"
},
{
"default": "1",
"fieldname": "search_bar",
"fieldtype": "Check",
"label": "Search Bar"
},
{
"default": "1",
"fieldname": "notifications",
"fieldtype": "Check",
"label": "Notifications"
},
{
"fieldname": "list_settings_section",
"fieldtype": "Section Break",
"label": "List Settings"
},
{
"default": "1",
"fieldname": "list_sidebar",
"fieldtype": "Check",
"label": "Sidebar"
},
{
"default": "1",
"fieldname": "bulk_actions",
"fieldtype": "Check",
"label": "Bulk Actions"
},
{
"default": "1",
"fieldname": "view_switcher",
"fieldtype": "Check",
"label": "View Switcher"
},
{
"fieldname": "form_settings_section",
"fieldtype": "Section Break",
"label": "Form Settings"
},
{
"default": "1",
"fieldname": "form_sidebar",
"fieldtype": "Check",
"label": "Sidebar"
},
{
"default": "1",
"fieldname": "timeline",
"fieldtype": "Check",
"label": "Timeline"
},
{
"default": "1",
"fieldname": "dashboard",
"fieldtype": "Check",
"label": "Dashboard"
}
],
"icon": "fa fa-user",
@ -810,7 +884,7 @@
"link_fieldname": "user"
}
],
"modified": "2024-08-13 14:48:15.168516",
"modified": "2024-09-19 17:06:42.161178",
"modified_by": "Administrator",
"module": "Core",
"name": "User",

View file

@ -1,7 +1,6 @@
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# License: MIT. See LICENSE
import json
from collections.abc import Iterable
from datetime import timedelta
@ -39,6 +38,17 @@ from frappe.utils.password import update_password as _update_password
from frappe.utils.user import get_system_managers
from frappe.website.utils import get_home_page, is_signup_disabled
desk_properties = (
"search_bar",
"notifications",
"list_sidebar",
"bulk_actions",
"view_switcher",
"form_sidebar",
"timeline",
"dashboard",
)
class User(Document):
# begin: auto-generated types
@ -62,8 +72,10 @@ class User(Document):
bio: DF.SmallText | None
birth_date: DF.Date | None
block_modules: DF.Table[BlockModule]
bulk_actions: DF.Check
bypass_restrict_ip_check_if_2fa_enabled: DF.Check
code_editor_type: DF.Literal["vscode", "vim", "emacs"]
dashboard: DF.Check
default_app: DF.Literal[None]
default_workspace: DF.Link | None
defaults: DF.Table[DefaultValue]
@ -79,6 +91,7 @@ class User(Document):
follow_created_documents: DF.Check
follow_liked_documents: DF.Check
follow_shared_documents: DF.Check
form_sidebar: DF.Check
full_name: DF.Data | None
gender: DF.Link | None
home_settings: DF.Code | None
@ -91,6 +104,7 @@ class User(Document):
last_name: DF.Data | None
last_password_reset_date: DF.Date | None
last_reset_password_key_generated_on: DF.Datetime | None
list_sidebar: DF.Check
location: DF.Data | None
login_after: DF.Int
login_before: DF.Int
@ -100,6 +114,7 @@ class User(Document):
module_profile: DF.Link | None
mute_sounds: DF.Check
new_password: DF.Password | None
notifications: DF.Check
onboarding_status: DF.SmallText | None
phone: DF.Data | None
redirect_url: DF.SmallText | None
@ -108,17 +123,20 @@ class User(Document):
role_profile_name: DF.Link | None
role_profiles: DF.TableMultiSelect[UserRoleProfile]
roles: DF.Table[HasRole]
search_bar: DF.Check
send_me_a_copy: DF.Check
send_welcome_email: DF.Check
simultaneous_sessions: DF.Int
social_logins: DF.Table[UserSocialLogin]
thread_notify: DF.Check
time_zone: DF.Autocomplete | None
timeline: DF.Check
unsubscribed: DF.Check
user_emails: DF.Table[UserEmail]
user_image: DF.AttachImage | None
user_type: DF.Link | None
username: DF.Data | None
view_switcher: DF.Check
# end: auto-generated types
__new_password = None
@ -178,6 +196,8 @@ class User(Document):
self.validate_allowed_modules()
self.validate_user_image()
self.set_time_zone()
self.set_desk_properties()
if self.language == "Loading...":
self.language = None
@ -793,6 +813,11 @@ class User(Document):
},
)
def set_desk_properties(self):
if self.user_type == "Website User":
for key in desk_properties:
self.set(key, 0)
@frappe.whitelist()
def get_timezones():