161 lines
3.9 KiB
JavaScript
161 lines
3.9 KiB
JavaScript
/************************************************/
|
|
/* IPB3 Javascript */
|
|
/* -------------------------------------------- */
|
|
/* acp.permissions.js - Permission functions */
|
|
/* (c) IPS, Inc 2009 */
|
|
/* -------------------------------------------- */
|
|
/* Author: Rikki Tissier */
|
|
/************************************************/
|
|
|
|
/* Options:
|
|
* form The ID of the form this is contained in
|
|
* table The ID of the matrix table
|
|
*/
|
|
var _temp = window.IPBACP;
|
|
_temp.prototype.permissions = Class.create({
|
|
|
|
initialize: function( options )
|
|
{
|
|
if( !$( options.form ) )
|
|
{
|
|
return false;
|
|
}
|
|
|
|
this.options = options;
|
|
|
|
document.observe("dom:loaded", function(){
|
|
Debug.write("Initializing permission masks");
|
|
|
|
$( this.options.form ).observe('submit', this.submitForm.bindAsEventListener( this ) );
|
|
|
|
// Set delegate observer on table
|
|
$( this.options.table ).observe('click', this.boxChecked.bindAsEventListener( this ) );
|
|
|
|
$( this.options.table ).select('.select_row').each( function(button){
|
|
$( button ).observe('click', this.selectRow.bindAsEventListener( this ) );
|
|
}.bind(this) );
|
|
|
|
$( this.options.table ).select('.select_col').each( function(button){
|
|
$( button ).observe('click', this.selectColumn.bindAsEventListener( this ) );
|
|
}.bind(this) );
|
|
|
|
}.bind(this));
|
|
},
|
|
|
|
selectColumn: function(e)
|
|
{
|
|
var elem = Event.element(e);
|
|
if( !elem ){ return; }
|
|
var parts = elem.id.match(/(.*)_select_col_([0|1])_(.*)/);
|
|
if( !parts ){ return; }
|
|
|
|
var boo = ( parts[2] == 1 ) ? true : false;
|
|
|
|
$( this.options.form ).select('input[type=checkbox]').each( function( elem ){
|
|
if( $(elem).id.match( "^" + parts[1] + "_" + parts[3] ) )
|
|
{
|
|
$(elem).checked = boo;
|
|
}
|
|
});
|
|
},
|
|
|
|
selectRow: function(e)
|
|
{
|
|
var elem = Event.element(e);
|
|
if( !elem ){ return; }
|
|
|
|
// Get ID
|
|
var parts = elem.id.match(/(.*)_select_row_([0|1])_(.*)/);
|
|
if( !parts ){ return; }
|
|
|
|
if( !$( this.options.app + this.options.typekey + '_row_' + parts[3]) ){ return; }
|
|
|
|
$( this.options.app + this.options.typekey + '_row_' + parts[3]).select('input[type=checkbox]').each( function(check){
|
|
if( parts[2] == 1 ){
|
|
check.checked = true;
|
|
} else {
|
|
check.checked = false;
|
|
|
|
// If column header is checked, uncheck it
|
|
var tmpid = check.id.replace(/^perm_(.+?)_/, '');
|
|
if( $('col_' + tmpid) && $('col_' + tmpid).checked ){
|
|
$('col_' + tmpid).checked = false;
|
|
}
|
|
}
|
|
});
|
|
|
|
},
|
|
|
|
boxChecked: function(e)
|
|
{
|
|
var elem = Event.findElement(e, '.perm');
|
|
if( !elem ){ return; }
|
|
|
|
var input = elem.down('input');
|
|
if( !input ){ return; }
|
|
|
|
// If this is on the input itself, lets skip this bit
|
|
if( Event.element(e).tagName != 'INPUT' )
|
|
{
|
|
if( !input.checked ){
|
|
input.checked = true;
|
|
} else {
|
|
input.checked = false;
|
|
}
|
|
}
|
|
|
|
if( elem.hasClassName('column') )
|
|
{
|
|
// Toggle all in this column
|
|
this.toggleColumn( elem.id.replace('column_', ''), input.checked );
|
|
}
|
|
else
|
|
{
|
|
// See whether we need to uncheck the column header
|
|
if( !input.checked )
|
|
{
|
|
try {
|
|
var colid = input.id.replace(/^perm_(.+?)_/, '');
|
|
var col = $('column_' + colid).down('input');
|
|
col.checked = false;
|
|
} catch(err) { }
|
|
}
|
|
|
|
}
|
|
},
|
|
|
|
toggleColumn: function( id, boo )
|
|
{
|
|
$( this.options.form ).select('input[type=checkbox]').each( function( elem ){
|
|
if( $(elem).id.match( "^perm_(.+?)_" + id ) )
|
|
{
|
|
$(elem).checked = boo;
|
|
}
|
|
});
|
|
},
|
|
|
|
submitForm: function(e)
|
|
{
|
|
try {
|
|
if( !Object.isUndefined( noShowAlert ) )
|
|
{
|
|
if( noShowAlert ){
|
|
return true;
|
|
}
|
|
}
|
|
} catch(err) { }
|
|
|
|
// Get all inputs
|
|
var test = $( this.options.form ).select('input[type=checkbox]').any( function( elem ){ return elem.checked; } );
|
|
|
|
if( !test )
|
|
{
|
|
if( !confirm("No permissions have been checked, are you sure you want to continue?") )
|
|
{
|
|
Event.stop(e);
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|
|
}); |