merge
This commit is contained in:
commit
05c339cea7
@ -1186,7 +1186,6 @@ div.psidebar div.section-item, div.psidebar .section-link {
|
||||
font-size: 11px;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
/*
|
||||
* lib/css/bootstrap/headings.css
|
||||
*//* heading from bootstrap */
|
||||
@ -2089,12 +2088,6 @@ button.btn.small, input[type="submit"].btn.small {
|
||||
right: 13px;
|
||||
}
|
||||
|
||||
/*extra size menus for recent*/
|
||||
.dropdown-menu#toolbar-recent, .dropdown-menu#toolbar-options, .dropdown-menu#toolbar-help{
|
||||
width: 260px !important;
|
||||
max-width: 260px !important;
|
||||
}
|
||||
|
||||
/* ajax spinner */
|
||||
.navbar #spinner {
|
||||
display: block;
|
||||
@ -2108,6 +2101,7 @@ button.btn.small, input[type="submit"].btn.small {
|
||||
.navbar-inner {
|
||||
padding: 0px 20px;
|
||||
}
|
||||
|
||||
/*
|
||||
* lib/css/bootstrap/dropdown.css
|
||||
*/.dropdown {
|
||||
@ -2844,11 +2838,41 @@ body {
|
||||
.navbar-new-comments {
|
||||
margin: -3px 0px;
|
||||
padding: 2px;
|
||||
font-size: 14px;
|
||||
color: #fff;
|
||||
background-color: #B00D07;
|
||||
min-width: 20px;
|
||||
text-align: center;
|
||||
display: inline-block;
|
||||
border-radius: 2px;
|
||||
color: #999999;
|
||||
background-color: #333131;
|
||||
}
|
||||
|
||||
.navbar-new-comments:hover,
|
||||
.navbar-new-comments:active,
|
||||
.navbar-new-comments:focus {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
|
||||
.navbar-new-comments-true {
|
||||
color: #fff;
|
||||
background-color: #B00D07;
|
||||
}
|
||||
|
||||
.navbar-icon-home {
|
||||
vertical-align: middle;
|
||||
opacity:0.4;
|
||||
Filter:alpha(opacity=40); /* For IE8 and earlier */
|
||||
}
|
||||
|
||||
.navbar-icon-home:hover,
|
||||
.navbar-icon-home:focus,
|
||||
.navbar-icon-home:active {
|
||||
opacity:1;
|
||||
Filter:alpha(opacity=100); /* For IE8 and earlier */
|
||||
}
|
||||
|
||||
/*extra size menus for recent*/
|
||||
.dropdown-menu#toolbar-recent, .dropdown-menu#toolbar-options, .dropdown-menu#toolbar-help{
|
||||
min-width: 160px !important;
|
||||
max-width: 260px !important;
|
||||
}
|
||||
|
@ -1316,12 +1316,6 @@ button.btn.small, input[type="submit"].btn.small {
|
||||
right: 13px;
|
||||
}
|
||||
|
||||
/*extra size menus for recent*/
|
||||
.dropdown-menu#toolbar-recent, .dropdown-menu#toolbar-options, .dropdown-menu#toolbar-help{
|
||||
width: 260px !important;
|
||||
max-width: 260px !important;
|
||||
}
|
||||
|
||||
/* ajax spinner */
|
||||
.navbar #spinner {
|
||||
display: block;
|
||||
@ -1335,6 +1329,7 @@ button.btn.small, input[type="submit"].btn.small {
|
||||
.navbar-inner {
|
||||
padding: 0px 20px;
|
||||
}
|
||||
|
||||
/*
|
||||
* lib/css/bootstrap/dropdown.css
|
||||
*/.dropdown {
|
||||
@ -1651,13 +1646,43 @@ body {
|
||||
.navbar-new-comments {
|
||||
margin: -3px 0px;
|
||||
padding: 2px;
|
||||
font-size: 14px;
|
||||
color: #fff;
|
||||
background-color: #B00D07;
|
||||
min-width: 20px;
|
||||
text-align: center;
|
||||
display: inline-block;
|
||||
border-radius: 2px;
|
||||
color: #999999;
|
||||
background-color: #333131;
|
||||
}
|
||||
|
||||
.navbar-new-comments:hover,
|
||||
.navbar-new-comments:active,
|
||||
.navbar-new-comments:focus {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
|
||||
.navbar-new-comments-true {
|
||||
color: #fff;
|
||||
background-color: #B00D07;
|
||||
}
|
||||
|
||||
.navbar-icon-home {
|
||||
vertical-align: middle;
|
||||
opacity:0.4;
|
||||
Filter:alpha(opacity=40); /* For IE8 and earlier */
|
||||
}
|
||||
|
||||
.navbar-icon-home:hover,
|
||||
.navbar-icon-home:focus,
|
||||
.navbar-icon-home:active {
|
||||
opacity:1;
|
||||
Filter:alpha(opacity=100); /* For IE8 and earlier */
|
||||
}
|
||||
|
||||
/*extra size menus for recent*/
|
||||
.dropdown-menu#toolbar-recent, .dropdown-menu#toolbar-options, .dropdown-menu#toolbar-help{
|
||||
min-width: 160px !important;
|
||||
max-width: 260px !important;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -78,7 +78,7 @@ erpnext.desktop.render = function() {
|
||||
}
|
||||
|
||||
erpnext.desktop.show_pending_notifications = function() {
|
||||
$('#messages a:first').prepend('<div id="msg_count" class="circle">\
|
||||
$('#messages a:first').prepend('<div id="msg_count" class="circle" title="Unread Messages">\
|
||||
<span class="circle-text"></span></div>');
|
||||
$('#msg_count').toggle(false);
|
||||
update_messages();
|
||||
|
@ -1,4 +1,8 @@
|
||||
<div class="layout_wrapper">
|
||||
<div id="pe_header"></div>
|
||||
<div id="perm_engine_div" style="margin: 16px;"></div>
|
||||
<div id="submittable_warning" class='help-box' style='display: None'>
|
||||
One of the Roles has <b>Submit</b> permission.
|
||||
You will have to <b>Cancel</b> and then <b>Amend</b> a submitted Document for making changes.
|
||||
</div>
|
||||
</div>
|
@ -15,399 +15,423 @@
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
pscript['onload_Permission Engine'] = function() {
|
||||
// header and toolbar
|
||||
var h = new PageHeader('pe_header','Permissions Manager','Set specific permissions for Roles')
|
||||
// header and toolbar
|
||||
var h = new PageHeader('pe_header','Permissions Manager','Set specific permissions for Roles')
|
||||
|
||||
if(!pscript.perm_engine) pscript.perm_engine = new pscript.PermEngine();
|
||||
if(!pscript.perm_engine) pscript.perm_engine = new pscript.PermEngine();
|
||||
}
|
||||
|
||||
|
||||
pscript.PermEngine = function() {
|
||||
// create UI elements
|
||||
this.wrapper = $i('perm_engine_div');
|
||||
// create UI elements
|
||||
this.wrapper = $i('perm_engine_div');
|
||||
|
||||
this.head = $a(this.wrapper, 'div');
|
||||
this.body = $a(this.wrapper, 'div');
|
||||
this.footer = $a(this.wrapper, 'div');
|
||||
this.head = $a(this.wrapper, 'div');
|
||||
this.body = $a(this.wrapper, 'div');
|
||||
this.footer = $a(this.wrapper, 'div');
|
||||
|
||||
var lab = $a(this.body,'div', '', {backgroundColor:'#FFD', padding:'8px', margin:'16px 0px'});
|
||||
lab.innerHTML = 'Please select the item for which you want to set permissions';
|
||||
var lab = $a(this.body,'div', '', {backgroundColor:'#FFD', padding:'8px', margin:'16px 0px'});
|
||||
lab.innerHTML = 'Please select the item for which you want to set permissions';
|
||||
|
||||
this.make_head();
|
||||
this.load_options();
|
||||
this.make_head();
|
||||
this.load_options();
|
||||
}
|
||||
|
||||
|
||||
// Make Head
|
||||
// -------------
|
||||
pscript.PermEngine.prototype.make_head = function() {
|
||||
var me = this;
|
||||
var me = this;
|
||||
|
||||
var make_select = function(label) {
|
||||
var w = $a(me.head, 'div', '', {margin:'8px 0px'});
|
||||
var t = make_table(w,1,2,'300px',['50%','50%']);
|
||||
$td(t,0,0).innerHTML = label;
|
||||
var s = $a($td(t,0,1),'select','',{width:'140px'});
|
||||
s.wrapper = w;
|
||||
return s;
|
||||
}
|
||||
var make_select = function(label) {
|
||||
var w = $a(me.head, 'div', '', {margin:'8px 0px'});
|
||||
var t = make_table(w,1,2,'300px',['50%','50%']);
|
||||
$td(t,0,0).innerHTML = label;
|
||||
var s = $a($td(t,0,1),'select','',{width:'140px'});
|
||||
s.wrapper = w;
|
||||
return s;
|
||||
}
|
||||
|
||||
var make_button = function(label, parent, green) {
|
||||
return $btn(parent, label, null, {margin:'8px 0px', display:'none'}, (green ? 'green' : null));
|
||||
}
|
||||
var make_button = function(label, parent, green) {
|
||||
return $btn(parent, label, null, {margin:'8px 0px', display:'none'}, (green ? 'green' : null));
|
||||
}
|
||||
|
||||
|
||||
// Set Permissions for
|
||||
this.type_select = make_select('Set Permissions For');
|
||||
this.type_select.onchange = function() {
|
||||
me.get_permissions();
|
||||
}
|
||||
// Set Permissions for
|
||||
this.type_select = make_select('Set Permissions For');
|
||||
this.type_select.onchange = function() {
|
||||
me.get_permissions();
|
||||
}
|
||||
|
||||
// Update Button
|
||||
this.add_button = make_button('+ Add A New Rule', this.head, 0);
|
||||
this.add_button.onclick = function() {
|
||||
me.add_permission();
|
||||
}
|
||||
// Update Button
|
||||
this.add_button = make_button('+ Add A New Rule', this.head, 0);
|
||||
this.add_button.onclick = function() {
|
||||
me.add_permission();
|
||||
}
|
||||
|
||||
// Update Button
|
||||
this.update_button = make_button('Update', this.footer, 1);
|
||||
this.update_button.onclick = function() {
|
||||
me.update_permissions();
|
||||
}
|
||||
// Update Button
|
||||
this.update_button = make_button('Update', this.footer, 1);
|
||||
this.update_button.onclick = function() {
|
||||
me.update_permissions();
|
||||
}
|
||||
}
|
||||
|
||||
// Add Permissions
|
||||
// -----------------
|
||||
pscript.PermEngine.prototype.add_permission = function() {
|
||||
var me = this;
|
||||
if(!this.add_permission_dialog) {
|
||||
var me = this;
|
||||
if(!this.add_permission_dialog) {
|
||||
|
||||
// dialog
|
||||
var d = new Dialog(400,400,'Add Permission');
|
||||
d.make_body([['Select','Role'],['Select','Level'],['Button','Add']])
|
||||
// dialog
|
||||
var d = new Dialog(400,400,'Add Permission');
|
||||
d.make_body([['Select','Role'],['Select','Level'],['Button','Add']])
|
||||
|
||||
add_sel_options(d.widgets['Role'], this.roles, '');
|
||||
add_sel_options(d.widgets['Level'], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 0);
|
||||
add_sel_options(d.widgets['Role'], this.roles, '');
|
||||
add_sel_options(d.widgets['Level'], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 0);
|
||||
|
||||
// add
|
||||
d.widgets['Add'].onclick = function() {
|
||||
if(!sel_val(d.widgets['Role'])) {
|
||||
msgprint('Please select Role'); return;
|
||||
}
|
||||
var callback = function(r, rt) {
|
||||
// reload
|
||||
me.get_permissions();
|
||||
d.hide();
|
||||
}
|
||||
$c_obj('Permission Control','add_permission',JSON.stringify([sel_val(me.type_select), sel_val(d.widgets['Role']), sel_val(d.widgets['Level'])]), callback);
|
||||
}
|
||||
// add
|
||||
d.widgets['Add'].onclick = function() {
|
||||
if(!sel_val(d.widgets['Role'])) {
|
||||
msgprint('Please select Role'); return;
|
||||
}
|
||||
var callback = function(r, rt) {
|
||||
// reload
|
||||
me.get_permissions();
|
||||
d.hide();
|
||||
}
|
||||
$c_obj('Permission Control','add_permission',JSON.stringify([sel_val(me.type_select), sel_val(d.widgets['Role']), sel_val(d.widgets['Level'])]), callback);
|
||||
}
|
||||
|
||||
this.add_permission_dialog = d;
|
||||
}
|
||||
this.add_permission_dialog.show();
|
||||
this.add_permission_dialog = d;
|
||||
}
|
||||
this.add_permission_dialog.show();
|
||||
}
|
||||
|
||||
|
||||
// Hide Fields
|
||||
// -----------------
|
||||
pscript.PermEngine.prototype.hide_fields = function() {
|
||||
$dh(this.role_select.wrapper);
|
||||
this.type_select.disabled = false;
|
||||
this.body.innerHTML = '';
|
||||
$dh(this.role_select.wrapper);
|
||||
this.type_select.disabled = false;
|
||||
this.body.innerHTML = '';
|
||||
}
|
||||
|
||||
|
||||
// Load Roles And Modules
|
||||
// -----------------------
|
||||
pscript.PermEngine.prototype.load_options = function() {
|
||||
var me = this;
|
||||
$dh(me.update_button);
|
||||
$dh(me.add_button);
|
||||
var me = this;
|
||||
$dh(me.update_button);
|
||||
$dh(me.add_button);
|
||||
|
||||
$c_obj('Permission Control','get_doctype_list','', function(r,rt) {
|
||||
me.roles = r.message.roles;
|
||||
$c_obj('Permission Control','get_doctype_list','', function(r,rt) {
|
||||
me.roles = r.message.roles;
|
||||
|
||||
// Type
|
||||
empty_select(me.type_select);
|
||||
add_sel_options(me.type_select,add_lists([''], r.message.doctypes));
|
||||
// Type
|
||||
empty_select(me.type_select);
|
||||
add_sel_options(me.type_select,add_lists([''], r.message.doctypes));
|
||||
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// Get DocType and Permissions related to module
|
||||
// --------------------------------------------------
|
||||
pscript.PermEngine.prototype.get_permissions = function() {
|
||||
var me = this;
|
||||
var me = this;
|
||||
|
||||
if(!sel_val(me.type_select)) {
|
||||
msgprint('Please select a type first!'); return;
|
||||
}
|
||||
if(!sel_val(me.type_select)) {
|
||||
msgprint('Please select a type first!'); return;
|
||||
}
|
||||
|
||||
$c_obj('Permission Control','get_permissions',sel_val(me.type_select), function(r,rt) {
|
||||
// Get permissions
|
||||
if(r.message.perms.length)me.get_results(r.message);
|
||||
else me.body.innerHTML = '<div style = "color : red; margin:8px 0px;">No Records Found</div>'
|
||||
});
|
||||
$c_obj('Permission Control','get_permissions',sel_val(me.type_select), function(r,rt) {
|
||||
// Get permissions
|
||||
if(r.message.perms.length) {
|
||||
me.get_results(r.message);
|
||||
}
|
||||
else me.body.innerHTML = '<div style = "color : red; margin:8px 0px;">No Records Found</div>'
|
||||
pscript.show_submittable();
|
||||
});
|
||||
}
|
||||
|
||||
// Get Results
|
||||
// ------------------
|
||||
pscript.PermEngine.prototype.get_results = function(r){
|
||||
var perms = r.perms;
|
||||
var me = this;
|
||||
var doctype = sel_val(me.type_select);
|
||||
var perms = r.perms;
|
||||
var me = this;
|
||||
var doctype = sel_val(me.type_select);
|
||||
|
||||
// show update button
|
||||
$ds(me.update_button);
|
||||
$ds(me.add_button);
|
||||
// show update button
|
||||
$ds(me.update_button);
|
||||
$ds(me.add_button);
|
||||
|
||||
this.body.innerHTML = ''
|
||||
pscript.all_checkboxes = [];
|
||||
pscript.all_matches = [];
|
||||
this.body.innerHTML = ''
|
||||
pscript.all_checkboxes = [];
|
||||
pscript.all_matches = [];
|
||||
|
||||
var head = $a(this.body, 'h3'); head.innerHTML = 'Rules for ' + doctype;
|
||||
var permt = make_table(me.body, perms.length+1,9,'80%',[],{border:'1px solid #AAA', padding:'3px', verticalAlign:'middle', height:'30px'});
|
||||
var head = $a(this.body, 'h3'); head.innerHTML = 'Rules for ' + doctype;
|
||||
var permt = make_table(me.body, perms.length+1,9,'80%',[],{border:'1px solid #AAA', padding:'3px', verticalAlign:'middle', height:'30px'});
|
||||
|
||||
// Create Grid for particular DocType
|
||||
// ------------------------------------
|
||||
// Create Grid for particular DocType
|
||||
// ------------------------------------
|
||||
|
||||
// Columns
|
||||
var col_labels = ['Role','Level','Read','Write','Create','Submit','Cancel','Amend','Restrict By']
|
||||
for(var n = 0; n < col_labels.length; n++){
|
||||
$y($td(permt,0,n), {backgroundColor:'#DDD', width:(n==0?'30%':(n==8?'21%':'7%'))})
|
||||
$td(permt,0,n).innerHTML = col_labels[n];
|
||||
$td(permt,0,n).fieldname = col_labels[n].toLowerCase();
|
||||
}
|
||||
// Columns
|
||||
var col_labels = ['Role','Level','Read','Write','Create','Submit','Cancel','Amend','Restrict By']
|
||||
for(var n = 0; n < col_labels.length; n++){
|
||||
$y($td(permt,0,n), {backgroundColor:'#DDD', width:(n==0?'30%':(n==8?'21%':'7%'))})
|
||||
$td(permt,0,n).innerHTML = col_labels[n];
|
||||
$td(permt,0,n).fieldname = col_labels[n].toLowerCase();
|
||||
}
|
||||
|
||||
// Rows for Column Level / Role
|
||||
for(var j = 0; j < perms.length; j++){
|
||||
var plevel = $a($td(permt,j+1,1), 'span', 'link_type');
|
||||
plevel.innerHTML = perms[j].permlevel;
|
||||
plevel.doctype = doctype;
|
||||
plevel.value = perms[j].permlevel;
|
||||
plevel.onclick = function() {me.get_fields(this.doctype, this.value)}
|
||||
// Rows for Column Level / Role
|
||||
for(var j = 0; j < perms.length; j++){
|
||||
var plevel = $a($td(permt,j+1,1), 'span', 'link_type');
|
||||
plevel.innerHTML = perms[j].permlevel;
|
||||
plevel.doctype = doctype;
|
||||
plevel.value = perms[j].permlevel;
|
||||
plevel.onclick = function() {me.get_fields(this.doctype, this.value)}
|
||||
|
||||
// role
|
||||
$td(permt,j+1,0).innerHTML = perms[j].role;
|
||||
// role
|
||||
$td(permt,j+1,0).innerHTML = perms[j].role;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// Get values
|
||||
for(var l = 0; l < perms.length; l++){
|
||||
for(var m = 0; m < 6; m++){ // (read,write,create,submit,cancel,amend)
|
||||
var chk = $a_input($td(permt,l+1,m+2), 'checkbox');
|
||||
var val = perms[l][$td(permt,0,m+2).fieldname];
|
||||
if(val == 1) chk.checked = 1;
|
||||
else chk.checked = 0;
|
||||
chk.doctype = doctype;
|
||||
chk.permlevel = perms[l].permlevel; chk.perm_type = col_labels[m+2].toLowerCase(); chk.role = perms[l].role;
|
||||
pscript.all_checkboxes.push(chk);
|
||||
}
|
||||
}
|
||||
// Get values
|
||||
for(var l = 0; l < perms.length; l++){
|
||||
for(var m = 0; m < 6; m++){ // (read,write,create,submit,cancel,amend)
|
||||
var chk = $a_input($td(permt,l+1,m+2), 'checkbox');
|
||||
var val = perms[l][$td(permt,0,m+2).fieldname];
|
||||
if(val == 1) chk.checked = 1;
|
||||
else chk.checked = 0;
|
||||
|
||||
// add selects for match
|
||||
me.add_match_select(r, perms, permt, doctype);
|
||||
if(m==3) { chk.onclick = pscript.show_submittable }
|
||||
|
||||
chk.doctype = doctype;
|
||||
chk.permlevel = perms[l].permlevel; chk.perm_type = col_labels[m+2].toLowerCase(); chk.role = perms[l].role;
|
||||
pscript.all_checkboxes.push(chk);
|
||||
}
|
||||
}
|
||||
|
||||
// add selects for match
|
||||
me.add_match_select(r, perms, permt, doctype);
|
||||
}
|
||||
|
||||
// Show submittable warning
|
||||
pscript.show_submittable = function() {
|
||||
var submittable = 0;
|
||||
for(i in pscript.all_checkboxes) {
|
||||
c = pscript.all_checkboxes[i];
|
||||
if(c.perm_type=='submit' && c.checked) {
|
||||
submittable = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(submittable) {
|
||||
$('#submittable_warning').toggle(true);
|
||||
} else {
|
||||
$('#submittable_warning').toggle(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// render selects for match
|
||||
// --------------------------------------------
|
||||
|
||||
pscript.PermEngine.prototype.add_match_select = function(r, perms, permt, doctype) {
|
||||
var me = this;
|
||||
var me = this;
|
||||
|
||||
// add select for match
|
||||
for(var i=0; i<perms.length; i++) {
|
||||
if(perms[i].permlevel==0) {
|
||||
// select
|
||||
var sel = $a($td(permt,i+1,8),'select','',{width:'100%'});
|
||||
add_sel_options(sel, r.fields);
|
||||
sel.details = perms[i]; sel.details.parent = doctype;
|
||||
sel.onchange = function() {
|
||||
if(sel_val(this) && sel_val(this)!='owner') $ds(this.div);
|
||||
else $dh(this.div); }
|
||||
// add select for match
|
||||
for(var i=0; i<perms.length; i++) {
|
||||
if(perms[i].permlevel==0) {
|
||||
// select
|
||||
var sel = $a($td(permt,i+1,8),'select','',{width:'100%'});
|
||||
add_sel_options(sel, r.fields);
|
||||
sel.details = perms[i]; sel.details.parent = doctype;
|
||||
sel.onchange = function() {
|
||||
if(sel_val(this) && sel_val(this)!='owner') $ds(this.div);
|
||||
else $dh(this.div); }
|
||||
|
||||
// link
|
||||
var div = $a($td(permt,i+1,8),'div','link_type',{marginTop: '2px', fontSize:'10px', display:'none'});
|
||||
div.onclick = function() { this.details.match = sel_val(this.sel); me.show_match_dialog(this.details); }
|
||||
div.innerHTML = 'Set Users / Roles';
|
||||
div.details = perms[i];
|
||||
sel.div = div; div.sel = sel;
|
||||
// link
|
||||
var div = $a($td(permt,i+1,8),'div','link_type',{marginTop: '2px', fontSize:'10px', display:'none'});
|
||||
div.onclick = function() { this.details.match = sel_val(this.sel); me.show_match_dialog(this.details); }
|
||||
div.innerHTML = 'Set Users / Roles';
|
||||
div.details = perms[i];
|
||||
sel.div = div; div.sel = sel;
|
||||
|
||||
// set the value
|
||||
if(perms[i].match) { sel.value = perms[i].match; $ds(div); }
|
||||
// set the value
|
||||
if(perms[i].match) { sel.value = perms[i].match; $ds(div); }
|
||||
|
||||
pscript.all_matches.push(sel);
|
||||
}
|
||||
}
|
||||
pscript.all_matches.push(sel);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// match users Dialog
|
||||
// =======================================================
|
||||
|
||||
pscript.PermEngine.prototype.show_match_dialog=function(details) {
|
||||
if(!this.match_defaults_dialog) {
|
||||
var d = new Dialog(750, 500, 'Permission Applies To');
|
||||
d.make_body([['HTML','Body']]);
|
||||
var w = d.widgets['Body'];
|
||||
$y(w,{height:'350px', overflow:'auto'});
|
||||
this.match_defaults_dialog = d;
|
||||
}
|
||||
if(!this.match_defaults_dialog) {
|
||||
var d = new Dialog(750, 500, 'Permission Applies To');
|
||||
d.make_body([['HTML','Body']]);
|
||||
var w = d.widgets['Body'];
|
||||
$y(w,{height:'350px', overflow:'auto'});
|
||||
this.match_defaults_dialog = d;
|
||||
}
|
||||
|
||||
// dialog
|
||||
this.match_defaults_dialog.show();
|
||||
// dialog
|
||||
this.match_defaults_dialog.show();
|
||||
|
||||
// render the rules
|
||||
var me = this;
|
||||
var callback = function(r,rt) {
|
||||
me.render_match_dialog(r, details);
|
||||
}
|
||||
// load the rules
|
||||
$c_obj('Permission Control','get_defaults', details.match + '~~~' + (this.profiles ? 'No' : 'Yes'), callback);
|
||||
// render the rules
|
||||
var me = this;
|
||||
var callback = function(r,rt) {
|
||||
me.render_match_dialog(r, details);
|
||||
}
|
||||
// load the rules
|
||||
$c_obj('Permission Control','get_defaults', details.match + '~~~' + (this.profiles ? 'No' : 'Yes'), callback);
|
||||
}
|
||||
|
||||
// --------------------------------------------
|
||||
|
||||
pscript.PermEngine.prototype.render_match_dialog=function(r, details) {
|
||||
var d = this.match_defaults_dialog;
|
||||
var w = d.widgets['Body'];
|
||||
w.innerHTML = '<div style="background-color:#FFD; padding: 4px; color: #440; margin-bottom:16px">Please Note: Any action will also affect other permissions with similar rules!</div>'
|
||||
var d = this.match_defaults_dialog;
|
||||
var w = d.widgets['Body'];
|
||||
w.innerHTML = '<div style="background-color:#FFD; padding: 4px; color: #440; margin-bottom:16px">Please Note: Any action will also affect other permissions with similar rules!</div>'
|
||||
|
||||
// header
|
||||
var t=make_table($a(w,'div','',{borderBottom:'1px solid #AAA'}),1,3,'90%',['40%','40%','20%'],{fontWeight:'bold', padding:'3px', fontSize:'14px'});
|
||||
$td(t,0,0).innerHTML = 'Who?'; $td(t,0,1).innerHTML = 'Is allowed if '+details.match+' equals';
|
||||
// header
|
||||
var t=make_table($a(w,'div','',{borderBottom:'1px solid #AAA'}),1,3,'90%',['40%','40%','20%'],{fontWeight:'bold', padding:'3px', fontSize:'14px'});
|
||||
$td(t,0,0).innerHTML = 'Who?'; $td(t,0,1).innerHTML = 'Is allowed if '+details.match+' equals';
|
||||
|
||||
// existing defaults
|
||||
var dl = r.message.dl; this.options = r.message.ol;
|
||||
if(!this.profiles) {
|
||||
this.profiles = r.message.pl;
|
||||
}
|
||||
// existing defaults
|
||||
var dl = r.message.dl; this.options = r.message.ol;
|
||||
if(!this.profiles) {
|
||||
this.profiles = r.message.pl;
|
||||
}
|
||||
|
||||
for(var i=0; i<dl.length; i++) {
|
||||
new MatchDefaultValue(this, w, dl[i], details.match);
|
||||
}
|
||||
for(var i=0; i<dl.length; i++) {
|
||||
new MatchDefaultValue(this, w, dl[i], details.match);
|
||||
}
|
||||
|
||||
this.add_new_match_row(details.match);
|
||||
this.add_new_match_row(details.match);
|
||||
}
|
||||
|
||||
pscript.PermEngine.prototype.add_new_match_row = function(fieldname) {
|
||||
// add new default
|
||||
new MatchDefaultValue(this, this.match_defaults_dialog.widgets['Body'], null, fieldname, 1);
|
||||
// add new default
|
||||
new MatchDefaultValue(this, this.match_defaults_dialog.widgets['Body'], null, fieldname, 1);
|
||||
}
|
||||
|
||||
// --------------------------------------------
|
||||
|
||||
MatchDefaultValue = function(pe, parent, details, fieldname, editable) {
|
||||
this.pe = pe;
|
||||
this.wrapper = $a(parent, 'div', '', {margin:'4px'});
|
||||
this.clear();
|
||||
this.details = details;
|
||||
this.fieldname = fieldname;
|
||||
this.render(editable);
|
||||
this.pe = pe;
|
||||
this.wrapper = $a(parent, 'div', '', {margin:'4px'});
|
||||
this.clear();
|
||||
this.details = details;
|
||||
this.fieldname = fieldname;
|
||||
this.render(editable);
|
||||
}
|
||||
|
||||
|
||||
// --------------------------------------------
|
||||
|
||||
MatchDefaultValue.prototype.clear = function() {
|
||||
this.wrapper.innerHTML = '';
|
||||
this.tab = make_table(this.wrapper, 1, 3, '90%', ['40%','40%','20%'], {verticalAlign:'middle', padding:'3px'});
|
||||
this.wrapper.innerHTML = '';
|
||||
this.tab = make_table(this.wrapper, 1, 3, '90%', ['40%','40%','20%'], {verticalAlign:'middle', padding:'3px'});
|
||||
}
|
||||
|
||||
// --------------------------------------------
|
||||
|
||||
MatchDefaultValue.prototype.render = function(editable) {
|
||||
|
||||
if(editable) {
|
||||
this.render_editable();
|
||||
} else {
|
||||
this.render_static();
|
||||
}
|
||||
if(editable) {
|
||||
this.render_editable();
|
||||
} else {
|
||||
this.render_static();
|
||||
}
|
||||
}
|
||||
|
||||
// --------------------------------------------
|
||||
|
||||
MatchDefaultValue.prototype.render_editable = function() {
|
||||
var me = this;
|
||||
var me = this;
|
||||
|
||||
// profile or role
|
||||
this.profile_or_role = $a($td(this.tab,0,0), 'select', '', {width:'60px', marginRight:'8px'});
|
||||
add_sel_options(this.profile_or_role,['Profile', 'Role'], 'Profile');
|
||||
this.profile_or_role.onchange = function() {
|
||||
if(sel_val(this)=='Profile') { $di(me.profile_sel); $dh(me.role_sel); }
|
||||
else { $dh(me.profile_sel); $di(me.role_sel); }
|
||||
}
|
||||
// profile or role
|
||||
this.profile_or_role = $a($td(this.tab,0,0), 'select', '', {width:'60px', marginRight:'8px'});
|
||||
add_sel_options(this.profile_or_role,['Profile', 'Role'], 'Profile');
|
||||
this.profile_or_role.onchange = function() {
|
||||
if(sel_val(this)=='Profile') { $di(me.profile_sel); $dh(me.role_sel); }
|
||||
else { $dh(me.profile_sel); $di(me.role_sel); }
|
||||
}
|
||||
|
||||
// role sel
|
||||
this.role_sel = $a($td(this.tab,0,0), 'select', '', {width:'100px',display:'none'});
|
||||
add_sel_options(this.role_sel,this.pe.roles);
|
||||
// role sel
|
||||
this.role_sel = $a($td(this.tab,0,0), 'select', '', {width:'100px',display:'none'});
|
||||
add_sel_options(this.role_sel,this.pe.roles);
|
||||
|
||||
// profile sel
|
||||
this.profile_sel = $a($td(this.tab,0,0), 'select', '', {width:'100px'});
|
||||
add_sel_options(this.profile_sel,this.pe.profiles);
|
||||
// profile sel
|
||||
this.profile_sel = $a($td(this.tab,0,0), 'select', '', {width:'100px'});
|
||||
add_sel_options(this.profile_sel,this.pe.profiles);
|
||||
|
||||
// options sel
|
||||
this.options_sel = $a($td(this.tab,0,1), 'select', '', {width:'120px'});
|
||||
add_sel_options(this.options_sel,this.pe.options);
|
||||
// options sel
|
||||
this.options_sel = $a($td(this.tab,0,1), 'select', '', {width:'120px'});
|
||||
add_sel_options(this.options_sel,this.pe.options);
|
||||
|
||||
// add
|
||||
var span = $a($td(this.tab,0,2),'span','link_type',{marginLeft:'8px'});
|
||||
span.innerHTML = 'Add'
|
||||
span.onclick = function() { me.save(); }
|
||||
// add
|
||||
var span = $a($td(this.tab,0,2),'span','link_type',{marginLeft:'8px'});
|
||||
span.innerHTML = 'Add'
|
||||
span.onclick = function() { me.save(); }
|
||||
}
|
||||
|
||||
// --------------------------------------------
|
||||
|
||||
MatchDefaultValue.prototype.render_static = function() {
|
||||
var me = this;
|
||||
var me = this;
|
||||
|
||||
$td(this.tab,0,0).innerHTML = this.details.parenttype;
|
||||
$td(this.tab,0,0).innerHTML += ' ' + this.details.parent;
|
||||
$td(this.tab,0,1).innerHTML = this.details.defvalue;
|
||||
$td(this.tab,0,0).innerHTML = this.details.parenttype;
|
||||
$td(this.tab,0,0).innerHTML += ' ' + this.details.parent;
|
||||
$td(this.tab,0,1).innerHTML = this.details.defvalue;
|
||||
|
||||
// delete
|
||||
var span = $a($td(this.tab,0,2),'span','link_type',{marginLeft:'8px'});
|
||||
span.innerHTML = 'Cancel'
|
||||
span.onclick = function() { me.delete_def(); }
|
||||
// delete
|
||||
var span = $a($td(this.tab,0,2),'span','link_type',{marginLeft:'8px'});
|
||||
span.innerHTML = 'Cancel'
|
||||
span.onclick = function() { me.delete_def(); }
|
||||
}
|
||||
|
||||
// --------------------------------------------
|
||||
|
||||
MatchDefaultValue.prototype.delete_def = function() {
|
||||
var me = this;
|
||||
this.wrapper.innerHTML = '<div style="color: #888; padding: 3px;">Deleting...</div>';
|
||||
var callback = function(r,rt) {
|
||||
$dh(me.wrapper);
|
||||
if(r.exc) msgprint('There were errors!')
|
||||
}
|
||||
$c_obj('Permission Control','delete_default'
|
||||
,[this.details.parent, this.fieldname, this.details.defvalue].join('~~~')
|
||||
,callback)
|
||||
var me = this;
|
||||
this.wrapper.innerHTML = '<div style="color: #888; padding: 3px;">Deleting...</div>';
|
||||
var callback = function(r,rt) {
|
||||
$dh(me.wrapper);
|
||||
if(r.exc) msgprint('There were errors!')
|
||||
}
|
||||
$c_obj('Permission Control','delete_default'
|
||||
,[this.details.parent, this.fieldname, this.details.defvalue].join('~~~')
|
||||
,callback)
|
||||
}
|
||||
|
||||
// --------------------------------------------
|
||||
|
||||
MatchDefaultValue.prototype.save = function() {
|
||||
var me= this;
|
||||
var me= this;
|
||||
|
||||
var callback = function(r,rt) {
|
||||
me.details = r.message;
|
||||
me.clear();
|
||||
me.render();
|
||||
me.pe.add_new_match_row(me.fieldname);
|
||||
}
|
||||
var callback = function(r,rt) {
|
||||
me.details = r.message;
|
||||
me.clear();
|
||||
me.render();
|
||||
me.pe.add_new_match_row(me.fieldname);
|
||||
}
|
||||
|
||||
// values
|
||||
if(sel_val(this.profile_or_role)=='Profile') { var parent = sel_val(this.profile_sel); var parenttype = 'Profile'; }
|
||||
else { var parent = sel_val(this.role_sel); var parenttype = 'Role'; }
|
||||
// values
|
||||
if(sel_val(this.profile_or_role)=='Profile') { var parent = sel_val(this.profile_sel); var parenttype = 'Profile'; }
|
||||
else { var parent = sel_val(this.role_sel); var parenttype = 'Role'; }
|
||||
|
||||
if(!sel_val(this.options_sel) || !parent) { msgprint("Please select all values"); return; }
|
||||
if(!sel_val(this.options_sel) || !parent) { msgprint("Please select all values"); return; }
|
||||
|
||||
$c_obj('Permission Control','add_default'
|
||||
,[parent, parenttype, this.fieldname, sel_val(this.options_sel)].join('~~~')
|
||||
,callback);
|
||||
$c_obj('Permission Control','add_default'
|
||||
,[parent, parenttype, this.fieldname, sel_val(this.options_sel)].join('~~~')
|
||||
,callback);
|
||||
|
||||
this.wrapper.innerHTML = '<div style="color: #888; padding: 3px;">Adding...</div>';
|
||||
this.wrapper.innerHTML = '<div style="color: #888; padding: 3px;">Adding...</div>';
|
||||
}
|
||||
|
||||
|
||||
@ -415,36 +439,36 @@ MatchDefaultValue.prototype.save = function() {
|
||||
// =======================================================
|
||||
|
||||
pscript.PermEngine.prototype.make_fields_dialog=function(){
|
||||
if(!pscript.get_field_dialog) {
|
||||
pscript.get_field_dialog = new Dialog(750,500,'Fields');
|
||||
pscript.get_field_dialog.make_body([['HTML','Fields','<div id="perm_engine_get_fields"></div>'],['Button','OK']]);
|
||||
}
|
||||
else $i('perm_engine_get_fields').innerHTML = '';
|
||||
if(!pscript.get_field_dialog) {
|
||||
pscript.get_field_dialog = new Dialog(750,500,'Fields');
|
||||
pscript.get_field_dialog.make_body([['HTML','Fields','<div id="perm_engine_get_fields"></div>'],['Button','OK']]);
|
||||
}
|
||||
else $i('perm_engine_get_fields').innerHTML = '';
|
||||
}
|
||||
|
||||
// Get Fields
|
||||
// --------------------
|
||||
pscript.PermEngine.prototype.get_fields = function(dt, permlevel) {
|
||||
var me = this;
|
||||
var callback = function(r,rt){
|
||||
// Get Parent DocType Fields
|
||||
var parent_fields_dict = r.message.parent_fields_dict;
|
||||
var me = this;
|
||||
var callback = function(r,rt){
|
||||
// Get Parent DocType Fields
|
||||
var parent_fields_dict = r.message.parent_fields_dict;
|
||||
|
||||
// Get Child Table Fields if any
|
||||
var table_fields_dict = r.message.table_fields_dict;
|
||||
// Get Child Table Fields if any
|
||||
var table_fields_dict = r.message.table_fields_dict;
|
||||
|
||||
// Make Fields Dialog Box
|
||||
me.make_fields_dialog();
|
||||
// Make Fields Dialog Box
|
||||
me.make_fields_dialog();
|
||||
|
||||
me.make_fields_table(dt, parent_fields_dict, table_fields_dict, permlevel);
|
||||
me.make_fields_table(dt, parent_fields_dict, table_fields_dict, permlevel);
|
||||
|
||||
pscript.get_field_dialog.show();
|
||||
pscript.get_field_dialog.widgets['OK'].onclick=function(){
|
||||
pscript.get_field_dialog.hide();
|
||||
}
|
||||
}
|
||||
var args = "{'dt':'"+dt+"','permlevel':"+permlevel+"}"
|
||||
$c_obj('Permission Control','get_fields', args, callback);
|
||||
pscript.get_field_dialog.show();
|
||||
pscript.get_field_dialog.widgets['OK'].onclick=function(){
|
||||
pscript.get_field_dialog.hide();
|
||||
}
|
||||
}
|
||||
var args = "{'dt':'"+dt+"','permlevel':"+permlevel+"}"
|
||||
$c_obj('Permission Control','get_fields', args, callback);
|
||||
}
|
||||
|
||||
|
||||
@ -453,89 +477,89 @@ pscript.PermEngine.prototype.get_fields = function(dt, permlevel) {
|
||||
// --------------------------------------
|
||||
pscript.PermEngine.prototype.make_fields_table = function(dt, parent_fields_dict, table_fields_dict, permlevel) {
|
||||
|
||||
var make_grid = function(table, fields_dict) {
|
||||
var col_labels = ['Label','Fieldtype','Fieldname','Options'];
|
||||
for(var n = 0; n < col_labels.length; n++){
|
||||
$a_input(($td(table,0,n)), 'data');
|
||||
$td(table,0,n).innerHTML = '<b>'+col_labels[n]+'</b>';
|
||||
$td(table,0,n).fieldname = col_labels[n].toLowerCase();
|
||||
}
|
||||
var make_grid = function(table, fields_dict) {
|
||||
var col_labels = ['Label','Fieldtype','Fieldname','Options'];
|
||||
for(var n = 0; n < col_labels.length; n++){
|
||||
$a_input(($td(table,0,n)), 'data');
|
||||
$td(table,0,n).innerHTML = '<b>'+col_labels[n]+'</b>';
|
||||
$td(table,0,n).fieldname = col_labels[n].toLowerCase();
|
||||
}
|
||||
|
||||
// Add values
|
||||
for(var i = 0; i < keys(fields_dict).length; i++){
|
||||
for(var j = 0; j < 4; j++){
|
||||
$a_input(($td(table,i+1,j)), 'data');
|
||||
$td(table,i+1,j).innerHTML = cstr(fields_dict[i][$td(table,0,j).fieldname])
|
||||
}
|
||||
}
|
||||
}
|
||||
// Add values
|
||||
for(var i = 0; i < keys(fields_dict).length; i++){
|
||||
for(var j = 0; j < 4; j++){
|
||||
$a_input(($td(table,i+1,j)), 'data');
|
||||
$td(table,i+1,j).innerHTML = cstr(fields_dict[i][$td(table,0,j).fieldname])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$i('perm_engine_get_fields').innerHTML = '<b>'+ dt + ' Fields at Level '+ permlevel +':</b><br><br>';
|
||||
var parent_field_table = make_table('perm_engine_get_fields',keys(parent_fields_dict).length+1, 4,'100%',['25%','25%','25%','25%'],{border:'1px solid #AAA',padding:'2px'});
|
||||
make_grid(parent_field_table, parent_fields_dict);
|
||||
$i('perm_engine_get_fields').innerHTML = '<b>'+ dt + ' Fields at Level '+ permlevel +':</b><br><br>';
|
||||
var parent_field_table = make_table('perm_engine_get_fields',keys(parent_fields_dict).length+1, 4,'100%',['25%','25%','25%','25%'],{border:'1px solid #AAA',padding:'2px'});
|
||||
make_grid(parent_field_table, parent_fields_dict);
|
||||
|
||||
child_tables = keys(table_fields_dict)
|
||||
if(child_tables.length > 0){
|
||||
for(var k = 0; k < child_tables.length; k++){
|
||||
var tab_fields_det = table_fields_dict[child_tables[k]];
|
||||
if(keys(tab_fields_det).length > 0){
|
||||
$i('perm_engine_get_fields').innerHTML += '<br><b>'+ child_tables[k] + ' Fields at Level '+ permlevel +':</b><br><br>'
|
||||
var child_field_table = make_table('perm_engine_get_fields',keys(tab_fields_det).length+1, 4,'100%',['25%','25%','25%','25%'],{border:'1px solid #AAA',padding:'2px'});
|
||||
make_grid(child_field_table, tab_fields_det);
|
||||
}
|
||||
}
|
||||
}
|
||||
child_tables = keys(table_fields_dict)
|
||||
if(child_tables.length > 0){
|
||||
for(var k = 0; k < child_tables.length; k++){
|
||||
var tab_fields_det = table_fields_dict[child_tables[k]];
|
||||
if(keys(tab_fields_det).length > 0){
|
||||
$i('perm_engine_get_fields').innerHTML += '<br><b>'+ child_tables[k] + ' Fields at Level '+ permlevel +':</b><br><br>'
|
||||
var child_field_table = make_table('perm_engine_get_fields',keys(tab_fields_det).length+1, 4,'100%',['25%','25%','25%','25%'],{border:'1px solid #AAA',padding:'2px'});
|
||||
make_grid(child_field_table, tab_fields_det);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Update Permissions
|
||||
// -----------------------
|
||||
pscript.PermEngine.prototype.update_permissions = function() {
|
||||
var me = this;
|
||||
var out = {};
|
||||
var me = this;
|
||||
var out = {};
|
||||
|
||||
var add_to_out = function(doctype, permlevel, role, key, value) {
|
||||
if(!out[doctype]) out[doctype] = {};
|
||||
if(!out[doctype][permlevel]) out[doctype][permlevel] = {};
|
||||
if(!out[doctype][permlevel][role]) out[doctype][permlevel][role] = {};
|
||||
out[doctype][permlevel][role][key] = value;
|
||||
}
|
||||
var add_to_out = function(doctype, permlevel, role, key, value) {
|
||||
if(!out[doctype]) out[doctype] = {};
|
||||
if(!out[doctype][permlevel]) out[doctype][permlevel] = {};
|
||||
if(!out[doctype][permlevel][role]) out[doctype][permlevel][role] = {};
|
||||
out[doctype][permlevel][role][key] = value;
|
||||
}
|
||||
|
||||
// check boxes
|
||||
for(i in pscript.all_checkboxes) {
|
||||
c = pscript.all_checkboxes[i];
|
||||
add_to_out(c.doctype, c.permlevel, c.role, c.perm_type, c.checked ? 1 : 0);
|
||||
}
|
||||
// check boxes
|
||||
for(i in pscript.all_checkboxes) {
|
||||
c = pscript.all_checkboxes[i];
|
||||
add_to_out(c.doctype, c.permlevel, c.role, c.perm_type, c.checked ? 1 : 0);
|
||||
}
|
||||
|
||||
// matches
|
||||
for(var i=0; i<pscript.all_matches.length; i++) {
|
||||
var s = pscript.all_matches[i];
|
||||
if(sel_val(s))
|
||||
add_to_out(s.details.parent, s.details.permlevel, s.details.role, 'match', sel_val(s));
|
||||
}
|
||||
// matches
|
||||
for(var i=0; i<pscript.all_matches.length; i++) {
|
||||
var s = pscript.all_matches[i];
|
||||
if(sel_val(s))
|
||||
add_to_out(s.details.parent, s.details.permlevel, s.details.role, 'match', sel_val(s));
|
||||
}
|
||||
|
||||
var args = "{'perm_dict': "+JSON.stringify(out)+"}"
|
||||
$c_obj('Permission Control','update_permissions', args, function(r,rt) {});
|
||||
var args = "{'perm_dict': "+JSON.stringify(out)+"}"
|
||||
$c_obj('Permission Control','update_permissions', args, function(r,rt) {});
|
||||
}
|
||||
|
||||
|
||||
// Update Page Roles
|
||||
// ----------------------
|
||||
pscript.PermEngine.prototype.update_page_roles = function() {
|
||||
var me = this;
|
||||
var out = {};
|
||||
for(i in pscript.all_pg_checkboxes) {
|
||||
c = pscript.all_pg_checkboxes[i];
|
||||
out[c.page_name] = c.checked ? 1 : 0
|
||||
}
|
||||
var args = "{'page_role_dict': "+JSON.stringify(out)+", 'role': '"+sel_val(me.role_select)+"'}"
|
||||
$c_obj('Permission Control','update_page_role', args, function(r,rt) {});
|
||||
var me = this;
|
||||
var out = {};
|
||||
for(i in pscript.all_pg_checkboxes) {
|
||||
c = pscript.all_pg_checkboxes[i];
|
||||
out[c.page_name] = c.checked ? 1 : 0
|
||||
}
|
||||
var args = "{'page_role_dict': "+JSON.stringify(out)+", 'role': '"+sel_val(me.role_select)+"'}"
|
||||
$c_obj('Permission Control','update_page_role', args, function(r,rt) {});
|
||||
}
|
||||
|
||||
// Reset Permission Engine
|
||||
// -------------------------
|
||||
pscript.PermEngine.prototype.reset_perm_engine = function(){
|
||||
this.type_select.selectedIndex = 0;
|
||||
this.load_options();
|
||||
this.type_select.selectedIndex = 0;
|
||||
this.load_options();
|
||||
}
|
||||
|
@ -84,7 +84,6 @@ def boot_session(bootinfo):
|
||||
|
||||
else:
|
||||
bootinfo['letter_heads'] = get_letter_heads()
|
||||
bootinfo['user_fullnames'] = get_fullnames()
|
||||
|
||||
import webnotes.model.doctype
|
||||
bootinfo['docs'] += webnotes.model.doctype.get('Event')
|
||||
@ -96,18 +95,6 @@ def get_letter_heads():
|
||||
where ifnull(disabled,0)=0""")
|
||||
return dict(ret)
|
||||
|
||||
def get_fullnames():
|
||||
"""map of user fullnames"""
|
||||
ret = dict(webnotes.conn.sql("""select name,
|
||||
concat(ifnull(first_name, ''),
|
||||
if(ifnull(first_name, '')!='', ' ', ''), ifnull(last_name, ''))
|
||||
from tabProfile where ifnull(enabled, 0)=1"""))
|
||||
for key in ret:
|
||||
if not ret[key]:
|
||||
ret[key] = key
|
||||
|
||||
return ret
|
||||
|
||||
def login_as(login_manager):
|
||||
"""
|
||||
Login as functionality -- allows signin from signin.erpnext.com
|
||||
|
@ -42,11 +42,41 @@ body {
|
||||
.navbar-new-comments {
|
||||
margin: -3px 0px;
|
||||
padding: 2px;
|
||||
font-size: 14px;
|
||||
color: #fff;
|
||||
background-color: #B00D07;
|
||||
min-width: 20px;
|
||||
text-align: center;
|
||||
display: inline-block;
|
||||
border-radius: 2px;
|
||||
color: #999999;
|
||||
background-color: #333131;
|
||||
}
|
||||
|
||||
.navbar-new-comments:hover,
|
||||
.navbar-new-comments:active,
|
||||
.navbar-new-comments:focus {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
|
||||
.navbar-new-comments-true {
|
||||
color: #fff;
|
||||
background-color: #B00D07;
|
||||
}
|
||||
|
||||
.navbar-icon-home {
|
||||
vertical-align: middle;
|
||||
opacity:0.4;
|
||||
Filter:alpha(opacity=40); /* For IE8 and earlier */
|
||||
}
|
||||
|
||||
.navbar-icon-home:hover,
|
||||
.navbar-icon-home:focus,
|
||||
.navbar-icon-home:active {
|
||||
opacity:1;
|
||||
Filter:alpha(opacity=100); /* For IE8 and earlier */
|
||||
}
|
||||
|
||||
/*extra size menus for recent*/
|
||||
.dropdown-menu#toolbar-recent, .dropdown-menu#toolbar-options, .dropdown-menu#toolbar-help{
|
||||
min-width: 160px !important;
|
||||
max-width: 260px !important;
|
||||
}
|
||||
|
@ -27,11 +27,11 @@ erpnext.toolbar.setup = function() {
|
||||
$('#toolbar-user').append('<li><a href="#My Company">Team / Messages</a></li>');
|
||||
|
||||
|
||||
$('.navbar .pull-right').prepend('\
|
||||
<li><a href="#" id="toolbar-new-comments"></a></li>');
|
||||
$('.navbar .pull-right').append('\
|
||||
<li><a href="#!My%20Company" title="Unread Messages"><span class="navbar-new-comments"></span></a></li>');
|
||||
|
||||
// help
|
||||
$('.navbar .pull-right').append('<li class="dropdown">\
|
||||
$('.navbar .pull-right').prepend('<li class="dropdown">\
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#" \
|
||||
onclick="return false;">Help<b class="caret"></b></a>\
|
||||
<ul class="dropdown-menu" id="toolbar-help">\
|
||||
@ -53,18 +53,18 @@ erpnext.toolbar.setup = function() {
|
||||
|
||||
$.extend(page_body.wntoolbar, {
|
||||
set_new_comments: function(new_comments) {
|
||||
var navbar_nc = $('#toolbar-new-comments');
|
||||
var navbar_nc = $('.navbar-new-comments');
|
||||
if(new_comments && new_comments.length>0) {
|
||||
navbar_nc.html('<span class="navbar-new-comments">' + new_comments.length + '</span>');
|
||||
navbar_nc.click(function() { loadpage('My Company'); });
|
||||
navbar_nc.text(new_comments.length);
|
||||
navbar_nc.addClass('navbar-new-comments-true')
|
||||
$.each(new_comments, function(i, v) {
|
||||
var msg = 'New Message: ' + (v[1].length<=100 ? v[1] : (v[1].substr(0, 100) + "..."));
|
||||
var id = v[0].replace('/', '-');
|
||||
if(!$('#' + id)[0]) { show_alert(msg, id); }
|
||||
})
|
||||
} else {
|
||||
navbar_nc.html('');
|
||||
navbar_nc.click(function() { return false; });
|
||||
navbar_nc.removeClass('navbar-new-comments-true');
|
||||
navbar_nc.text(0);
|
||||
}
|
||||
}
|
||||
});
|
||||
@ -89,7 +89,7 @@ erpnext.toolbar.add_modules = function() {
|
||||
<li class="divider"></li>\
|
||||
<li><a href="#!Setup" data-module="Setup">Setup</a></li>\
|
||||
</ul>\
|
||||
</li>').insertAfter('li[data-name="navbar-home"]');
|
||||
</li>').prependTo('.navbar .nav:first');
|
||||
$('.navbar .nav:first')
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,8 @@
|
||||
.support-ticket-wrapper {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.support-ticket-title {
|
||||
padding: 5px;
|
||||
border-bottom: 1px solid black;
|
||||
}
|
@ -353,7 +353,7 @@ function add_sel_options(s,list,sel_val,o_style){if(s.custom_select){s.set_optio
|
||||
if(sel_val)s.inp.value=sel_val;return;}
|
||||
if(s.inp)s=s.inp;for(var i=0,len=list.length;i<len;i++){var o=new Option(list[i],list[i],false,(list[i]==sel_val?true:false));if(o_style)$y(o,o_style);s.options[s.options.length]=o;}}
|
||||
function cint(v,def){v=v+'';v=lstrip(v,['0']);v=parseInt(v);if(isNaN(v))v=def?def:0;return v;}
|
||||
function validate_email(id){if(strip(id).search("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?")==-1)return 0;else return 1;}
|
||||
function validate_email(id){if(strip(id.toLowerCase()).search("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?")==-1)return 0;else return 1;}
|
||||
function validate_spl_chars(txt){if(txt.search(/^[a-zA-Z0-9_\- ]*$/)==-1)return 1;else return 0;}
|
||||
function d2h(d){return cint(d).toString(16);}
|
||||
function h2d(h){return parseInt(h,16);}
|
||||
@ -1319,7 +1319,7 @@ if(rd[1]){var dt=rd[0];var dn=rd[1];this.add(dt,dn,0);}}}});
|
||||
/*
|
||||
* lib/js/wn/ui/toolbar/toolbar.js
|
||||
*/
|
||||
wn.ui.toolbar.Toolbar=Class.extend({init:function(){this.make();this.make_home();this.make_document();this.make_apps();wn.ui.toolbar.recent=new wn.ui.toolbar.RecentDocs();this.make_tools();this.set_user_name();this.make_logout();$('.dropdown-toggle').dropdown();$(document).trigger('toolbar_setup');},make:function(){$('header').append('<div class="navbar navbar-fixed-top">\
|
||||
wn.ui.toolbar.Toolbar=Class.extend({init:function(){this.make();this.make_home();this.make_document();wn.ui.toolbar.recent=new wn.ui.toolbar.RecentDocs();this.make_tools();this.set_user_name();this.make_logout();$('.dropdown-toggle').dropdown();$(document).trigger('toolbar_setup');},make:function(){$('header').append('<div class="navbar navbar-fixed-top">\
|
||||
<div class="navbar-inner">\
|
||||
<div class="container">\
|
||||
<a class="brand"></a>\
|
||||
@ -1336,8 +1336,7 @@ wn.ui.toolbar.Toolbar=Class.extend({init:function(){this.make();this.make_home()
|
||||
</ul>\
|
||||
</div>\
|
||||
</div>\
|
||||
</div>');},make_home:function(){$('.navbar .nav:first').append('<li data-name="navbar-home">\
|
||||
<a href="#!'+home_page+'">Home</a></li>');$('.navbar .brand').attr('href',"#!"+home_page);},make_document:function(){wn.ui.toolbar.new_dialog=new wn.ui.toolbar.NewDialog();wn.ui.toolbar.search=new wn.ui.toolbar.Search();wn.ui.toolbar.report=new wn.ui.toolbar.Report();$('.navbar .nav:first').append('<li class="dropdown">\
|
||||
</div>');},make_home:function(){$('.navbar .brand').attr('href',"#!"+home_page);},make_document:function(){wn.ui.toolbar.new_dialog=new wn.ui.toolbar.NewDialog();wn.ui.toolbar.search=new wn.ui.toolbar.Search();wn.ui.toolbar.report=new wn.ui.toolbar.Report();$('.navbar .nav:first').append('<li class="dropdown">\
|
||||
<a class="dropdown-toggle" href="#" data-toggle="dropdown"\
|
||||
onclick="return false;">Document<b class="caret"></b></a>\
|
||||
<ul class="dropdown-menu" id="toolbar-document">\
|
||||
@ -1358,16 +1357,7 @@ wn.ui.toolbar.Toolbar=Class.extend({init:function(){this.make();this.make_home()
|
||||
</ul>\
|
||||
</li>');if(has_common(user_roles,['Administrator','System Manager'])){$('#toolbar-tools').append('<li><a href="#" \
|
||||
onclick="return wn.ui.toolbar.download_backup();">\
|
||||
Download Backup</a></li>');}},make_apps:function(){$('.navbar .nav:first').append('<li class="dropdown">\
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" \
|
||||
href="#" onclick="return false;">Apps<b class="caret"></b></a>\
|
||||
<ul class="dropdown-menu">\
|
||||
<li><a href="#!messages">Messages</a></li>\
|
||||
<li><a href="#!todo">To Do</a></li>\
|
||||
<li><a href="#!calendar">Calendar</a></li>\
|
||||
<li><a href="#!questions">Knowledge Base</a></li>\
|
||||
</ul>\
|
||||
</li>');},set_user_name:function(){var fn=user_fullname;if(fn.length>15)fn=fn.substr(0,12)+'...';$('#toolbar-user-link').html(fn+'<b class="caret"></b>');},make_logout:function(){$('#toolbar-user').append('<li><a href="#" onclick="return logout();">Logout</a></li>');}});wn.ui.toolbar.clear_cache=function(){localStorage&&localStorage.clear();$c('webnotes.session_cache.clear',{},function(r,rt){show_alert(r.message);});return false;}
|
||||
Download Backup</a></li>');}},set_user_name:function(){var fn=user_fullname;if(fn.length>15)fn=fn.substr(0,12)+'...';$('#toolbar-user-link').html(fn+'<b class="caret"></b>');},make_logout:function(){$('#toolbar-user').append('<li><a href="#" onclick="return logout();">Logout</a></li>');}});wn.ui.toolbar.clear_cache=function(){localStorage&&localStorage.clear();$c('webnotes.session_cache.clear',{},function(r,rt){show_alert(r.message);});return false;}
|
||||
wn.ui.toolbar.download_backup=function(){$c('webnotes.utils.backups.get_backup',{},function(r,rt){});return false;}
|
||||
wn.ui.toolbar.show_about=function(){try{wn.require('lib/js/wn/misc/about.js');wn.ui.misc.about();}catch(e){console.log(e);}
|
||||
return false;}
|
||||
@ -2197,7 +2187,7 @@ get_window_height=function(){var ht=window.innerHeight?window.innerHeight:docume
|
||||
* js/app.js
|
||||
*/
|
||||
wn.app={name:'ERPNext',license:'GNU/GPL - Usage Condition: All "erpnext" branding must be kept as it is',source:'https://github.com/webnotes/erpnext',publisher:'Web Notes Technologies Pvt Ltd, Mumbai',copyright:'© Web Notes Technologies Pvt Ltd',version:'2.'+window._version_number}
|
||||
wn.modules_path='erpnext';wn.settings.no_history=true;$(document).bind('ready',function(){startup();});$(document).bind('toolbar_setup',function(){$('.brand').html('<b>erp</b>next');})
|
||||
wn.modules_path='erpnext';wn.settings.no_history=true;$(document).bind('ready',function(){startup();});$(document).bind('toolbar_setup',function(){$('.brand').html('<b>erp</b>next <i class="icon-home icon-white navbar-icon-home" ></i>');})
|
||||
/*
|
||||
* erpnext/startup/startup.js
|
||||
*/
|
||||
@ -2231,8 +2221,8 @@ erpnext.module_page.make_list=function(module,wrapper){wrapper.list=new wn.widge
|
||||
/*
|
||||
* erpnext/startup/toolbar.js
|
||||
*/
|
||||
wn.provide('erpnext.toolbar');erpnext.toolbar.setup=function(){erpnext.toolbar.add_modules();$('#toolbar-user').append('<li><a href="#profile-settings">Profile Settings</a></li>');$('#toolbar-user').append('<li><a href="#My Company">Team / Messages</a></li>');$('.navbar .pull-right').prepend('\
|
||||
<li><a href="#" id="toolbar-new-comments"></a></li>');$('.navbar .pull-right').append('<li class="dropdown">\
|
||||
wn.provide('erpnext.toolbar');erpnext.toolbar.setup=function(){erpnext.toolbar.add_modules();$('#toolbar-user').append('<li><a href="#profile-settings">Profile Settings</a></li>');$('#toolbar-user').append('<li><a href="#My Company">Team / Messages</a></li>');$('.navbar .pull-right').append('\
|
||||
<li><a href="#!My%20Company" title="Unread Messages"><span class="navbar-new-comments"></span></a></li>');$('.navbar .pull-right').prepend('<li class="dropdown">\
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#" \
|
||||
onclick="return false;">Help<b class="caret"></b></a>\
|
||||
<ul class="dropdown-menu" id="toolbar-help">\
|
||||
@ -2244,7 +2234,8 @@ $('#toolbar-help').append('<li><a href="http://groups.google.com/group/erpnext-u
|
||||
$('#toolbar-help').append('<li><a href="http://www.providesupport.com?messenger=iwebnotes" target="_blank">\
|
||||
Live Chat (Office Hours)</a></li>')
|
||||
if(pscript.is_erpnext_saas&&is_system_manager){$('#toolbar-user').append('<li><a href="#billing">Billing</a></li>')}
|
||||
$.extend(page_body.wntoolbar,{set_new_comments:function(new_comments){var navbar_nc=$('#toolbar-new-comments');if(new_comments&&new_comments.length>0){navbar_nc.html('<span class="navbar-new-comments">'+new_comments.length+'</span>');navbar_nc.click(function(){loadpage('My Company');});$.each(new_comments,function(i,v){var msg='New Message: '+(v[1].length<=100?v[1]:(v[1].substr(0,100)+"..."));var id=v[0].replace('/','-');if(!$('#'+id)[0]){show_alert(msg,id);}})}else{navbar_nc.html('');navbar_nc.click(function(){return false;});}}});page_body.wntoolbar.set_new_comments();}
|
||||
$.extend(page_body.wntoolbar,{set_new_comments:function(new_comments){var navbar_nc=$('.navbar-new-comments');if(new_comments&&new_comments.length>0){navbar_nc.text(new_comments.length);navbar_nc.addClass('navbar-new-comments-true')
|
||||
$.each(new_comments,function(i,v){var msg='New Message: '+(v[1].length<=100?v[1]:(v[1].substr(0,100)+"..."));var id=v[0].replace('/','-');if(!$('#'+id)[0]){show_alert(msg,id);}})}else{navbar_nc.removeClass('navbar-new-comments-true');navbar_nc.text(0);}}});page_body.wntoolbar.set_new_comments();}
|
||||
erpnext.toolbar.add_modules=function(){$('<li class="dropdown">\
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#"\
|
||||
onclick="return false;">Modules<b class="caret"></b></a>\
|
||||
@ -2261,7 +2252,7 @@ erpnext.toolbar.add_modules=function(){$('<li class="dropdown">\
|
||||
<li class="divider"></li>\
|
||||
<li><a href="#!Setup" data-module="Setup">Setup</a></li>\
|
||||
</ul>\
|
||||
</li>').insertAfter('li[data-name="navbar-home"]');$('.navbar .nav:first')}
|
||||
</li>').prependTo('.navbar .nav:first');$('.navbar .nav:first')}
|
||||
/*
|
||||
* erpnext/startup/feature_setup.js
|
||||
*/
|
||||
|
@ -279,7 +279,7 @@ function add_sel_options(s,list,sel_val,o_style){if(s.custom_select){s.set_optio
|
||||
if(sel_val)s.inp.value=sel_val;return;}
|
||||
if(s.inp)s=s.inp;for(var i=0,len=list.length;i<len;i++){var o=new Option(list[i],list[i],false,(list[i]==sel_val?true:false));if(o_style)$y(o,o_style);s.options[s.options.length]=o;}}
|
||||
function cint(v,def){v=v+'';v=lstrip(v,['0']);v=parseInt(v);if(isNaN(v))v=def?def:0;return v;}
|
||||
function validate_email(id){if(strip(id).search("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?")==-1)return 0;else return 1;}
|
||||
function validate_email(id){if(strip(id.toLowerCase()).search("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?")==-1)return 0;else return 1;}
|
||||
function validate_spl_chars(txt){if(txt.search(/^[a-zA-Z0-9_\- ]*$/)==-1)return 1;else return 0;}
|
||||
function d2h(d){return cint(d).toString(16);}
|
||||
function h2d(h){return parseInt(h,16);}
|
||||
@ -1035,7 +1035,7 @@ get_window_height=function(){var ht=window.innerHeight?window.innerHeight:docume
|
||||
* js/app.js
|
||||
*/
|
||||
wn.app={name:'ERPNext',license:'GNU/GPL - Usage Condition: All "erpnext" branding must be kept as it is',source:'https://github.com/webnotes/erpnext',publisher:'Web Notes Technologies Pvt Ltd, Mumbai',copyright:'© Web Notes Technologies Pvt Ltd',version:'2.'+window._version_number}
|
||||
wn.modules_path='erpnext';wn.settings.no_history=true;$(document).bind('ready',function(){startup();});$(document).bind('toolbar_setup',function(){$('.brand').html('<b>erp</b>next');})
|
||||
wn.modules_path='erpnext';wn.settings.no_history=true;$(document).bind('ready',function(){startup();});$(document).bind('toolbar_setup',function(){$('.brand').html('<b>erp</b>next <i class="icon-home icon-white navbar-icon-home" ></i>');})
|
||||
/*
|
||||
* erpnext/startup/startup.js
|
||||
*/
|
||||
|
@ -31,5 +31,5 @@ $(document).bind('ready', function() {
|
||||
});
|
||||
|
||||
$(document).bind('toolbar_setup', function() {
|
||||
$('.brand').html('<b>erp</b>next');
|
||||
$('.brand').html('<b>erp</b>next <i class="icon-home icon-white navbar-icon-home" ></i>');
|
||||
})
|
@ -1 +1 @@
|
||||
719
|
||||
739
|
Loading…
x
Reference in New Issue
Block a user