diff options
-rw-r--r-- | install/ui/automember.js | 186 | ||||
-rw-r--r-- | install/ui/ipa.css | 34 | ||||
-rw-r--r-- | install/ui/test/data/automembergroup_default_group_remove.json | 14 | ||||
-rw-r--r-- | install/ui/test/data/automembergroup_default_group_set.json | 16 | ||||
-rw-r--r-- | install/ui/test/data/automembergroup_default_group_show.json | 17 | ||||
-rw-r--r-- | install/ui/test/data/automemberhostgroup_default_group_remove.json | 14 | ||||
-rw-r--r-- | install/ui/test/data/automemberhostgroup_default_group_set.json | 16 | ||||
-rw-r--r-- | install/ui/test/data/automemberhostgroup_default_group_show.json | 15 | ||||
-rw-r--r-- | install/ui/widget.js | 5 |
9 files changed, 315 insertions, 2 deletions
diff --git a/install/ui/automember.js b/install/ui/automember.js index d6c3c7ee..e9b48dc8 100644 --- a/install/ui/automember.js +++ b/install/ui/automember.js @@ -106,6 +106,21 @@ IPA.automember.rule_search_facet = function(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'; }; @@ -139,6 +154,23 @@ IPA.automember.rule_search_facet = function(spec) { return command; }; + that.create_content = function(container) { + + var header = $('<div/>', { + 'class': 'automember-header' + }).appendTo(container); + + var content = $('<div/>', { + 'class': 'automember-content' + }).appendTo(container); + + that.default_group_widget.create(header); + that.table.create(content); + + }; + + init(); + return that; }; @@ -458,4 +490,158 @@ IPA.automember.condition_widget = function(spec) { IPA.widget_factories['automember_condition'] = IPA.automember.condition_widget; +IPA.automember.default_group_widget = function(spec) { + + spec = spec || {}; + + var that = IPA.widget(spec); + that.group_type = spec.group_type; + that.group = ''; + + var init = function() { + + that.group_select = IPA.entity_select_widget({ + name: 'automemberdefaultgroup', + other_entity: that.group_type, + other_field: 'cn', + show_undo: false + }); + + that.group_select.value_changed.attach(that.group_changed); + }; + + that.get_group = function() { + + var group = that.group_select.save(); + group = group.length === 0 ? '' : group[0]; + return group; + }; + + that.set_group = function(group) { + + if (group === that.group) return; + + that.group = group; + that.group_select.update([group]); + }; + + that.group_changed = function() { + + var group = that.get_group(); + + if (group === that.group) return; + + if (group === '') { + that.remove_default_group(); + } else { + that.set_default_group(group); + } + }; + + that.load = function(data) { + + var group = data.result.result.automemberdefaultgroup; + + if (group) group = group[0]; + + if (!group || group.indexOf('cn=') === -1) { + group = ''; + } else { + //extract from dn + var i1 = group.indexOf('='); + var i2 = group.indexOf(','); + if (i1 > -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 = $('<div />', { + 'class': 'default_group' + }).appendTo(container); + + that.header = $('<h2/>', { + 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);
\ No newline at end of file diff --git a/install/ui/ipa.css b/install/ui/ipa.css index ab61e867..94ae1f77 100644 --- a/install/ui/ipa.css +++ b/install/ui/ipa.css @@ -1485,4 +1485,38 @@ div.entity[name=hbactest] div.facet[name=run_test] .hbac-test-content { .dnstype-table td { font-weight: normal; +} + +/* --- Automember --- */ + +.automember-header { + position: absolute; + top: 0; + left: 3px; + right: 3px; + height: 52px; +} + +.automember-content { + position: absolute; + top: 52px; + left: 0; + right: 0; + bottom: 0px; +} + +.automember-header .default_group { + border-bottom: 1px solid #DFDFDF; + border-top: 1px solid #DFDFDF; + padding-bottom: 5px; + padding-top: 8px; +} + +.automember-header .default_group h2 { + display: inline-block; + margin: 0 15px 0 20px; +} + +.automember-header .default_group label { + margin-right: 20px; }
\ No newline at end of file diff --git a/install/ui/test/data/automembergroup_default_group_remove.json b/install/ui/test/data/automembergroup_default_group_remove.json new file mode 100644 index 00000000..6df1dfe8 --- /dev/null +++ b/install/ui/test/data/automembergroup_default_group_remove.json @@ -0,0 +1,14 @@ +{ + "error": null, + "id": null, + "result": { + "result": { + "automemberdefaultgroup": "No default group set", + "cn": [ + "Group" + ] + }, + "summary": "Removed default group for automember \"group\"", + "value": "group" + } +}
\ No newline at end of file diff --git a/install/ui/test/data/automembergroup_default_group_set.json b/install/ui/test/data/automembergroup_default_group_set.json new file mode 100644 index 00000000..2516c74e --- /dev/null +++ b/install/ui/test/data/automembergroup_default_group_set.json @@ -0,0 +1,16 @@ +{ + "error": null, + "id": null, + "result": { + "result": { + "automemberdefaultgroup": [ + "cn=foogroup,cn=groups,cn=accounts,dc=dev,dc=example,dc=com" + ], + "cn": [ + "Group" + ] + }, + "summary": "Set default group for automember \"group\"", + "value": "group" + } +}
\ No newline at end of file diff --git a/install/ui/test/data/automembergroup_default_group_show.json b/install/ui/test/data/automembergroup_default_group_show.json new file mode 100644 index 00000000..148bb472 --- /dev/null +++ b/install/ui/test/data/automembergroup_default_group_show.json @@ -0,0 +1,17 @@ +{ + "error": null, + "id": null, + "result": { + "result": { + "automemberdefaultgroup": [ + "cn=foogroup,cn=groups,cn=accounts,dc=dev,dc=example,dc=com" + ], + "cn": [ + "Group" + ], + "dn": "cn=group,cn=automember,cn=etc,dc=dev,dc=example,dc=com" + }, + "summary": null, + "value": "group" + } +}
\ No newline at end of file diff --git a/install/ui/test/data/automemberhostgroup_default_group_remove.json b/install/ui/test/data/automemberhostgroup_default_group_remove.json new file mode 100644 index 00000000..4bd8a4a9 --- /dev/null +++ b/install/ui/test/data/automemberhostgroup_default_group_remove.json @@ -0,0 +1,14 @@ +{ + "error": null, + "id": null, + "result": { + "result": { + "automemberdefaultgroup": "No default group set", + "cn": [ + "Hostgroup" + ] + }, + "summary": "Removed default group for automember \"hostgroup\"", + "value": "hostgroup" + } +}
\ No newline at end of file diff --git a/install/ui/test/data/automemberhostgroup_default_group_set.json b/install/ui/test/data/automemberhostgroup_default_group_set.json new file mode 100644 index 00000000..7837653e --- /dev/null +++ b/install/ui/test/data/automemberhostgroup_default_group_set.json @@ -0,0 +1,16 @@ +{ + "error": null, + "id": null, + "result": { + "result": { + "automemberdefaultgroup": [ + "cn=foohostgroup,cn=hostgroups,cn=accounts,dc=dev,dc=example,dc=com" + ], + "cn": [ + "Hostgroup" + ] + }, + "summary": "Set default group for automember \"hostgroup\"", + "value": "hostgroup" + } +}
\ No newline at end of file diff --git a/install/ui/test/data/automemberhostgroup_default_group_show.json b/install/ui/test/data/automemberhostgroup_default_group_show.json new file mode 100644 index 00000000..2203f249 --- /dev/null +++ b/install/ui/test/data/automemberhostgroup_default_group_show.json @@ -0,0 +1,15 @@ +{ + "error": null, + "id": null, + "result": { + "result": { + "automemberdefaultgroup": "No default group set", + "cn": [ + "Hostgroup" + ], + "dn": "cn=hostgroup,cn=automember,cn=etc,dc=dev,dc=example,dc=com" + }, + "summary": null, + "value": "hostgroup" + } +}
\ No newline at end of file diff --git a/install/ui/widget.js b/install/ui/widget.js index 807191e5..2617487f 100644 --- a/install/ui/widget.js +++ b/install/ui/widget.js @@ -2064,7 +2064,7 @@ IPA.combobox_widget = function(spec) { type: 'text', name: that.name, title: that.tooltip, - readonly: !that.editable, + readonly: !that.editable || that.read_only, keyup: function() { that.input_field_changed.notify([], that); }, @@ -2147,7 +2147,8 @@ IPA.combobox_widget = function(spec) { }; that.open = function() { - that.list_container.css('visibility', 'visible'); + if (!that.read_only) + that.list_container.css('visibility', 'visible'); }; that.close = function() { |