diff --git a/public/js/wn/defaults.js b/public/js/wn/defaults.js index 9d7320325d..30c920bf79 100644 --- a/public/js/wn/defaults.js +++ b/public/js/wn/defaults.js @@ -19,4 +19,28 @@ wn.defaults = { if(!$.isArray(d)) d = [d]; return d; }, + set_default: function(key, value, callback) { + if(typeof value=="string") + value = JSON.stringify(value); + + wn.boot.profile.defaults[key] = value; + wn.call({ + method: "webnotes.client.set_default", + args: { + key: key, + value: value + }, + callback: callback || function(r) {} + }); + }, + get_default: function(key) { + var value = wn.boot.profile.defaults[key]; + if(value) { + try { + return JSON.parse(value) + } catch(e) { + return value; + } + } + }, } \ No newline at end of file diff --git a/public/js/wn/misc/user.js b/public/js/wn/misc/user.js index 72ac6ade01..dbe411d7e5 100644 --- a/public/js/wn/misc/user.js +++ b/public/js/wn/misc/user.js @@ -40,33 +40,9 @@ $.extend(wn.user, { return true; } }, - set_default: function(key, value, callback) { - if(typeof value=="string") - value = JSON.stringify(value); - - wn.boot.profile.defaults[key] = value; - wn.call({ - method: "webnotes.client.set_default", - args: { - key: key, - value: value - }, - callback: callback || function(r) {} - }); - }, - get_default: function(key) { - var value = wn.boot.profile.defaults[key]; - if(value) { - try { - return JSON.parse(value) - } catch(e) { - return value; - } - } - }, get_desktop_items: function() { // get user sequence preference - var user_list = wn.user.get_default("_desktop_items"); + var user_list = wn.defaults.get_default("_desktop_items"); if(user_list && user_list.length) var modules_list = user_list; diff --git a/public/js/wn/ui/toolbar/bookmarks.js b/public/js/wn/ui/toolbar/bookmarks.js index f3c26675cd..ddde42d660 100644 --- a/public/js/wn/ui/toolbar/bookmarks.js +++ b/public/js/wn/ui/toolbar/bookmarks.js @@ -20,7 +20,7 @@ wn.ui.toolbar.Bookmarks = Class.extend({ setup: function() { var me = this; - this.bookmarks = wn.user.get_default("_bookmarks") || []; + this.bookmarks = wn.defaults.get_default("_bookmarks") || []; for(var i=this.bookmarks.length-1; i>=0; i--) { var bookmark = this.bookmarks[i]; this.add_item(bookmark.route, bookmark.title) @@ -72,7 +72,7 @@ wn.ui.toolbar.Bookmarks = Class.extend({ return wn.utils.filter_dict(this.bookmarks, {"route": route}).length; }, save: function() { - wn.user.set_default("_bookmarks", this.bookmarks); + wn.defaults.set_default("_bookmarks", this.bookmarks); }, remove: function(route) { this.bookmarks = $.map(this.bookmarks, function(d) { diff --git a/public/js/wn/views/reportview.js b/public/js/wn/views/reportview.js index def2cdab1e..a26371b848 100644 --- a/public/js/wn/views/reportview.js +++ b/public/js/wn/views/reportview.js @@ -98,7 +98,7 @@ wn.views.ReportView = wn.ui.Listing.extend({ set_init_columns: function() { // pre-select mandatory columns - var columns = wn.user.get_default("_list_settings:" + this.doctype); + var columns = wn.defaults.get_default("_list_settings:" + this.doctype); if(!columns) { var columns = [['name', this.doctype],]; $.each(wn.meta.docfield_list[this.doctype], function(i, df) { @@ -465,7 +465,7 @@ wn.ui.ColumnPicker = Class.extend({ columns.push([$selected.attr('fieldname'), $selected.attr('table')]); }); - wn.user.set_default("_list_settings:" + me.doctype, columns); + wn.defaults.set_default("_list_settings:" + me.doctype, columns); me.list.columns = columns; me.list.run(); }); diff --git a/webnotes/__init__.py b/webnotes/__init__.py index 2304703afb..b5cf960f37 100644 --- a/webnotes/__init__.py +++ b/webnotes/__init__.py @@ -258,7 +258,7 @@ def get_roles(user=None, with_standard=True): def has_permission(doctype, ptype="read", doc=None): """check if user has permission""" - from webnotes.defaults import get_user_defaults + from webnotes.defaults import get_user_default_as_list if session.user=="Administrator": return True if conn.get_value("DocType", doctype, "istable"): @@ -280,7 +280,7 @@ def has_permission(doctype, ptype="read", doc=None): keys = [p.match, p.match] if doc.fields.get(keys[0],"[No Value]") \ - in get_user_defaults(keys[1], session.user): + in get_user_default_as_list(keys[1]): return True else: match_failed[keys[0]] = doc.fields.get(keys[0],"[No Value]") diff --git a/webnotes/defaults.py b/webnotes/defaults.py index 596c01a286..492c495fb0 100644 --- a/webnotes/defaults.py +++ b/webnotes/defaults.py @@ -12,21 +12,18 @@ def add_user_default(key, value, user=None): def get_user_default(key, user=None): d = get_defaults(user or webnotes.session.user).get(key, None) - if d is None: - d = get_global_default(key) return isinstance(d, list) and d[0] or d -def get_user_defaults(key, user=None): +def get_user_default_as_list(key, user=None): d = get_defaults(user or webnotes.session.user).get(key, None) - if d is None: - d = get_global_defaults(key) return isinstance(d, basestring) and [d] or d -def get_all_user_defaults(user=None): - userd = get_defaults(user or webnotes.session.user) - globald = get_defaults() +def get_defaults(user=None): + userd = get_defaults_for(user or webnotes.session.user) + globald = get_defaults_for() globald.update(userd) + return globald def clear_user_default(key, user=None): @@ -44,10 +41,6 @@ def get_global_default(key): d = get_defaults().get(key, None) return isinstance(d, list) and d[0] or d -def get_global_defaults(key): - d = get_defaults().get(key, None) - return isinstance(d, basestring) and [d] or d - # Common def set_default(key, value, parent): @@ -98,7 +91,7 @@ def clear_default(key=None, value=None, parent=None, name=None): webnotes.conn.sql("""delete from tabDefaultValue where %s""" % " and ".join(conditions), values) clear_cache() -def get_defaults(parent="Control Panel"): +def get_defaults_for(parent="Control Panel"): """get all defaults""" defaults = webnotes.cache().get_value("__defaults:" + parent) if not defaults: @@ -109,9 +102,10 @@ def get_defaults(parent="Control Panel"): for d in res: if d.defkey in defaults: # listify - if isinstance(defaults[d.defkey], basestring): + if isinstance(defaults[d.defkey], basestring) and defaults[d.defkey] != d.defvalue: defaults[d.defkey] = [defaults[d.defkey]] - defaults[d.defkey].append(d.defvalue) + if d.defvalue not in defaults[d.defkey]: + defaults[d.defkey].append(d.defvalue) else: defaults[d.defkey] = d.defvalue diff --git a/webnotes/profile.py b/webnotes/profile.py index 3bd183a00c..3ad5ce003d 100644 --- a/webnotes/profile.py +++ b/webnotes/profile.py @@ -133,7 +133,7 @@ class Profile: def get_defaults(self): import webnotes.defaults - self.defaults = webnotes.defaults.get_all_user_defaults(self.name) + self.defaults = webnotes.defaults.get_defaults(self.name) return self.defaults # update recent documents diff --git a/webnotes/tests/test_defaults.py b/webnotes/tests/test_defaults.py index d792b154a3..a62900ef86 100644 --- a/webnotes/tests/test_defaults.py +++ b/webnotes/tests/test_defaults.py @@ -12,18 +12,19 @@ class TestDefaults(unittest.TestCase): add_global_default("key1", "value3") self.assertEquals(get_global_default("key1"), "value2") - self.assertEquals(get_global_defaults("key1"), ["value2", "value3"]) + self.assertEquals(get_defaults()["key1"], ["value2", "value3"]) + self.assertEquals(get_user_default_as_list("key1"), ["value2", "value3"]) def test_user(self): set_user_default("key1", "2value1") - self.assertEquals(get_user_defaults("key1"), ["2value1"]) + self.assertEquals(get_user_default_as_list("key1"), ["2value1"]) set_user_default("key1", "2value2") self.assertEquals(get_user_default("key1"), "2value2") add_user_default("key1", "3value3") self.assertEquals(get_user_default("key1"), "2value2") - self.assertEquals(get_user_defaults("key1"), ["2value2", "3value3"]) + self.assertEquals(get_user_default_as_list("key1"), ["2value2", "3value3"]) def test_global_if_not_user(self): set_global_default("key4", "value4") diff --git a/webnotes/widgets/query_builder.py b/webnotes/widgets/query_builder.py index c0b6a7fee5..2bcff2172d 100644 --- a/webnotes/widgets/query_builder.py +++ b/webnotes/widgets/query_builder.py @@ -103,7 +103,7 @@ def getmatchcondition(dt, ur): for r in res: if r[0] in ur: # role applicable to user if r[1]: - for d in webnotes.defaults.get_user_defaults(default_key) or ["** No Match **"]: + for d in webnotes.defaults.get_user_default_as_list(default_key) or ["** No Match **"]: cond.append('`tab%s`.`%s`="%s"' % (dt, r[1], d)) else: return '' diff --git a/webnotes/widgets/reportview.py b/webnotes/widgets/reportview.py index ab562d1b2b..c70a43f478 100644 --- a/webnotes/widgets/reportview.py +++ b/webnotes/widgets/reportview.py @@ -220,7 +220,7 @@ def build_match_conditions(data): else: default_key = document_key = d.match - for v in webnotes.defaults.get_user_defaults(default_key) or ["** No Match **"]: + for v in webnotes.defaults.get_user_default_as_list(default_key) or ["** No Match **"]: match_conditions.append('`tab%s`.%s="%s"' % (data['doctype'], document_key, v))