summaryrefslogtreecommitdiffstats
path: root/install
diff options
context:
space:
mode:
Diffstat (limited to 'install')
-rw-r--r--install/ui/association.js62
-rw-r--r--install/ui/details.js4
-rw-r--r--install/ui/entity.js36
-rw-r--r--install/ui/ipa.css2
4 files changed, 93 insertions, 11 deletions
diff --git a/install/ui/association.js b/install/ui/association.js
index 8030631b4..3c847c59c 100644
--- a/install/ui/association.js
+++ b/install/ui/association.js
@@ -674,7 +674,11 @@ IPA.association_facet = function (spec) {
var that = IPA.facet(spec);
that.attribute_member = spec.attribute_member;
+ that.indirect_attribute_member = spec.indirect_attribute_member;
+
that.other_entity = spec.other_entity;
+
+ that.association_type = 'direct';
that.facet_group = spec.facet_group;
that.read_only = spec.read_only;
@@ -821,6 +825,48 @@ IPA.association_facet = function (spec) {
}
}).appendTo(that.controls);
}
+
+ if (that.indirect_attribute_member) {
+ var span = $('<span/>', {
+ 'class': 'right-aligned-controls'
+ }).appendTo(that.controls);
+
+ span.append('Show Results ');
+
+ that.direct_radio = $('<input/>', {
+ type: 'radio',
+ name: 'type',
+ value: 'direct',
+ click: function() {
+ that.association_type = $(this).val();
+ that.refresh();
+ return true;
+ }
+ }).appendTo(span);
+
+ span.append(' Direct Enrollment ');
+
+ that.indirect_radio = $('<input/>', {
+ type: 'radio',
+ name: 'type',
+ value: 'indirect',
+ click: function() {
+ that.association_type = $(this).val();
+ that.refresh();
+ return true;
+ }
+ }).appendTo(span);
+
+ span.append(' Indirect Enrollment');
+ }
+ };
+
+ that.get_attribute_name = function() {
+ if (that.association_type == 'direct') {
+ return that.attribute_member+'_'+that.other_entity;
+ } else {
+ return that.indirect_attribute_member+'_'+that.other_entity;
+ }
};
that.create_content = function(container) {
@@ -948,7 +994,7 @@ IPA.association_facet = function (spec) {
that.table.current_page_input.val(that.table.current_page);
that.table.total_pages_span.text(that.table.total_pages);
- var pkeys = that.record[that.name];
+ var pkeys = that.record[that.get_attribute_name()];
if (!pkeys || !pkeys.length) {
that.table.empty();
that.table.summary.text('No entries.');
@@ -1003,7 +1049,7 @@ IPA.association_facet = function (spec) {
if (!length) return;
var batch = IPA.batch_command({
- 'name': that.entity_name+'_'+that.name,
+ 'name': that.entity_name+'_'+that.get_attribute_name(),
'on_success': on_success,
'on_error': on_error
});
@@ -1026,12 +1072,22 @@ IPA.association_facet = function (spec) {
that.refresh = function() {
+ if (that.association_type == 'direct') {
+ if (that.direct_radio) that.direct_radio.attr('checked', true);
+ if (that.add_button) that.add_button.css('display', 'inline');
+ if (that.remove_button) that.remove_button.css('display', 'inline');
+ } else {
+ if (that.indirect_radio) that.indirect_radio.attr('checked', true);
+ if (that.add_button) that.add_button.css('display', 'none');
+ if (that.remove_button) that.remove_button.css('display', 'none');
+ }
+
function on_success(data, text_status, xhr) {
that.record = data.result.result;
that.table.current_page = 1;
- var pkeys = that.record[that.name];
+ var pkeys = that.record[that.get_attribute_name()];
if (pkeys) {
that.table.total_pages =
Math.ceil(pkeys.length / that.table.page_length);
diff --git a/install/ui/details.js b/install/ui/details.js
index f5a3e4d80..d4a013ad9 100644
--- a/install/ui/details.js
+++ b/install/ui/details.js
@@ -376,7 +376,7 @@ IPA.details_facet = function(spec) {
name: 'expand_all',
href: 'expand_all',
label: 'Expand All',
- 'class': 'expand-collapse-all',
+ 'class': 'right-aligned-controls',
style: 'display: none;',
click: function() {
that.expand_button.css('display', 'none');
@@ -395,7 +395,7 @@ IPA.details_facet = function(spec) {
name: 'collapse_all',
href: 'collapse_all',
label: 'Collapse All',
- 'class': 'expand-collapse-all',
+ 'class': 'right-aligned-controls',
click: function() {
that.expand_button.css('display', 'inline');
that.collapse_button.css('display', 'none');
diff --git a/install/ui/entity.js b/install/ui/entity.js
index 783cfcbda..8ccdb8ea2 100644
--- a/install/ui/entity.js
+++ b/install/ui/entity.js
@@ -795,7 +795,20 @@ IPA.entity_builder = function(){
if (spec.facet_group == 'memberindirect' ||
spec.facet_group == 'memberofindirect') {
- spec.read_only = true;
+
+ var length = spec.attribute_member.length;
+ var direct_attribute_member = spec.attribute_member.substring(0, length-8);
+ var direct_facet_name = direct_attribute_member+'_'+spec.other_entity;
+
+ facet = entity.get_facet(direct_facet_name);
+
+ if (facet) { // merge into previously created direct facet
+ facet.indirect_attribute_member = spec.attribute_member;
+ return that;
+
+ } else {
+ spec.read_only = true;
+ }
}
spec.label = spec.label ||
@@ -823,15 +836,28 @@ IPA.entity_builder = function(){
spec = spec || {};
- var attribute_members = entity.metadata.attribute_members;
+ var direct_associations = [];
+ var indirect_associations = [];
+
+ for (var association in entity.metadata.attribute_members) {
+ if (association == 'memberindirect' ||
+ association == 'memberofindirect') {
+ indirect_associations.push(association);
+ } else {
+ direct_associations.push(association);
+ }
+ }
- for (var attribute_member in attribute_members) {
+ // make sure direct facets are created first
+ var attribute_members = direct_associations.concat(indirect_associations);
+ for (var i=0; i<attribute_members.length; i++) {
+ var attribute_member = attribute_members[i];
var other_entities = entity.metadata.attribute_members[attribute_member];
- for (var i=0; i<other_entities.length; i++) {
+ for (var j=0; j<other_entities.length; j++) {
- var other_entity = other_entities[i];
+ var other_entity = other_entities[j];
var association_name = attribute_member+'_'+other_entity;
var facet = entity.get_facet(association_name);
diff --git a/install/ui/ipa.css b/install/ui/ipa.css
index abf71008f..45a17865f 100644
--- a/install/ui/ipa.css
+++ b/install/ui/ipa.css
@@ -1191,7 +1191,7 @@ table.scrollable tbody {
height: 4em;
}
-.expand-collapse-all {
+.right-aligned-controls {
position: absolute;
right: 0;
padding-right: 1.5em;