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:
zhangshuai 2017-03-02 06:34:35 +08:00
parent de064cb87c
commit 5497479156
2 changed files with 100 additions and 18 deletions

View File

@ -12,7 +12,6 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from django.core import validators
from django import forms from django import forms
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.views.decorators.debug import sensitive_variables # noqa from django.views.decorators.debug import sensitive_variables # noqa
@ -24,6 +23,8 @@ from horizon import messages
import json import json
from karbor_dashboard.api import karbor as karborclient from karbor_dashboard.api import karbor as karborclient
EMPTY_VALUES = (None, '', u'', [], (), {})
class RestoreCheckpointForm(horizon_forms.SelfHandlingForm): class RestoreCheckpointForm(horizon_forms.SelfHandlingForm):
provider_id = forms.CharField(label=_("Provider ID"), provider_id = forms.CharField(label=_("Provider ID"),
@ -32,16 +33,45 @@ class RestoreCheckpointForm(horizon_forms.SelfHandlingForm):
checkpoint_id = forms.CharField(label=_("Checkpoint ID"), checkpoint_id = forms.CharField(label=_("Checkpoint ID"),
widget=forms.HiddenInput(), widget=forms.HiddenInput(),
required=False) 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"), label=_("Restore Target"),
required=False, widget=forms.URLInput(attrs={
validators=[validators.URLValidator(), ]) '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( restore_target_username = forms.CharField(
label=_("Restore Target Username"), 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) required=False)
restore_target_password = forms.CharField( restore_target_password = forms.CharField(
label=_("Restore Target Password"), 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) required=False)
provider = forms.CharField( provider = forms.CharField(
widget=forms.HiddenInput(attrs={"class": "provider"})) widget=forms.HiddenInput(attrs={"class": "provider"}))
@ -59,21 +89,29 @@ class RestoreCheckpointForm(horizon_forms.SelfHandlingForm):
@sensitive_variables('restore_target_password') @sensitive_variables('restore_target_password')
def handle(self, request, data): def handle(self, request, data):
def empty_validate(data_): def all_empty(data_list):
return data_ in validators.EMPTY_VALUES return all(map(lambda x: x in EMPTY_VALUES, data_list))
target = data["restore_target"] def all_not_empty(data_list):
target_username = data["restore_target_username"] return all(map(lambda x: x not in EMPTY_VALUES, data_list))
target_password = data["restore_target_password"]
if not ((target and target_username and target_password) or def empty_to_none(data_):
all(map(empty_validate, return data_ if data_ not in EMPTY_VALUES else None
[target, target_username, target_password]))):
messages.warning(request, target = empty_to_none(data["restore_target"])
_('Restore Target, Restore Target Username and ' target_username = empty_to_none(data["restore_target_username"])
'Restore Target Password must be assigned at ' target_password = empty_to_none(data["restore_target_password"])
'the same time or not assigned.')) use_current_session = empty_to_none(data["use_current_session"])
return False
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: try:
data_parameters = json.loads(data["parameters"]) data_parameters = json.loads(data["parameters"])

View File

@ -96,5 +96,49 @@ horizon.checkpoints_restore = {
$(document).on('click', "#parametersdialog a.close", function() { $(document).on('click', "#parametersdialog a.close", function() {
$.Karbor.closeDialog("#parametersdialog"); $.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");
} }
}; };