Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Desk Sidebar [2018-code-sprint] [Desk 2.0] #6661

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
52 changes: 52 additions & 0 deletions cypress/integration/user.js
@@ -0,0 +1,52 @@
/* eslint-disable no-undef */
context('User', () => {
before(() => {
cy.login('Administrator', 'qwe');
cy.visit('/desk');
});

it('user navigation settings', () => {
// go to Administrator's user settings page ond open desktop section
cy.visit('/desk#Form/User/Administrator');
cy.get('a.h6.uppercase').contains('Desktop').click({multiple: true});

// change to sidebar navigation
cy.get('select[data-fieldname="desk_navigation"]').select('Sidebar');
cy.get('.control-value').should('contain', 'Sidebar');

// set homepage to 'permission-manager' and save user settings
cy.get('input[data-fieldname="homepage"]').clear().type('permission-manager{enter}', { delay: 100 });
cy.get('button.btn-primary').contains('Save').click();
cy.wait(2000);

// ensure that desk sidebar is visible
cy.get('#desk_sidebar_div').should('be.visible');

// ensure layout is full width when sidebar is active
cy.get('.app-container').each(($div) => {
expect($div).to.have.class('container-fluid');
});

// click homepage link and ensure that it navigates to Permission Manager
cy.get('.navbar-home').click();
cy.get('#page-permission-manager').should('be.visible');

// refresh page
cy.reload();

// go to Administrator's user settings page ond open desktop section
cy.visit('/desk#Form/User/Administrator');
cy.get('a.h6.uppercase').contains('Desktop').click({multiple: true});

// change to desktop navigation and save user settings
cy.get('select[data-fieldname="desk_navigation"]').select('Desktop');
cy.get('button.btn-primary').contains('Save').click();
cy.wait(2000);

// click homepage link and ensure that it navigates to Desktop
cy.get('.navbar-home').click();
cy.get('#page-desktop').should('be.visible');

});

});
6 changes: 5 additions & 1 deletion frappe/boot.py
Expand Up @@ -213,7 +213,11 @@ def add_home_page(bootinfo, docs):
"""load home page"""
if frappe.session.user=="Guest":
return
home_page = frappe.db.get_default("desktop:home_page")

if bootinfo.user.homepage and bootinfo.user.desk_navigation == "Sidebar":
home_page = bootinfo.user.homepage
else:
home_page = frappe.db.get_default("desktop:home_page")

if home_page == "setup-wizard":
bootinfo.setup_wizard_requires = frappe.get_hooks("setup_wizard_requires")
Expand Down
23 changes: 22 additions & 1 deletion frappe/core/doctype/user/test_records.json
Expand Up @@ -63,5 +63,26 @@
"role": "System Manager"
}
]
}
},
{
"doctype": "User",
"email": "testhomepage@example.com",
"enabled": 1,
"first_name": "_Test Homepage",
"new_password": "Eastern_43A1W",
"homepage": "modules",
"desk_navigation": "Sidebar",
"roles": [
{
"doctype": "Has Role",
"parentfield": "roles",
"role": "_Test Role 2"
},
{
"doctype": "Has Role",
"parentfield": "roles",
"role": "System Manager"
}
]
}
]
4 changes: 4 additions & 0 deletions frappe/core/doctype/user/test_user.py
Expand Up @@ -97,6 +97,10 @@ def test_get_value(self):
self.assertEqual(frappe.db.get_value("Website Settings", None, "_test"), "_test_val")
self.assertEqual(frappe.db.get_value("Website Settings", "Website Settings", "_test"), "_test_val")

# test user homepage is "leaderboard"
self.assertEqual(frappe.db.get_value("User", {"email": "testhomepage@example.com"}, "homepage"),
"modules")

def test_high_permlevel_validations(self):
user = frappe.get_meta("User")
self.assertTrue("roles" in [d.fieldname for d in user.get_high_permlevel_fields()])
Expand Down
37 changes: 37 additions & 0 deletions frappe/core/doctype/user/user.js
Expand Up @@ -53,6 +53,20 @@ frappe.ui.form.on('User', {
frm.roles_editor.show();
}
}

