/* 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 . */ define([ './metadata', './ipa', './jquery', './navigation', './phases', './reg', './text', './details', './search', './association', './entity'], function(metadata_provider, IPA, $, navigation, phases, reg, text) { var exp = IPA.automember = {}; var make_spec = function() { return { name: 'automember', policies:[ { $factory: IPA.facet_update_policy, source_facet: 'usergrouprule', dest_facet: 'searchgroup' }, { $factory: IPA.facet_update_policy, source_facet: 'hostgrouprule', dest_facet: 'searchhostgroup' } ], facets: [ { $factory: IPA.automember.rule_search_facet, $type: 'search', name: 'searchgroup', group_type: 'group', label: '@i18n:objects.automember.usergrouprules', details_facet: 'usergrouprule', pagination: false, columns: [ 'cn', 'description' ] }, { $factory: IPA.automember.rule_search_facet, $type: 'search', name: 'searchhostgroup', group_type: 'hostgroup', label: '@i18n:objects.automember.hostgrouprules', details_facet: 'hostgrouprule', pagination: false, columns: [ 'cn', 'description' ] }, { $factory: IPA.automember.rule_details_facet, $type: 'details', name: 'usergrouprule', group_type: 'group', label: '@i18n:objects.automember.usergrouprule', disable_facet_tabs: true, check_rights: false, redirect_info: { facet: 'searchgroup' } }, { $factory: IPA.automember.rule_details_facet, $type: 'details', name: 'hostgrouprule', group_type: 'hostgroup', label: '@i18n:objects.automember.hostgrouprule', disable_facet_tabs: true, check_rights: false, redirect_info: { facet: 'searchhostgroup' } } ], adder_dialog: { $factory: IPA.automember.rule_adder_dialog, title: '@i18n:objects.automember.add_rule', fields: [ { $type: 'entity_select', name: 'cn', other_entity: 'group', other_field: 'cn' } ], height: '300' }, deleter_dialog: { $factory: IPA.automember.rule_deleter_dialog } };}; exp.metadata_extension_pre_op = function(spec, context) { //HACK: Automember takes_params is missing a cn attribute. This hack //copies cn from mod command. Also it is set as pkey. var metadata = metadata_provider.source; var pkey_attr = metadata.commands.automember_mod.takes_args[0]; pkey_attr.primary_key = true; metadata.objects.automember.takes_params.push(pkey_attr); metadata.objects.automember.primary_key = pkey_attr.name; return spec; }; 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); }; that.show_add_dialog = function() { var dialog = that.managed_entity.get_dialog('add'); if (!that.adder_dialog) { that.adder_dialog = dialog; dialog.added.attach(function() { that.refresh(); }); } dialog.pkey_prefix = that.managed_entity_pkey_prefix(); dialog.group_type = that.group_type; dialog.open(that.container); }; that.create_remove_dialog = function() { var dialog = that.search_facet_create_remove_dialog(); dialog.group_type = that.group_type; return dialog; }; 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: '@i18n:details.general', widgets: [ { name: 'cn' }, { $type: 'textarea', name: 'description' } ] }, { $factory: IPA.collapsible_section, name: 'inclusive', label: '@i18n:objects.automember.inclusive', widgets: [ { $type: 'automember_condition', name: 'automemberinclusiveregex', group_type: spec.group_type, add_command: 'add_condition', remove_command: 'remove_condition', adder_dialog: { title: '@i18n:objects.automember.add_condition', fields: [ { name: 'key', $type: 'select', options: IPA.automember.get_condition_attributes(spec.group_type), label: '@i18n:objects.automember.attribute' }, { name: 'automemberinclusiveregex', label: '@i18n:objects.automember.expression' } ] } } ] }, { $factory: IPA.collapsible_section, name: 'exclusive', label: '@i18n:objects.automember.exclusive', widgets: [ { $type: 'automember_condition', name: 'automemberexclusiveregex', group_type: spec.group_type, add_command: 'add_condition', remove_command: 'remove_condition', adder_dialog: { title: '@i18n:objects.automember.add_condition', fields: [ { name: 'key', $type: 'select', options: IPA.automember.get_condition_attributes(spec.group_type), label: '@i18n:objects.automember.attribute' }, { name: 'automemberexclusiveregex', label: '@i18n:objects.automember.expression' } ] } } ] } ]; 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.group_type = spec.group_type || ''; that.show_edit_page = function (entity,result) { var pkey_name = entity.metadata.primary_key; var pkey = result[pkey_name]; if (pkey instanceof Array) { pkey = pkey[0]; } var facetname = that.group_type === 'group' ? 'usergrouprule' : 'hostgrouprule'; navigation.show_entity(that.entity.name, facetname, [pkey]); }; that.reset = function() { var field = that.fields.get_field('cn'); field.widget.other_entity = IPA.get_entity(that.group_type); that.dialog_reset(); }; that.create_add_command = function(record) { var command = that.entity_adder_dialog_create_add_command(record); command.name = that.entity.name+that.group_type+'_show'; command.set_option('type', that.group_type); return command; }; return that; }; IPA.automember.rule_deleter_dialog = function(spec) { spec = spec || {}; var that = IPA.search_deleter_dialog(spec); that.group_type = spec.group_type || ''; that.create_command = function() { 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 text.get('@i18n:objects.automember.default_user_group'); } else { return text.get('@i18n:objects.automember.default_host_group'); } }; init(); return that; }; exp.entity_spec = make_spec(); exp.register = function() { var e = reg.entity; var w = reg.widget; var f = reg.field; e.register({ type: 'automember', spec: exp.entity_spec, pre_ops: [ exp.metadata_extension_pre_op ] }); w.register('automember_condition', IPA.automember.condition_widget); f.register('automember_condition', IPA.automember.condition_field); }; phases.on('registration', exp.register); return exp; });