diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/en.xml b/src/Umbraco.Core/EmbeddedResources/Lang/en.xml index 0000f92695..b344ed784a 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/en.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/en.xml @@ -336,6 +336,7 @@ Send for approval is not allowed Schedule is not allowed Unpublish is not allowed + Select all variants %0%]]> diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml b/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml index 608c6943ea..58a6f8b704 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml @@ -334,6 +334,7 @@ Send for approval is not allowed Schedule is not allowed Unpublish is not allowed + Select all variants %0%]]> diff --git a/src/Umbraco.Web.UI.Client/src/views/content/overlays/publish.controller.js b/src/Umbraco.Web.UI.Client/src/views/content/overlays/publish.controller.js index e2fe85c323..0bd4f8e568 100644 --- a/src/Umbraco.Web.UI.Client/src/views/content/overlays/publish.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/content/overlays/publish.controller.js @@ -6,8 +6,10 @@ var vm = this; vm.loading = true; vm.isNew = true; + vm.publishAll = false; vm.changeSelection = changeSelection; + vm.changePublishAllSelection = changePublishAllSelection; function allowPublish (variant) { return variant.allowedActions.includes("U"); @@ -38,6 +40,20 @@ $scope.model.disableSubmitButton = !canPublish(); //need to set the Save state to same as publish. variant.save = variant.publish; + //update publishAll checkbox value + updatePublishAllSelectionStatus(); + } + + function changePublishAllSelection(){ + vm.availableVariants.forEach(variant => { + variant.publish = vm.publishAll; + variant.save = variant.publish; + }); + $scope.model.disableSubmitButton = !canPublish(); + } + + function updatePublishAllSelectionStatus(){ + vm.publishAll = vm.availableVariants.every(x => x.publish); } function hasAnyDataFilter(variant) { @@ -138,7 +154,7 @@ vm.availableVariants = vm.variants.filter(publishableVariantFilter); vm.missingMandatoryVariants = vm.variants.filter(notPublishableButMandatoryFilter); - + // if any active varaiant that is available for publish, we set it to be published: vm.availableVariants.forEach(v => { if(v.active && allowPublish(v)) { @@ -152,6 +168,9 @@ $scope.model.disableSubmitButton = !canPublish(); + //update publishAll checkbox value + updatePublishAllSelectionStatus(); + const localizeKey = vm.missingMandatoryVariants.length > 0 ? 'content_notReadyToPublish' : !$scope.model.title ? 'content_readyToPublish' : ''; diff --git a/src/Umbraco.Web.UI.Client/src/views/content/overlays/publish.html b/src/Umbraco.Web.UI.Client/src/views/content/overlays/publish.html index 56ca5ddedf..8605d57afb 100644 --- a/src/Umbraco.Web.UI.Client/src/views/content/overlays/publish.html +++ b/src/Umbraco.Web.UI.Client/src/views/content/overlays/publish.html @@ -3,7 +3,7 @@
- +
@@ -12,6 +12,17 @@

+
+ + + Select all variants + +
+
diff --git a/src/Umbraco.Web.UI.Client/src/views/content/overlays/publishdescendants.controller.js b/src/Umbraco.Web.UI.Client/src/views/content/overlays/publishdescendants.controller.js index da8ee2d3a8..1b4c16b28f 100644 --- a/src/Umbraco.Web.UI.Client/src/views/content/overlays/publishdescendants.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/content/overlays/publishdescendants.controller.js @@ -5,9 +5,11 @@ var vm = this; vm.includeUnpublished = $scope.model.includeUnpublished || false; + vm.publishAll = false; vm.changeSelection = changeSelection; vm.toggleIncludeUnpublished = toggleIncludeUnpublished; + vm.changePublishAllSelection = changePublishAllSelection; function onInit() { @@ -48,8 +50,10 @@ active.publish = active.save = true; } - $scope.model.disableSubmitButton = !canPublish(); + updatePublishAllSelectionStatus(); + $scope.model.disableSubmitButton = !canPublish(); + } else { // localize help text for invariant content vm.labels.help = { @@ -97,8 +101,20 @@ $scope.model.disableSubmitButton = !canPublish(); //need to set the Save state to true if publish is true variant.save = variant.publish; + updatePublishAllSelectionStatus(); } + function changePublishAllSelection(){ + vm.displayVariants.forEach(variant => { + variant.publish = vm.publishAll; + variant.save = variant.publish; + }); + $scope.model.disableSubmitButton = !canPublish(); + } + + function updatePublishAllSelectionStatus(){ + vm.publishAll = vm.displayVariants.every(x => x.publish); + } function isMandatoryFilter(variant) { //determine a variant is 'dirty' (meaning it will show up as publish-able) if it's diff --git a/src/Umbraco.Web.UI.Client/src/views/content/overlays/publishdescendants.html b/src/Umbraco.Web.UI.Client/src/views/content/overlays/publishdescendants.html index 54a0e9c6df..cbd78fb2d5 100644 --- a/src/Umbraco.Web.UI.Client/src/views/content/overlays/publishdescendants.html +++ b/src/Umbraco.Web.UI.Client/src/views/content/overlays/publishdescendants.html @@ -38,6 +38,17 @@
+
+ + + Select all variants + +
+
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 308673bf21..1581e5ce1c 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 @@ -7,14 +7,28 @@ vm.loading = true; vm.hasPristineVariants = false; vm.isNew = true; + vm.saveAll = false; vm.changeSelection = changeSelection; + vm.changeSaveAllSelection = changeSaveAllSelection; function changeSelection(variant) { var firstSelected = _.find(vm.variants, function (v) { return v.save; }); $scope.model.disableSubmitButton = !firstSelected; //disable submit button if there is none selected + updateSaveAllSelectionStatus(); + } + + function changeSaveAllSelection(){ + vm.availableVariants.forEach(variant => { + variant.save = vm.saveAll; + }); + $scope.model.disableSubmitButton = !vm.saveAll; + } + + function updateSaveAllSelectionStatus(){ + vm.saveAll = vm.availableVariants.every(x => x.save); } function allowUpdate (variant) { @@ -92,6 +106,8 @@ vm.availableVariants = contentEditingHelper.getSortedVariantsAndSegments(vm.availableVariants); + updateSaveAllSelectionStatus(); + } else { //disable save button if we have nothing to save $scope.model.disableSubmitButton = true; 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 9153ae1650..1b564cb0b3 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 @@ -13,6 +13,17 @@
+
+ + + Select all variants + +
+
diff --git a/src/Umbraco.Web.UI.Client/src/views/content/overlays/sendtopublish.controller.js b/src/Umbraco.Web.UI.Client/src/views/content/overlays/sendtopublish.controller.js index c1c91057da..ce04d20ace 100644 --- a/src/Umbraco.Web.UI.Client/src/views/content/overlays/sendtopublish.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/content/overlays/sendtopublish.controller.js @@ -6,8 +6,10 @@ var vm = this; vm.loading = true; vm.selectedVariants = []; + vm.sendToPublishAll = false; vm.changeSelection = changeSelection; + vm.changeSendToPublishAllSelection = changeSendToPublishAllSelection; function onInit() { @@ -29,8 +31,9 @@ if (vm.availableVariants.length !== 0) { vm.availableVariants = contentEditingHelper.getSortedVariantsAndSegments(vm.availableVariants); + updateSendToPublishAllSelectionStatus(); } - + $scope.model.disableSubmitButton = true; vm.loading = false; } @@ -55,10 +58,39 @@ let firstSelected = vm.variants.find(v => v.save); $scope.model.disableSubmitButton = !firstSelected; + updateSendToPublishAllSelectionStatus(); + } + + function changeSendToPublishAllSelection(){ + + vm.availableVariants.forEach(variant => { + + variant.publish = vm.sendToPublishAll; + let foundVariant = vm.selectedVariants.find(x => x.compositeId === variant.compositeId); + + if (foundVariant === undefined) { + variant.save = true; + vm.selectedVariants.push(variant); + } else { + if(!vm.sendToPublishAll){ + variant.save = false; + let index = vm.selectedVariants.indexOf(foundVariant); + if (index !== -1) { + vm.selectedVariants.splice(index, 1); + } + } + } + }); + let firstSelected = vm.variants.find(v => v.save); + $scope.model.disableSubmitButton = !firstSelected; + } + + function updateSendToPublishAllSelectionStatus(){ + vm.sendToPublishAll = vm.availableVariants.every(x => x.publish); } - function isMandatoryFilter(variant) { + function isMandatoryFilter(variant) { //determine a variant is 'dirty' (meaning it will show up as publish-able) if it's // * has a mandatory language // * without having a segment, segments cant be mandatory at current state of code. diff --git a/src/Umbraco.Web.UI.Client/src/views/content/overlays/sendtopublish.html b/src/Umbraco.Web.UI.Client/src/views/content/overlays/sendtopublish.html index b9061a8eb6..4d51ae1c30 100644 --- a/src/Umbraco.Web.UI.Client/src/views/content/overlays/sendtopublish.html +++ b/src/Umbraco.Web.UI.Client/src/views/content/overlays/sendtopublish.html @@ -10,6 +10,17 @@
+
+ + + Select all variants + +
+