Prevented creation of circular fall-back language paths. Allowed for update to no fall-back language.
This commit is contained in:
@@ -112,6 +112,11 @@
|
||||
if (formHelper.submitForm({ scope: $scope })) {
|
||||
vm.page.saveButtonState = "busy";
|
||||
|
||||
// Handle selection of no fall-back language (should pass null)
|
||||
if (!vm.language.fallbackLanguage.id) {
|
||||
vm.language.fallbackLanguage = null;
|
||||
}
|
||||
|
||||
// We need to attach the ISO code to the fall-back language to pass
|
||||
// server-side validation.
|
||||
if (vm.language.fallbackLanguage) {
|
||||
|
||||
@@ -148,6 +148,13 @@ namespace Umbraco.Web.Editors
|
||||
found.Mandatory = language.Mandatory;
|
||||
found.IsDefaultVariantLanguage = language.IsDefaultVariantLanguage;
|
||||
AssociateFallbackLanguage(language, found);
|
||||
|
||||
if (UpdatedFallbackLanguageCreatesCircularPath(found))
|
||||
{
|
||||
ModelState.AddModelError("FallbackLanguage", "The selected fall back language '" + found.FallbackLanguage.CultureName + "' would create a circular path.");
|
||||
throw new HttpResponseException(Request.CreateValidationErrorResponse(ModelState));
|
||||
}
|
||||
|
||||
Services.LocalizationService.Save(found);
|
||||
return Mapper.Map<Language>(found);
|
||||
}
|
||||
@@ -156,6 +163,7 @@ namespace Umbraco.Web.Editors
|
||||
{
|
||||
if (submittedLanguage.FallbackLanguage == null)
|
||||
{
|
||||
languageToCreateOrUpdate.FallbackLanguage = null;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -166,5 +174,27 @@ namespace Umbraco.Web.Editors
|
||||
CultureName = fallbackLanguageCulture.DisplayName
|
||||
};
|
||||
}
|
||||
|
||||
private bool UpdatedFallbackLanguageCreatesCircularPath(ILanguage language)
|
||||
{
|
||||
if (language.FallbackLanguage == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
var languages = Services.LocalizationService.GetAllLanguages().ToArray();
|
||||
var fallbackLanguage = language.FallbackLanguage;
|
||||
while (fallbackLanguage != null)
|
||||
{
|
||||
if (fallbackLanguage.Id == language.Id)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
fallbackLanguage = languages.Single(x => x.Id == fallbackLanguage.Id).FallbackLanguage;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user