diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml b/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml index 1cee9cd14a..15cef77ca3 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml @@ -319,6 +319,7 @@ Create new Paste from clipboard This item is in the Recycle Bin + Save is not allowed %0%]]> diff --git a/src/Umbraco.Web.UI.Client/src/views/content/overlays/save.controller.js b/src/Umbraco.Web.UI.Client/src/views/content/overlays/save.controller.js index bfde6afbe3..812a461aee 100644 --- a/src/Umbraco.Web.UI.Client/src/views/content/overlays/save.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/content/overlays/save.controller.js @@ -17,11 +17,17 @@ $scope.model.disableSubmitButton = !firstSelected; //disable submit button if there is none selected } + function allowUpdate (variant) { + return variant.allowedActions.includes("A"); + } + function saveableVariantFilter(variant) { //determine a variant is 'dirty' (meaning it will show up as save-able) if it's // * the active one // * it's editor is in a $dirty state - return (variant.active || variant.isDirty); + // the editor has update permissions for the variant + variant.notAllowed = allowUpdate(variant) === false && variant.active; + return ((variant.active || variant.isDirty) && (allowUpdate(variant) || variant.active)); } function isMandatoryFilter(variant) { @@ -72,7 +78,7 @@ variant.save = variant.publish = false; variant.isMandatory = isMandatoryFilter(variant); - if(vm.isNew && hasAnyData(variant)){ + if(vm.isNew && hasAnyData(variant) && allowUpdate(variant)) { variant.save = true; } }); @@ -81,7 +87,7 @@ //ensure that the current one is selected var active = vm.variants.find(v => v.active); - if (active) { + if (active && allowUpdate(active)) { active.save = true; } @@ -97,10 +103,11 @@ onInit(); - //when this dialog is closed, reset all 'save' flags + //when this dialog is closed, reset all 'save' and 'notAllowed' flags $scope.$on('$destroy', () => { vm.variants.forEach(variant => { variant.save = false; + variant.notAllowed = false; }); }); diff --git a/src/Umbraco.Web.UI.Client/src/views/content/overlays/save.html b/src/Umbraco.Web.UI.Client/src/views/content/overlays/save.html index df6332e5be..9153ae1650 100644 --- a/src/Umbraco.Web.UI.Client/src/views/content/overlays/save.html +++ b/src/Umbraco.Web.UI.Client/src/views/content/overlays/save.html @@ -24,9 +24,8 @@ name="saveVariantSelector" model="variant.save" on-change="vm.changeSelection(variant)" - server-validation-field="{{variant.htmlId}}"> - - + server-validation-field="{{variant.htmlId}}" + disabled="variant.notAllowed"> @@ -40,6 +39,10 @@ - Mandatory + - + + + {{saveVariantSelectorForm.saveVariantSelector.errorMsg}} @@ -49,7 +52,7 @@ - +