diff --git a/frappe/core/page/permission_manager/permission_manager.js b/frappe/core/page/permission_manager/permission_manager.js
index fe4201a22a..a449a30629 100644
--- a/frappe/core/page/permission_manager/permission_manager.js
+++ b/frappe/core/page/permission_manager/permission_manager.js
@@ -80,7 +80,7 @@ frappe.PermissionEngine = Class.extend({
var me = this;
this.doctype_select
= this.wrapper.appframe.add_select("doctypes",
- [frappe._("Select Document Type")+"..."].concat(this.options.doctypes))
+ [{value: "", label: frappe._("Select Document Type")+"..."}].concat(this.options.doctypes))
.change(function() {
frappe.set_route("permission-manager", $(this).val());
});
@@ -90,13 +90,6 @@ frappe.PermissionEngine = Class.extend({
.change(function() {
me.refresh();
});
- this.standard_permissions_link = $('
')
- .appendTo(me.wrapper.appframe.parent.find(".appframe-form .container"))
- .css({"margin-top": "7px"})
- .find("a")
- .on("click", function() {
- return me.show_standard_permissions();
- });
this.set_from_route();
},
set_from_route: function() {
@@ -107,19 +100,15 @@ frappe.PermissionEngine = Class.extend({
this.refresh();
}
},
- show_standard_permissions: function() {
- return;
-
- var doctype = this.doctype_select.val();
+ get_standard_permissions: function(callback) {
+ var doctype = this.get_doctype();
if(doctype) {
- frappe.call({
+ return frappe.call({
module:"frappe.core",
page:"permission_manager",
method: "get_standard_permissions",
args: {doctype: doctype},
- callback: function(r) {
- console.log(r);
- }
+ callback: callback
});
}
return false;
@@ -127,7 +116,8 @@ frappe.PermissionEngine = Class.extend({
make_reset_button: function() {
var me = this;
me.reset_button = me.wrapper.appframe.set_title_right("Reset Permissions", function() {
- if(frappe.confirm("Reset Permissions for " + me.get_doctype() + "?", function() {
+ me.get_standard_permissions(function(data) {
+ var d = frappe.confirm("Reset Permissions for " + me.get_doctype() + "?", function() {
return frappe.call({
module:"frappe.core",
page:"permission_manager",
@@ -137,8 +127,27 @@ frappe.PermissionEngine = Class.extend({
},
callback: function() { me.refresh(); }
});
- }));
- }).toggle(false);
+ });
+
+ // show standard permissions
+ var $d = $(d.wrapper).find(".msgprint").append("
Standard Permissions
");
+ var $wrapper = $("").appendTo($d);
+ $.each(data.message, function(i, d) {
+ d.rights = [];
+ $.each(me.rights, function(i, r) {
+ if(d[r]===1) {
+ d.rights.push(r==="restrict" ? "Can Restrict" : toTitle(r));
+ }
+ });
+ d.rights = d.rights.join(", ");
+ d.match = d.match && "["+d.match+"]" || "";
+ $wrapper.append(repl('\
+
%(role)s, Level %(permlevel)s %(match)s
\
+
%(rights)s
\
+
', d));
+ });
+ });
+ }).toggle(false);
},
get_doctype: function() {
var doctype = this.doctype_select.val();
@@ -238,26 +247,23 @@ frappe.PermissionEngine = Class.extend({
var perm_cell = add_cell(row, d, "permissions").css("padding-top", 0);
var perm_container = $("").appendTo(perm_cell);
- add_check(perm_container, d, "read");
- add_check(perm_container, d, "restricted");
- add_check(perm_container, d, "write");
- add_check(perm_container, d, "create");
- add_check(perm_container, d, "delete");
- add_check(perm_container, d, "submit");
- add_check(perm_container, d, "cancel");
- add_check(perm_container, d, "amend");
- add_check(perm_container, d, "report");
- add_check(perm_container, d, "import");
- add_check(perm_container, d, "export");
- add_check(perm_container, d, "print");
- add_check(perm_container, d, "email");
- add_check(perm_container, d, "restrict", "Can Restrict");
-
+
+ $.each(me.rights, function(i, r) {
+ if(r==="restrict") {
+ add_check(perm_container, d, "restrict", "Can Restrict");
+ } else {
+ add_check(perm_container, d, r);
+ }
+ })
+
// buttons
me.add_match_button(row, d);
me.add_delete_button(row, d);
});
},
+ rights: ["read", "restricted", "write", "create", "delete", "submit", "cancel", "amend",
+ "report", "import", "export", "print", "email", "restrict"],
+
set_show_users: function(cell, role) {
cell.html(""+role+"")
.find("a")
@@ -427,11 +433,12 @@ frappe.PermissionEngine = Class.extend({
return frappe.call({
module: "frappe.core",
page: "permission_manager",
- method: "update_match",
+ method: "update",
args: {
name: perm.name,
doctype: perm.parent,
- match: match_value
+ ptype: "match",
+ value: match_value
},
callback: function() {
dialog.hide();
diff --git a/frappe/core/page/permission_manager/permission_manager.py b/frappe/core/page/permission_manager/permission_manager.py
index 0ee443cf09..0a418bbf92 100644
--- a/frappe/core/page/permission_manager/permission_manager.py
+++ b/frappe/core/page/permission_manager/permission_manager.py
@@ -4,6 +4,7 @@
from __future__ import unicode_literals
import frappe
import frappe.defaults
+from frappe.modules.import_file import get_file_path, read_doclist_from_file
@frappe.whitelist()
def get_roles_and_doctypes():
@@ -83,7 +84,8 @@ def get_users_with_role(role):
and tabUserRole.parent = tabProfile.name
and ifnull(tabProfile.enabled,0)=1""", role)]
-@frappe.whitelist
-def get_standard_permissions():
- # TODO
- pass
+@frappe.whitelist()
+def get_standard_permissions(doctype):
+ module = frappe.conn.get_value("DocType", doctype, "module")
+ path = get_file_path(module, "DocType", doctype)
+ return [d for d in read_doclist_from_file(path) if d.get("doctype")=="DocPerm"]
diff --git a/frappe/modules/import_file.py b/frappe/modules/import_file.py
index 44ef628e9c..2e43c752ba 100644
--- a/frappe/modules/import_file.py
+++ b/frappe/modules/import_file.py
@@ -17,44 +17,53 @@ def import_files(module, dt=None, dn=None, force=False):
def import_file(module, dt, dn, force=False):
"""Sync a file from txt if modifed, return false if not updated"""
+ path = get_file_path(module, dt, dn)
+ ret = import_file_by_path(path, force)
+ return ret
+
+def get_file_path(module, dt, dn):
dt, dn = scrub_dt_dn(dt, dn)
path = os.path.join(get_module_path(module),
os.path.join(dt, dn, dn + '.txt'))
+
+ return path
- ret = import_file_by_path(path, force)
- return ret
-
def import_file_by_path(path, force=False):
frappe.flags.in_import = True
+ doclist = read_doclist_from_file(path)
+
+ if doclist:
+ doc = doclist[0]
+
+ if not force:
+ # check if timestamps match
+ if doc['modified']==str(frappe.conn.get_value(doc['doctype'], doc['name'], 'modified')):
+ return False
+
+ original_modified = doc["modified"]
+
+ import_doclist(doclist)
+
+ # since there is a new timestamp on the file, update timestamp in
+ frappe.conn.sql("update `tab%s` set modified=%s where name=%s" % \
+ (doc['doctype'], '%s', '%s'),
+ (original_modified, doc['name']))
+
+ frappe.flags.in_import = False
+ return True
+
+def read_doclist_from_file(path):
+ doclist = None
if os.path.exists(path):
from frappe.modules.utils import peval_doclist
with open(path, 'r') as f:
doclist = peval_doclist(f.read())
-
- if doclist:
- doc = doclist[0]
-
- if not force:
- # check if timestamps match
- if doc['modified']==str(frappe.conn.get_value(doc['doctype'], doc['name'], 'modified')):
- return False
-
- original_modified = doc["modified"]
-
- import_doclist(doclist)
-
- # since there is a new timestamp on the file, update timestamp in
- frappe.conn.sql("update `tab%s` set modified=%s where name=%s" % \
- (doc['doctype'], '%s', '%s'),
- (original_modified, doc['name']))
-
else:
raise Exception, '%s missing' % path
-
- frappe.flags.in_import = False
- return True
+
+ return doclist
ignore_values = {
"Report": ["disabled"],
diff --git a/frappe/permissions.py b/frappe/permissions.py
index 51238b383b..5d872b419c 100644
--- a/frappe/permissions.py
+++ b/frappe/permissions.py
@@ -6,6 +6,9 @@ import frappe
from frappe import _, msgprint, _dict
from frappe.utils import cint
+rights = ["read", "write", "create", "submit", "cancel", "amend",
+ "report", "import", "export", "print", "email", "restrict", "delete", "restricted"]
+
def check_admin_or_system_manager():
if ("System Manager" not in frappe.get_roles()) and \
(frappe.session.user!="Administrator"):
@@ -43,9 +46,6 @@ def has_permission(doctype, ptype="read", refdoc=None, verbose=True):
return True
-rights = ["read", "write", "create", "submit", "cancel", "amend",
- "report", "import", "export", "print", "email", "restrict", "delete", "restricted"]
-
def get_user_perms(meta, user=None):
cache_key = (meta[0].name, user)
if not frappe.local.user_perms.get(cache_key):
diff --git a/frappe/public/js/frappe/dom.js b/frappe/public/js/frappe/dom.js
index cdc9bf48a5..b0b6127845 100644
--- a/frappe/public/js/frappe/dom.js
+++ b/frappe/public/js/frappe/dom.js
@@ -239,7 +239,7 @@ frappe.dom.set_box_shadow = function(ele, spread) {
// create options
for(var i=0; i').html(label).attr('value', value).appendTo(this);
}
diff --git a/frappe/public/js/frappe/ui/messages.js b/frappe/public/js/frappe/ui/messages.js
index 530dd2a2fd..1f5c185f34 100644
--- a/frappe/public/js/frappe/ui/messages.js
+++ b/frappe/public/js/frappe/ui/messages.js
@@ -34,6 +34,8 @@ frappe.confirm = function(message, ifyes, ifno) {
d.hide();
ifno && ifno();
});
+
+ return d;
}
var msg_dialog=null;