Fixed adding host without DNS reverse zone

https://fedorahosted.org/freeipa/ticket/1481

Shows status dialog instead of error dialog (error 4304 is treated like success).

Refactored error dialog.
Added generic message dialog (IPA.message_dialog)
Modified core tests to work with dialog.
This commit is contained in:
Petr Vobornik 2011-08-05 17:12:21 +02:00 committed by Endi S. Dewata
parent 966fbd6485
commit 08905eb9a9
6 changed files with 163 additions and 67 deletions

View File

@ -31,6 +31,9 @@ IPA.add_dialog = function (spec) {
that.method = spec.method || 'add';
that.pre_execute_hook = spec.pre_execute_hook;
that.on_error = spec.on_error ;
that.retry = typeof spec.retry !== 'undefined' ? spec.retry : true;
that.command = null;
function show_edit_page(entity,result){
var pkey_name = entity.metadata.primary_key;
@ -51,9 +54,11 @@ IPA.add_dialog = function (spec) {
var command = IPA.command({
entity: that.entity.name,
method: that.method,
retry: that.retry,
on_success: on_success,
on_error: on_error
});
that.command = command;
pkey_prefix = that.entity.get_primary_key_prefix();
@ -127,8 +132,8 @@ IPA.add_dialog = function (spec) {
var table = facet.table;
table.refresh();
that.close();
}
);
},
that.on_error);
});
that.add_button(IPA.messages.buttons.add_and_add_another, function() {
@ -141,8 +146,8 @@ IPA.add_dialog = function (spec) {
var table = facet.table;
table.refresh();
that.reset();
}
);
},
that.on_error);
});
that.add_button(IPA.messages.buttons.add_and_edit, function() {
@ -154,8 +159,8 @@ IPA.add_dialog = function (spec) {
that.close();
var result = data.result.result;
that.show_edit_page(that.entity,result);
}
);
},
that.on_error);
});
that.add_button(IPA.messages.buttons.cancel, function() {

View File

@ -32,6 +32,7 @@ IPA.dialog = function(spec) {
that.entity = spec.entity;
that.name = spec.name;
that.id = spec.id;
that.title = spec.title;
that.width = spec.width || 400;
that.height = spec.height;
@ -194,7 +195,7 @@ IPA.dialog = function(spec) {
*/
that.open = function(container) {
that.container = $('<div/>');
that.container = $('<div/>', { id : that.id });
if (container) {
container.append(that.container);
}
@ -257,6 +258,7 @@ IPA.dialog = function(spec) {
that.dialog_create = that.create;
that.dialog_open = that.open;
that.dialog_close = that.close;
var fields = spec.fields || [];
for (var i=0; i<fields.length; i++) {
@ -656,3 +658,31 @@ IPA.deleter_dialog = function (spec) {
return that;
};
IPA.message_dialog = function(spec) {
var that = IPA.dialog(spec);
var init = function() {
spec = spec || {};
that.message = spec.message || '';
that.on_ok = spec.on_ok;
};
that.create = function() {
$('<p/>', {
'text': that.message
}).appendTo(that.container);
};
that.add_button(IPA.messages.buttons.ok, function() {
that.close();
if(that.on_ok) {
that.on_ok();
}
});
init();
return that;
};

View File

@ -102,6 +102,7 @@ IPA.entity_factories.host = function () {
}).
standard_association_facets().
adder_dialog({
factory: IPA.host_adder_dialog,
width: 400,
height: 250,
fields:[
@ -128,6 +129,47 @@ IPA.entity_factories.host = function () {
build();
};
IPA.host_adder_dialog = function(spec)
{
spec = spec || {};
spec.retry = typeof spec.retry !== 'undefined' ? spec.retry : false;
var that = IPA.add_dialog(spec);
that.on_error = function(xhr, text_status, error_thrown)
{
var command = that.command;
var data = error_thrown.data;
var dialog = null;
if(data && data.error && data.error.code === 4304) {
dialog = IPA.message_dialog({
message: data.error.message,
title: spec.title,
on_ok: function() {
data.result = {
result: {
fqdn: that.get_field('fqdn').save()
}
};
command.on_success(data, text_status, xhr);
}
});
} else {
dialog = IPA.error_dialog({
xhr: xhr,
text_status: text_status,
error_thrown: error_thrown,
command: command
});
}
dialog.open(that.container);
};
return that;
};
IPA.host_deleter_dialog = function(spec) {
spec = spec || {};

View File

@ -243,57 +243,13 @@ IPA.command = function(spec) {
that.execute = function() {
function dialog_open(xhr, text_status, error_thrown) {
IPA.error_dialog = $('<div/>', {
id: 'error_dialog'
});
if (error_thrown.url) {
$('<p/>', {
text: 'URL: '+error_thrown.url
}).appendTo(IPA.error_dialog);
}
$('<p/>', {
html: error_thrown.message
}).appendTo(IPA.error_dialog);
function close() {
IPA.error_dialog.dialog('destroy');
IPA.error_dialog.remove();
IPA.error_dialog = null;
}
var buttons = {};
/**
* When a user initially opens the Web UI without a Kerberos
* ticket, the messages including the button labels have not
* been loaded yet, so the button labels need default values.
*/
var label = IPA.messages.buttons ? IPA.messages.buttons.retry : 'Retry';
buttons[label] = function() {
close();
that.execute();
};
label = IPA.messages.buttons ? IPA.messages.buttons.cancel : 'Cancel';
buttons[label] = function() {
close();
if (that.on_error) {
that.on_error.call(this, xhr, text_status, error_thrown);
}
};
IPA.error_dialog.dialog({
modal: true,
title: error_thrown.name,
width: 400,
buttons: buttons,
close: function() {
close();
}
var dialog = IPA.error_dialog({
xhr: xhr,
text_status: text_status,
error_thrown: error_thrown,
command: that
});
dialog.open();
}
function error_handler(xhr, text_status, error_thrown) {
@ -331,6 +287,7 @@ IPA.command = function(spec) {
dialog_open.call(this, xhr, text_status, error_thrown);
} else if (that.on_error) {
//custom error handling, maintaining AJAX call's context
that.on_error.call(this, xhr, text_status, error_thrown);
}
}
@ -349,11 +306,13 @@ IPA.command = function(spec) {
// error_handler() calls IPA.hide_activity_icon()
error_handler.call(this, xhr, text_status, /* error_thrown */ {
name: 'IPA Error '+data.error.code,
message: data.error.message
message: data.error.message,
data: data
});
} else if (that.on_success) {
IPA.hide_activity_icon();
//custom success handling, maintaining AJAX call's context
that.on_success.call(this, data, text_status, xhr);
}
}
@ -610,3 +569,57 @@ IPA.dirty_dialog = function(spec) {
return that;
};
IPA.error_dialog = function(spec) {
var that = IPA.dialog(spec);
var init = function() {
spec = spec || {};
that.id = 'error_dialog';
that.xhr = spec.xhr || {};
that.text_status = spec.text_status || '';
that.error_thrown = spec.error_thrown || {};
that.command = spec.command;
that.title = spec.error_thrown.name;
};
that.create = function() {
if (that.error_thrown.url) {
$('<p/>', {
text: 'URL: '+that.error_thrown.url
}).appendTo(that.container);
}
$('<p/>', {
html: that.error_thrown.message
}).appendTo(that.container);
};
that.create_buttons = function() {
/**
* When a user initially opens the Web UI without a Kerberos
* ticket, the messages including the button labels have not
* been loaded yet, so the button labels need default values.
*/
var label = IPA.messages.buttons ? IPA.messages.buttons.retry : 'Retry';
that.add_button(label, function() {
that.close();
that.command.execute();
});
label = IPA.messages.buttons ? IPA.messages.buttons.cancel : 'Cancel';
that.add_button(label, function() {
that.close();
if (that.command.retry && that.command.on_error) {
that.command.on_error(that.xhr, that.text_status, that.error_thrown);
}
});
};
init();
that.create_buttons();
return that;
};

View File

@ -11,6 +11,7 @@
<script type="text/javascript" src="../jquery-ui.js"></script>
<script type="text/javascript" src="../jquery.ordered-map.js"></script>
<script type="text/javascript" src="../ipa.js"></script>
<script type="text/javascript" src="../dialog.js"></script>
<script type="text/javascript" src="ipa_tests.js"></script>
</head>
<body>

View File

@ -162,8 +162,10 @@ test("Testing successful IPA.command().", function() {
"Checking ajax invocation counter"
);
var dialog = $('#error_dialog');
ok(
!IPA.error_dialog,
dialog.length == 0,
"The dialog box is not created."
);
@ -237,7 +239,8 @@ test("Testing unsuccessful IPA.command().", function() {
on_error: error_handler
}).execute();
var dialog = IPA.error_dialog.parent('.ui-dialog');
var dialog = $('#error_dialog');
var ui_dialog = dialog.parent('.ui-dialog');
equals(
ajax_counter, 1,
@ -245,7 +248,7 @@ test("Testing unsuccessful IPA.command().", function() {
);
ok(
dialog.length == 1 && IPA.error_dialog.dialog('isOpen'),
ui_dialog.length == 1 && dialog.dialog('isOpen'),
"The dialog box is created and open."
);
@ -255,7 +258,7 @@ test("Testing unsuccessful IPA.command().", function() {
);
// search the retry button from the beginning
var retry = $('button', dialog).first();
var retry = $('button', ui_dialog).first();
retry.trigger('click');
equals(
@ -270,8 +273,8 @@ test("Testing unsuccessful IPA.command().", function() {
// search the retry button from the beginning again because the dialog
// has been recreated
dialog = IPA.error_dialog.parent('.ui-dialog');
retry = $('button', dialog).first();
ui_dialog = $('#error_dialog').parent('.ui-dialog');
retry = $('button', ui_dialog).first();
retry.trigger('click');
equals(
@ -286,8 +289,8 @@ test("Testing unsuccessful IPA.command().", function() {
// search the cancel button from the beginning because the dialog has
// been recreated
dialog = IPA.error_dialog.parent('.ui-dialog');
var cancel = $('button', dialog).first().next();
ui_dialog = $('#error_dialog').parent('.ui-dialog');
var cancel = $('button', ui_dialog).first().next();
cancel.trigger('click');
equals(
@ -295,8 +298,10 @@ test("Testing unsuccessful IPA.command().", function() {
"Checking ajax invocation counter"
);
dialog = $('#error_dialog');
ok(
!IPA.error_dialog,
dialog.length == 0,
"After cancel, the dialog box is closed."
);