mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
Attribute facet
Created new type of facet: attribute facet. This facet is similar to association facet but it serves for displaying object's multivalued attributes which behaves like association attributes. It will serve as a basis for displaying group's externalmember attribute. https://fedorahosted.org/freeipa/ticket/2895
This commit is contained in:
committed by
Martin Kosek
parent
7c99e2d661
commit
5d2b0fecd5
@@ -36,6 +36,7 @@ IPA.entity_adder_dialog = function(spec) {
|
||||
that.retry = typeof spec.retry !== 'undefined' ? spec.retry : true;
|
||||
that.command = null;
|
||||
that.added = IPA.observer();
|
||||
that.subject = spec.subject || that.entity.metadata.label_singular;
|
||||
|
||||
that.show_edit_page = spec.show_edit_page || show_edit_page;
|
||||
|
||||
@@ -64,9 +65,8 @@ IPA.entity_adder_dialog = function(spec) {
|
||||
that.add(
|
||||
function(data, text_status, xhr) {
|
||||
that.added.notify();
|
||||
var label = that.entity.metadata.label_singular;
|
||||
var message = IPA.messages.dialogs.add_confirmation;
|
||||
message = message.replace('${entity}', label);
|
||||
message = message.replace('${entity}', that.subject);
|
||||
that.show_message(message);
|
||||
|
||||
var facet = IPA.current_entity.get_facet();
|
||||
@@ -184,4 +184,3 @@ IPA.entity_adder_dialog = function(spec) {
|
||||
|
||||
return that;
|
||||
};
|
||||
|
||||
|
||||
@@ -50,8 +50,8 @@ IPA.associator = function (spec) {
|
||||
|
||||
|
||||
/**
|
||||
*This associator is built for the case where each association requires a separate rpc
|
||||
*/
|
||||
* This associator is built for the case where each association requires a separate rpc
|
||||
*/
|
||||
IPA.serial_associator = function(spec) {
|
||||
|
||||
spec = spec || {};
|
||||
@@ -95,9 +95,9 @@ IPA.serial_associator = function(spec) {
|
||||
};
|
||||
|
||||
/**
|
||||
*This associator is for the common case where all the asociations can be sent
|
||||
in a single rpc
|
||||
*/
|
||||
* This associator is for the common case where all the asociations can be sent
|
||||
* in a single rpc
|
||||
*/
|
||||
IPA.bulk_associator = function(spec) {
|
||||
|
||||
spec = spec || {};
|
||||
@@ -130,6 +130,50 @@ IPA.bulk_associator = function(spec) {
|
||||
return that;
|
||||
};
|
||||
|
||||
/**
|
||||
* This dialog is for adding value of multivalued attribute which behaves like
|
||||
* association attribute.
|
||||
*/
|
||||
IPA.attribute_adder_dialog = function(spec) {
|
||||
|
||||
spec = spec || {};
|
||||
|
||||
spec.name = spec.name || 'attr_adder_dialog';
|
||||
spec.method = spec.method || 'add_member';
|
||||
|
||||
var metadata = IPA.get_command_option(spec.entity.name+'_'+spec.method, spec.attribute);
|
||||
|
||||
spec.fields = spec.fields || [
|
||||
{
|
||||
name: spec.attribute,
|
||||
metadata: metadata,
|
||||
required: true
|
||||
}
|
||||
];
|
||||
spec.title = spec.title || IPA.messages.dialogs.add_title.replace('${entity}', metadata.label);
|
||||
spec.subject = metadata.label;
|
||||
|
||||
var that = IPA.entity_adder_dialog(spec);
|
||||
|
||||
that.create_add_command = function(record) {
|
||||
|
||||
var command = that.entity_adder_dialog_create_add_command(record);
|
||||
|
||||
command.add_args(that.entity.get_primary_key());
|
||||
|
||||
return command;
|
||||
};
|
||||
|
||||
that.create_buttons = function() {
|
||||
|
||||
that.buttons.remove('add_and_edit');
|
||||
};
|
||||
|
||||
that.create_buttons();
|
||||
|
||||
return that;
|
||||
};
|
||||
|
||||
/**
|
||||
* This dialog is used for adding associations between two entities.
|
||||
*/
|
||||
@@ -1093,3 +1137,204 @@ IPA.association_facet = function (spec, no_init) {
|
||||
|
||||
return that;
|
||||
};
|
||||
|
||||
IPA.attribute_facet = function(spec, no_init) {
|
||||
|
||||
spec = spec || {};
|
||||
|
||||
//default buttons and their actions
|
||||
spec.actions = spec.actions || [];
|
||||
spec.actions.unshift(
|
||||
IPA.refresh_action,
|
||||
{
|
||||
name: 'remove',
|
||||
hide_cond: ['read-only'],
|
||||
enable_cond: ['item-selected'],
|
||||
handler: function(facet) {
|
||||
facet.show_remove_dialog();
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'add',
|
||||
hide_cond: ['read-only'],
|
||||
handler: function(facet) {
|
||||
facet.show_add_dialog();
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
spec.control_buttons = spec.control_buttons || [];
|
||||
spec.control_buttons.unshift(
|
||||
{
|
||||
name: 'refresh',
|
||||
label: IPA.messages.buttons.refresh,
|
||||
icon: 'reset-icon'
|
||||
},
|
||||
{
|
||||
name: 'remove',
|
||||
label: IPA.messages.buttons.remove,
|
||||
icon: 'remove-icon'
|
||||
},
|
||||
{
|
||||
name: 'add',
|
||||
label: IPA.messages.buttons.add,
|
||||
icon: 'add-icon'
|
||||
});
|
||||
|
||||
spec.state = spec.state || {};
|
||||
spec.state.evaluators = spec.state.evaluators || [];
|
||||
spec.state.evaluators.push(
|
||||
IPA.selected_state_evaluator,
|
||||
IPA.read_only_state_evaluator);
|
||||
|
||||
spec.columns = spec.columns || [ spec.attribute ];
|
||||
spec.table_name = spec.table_name || spec.attribute;
|
||||
|
||||
var that = IPA.table_facet(spec, true);
|
||||
|
||||
that.attribute = spec.attribute;
|
||||
|
||||
that.add_method = spec.add_method || 'add_member';
|
||||
that.remove_method = spec.remove_method || 'remove_member';
|
||||
|
||||
that.create_header = function(container) {
|
||||
|
||||
that.facet_create_header(container);
|
||||
that.create_control_buttons(that.controls);
|
||||
};
|
||||
|
||||
that.show = function() {
|
||||
that.facet_show();
|
||||
|
||||
that.pkey = IPA.nav.get_state(that.entity.name+'-pkey');
|
||||
that.header.set_pkey(that.pkey);
|
||||
};
|
||||
|
||||
that.get_records_map = function(data) {
|
||||
|
||||
var records_map = $.ordered_map();
|
||||
var pkeys = data.result.result[that.attribute];
|
||||
|
||||
for (var i=0; pkeys && i<pkeys.length; i++) {
|
||||
var pkey = pkeys[i];
|
||||
var record = {};
|
||||
record[that.attribute] = pkey;
|
||||
records_map.put(pkey, record);
|
||||
}
|
||||
|
||||
return records_map;
|
||||
};
|
||||
|
||||
that.refresh = function() {
|
||||
|
||||
var pkey = that.entity.get_primary_key();
|
||||
|
||||
var command = IPA.command({
|
||||
entity: that.entity.name,
|
||||
method: 'show',
|
||||
args: pkey
|
||||
});
|
||||
|
||||
command.on_success = function(data, text_status, xhr) {
|
||||
that.load(data);
|
||||
that.show_content();
|
||||
};
|
||||
|
||||
command.on_error = function(xhr, text_status, error_thrown) {
|
||||
that.redirect_error(error_thrown);
|
||||
that.report_error(error_thrown);
|
||||
};
|
||||
|
||||
command.execute();
|
||||
};
|
||||
|
||||
that.clear = function() {
|
||||
that.header.clear();
|
||||
that.table.clear();
|
||||
};
|
||||
|
||||
that.needs_update = function() {
|
||||
if (that._needs_update !== undefined) return that._needs_update;
|
||||
|
||||
var pkey = IPA.nav.get_state(that.entity.name+'-pkey');
|
||||
if (that.pkey !== pkey) return true;
|
||||
|
||||
var page = parseInt(IPA.nav.get_state(that.entity.name+'-page'), 10) || 1;
|
||||
if (that.table.current_page !== page) return true;
|
||||
|
||||
return that.facet_needs_update();
|
||||
};
|
||||
|
||||
that.show_add_dialog = function() {
|
||||
|
||||
var dialog = IPA.attribute_adder_dialog({
|
||||
attribute: spec.attribute,
|
||||
entity: that.entity
|
||||
});
|
||||
|
||||
dialog.open(that.container);
|
||||
};
|
||||
|
||||
that.show_remove_dialog = function() {
|
||||
|
||||
var selected_values = that.get_selected_values();
|
||||
|
||||
if (!selected_values.length) {
|
||||
var message = IPA.messages.dialogs.remove_empty;
|
||||
alert(message);
|
||||
return;
|
||||
}
|
||||
|
||||
var dialog = IPA.deleter_dialog({
|
||||
entity: that.entity,
|
||||
values: selected_values
|
||||
});
|
||||
|
||||
dialog.execute = function() {
|
||||
that.remove(
|
||||
selected_values,
|
||||
function(data) {
|
||||
that.load(data);
|
||||
that.show_content();
|
||||
dialog.close();
|
||||
},
|
||||
function() {
|
||||
that.refresh();
|
||||
dialog.close();
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
dialog.open(that.container);
|
||||
};
|
||||
|
||||
that.remove = function(values, on_success, on_error) {
|
||||
|
||||
var pkey = that.entity.get_primary_key();
|
||||
|
||||
var command = IPA.command({
|
||||
entity: that.entity.name,
|
||||
method: that.remove_method,
|
||||
args: pkey,
|
||||
on_success: on_success,
|
||||
on_error: on_error
|
||||
});
|
||||
|
||||
command.set_option(that.attribute, values);
|
||||
|
||||
command.execute();
|
||||
};
|
||||
|
||||
|
||||
that.init_attribute_facet = function() {
|
||||
|
||||
that.init_facet();
|
||||
that.init_table_columns();
|
||||
that.init_table(that.entity);
|
||||
};
|
||||
|
||||
if (!no_init) that.init_attribute_facet();
|
||||
|
||||
return that;
|
||||
};
|
||||
@@ -420,6 +420,15 @@ IPA.entity_builder = function() {
|
||||
return that;
|
||||
};
|
||||
|
||||
that.attribute_facet = function(spec) {
|
||||
|
||||
spec.type = spec.type || 'attribute';
|
||||
|
||||
that.facet(spec);
|
||||
|
||||
return that;
|
||||
};
|
||||
|
||||
that.standard_association_facets = function(spec) {
|
||||
|
||||
spec = spec || {};
|
||||
|
||||
@@ -747,6 +747,8 @@ IPA.table_facet = function(spec, no_init) {
|
||||
that.row_disabled_attribute = spec.row_disabled_attribute;
|
||||
that.details_facet_name = spec.details_facet || 'default';
|
||||
|
||||
that.table_name = spec.table_name;
|
||||
|
||||
that.columns = $.ordered_map();
|
||||
|
||||
that.get_columns = function() {
|
||||
@@ -1003,7 +1005,7 @@ IPA.table_facet = function(spec, no_init) {
|
||||
|
||||
that.table = IPA.table_widget({
|
||||
'class': 'content-table',
|
||||
name: entity.metadata.primary_key,
|
||||
name: that.table_name || entity.metadata.primary_key,
|
||||
label: entity.metadata.label,
|
||||
entity: entity,
|
||||
pagination: true,
|
||||
@@ -1125,6 +1127,7 @@ IPA.facet_builder = function(entity) {
|
||||
that.prepare_methods.nested_search = that.prepare_nested_search_spec;
|
||||
that.prepare_methods.details = that.prepare_details_spec;
|
||||
that.prepare_methods.association = that.prepare_association_spec;
|
||||
that.prepare_methods.attribute = that.prepare_attribute_spec;
|
||||
}
|
||||
|
||||
that.build_facets = function() {
|
||||
@@ -1195,6 +1198,17 @@ IPA.facet_builder = function(entity) {
|
||||
return spec;
|
||||
};
|
||||
|
||||
that.prepare_attribute_spec = function(spec) {
|
||||
spec.title = spec.title || entity.metadata.label_singular;
|
||||
spec.label = spec.label || entity.metadata.label_singular;
|
||||
|
||||
var attr_metadata = IPA.get_entity_param(entity.name, spec.attribute);
|
||||
spec.tab_label = spec.tab_label || attr_metadata.label;
|
||||
spec.factory = spec.factory || IPA.attribute_facet;
|
||||
|
||||
return spec;
|
||||
};
|
||||
|
||||
that.prepare_association_spec = function(spec) {
|
||||
|
||||
spec.entity = entity;
|
||||
|
||||
Reference in New Issue
Block a user