[fix] apply permission in timeline (version)
This commit is contained in:
parent
e329962756
commit
80e7e0bf29
3 changed files with 128 additions and 80 deletions
|
|
@ -365,86 +365,125 @@ frappe.ui.form.Timeline = Class.extend({
|
|||
out = [].concat(docinfo.communications);
|
||||
|
||||
if(with_versions) {
|
||||
var add_comment = function(version, text, comment_type) {
|
||||
if(!comment_type) {
|
||||
text = '<a href="#Form/Version/'+version.name+'">' + text + '</a>';
|
||||
}
|
||||
out.push({
|
||||
comment_type: comment_type || 'Edit',
|
||||
creation: version.creation,
|
||||
owner: version.owner,
|
||||
version_name: version.name,
|
||||
sender: version.owner,
|
||||
comment_by: version.owner,
|
||||
content: text
|
||||
});
|
||||
}
|
||||
|
||||
docinfo.versions.forEach(function(version) {
|
||||
if(!version.data) return;
|
||||
var data = JSON.parse(version.data);
|
||||
|
||||
// comment
|
||||
if(data.comment) {
|
||||
add_comment(version, data.comment, data.comment_type);
|
||||
return;
|
||||
}
|
||||
|
||||
// value changed in parent
|
||||
if(data.changed && data.changed.length) {
|
||||
var parts = [];
|
||||
data.changed.slice(0, 3).forEach(function(p) {
|
||||
if(p[0]==='docstatus') {
|
||||
if(p[2]==1) {
|
||||
add_comment(version, __('submitted this document'));
|
||||
} else if (p[2]==2) {
|
||||
add_comment(version, __('cancelled this document'));
|
||||
}
|
||||
} else {
|
||||
parts.push(__('{0} from {1} to {2}', [
|
||||
frappe.meta.get_label(me.frm.doctype, p[0]),
|
||||
(frappe.ellipsis(p[1], 40) || '""').bold(),
|
||||
(frappe.ellipsis(p[2], 40) || '""').bold()
|
||||
]));
|
||||
}
|
||||
});
|
||||
add_comment(version, __("changed value of {0}", [parts.join(', ')]));
|
||||
}
|
||||
|
||||
// value changed in table field
|
||||
if(data.row_changed && data.row_changed.length) {
|
||||
var parts = [], count = 0;
|
||||
data.row_changed.every(function(row) {
|
||||
row[3].every(function(p) {
|
||||
parts.push(__('{0} from {1} to {2} in row #{3}', [
|
||||
frappe.meta.get_label(me.frm.fields_dict[row[0]].grid.doctype,
|
||||
p[0]),
|
||||
(frappe.ellipsis(p[1], 40) || '""').bold(),
|
||||
(frappe.ellipsis(p[2], 40) || '""').bold(),
|
||||
row[1]
|
||||
]));
|
||||
return parts.length < 3;
|
||||
});
|
||||
return parts.length < 3;
|
||||
});
|
||||
add_comment(version, __("changed values for {0}",
|
||||
[parts.join(', ')]));
|
||||
}
|
||||
|
||||
// rows added / removed
|
||||
// __('added'), __('removed') # for translation, don't remove
|
||||
['added', 'removed'].forEach(function(key) {
|
||||
if(data[key] && data[key].length) {
|
||||
parts = (data[key] || []).map(function(p) {
|
||||
return frappe.meta.get_label(me.frm.doctype, p[0]) });
|
||||
add_comment(version, __("{0} rows for {1}",
|
||||
[__(key), parts.join(', ')]));
|
||||
}
|
||||
});
|
||||
});
|
||||
this.build_version_comments(docinfo, out);
|
||||
}
|
||||
return out;
|
||||
},
|
||||
build_version_comments: function(docinfo, out) {
|
||||
var me = this;
|
||||
|
||||
docinfo.versions.forEach(function(version) {
|
||||
if(!version.data) return;
|
||||
var data = JSON.parse(version.data);
|
||||
|
||||
// comment
|
||||
if(data.comment) {
|
||||
out.push(this.get_version_comment(version, data.comment, data.comment_type));
|
||||
return;
|
||||
}
|
||||
|
||||
// value changed in parent
|
||||
if(data.changed && data.changed.length) {
|
||||
var parts = [];
|
||||
data.changed.every(function(p) {
|
||||
if(p[0]==='docstatus') {
|
||||
if(p[2]==1) {
|
||||
out.push(me.get_version_comment(version, __('submitted this document')));
|
||||
} else if (p[2]==2) {
|
||||
out.push(me.get_version_comment(version, __('cancelled this document')));
|
||||
}
|
||||
} else {
|
||||
var df = frappe.meta.get_docfield(me.frm.doctype, p[0], me.frm.docname);
|
||||
if(!df.hidden) {
|
||||
var field_display_status = frappe.perm.get_field_display_status(df, null,
|
||||
me.frm.perm);
|
||||
if(field_display_status === 'Read' || field_display_status === 'Write') {
|
||||
parts.push(__('{0} from {1} to {2}', [
|
||||
__(df.label),
|
||||
(frappe.ellipsis(p[1], 40) || '""').bold(),
|
||||
(frappe.ellipsis(p[2], 40) || '""').bold()
|
||||
]));
|
||||
}
|
||||
}
|
||||
}
|
||||
return parts.length < 3;
|
||||
});
|
||||
if(parts.length) {
|
||||
out.push(me.get_version_comment(version, __("changed value of {0}", [parts.join(', ')])));
|
||||
}
|
||||
}
|
||||
|
||||
// value changed in table field
|
||||
if(data.row_changed && data.row_changed.length) {
|
||||
var parts = [], count = 0;
|
||||
data.row_changed.every(function(row) {
|
||||
row[3].every(function(p) {
|
||||
var df = frappe.meta.get_docfield(me.frm.fields_dict[row[0]].grid.doctype,
|
||||
p[0], me.frm.docname);
|
||||
|
||||
if(!df.hidden) {
|
||||
field_display_status = frappe.perm.get_field_display_status(df,
|
||||
null, me.frm.perm);
|
||||
|
||||
if(field_display_status === 'Read' || field_display_status === 'Write') {
|
||||
parts.push(__('{0} from {1} to {2} in row #{3}', [
|
||||
frappe.meta.get_label(me.frm.fields_dict[row[0]].grid.doctype,
|
||||
p[0]),
|
||||
(frappe.ellipsis(p[1], 40) || '""').bold(),
|
||||
(frappe.ellipsis(p[2], 40) || '""').bold(),
|
||||
row[1]
|
||||
]));
|
||||
}
|
||||
}
|
||||
return parts.length < 3;
|
||||
});
|
||||
return parts.length < 3;
|
||||
});
|
||||
if(parts.length) {
|
||||
out.push(me.get_version_comment(version, __("changed values for {0}",
|
||||
[parts.join(', ')])));
|
||||
}
|
||||
}
|
||||
|
||||
// rows added / removed
|
||||
// __('added'), __('removed') # for translation, don't remove
|
||||
['added', 'removed'].forEach(function(key) {
|
||||
if(data[key] && data[key].length) {
|
||||
parts = (data[key] || []).map(function(p) {
|
||||
var df = frappe.meta.get_docfield(me.frm.doctype, p[0], me.frm.docname);
|
||||
if(!df.hidden) {
|
||||
var field_display_status = frappe.perm.get_field_display_status(df, null,
|
||||
me.frm.perm);
|
||||
|
||||
if(field_display_status === 'Read' || field_display_status === 'Write') {
|
||||
return frappe.meta.get_label(me.frm.doctype, p[0])
|
||||
}
|
||||
}
|
||||
});
|
||||
parts = parts.filter(function(p) { return p; });
|
||||
if(parts.length) {
|
||||
out.push(me.get_version_comment(version, __("{0} rows for {1}",
|
||||
[__(key), parts.join(', ')])));
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
},
|
||||
get_version_comment: function(version, text, comment_type) {
|
||||
if(!comment_type) {
|
||||
text = '<a href="#Form/Version/'+version.name+'">' + text + '</a>';
|
||||
}
|
||||
return {
|
||||
comment_type: comment_type || 'Edit',
|
||||
creation: version.creation,
|
||||
owner: version.owner,
|
||||
version_name: version.name,
|
||||
sender: version.owner,
|
||||
comment_by: version.owner,
|
||||
content: text
|
||||
};
|
||||
},
|
||||
|
||||
add_comment: function(btn) {
|
||||
var txt = this.input.val();
|
||||
|
||||
|
|
|
|||
|
|
@ -255,11 +255,16 @@ $.extend(frappe.perm, {
|
|||
},
|
||||
|
||||
get_field_display_status: function(df, doc, perm, explain) {
|
||||
if(!doc) {
|
||||
// returns the display status of a particular field
|
||||
// returns one of "Read", "Write" or "None"
|
||||
if(!perm && doc) {
|
||||
perm = frappe.perm.get_perm(doc.doctype, doc);
|
||||
}
|
||||
|
||||
if(!perm) {
|
||||
return (df && (cint(df.hidden) || cint(df.hidden_due_to_dependency))) ? "None": "Write";
|
||||
}
|
||||
|
||||
perm = perm || frappe.perm.get_perm(doc.doctype, doc);
|
||||
if(!df.permlevel) df.permlevel = 0;
|
||||
var p = perm[df.permlevel];
|
||||
var status = "None";
|
||||
|
|
@ -282,6 +287,10 @@ $.extend(frappe.perm, {
|
|||
if(cint(df.hidden_due_to_dependency)) status = "None";
|
||||
if(explain) console.log("By Hidden Due To Dependency:" + status);
|
||||
|
||||
if(!doc) {
|
||||
return status;
|
||||
}
|
||||
|
||||
// submit
|
||||
if(status==="Write" && cint(doc.docstatus) > 0) status = "Read";
|
||||
if(explain) console.log("By Submit:" + status);
|
||||
|
|
|
|||
|
|
@ -282,7 +282,7 @@ frappe.search.verbs = [
|
|||
out.push({
|
||||
label: __("{0} Calendar", [__(match).bold()]),
|
||||
value: __("{0} Calendar", [__(match)]),
|
||||
route:["Calendar", match]
|
||||
route:["List", match, "Calendar"]
|
||||
});
|
||||
|
||||
out.push({
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue