diff --git a/src/Umbraco.Web.UI.Client/src/views/content/overlays/unpublish.controller.js b/src/Umbraco.Web.UI.Client/src/views/content/overlays/unpublish.controller.js index 6b8bcb59e2..bf8ca65308 100644 --- a/src/Umbraco.Web.UI.Client/src/views/content/overlays/unpublish.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/content/overlays/unpublish.controller.js @@ -4,7 +4,7 @@ function UnpublishController($scope, localizationService) { var vm = this; - vm.loading = true; + var autoSelectedVariants = []; vm.changeSelection = changeSelection; vm.publishedVariantFilter = publishedVariantFilter; @@ -21,15 +21,71 @@ }); } - vm.loading = false; + if (vm.variants.length !== 0) { + //now sort it so that the current one is at the top + vm.variants = _.sortBy(vm.variants, function (v) { + return v.active ? 0 : 1; + }); + + var active = _.find(vm.variants, function (v) { + return v.active; + }); + + if (active) { + //ensure that the current one is selected + active.unpublish = true; + } + + // autoselect other variants if needed + changeSelection(active); + } } - function changeSelection() { + function changeSelection(selectedVariant) { + + // disable submit button if nothing is selected var firstSelected = _.find(vm.variants, function (v) { return v.unpublish; }); $scope.model.disableSubmitButton = !firstSelected; //disable submit button if there is none selected + + // if a mandatory variant is selected we want to selet all other variants + // and disable selection for the others + if(selectedVariant.unpublish && selectedVariant.language.isMandatory) { + + angular.forEach(vm.variants, function(variant){ + if(!variant.unpublish && publishedVariantFilter(variant)) { + // keep track of the variants we automaically select + // so we can remove the selection again + autoSelectedVariants.push(variant.language.culture); + variant.unpublish = true; + } + variant.disabled = true; + }); + + // make sure the mandatory isn't disabled so we can deselect again + selectedVariant.disabled = false; + + } + + // if a mandatory variant is deselected we want to deselet all the variants + // that was automatically selected so it goes back to the state before the mandatory language was selected. + // We also want to enable all checkboxes again + if(!selectedVariant.unpublish && selectedVariant.language.isMandatory) { + + angular.forEach(vm.variants, function(variant){ + + // check if variant was auto selected, then deselect + if(_.contains(autoSelectedVariants, variant.language.culture)) { + variant.unpublish = false; + }; + + variant.disabled = false; + }); + autoSelectedVariants = []; + } + } function publishedVariantFilter(variant) { @@ -46,10 +102,11 @@ return (variant.state !== "Published" && variant.state !== "PublishedPendingChanges"); } - //when this dialog is closed, reset all 'unpublish' flags + //when this dialog is closed, remove all unpublish and disabled flags $scope.$on('$destroy', function () { for (var i = 0; i < vm.variants.length; i++) { vm.variants[i].unpublish = false; + vm.variants[i].disabled = false; } }); diff --git a/src/Umbraco.Web.UI.Client/src/views/content/overlays/unpublish.html b/src/Umbraco.Web.UI.Client/src/views/content/overlays/unpublish.html index 5d7abe2f38..b0baee7000 100644 --- a/src/Umbraco.Web.UI.Client/src/views/content/overlays/unpublish.html +++ b/src/Umbraco.Web.UI.Client/src/views/content/overlays/unpublish.html @@ -4,11 +4,7 @@

-
- -
- -
+
@@ -18,6 +14,7 @@ type="checkbox" ng-model="variant.unpublish" ng-change="vm.changeSelection(variant)" + ng-disabled="variant.disabled" style="margin-right: 8px;" val-server-field="{{variant.htmlId}}" />
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml index 65578cedeb..2ff3d933ed 100644 --- a/src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml +++ b/src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml @@ -266,7 +266,7 @@ What languages would you like to publish? What languages would you like to save? What languages would you like to send for approval? - What languages would you like to unpublish? + Select the languages to unpublish. Unpublishing a mandatory language will unpublish all languages. Published Languages Unpublished Languages Unmodified Languages