cur_frm.set_query("homepage", function() {
if(frm.doc.desk_navigation == "Desktop") return {};
return {
"filters": [
["Page", "name", "!=", "desktop"]
]
};
});

if(frm.doc.desk_navigation == "Sidebar") {
frm.set_df_property('homepage', 'reqd', 1);
frm.set_df_property("full_width_desk", "read_only", 1);
}
},
refresh: function(frm) {
var doc = frm.doc;
Expand Down Expand Up @@ -202,6 +216,29 @@ frappe.ui.form.on('User', {
}
}
})
},
desk_navigation: function(frm){
if(frm.doc.desk_navigation == "Sidebar"){
frm.set_df_property('homepage', 'reqd', 1);
frm.set_df_property("full_width_desk", "read_only", 1);
frm.set_value("full_width_desk", 1);
if(frm.doc.homepage == "desktop") {
frm.set_value("homepage", null);
}
} else {
frm.set_df_property('homepage', 'reqd', 0);
frm.set_df_property("full_width_desk", "read_only", 0);
}
},
homepage: function(frm){
if(frm.doc.desk_navigation == "Sidebar" && frm.doc.homepage == "desktop"){
frm.set_value("homepage", null);
}
},
after_save: function(frm){
if(frappe.session.user == frm.doc.name) {
frappe.desk_sidebar.get_desk_navigation_settings();
}
}
})

Expand Down
135 changes: 133 additions & 2 deletions frappe/core/doctype/user/user.json
Expand Up @@ -1421,7 +1421,7 @@
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Desktop Background",
"label": "Desktop",
"length": 0,
"no_copy": 0,
"permlevel": 0,
Expand Down Expand Up @@ -1502,6 +1502,137 @@
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "column_break_47",
"fieldtype": "Column Break",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "desk_navigation",
"fieldtype": "Select",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Desk Navigation",
"length": 0,
"no_copy": 0,
"options": "Desktop\nSidebar",
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"default": "desktop",
"depends_on": "eval: (doc.desk_navigation == 'Sidebar')",
"fieldname": "homepage",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Homepage",
"length": 0,
"no_copy": 0,
"options": "Page",
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "full_width_desk",
"fieldtype": "Check",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Use full width layout",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
Expand Down Expand Up @@ -2303,7 +2434,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 5,
"modified": "2018-11-21 12:34:57.652854",
"modified": "2018-12-18 05:28:38.938146",
"modified_by": "Administrator",
"module": "Core",
"name": "User",
Expand Down
2 changes: 1 addition & 1 deletion frappe/core/page/desktop/desktop_list_view.html
@@ -1,4 +1,4 @@
<div class="container page-body">
<div class="app-container {{app_container_class}} page-body">
<div class="row">
<div class="layout-main-section">
<div class="page-content desktop-list" style="margin-top: 40px;">
Expand Down
2 changes: 2 additions & 0 deletions frappe/public/build.json
Expand Up @@ -106,6 +106,7 @@
"public/css/font-awesome.css",
"public/css/octicons/octicons.css",
"public/less/desk.less",
"public/less/desk_sidebar.less",
"public/less/flex.less",
"public/less/indicator.less",
"public/less/avatar.less",
Expand Down Expand Up @@ -238,6 +239,7 @@

"public/js/frappe/change_log.html",
"public/js/frappe/desk.js",
"public/js/frappe/desk_sidebar.js",
"public/js/frappe/query_string.js",

"public/js/frappe/ui/comment.js",
Expand Down
4 changes: 4 additions & 0 deletions frappe/public/js/frappe/desk.js
Expand Up @@ -295,6 +295,10 @@ frappe.Application = Class.extend({
frappe.session.user = frappe.boot.user.name;
frappe.session.user_email = frappe.boot.user.email;
frappe.session.user_fullname = frappe.user_info().fullname;
frappe.session.user_nav = frappe.boot.user.desk_navigation;
frappe.session.user_homepage = frappe.boot.user.homepage;
frappe.session.full_width_desk = frappe.boot.user.full_width_desk;
frappe.session.app_container_class = frappe.boot.user.full_width_desk ? "container-fluid container-margin-10" : "container";

frappe.user_defaults = frappe.boot.user.defaults;
frappe.user_roles = frappe.boot.user.roles;
Expand Down