2010-09-07 09:08:19 -05:00
|
|
|
/* Authors:
|
|
|
|
* Adam Young <ayoung@redhat.com>
|
|
|
|
*
|
|
|
|
* Copyright (C) 2010 Red Hat
|
|
|
|
* see file 'COPYING' for use and warranty information
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU General Public License as
|
|
|
|
* published by the Free Software Foundation; version 2 only
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
2010-09-16 09:28:07 -05:00
|
|
|
*/
|
2010-09-07 09:08:19 -05:00
|
|
|
|
|
|
|
/* REQUIRES: ipa.js */
|
2010-09-16 09:28:07 -05:00
|
|
|
/* CURRENTLY ALSO REQUIRES search.js, because it reuses it's code to create
|
|
|
|
* the AssociationList elements; IT NEEDS IT'S OWN CODE! */
|
2010-09-07 09:08:19 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
*This associator is built for the case where each association requires a separate rpc
|
|
|
|
*/
|
2010-10-28 16:20:12 -05:00
|
|
|
function serial_associate(form, manyObjPkeys, on_success)
|
2010-09-16 09:28:07 -05:00
|
|
|
{
|
2010-09-23 15:57:11 -05:00
|
|
|
var associator = this;
|
2010-09-07 09:08:19 -05:00
|
|
|
this.form = form;
|
|
|
|
this.manyObjPkeys = manyObjPkeys;
|
2010-09-23 15:57:11 -05:00
|
|
|
this.on_success = on_success;
|
2010-09-07 09:08:19 -05:00
|
|
|
|
2010-10-28 16:20:12 -05:00
|
|
|
this.associate_next = function(){
|
2010-09-07 09:08:19 -05:00
|
|
|
var form = this.form;
|
|
|
|
//TODO assert pre-conditions
|
|
|
|
var manyObjPkey = manyObjPkeys.shift();
|
|
|
|
if (manyObjPkey){
|
|
|
|
var options = {};
|
2010-09-23 15:57:11 -05:00
|
|
|
options[form.oneObj] = form.pkey;
|
2010-09-07 09:08:19 -05:00
|
|
|
var args = [manyObjPkey];
|
|
|
|
|
|
|
|
ipa_cmd( form.method,args, options ,
|
2010-10-01 16:33:57 -05:00
|
|
|
function(data, text_status, xhr) {
|
|
|
|
if (data.error){
|
2010-10-27 22:32:30 -05:00
|
|
|
alert('error adding member: '+data.error.message);
|
2010-09-23 15:57:11 -05:00
|
|
|
}else{
|
2010-10-28 16:20:12 -05:00
|
|
|
associator.associate_next();
|
2010-09-23 15:57:11 -05:00
|
|
|
}
|
2010-09-07 09:08:19 -05:00
|
|
|
},
|
2010-10-01 16:33:57 -05:00
|
|
|
function(xhr, text_status, error_thrown) {
|
2010-10-27 22:32:30 -05:00
|
|
|
alert('associateFailure');
|
2010-09-07 09:08:19 -05:00
|
|
|
},
|
|
|
|
form.manyObj );
|
|
|
|
}else{
|
2010-09-23 15:57:11 -05:00
|
|
|
associator.on_success();
|
2010-09-07 09:08:19 -05:00
|
|
|
}
|
|
|
|
}
|
2010-10-28 16:20:12 -05:00
|
|
|
this.associate_next();
|
2010-09-07 09:08:19 -05:00
|
|
|
}
|
|
|
|
|
2010-10-28 16:20:12 -05:00
|
|
|
|
|
|
|
function serial_delete(delete_method, one_entity, one_entity_pkey, many_entity,
|
|
|
|
many_entity_pkeys, on_success){
|
|
|
|
var that = {};
|
|
|
|
that.one_entity = one_entity;
|
|
|
|
that.on_success = on_success;
|
|
|
|
that.many_entity_pkeys = many_entity_pkeys;
|
|
|
|
that.delete_next = function(){
|
|
|
|
var many_entity_pkey = this.many_entity_pkeys.shift();
|
|
|
|
if (many_entity_pkey){
|
|
|
|
var options = {};
|
|
|
|
options[one_entity] = one_entity_pkey;
|
|
|
|
var args = [many_entity_pkey];
|
|
|
|
ipa_cmd( delete_method,args, options ,
|
|
|
|
function(data, text_status, xhr) {
|
|
|
|
if (data.error){
|
|
|
|
alert("error deleting member: "
|
|
|
|
+data.error.message);
|
|
|
|
}else{
|
|
|
|
that.delete_next();
|
|
|
|
}
|
|
|
|
},
|
|
|
|
function(xhr, text_status, error_thrown) {
|
|
|
|
alert("associateFailure");
|
|
|
|
},
|
|
|
|
many_entity );
|
|
|
|
}else{
|
|
|
|
this.on_success();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
that.delete_next();
|
|
|
|
}
|
|
|
|
|
|
|
|
function bulk_delete(delete_method, one_entity, one_entity_pkey, many_entity,
|
|
|
|
many_entity_pkeys, on_success){
|
|
|
|
if (many_entity_pkeys.length){
|
|
|
|
var options = {};
|
|
|
|
options[one_entity] = one_entity_pkey;
|
|
|
|
var option = many_entity_pkeys.shift();
|
|
|
|
while(many_entity_pkeys.length > 0) {
|
|
|
|
option += ',' + many_entity_pkeys.shift();
|
|
|
|
}
|
|
|
|
|
|
|
|
var options = {
|
|
|
|
'all':true
|
|
|
|
};
|
|
|
|
options[many_entity] = option;
|
|
|
|
var args = [one_entity_pkey];
|
|
|
|
ipa_cmd( delete_method,args, options ,
|
|
|
|
function(data, text_status, xhr) {
|
|
|
|
if (data.error){
|
|
|
|
alert("error deleting member: "
|
|
|
|
+data.error.message);
|
|
|
|
}else{
|
|
|
|
on_success();
|
|
|
|
}
|
|
|
|
},
|
|
|
|
function(xhr, text_status, error_thrown) {
|
|
|
|
alert("associateFailure");
|
|
|
|
},
|
|
|
|
one_entity );
|
|
|
|
}else{
|
|
|
|
on_success();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2010-09-07 09:08:19 -05:00
|
|
|
/**
|
|
|
|
*This associator is for the common case where all the asociations can be sent
|
|
|
|
in a single rpc
|
|
|
|
*/
|
2010-10-28 16:20:12 -05:00
|
|
|
function bulk_associate(form, manyObjPkeys, on_success)
|
2010-09-16 09:28:07 -05:00
|
|
|
{
|
2010-09-28 09:19:05 -05:00
|
|
|
var associator = this;
|
2010-09-16 09:28:07 -05:00
|
|
|
this.form = form;
|
|
|
|
this.manyObjPkeys = manyObjPkeys;
|
2010-09-23 15:57:11 -05:00
|
|
|
this.on_success = on_success;
|
2010-09-07 09:08:19 -05:00
|
|
|
|
2010-10-28 16:20:12 -05:00
|
|
|
var form = this.form;
|
|
|
|
var option = manyObjPkeys.shift();
|
|
|
|
while(manyObjPkeys.length > 0) {
|
|
|
|
option += ',' + manyObjPkeys.shift();
|
2010-09-07 09:08:19 -05:00
|
|
|
}
|
2010-10-28 16:20:12 -05:00
|
|
|
var options = {
|
|
|
|
'all':true
|
|
|
|
};
|
|
|
|
options[form.manyObj] = option;
|
|
|
|
var args = [form.pkey];
|
|
|
|
ipa_cmd( form.method,args, options ,
|
|
|
|
function(data, text_status, xhr) {
|
|
|
|
if (data.error){
|
|
|
|
alert('error adding member: '+data.error.message);
|
|
|
|
}else{
|
|
|
|
associator.on_success();
|
|
|
|
}
|
|
|
|
},
|
|
|
|
function(xhr, text_status, error_thrown) {
|
|
|
|
alert('associateFailure');
|
|
|
|
},
|
|
|
|
form.oneObj );
|
2010-09-07 09:08:19 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Create a form for a one to many association.
|
|
|
|
*
|
|
|
|
*/
|
2010-10-28 16:20:12 -05:00
|
|
|
function AssociationForm(oneObj, pkey, manyObj, on_success, associator, method)
|
2010-09-16 09:28:07 -05:00
|
|
|
{
|
2010-09-23 15:57:11 -05:00
|
|
|
var form = this;
|
|
|
|
|
2010-09-07 09:08:19 -05:00
|
|
|
this.oneObj = oneObj;
|
2010-09-23 15:57:11 -05:00
|
|
|
this.pkey = pkey;
|
2010-09-07 09:08:19 -05:00
|
|
|
this.manyObj = manyObj;
|
2010-09-23 15:57:11 -05:00
|
|
|
this.on_success = on_success;
|
|
|
|
|
|
|
|
this.dialog = $('<div></div>');
|
2010-09-16 09:28:07 -05:00
|
|
|
|
2010-09-07 09:08:19 -05:00
|
|
|
//An optional parameter to determine what ipa method to call to create
|
|
|
|
//the association
|
2010-09-16 09:28:07 -05:00
|
|
|
if (method)
|
2010-09-07 09:08:19 -05:00
|
|
|
this.method = method;
|
2010-09-16 09:28:07 -05:00
|
|
|
else
|
2010-09-07 09:08:19 -05:00
|
|
|
this.method = 'add_member';
|
|
|
|
|
2010-10-28 16:20:12 -05:00
|
|
|
this.associator = associator;
|
|
|
|
|
|
|
|
|
2010-09-07 09:08:19 -05:00
|
|
|
|
2010-09-16 09:28:07 -05:00
|
|
|
this.setup = function() {
|
2010-10-27 22:32:30 -05:00
|
|
|
var label = IPA.metadata[form.manyObj].label;
|
2010-09-07 09:08:19 -05:00
|
|
|
|
2010-09-23 15:57:11 -05:00
|
|
|
form.dialog.attr('title', 'Enroll '+form.oneObj+' '+form.pkey+' in '+label);
|
2010-09-07 09:08:19 -05:00
|
|
|
|
2010-09-23 15:57:11 -05:00
|
|
|
association_form_create(form.dialog);
|
|
|
|
|
|
|
|
var availableList = $('#availableList', form.dialog);
|
|
|
|
availableList.html('');
|
|
|
|
|
|
|
|
var enrollments = $('#enrollments', form.dialog);
|
|
|
|
enrollments.html('');
|
|
|
|
|
2010-10-27 22:32:30 -05:00
|
|
|
$('#addToList', form.dialog).click(function(){
|
2010-09-23 15:57:11 -05:00
|
|
|
$('#availableList :selected', form.dialog).each(function(i, selected){
|
|
|
|
enrollments.append(selected);
|
2010-09-07 09:08:19 -05:00
|
|
|
});
|
2010-09-23 15:57:11 -05:00
|
|
|
$('#availableList :selected', form.dialog).remove();
|
2010-09-07 09:08:19 -05:00
|
|
|
});
|
2010-10-27 22:32:30 -05:00
|
|
|
$('#removeFromList', form.dialog).click(function(){
|
2010-09-23 15:57:11 -05:00
|
|
|
$('#enrollments :selected', form.dialog).each(function(i, selected){
|
|
|
|
availableList.append(selected);
|
2010-09-07 09:08:19 -05:00
|
|
|
});
|
2010-09-23 15:57:11 -05:00
|
|
|
$('#enrollments :selected', form.dialog).remove();
|
2010-09-07 09:08:19 -05:00
|
|
|
});
|
2010-09-23 15:57:11 -05:00
|
|
|
|
2010-10-27 22:32:30 -05:00
|
|
|
$('#find', form.dialog).click(function(){
|
2010-09-07 09:08:19 -05:00
|
|
|
form.search();
|
|
|
|
});
|
2010-09-23 15:57:11 -05:00
|
|
|
|
|
|
|
form.dialog.dialog({
|
|
|
|
modal: true,
|
|
|
|
width: 600,
|
|
|
|
buttons: {
|
|
|
|
'Enroll': function(evt) {
|
|
|
|
form.associate(form.on_success);
|
|
|
|
},
|
|
|
|
'Cancel': form.close
|
|
|
|
}
|
|
|
|
});
|
2010-09-16 09:28:07 -05:00
|
|
|
};
|
2010-09-07 09:08:19 -05:00
|
|
|
|
2010-09-23 15:57:11 -05:00
|
|
|
this.close = function() {
|
|
|
|
form.dialog.dialog('close');
|
2010-10-27 22:32:30 -05:00
|
|
|
};
|
2010-09-23 15:57:11 -05:00
|
|
|
|
2010-09-16 09:28:07 -05:00
|
|
|
this.search = function() {
|
2010-09-07 09:08:19 -05:00
|
|
|
|
2010-09-16 09:28:07 -05:00
|
|
|
function search_on_win(data, text_status, xhr) {
|
|
|
|
var results = data.result;
|
2010-10-27 22:32:30 -05:00
|
|
|
var list = $('#availableList', form.dialog);
|
|
|
|
list.html('');
|
2010-09-23 15:57:11 -05:00
|
|
|
|
2010-10-27 22:32:30 -05:00
|
|
|
var searchColumn = IPA.metadata[form.manyObj].primary_key;
|
2010-09-23 15:57:11 -05:00
|
|
|
|
2010-09-16 09:28:07 -05:00
|
|
|
for (var i =0; i != results.count; i++){
|
|
|
|
var result = results.result[i];
|
2010-10-27 22:32:30 -05:00
|
|
|
$('<option></option>',{
|
2010-09-23 15:57:11 -05:00
|
|
|
value: result[searchColumn][0],
|
|
|
|
html: result[searchColumn][0]
|
|
|
|
}).appendTo(list);
|
2010-09-16 09:28:07 -05:00
|
|
|
}
|
2010-10-27 22:32:30 -05:00
|
|
|
}
|
2010-09-16 09:28:07 -05:00
|
|
|
|
|
|
|
function search_on_fail(xhr, text_status, errow_thrown) {
|
2010-10-27 22:32:30 -05:00
|
|
|
alert('associationSearchFailure');
|
|
|
|
}
|
2010-09-16 09:28:07 -05:00
|
|
|
|
2010-09-23 15:57:11 -05:00
|
|
|
var queryFilter = $('#associateFilter', form.dialog).val();
|
|
|
|
ipa_cmd('find', [queryFilter], {}, search_on_win, null, form.manyObj);
|
2010-09-16 09:28:07 -05:00
|
|
|
};
|
|
|
|
|
2010-09-23 15:57:11 -05:00
|
|
|
this.associate = function (on_success) {
|
2010-09-16 09:28:07 -05:00
|
|
|
var manyObjPkeys = [];
|
2010-09-23 15:57:11 -05:00
|
|
|
$('#enrollments', form.dialog).children().each(function (i, selected) {
|
2010-09-07 09:08:19 -05:00
|
|
|
manyObjPkeys.push(selected.value);
|
|
|
|
});
|
2010-10-28 16:20:12 -05:00
|
|
|
this.associator(form, manyObjPkeys, on_success);
|
2010-09-16 09:28:07 -05:00
|
|
|
};
|
2010-09-07 09:08:19 -05:00
|
|
|
}
|
|
|
|
|
2010-10-27 22:32:30 -05:00
|
|
|
function ipa_association_config(spec) {
|
|
|
|
spec = spec || {};
|
2010-09-23 15:57:11 -05:00
|
|
|
|
2010-10-27 22:32:30 -05:00
|
|
|
var that = {};
|
|
|
|
|
|
|
|
that.name = spec.name;
|
|
|
|
that.associator = spec.associator;
|
|
|
|
that.method = spec.method;
|
|
|
|
|
|
|
|
return that;
|
|
|
|
}
|
|
|
|
|
|
|
|
function ipa_association_facet(spec) {
|
|
|
|
|
|
|
|
spec = spec || {};
|
|
|
|
|
|
|
|
var that = ipa_facet(spec);
|
|
|
|
|
|
|
|
that.configs = [];
|
|
|
|
that.configs_by_name = {};
|
|
|
|
|
|
|
|
that.other_entity = null;
|
|
|
|
|
|
|
|
that.get_configs = function() {
|
|
|
|
return that.configs;
|
|
|
|
};
|
|
|
|
|
|
|
|
that.get_config = function(name) {
|
|
|
|
return that.configs_by_name[name];
|
|
|
|
};
|
|
|
|
|
|
|
|
that.add_config = function(config) {
|
|
|
|
that.configs.push(config);
|
|
|
|
that.configs_by_name[config.name] = config;
|
|
|
|
};
|
|
|
|
|
|
|
|
that.create_config = function(spec) {
|
|
|
|
var config = ipa_association_config(spec);
|
|
|
|
that.add_config(config);
|
|
|
|
return config;
|
|
|
|
};
|
|
|
|
|
|
|
|
that.is_dirty = function() {
|
|
|
|
var pkey = $.bbq.getState(that.entity_name + '-pkey', true) || '';
|
|
|
|
var other_entity = $.bbq.getState(that.entity_name + '-enroll', true) || '';
|
|
|
|
return pkey != that.pkey || other_entity != that.other_entity;
|
|
|
|
};
|
|
|
|
|
|
|
|
that.setup = function(container, unspecified) {
|
2010-09-07 09:08:19 -05:00
|
|
|
|
2010-10-27 22:32:30 -05:00
|
|
|
that.pkey = $.bbq.getState(that.entity_name + '-pkey', true) || '';
|
|
|
|
that.other_entity = $.bbq.getState(that.entity_name + '-enroll', true) || '';
|
|
|
|
|
|
|
|
that.member_attrribute = ipa_get_member_attribute(that.entity_name, that.other_entity);
|
|
|
|
that.columns = [
|
|
|
|
{
|
|
|
|
'title': IPA.metadata[that.other_entity].label,
|
|
|
|
'column': that.member_attrribute + '_' + that.other_entity
|
|
|
|
}
|
|
|
|
];
|
|
|
|
|
|
|
|
var config = that.get_config(that.other_entity);
|
2010-10-28 16:20:12 -05:00
|
|
|
|
|
|
|
if ( config && config.associator === 'serial' ){
|
|
|
|
that.associator = serial_associate;
|
|
|
|
that.deleter = serial_delete;
|
|
|
|
}else{
|
|
|
|
that.associator = bulk_associate;
|
|
|
|
that.deleter = bulk_delete;
|
|
|
|
}
|
|
|
|
|
2010-10-27 22:32:30 -05:00
|
|
|
that.method = config ? config.method : null;
|
|
|
|
|
|
|
|
that.setup_views(container);
|
|
|
|
|
|
|
|
//TODO I18N
|
|
|
|
var header_message = that.other_entity + '(s) enrolled in ' +
|
|
|
|
that.entity_name + ' ' + that.pkey;
|
|
|
|
container.append($('<h2/>',{html: header_message }) );
|
|
|
|
association_list_create(that.entity_name, container);
|
|
|
|
container.find('.search-filter').css('display', 'none');
|
|
|
|
container.find('.search-buttons').html('');
|
|
|
|
|
2010-10-28 16:20:12 -05:00
|
|
|
var ctrls = container.find('.search-buttons');
|
|
|
|
|
|
|
|
ipa_make_button( 'ui-icon-plus',IPA.messages.button.enroll).
|
|
|
|
click(function() {
|
|
|
|
that.show_enrollment_dialog(container);
|
|
|
|
}).appendTo(ctrls);
|
|
|
|
|
|
|
|
ipa_make_button('ui-icon-trash',IPA.messages.button.delete).
|
|
|
|
click(function(){
|
|
|
|
that.delete_on_click(container);
|
|
|
|
}).appendTo(ctrls);
|
|
|
|
|
2010-10-27 22:32:30 -05:00
|
|
|
|
2010-10-28 16:20:12 -05:00
|
|
|
|
|
|
|
var header = container.find('.search-table thead:last').find("tr");;
|
2010-10-27 22:32:30 -05:00
|
|
|
for (var i =0 ; i != that.columns.length ;i++){
|
|
|
|
$('<th></th>',{
|
|
|
|
html: that.columns[i].title
|
|
|
|
}).appendTo(header);
|
|
|
|
}
|
|
|
|
that.refresh(container);
|
|
|
|
};
|
|
|
|
|
2010-10-28 16:20:12 -05:00
|
|
|
that.delete_on_click = function(container) {
|
|
|
|
var delete_list = [];
|
|
|
|
var delete_dialog = $('<div></div>', {
|
|
|
|
title: IPA.messages.button.delete,
|
|
|
|
'class': 'search-dialog-delete'
|
|
|
|
});
|
|
|
|
|
|
|
|
function delete_on_click() {
|
|
|
|
that.deleter('remove_member', that.entity_name,
|
|
|
|
that.pkey, that.other_entity, delete_list,
|
|
|
|
function(){ that.refresh(container)});
|
|
|
|
delete_dialog.dialog('close');
|
|
|
|
}
|
|
|
|
function delete_on_win() {
|
|
|
|
delete_dialog.dialog('close');
|
|
|
|
}
|
|
|
|
function cancel_on_click() {
|
|
|
|
delete_dialog.dialog('close');
|
|
|
|
}
|
|
|
|
var confirm_list = $('<ul/>');
|
|
|
|
var delete_list = [];
|
|
|
|
container.find('.search-selector').each(function () {
|
|
|
|
if (this.checked){
|
|
|
|
delete_list.push(this.title);
|
|
|
|
confirm_list.append($('<li/>',{text: this.title}));
|
|
|
|
}
|
|
|
|
});
|
|
|
|
if (delete_list.length == 0){
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
delete_dialog.append(confirm_list);
|
|
|
|
delete_dialog.append(
|
|
|
|
$('<p/>',
|
|
|
|
{text:IPA.messages.search.delete_confirm}));
|
|
|
|
|
|
|
|
|
|
|
|
delete_dialog.dialog({
|
|
|
|
modal: true,
|
|
|
|
buttons: {
|
|
|
|
'Delete': delete_on_click,
|
|
|
|
'Cancel': cancel_on_click
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2010-10-27 22:32:30 -05:00
|
|
|
that.refresh = function(container) {
|
2010-09-29 00:52:56 -05:00
|
|
|
|
2010-10-01 16:33:57 -05:00
|
|
|
function refresh_on_success(data, text_status, xhr) {
|
2010-10-27 22:32:30 -05:00
|
|
|
var tbody = container.find('.search-table tbody');
|
2010-10-01 16:33:57 -05:00
|
|
|
tbody.empty();
|
2010-10-27 22:32:30 -05:00
|
|
|
var associationList = data.result.result[that.columns[0].column];
|
2010-10-28 16:20:12 -05:00
|
|
|
//TODO, this is masking an error where the wrong
|
|
|
|
//direction association is presented upon page reload.
|
|
|
|
//if the associationList is unset, it is because
|
|
|
|
//form.associationColumns[0] doesn't exist in the results
|
|
|
|
if (!associationList) return;
|
|
|
|
|
|
|
|
|
2010-10-01 16:33:57 -05:00
|
|
|
for (var j = 0; j < associationList.length; j++){
|
2010-10-28 16:20:12 -05:00
|
|
|
var association = associationList[j];
|
2010-10-27 22:32:30 -05:00
|
|
|
var row = $('<tr/>').appendTo(tbody);
|
2010-10-28 16:20:12 -05:00
|
|
|
search_generate_checkbox_td(row, association);
|
|
|
|
|
|
|
|
|
2010-10-27 22:32:30 -05:00
|
|
|
for (var k = 0; k < that.columns.length ;k++){
|
|
|
|
var column = that.columns[k].column;
|
|
|
|
$('<td></td>',{
|
2010-10-28 16:20:12 -05:00
|
|
|
html:data.result.result[column][j],
|
2010-09-29 00:52:56 -05:00
|
|
|
}).appendTo(row);
|
|
|
|
}
|
2010-09-07 09:08:19 -05:00
|
|
|
}
|
2010-10-28 16:20:12 -05:00
|
|
|
|
|
|
|
tbody.find('.search-a-pkey').click(function () {
|
|
|
|
var jobj = $(this);
|
|
|
|
var state = {};
|
|
|
|
state[that.other_entity + '-facet'] = 'details';
|
|
|
|
state[that.other_entity + '-pkey'] = $(this).text();
|
|
|
|
//Before this will work, we need to set the tab one level up
|
|
|
|
//for example:
|
|
|
|
//state['identity'] = 0;
|
|
|
|
//but we have no way of getting the index.
|
|
|
|
|
|
|
|
$.bbq.pushState(state);
|
|
|
|
return (false);
|
|
|
|
});
|
2010-09-07 09:08:19 -05:00
|
|
|
}
|
2010-09-16 09:28:07 -05:00
|
|
|
|
2010-09-29 00:52:56 -05:00
|
|
|
function refresh_on_error(xhr, text_status, error_thrown) {
|
2010-10-27 22:32:30 -05:00
|
|
|
var search_results = $('.search-results', container).empty();
|
2010-09-29 00:52:56 -05:00
|
|
|
search_results.append('<p>Error: '+error_thrown.name+'</p>');
|
2010-10-28 09:50:34 -05:00
|
|
|
search_results.append('<p>'+error_thrown.title+'</p>');
|
2010-09-29 00:52:56 -05:00
|
|
|
search_results.append('<p>'+error_thrown.message+'</p>');
|
|
|
|
}
|
|
|
|
|
2010-10-27 22:32:30 -05:00
|
|
|
ipa_cmd('show', [that.pkey], {}, refresh_on_success, refresh_on_error, that.entity_name);
|
|
|
|
};
|
2010-09-23 15:57:11 -05:00
|
|
|
|
2010-10-28 16:20:12 -05:00
|
|
|
that.show_enrollment_dialog = function(container) {
|
|
|
|
|
|
|
|
|
2010-09-23 15:57:11 -05:00
|
|
|
|
|
|
|
var enrollment_dialog = new AssociationForm(
|
2010-10-27 22:32:30 -05:00
|
|
|
that.entity_name,
|
|
|
|
that.pkey,
|
|
|
|
that.other_entity,
|
2010-09-23 15:57:11 -05:00
|
|
|
function() {
|
2010-10-28 16:20:12 -05:00
|
|
|
that.refresh(container);
|
2010-09-23 15:57:11 -05:00
|
|
|
enrollment_dialog.close();
|
2010-10-01 16:33:57 -05:00
|
|
|
},
|
2010-10-27 22:32:30 -05:00
|
|
|
that.associator,
|
|
|
|
that.method
|
2010-09-23 15:57:11 -05:00
|
|
|
);
|
|
|
|
enrollment_dialog.setup();
|
2010-10-27 22:32:30 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
return that;
|
2010-09-07 09:08:19 -05:00
|
|
|
}
|
2010-09-16 09:28:07 -05:00
|
|
|
|
|
|
|
|
|
|
|
function association_form_create(jobj)
|
|
|
|
{
|
|
|
|
var div = $('<div id="associations"></div>');
|
2010-09-23 15:57:11 -05:00
|
|
|
|
2010-09-16 09:28:07 -05:00
|
|
|
var form = $('<form></form>');
|
|
|
|
var form_div = $('<div></div>');
|
|
|
|
form_div.css('border-width', '1px');
|
|
|
|
var sub_div = $('<div></div>');
|
|
|
|
sub_div.append($('<input />', {
|
|
|
|
id: 'associateFilter',
|
|
|
|
type: 'text'
|
|
|
|
}));
|
|
|
|
sub_div.append($('<input />', {
|
|
|
|
id: 'find',
|
|
|
|
type: 'button',
|
|
|
|
value: 'Find'
|
|
|
|
}));
|
2010-09-23 15:57:11 -05:00
|
|
|
|
2010-09-16 09:28:07 -05:00
|
|
|
form_div.append(sub_div);
|
|
|
|
form.append(form_div);
|
|
|
|
var form_div = $('<div id="results"></div>');
|
|
|
|
form_div.css('border', '2px solid rgb(0, 0, 0)');
|
|
|
|
form_div.css('position', 'relative');
|
|
|
|
form_div.css('height', '200px');
|
|
|
|
var sub_div = $('<div></div>');
|
|
|
|
sub_div.css('float', 'left');
|
|
|
|
sub_div.append($('<div></div>', {
|
|
|
|
text: 'Available'
|
|
|
|
}));
|
|
|
|
sub_div.append($('<select></select>', {
|
|
|
|
id: 'availableList',
|
|
|
|
width: '150px',
|
|
|
|
size: '10',
|
|
|
|
multiple: 'true'
|
|
|
|
}));
|
|
|
|
form_div.append(sub_div);
|
|
|
|
var sub_div = $('<div></div>');
|
|
|
|
sub_div.css('float', 'left');
|
|
|
|
var p = $('<p></p>');
|
|
|
|
p.append($('<input />', {
|
|
|
|
id: 'removeFromList',
|
|
|
|
type: 'button',
|
|
|
|
value: '<<'
|
|
|
|
}));
|
|
|
|
sub_div.append(p);
|
|
|
|
var p = $('<p></p>');
|
|
|
|
p.append($('<input />', {
|
|
|
|
id: 'addToList',
|
|
|
|
type: 'button',
|
|
|
|
value: '>>'
|
|
|
|
}));
|
|
|
|
sub_div.append(p);
|
|
|
|
form_div.append(sub_div);
|
|
|
|
var sub_div = $('<div></div>');
|
|
|
|
sub_div.css('float', 'left');
|
|
|
|
sub_div.append($('<div></div>', {
|
|
|
|
text: 'Prospective'
|
|
|
|
}));
|
|
|
|
sub_div.append($('<select></select>', {
|
|
|
|
id: 'enrollments',
|
|
|
|
width: '150px',
|
|
|
|
size: '10',
|
|
|
|
multiple: 'true'
|
|
|
|
}));
|
|
|
|
form_div.append(sub_div);
|
|
|
|
form.append(form_div);
|
|
|
|
form.append($('<hr />'));
|
|
|
|
form.append($('<div></div>', {
|
|
|
|
text: 'Message Area'
|
|
|
|
}));
|
|
|
|
form.append($('<hr />'));
|
|
|
|
var form_div = $('<div></div>');
|
|
|
|
var span = $('<span></span>');
|
|
|
|
span.css('float', 'left');
|
|
|
|
span.append($('<p></p>', {
|
|
|
|
text: '*Enter Group Names and Press Groups'
|
|
|
|
}));
|
|
|
|
span.append($('<p></p>', {
|
|
|
|
text: '*More stuff'
|
|
|
|
}));
|
|
|
|
span.append($('<p></p>', {
|
|
|
|
text: '*More stuff'
|
|
|
|
}));
|
|
|
|
form_div.append(span);
|
|
|
|
form.append(form_div);
|
|
|
|
div.append(form);
|
|
|
|
jobj.append(div);
|
|
|
|
}
|
|
|
|
|
|
|
|
function association_list_create(obj_name, jobj)
|
|
|
|
{
|
|
|
|
search_create(obj_name, [], jobj);
|
|
|
|
}
|
|
|
|
|