diff --git a/frappe/boot.py b/frappe/boot.py index 18fb080d4f..fa20870482 100644 --- a/frappe/boot.py +++ b/frappe/boot.py @@ -96,8 +96,8 @@ def load_conf_settings(bootinfo): if key in conf: bootinfo[key] = conf.get(key) def load_desktop_icons(bootinfo): - from frappe.desk.doctype.desktop_icon.desktop_icon import get_desktop_icons - bootinfo.desktop_icons = get_desktop_icons() + from frappe.desk.doctype.desktop_icon.desktop_icon import get_modules_from_all_apps + bootinfo.allowed_modules = get_modules_from_all_apps() def get_allowed_pages(): return get_user_pages_or_reports('Page') diff --git a/frappe/core/page/desktop/__init__.py b/frappe/core/page/desktop/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/frappe/core/page/desktop/desktop.js b/frappe/core/page/desktop/desktop.js new file mode 100644 index 0000000000..293c3b40d4 --- /dev/null +++ b/frappe/core/page/desktop/desktop.js @@ -0,0 +1,7 @@ +frappe.pages['desktop'].on_page_load = function(wrapper) { + var page = frappe.ui.make_app_page({ + parent: wrapper, + title: 'Desktop', + single_column: true + }); +} \ No newline at end of file diff --git a/frappe/core/page/desktop/desktop.json b/frappe/core/page/desktop/desktop.json new file mode 100644 index 0000000000..66bbfbfd40 --- /dev/null +++ b/frappe/core/page/desktop/desktop.json @@ -0,0 +1,24 @@ +{ + "content": null, + "creation": "2019-01-29 13:11:48.872579", + "docstatus": 0, + "doctype": "Page", + "icon": "icon-th", + "idx": 0, + "modified": "2019-01-29 13:11:48.872579", + "modified_by": "Administrator", + "module": "Core", + "name": "desktop", + "owner": "Administrator", + "page_name": "desktop", + "roles": [ + { + "role": "All" + } + ], + "script": null, + "standard": "Yes", + "style": null, + "system_page": 0, + "title": "Desktop" +} \ No newline at end of file diff --git a/frappe/patches.txt b/frappe/patches.txt index 384dc31293..99ac3eb45d 100644 --- a/frappe/patches.txt +++ b/frappe/patches.txt @@ -236,5 +236,4 @@ frappe.patches.v11_0.fix_order_by_in_reports_json execute:frappe.delete_doc('Page', 'applications', ignore_missing=True) frappe.patches.v11_0.set_missing_creation_and_modified_value_for_user_permissions frappe.patches.v12_0.set_primary_key_in_series -execute:frappe.delete_doc("Page", "desktop", ignore_missing=True) execute:frappe.delete_doc("Page", "modules", ignore_missing=True) diff --git a/frappe/public/js/frappe/desk.js b/frappe/public/js/frappe/desk.js index 5313f64b41..c2a0100378 100644 --- a/frappe/public/js/frappe/desk.js +++ b/frappe/public/js/frappe/desk.js @@ -194,7 +194,7 @@ frappe.Application = Class.extend({ load_bootinfo: function() { if(frappe.boot) { frappe.modules = {}; - frappe.boot.desktop_icons.forEach(function(m) { + frappe.boot.allowed_modules.forEach(function(m) { frappe.modules[m.module_name]=m; }); frappe.model.sync(frappe.boot.docs); @@ -591,86 +591,3 @@ frappe.get_module = function(m, default_module) { return module; }; - -frappe.get_desktop_icons = function(show_hidden, show_global) { - // filter valid icons - - // hidden == hidden from desktop - // blocked == no view from modules either - - var out = []; - - var add_to_out = function(module) { - module = frappe.get_module(module.module_name, module); - module.app_icon = frappe.ui.app_icon.get_html(module); - out.push(module); - }; - - var show_module = function(m) { - var out = true; - if(m.type==="page") { - out = m.link in frappe.boot.page_info; - } else if(m.force_show) { - out = true; - } else if(m._report) { - out = m._report in frappe.boot.user.all_reports; - } else if(m._doctype) { - //out = frappe.model.can_read(m._doctype); - out = frappe.boot.user.can_read.includes(m._doctype); - } else { - if(['Help', 'Settings'].includes(m.module_name)) { - // no permissions necessary for learn - out = true; - } else if(m.module_name==='Setup' && frappe.user.has_role('System Manager')) { - out = true; - } else { - out = frappe.boot.user.allow_modules.indexOf(m.module_name) !== -1; - } - } - if(m.hidden && !show_hidden) { - out = false; - } - if(m.blocked && !show_global) { - out = false; - } - return out; - }; - - let m; - for (var i=0, l=frappe.boot.desktop_icons.length; i < l; i++) { - m = frappe.boot.desktop_icons[i]; - if ((['Setup', 'Core'].indexOf(m.module_name) === -1) && show_module(m)) { - add_to_out(m); - } - } - - if(frappe.user_roles.includes('System Manager')) { - m = frappe.get_module('Setup'); - if(show_module(m)) add_to_out(m); - } - - if(frappe.user_roles.includes('Administrator')) { - m = frappe.get_module('Core'); - if(show_module(m)) add_to_out(m); - } - - return out; -}; - -frappe.add_to_desktop = function(label, doctype, report) { - frappe.call({ - method: 'frappe.desk.doctype.desktop_icon.desktop_icon.add_user_icon', - args: { - 'link': frappe.get_route_str(), - 'label': label, - 'type': 'link', - '_doctype': doctype, - '_report': report - }, - callback: function(r) { - if(r.message) { - frappe.show_alert(__("Added")); - } - } - }); -}; diff --git a/frappe/public/js/frappe/misc/user.js b/frappe/public/js/frappe/misc/user.js index 4b6b52bea9..15e91a82c5 100644 --- a/frappe/public/js/frappe/misc/user.js +++ b/frappe/public/js/frappe/misc/user.js @@ -74,7 +74,7 @@ $.extend(frappe.user, { }, get_desktop_items: function() { // hide based on permission - var modules_list = $.map(frappe.boot.desktop_icons, function(icon) { + var modules_list = $.map(frappe.boot.allowed_modules, function(icon) { var m = icon.module_name; var type = frappe.modules[m] && frappe.modules[m].type; @@ -105,14 +105,6 @@ $.extend(frappe.user, { return modules_list; }, - is_module: function(m) { - var icons = frappe.get_desktop_icons(); - for(var i=0; i { return m.module_name; }); + frappe.visible_modules = $.map(frappe.boot.allowed_modules, (m) => { return m.module_name; }); } var $breadcrumbs = $("#navbar-breadcrumbs").empty(); @@ -88,7 +88,6 @@ frappe.breadcrumbs = { } if(breadcrumbs.doctype && frappe.get_route()[0]==="Form") { if(breadcrumbs.doctype==="User" - && frappe.user.is_module("Setup")===-1 || frappe.get_doc('DocType', breadcrumbs.doctype).issingle) { // no user listview for non-system managers and single doctypes } else { diff --git a/frappe/public/js/frappe/views/components/Desktop.vue b/frappe/public/js/frappe/views/components/Desktop.vue index cdbfe0f6c1..f1f3114496 100644 --- a/frappe/public/js/frappe/views/components/Desktop.vue +++ b/frappe/public/js/frappe/views/components/Desktop.vue @@ -18,8 +18,8 @@
-

- {{ module.label }} +

+ {{ module.label }} {{ module.count }}

{{ module.description }}

@@ -37,38 +37,21 @@ export default { data() { + let modules_list = frappe.boot.allowed_modules + .filter(d => (d.type==='module' || d.category==='Places') && !d.blocked); + + modules_list.forEach(module => { + module.count = this.get_module_count(module.module_name); + }); + return { route_str: frappe.get_route()[1], module_label: '', module_categories: ["Modules", "Domains", "Places", "Administration"], - modules: [] + modules: modules_list }; }, - created() { - this.get_modules(); - }, methods: { - get_modules() { - let res = frappe.call({ - method: 'frappe.desk.doctype.desktop_icon.desktop_icon.get_modules_from_all_apps', - }); - - res.then(r => { - if (r.message) { - let modules_list = r.message; - - modules_list = modules_list - .filter(d => (d.type==='module' || d.category==='Places') && !d.blocked); - - modules_list.forEach(module => { - module.count = this.get_module_count(module.module_name); - }); - - this.modules = modules_list; - } - }); - }, - get_module_count(module_name) { var module_doctypes = frappe.boot.notification_info.module_doctypes[module_name]; var sum = 0; @@ -112,7 +95,7 @@ export default { margin: 70px 0px; } -.module-category { +.module-category { margin-top: 30px; margin-bottom: 15px; border-bottom: 1px solid #d0d8dd; diff --git a/frappe/public/js/frappe/views/components/Modules.vue b/frappe/public/js/frappe/views/components/Modules.vue index bca61b0595..381fbab791 100644 --- a/frappe/public/js/frappe/views/components/Modules.vue +++ b/frappe/public/js/frappe/views/components/Modules.vue @@ -17,11 +17,11 @@ export default { current_module_label: '', current_module_sections: [], modules_data_cache: {}, - modules_list: [], + modules_list: frappe.boot.allowed_modules + .filter(d => (d.type==='module' || d.category==='Places') && !d.blocked), }; }, created() { - this.get_modules_list(); this.update_current_module(); }, mounted() { @@ -52,21 +52,6 @@ export default { } }, - get_modules_list() { - let res = frappe.call({ - method: 'frappe.desk.doctype.desktop_icon.desktop_icon.get_modules_from_all_apps', - }); - - res.then(r => { - if (r.message) { - let modules_list = r.message; - - this.modules_list = modules_list - .filter(d => (d.type==='module' || d.category==='Places') && !d.blocked); - } - }); - }, - get_module_sections(module_name) { let cache = this.modules_data_cache[module_name]; if(cache) {