Fix restore form page
Make restore target optional, user can use default target or specified restore target by choose the checkbox. Change-Id: I732dcb684c4b60568817f8fa9ff806955ebaa9a6
This commit is contained in:
parent
de064cb87c
commit
5497479156
@ -12,7 +12,6 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from django.core import validators
|
||||
from django import forms
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.views.decorators.debug import sensitive_variables # noqa
|
||||
@ -24,6 +23,8 @@ from horizon import messages
|
||||
import json
|
||||
from karbor_dashboard.api import karbor as karborclient
|
||||
|
||||
EMPTY_VALUES = (None, '', u'', [], (), {})
|
||||
|
||||
|
||||
class RestoreCheckpointForm(horizon_forms.SelfHandlingForm):
|
||||
provider_id = forms.CharField(label=_("Provider ID"),
|
||||
@ -32,16 +33,45 @@ class RestoreCheckpointForm(horizon_forms.SelfHandlingForm):
|
||||
checkpoint_id = forms.CharField(label=_("Checkpoint ID"),
|
||||
widget=forms.HiddenInput(),
|
||||
required=False)
|
||||
restore_target = forms.CharField(
|
||||
use_current_session = forms.BooleanField(
|
||||
label=_("Use current session credentials"),
|
||||
widget=forms.CheckboxInput(attrs={
|
||||
'class': 'disable_input',
|
||||
'data-slug': 'use_current_session',
|
||||
'data-disable-on-checked': 'true',
|
||||
'checked': 'checked'
|
||||
}),
|
||||
initial=False,
|
||||
required=False)
|
||||
restore_target = forms.URLField(
|
||||
label=_("Restore Target"),
|
||||
required=False,
|
||||
validators=[validators.URLValidator(), ])
|
||||
widget=forms.URLInput(attrs={
|
||||
'class': 'disabled_input',
|
||||
'data-disable-on': 'use_current_session',
|
||||
'data-source-manual': _("Restore Target"),
|
||||
'disabled': 'disabled',
|
||||
'value': 'Target: Current project'
|
||||
}),
|
||||
required=False)
|
||||
restore_target_username = forms.CharField(
|
||||
label=_("Restore Target Username"),
|
||||
widget=forms.TextInput(attrs={
|
||||
'class': 'disabled_input',
|
||||
'data-disable-on': 'use_current_session',
|
||||
'data-source-manual': _("Restore Target Username"),
|
||||
'disabled': 'disabled',
|
||||
'value': 'Target Username: current user'
|
||||
}),
|
||||
required=False)
|
||||
restore_target_password = forms.CharField(
|
||||
label=_("Restore Target Password"),
|
||||
widget=forms.PasswordInput(),
|
||||
widget=forms.PasswordInput(attrs={
|
||||
'class': 'disabled_input',
|
||||
'data-disable-on': 'use_current_session',
|
||||
'data-source-manual': _("Restore Target Password"),
|
||||
'disabled': 'disabled',
|
||||
'hidden': 'hidden'
|
||||
}),
|
||||
required=False)
|
||||
provider = forms.CharField(
|
||||
widget=forms.HiddenInput(attrs={"class": "provider"}))
|
||||
@ -59,21 +89,29 @@ class RestoreCheckpointForm(horizon_forms.SelfHandlingForm):
|
||||
|
||||
@sensitive_variables('restore_target_password')
|
||||
def handle(self, request, data):
|
||||
def empty_validate(data_):
|
||||
return data_ in validators.EMPTY_VALUES
|
||||
def all_empty(data_list):
|
||||
return all(map(lambda x: x in EMPTY_VALUES, data_list))
|
||||
|
||||
target = data["restore_target"]
|
||||
target_username = data["restore_target_username"]
|
||||
target_password = data["restore_target_password"]
|
||||
def all_not_empty(data_list):
|
||||
return all(map(lambda x: x not in EMPTY_VALUES, data_list))
|
||||
|
||||
if not ((target and target_username and target_password) or
|
||||
all(map(empty_validate,
|
||||
[target, target_username, target_password]))):
|
||||
messages.warning(request,
|
||||
_('Restore Target, Restore Target Username and '
|
||||
'Restore Target Password must be assigned at '
|
||||
'the same time or not assigned.'))
|
||||
return False
|
||||
def empty_to_none(data_):
|
||||
return data_ if data_ not in EMPTY_VALUES else None
|
||||
|
||||
target = empty_to_none(data["restore_target"])
|
||||
target_username = empty_to_none(data["restore_target_username"])
|
||||
target_password = empty_to_none(data["restore_target_password"])
|
||||
use_current_session = empty_to_none(data["use_current_session"])
|
||||
|
||||
if not use_current_session:
|
||||
validate_data = [target, target_username, target_password]
|
||||
if not (all_empty(validate_data) or all_not_empty(validate_data)):
|
||||
messages.warning(request,
|
||||
_('Restore Target, Restore Target Username '
|
||||
'and Restore Target Password must be '
|
||||
'assigned at the same time or not '
|
||||
'assigned.'))
|
||||
return False
|
||||
|
||||
try:
|
||||
data_parameters = json.loads(data["parameters"])
|
||||
|
@ -96,5 +96,49 @@ horizon.checkpoints_restore = {
|
||||
$(document).on('click', "#parametersdialog a.close", function() {
|
||||
$.Karbor.closeDialog("#parametersdialog");
|
||||
});
|
||||
|
||||
$(document).on('change', "input.disable_input", function (evt) {
|
||||
var $fieldset = $(evt.target).closest('fieldset'),
|
||||
$disable_inputs = $fieldset.find('input.disable_input');
|
||||
|
||||
$disable_inputs.each(function(index, disable_input){
|
||||
var $disable_input = $(disable_input),
|
||||
visible = $disable_input.parent().hasClass('themable-checkbox') ? $disable_input.siblings('label').is(':visible') : $disable_input.is(':visible'),
|
||||
slug = $disable_input.data('slug'),
|
||||
disabled = $disable_input.prop('checked'),
|
||||
disable_on = $disable_input.data('disableOnChecked');
|
||||
|
||||
// If checkbox is hidden then do not apply any further logic
|
||||
if (!visible) return;
|
||||
|
||||
function handle_disabled_field(index, input){
|
||||
var $input = $(input);
|
||||
|
||||
if (disabled != disable_on) {
|
||||
$input.val("");
|
||||
$input.attr("disabled", false);
|
||||
if ($input.attr('id') == "id_restore_target_password"){
|
||||
$input.closest('.form-group').removeClass("hide");
|
||||
}
|
||||
} else {
|
||||
if ($input.attr('id') == 'id_restore_target'){
|
||||
$input.val("Target: local host");
|
||||
}
|
||||
if ($input.attr('id') == 'id_restore_target_username'){
|
||||
$input.val("Target username: current project");
|
||||
}
|
||||
if ($input.attr('id') == 'id_restore_target_password'){
|
||||
$input.closest('.form-group').addClass("hide");
|
||||
}
|
||||
$input.attr("disabled", true);
|
||||
}
|
||||
}
|
||||
|
||||
$fieldset.find('.disabled_input[data-disable-on*="' + slug + '"]').each(handle_disabled_field);
|
||||
$fieldset.siblings().find('.disabled_input[data-disable-on*="' + slug + '"]').each(handle_disabled_field);
|
||||
});
|
||||
});
|
||||
|
||||
$("input[name='restore_target_password']").closest('.form-group').addClass("hide");
|
||||
}
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user