/*jsl:import ipa.js */ /* Authors: * Petr Vobornik * * Copyright (C) 2012 Red Hat * see file 'COPYING' for use and warranty information * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ /* REQUIRES: ipa.js, details.js, search.js, add.js, facet.js, entity.js */ IPA.automember = {}; IPA.automember.entity = function(spec) { //HACK: Automember takes_params is missing a cn attribute. This hack //copies cn from mod command. Also it is set as pkey. var pkey_attr = IPA.metadata.commands.automember_mod.takes_args[0]; pkey_attr.primary_key = true; IPA.metadata.objects.automember.takes_params.push(pkey_attr); IPA.metadata.objects.automember.primary_key = pkey_attr.name; var that = IPA.entity(spec); that.init = function() { that.entity_init(); that.builder.search_facet({ factory: IPA.automember.rule_search_facet, name: 'searchgroup', group_type: 'group', label: 'User group rules', //TODO: translate details_facet: 'usergrouprule', columns: [ 'cn', 'description' ] }). search_facet({ factory: IPA.automember.rule_search_facet, name: 'searchhostgroup', group_type: 'hostgroup', label: 'Host group rules', //TODO: translate details_facet: 'hostgrouprule', columns: [ 'cn', 'description' ] }). details_facet({ factory: IPA.automember.rule_details_facet, name: 'usergrouprule', group_type: 'group', label: 'User group rule', //TODO: translate disable_facet_tabs: true, redirect_info: { tab: 'amgroup' } }). details_facet({ factory: IPA.automember.rule_details_facet, name: 'hostgrouprule', group_type: 'hostgroup', label: 'Host group rule',//TODO: translate disable_facet_tabs: true, redirect_info: { tab: 'amhostgroup' } }). adder_dialog({ factory: IPA.automember.rule_adder_dialog, fields: [ { type: 'entity_select', name: 'cn', other_entity: 'group', other_field: 'cn' } ], height: '300' }). deleter_dialog({ factory: IPA.automember.rule_deleter_dialog }); }; return that; }; IPA.automember.rule_search_facet = function(spec) { spec = spec || {}; var that = IPA.search_facet(spec); that.group_type = spec.group_type; var init = function() { that.default_group_widget = IPA.automember.default_group_widget({ entity: that.entity, group_type: that.group_type }); }; that.refresh = function() { that.search_facet_refresh(); that.default_group_widget.refresh(); }; that.get_records_command_name = function() { return that.managed_entity.name + that.group_type+'_get_records'; }; that.get_search_command_name = function() { var name = that.managed_entity.name + that.group_type + '_find'; if (that.pagination && !that.search_all_entries) { name += '_pkeys'; } return name; }; that.create_get_records_command = function(pkeys, on_success, on_error) { var batch = that.table_facet_create_get_records_command(pkeys, on_success, on_error); for (var i=0; i', { 'class': 'automember-header' }).appendTo(container); var content = $('
', { 'class': 'automember-content' }).appendTo(container); that.default_group_widget.create(header); that.table.create(content); }; init(); return that; }; IPA.automember.rule_details_facet = function(spec) { spec = spec || {}; spec.fields = [ { name: 'cn', widget: 'general.cn' }, { type: 'textarea', name: 'description', widget: 'general.description' }, { type: 'automember_condition', name: 'automemberinclusiveregex', widget: 'inclusive.automemberinclusiveregex' }, { type: 'automember_condition', name: 'automemberexclusiveregex', widget: 'exclusive.automemberexclusiveregex' } ]; spec.widgets = [ { type: 'details_table_section', name: 'general', label: IPA.messages.details.general, widgets: [ { name: 'cn' }, { type: 'textarea', name: 'description' } ] }, { factory: IPA.collapsible_section, name: 'inclusive', label: 'Inclusive', //TODO:translate widgets: [ { type: 'automember_condition', name: 'automemberinclusiveregex', group_type: spec.group_type, add_command: 'add_condition', remove_command: 'remove_condition', adder_dialog: { title: 'Add Condition to ${pkey}', //TODO: translate fields: [ { name: 'key', type: 'select', options: IPA.automember.get_condition_attributes(spec.group_type), label: 'Attribute' //TODO: translate }, { name: 'automemberinclusiveregex', label: 'Expression' //TODO: translate } ] } } ] }, { factory: IPA.collapsible_section, name: 'exclusive', label: 'Exclusive', //TODO:translate widgets: [ { type: 'automember_condition', name: 'automemberexclusiveregex', group_type: spec.group_type, add_command: 'add_condition', remove_command: 'remove_condition', adder_dialog: { title: 'Add Condition to ${pkey}', //TODO: translate fields: [ { name: 'key', type: 'select', options: IPA.automember.get_condition_attributes(spec.group_type), label: 'Attribute' //TODO: translate }, { name: 'automemberexclusiveregex', label: 'Expression' //TODO: translate } ] } } ] } ]; var that = IPA.details_facet(spec); that.group_type = spec.group_type; that.get_refresh_command_name = function() { return that.entity.name+that.group_type+'_show'; }; that.create_refresh_command = function() { var command = that.details_facet_create_refresh_command(); command.set_option('type', that.group_type); return command; }; that.create_update_command = function() { var command = that.details_facet_create_update_command(); command.set_option('type', that.group_type); return command; }; return that; }; IPA.automember.rule_adder_dialog = function(spec) { spec = spec || {}; var that = IPA.entity_adder_dialog(spec); that.reset = function() { var field = that.fields.get_field('cn'); var facet = IPA.current_entity.get_facet(); field.widget.other_entity = IPA.get_entity(facet.group_type); that.dialog_reset(); }; that.create_add_command = function(record) { var facet = IPA.current_entity.get_facet(); var command = that.entity_adder_dialog_create_add_command(record); command.name = that.entity.name+facet.group_type+'_show'; command.set_option('type', facet.group_type); return command; }; return that; }; IPA.automember.rule_deleter_dialog = function(spec) { spec = spec || {}; var that = IPA.search_deleter_dialog(spec); that.create_command = function() { var facet = IPA.current_entity.get_facet(); var batch = that.search_deleter_dialog_create_command(); for (var i=0; i= 0) { if (results[i].completed === 1){ that.reload_facet({ result: results[i] }); return; } i--; } that.refresh_facet(); }; that.create_remove_command = function(values, on_success, on_error) { var batch = IPA.batch_command({ name: 'automember_remove_condition', on_success: on_success, on_error: on_error }); var pkeys = that.get_pkeys(); for (var i=0; i -1 && i2 > -1) { group = group.substring(i1 + 1,i2); } } that.update(group); }; that.update = function(group) { group = group || ''; that.set_group(group); }; that.create_command = function(method) { method = 'default_group_' + method; var command_name = that.entity.name + that.group_type + '_' + method; var command = IPA.command({ name: command_name, entity: that.entity.name, method: method, options: { type: that.group_type } }); return command; }; that.refresh = function() { var command = that.create_command('show'); command.on_success = that.load; command.execute(); }; that.remove_default_group = function() { var command = that.create_command('remove'); command.on_success = function() { that.update(''); }; command.on_error = that.refresh; command.execute(); }; that.set_default_group = function(group) { var command = that.create_command('set'); command.on_success = that.load; command.on_error = that.refresh; command.set_option('automemberdefaultgroup', group); command.execute(); }; that.create = function(container) { var title = that.get_title(); var default_group = $('
', { 'class': 'default_group' }).appendTo(container); that.header = $('

', { name: 'header', text: title, title: title }).appendTo(default_group); that.group_select.create(default_group); }; that.get_title = function() { if (that.group_type === 'group') { return 'Default user group'; //TODO: translate } else { return 'Default host group'; //TODO: translate } }; init(); return that; }; IPA.register('automember', IPA.automember.entity);