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.retry = typeof spec.retry !== 'undefined' ? spec.retry : true;
|
||||||
that.command = null;
|
that.command = null;
|
||||||
that.added = IPA.observer();
|
that.added = IPA.observer();
|
||||||
|
that.subject = spec.subject || that.entity.metadata.label_singular;
|
||||||
|
|
||||||
that.show_edit_page = spec.show_edit_page || show_edit_page;
|
that.show_edit_page = spec.show_edit_page || show_edit_page;
|
||||||
|
|
||||||
@@ -64,9 +65,8 @@ IPA.entity_adder_dialog = function(spec) {
|
|||||||
that.add(
|
that.add(
|
||||||
function(data, text_status, xhr) {
|
function(data, text_status, xhr) {
|
||||||
that.added.notify();
|
that.added.notify();
|
||||||
var label = that.entity.metadata.label_singular;
|
|
||||||
var message = IPA.messages.dialogs.add_confirmation;
|
var message = IPA.messages.dialogs.add_confirmation;
|
||||||
message = message.replace('${entity}', label);
|
message = message.replace('${entity}', that.subject);
|
||||||
that.show_message(message);
|
that.show_message(message);
|
||||||
|
|
||||||
var facet = IPA.current_entity.get_facet();
|
var facet = IPA.current_entity.get_facet();
|
||||||
@@ -184,4 +184,3 @@ IPA.entity_adder_dialog = function(spec) {
|
|||||||
|
|
||||||
return that;
|
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) {
|
IPA.serial_associator = function(spec) {
|
||||||
|
|
||||||
spec = 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
|
* This associator is for the common case where all the asociations can be sent
|
||||||
in a single rpc
|
* in a single rpc
|
||||||
*/
|
*/
|
||||||
IPA.bulk_associator = function(spec) {
|
IPA.bulk_associator = function(spec) {
|
||||||
|
|
||||||
spec = spec || {};
|
spec = spec || {};
|
||||||
@@ -130,6 +130,50 @@ IPA.bulk_associator = function(spec) {
|
|||||||
return that;
|
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.
|
* This dialog is used for adding associations between two entities.
|
||||||
*/
|
*/
|
||||||
@@ -1093,3 +1137,204 @@ IPA.association_facet = function (spec, no_init) {
|
|||||||
|
|
||||||
return that;
|
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;
|
return that;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
that.attribute_facet = function(spec) {
|
||||||
|
|
||||||
|
spec.type = spec.type || 'attribute';
|
||||||
|
|
||||||
|
that.facet(spec);
|
||||||
|
|
||||||
|
return that;
|
||||||
|
};
|
||||||
|
|
||||||
that.standard_association_facets = function(spec) {
|
that.standard_association_facets = function(spec) {
|
||||||
|
|
||||||
spec = spec || {};
|
spec = spec || {};
|
||||||
|
|||||||
@@ -747,6 +747,8 @@ IPA.table_facet = function(spec, no_init) {
|
|||||||
that.row_disabled_attribute = spec.row_disabled_attribute;
|
that.row_disabled_attribute = spec.row_disabled_attribute;
|
||||||
that.details_facet_name = spec.details_facet || 'default';
|
that.details_facet_name = spec.details_facet || 'default';
|
||||||
|
|
||||||
|
that.table_name = spec.table_name;
|
||||||
|
|
||||||
that.columns = $.ordered_map();
|
that.columns = $.ordered_map();
|
||||||
|
|
||||||
that.get_columns = function() {
|
that.get_columns = function() {
|
||||||
@@ -1003,7 +1005,7 @@ IPA.table_facet = function(spec, no_init) {
|
|||||||
|
|
||||||
that.table = IPA.table_widget({
|
that.table = IPA.table_widget({
|
||||||
'class': 'content-table',
|
'class': 'content-table',
|
||||||
name: entity.metadata.primary_key,
|
name: that.table_name || entity.metadata.primary_key,
|
||||||
label: entity.metadata.label,
|
label: entity.metadata.label,
|
||||||
entity: entity,
|
entity: entity,
|
||||||
pagination: true,
|
pagination: true,
|
||||||
@@ -1125,6 +1127,7 @@ IPA.facet_builder = function(entity) {
|
|||||||
that.prepare_methods.nested_search = that.prepare_nested_search_spec;
|
that.prepare_methods.nested_search = that.prepare_nested_search_spec;
|
||||||
that.prepare_methods.details = that.prepare_details_spec;
|
that.prepare_methods.details = that.prepare_details_spec;
|
||||||
that.prepare_methods.association = that.prepare_association_spec;
|
that.prepare_methods.association = that.prepare_association_spec;
|
||||||
|
that.prepare_methods.attribute = that.prepare_attribute_spec;
|
||||||
}
|
}
|
||||||
|
|
||||||
that.build_facets = function() {
|
that.build_facets = function() {
|
||||||
@@ -1195,6 +1198,17 @@ IPA.facet_builder = function(entity) {
|
|||||||
return spec;
|
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) {
|
that.prepare_association_spec = function(spec) {
|
||||||
|
|
||||||
spec.entity = entity;
|
spec.entity = entity;
|
||||||
|
|||||||
Reference in New Issue
Block a user