mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
WebUI: Fix "IPA Error 3007: RequirmentError" while adding idoverrideuser association
Add builder for association adder dialog which allows to override behavior of the component. Replace default implementation with a custom one for idoverrideuser. Replace text filter with 'ID view' select box in the idoverrideuser dialog. Ticket: https://pagure.io/freeipa/issue/8335 Signed-off-by: Serhii Tsymbaliuk <stsymbal@redhat.com> Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
This commit is contained in:
@@ -25,6 +25,7 @@
|
||||
define([
|
||||
'dojo/_base/lang',
|
||||
'dojo/Deferred',
|
||||
'./builder',
|
||||
'./metadata',
|
||||
'./ipa',
|
||||
'./jquery',
|
||||
@@ -38,7 +39,7 @@ define([
|
||||
'./facet',
|
||||
'./search',
|
||||
'./dialog'],
|
||||
function(lang, Deferred, metadata_provider, IPA, $, metadata,
|
||||
function(lang, Deferred, builder, metadata_provider, IPA, $, metadata,
|
||||
navigation, phases, reg, rpc, su, text) {
|
||||
|
||||
/**
|
||||
@@ -1209,7 +1210,8 @@ exp.association_facet = IPA.association_facet = function (spec, no_init) {
|
||||
|
||||
var pkeys = that.data.result.result[that.get_attribute_name()];
|
||||
|
||||
var dialog = IPA.association_adder_dialog({
|
||||
var dialog = builder.build('association_adder_dialog', {
|
||||
$type: that.other_entity.name,
|
||||
title: title,
|
||||
entity: that.entity,
|
||||
pkey: pkey,
|
||||
@@ -1675,6 +1677,13 @@ IPA.attr_read_only_evaluator = function(spec) {
|
||||
return that;
|
||||
};
|
||||
|
||||
// Create a registry for adder dialogs where key is name of 'other entity'.
|
||||
// It allows to override dialogs for some specific cases of association
|
||||
// creation.
|
||||
var dialog_builder = builder.get('association_adder_dialog');
|
||||
dialog_builder.factory = IPA.association_adder_dialog;
|
||||
reg.set('association_adder_dialog', dialog_builder.registry);
|
||||
|
||||
phases.on('registration', function() {
|
||||
var w = reg.widget;
|
||||
var f = reg.field;
|
||||
|
||||
@@ -919,35 +919,7 @@ IPA.adder_dialog = function(spec) {
|
||||
'class': 'input-group col-md-12 adder-dialog-top'
|
||||
}).appendTo(container);
|
||||
|
||||
var filter_placeholder = text.get('@i18n:association.filter_placeholder');
|
||||
filter_placeholder = filter_placeholder.replace('${other_entity}',
|
||||
that.other_entity.metadata.label);
|
||||
|
||||
that.filter_field = $('<input/>', {
|
||||
type: 'text',
|
||||
name: 'filter',
|
||||
'class': 'form-control',
|
||||
'placeholder': filter_placeholder,
|
||||
keyup: function(event) {
|
||||
if (event.keyCode === keys.ENTER) {
|
||||
that.search();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}).appendTo(input_group);
|
||||
|
||||
var input_group_btn = $('<div/>', {
|
||||
'class': 'input-group-btn'
|
||||
}).appendTo(input_group);
|
||||
|
||||
that.find_button = IPA.button({
|
||||
name: 'find',
|
||||
label: '@i18n:buttons.filter',
|
||||
click: function() {
|
||||
that.search();
|
||||
return false;
|
||||
}
|
||||
}).appendTo(input_group_btn);
|
||||
that.filter_field = that.get_filter_field(input_group);
|
||||
|
||||
var row = $('<div/>', { 'class': 'row adder-dialog-main'}).appendTo(container);
|
||||
//
|
||||
@@ -1132,6 +1104,49 @@ IPA.adder_dialog = function(spec) {
|
||||
return that.filter_field.val();
|
||||
};
|
||||
|
||||
/**
|
||||
* Return field for filtering available items
|
||||
*
|
||||
* Default implementation returns text input + "Filter" button.
|
||||
* It can be overridden.
|
||||
*
|
||||
* @param {HTMLElement} input_group - container for a filter field
|
||||
* @return {HTMLElement}
|
||||
*/
|
||||
that.get_filter_field = function(input_group) {
|
||||
var filter_placeholder = text.get(
|
||||
'@i18n:association.filter_placeholder'
|
||||
).replace('${other_entity}', that.other_entity.metadata.label);
|
||||
|
||||
var filter_field = $('<input/>', {
|
||||
type: 'text',
|
||||
name: 'filter',
|
||||
'class': 'form-control',
|
||||
'placeholder': filter_placeholder,
|
||||
keyup: function(event) {
|
||||
if (event.keyCode === keys.ENTER) {
|
||||
that.search();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}).appendTo(input_group);
|
||||
|
||||
var input_group_btn = $('<div/>', {
|
||||
'class': 'input-group-btn'
|
||||
}).appendTo(input_group);
|
||||
|
||||
that.find_button = IPA.button({
|
||||
name: 'find',
|
||||
label: '@i18n:buttons.filter',
|
||||
click: function() {
|
||||
that.search();
|
||||
return false;
|
||||
}
|
||||
}).appendTo(input_group_btn);
|
||||
|
||||
return filter_field;
|
||||
};
|
||||
|
||||
/**
|
||||
* Clear rows in available table
|
||||
*/
|
||||
|
||||
@@ -205,6 +205,20 @@ return {
|
||||
add_title: '@i18n:objects.group.add_into_sudo',
|
||||
remove_method: 'remove_user',
|
||||
remove_title: '@i18n:objects.group.remove_from_sudo'
|
||||
},
|
||||
{
|
||||
$type: 'association',
|
||||
name: 'member_idoverrideuser',
|
||||
associator: IPA.serial_associator,
|
||||
add_title: '@i18n:objects.group.add_idoverride_user',
|
||||
remove_title: '@i18n:objects.group.remove_idoverride_users',
|
||||
columns: [
|
||||
{
|
||||
name: 'ipaanchoruuid',
|
||||
label: '@i18n:objects.idoverrideuser.anchor_label',
|
||||
link: false
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
standard_association_facets: true,
|
||||
|
||||
@@ -966,6 +966,58 @@ idviews.unapply_action = function(spec) {
|
||||
return that;
|
||||
};
|
||||
|
||||
idviews.idoverrideuser_adder_dialog = function(spec) {
|
||||
|
||||
spec = spec || {};
|
||||
|
||||
var that = IPA.association_adder_dialog(spec);
|
||||
|
||||
that.base_search = that.search;
|
||||
|
||||
that.search = function() {
|
||||
// Search for users only in case a ID view is selected
|
||||
if (that.get_filter()) {
|
||||
that.base_search();
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Replace default text filter with a select box for filtering by ID view
|
||||
*/
|
||||
that.get_filter_field = function(input_group) {
|
||||
|
||||
var filter_field = $('<select/>', {
|
||||
name: 'filter',
|
||||
'class': 'form-control',
|
||||
change: function(event) {
|
||||
that.search();
|
||||
}
|
||||
}).appendTo(input_group);
|
||||
|
||||
rpc.command({
|
||||
entity: 'idview',
|
||||
method: 'find',
|
||||
on_success: function(data) {
|
||||
var results = data.result;
|
||||
|
||||
for (var i=0; i<results.count; i++) {
|
||||
var result = results.result[i];
|
||||
$('<option/>', {
|
||||
text: result.cn[0],
|
||||
value: result.cn[0]
|
||||
}).appendTo(filter_field);
|
||||
}
|
||||
|
||||
that.search();
|
||||
}
|
||||
}).execute();
|
||||
|
||||
return filter_field;
|
||||
};
|
||||
|
||||
return that;
|
||||
};
|
||||
|
||||
/**
|
||||
* ID View entity specification object
|
||||
* @member idviews
|
||||
@@ -993,6 +1045,7 @@ idviews.register = function() {
|
||||
var f = reg.facet;
|
||||
var a = reg.action;
|
||||
var w = reg.widget;
|
||||
var ad = reg.association_adder_dialog;
|
||||
|
||||
e.register({type: 'idview', spec: idviews.spec});
|
||||
e.register({
|
||||
@@ -1012,6 +1065,11 @@ idviews.register = function() {
|
||||
|
||||
w.register('idviews_certs', idviews.idviews_certs_widget);
|
||||
w.register('cert_textarea', idviews.cert_textarea_widget);
|
||||
|
||||
ad.register({
|
||||
type: 'idoverrideuser',
|
||||
factory: idviews.idoverrideuser_adder_dialog
|
||||
});
|
||||
};
|
||||
|
||||
phases.on('registration', idviews.register);
|
||||
|
||||
@@ -835,6 +835,9 @@ class i18n_messages(Command):
|
||||
"Remove users from member managers for user group "
|
||||
"'${primary_key}'"
|
||||
),
|
||||
"add_idoverride_user": _(
|
||||
"Add user ID override into user group '${primary_key}'"
|
||||
),
|
||||
"details": _("Group Settings"),
|
||||
"external": _("External"),
|
||||
"groups": _("Groups"),
|
||||
@@ -868,6 +871,9 @@ class i18n_messages(Command):
|
||||
"remove_users": _(
|
||||
"Remove users from user group '${primary_key}'"
|
||||
),
|
||||
"remove_idoverride_users": _(
|
||||
"Remove user ID overrides from user group '${primary_key}'"
|
||||
),
|
||||
"type": _("Group Type"),
|
||||
"user_groups": _("User Groups"),
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user