From c49c5369e305773b646329e0b682c2d82ef87a50 Mon Sep 17 00:00:00 2001 From: Bjarne Fyrstenborg Date: Sun, 19 Sep 2021 14:01:09 +0200 Subject: [PATCH 01/75] Adjust icon in umb-checkbox and ensure icon is centered --- .../src/less/components/umb-form-check.less | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/less/components/umb-form-check.less b/src/Umbraco.Web.UI.Client/src/less/components/umb-form-check.less index f13ae198d622..bb4af5e05cac 100644 --- a/src/Umbraco.Web.UI.Client/src/less/components/umb-form-check.less +++ b/src/Umbraco.Web.UI.Client/src/less/components/umb-form-check.less @@ -97,7 +97,8 @@ .icon, .umb-icon { - font-size: 1.2rem; + font-size: 0.9rem; + line-height: 1; } &__state { @@ -110,6 +111,8 @@ &__check { display: flex; + align-items: center; + justify-content: center; position: relative; background: @white; border: 1px solid @inputBorder; From 674edd3a97c0d5383af9358f365a065e606267ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Corn=C3=A9=20Strijkert?= Date: Mon, 20 Sep 2021 13:53:41 +0200 Subject: [PATCH 02/75] Missing nl translation for blockEditor_addBlock --- src/Umbraco.Web.UI/Umbraco/config/lang/nl.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/nl.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/nl.xml index b50f49ad8ebc..04c6fb2ce72d 100644 --- a/src/Umbraco.Web.UI/Umbraco/config/lang/nl.xml +++ b/src/Umbraco.Web.UI/Umbraco/config/lang/nl.xml @@ -2342,6 +2342,7 @@ Echter, Runway biedt een gemakkelijke basis om je snel op weg te helpen. Als je Fout! Het Elementtype van dit blok bestaat niet meer + Inhoud toevoegen Eigenschap '%0%' gebruikt editor '%1%' die niet ondersteund wordt in blokken. From 9a246a1970c218ae72ed300dd7fbc5313baa7302 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Gregersen?= Date: Tue, 21 Sep 2021 06:56:27 +0200 Subject: [PATCH 03/75] Implement icon parameter for doctype editor (#11008) * fix: implement icon parameter for doctype editor issue #10108 * fix: move color from icon to class attribute * fix: removed defined colors, defaulting to the standard dark grey (ie "no color picked" in icon picker) * cleaned up unused dependencies, double quotes to single, removed unused 'color' param from the create methods, and use shorthand object creation in createDocType (if the key has the same name as the variable passed as a prop, we only need to pass the key name) * fix comment Co-authored-by: Nathan Woulfe --- .../views/documenttypes/create.controller.js | 77 +++++++++++-------- .../src/views/documenttypes/create.html | 8 +- .../views/documenttypes/edit.controller.js | 8 ++ 3 files changed, 58 insertions(+), 35 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/documenttypes/create.controller.js b/src/Umbraco.Web.UI.Client/src/views/documenttypes/create.controller.js index 23173a404dc3..b82146e75be5 100644 --- a/src/Umbraco.Web.UI.Client/src/views/documenttypes/create.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/documenttypes/create.controller.js @@ -6,11 +6,11 @@ * @description * The controller for the doc type creation dialog */ -function DocumentTypesCreateController($scope, $location, navigationService, contentTypeResource, formHelper, appState, notificationsService, localizationService, iconHelper) { +function DocumentTypesCreateController($scope, $location, navigationService, contentTypeResource, formHelper, appState) { $scope.model = { - allowCreateFolder: $scope.currentNode.parentId === null || $scope.currentNode.nodeType === "container", - folderName: "", + allowCreateFolder: $scope.currentNode.parentId === null || $scope.currentNode.nodeType === 'container', + folderName: '', creatingFolder: false }; @@ -31,18 +31,18 @@ function DocumentTypesCreateController($scope, $location, navigationService, con navigationService.hideMenu(); - var currPath = node.path ? node.path : "-1"; + var currPath = node.path ? node.path : '-1'; navigationService.syncTree({ - tree: "documenttypes", - path: currPath + "," + folderId, + tree: 'documenttypes', + path: currPath + ',' + folderId, forceReload: true, activate: true }); formHelper.resetForm({ scope: $scope, formCtrl: $scope.createFolderForm }); - var section = appState.getSectionState("currentSection"); + var section = appState.getSectionState('currentSection'); }, function (err) { @@ -51,39 +51,54 @@ function DocumentTypesCreateController($scope, $location, navigationService, con }); } - }; + }; + + function createDocType(config) { + + $location.search('create', null); + $location.search('notemplate', null); + $location.search('iscomposition', null); + $location.search('iselement', null); + $location.search('icon', null); + + var icon = null; + + if (config.icon != undefined && config.icon != null) { + icon = config.icon; + if (config.color) { + icon += ' ' + config.color; + } + } + + $location + .path('/settings/documenttypes/edit/' + node.id) + .search('create', 'true') + .search('notemplate', config.notemplate ? 'true' : null) + .search('iscomposition', config.iscomposition ? 'true' : null) + .search('iselement', config.iselement ? 'true' : null) + .search('icon', icon); + + navigationService.hideMenu(); + } + // Disabling logic for creating document type with template if disableTemplates is set to true if (!disableTemplates) { - $scope.createDocType = function () { - $location.search('create', null); - $location.search('notemplate', null); - $location.path("/settings/documenttypes/edit/" + node.id).search("create", "true"); - navigationService.hideMenu(); + $scope.createDocType = function (icon) { + createDocType({ icon }); }; } - $scope.createComponent = function () { - $location.search('create', null); - $location.search('notemplate', null); - $location.path("/settings/documenttypes/edit/" + node.id).search("create", "true").search("notemplate", "true"); - navigationService.hideMenu(); + $scope.createComponent = function (icon) { + createDocType({ notemplate: true, icon }); }; - $scope.createComposition = function () { - $location.search('create', null); - $location.search('notemplate', null); - $location.search('iscomposition', null); - $location.path("/settings/documenttypes/edit/" + node.id).search("create", "true").search("notemplate", "true").search("iscomposition", "true"); - navigationService.hideMenu(); + $scope.createComposition = function (icon) { + createDocType({ iscomposition: true, iselement: true, icon }); }; - $scope.createElement = function () { - $location.search('create', null); - $location.search('notemplate', null); - $location.search('iselement', null); - $location.path("/settings/documenttypes/edit/" + node.id).search("create", "true").search("notemplate", "true").search("iselement", "true"); - navigationService.hideMenu(); + $scope.createElement = function (icon) { + createDocType({ iselement: true, icon }); }; $scope.close = function() { @@ -92,4 +107,4 @@ function DocumentTypesCreateController($scope, $location, navigationService, con }; } -angular.module('umbraco').controller("Umbraco.Editors.DocumentTypes.CreateController", DocumentTypesCreateController); +angular.module('umbraco').controller('Umbraco.Editors.DocumentTypes.CreateController', DocumentTypesCreateController); diff --git a/src/Umbraco.Web.UI.Client/src/views/documenttypes/create.html b/src/Umbraco.Web.UI.Client/src/views/documenttypes/create.html index 8992c73525dd..143d9b9df1e8 100644 --- a/src/Umbraco.Web.UI.Client/src/views/documenttypes/create.html +++ b/src/Umbraco.Web.UI.Client/src/views/documenttypes/create.html @@ -5,7 +5,7 @@
Create an item under {{current
  • -
  • -
  • -
  • - + diff --git a/src/Umbraco.Web.UI.Client/src/views/content/createblueprint.html b/src/Umbraco.Web.UI.Client/src/views/content/createblueprint.html index 034a123e9b5e..7a1c8c381ebe 100644 --- a/src/Umbraco.Web.UI.Client/src/views/content/createblueprint.html +++ b/src/Umbraco.Web.UI.Client/src/views/content/createblueprint.html @@ -18,7 +18,7 @@
    - + Required {{blueprintForm.name.errorMsg}} diff --git a/src/Umbraco.Web.UI.Client/src/views/contentblueprints/create.html b/src/Umbraco.Web.UI.Client/src/views/contentblueprints/create.html index 332b27c81b0a..f58c330ce928 100644 --- a/src/Umbraco.Web.UI.Client/src/views/contentblueprints/create.html +++ b/src/Umbraco.Web.UI.Client/src/views/contentblueprints/create.html @@ -12,7 +12,7 @@
    Create an item under {{current
      -
    • +
    • + {{ ::result.values['nodeName'] | umbCmsJoinArray:', '}} + {{ ::result.values['nodeName'] | umbCmsJoinArray:', '}} + @@ -288,27 +288,52 @@

      - - - - - - - - - - - - - - - - -
      ScoreIdName
      {{result.score}}{{result.id}} - {{result.values['nodeName'] | umbCmsJoinArray:', '}} - {{result.values['nodeName'] | umbCmsJoinArray:', '}} - -
      +
      + + + + + + + + + + + + + + + + + + + +
      IdName +
      + {{ field }} + +
      +
      + + Score
      {{result.id}} + + {{ ::result.values['nodeName'] | umbCmsJoinArray:', ' }} + + {{ ::result.values['nodeName'] | umbCmsJoinArray:', ' }} + + {{ ::result.values[field] | umbCmsJoinArray:', ' }} + + + + + {{ ::result.score | number:4 }} + +
      +
      + + + + + + +
      + + + + + {{ field }} +
      +
      +
      +
      + + + + + + +
      +
      diff --git a/src/Umbraco.Web.UI.Client/src/views/dashboard/settings/examinemanagementresults.html b/src/Umbraco.Web.UI.Client/src/views/dashboard/settings/examinemanagementresults.html index cd455a32ae16..ad888cfcf3fe 100644 --- a/src/Umbraco.Web.UI.Client/src/views/dashboard/settings/examinemanagementresults.html +++ b/src/Umbraco.Web.UI.Client/src/views/dashboard/settings/examinemanagementresults.html @@ -20,7 +20,7 @@ {{key}} - {{values | umbCmsJoinArray:', '}} + {{ ::values | umbCmsJoinArray:', '}} diff --git a/src/Umbraco.Web.UI.Client/test/unit/common/filters/umbCmsJoinArray.filter.spec.js b/src/Umbraco.Web.UI.Client/test/unit/common/filters/umbCmsJoinArray.filter.spec.js index 4a44b17bff5c..1c33a91b09a3 100644 --- a/src/Umbraco.Web.UI.Client/test/unit/common/filters/umbCmsJoinArray.filter.spec.js +++ b/src/Umbraco.Web.UI.Client/test/unit/common/filters/umbCmsJoinArray.filter.spec.js @@ -11,12 +11,9 @@ {input:[], separator:', ', prop:'param' , expectedResult: ''}, {input:[{param:'a'},{param:'b'},{param:'c'}], separator:', ', prop:null , expectedResult: ', , '}, {input:[{param:'a'},{param:'b'},{param:'c'}], separator:null, prop:'param' , expectedResult: 'abc'}, - ]; - - var testCasesWithExpectedError = [ - {input:'test', separator:', ', prop:'param'}, - {input:null, separator:', ', prop:'param'}, - {input:undefined, separator:', ', prop:'param'}, + {input:'test', separator:', ', prop:'param', expectedResult: 'test'}, + {input:null, separator:', ', prop:'param', expectedResult: ''}, + {input:undefined, separator:', ', prop:'param', expectedResult: ''}, ]; beforeEach(module('umbraco')); @@ -25,19 +22,11 @@ $umbCmsJoinArray = $filter('umbCmsJoinArray'); })); - testCases.forEach(function(test){ it('Blackbox tests with expected result=\''+test.expectedResult+'\'', function() { expect($umbCmsJoinArray(test.input, test.separator, test.prop)).toBe(test.expectedResult); }); }); - - testCasesWithExpectedError.forEach(function(test){ - it('Blackbox tests with expected error. Input=\''+test.input+'\'', function() { - expect(function() { $umbCmsJoinArray(test.input, test.separator, test.prop)}).toThrow(); - }); - }); - }); }()); From 26382ab8d567d009a50df4ae5ad372d4bc602c09 Mon Sep 17 00:00:00 2001 From: Paul Johnson Date: Mon, 27 Sep 2021 14:36:17 +0100 Subject: [PATCH 11/75] Add EntityController GetUrlsByUdis Enables loading multiple URLs in a single request for Media & Documents --- src/Umbraco.Web/Editors/EntityController.cs | 49 +++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/src/Umbraco.Web/Editors/EntityController.cs b/src/Umbraco.Web/Editors/EntityController.cs index b6bef3fd9651..66173634185b 100644 --- a/src/Umbraco.Web/Editors/EntityController.cs +++ b/src/Umbraco.Web/Editors/EntityController.cs @@ -235,6 +235,55 @@ public HttpResponseMessage GetUrl(Udi udi, string culture = "*") return GetUrl(intId.Result, entityType, culture); } + /// + /// Get entity URLs by UDIs + /// + /// + /// A list of UDIs to lookup items by + /// + /// The culture to fetch the URL for + /// Dictionary mapping Udi -> Url + /// + /// We allow for POST because there could be quite a lot of Ids. + /// + [HttpGet] + [HttpPost] + public IDictionary GetUrlsByUdis([FromJsonPath] Udi[] ids, string culture = null) + { + if (ids == null) + { + throw new HttpResponseException(HttpStatusCode.NotFound); + } + + if (ids.Length == 0) + { + return new Dictionary(); + } + + // TODO: PMJ 2021-09-27 - Should GetUrl(Udi) exist as an extension method on UrlProvider/IUrlProvider (in v9) + string MediaOrDocumentUrl(Udi udi) + { + if (udi is not GuidUdi guidUdi) + { + return null; + } + + return guidUdi.EntityType switch + { + Constants.UdiEntityType.Document => UmbracoContext.UrlProvider.GetUrl(guidUdi.Guid, culture: culture ?? ClientCulture()), + // NOTE: If culture is passed here we get an empty string rather than a media item URL WAT + Constants.UdiEntityType.Media => UmbracoContext.UrlProvider.GetMediaUrl(guidUdi.Guid, culture: null), + _ => null + }; + } + + return ids + .Select(udi => new { + Udi = udi, + Url = MediaOrDocumentUrl(udi) + }).ToDictionary(x => x.Udi, x => x.Url); + } + /// /// Gets the URL of an entity /// From 4eb75799e7458ddebec05958b53e80b2030ad8d7 Mon Sep 17 00:00:00 2001 From: Paul Johnson Date: Mon, 27 Sep 2021 14:39:04 +0100 Subject: [PATCH 12/75] Update content picker to use GetUrlsByUdis --- .../common/mocks/resources/entity.mocks.js | 13 +++++++ .../src/common/resources/entity.resource.js | 15 ++++++++ .../contentpicker/contentpicker.controller.js | 36 +++++++------------ 3 files changed, 40 insertions(+), 24 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/mocks/resources/entity.mocks.js b/src/Umbraco.Web.UI.Client/src/common/mocks/resources/entity.mocks.js index 2c2007dd91b0..05594115e1d2 100644 --- a/src/Umbraco.Web.UI.Client/src/common/mocks/resources/entity.mocks.js +++ b/src/Umbraco.Web.UI.Client/src/common/mocks/resources/entity.mocks.js @@ -34,6 +34,15 @@ angular.module('umbraco.mocks'). return [200, nodes, null]; } + function returnUrlsbyUdis(status, data, headers) { + + if (!mocksUtils.checkAuth()) { + return [401, null, null]; + } + + return [200, {}, null]; + } + function returnEntitybyIdsPost(method, url, data, headers) { if (!mocksUtils.checkAuth()) { @@ -73,6 +82,10 @@ angular.module('umbraco.mocks'). .whenPOST(mocksUtils.urlRegex('/umbraco/UmbracoApi/Entity/GetByIds')) .respond(returnEntitybyIdsPost); + $httpBackend + .whenPOST(mocksUtils.urlRegex('/umbraco/UmbracoApi/Entity/GetUrlsByUdis')) + .respond(returnUrlsbyUdis); + $httpBackend .whenGET(mocksUtils.urlRegex('/umbraco/UmbracoApi/Entity/GetAncestors')) .respond(returnEntitybyIds); diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/entity.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/entity.resource.js index 0b060da34bed..1c29a69c2dda 100644 --- a/src/Umbraco.Web.UI.Client/src/common/resources/entity.resource.js +++ b/src/Umbraco.Web.UI.Client/src/common/resources/entity.resource.js @@ -127,6 +127,21 @@ function entityResource($q, $http, umbRequestHelper) { 'Failed to retrieve url for id:' + id); }, + getUrlsByUdis: function(ids, culture) { + var query = "culture=" + (culture || ""); + + return umbRequestHelper.resourcePromise( + $http.post( + umbRequestHelper.getApiUrl( + "entityApiBaseUrl", + "GetUrlsByUdis", + query), + { + ids: ids + }), + 'Failed to retrieve url map for ids ' + ids); + }, + getUrlByUdi: function (udi, culture) { if (!udi) { diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/contentpicker/contentpicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/contentpicker/contentpicker.controller.js index d8c7b3e76a62..7c8c1e64fbd7 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/contentpicker/contentpicker.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/contentpicker/contentpicker.controller.js @@ -413,8 +413,13 @@ function contentPickerController($scope, $q, $routeParams, $location, entityReso var missingIds = _.difference(valueIds, renderModelIds); if (missingIds.length > 0) { - return entityResource.getByIds(missingIds, entityType).then(function (data) { + var requests = [ + entityResource.getByIds(missingIds, entityType), + entityResource.getUrlsByUdis(missingIds) + ]; + + return $q.all(requests).then(function ([data, urlMap]) { _.each(valueIds, function (id, i) { var entity = _.find(data, function (d) { @@ -422,7 +427,12 @@ function contentPickerController($scope, $q, $routeParams, $location, entityReso }); if (entity) { - addSelectedItem(entity); + + entity.url = entity.trashed + ? vm.labels.general_recycleBin + : urlMap[id]; + + addSelectedItem(entity); } }); @@ -469,26 +479,6 @@ function contentPickerController($scope, $q, $routeParams, $location, entityReso } - function setEntityUrl(entity) { - - // get url for content and media items - if (entityType !== "Member") { - entityResource.getUrl(entity.id, entityType).then(function (data) { - // update url - $scope.renderModel.forEach(function (item) { - if (item.id === entity.id) { - if (entity.trashed) { - item.url = vm.labels.general_recycleBin; - } else { - item.url = data; - } - } - }); - }); - } - - } - function addSelectedItem(item) { // set icon @@ -523,8 +513,6 @@ function contentPickerController($scope, $q, $routeParams, $location, entityReso "published": (item.metaData && item.metaData.IsPublished === false && entityType === "Document") ? false : true // only content supports published/unpublished content so we set everything else to published so the UI looks correct }); - - setEntityUrl(item); } function setSortingState(items) { From 9f48a9f940b9fee7a09fe4a2f2062c33f455eeb4 Mon Sep 17 00:00:00 2001 From: Shannon Date: Fri, 10 Sep 2021 10:31:38 -0600 Subject: [PATCH 13/75] Allows replacing MainDom with alternate DB There are some cases where there is a complex hosting strategy and folks want a readonly database and are hosting on Azure. In that case, it is not entirely possible to have a readonly Umbraco database because SqlMainDom is required and part of that requirement is to have read/write access to the umbraco key value table. This PR allows for the default MainDom to be replaced and to allow for an SqlMainDomLock to use an alternate connection string so that a separate read/write database can be used. --- src/Umbraco.Core/Runtime/MainDom.cs | 2 +- src/Umbraco.Core/Runtime/SqlMainDomLock.cs | 6 +++--- src/Umbraco.Web/UmbracoApplication.cs | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.Core/Runtime/MainDom.cs b/src/Umbraco.Core/Runtime/MainDom.cs index d784560f2c04..b5404c62b2c5 100644 --- a/src/Umbraco.Core/Runtime/MainDom.cs +++ b/src/Umbraco.Core/Runtime/MainDom.cs @@ -19,7 +19,7 @@ namespace Umbraco.Core.Runtime /// When an AppDomain starts, it tries to acquire the main domain status. /// When an AppDomain stops (eg the application is restarting) it should release the main domain status. /// - internal class MainDom : IMainDom, IRegisteredObject, IDisposable + public class MainDom : IMainDom, IRegisteredObject, IDisposable { #region Vars diff --git a/src/Umbraco.Core/Runtime/SqlMainDomLock.cs b/src/Umbraco.Core/Runtime/SqlMainDomLock.cs index 12359c96d102..8e38fa74c418 100644 --- a/src/Umbraco.Core/Runtime/SqlMainDomLock.cs +++ b/src/Umbraco.Core/Runtime/SqlMainDomLock.cs @@ -18,7 +18,7 @@ namespace Umbraco.Core.Runtime { - internal class SqlMainDomLock : IMainDomLock + public class SqlMainDomLock : IMainDomLock { private readonly TimeSpan _lockTimeout; private string _lockId; @@ -33,14 +33,14 @@ internal class SqlMainDomLock : IMainDomLock private object _locker = new object(); private bool _hasTable = false; - public SqlMainDomLock(ILogger logger) + public SqlMainDomLock(ILogger logger, string connectionStringName = Constants.System.UmbracoConnectionName) { // unique id for our appdomain, this is more unique than the appdomain id which is just an INT counter to its safer _lockId = Guid.NewGuid().ToString(); _logger = logger; _dbFactory = new UmbracoDatabaseFactory( - Constants.System.UmbracoConnectionName, + connectionStringName, _logger, new Lazy(() => new MapperCollection(Enumerable.Empty()))); diff --git a/src/Umbraco.Web/UmbracoApplication.cs b/src/Umbraco.Web/UmbracoApplication.cs index c96e21e34870..563d553ac25a 100644 --- a/src/Umbraco.Web/UmbracoApplication.cs +++ b/src/Umbraco.Web/UmbracoApplication.cs @@ -76,7 +76,7 @@ protected virtual string GetBootErrorFileName() /// /// Returns a new MainDom /// - protected IMainDom GetMainDom(ILogger logger) + protected virtual IMainDom GetMainDom(ILogger logger) { // Determine if we should use the sql main dom or the default var appSettingMainDomLock = ConfigurationManager.AppSettings[Constants.AppSettings.MainDomLock]; From 20b9db87d091e7d53f9f25d4d11744afcffa2584 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Mon, 4 Oct 2021 09:45:33 +0200 Subject: [PATCH 14/75] Remove inherited property group id/key when local properties are added (#11231) * Remove inherited property group id/key when local properties are added * Rebind saved content type values * Remove inherited from save group --- .../services/contenttypehelper.service.js | 39 +++++++++++++++++ .../services/umbdataformatter.service.js | 40 +++++++++-------- .../views/documenttypes/edit.controller.js | 32 ++------------ .../src/views/mediatypes/edit.controller.js | 35 ++------------- .../src/views/membertypes/edit.controller.js | 43 +++---------------- 5 files changed, 73 insertions(+), 116 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/services/contenttypehelper.service.js b/src/Umbraco.Web.UI.Client/src/common/services/contenttypehelper.service.js index d9157093a7b9..cceb67689fed 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/contenttypehelper.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/contenttypehelper.service.js @@ -439,6 +439,45 @@ function contentTypeHelper(contentTypeResource, dataTypeResource, $filter, $inje array.push(placeholder); + }, + + rebindSavedContentType: function (contentType, savedContentType) { + // The saved content type might have updated values (eg. new IDs/keys), so make sure the view model is updated + contentType.ModelState = savedContentType.ModelState; + contentType.id = savedContentType.id; + contentType.groups.forEach(function (group) { + if (!group.alias) return; + + var k = 0; + while (k < savedContentType.groups.length && savedContentType.groups[k].alias != group.alias) + k++; + + if (k == savedContentType.groups.length) { + group.id = 0; + return; + } + + var savedGroup = savedContentType.groups[k]; + group.id = savedGroup.id; + group.key = savedGroup.key; + group.contentTypeId = savedGroup.contentTypeId; + + group.properties.forEach(function (property) { + if (property.id || !property.alias) return; + + k = 0; + while (k < savedGroup.properties.length && savedGroup.properties[k].alias != property.alias) + k++; + + if (k == savedGroup.properties.length) { + property.id = 0; + return; + } + + var savedProperty = savedGroup.properties[k]; + property.id = savedProperty.id; + }); + }); } }; diff --git a/src/Umbraco.Web.UI.Client/src/common/services/umbdataformatter.service.js b/src/Umbraco.Web.UI.Client/src/common/services/umbdataformatter.service.js index 226fabeae41d..7270ae5bbf06 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/umbdataformatter.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/umbdataformatter.service.js @@ -37,7 +37,7 @@ return { - formatChangePasswordModel: function(model) { + formatChangePasswordModel: function (model) { if (!model) { return null; } @@ -59,26 +59,23 @@ }, formatContentTypePostData: function (displayModel, action) { - - //create the save model from the display model + // Create the save model from the display model var saveModel = _.pick(displayModel, 'compositeContentTypes', 'isContainer', 'allowAsRoot', 'allowedTemplates', 'allowedContentTypes', 'alias', 'description', 'thumbnail', 'name', 'id', 'icon', 'trashed', 'key', 'parentId', 'alias', 'path', 'allowCultureVariant', 'allowSegmentVariant', 'isElement'); - // TODO: Map these saveModel.allowedTemplates = _.map(displayModel.allowedTemplates, function (t) { return t.alias; }); saveModel.defaultTemplate = displayModel.defaultTemplate ? displayModel.defaultTemplate.alias : null; var realGroups = _.reject(displayModel.groups, function (g) { - //do not include these tabs + // Do not include groups with init state return g.tabState === "init"; }); saveModel.groups = _.map(realGroups, function (g) { - - var saveGroup = _.pick(g, 'inherited', 'id', 'sortOrder', 'name', 'key', 'alias', 'type'); + var saveGroup = _.pick(g, 'id', 'sortOrder', 'name', 'key', 'alias', 'type'); var realProperties = _.reject(g.properties, function (p) { - //do not include these properties + // Do not include properties with init state or inherited from a composition return p.propertyState === "init" || p.inherited === true; }); @@ -89,16 +86,21 @@ saveGroup.properties = saveProperties; - //if this is an inherited group and there are not non-inherited properties on it, then don't send up the data - if (saveGroup.inherited === true && saveProperties.length === 0) { - return null; + if (g.inherited === true) { + if (saveProperties.length === 0) { + // All properties are inherited from the compositions, no need to save this group + return null; + } else if (g.contentTypeId != saveModel.id) { + // We have local properties, but the group id is not local, ensure a new id/key is generated on save + saveGroup = _.omit(saveGroup, 'id', 'key'); + } } return saveGroup; }); - //we don't want any null groups saveModel.groups = _.reject(saveModel.groups, function (g) { + // Do not include empty/null groups return !g; }); @@ -127,17 +129,17 @@ }, /** formats the display model used to display the dictionary to the model used to save the dictionary */ - formatDictionaryPostData : function(dictionary, nameIsDirty) { + formatDictionaryPostData: function (dictionary, nameIsDirty) { var saveModel = { parentId: dictionary.parentId, id: dictionary.id, name: dictionary.name, nameIsDirty: nameIsDirty, translations: [], - key : dictionary.key + key: dictionary.key }; - for(var i = 0; i < dictionary.translations.length; i++) { + for (var i = 0; i < dictionary.translations.length; i++) { saveModel.translations.push({ isoCode: dictionary.translations[i].isoCode, languageId: dictionary.translations[i].languageId, @@ -362,7 +364,7 @@ parentId: displayModel.parentId, //set the action on the save model action: action, - variants: _.map(displayModel.variants, function(v) { + variants: _.map(displayModel.variants, function (v) { return { name: v.name || "", //if its null/empty,we must pass up an empty string else we get json converter errors properties: getContentProperties(v.tabs), @@ -392,7 +394,7 @@ * @param {} displayModel * @returns {} */ - formatContentGetData: function(displayModel) { + formatContentGetData: function (displayModel) { // We need to check for invariant properties among the variant variants, // as the value of an invariant property is shared between different variants. @@ -458,12 +460,12 @@ * Formats the display model used to display the relation type to a model used to save the relation type. * @param {Object} relationType */ - formatRelationTypePostData : function(relationType) { + formatRelationTypePostData: function (relationType) { var saveModel = { id: relationType.id, name: relationType.name, alias: relationType.alias, - key : relationType.key, + key: relationType.key, isBidirectional: relationType.isBidirectional, parentObjectType: relationType.parentObjectType, childObjectType: relationType.childObjectType diff --git a/src/Umbraco.Web.UI.Client/src/views/documenttypes/edit.controller.js b/src/Umbraco.Web.UI.Client/src/views/documenttypes/edit.controller.js index 3672af900c4d..a5e49163f9e5 100644 --- a/src/Umbraco.Web.UI.Client/src/views/documenttypes/edit.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/documenttypes/edit.controller.js @@ -324,35 +324,9 @@ scope: $scope, content: vm.contentType, infiniteMode: infiniteMode, - // we need to rebind... the IDs that have been created! - rebindCallback: function (origContentType, savedContentType) { - vm.contentType.ModelState = savedContentType.ModelState; - vm.contentType.id = savedContentType.id; - vm.contentType.groups.forEach(function (group) { - if (!group.name) return; - var k = 0; - while (k < savedContentType.groups.length && savedContentType.groups[k].name != group.name) - k++; - if (k == savedContentType.groups.length) { - group.id = 0; - return; - } - var savedGroup = savedContentType.groups[k]; - if (!group.id) group.id = savedGroup.id; - - group.properties.forEach(function (property) { - if (property.id || !property.alias) return; - k = 0; - while (k < savedGroup.properties.length && savedGroup.properties[k].alias != property.alias) - k++; - if (k == savedGroup.properties.length) { - property.id = 0; - return; - } - var savedProperty = savedGroup.properties[k]; - property.id = savedProperty.id; - }); - }); + rebindCallback: function (_, savedContentType) { + // we need to rebind... the IDs that have been created! + contentTypeHelper.rebindSavedContentType(vm.contentType, savedContentType); } }).then(function (data) { // allow UI to access server validation state diff --git a/src/Umbraco.Web.UI.Client/src/views/mediatypes/edit.controller.js b/src/Umbraco.Web.UI.Client/src/views/mediatypes/edit.controller.js index ecf2aec30c0b..32fac36baaee 100644 --- a/src/Umbraco.Web.UI.Client/src/views/mediatypes/edit.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/mediatypes/edit.controller.js @@ -295,38 +295,9 @@ saveMethod: mediaTypeResource.save, scope: $scope, content: vm.contentType, - // we need to rebind... the IDs that have been created! - rebindCallback: function (origContentType, savedContentType) { - vm.contentType.id = savedContentType.id; - vm.contentType.groups.forEach(function (group) { - if (!group.name) return; - - var k = 0; - while (k < savedContentType.groups.length && savedContentType.groups[k].name != group.name) - k++; - if (k == savedContentType.groups.length) { - group.id = 0; - return; - } - - var savedGroup = savedContentType.groups[k]; - if (!group.id) group.id = savedGroup.id; - - group.properties.forEach(function (property) { - if (property.id || !property.alias) return; - - k = 0; - while (k < savedGroup.properties.length && savedGroup.properties[k].alias != property.alias) - k++; - if (k == savedGroup.properties.length) { - property.id = 0; - return; - } - - var savedProperty = savedGroup.properties[k]; - property.id = savedProperty.id; - }); - }); + rebindCallback: function (_, savedContentType) { + // we need to rebind... the IDs that have been created! + contentTypeHelper.rebindSavedContentType(vm.contentType, savedContentType); } }).then(function (data) { //success diff --git a/src/Umbraco.Web.UI.Client/src/views/membertypes/edit.controller.js b/src/Umbraco.Web.UI.Client/src/views/membertypes/edit.controller.js index 53bb4adb9b99..2eddc71924be 100644 --- a/src/Umbraco.Web.UI.Client/src/views/membertypes/edit.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/membertypes/edit.controller.js @@ -175,11 +175,11 @@ //we are creating so get an empty data type item memberTypeResource.getScaffold(memberTypeId) - .then(function (dt) { - init(dt); + .then(function (dt) { + init(dt); - vm.page.loading = false; - }); + vm.page.loading = false; + }); } else { loadMemberType(); @@ -215,38 +215,9 @@ saveMethod: memberTypeResource.save, scope: $scope, content: vm.contentType, - // we need to rebind... the IDs that have been created! - rebindCallback: function (origContentType, savedContentType) { - vm.contentType.id = savedContentType.id; - vm.contentType.groups.forEach(function (group) { - if (!group.name) return; - - var k = 0; - while (k < savedContentType.groups.length && savedContentType.groups[k].name != group.name) - k++; - if (k == savedContentType.groups.length) { - group.id = 0; - return; - } - - var savedGroup = savedContentType.groups[k]; - if (!group.id) group.id = savedGroup.id; - - group.properties.forEach(function (property) { - if (property.id || !property.alias) return; - - k = 0; - while (k < savedGroup.properties.length && savedGroup.properties[k].alias != property.alias) - k++; - if (k == savedGroup.properties.length) { - property.id = 0; - return; - } - - var savedProperty = savedGroup.properties[k]; - property.id = savedProperty.id; - }); - }); + rebindCallback: function (_, savedContentType) { + // we need to rebind... the IDs that have been created! + contentTypeHelper.rebindSavedContentType(vm.contentType, savedContentType); } }).then(function (data) { //success From 106f6dce25fbf5be2c7fb6de27e47c645b683253 Mon Sep 17 00:00:00 2001 From: Paul Johnson Date: Tue, 5 Oct 2021 13:45:43 +0100 Subject: [PATCH 15/75] Rename parameter for clarity --- .../src/common/resources/entity.resource.js | 6 +++--- src/Umbraco.Web/Editors/EntityController.cs | 13 ++++--------- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/entity.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/entity.resource.js index 1c29a69c2dda..44be85b8fdd9 100644 --- a/src/Umbraco.Web.UI.Client/src/common/resources/entity.resource.js +++ b/src/Umbraco.Web.UI.Client/src/common/resources/entity.resource.js @@ -127,7 +127,7 @@ function entityResource($q, $http, umbRequestHelper) { 'Failed to retrieve url for id:' + id); }, - getUrlsByUdis: function(ids, culture) { + getUrlsByUdis: function(udis, culture) { var query = "culture=" + (culture || ""); return umbRequestHelper.resourcePromise( @@ -137,9 +137,9 @@ function entityResource($q, $http, umbRequestHelper) { "GetUrlsByUdis", query), { - ids: ids + udis: udis }), - 'Failed to retrieve url map for ids ' + ids); + 'Failed to retrieve url map for udis ' + udis); }, getUrlByUdi: function (udi, culture) { diff --git a/src/Umbraco.Web/Editors/EntityController.cs b/src/Umbraco.Web/Editors/EntityController.cs index 66173634185b..0b6273e79da8 100644 --- a/src/Umbraco.Web/Editors/EntityController.cs +++ b/src/Umbraco.Web/Editors/EntityController.cs @@ -238,7 +238,7 @@ public HttpResponseMessage GetUrl(Udi udi, string culture = "*") /// /// Get entity URLs by UDIs /// - /// + /// /// A list of UDIs to lookup items by /// /// The culture to fetch the URL for @@ -248,14 +248,9 @@ public HttpResponseMessage GetUrl(Udi udi, string culture = "*") /// [HttpGet] [HttpPost] - public IDictionary GetUrlsByUdis([FromJsonPath] Udi[] ids, string culture = null) + public IDictionary GetUrlsByUdis([FromJsonPath] Udi[] udis, string culture = null) { - if (ids == null) - { - throw new HttpResponseException(HttpStatusCode.NotFound); - } - - if (ids.Length == 0) + if (udis == null || udis.Length == 0) { return new Dictionary(); } @@ -277,7 +272,7 @@ string MediaOrDocumentUrl(Udi udi) }; } - return ids + return udis .Select(udi => new { Udi = udi, Url = MediaOrDocumentUrl(udi) From ef725bac374ba494642d773114d6b73556c3e877 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Kottal?= Date: Tue, 5 Oct 2021 22:38:58 +0200 Subject: [PATCH 16/75] Removes annoying wait text, which causes layout jank --- .../src/views/dashboard/settings/nucache.html | 5 +-- src/Umbraco.Web.UI/Umbraco/config/lang/cs.xml | 5 ++- src/Umbraco.Web.UI/Umbraco/config/lang/cy.xml | 17 +++++----- src/Umbraco.Web.UI/Umbraco/config/lang/en.xml | 1 - .../Umbraco/config/lang/en_us.xml | 1 - src/Umbraco.Web.UI/Umbraco/config/lang/fr.xml | 3 +- src/Umbraco.Web.UI/Umbraco/config/lang/nl.xml | 1 - src/Umbraco.Web.UI/Umbraco/config/lang/tr.xml | 33 +++++++++---------- 8 files changed, 28 insertions(+), 38 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/dashboard/settings/nucache.html b/src/Umbraco.Web.UI.Client/src/views/dashboard/settings/nucache.html index 0b14e9c3ff6a..fb8aaf39b6a5 100644 --- a/src/Umbraco.Web.UI.Client/src/views/dashboard/settings/nucache.html +++ b/src/Umbraco.Web.UI.Client/src/views/dashboard/settings/nucache.html @@ -1,11 +1,8 @@ 
      -
      +
      -

      - (wait) -

      diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/cs.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/cs.xml index e3bcaf9f30a2..c00d0b25de2e 100644 --- a/src/Umbraco.Web.UI/Umbraco/config/lang/cs.xml +++ b/src/Umbraco.Web.UI/Umbraco/config/lang/cs.xml @@ -337,7 +337,7 @@ Typy dokumentů v části Nastavení změnou možnosti Povolit jako root v části Oprávnění.]]> "typy medií".]]> Vybraná média ve stromu neumožňuje vytváření pod nimi žádná další média. - Upravit oprávnění pro tento typ média + Upravit oprávnění pro tento typ média Typ dokumentu bez šablony Nová složka Nový datový typ @@ -2232,7 +2232,6 @@ Otevřít akce vlastností - Čekejte Stav obnovení Cache paměť @@ -2328,7 +2327,7 @@ Vítejte v přátelském CMS Děkujeme, že jste si vybrali Umbraco - myslíme si, že by to mohl být začátek něčeho krásného. I když se to může zpočátku zdát ohromující, udělali jsme hodně pro to, aby byla křivka učení co nejhladší a nejrychlejší. - + Umbraco formuláře Vytvářejte formuláře pomocí intuitivního rozhraní drag and drop. Od jednoduchých kontaktních formulářů, které odesílají e-maily, až po pokročilé dotazníky, které se integrují do systémů CRM. Vaši klienti to budou milovat! diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/cy.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/cy.xml index ecd4c4a362eb..c30bff5094b3 100644 --- a/src/Umbraco.Web.UI/Umbraco/config/lang/cy.xml +++ b/src/Umbraco.Web.UI/Umbraco/config/lang/cy.xml @@ -103,7 +103,7 @@ Parth '%0%' wedi diweddaru Golygu Parthau Presennol - Etifeddu @@ -1000,7 +1000,7 @@ Mae "Runway" yn wefan syml sy'n darparu mathau o ddogfennau a thempledi syml. Gall y gosodwr osod Runway i chi yn awtomatig, - ond gallwch olygu, estyn neu ei ddileu yn hawdd. Nid yw'n angenrheidiol a gallwch ddefnyddio Umbraco yn berffaith heb. Ond, + ond gallwch olygu, estyn neu ei ddileu yn hawdd. Nid yw'n angenrheidiol a gallwch ddefnyddio Umbraco yn berffaith heb. Ond, mae Runwayyn cynnig sylfaen hawdd wedi'i seilio ar arferion gorau er mwyn i chi gychwyn yn gyflymach nag erioed. Os rydych chi'n dewis gosod Runway, gallwch ddewis blociau adeiliadu syml o'r enw Modylau Runway er mwyn mwyhau eich tudalennau Runway.

      @@ -1187,15 +1187,15 @@ Er mwyn gweinyddu eich gwefan, agorwch swyddfa gefn Umbraco a dechreuwch ychwang @@ -2586,14 +2586,13 @@ Er mwyn gweinyddu eich gwefan, agorwch swyddfa gefn Umbraco a dechreuwch ychwang Cau Gweithredoedd Priodweddau - Aros Adnewyddu statws Cuddstôr Cof @@ -2604,7 +2603,7 @@ Er mwyn gweinyddu eich gwefan, agorwch swyddfa gefn Umbraco a dechreuwch ychwang Gall ailadeiladu fod yn ddrud. - Defnyddio fo pan mae ail-lwytho ddim yn ddigon, a ti'n feddwl mai'r stôr cronfa ddata heb gael ei + Defnyddio fo pan mae ail-lwytho ddim yn ddigon, a ti'n feddwl mai'r stôr cronfa ddata heb gael ei chynhyrchu'n iawn—a fyddai'n arwydd o broblem gritigol efo Umbraco. ]]> diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/en.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/en.xml index 9f8d8acf6eda..b08b251dbc20 100644 --- a/src/Umbraco.Web.UI/Umbraco/config/lang/en.xml +++ b/src/Umbraco.Web.UI/Umbraco/config/lang/en.xml @@ -2384,7 +2384,6 @@ To manage your website, simply open the Umbraco backoffice and start adding cont Close Property Actions - Wait Refresh status Memory Cache 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 7d5c530752f6..a7fe7244bd70 100644 --- a/src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml +++ b/src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml @@ -2414,7 +2414,6 @@ To manage your website, simply open the Umbraco backoffice and start adding cont Close Property Actions - Wait Refresh status Memory Cache diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/fr.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/fr.xml index 0d0feeccf637..30bab94a63d2 100644 --- a/src/Umbraco.Web.UI/Umbraco/config/lang/fr.xml +++ b/src/Umbraco.Web.UI/Umbraco/config/lang/fr.xml @@ -138,7 +138,7 @@ Sauver la mise en page de la liste Planifier Prévisualiser - Prévisualiser + Prévisualiser La prévisualisation est désactivée car aucun modèle n'a été assigné. Choisir un style Afficher les styles @@ -2245,7 +2245,6 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à Ouvrir les Property Actions - Attendez Rafraîchir le Statut Cache Mémoire diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/nl.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/nl.xml index 205444d9b486..83c563d8326d 100644 --- a/src/Umbraco.Web.UI/Umbraco/config/lang/nl.xml +++ b/src/Umbraco.Web.UI/Umbraco/config/lang/nl.xml @@ -2184,7 +2184,6 @@ Echter, Runway biedt een gemakkelijke basis om je snel op weg te helpen. Als je Eigenschapsacties sluiten - Wachten Status vernieuwen Geheugencache diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/tr.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/tr.xml index 518095586879..52bc05bff787 100644 --- a/src/Umbraco.Web.UI/Umbraco/config/lang/tr.xml +++ b/src/Umbraco.Web.UI/Umbraco/config/lang/tr.xml @@ -108,7 +108,7 @@ Devral Kültür - veya kültürü üst düğümlerden devralın. Ayrıca
      + veya kültürü üst düğümlerden devralın. Ayrıca
      aşağıdaki alan da geçerli değilse geçerli düğüme.]]>
      Alanlar @@ -1079,7 +1079,7 @@ Web sitenizi yönetmek için, Umbraco'nun arka ofisini açın ve içerik eklemey - + ]]>
      @@ -1108,17 +1108,17 @@ Web sitenizi yönetmek için, Umbraco'nun arka ofisini açın ve içerik eklemey @@ -1198,7 +1198,7 @@ Web sitenizi yönetmek için, Umbraco'nun arka ofisini açın ve içerik eklemey - + ]]>
      @@ -1825,18 +1825,18 @@ Web sitenizi yönetmek için, Umbraco'nun arka ofisini açın ve içerik eklemey Çevirmen kullanıcısı bulunamadı. Lütfen çeviriye içerik göndermeye başlamadan önce bir çevirmen kullanıcısı oluşturun @@ -2077,7 +2077,7 @@ Web sitenizi yönetmek için, Umbraco'nun arka ofisini açın ve içerik eklemey - + ]]> Davet Et @@ -2399,7 +2399,6 @@ Web sitenizi yönetmek için, Umbraco'nun arka ofisini açın ve içerik eklemey Özellik Eylemlerini Kapat - Bekle Durumu yenile Bellek Önbelleği From 3fcfb1b5462ce1f3cfcc2ee0def54f9735a8e702 Mon Sep 17 00:00:00 2001 From: Owain Jones Date: Tue, 5 Oct 2021 23:34:36 +0100 Subject: [PATCH 17/75] v8: Backoffice Welsh language translation updates (#11240) * Updated the Welsh language file to include newly added keys (based on the en us language file) * Updated the searchInputDescription key * Updated the endTitle key --- src/Umbraco.Web.UI/Umbraco/config/lang/cy.xml | 107 +++++++++++++++++- 1 file changed, 104 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/cy.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/cy.xml index c30bff5094b3..ac280927ac50 100644 --- a/src/Umbraco.Web.UI/Umbraco/config/lang/cy.xml +++ b/src/Umbraco.Web.UI/Umbraco/config/lang/cy.xml @@ -257,6 +257,7 @@ Ystadegau Teitl (dewisol) Testyn amgen (dewisol) + Capsiwn (dewisol) Math Dadgyhoeddi Wedi dadgyhoeddi @@ -309,6 +310,7 @@ Ni ddim yn barod i Gyhoeddi Barod i Gyhoeddi? Barod i Arbed? + Ailosod pwynt canolog Anfonwch am gymeradwyaeth Dewiswch y dyddiad a'r amser i gyhoeddi a / neu anghyhoeddi'r eitem gynnwys. Creu newydd @@ -316,7 +318,7 @@ Mae'r eitem yma yn y Bin Ailgylchu - %0%]]> + Creu Templed Cynnwys newydd o '%0%' Gwag Dewis Templed Cynnwys Templed Cynnwys wedi'i greu @@ -347,6 +349,18 @@ Pob Aelod Nid oes gan grwpiau aelodau unrhyw eiddo ychwanegol ar gyfer golygu. + + Wedi methu copïo'r fath cynnwys + Wedi methu symud y fath cynnwys + + + Wedi methu copïo'r fath cyfrwng + Wedi methu symud y fath cyfrwng + Dewis awtomatig + + + Wedi methu copïo'r fath aelod + Ble hoffwch greu eitem newydd %0% Creu eitem o dan @@ -363,6 +377,16 @@ Nid yw'r cyfryngau a ddewiswyd yn y goeden yn caniatáu i unrhyw gyfryngau eraill gael eu creu oddi tano. Golygu caniatâd ar gyfer y math hwn o gyfryngau Math o Ddogfen heb dempled + Math o Ddogfen efo dempled + Y diffiniad data ar gyfer tudalen gynnwys y gellir ei chreu gan olygyddion yn y goeden gynnwys ac sydd ar gael yn uniongyrchol trwy URL. + Math o Ddogfen + Y diffiniad data ar gyfer cydran gynnwys y gellir ei chreu gan olygyddion yn y goeden gynnwys a'i ddewis ar dudalennau eraill ond nid oes ganddo URL uniongyrchol. + Math o Elfen + Yn diffinio'r sgema ar gyfer set o eiddo ailadroddus, er enghraifft, mewn golygydd eiddo 'Rhestr Bloc' neu 'Cynnwys Amnyth'. + Cyfansoddiad + Yn diffinio set o eiddo, y gellir ei hailddefnyddio, a'i chynnwys yn y diffiniad o sawl Math o Ddogfen arall. Er enghraifft, set o 'Gosodiadau Tudalen Cyffredin'. + Ffolder + Yn cael ei defnyddio i drefnu'r Mathau o Ddogfennau, Cyfansoddiadau a Mathau Elfen a grëir yn y goeden Math o Ddogfen hon. Ffolder newydd Math o ddata newydd Ffeil JavaScript newydd @@ -703,6 +727,7 @@ Clirio Cau Cau Ffenest + Cau Cwarel Sylw Cadarnhau Gorfodi @@ -734,6 +759,7 @@ Cyntaf Canolbwynt Cyffredinol + Generig Grŵpiau Grŵp Uchder @@ -843,6 +869,7 @@ Fideos Clirio Arsefydlu + Avatar am Du @@ -1389,6 +1416,7 @@ Er mwyn gweinyddu eich gwefan, agorwch swyddfa gefn Umbraco a dechreuwch ychwang Wedi cwblhau, bydd eich porwr yn adnewyddu, arhoswch... Cliciwch 'Cwblhau' i orffen y gosodiad ac adnewyddu'r dudalen. Lanlwytho pecyn... + Wedi gwirio i weithio ar Umbraco Cloud Gludo gyda fformatio llawn (Heb ei argymell) @@ -1469,6 +1497,17 @@ Er mwyn gweinyddu eich gwefan, agorwch swyddfa gefn Umbraco a dechreuwch ychwang Rydych wedi dewis eitemau gyfrwng sydd naill ai wedi'u dileu neu yn y bin ailgylchu Eitem wedi'i ddileu Yn sbwriel + Agor mewn Llyfrgell Cyfryngau + Newid Eitem Gyfrwng + Ailosod tocio cyfrwng + Golygu %0% ar %1% + Gwaredu cread? + Ydych chi'n siŵr eich bod chi am ganslo'r cread? + Rydych chi wedi gwneud newidiadau i'r cynnwys hwn. Ydych chi'n siŵr eich bod chi am eu gwaredu? + Dileu? + Dileu pob cyfryngau? + Clipfwrdd + Ni chaniateir Darparwch ddolen allanol @@ -1562,6 +1601,7 @@ Er mwyn gweinyddu eich gwefan, agorwch swyddfa gefn Umbraco a dechreuwch ychwang Rhaid i wallau dilysu gael eu trwsio cyn gall yr eitem gael ei achub Wedi methu Wedi achub + Wedi achub. I weld y newidiadau, ail-lwythwch eich porwr Diffyg hawliau defnyddiwr, ni ellir cwblhau'r gweithred Wedi canslo Gweithred wedi'i ganslo gan ymestyniad 3-ydd parti @@ -1743,9 +1783,11 @@ Er mwyn gweinyddu eich gwefan, agorwch swyddfa gefn Umbraco a dechreuwch ychwang Enw Adran Mae Adran yn ofynnol - + @section, fel arall bydd gwall yn cael ei ddangos. - ]]> + ]]> +
      Adeiladwr ymholiad Adeiladu ymholiad o eitemau wedi dychwelyd, mewn @@ -1797,6 +1839,7 @@ Er mwyn gweinyddu eich gwefan, agorwch swyddfa gefn Umbraco a dechreuwch ychwang Caniateir y cynnwys yma Cliciwch i fewnblannu Cliciwch i fewnosod llun + Cliciwch i fewnosod macro Capsiwn llun... Ysgrifennwch yma... Cynlluniau Grid @@ -1835,6 +1878,7 @@ Er mwyn gweinyddu eich gwefan, agorwch swyddfa gefn Umbraco a dechreuwch ychwang Ychwanegu tab newydd Ychwanegu tab arall Grŵp + Ni allwch symud y grŵp %0% i'r tab hwn oherwydd bydd y grŵp yn cael yr un alias â thab: "%1%". Ail-enwi'r grŵp i barhau. Nid ydych wedi ychwanegu unrhyw grwpiau Ychwanegu grŵp Wedi etifeddu o @@ -1901,6 +1945,16 @@ Er mwyn gweinyddu eich gwefan, agorwch swyddfa gefn Umbraco a dechreuwch ychwang Ni ellir newid math o ddogfen i fath Elfen ar ôl mae'n cael ei defnyddio i greu un neu fwy o eitemau cynnwys. Nid yw hyn yn berthnasol ar gyfer math Elfen Rydych wedi gwneud newidiadau i'r eiddo hwn. Ydych chi'n siŵr eich bod chi am eu taflu? + Ymddangosiad + Label uwchben (lled-llawn) + Ydych chi'n siŵr eich bod chi am ddileu'r tab <strong>%0%</strong>? + Ydych chi'n siŵr eich bod chi am ddileu'r tab grŵp <strong>%0%</strong>? + Ydych chi'n siŵr eich bod chi am ddileu'r eiddo <strong>%0%</strong>? + Bydd hyn hefyd yn dileu'r holl eitemau o dan y tab hwn. + Bydd hyn hefyd yn dileu'r holl eitemau o dan y grŵp hwn. + Ychwanegu tab + Trawsnewid i dab + Llusgwch eiddo yma i'w gosod yn syth ar y tab Ychwanegu iaith @@ -2082,6 +2136,8 @@ Er mwyn gweinyddu eich gwefan, agorwch swyddfa gefn Umbraco a dechreuwch ychwang Newidiwch Eich Cyfrinair Newidiwch lun Cyfrinair newydd + O leiaf %0% nod(au) i fynd! + Dylai fod o leiaf %0% nod(au) arbennig yno. ddim wedi cloi allan Nid yw'r cyfrinair wedi'i newid Cadarnhau cyfrinair newydd @@ -2296,6 +2352,7 @@ Er mwyn gweinyddu eich gwefan, agorwch swyddfa gefn Umbraco a dechreuwch ychwang o eitemau wedi'u dewis Dyddiad annilys Ddim yn rif + Ddim yn faint cam dilys Ebost annilys Ni all y gwerth fod yn null Ni all y gwerth fod yn gwag @@ -2523,9 +2580,19 @@ Er mwyn gweinyddu eich gwefan, agorwch swyddfa gefn Umbraco a dechreuwch ychwang Enw Ychwanegu rhes newydd Gweld mwy o opsiynau + Chwilio'r swyddfa gefn Umbraco + Chwilio am nodau gynnwys, nodau cyfryngau ayyb. ar draws y swyddfa gefn. + Pryd mae canlyniadau awtocyflawni ar gael, gwasgwch y saethau lan a lawr, neu ddefnyddio'r fysell tab ac y fysell enter i ddewis. + Llwybr: + Wedi'i ddarganfod yn Wedi cyfieithu Cyfieithiad ar goll Eitemau geiriadur + Dewis un o'r opsiynau i olygu'r nod + Gwneud gweithred %0% ar y nod %1% + Ychwanegu capsiwn am y llun + Chwilio'r coeden cynnwys + Uchafswm Cyfeiriadau @@ -2574,10 +2641,22 @@ Er mwyn gweinyddu eich gwefan, agorwch swyddfa gefn Umbraco a dechreuwch ychwang Darganfod logiau efo Namespace Darganfod logiau efo Enw Peiriant Agor + Diweddaru + Pob 2 eiliad + Pob 5 eiliad + Pob 10 eiliad + Pob 20 eiliad + Pob 30 eiliad + Diweddaru pob 2e + Diweddaru pob 5e + Diweddaru pob 10e + Diweddaru pob 20e + Diweddaru pob 30e Copi %0% %0% o %1% + Casgliad o %0% Dileu pob eitem Clirio y clipfwrdd @@ -2741,6 +2820,10 @@ Er mwyn gweinyddu eich gwefan, agorwch swyddfa gefn Umbraco a dechreuwch ychwang Rydych chi wedi gwneud newidiadau i'r cynnwys hwn. Wyt ti'n siŵr eich bod chi am eu taflu ei fwrdd? Gwaredu cread? + Gwall! + Nid yw'r Math Elfen y bloc hwn yn bodoli mwyach + Ychwanegu cynnwys + Ychwanegu %0% Priodwedd '%0%' yn defnyddio'r golygydd '%1%' sydd ddim yn cael ei gefnogi mewn blociau. @@ -2760,4 +2843,22 @@ Er mwyn gweinyddu eich gwefan, agorwch swyddfa gefn Umbraco a dechreuwch ychwang Sut ydw i'n rheoli Templedi Gynnwys Gallwch chi olygu a dileu Templedi Gynnwys o'r goeden "Templedi Gynnwys" yn yr adran Gosodiadau. Ehangwch y Math o Ddogfen mae'r Templed Gynnwys yn seiliedig arno a chlicio fo i'w golygu neu ddileu. + + Diweddu + Diwedd modd rhagolwg + Rhagolwg y wefan + Agor y wefan mewn modd rhagolwg + Rhagolwg y wefan? + Rydych chi wedi dod â'r modd rhagolwg i ben, a ydych chi am ei alluogi eto i weld y fersiwn ddiweddaraf o'ch gwefan sydd wedi'i chadw? + Rhagolwg fersiwn ddiweddaraf + Gweld fersiwn cyhoeddedig + Gweld fersiwn cyhoeddedig? + Rydych chi yn y Modd Rhagolwg, a ydych chi eisiau gadael er mwyn gweld fersiwn gyhoeddedig eich gwefan? + Gweld fersiwn cyhoeddedig + Aros mewn modd rhagolwg + + + yr eitem wedi'i dychwelyd + yr eitemau wedi'i dychwelyd + From 7043d1cc0f822e8ae5786ad70d928655f0ad67dd Mon Sep 17 00:00:00 2001 From: BatJan <1932158+BatJan@users.noreply.github.com> Date: Mon, 27 Sep 2021 14:14:36 +0200 Subject: [PATCH 18/75] Use medium sized overlay --- .../components/editor/umbeditorheader.directive.js | 1 + .../src/less/components/umb-color-swatches.less | 10 ++++++++++ .../common/infiniteeditors/iconpicker/iconpicker.html | 4 ++-- .../listview/icon.prevalues.controller.js | 1 + .../listview/layouts.prevalues.controller.js | 1 + 5 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/editor/umbeditorheader.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/editor/umbeditorheader.directive.js index 0ac285c0949a..1b63dde26ceb 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/editor/umbeditorheader.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/editor/umbeditorheader.directive.js @@ -251,6 +251,7 @@ Use this directive to construct a header inside the main editor window. var iconPicker = { icon: scope.icon.split(' ')[0], color: scope.icon.split(' ')[1], + size: "medium", submit: function (model) { if (model.icon) { if (model.color) { diff --git a/src/Umbraco.Web.UI.Client/src/less/components/umb-color-swatches.less b/src/Umbraco.Web.UI.Client/src/less/components/umb-color-swatches.less index bdfc55f648d2..c3af6d4342ed 100644 --- a/src/Umbraco.Web.UI.Client/src/less/components/umb-color-swatches.less +++ b/src/Umbraco.Web.UI.Client/src/less/components/umb-color-swatches.less @@ -22,6 +22,16 @@ box-shadow: 0 1px 3px fade(@black, 12%), 0 1px 2px fade(@black, 24%); } + &.umb-color-box--xs { + width: 27px; + height: 27px; + } + + &.umb-color-box--s { + width: 30px; + height: 30px; + } + &.umb-color-box--m { width: 40px; height: 40px; diff --git a/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/iconpicker/iconpicker.html b/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/iconpicker/iconpicker.html index 41bf92b27e8e..837aa43cc3af 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/iconpicker/iconpicker.html +++ b/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/iconpicker/iconpicker.html @@ -28,12 +28,12 @@
      -
      +
      diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/icon.prevalues.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/icon.prevalues.controller.js index fd5c3dbf1273..4ad2935981ea 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/icon.prevalues.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/icon.prevalues.controller.js @@ -12,6 +12,7 @@ function iconPreValsController($scope, editorService) { var iconPicker = { icon: $scope.icon, color: $scope.color, + size: "medium", submit: function (model) { if (model.icon) { if (model.color) { diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/layouts.prevalues.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/layouts.prevalues.controller.js index acfb11430757..db79c31cfd04 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/layouts.prevalues.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/layouts.prevalues.controller.js @@ -61,6 +61,7 @@ var iconPicker = { icon: layout.icon.split(' ')[0], color: layout.icon.split(' ')[1], + size: "medium", submit: function (model) { if (model.icon) { if (model.color) { From c7f342a6dd26c4bba4e8ce9afd0e1279e3ca03b8 Mon Sep 17 00:00:00 2001 From: Bjarne Fyrstenborg Date: Wed, 1 Sep 2021 22:16:46 +0200 Subject: [PATCH 19/75] Use umb-icon component for icons in content type groups and tabs --- .../contenttype/umb-content-type-group.html | 9 ++++-- .../umb-content-type-property.html | 30 +++++++++---------- .../contenttype/umb-content-type-tab.html | 12 ++++++-- 3 files changed, 30 insertions(+), 21 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/components/contenttype/umb-content-type-group.html b/src/Umbraco.Web.UI.Client/src/views/components/contenttype/umb-content-type-group.html index e75f30d7ebdd..35b3eb73534f 100644 --- a/src/Umbraco.Web.UI.Client/src/views/components/contenttype/umb-content-type-group.html +++ b/src/Umbraco.Web.UI.Client/src/views/components/contenttype/umb-content-type-group.html @@ -3,7 +3,10 @@
      - + +
      - + : {{ vm.group.inheritedFromName }} @@ -52,7 +55,7 @@
      - +
      diff --git a/src/Umbraco.Web.UI.Client/src/views/components/contenttype/umb-content-type-property.html b/src/Umbraco.Web.UI.Client/src/views/components/contenttype/umb-content-type-property.html index 5724aa4e2e4c..8751a4723fe5 100644 --- a/src/Umbraco.Web.UI.Client/src/views/components/contenttype/umb-content-type-property.html +++ b/src/Umbraco.Web.UI.Client/src/views/components/contenttype/umb-content-type-property.html @@ -46,7 +46,7 @@
      - + {{ vm.property.label }} ({{ vm.property.alias }}) @@ -65,32 +65,32 @@
      - * + *
      - +
      - +
      - +
      - +
      - +
      @@ -99,13 +99,13 @@
      - + {{vm.property.contentTypeName}}
      - +
      @@ -119,7 +119,7 @@ - +
      @@ -130,15 +130,15 @@
      -
      -
      @@ -146,4 +146,4 @@
      -
      \ No newline at end of file +
      diff --git a/src/Umbraco.Web.UI.Client/src/views/components/contenttype/umb-content-type-tab.html b/src/Umbraco.Web.UI.Client/src/views/components/contenttype/umb-content-type-tab.html index ada6273217d5..59476f7e26c6 100644 --- a/src/Umbraco.Web.UI.Client/src/views/components/contenttype/umb-content-type-tab.html +++ b/src/Umbraco.Web.UI.Client/src/views/components/contenttype/umb-content-type-tab.html @@ -19,8 +19,14 @@
      - - + + + +
      {{ vm.tab.name }}
      From 828558ac29ed274b6b8f9c1b65cd14e37b81d9ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Kottal?= Date: Sat, 2 Oct 2021 09:23:58 +0200 Subject: [PATCH 20/75] fixes wrong reference to enterSubmitFolder method in ng-keydown --- .../views/common/infiniteeditors/mediapicker/mediapicker.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/mediapicker/mediapicker.html b/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/mediapicker/mediapicker.html index 052bad86f278..46346c7e24bf 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/mediapicker/mediapicker.html +++ b/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/mediapicker/mediapicker.html @@ -90,7 +90,7 @@ class="umb-breadcrumbs__add-ancestor" ng-show="model.showFolderInput" ng-model="model.newFolderName" - ng-keydown="enterSubmitFolder($event)" + ng-keydown="vm.enterSubmitFolder($event)" ng-blur="vm.submitFolder()" focus-when="{{model.showFolderInput}}" />
    • From 8619cfe3efbb27725cf602dcafa8f985e5e1c0c6 Mon Sep 17 00:00:00 2001 From: Patrick de Mooij Date: Mon, 4 Oct 2021 19:44:16 +0200 Subject: [PATCH 21/75] 11251: Don't add default dashboard to url --- .../src/views/common/dashboard.controller.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/common/dashboard.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/dashboard.controller.js index d7d51539568b..439af502735d 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/dashboard.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/common/dashboard.controller.js @@ -50,14 +50,17 @@ function DashboardController($scope, $q, $routeParams, $location, dashboardResou // Check the query parameter for a dashboard alias const dashboardAlias = $location.search()[DASHBOARD_QUERY_PARAM]; const dashboardIndex = $scope.dashboard.tabs.findIndex(tab => tab.alias === dashboardAlias); + const showDefaultDashboard = dashboardIndex === -1; // Set the first dashboard to active if there is no query parameter or we can't find a matching dashboard for the alias - const activeIndex = dashboardIndex !== -1 ? dashboardIndex : 0; + const activeIndex = showDefaultDashboard ? 0 : dashboardIndex; const tab = $scope.dashboard.tabs[activeIndex]; tab.active = true; - $location.search(DASHBOARD_QUERY_PARAM, tab.alias); + if (!showDefaultDashboard) { + $location.search(DASHBOARD_QUERY_PARAM, tab.alias); + } } } From 494bef878b9bd02ad3602739306c5f5b27ecbc46 Mon Sep 17 00:00:00 2001 From: Bjarne Fyrstenborg Date: Tue, 5 Oct 2021 17:29:27 +0200 Subject: [PATCH 22/75] Fix preview of SVG when height and width not are set --- src/Umbraco.Web.UI.Client/src/less/property-editors.less | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/less/property-editors.less b/src/Umbraco.Web.UI.Client/src/less/property-editors.less index bc14fc284098..040ec42c0c37 100644 --- a/src/Umbraco.Web.UI.Client/src/less/property-editors.less +++ b/src/Umbraco.Web.UI.Client/src/less/property-editors.less @@ -621,6 +621,12 @@ justify-content: center; align-items: center; + > a { + display: block; + width: 100%; + height: 100%; + } + img { display: block; max-width: 100%; From f7ea400e5ade7a67d24ddc03d61cb53a468314a7 Mon Sep 17 00:00:00 2001 From: Doug Moore Date: Sun, 10 Oct 2021 20:03:43 -0400 Subject: [PATCH 23/75] =?UTF-8?q?If=20caching=20a=20published=20document,?= =?UTF-8?q?=20make=20sure=20you=20use=20the=20published=20Name=E2=80=A6=20?= =?UTF-8?q?(#11313)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * If caching a published document, make sure you use the published Name. Closes #11074. * Fix case of new node Co-authored-by: Moore, Douglas S --- .../Strings/DefaultUrlSegmentProvider.cs | 8 +- .../PublishedContent/NuCacheRebuildTests.cs | 158 ++++++++++++++++++ src/Umbraco.Tests/Umbraco.Tests.csproj | 1 + 3 files changed, 166 insertions(+), 1 deletion(-) create mode 100644 src/Umbraco.Tests/PublishedContent/NuCacheRebuildTests.cs diff --git a/src/Umbraco.Core/Strings/DefaultUrlSegmentProvider.cs b/src/Umbraco.Core/Strings/DefaultUrlSegmentProvider.cs index a0f8c735486e..b5f7713fd3ed 100644 --- a/src/Umbraco.Core/Strings/DefaultUrlSegmentProvider.cs +++ b/src/Umbraco.Core/Strings/DefaultUrlSegmentProvider.cs @@ -24,7 +24,13 @@ private static string GetUrlSegmentSource(IContentBase content, string culture) if (content.HasProperty(Constants.Conventions.Content.UrlName)) source = (content.GetValue(Constants.Conventions.Content.UrlName, culture) ?? string.Empty).Trim(); if (string.IsNullOrWhiteSpace(source)) - source = content.GetCultureName(culture); + { + // If the name of a node has been updated, but it has not been published, the url should use the published name, not the current node name + // If this node has never been published (GetPublishName is null), use the unpublished name + source = (content is IContent document) && document.Edited && document.GetPublishName(culture) != null + ? document.GetPublishName(culture) + : content.GetCultureName(culture); + } return source; } } diff --git a/src/Umbraco.Tests/PublishedContent/NuCacheRebuildTests.cs b/src/Umbraco.Tests/PublishedContent/NuCacheRebuildTests.cs new file mode 100644 index 000000000000..a13489827eb6 --- /dev/null +++ b/src/Umbraco.Tests/PublishedContent/NuCacheRebuildTests.cs @@ -0,0 +1,158 @@ +using System.Globalization; +using System.Linq; +using Moq; +using NUnit.Framework; +using Umbraco.Core; +using Umbraco.Core.Composing.CompositionExtensions; +using Umbraco.Core.Configuration.UmbracoSettings; +using Umbraco.Core.Services; +using Umbraco.Core.Dictionary; +using Umbraco.Core.Logging; +using Umbraco.Core.Models; +using Umbraco.Core.PropertyEditors; +using Umbraco.Core.Services.Implement; +using Umbraco.Tests.TestHelpers; +using Umbraco.Tests.TestHelpers.Entities; +using Umbraco.Web.Models.ContentEditing; +using Umbraco.Tests.Testing; +using Umbraco.Web.PropertyEditors; + +using Current = Umbraco.Web.Composing.Current; +using Umbraco.Web.PublishedCache; +using Umbraco.Web.PublishedCache.NuCache; +using System; +using Umbraco.Core.Cache; +using Umbraco.Web.Cache; +using Umbraco.Core.Sync; +using static Umbraco.Tests.Cache.DistributedCache.DistributedCacheTests; +using static Umbraco.Tests.Integration.ContentEventsTests; +using Umbraco.Tests.Services; +using Umbraco.Core.Persistence.Repositories.Implement; +using Umbraco.Tests.Testing.Objects.Accessors; +using Umbraco.Core.Persistence.Repositories; +using Umbraco.Core.Models.PublishedContent; +using Umbraco.Core.Configuration; +using Umbraco.Web.PublishedCache.NuCache.DataSource; +using Umbraco.Core.Strings; + +namespace Umbraco.Tests.PublishedContent +{ + [TestFixture] + [UmbracoTest(Database = UmbracoTestOptions.Database.NewSchemaPerTest, PublishedRepositoryEvents = true, WithApplication = true)] + public class NuCacheRebuildTests: TestWithDatabaseBase + { + private IContentTypeService _contentTypeService; + private IContentType _contentType; + + protected override void Initialize() + { + base.Initialize(); + + if (!(PublishedSnapshotService is PublishedSnapshotService)) + { + var options = new PublishedSnapshotServiceOptions { IgnoreLocalDb = true }; + var runtime = Mock.Of(); + PublishedSnapshotService = new PublishedSnapshotService( + options, + null, + runtime, + ServiceContext, + Factory.GetInstance(), + null, + new TestPublishedSnapshotAccessor(), + new TestVariationContextAccessor(), + Mock.Of(), + ScopeProvider, + Factory.GetInstance(), Factory.GetInstance(), Factory.GetInstance(), + DefaultCultureAccessor, + new DatabaseDataSource(new JsonContentNestedDataSerializerFactory()), + new GlobalSettings(), + Factory.GetInstance(), + Factory.GetInstance(), + new UrlSegmentProviderCollection(new[] { new DefaultUrlSegmentProvider() }), + new TestSyncBootStateAccessor(SyncBootState.WarmBoot), + new JsonContentNestedDataSerializerFactory() + ); + } + } + public override void SetUp() + { + base.SetUp(); + ContentRepositoryBase.ThrowOnWarning = true; + } + + public override void TearDown() + { + ContentRepositoryBase.ThrowOnWarning = false; + base.TearDown(); + } + + protected override void Compose() + { + base.Compose(); + + Composition.RegisterUnique(factory => Mock.Of()); + } + [Test] + public void UnpublishedNameChanges() + { + var urlSegmentProvider = new DefaultUrlSegmentProvider(); + + var contentType = MockedContentTypes.CreateTextPageContentType(); + ServiceContext.FileService.SaveTemplate(contentType.DefaultTemplate); + ServiceContext.ContentTypeService.Save(contentType); + + var content = MockedContent.CreateTextpageContent(contentType, "hello", Constants.System.Root); + + ServiceContext.ContentService.SaveAndPublish(content); + var cachedContent = ServiceContext.ContentService.GetById(content.Id); + var segment = urlSegmentProvider.GetUrlSegment(cachedContent); + + // Does a new node work? + + Assert.AreEqual("hello", segment); + + content.Name = "goodbye"; + cachedContent = ServiceContext.ContentService.GetById(content.Id); + segment = urlSegmentProvider.GetUrlSegment(cachedContent); + + // We didn't save anything, so all should still be the same + + Assert.AreEqual("hello", segment); + + ServiceContext.ContentService.Save(content); + cachedContent = ServiceContext.ContentService.GetById(content.Id); + segment = urlSegmentProvider.GetUrlSegment(cachedContent); + + // At this point we have saved the new name, but not published. The url should still be the previous name + + Assert.AreEqual("hello", segment); + + PublishedSnapshotService.Rebuild(); + + cachedContent = ServiceContext.ContentService.GetById(content.Id); + segment = urlSegmentProvider.GetUrlSegment(cachedContent); + + // After a rebuild, the unpublished name should still not be the url. + // This was previously incorrect, per #11074 + + Assert.AreEqual("hello", segment); + + ServiceContext.ContentService.SaveAndPublish(content); + cachedContent = ServiceContext.ContentService.GetById(content.Id); + segment = urlSegmentProvider.GetUrlSegment(cachedContent); + + // The page has now been published, so we should see the new url segment + Assert.AreEqual("goodbye", segment); + + PublishedSnapshotService.Rebuild(); + cachedContent = ServiceContext.ContentService.GetById(content.Id); + segment = urlSegmentProvider.GetUrlSegment(cachedContent); + + // Just double checking that things remain after a rebuild + Assert.AreEqual("goodbye", segment); + + } + + } +} diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index 3f4daa4df2d8..c00c67ca1ce7 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -157,6 +157,7 @@ + From 359181cf114b58e9ff5a19bed3fedc23bc966568 Mon Sep 17 00:00:00 2001 From: Martino Gabrielli <39855999+ZioTino@users.noreply.github.com> Date: Mon, 11 Oct 2021 14:18:47 +0200 Subject: [PATCH 24/75] Added missing Italian translations (#11197) --- src/Umbraco.Web.UI/Umbraco/config/lang/it.xml | 2255 +++++++++++++++-- 1 file changed, 1988 insertions(+), 267 deletions(-) diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/it.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/it.xml index e037998609f2..34dd79ba7e8c 100644 --- a/src/Umbraco.Web.UI/Umbraco/config/lang/it.xml +++ b/src/Umbraco.Web.UI/Umbraco/config/lang/it.xml @@ -8,12 +8,18 @@ Gestisci hostnames Audit Trail Sfoglia + Cambia tipo di documento + Cambia tipo di dato Copia Crea + Esporta Crea pacchetto + Crea gruppo Cancella Disabilita + Modifica impostazioni Svuota il cestino + Abilita Esporta il tipo di documento Importa il tipo di documento Importa il pacchetto @@ -23,41 +29,98 @@ Notifiche Accesso pubblico Pubblica - Aggiorna nodi + Non pubblicare + Aggiorna Ripubblica intero sito + Rimuovi + Rinomina + Ripristina + Imposta i permessi per la pagina %0% + Scegli dove copiare + Scegli dove muovere + nella struttura sottostante + Scegli dove copiare l'oggetto/gli oggetti selezionati + Scegli dove spostare l'oggetto/gli oggetti selezionati + + + Permessi Annulla ultima modifica Invia per la pubblicazione Invia per la traduzione + Crea gruppo Ordina - Invia la pubblicazione Traduci - Annulla pubblicazione Aggiorna - Rimuovi - Ripristina - Crea Content Template - Crea gruppo + Imposta permessi + Sblocca + Crea modello di contenuto + Invia nuovamente l'invito + + + Contenuto + Amministrazione + Struttura + Altro + + + Consenti l'accesso per assegnare gli hostnames + Consenti l'accesso per visualizzare la cronologia di un nodo + Consenti l'accesso per visualizzare un nodo + Consenti l'accesso per cambiare tipo di documento a un nodo + Consenti l'accesso per copiare un nodo + Consenti l'accesso per creare i nodi + Consenti l'accesso per eliminare i nodi + Consenti l'accesso per spostare un nodo + Consenti l'accesso per impostare e cambiare le restrizioni di accesso a un nodo + Consenti l'accesso per pubblicare un nodo + Consenti l'accesso per non pubblicare un nodo + Consenti l'accesso per cambiare i permessi di un nodo + Consenti l'accesso per riportare un nodo a una versione precedente + Consenti l'accesso per inviare un nodo in approvazione prima di pubblicare + Consenti l'accesso per inviare un nodo per la traduzione + Consenti l'accesso per cambiare l'ordinamento dei nodi + Consenti l'accesso per tradurre un nodo + Consenti l'accesso per salvare un nodo + Consenti l'accesso per creare un modello di contenuto + + + Contenuto + Info + Permesso negato. Aggiungi nuovo dominio + rimuovi + Nodo non valido. + + + Lingua Dominio - Hostname non valido Modifica il dominio corrente - - - Visualizzazione per - Contenuto pubblicato - Contenuto salvato + + + + Eredita + Lingua + + oppure eredita la lingua dai nodi padre. Si applicherà anche
      + al nodo corrente, a meno che un dominio sotto non venga applicato.]]> +
      + Domini + Cancella selezione + Seleziona + Fai qualcos'altro Grassetto Cancella rientro paragrafo - Inserisci dal file + Inserisci campo del form Inserisci intestazione grafica Modifica Html Inserisci rientro paragrafo @@ -71,68 +134,265 @@ Elenco numerato Inserisci macro Inserisci immagine + Pubblica e chiudi + Pubblica con discendenti Modifica relazioni + Ritorna alla lista Salva + Salva e chiudi Salva e pubblica + Salva e pianifica Salva e invia per approvazione - Anteprima - - Scegli lo stile - Mostra gli stili - Inserisci tabella - Altre azioni - Pubblica con i discendenti + Salva list view Pianifica - Seleziona - Annulla selezione + Anteprima + Salva e visualizza anteprima + + Scegli stile + Vedi stili + Inserisci tabella + Genera modelli e chiudi + Salva e genera modelli + Indietro + Avanti + Ripristina + Elimina tag + Cancella + Conferma + + Invia + Invia e chiudi + + + Visualizzazione per + Contenuto eliminato + Contenuto non pubblicato + Contenuto non pubblicato per le lingue: %0% + Contenuto pubblicato + Contenuto pubblicato per le lingue: %0% + Contenuto salvato + Contenuto salvato per le lingue: %0% + Contenuto spostato + Contenuto copiato + Contenuto ripristinato + Contenuto inviato per l'approvazione + Contenuto inviato per l'approvazione per le lingue: %0% + Ordina gli elementi figlio eseguito dall'utente + %0% + Copia + Pubblica + Pubblica + Sposta + Salva + Salva + Elimina + Non pubblicare + Non pubblicare + Ripristina + Invia per l'approvazione + Invia per l'approvazione + Ordina + Personalizzato + Cronologia (tutte le varianti) + + + Impossibile creare una cartella sotto genitore con ID %0% + Impossibile creare una cartella sotto genitore con nome %0% + + Impossibile eliminare l'elemento: %0% + Pubblicato Informazioni su questa pagina - Link alternativo - + Alias + (come descriveresti l'immagine via telefono) Links alternativi Clicca per modificare questo elemento Creato da + Autore originale + Aggiornato da Creato il + Tipo di documento Modifica Attivo fino al Ultima pubblicazione - Link ai media + Non ci sono elementi da visualizzare + Non ci sono elementi da visualizzare nella lista. + + Tipo di media + Link ai media Gruppo di membri Ruolo - Tipologia Membro + Tipo di Membro + Non sono state effettuate modifiche Titolo della Pagina + Questo media non ha link + - - Pubblicato + + + + Impossibile ottenere l'URL + + + Pubblica + Pubblicato + Pubblicato (modifiche in sospeso) Stato della pubblicazione + %0% e tutti gli elementi sottostanti, rendendo così il loro contenuto pubblicamente disponibile.]]> + Pubblicato il + Non pubblicato il Rimuovi data + Imposta data Ordinamento dei nodi aggiornato Statistiche Titolo (opzionale) + Testo alternativo (opzionale) + Didascalia (opzionale) Tipo Non pubblicare + Bozza + Non creato Ultima modifica - Rimuovi il file + + Rimuovi file(s) + Clicca qui per rimuovere l'immagine dal media + Clicca qui per rimuovere il file dal media Link al documento - Elementi - Pubblicato - Seleziona da data e l'ora in cui pubblicare/depubblicare il contenuto. - Imposta data - Depubblicato il + Membro del gruppo/i + Non un membro del gruppo/i + Elementi figli + Target + Questo si traduce nella seguente ora sul server: + Cosa significa questo?]]> + Sei sicuro di voler eliminare questo oggetto? + Sei sicuro di voler eliminare tutti gli oggetti? + + + Aggiungi Element Type + Seleziona Element Type + + Immettere un'espressione di angular da valutare rispetto a ciascun elemento per il relativo nome. Utilizza + per visualizzare l'index dell'oggetto + Aggiungi un altro box di testo + Rimuovi questa text box + Root del contenuto + Includi elementi di contenuto non pubblicati. + + + Quali lingue vorresti pubblicare? Tutte le lingue con contenuto vengono salvate! + Quali lingue vorresti pubblicare? + Quali lingue vorresti salvare? + Tutte le lingue con contenuto vengono salvate alla creazione! + Quali lingue vorresti inviare per l'approvazione? + Quali lingue vorresti pianificare? + Seleziona le lingue da non pubblicare. Non pubblicando una lingua obbligatoria annullerai la pubblicazione di tutte le lingue. + Lingue pubblicate + Lingue non pubblicate + Lingue non modificate + Queste lingue non sono state create. + + Tutte le nuove varianti verranno salvate. + Quali varianti vorresti pubblicare? + Scegli quali varianti verranno salvate. + Scegli le varianti da inviare per l'approvazione. + Imposta pubblicazione pianificata... + Seleziona le varianti da non pubblicare. Non pubblicando una lingua obbligatoria annullerai la pubblicazione di tutte le varianti. + Per la pubblicazione sono necessarie le seguenti varianti: + + Non siamo pronti per la pubblicazione + Pronto per la pubblicazione? + Pronto per il salvataggio? + Invia per l'approvazione + Seleziona da data e l'ora in cui pubblicare/non pubblicare il contenuto. + Crea nuovo/a + Incolla dagli appunti + + + + Crea un nuovo modello di contenuto da '%0%' + Vuoto + Seleziona un modello di contenuto + Modello di contenuto creato + + + + + + Clicca per caricare + o clicca qui per scegliere i files + Puoi trascinare i file qui per caricarli. + Impossibile caricare questo file, non ha un tipo di file approvato + + Media root + Impossibile spostare il media + La cartella padre e di destinazione non possono essere le stesse + Impossibile copiare il media + Impossibile creare una cartella sotto l'id padre %0% + Impossibile rinominare la cartella con id %0% + Trascina e rilascia i tuoi file nell'area + + + + Crea un nuovo membro + Tutti i membri + + + + Impossibile copiare il content type + Impossibile spostare il content type + + + Impossibile copiare il media type + Impossibile spostare il media type + Selezione automatica + + + Impossibile copiare il member type Crea un elemento sotto + Seleziona il Document Type per cui vuoi creare un modello di contenuto + Inserisci il nome della cartella Scegli il tipo ed il titolo + Tipi di documento dentro la sezione Impostazioni, modificando Tipi di nodi figlio consentiti sotto Permessi.]]> + Tipi di documento dentro la sezione Impostazioni.]]> + La pagina selezionata nel content tree non permette a nessuna pagina di essere creata sotto di essa. + Modifica permessi per questo tipo di documento + Crea un nuovo tipo di documento + Tipi di documento dentro la sezione Impostazioni, cambiando l'opzione Consenti come root sotto Permessi.]]> + Tipi di documento dentro la sezione Impostazioni, modificando Tipi di nodi figlio consentiti sotto Permessi.]]> + Il media selezionato non consente la creazione di altri media al di sotto di esso. + Modifica permessi per questo tipo di media + Tipo di documento senza template + Tipo di documento con template + + Tipo di documento + + Tipo di elemento + + Composizione + Cartella + Utilizzato per organizzare i tipi di documento, le composizioni e i tipi di elementi creati in questo albero dei tipi di documento. + Nuova cartella + Nuovo tipo di dato + Nuovo file JavaScript + Nuova partial view vuota + Nuova partial view macro + Nuova partial view da snippet + Nuova partial view macro da snippet + Nuova partial view macro (senza macro) + Nuovo foglio di stile + Nuovo foglio di stile per Rich Text Editor @@ -147,59 +407,73 @@ Rimani Scarta le modifiche Hai delle modifiche non salvate - Sei sicuro di voler lasciare questa pagina? - hai delle modifiche non salvate + Sei sicuro di voler lasciare questa pagina? Hai delle modifiche non salvate! + Pubblicando renderai visibli gli oggetti selezionati sul sito. + Non pubblicando rimuoverai gli oggetti selezionati e i loro discendenti dal sito. + Non pubblicando rimuoverai questa pagina e tutti i suoi discendenti dal sito. + Fatto - Elimianto %0% elemento - Elimianto %0% elementi + Eliminato %0% elemento + Eliminati %0% elementi Eliminato %0% su %1% elemento - Eliminato %0% su %1% elementi + Eliminati %0% su %1% elementi Pubblicato %0% elemento - Pubblicato %0% elementi + Pubblicati %0% elementi Pubblicato %0% su %1% elemento - Pubblicato %0% su %1% elementi + Pubblicati %0% su %1% elementi %0% elemento non pubblicato %0% elementi non pubblicati - Elementi non pubblicati - %0% su %1% - Elementi non pubblicati - %0% su %1% + Elementi non pubblicati: %0% su %1% + Elementi non pubblicati: %0% su %1% Spostato %0% elemento - Spsotato %0% elementi + Spostati %0% elementi Spostato %0% su %1% elemento - Spostato %0% su %1% elementi + Spostati %0% su %1% elementi Copiato %0% elemento - Copiato %0% elementi + Copiati %0% elementi Copiato %0% su %1% elemento - Copiato %0% su %1% elementi + Copiati %0% su %1% elementi Titolo del Link Link + Ancora / querystring Nome - Gestione alias Hostnames Chiudi questa finestra - - + Sei sicuro di voler eliminare + Sei sicuro di voler disabilitare + Sei sicuro di voler rimuovere + %0%]]> + %0%]]> Taglia - Modifica elemento Dictionary - Modifica il linguaggio + Modifica elemento del Dizionario + Modifica la lingua + Modifica il media selezionato Inserisci il link locale Inserisci carattere - - + Inserisci intestazione grafica + Inserisci immagine Inserisci link Inserisci macro Inserisci tabella + + Ultima modifica Link + Impostazioni della macro Incolla - Modifica il Permesso per + Modifica i permessi per + Imposta i permessi per + Imposta i permessi per %0% per il gruppo di utenti %1% + Seleziona i gruppi di utenti per il quale vuoi impostare i permessi @@ -215,13 +489,117 @@ Seleziona elemento Visualizza gli elementi in cache + Relaziona con l'originale + Includi discendenti + + Link alla pagina + Apre il documento linkato in una nuova finestra o tab + Link al media + Seleziona il nodo di inizio per il contenuto + Seleziona media + Seleziona tipo di media + Seleziona icona + Seleziona oggetto + Seleziona link + Seleziona macro Seleziona contenuto + Seleziona tipo di contenuto + Seleziona il nodo di inizio per i media + Seleziona membro + Seleziona gruppo di membri + Seleziona tipo di membri + Seleziona nodo + Seleziona sezioni + Seleziona utente + Seleziona utenti + Non sono state trovate icone + Non ci sono parametri per questa macro + Non ci sono macro disponibili da inserire + Provider di accesso esterni + Exception Details + Stacktrace + Inner Exception + Linka il tuo + Togli il link al tuo + account + Seleziona editor + Seleziona configurazione + Seleziona snippet + + %0%.]]> + %0% dal gruppo %1%]]> + Si, rimuovi + + + Non ci sono oggetti nel Dizionario. - - + %0%' qui sotto.]]> + Nome della cultura + + Panoramica del Dizionario + + + Searchers configurati + + Valori del campo + Stato di salute + + Indexers + Index info + + Gestisci gli indexes di Examine + Permette di visualizzare i dettagli di ogni index e fornisce alcuni strumenti per gestire gli index + Ricostruisci index + + + A seconda della quantità di contenuti presenti nel tuo sito, potrebbe volerci un po' di tempo.
      + Non è consigliabile ricostruire un indice durante i periodi di elevato traffico del sito Web o quando gli editor modificano i contenuti. + ]]> +
      + Searchers + Cerca nell'index e visualizza i risultati + Strumenti + Strumenti per gestire l'index + Campi + + + + IIndexPopulator + + + Inserisci il tuo username + Inserisci la tua password + Conferma la tua password + Dai un nome a %0%... + Inserisci un nome... + Inserisci un email... + Inserisci un username... + Etichetta... + Inserisci una descrizione... + Cerca... + Filtra... + Scrivi per aggiungere tags (premi invio dopo ogni tag)... + Inserisci la tua email + Inserisci un messaggio... + + #value oppure ?key=value + Inserisci un alias... + Sto generando l'alias... + Crea oggetto + Modifica + Nome + Crea una list view custom + Rimuovi la list view custom + + + + Rinominato + Inserisci qui il nuovo nome della cartella + @@ -235,6 +613,15 @@ Fogli di stile collegati Visualizza etichetta Larghezza e altezza + + + Si, elimina + + Seleziona la cartella da spostare + nella struttura sottostante + + %0% eliminerà le proprietà e i dati dagli oggetti seguenti]]> + @@ -250,9 +637,12 @@ + + + Errore durante il caricamento di una Partial View script (file: %0%) @@ -261,35 +651,47 @@ - Questa proprietà non è valida + + Opzioni Info Azione + Azioni Aggiungi Alias + Tutti + Indietro + Torna alla panoramica Bordo o Annulla Scegli + Pulisci Chiudi Chiudi la finestra + Chiudi il pannello Commento Conferma - Blocca le proporzioni + Vincola + Vincola le proporzioni + Contenuto Continua Copia Crea - Base di dati + Selezione di ritaglio + Database Data Default Elimina Eliminato - Elimina... + Eliminazione... Design + Dizionario Dimensioni + Scarta Scarica Modifica @@ -297,54 +699,87 @@ Elementi Email Errore + Campo Trova - Cartella + Primo + Punto focale + Generale + Gruppi + Gruppo Altezza Guida + Nascondi + Cronologia Icona + Id Importa + Includi le sottocartelle nella ricerca + Cerca solo in questa cartella + Info Inserisci Installa + Non valido Giustificato + Etichetta Lingua + Ultimo Layout + Links Caricamento Bloccato Login Log off Logout Macro + Obbligatorio + Messaggio Sposta Nome Nuovo Successivo No di + Off Ok Apri + On o + Ordina per Password Percorso Precedente - + Ricompila + Cestino + + Ricarica Rimangono + Rimuovi Rinomina Rinnova + Obbligatorio + Recupera Riprova Permessi + Pubblicazione programmata Cerca + Spiacenti, non riusciamo a trovare quello che stai cercando. + Server + Impostazioni Mostra Mostra la pagina inviata Dimensione Ordina + Stato Conferma + Riuscito Tipo Digita per cercare... + sotto Su Aggiorna Aggiornamento @@ -357,20 +792,50 @@ Benvenuto... Larghezza Si + Cartella + Risultati di ricerca Riordina - Ho finito di ordinare - Richiesto - Contenuti - Azioni - Cerca solo in questa cartella - Pianifica pubblicazione - selezionato - Annulla + Ho finito di riordinare + Anteprima Cambia password - Cronologia - Generale - Rimuovi - Gruppi + a + Vista lista + Salvataggio... + corrente + Incorpora + selezionato + Altro + Articoli + Video + Installazione + Avatar per + + + Blu + + + Aggiungi gruppo + + Aggiungi editor + Aggiungi template + Aggiungi nodo figlio + Aggiungi figlio + Modifica tipo di dato + Naviga tra le sezioni + Scorciatoie + vedi scorciatoie + Attiva/disattiva vista lista + Attiva/disattiva consenti come root + Commenta/Non commentare righe + Rimuovi riga + Copia linee sopra + Copia linee sotto + Sposta linee in su + + Generale + Editor + Attiva/disattiva consenti varianti lingua + Attiva/disattiva la segmentazione Colore di sfondo @@ -383,50 +848,98 @@ Pagina - + - installa per installare il database Umbraco %0% ]]> + + installa per installare il database Umbraco %0% + ]]> + Avanti per proseguire.]]> Database non trovato! Perfavore, controlla che le informazioni della stringa di connessione nel file "web.config" siano corrette.

      -

      Per procedere, edita il file "web.config" (utilizzando Visual Studio o l'editor di testo che preferisci), scorri in basso, aggiungi la stringa di connessione per il database chiamato "umbracoDbDSN" e salva il file.

      Clicca il tasto riprova quando hai finito.
      Maggiori dettagli per la modifica del file web.config qui.

      ]]> +

      Per procedere, modifica il file "web.config" (utilizzando Visual Studio o l'editor di testo che preferisci), scorri in basso, aggiungi la stringa di connessione per il database nel parametro chiamato "umbracoDbDSN" e salva il file.

      +

      + Clicca il tasto riprova quando hai + finito.
      + Maggiori dettagli per la modifica del file web.config qui.

      ]]> +
      + + + Se è necessario contatta il tuo ISP per reperire le informazioni necessarie. + Se stai effettuando l'installazione in locale o su un server, puoi richiederle al tuo amministratore di sistema.]]> + + + + Premi il tasto aggiorna per aggiornare il database ad Umbraco %0%

      +

      + Non preoccuparti, il contenuto non verrà perso e tutto continuerà a funzionare dopo l'aggiornamento! +

      + ]]> +
      + + Premi il tasto Avanti per + continuare. ]]> - - Premi il tasto aggiorna per aggiornare il database ad Umbraco %0%

      Non preoccuparti, il contenuto non verrà perso e tutto continuerà a funzionare dopo l'aggiornamento!

      ]]>
      - Premi il tasto Avanti per continuare.]]> - Avanti per continuare la configurazione.]]> + Avanti per continuare la configurazione.]]> La password predefinita per l'utente di default deve essere cambiata!]]> L'utente di default è stato disabilitato o non ha accesso ad Umbraco!

      Non è necessario eseguire altre operazioni. Clicca il tasto Avanti per continuare.]]> - La password è stata modificata con successo

      Non è necessario eseguire altre operazioni. Clicca il tasto Avanti per continuare.]]> + La password dell'utente di default è stata modificata con successo

      Non è necessario eseguire altre operazioni. Clicca il tasto Avanti per continuare.]]> - + - Le impostazioni dei permessi sono perfette!

      Puoi eseguire Umbraco senza problemi, ma potresti non poter installare i pacchetti che sono consigliati per sfruttare tutti i vantaggi offerti da Umbraco.]]>
      + + La configurazione dei permessi è quasi perfetta!

      + Puoi eseguire Umbraco senza problemi, ma non sarai in grado di installare i pacchetti che sono consigliati per sfruttare a pieno le potenzialità di Umbraco.]]> +
      video tutorial su come impostare i permessi delle cartelle per Umbraco o leggi la versione testuale.]]> - Le impostazioni dei permessi potrebbero avere dei problemi!

      Puoi eseguire Umbraco, ma potresti non essere in grado di creare cartelle o installare pacchetti che sono raccomandati per sfruttare tutti i vantaggi di Umbraco.]]>
      - Le impostazioni dei permessi non sono corrette per Umbraco!

      Per eseguire Umbraco, devi aggiornare le impostazioni dei permessi.]]>
      - La configurazione dei permessi è perfetta!

      Sei pronto per avviare Umbraco e installare i pacchetti!]]>
      - + + Le impostazioni dei permessi potrebbero avere dei problemi! +

      + Puoi eseguire Umbraco senza problemi, ma non sarai in grado di creare cartelle o installare pacchetti che sono consigliati per sfruttare a pieno le potenzialità di Umbraco.]]> +
      + + Le impostazioni dei permessi non sono corrette per Umbraco! +

      + Per eseguire Umbraco, devi aggiornare le impostazioni dei permessi.]]> +
      + + La configurazione dei permessi è perfetta!

      + Sei pronto per avviare Umbraco e installare i pacchetti!]]> +
      + - + + + - Guarda come) Puoi anche installare eventuali Runway in un secondo momento. Vai nella sezione Developer e scegli Pacchetti.]]> + + Guarda come) + Puoi anche installare eventuali Runway in un secondo momento. Vai nella sezione Developer e scegli Pacchetti. + ]]> + - Runway è installato + - Questa è la lista dei nostri moduli raccomandati, seleziona quali vorresti installare, o vedi l'intera lista di moduli - ]]> + Hai le basi. Seleziona quali moduli vorresti installare.
      + Questa è la lista dei nostri moduli raccomandati, seleziona quali vorresti installare, o vedi l'intera lista di moduli + ]]>
      Raccommandato solo per utenti esperti Vorrei iniziare da un sito semplice @@ -444,12 +957,12 @@ ]]> - Cosa è Runway + Passo 1/5 Accettazione licenza Passo 2/5: Configurazione database Passo 3/5: Controllo permessi dei file Passo 4/5: Controllo impostazioni sicurezza - Passo 5/5: Umbraco è pronto per iniziare + Grazie per aver scelto Umbraco Naviga per il tuo nuovo sito

    @@ -460,8 +973,14 @@ Hai installato Runway, quindi perché non dare uno sguardo al vostro nuovo sito Fatti aiutare dalla nostra community, consulta la documentazione o guarda alcuni video gratuiti su come costruire un semplice sito web, come usare i pacchetti e una guida rapida alla terminologia Umbraco]]> - /web.config e aggiornare la chiave AppSetting UmbracoConfigurationStatus impostando il valore '%0%'.]]> - iniziare immediatamente cliccando sul bottone "Avvia Umbraco".
    Se sei nuovo a Umbraco, si possono trovare un sacco di risorse sulle nostre pagine Getting Started.]]>
    + + /web.config e aggiornare la chiave AppSetting UmbracoConfigurationStatus impostando il valore '%0%'.]]> + + + iniziare immediatamente cliccando sul bottone "Avvia Umbraco".
    Se sei nuovo su Umbraco, + si possono trovare un sacco di risorse sulle nostre pagine Getting Started.]]> +
    Avvia Umbraco
Per gestire il tuo sito web, è sufficiente aprire il backoffice di Umbraco e iniziare ad aggiungere i contenuti, aggiornando i modelli e i fogli di stile o aggiungere nuove funzionalità]]> @@ -471,7 +990,7 @@ Per gestire il tuo sito web, è sufficiente aprire il backoffice di Umbraco e in Umbraco Versione 4 Guarda - Umbraco %0% per una nuova installazione o per l'aggiornamento dalla versione 3.0. + Umbraco %0% per una nuova installazione o per l'aggiornamento dalla versione 3.0.

Clicca "avanti" per avviare la procedura.]]>
@@ -481,23 +1000,114 @@ Per gestire il tuo sito web, è sufficiente aprire il backoffice di Umbraco e in Nome cultura - + Riconnetti adesso per salvare il tuo lavoro + + + + + + + + Fai il login qui sotto + Fai il login con + Sessione scaduta © 2001 - %0%
umbraco.com

]]>
- Buona domenica - Buon lunedì - Buon martedì - Buon mercoledì - Buon giovedì - Buon venerdì - Buon sabato + Password dimenticata? + + Mostra password Nascondi password - Password dimenticata? - Una email verrà inviata all'indirizzo specificato con un link per il reset della password Ritorna alla finestra di login + Inserisci una nuova password + + + Umbraco: Reset Password + + + + + + + + + + + + +
+ + + + + +
+ +
+ +
+
+ + + + + + +
+
+
+ + + + +
+ + + + +
+

+ Reset della password richiesto +

+

+ Il tuo username per effettuare l'accesso al backoffice di Umbraco è: %0% +

+

+ + + + + + +
+ + Clicca questo link per resettare la password + +
+

+

Se non riesci a cliccare sul link, copia e incolla questo URL nella finestra del browser:

+ + + + +
+ + %1% + +
+

+
+
+


+
+
+ + + ]]> +
Dashboard @@ -506,85 +1116,194 @@ Per gestire il tuo sito web, è sufficiente aprire il backoffice di Umbraco e in Scegli la pagina sopra... - + Seleziona dove il documento %0% deve essere copiato Seleziona dove il documento %0% deve essere spostato - + - + + - + %0%]]> + Impostazioni di notifica salvate per + Sono state modificate le lingue seguenti %0% - Salve %0%

- -

Questa è un'email automatica per informare che l'azione '%1%' - è stata eseguita sulla pagina '%2%' - dall'utente '%3%' -

- -

-

Riepilogo aggiornamento:

- - %6% + + + + + + + +
+ + +
+ + + + + +
+ +
+ +
+
-

- - - -

Buona giornata!

- Grazie da Umbraco -

]]> + + + + + + +
+
+
+ + + + +
+ + + + +
+

+ Ciao %0%, +

+

+ Questa è un'email automatica per informare che l'azione '%1%' è stata eseguita sulla pagina '%2%' dall'utente '%3%' +

+ + + + + + +
+ +
+ MODIFICA
+
+

+

Riepilogo dell'aggiornamento:

+ %6% +

+

+ Buona giornata!

+ Saluti dal robot di Umbraco +

+
+
+


+
+
+ + + ]]>
- [%0%] Notifica per %1% eseguita su %2% + + Sono state modificate le seguenti lingue:

+ %0% + ]]>
+ [%0%] Notifica per %1% eseguito su %2% Notifiche + Azioni + Creati + Crea pacchetto e selezionando il pacchetto. I pacchetti Umbraco generalmente hanno l'estensione ".umb" o ".zip". ]]> + + Trascina qui caricare + Includi tutti i figli + o clicca qui per scegliere il file del pacchetto + Carica pacchetto + Installa un pacchetto locale dalla tua macchina. Installa solamente pacchetti di cui ti fidi e ne conosci la provenienza + Carica un altro pacchetto + Cancella e carica un altro pacchetto + Accetto + termini di servizio + Percorso del file + Percorso assoluto del file (es: /bin/umbraco.bin) + Installati + Pacchetti installati + Installa localmente + Termina + Questo pacchetto non ha una vista di configurazione + Non sono ancora stati creati pacchetti + Non hai installato nessun pacchetto + 'Pacchetti' in alto a destra del tuo schermo]]> + Azioni del pacchetto + + Contenuto del pacchetto + Files del pacchetto + + Installa pacchetto + Licenza + URL della licenza + + Cerca un pacchetto... + Risultati per + Non abbiamo trovato niente per + Per favore prova a cercare un altro pacchetto oppure cerca tra le categorie + Popolari + Nuove uscite + ha + punti karma + Informazioni + Proprietario + Contributori + Creato + Versione corrente + Versione .NET + Downloads + Likes + + + Sorgenti esterne Autore Documentazione - Meta dati pacchetto + Meta dati del pacchetto Nome del pacchetto - Il pacchetto non contiene tutti gli elementi + Il pacchetto non contiene nessun elemento
- E' possibile rimuovere questo pacchetto dal sistema cliccando "rimuovi pacchetto" in basso.]]> + È possibile rimuovere questo pacchetto dal sistema cliccando "rimuovi pacchetto" in basso.]]>
- Opzioni pacchetto + Opzioni del pacchetto Pacchetto leggimi - Pacchetto repository + Repository del pacchetto Conferma eliminazione @@ -595,6 +1314,18 @@ Per gestire il tuo sito web, è sufficiente aprire il backoffice di Umbraco e in perciò disinstalla con cautela. In caso di dubbio contattare l'autore del pacchetto.]]> Versione del pacchetto + Aggiornamento dalla versione + + + Sto disinstallando... + Sto scaricando... + Sto importando... + Sto installando... + Sto riavviando, per favore aspetta... + + Per favore clicca 'Completa' per completare l'installazione e ricaricare la pagina. + Sto effettuando l'upload del pacchetto... + Verificato il funzionamento su Umbraco Cloud @@ -603,52 +1334,120 @@ Per gestire il tuo sito web, è sufficiente aprire il backoffice di Umbraco e in - - usando i gruppi di membri di Umbraco.]]> - Devi creare un gruppo di membri prima di utilizzare l'autenticazione basata sui ruoli + + + Devi creare un gruppo di membri prima di utilizzare l'autenticazione basata sui gruppi - - - + %0%]]> + %0% è ora protetta]]> + %0%]]> - - - - - - - - + + + %0%?]]> + + %0%]]> + %0%]]> + Protezione specifica per membri + Se vuoi controllare gli accessi per membri specifici + - - - - - + Permessi insufficienti per pubblicare tutti i discendenti + + + + + + + + + + + + + + + + + + + + + Pubblicazione in corso, aspetta... + %0% di %1% pagine sono state pubblicate... - - - ok per pubblicare %0% e rendere questo contenuto accessibile al pubblico.

Puoi pubblicare questa pagina e tutte le sue sottopagine selezionando pubblica tutti i figli qui sotto.]]>
+ %0% e le relative sottopagine sono state pubblicate + Pubblica %0% e tutte le sue sottopagine + + Pubblica per pubblicare %0% e quindi rendere visibile pubblicamente il suo contenuto.

+ Puoi pubblicare questa pagina e tutte le sue sottopagine spuntando Includi le sottopagine non pubblicate sotto. + ]]> +
+ + + Non hai configurato nessun colore + + + Puoi selezionare solo oggetti di tipo: %0% + Hai selezionato un elemento eliminato o nel cestino + + + + Elemento eliminato + Hai selezionato un media eliminato o nel cestino + + Eliminato + Apri nella libreria dei media + Cambia media + Resetta i tagli del media + Modifica %0% su %1% + Scartare la creazione? + + Hai fatto delle modifiche a questo contenuto. Sei sicuro di volerle scartare? + Rimuovere? + Rimuovere tutti i media? + Appunti + Non permesso - - - + + - - - - + Link - + inserisci la didascalia da visualizzare + Inserisci il link + + + Resetta tagio + Salva taglio + Aggiungi nuovo taglio + Fatto + Annulla modifiche + Definite dall'utente + Modifiche + Creato + Seleziona una versione da confrontare con la versione corrente Il testo in rosso non verrà mostrato nella versione selezionata, quello in verde verrà aggiunto]]> - + @@ -656,31 +1455,37 @@ Per gestire il tuo sito web, è sufficiente aprire il backoffice di Umbraco e in - Concierge Contenuto - Courier - Sviluppo - Configurazione guidata Umbraco + Forms Media Membri - Newsletters + Pacchetti Impostazioni - Statistiche Traduzione Utenti + + Tours + I migliori video tutorial su Umbraco + Visita our.umbraco.com + Visita umbraco.tv + - Tipo di contenuto master abilitato - Questo tipo di contenuto usa - + Tipo Foglio di stile + Script Tab Titolo tab Tabs + Tipo di contenuto Master abilitato + Questo tipo di contenuto usa + + Crea un template corrispondente + Aggiungi icona Ordinamento @@ -688,70 +1493,202 @@ Per gestire il tuo sito web, è sufficiente aprire il backoffice di Umbraco e in + Questo elemento non ha elementi figlio da ordinare - - - - Tipo di dati: %1%]]> - + Validazione + Gli errori di validazione devono essere sistemati prima che l'elemento possa essere salvato + Fallita + Salvato + Salvato. Per vedere le modifiche appena salvate ricarica la pagina + + Cancellato + + + + Tipo di dato: %1%]]> + Tipo di documento salvato Tab creata Tab eliminata Tab con id: %0% eliminata - Contenuto non pubblicare Tipo di dato salvato - - - + + %0% documenti pubblicati e visibili sul sito web + %0% pubblicati e visibili sul sito web + %0% documenti pubblicati per le lingue %1% e visibili sul sito web + Contenuto salvato - - - + + %0% salvata + + Le modifiche sono state inviate per l'approvazione + %0% modifiche sono state inviate per l'approvazione + Media salvato + Media salvato senza nessun errore + Membro salvato + Gruppo di Membri salvato - Tipo utente salvato + Tipo di utente salvato + Gruppo di utenti salvato + Hostnames salvati + Errore durante il salvataggio degli hostnames - + + Tipo di Media salvato + Tipo di Membro salvato + Gruppo di Membri salvato + Template non salvato + Per favore controlla di non avere due templates con lo stesso alias + Template salvato + Template salvato con successo! + Contenuto non pubblicato + Variazione di contenuto %0% non pubblicata + Partial view salvata Partial view salvata senza errori! Partial view non salvata Errore durante il salvataggio del file. - - - - + Permessi salvati per + Eliminati %0% gruppi di utenti + + Abilitati %0% utenti + Disabilitati %0% utenti + + + I gruppi di utenti sono stati assegnati + Sono stati sbloccati %0% utenti + + + + + Invita utenti + + + Validazione fallita per la lingua '%0%' + + + + + + + - + Aggiungi stile + Modifica stile + Stili del Rich text editor + Definisci gli stili che dovranno essere disponibili nel Rich text editor per questo foglio di stile Anteprima - Stili + + Selettore + + Stili + + Codice + Rich Text Editor - - - - - - + Impossibile eliminare il template con ID %0% + Modifica template + Sezioni + Inserisci area di contenuto + Inserisci segnaposto per l'area di contenuto + Inserisci + Scegli cosa inserire nel tuo template + Elementi del dizionario + + Macro + + + Valore + Visualizza il valore di un campo nominato dalla pagina corrente, con delle opzioni per modificare il valore o impostare il valore di fallback. + Partial view + + Master template - + No master + Renderizza template figli + + @RenderBody(). + ]]> + + Definisci una sezione nominata + + @section { ... }. Questa potrà poi essere renderizzata in una + specifica area del padre di questo template, usando @RenderSection. + ]]> + + Renderizza una sezione nominata + + @RenderSection(name). + Questo renderizzerà un'area di un template figlio avvolta nel corrispondente @section [name]{ ... } definition. + ]]> + + Nome della sezione + + + @section, altrimenti verrà visualizzato un errore. + ]]> + + Generatore di query + oggetti trovati, in + copia negli appunti + Voglio + tutti i contenuti + contenuti di tipo "%0%" + da + il mio sito web + dove + e + + + prima + prima (comprese le date selezionate) + dopo + dopo (comprese le date selezionate) + + + contiene + non contiene + maggiore di + maggiore di o uguale a + minore di + minore di o uguale a + Id + Nome + Data di creazione + Ultima data di aggiornamento + ordina per + ascendente + discendente Template - Data creazione Immagine @@ -761,21 +1698,25 @@ Per gestire il tuo sito web, è sufficiente aprire il backoffice di Umbraco e in Aggiungi una riga Aggiungi contenuto Elimina contenuto - Impostazioni applicati - Questo contenuto non è consentito qui - Questo contenuto è consentito qui + Impostazioni applicate + + Clicca per incorporare - Clicca per inserire l'immagine + Clicca per inserire un immagine + Clicca per inserire una macro Didascalia dell'immagine... Scrivi qui... I Grid Layout - I layout sono l'area globale di lavoro per il grid editor, di solito ti serve solo uno o due layout differenti + I layout sono l'area globale di lavoro per il grid editor, di solito ti servono solamente uno o due layout differenti Aggiungi un Grid Layout + Modifica il Grid Layout Sistema il layout impostando la larghezza della colonna ed aggiungendo ulteriori sezioni Configurazioni della riga Le righe sono le colonne predefinite disposte orizzontalmente Aggiungi configurazione della riga + Modifica configurazione della riga Sistema la riga impostando la larghezza della colonna ed aggiungendo ulteriori colonne + Nessuna ulteriore configurazione disponibile Colonne Totale combinazioni delle colonne nel grid layout Impostazioni @@ -784,44 +1725,163 @@ Per gestire il tuo sito web, è sufficiente aprire il backoffice di Umbraco e in Configura i stili che possono essere cambiati dai editori Permetti tutti i editor Permetti tutte le configurazioni della riga + Oggetti massimi + Lascia vuoto o imposta a 0 per illimitati + Imposta come predefinito + Scegli aggiuntivi + Scegli predefinito + sono stati aggiunti + Attenzione + Stai eliminando le configurazioni della riga + + Eliminando un nome della configurazione della riga perderai i dati associati a qualsiasi contenuto basato su questa configurazione. + + + + Composizioni + Gruppi + Non hai aggiunto nessun gruppo + Aggiungi gruppo + Ereditato da + + Etichetta richiesta + Abilita la vista lista + Configura l'oggetto per visualizzare una lista dei suoi figli, ordinabili e ricercabili. I figli non saranno visualizzati nell'albero dei contenuti + Templates abilitati + Scegli che templates sono abilitati all'utilizzo per i contenuti di questo tipo. + Consenti come nodo root + Consenti agli editori la creazione di questo tipo di contenuto a livello root. + Tipi di nodi figlio consentiti + Consenti la creazione di contenuti con i tipi specificati sotto il contenuto di questo tipo. + Scegli nodo figlio + + + Non ci sono tipi di contenuto utilizzabili come composizione. + + Crea nuovo + Usa esistente + Impostazioni dell'editor + Configurazioni disponibili + Crea una nuova configurazione + Configurazione + Si, elimina + + + Seleziona la cartella da spostare + Seleziona la cartella da copiare + nella struttura sottostante + Tutti i tipo di documento + Tutti i documenti + Tutti i media + che usano questo tipo di documento verranno eliminati permanentemente, sei sicuro di voler eliminare anche questi? + che usano questo tipo di media verranno eliminati permanentemente, sei sicuro di voler eliminare anche questi? + che usano questo tipo di membro verranno eliminati permanentemente, sei sicuro di voler eliminare anche questi? + e tutti i documenti che usano questo tipo + e tutti i media che usano questo tipo + e tutti i membri che usano questo tipo + + Abilita il membro alla modifica di questo valore dalla pagina del suo profilo. + Dati sensibili + + Visualizza sul profilo del membro + Permette a questo valore di essere visualizzato sulla pagina del profilo del membro + la scheda non ha un ordine + + + Consenti variazioni + Consenti variazioni in base alla lingua + Consenti segmentazione + Varia in base alla cultura + Varia per segmenti + Consenti agli editors la creazione di contenuto di questo tipo in lingue differenti. + Consenti agli editors la creazione di contenuto in diverse lingue. + Consenti agli editors la creazione di segmenti per questo contenuto. + Consenti variazioni in base alla lingua + Consenti segmentazione + Tipo di elemento + + + + + + Aspetto + Etichetta sopra (larghezza intera) + + + Aggiungi lingua + Lingua obbligatoria + + Lingua di default + + Il cambio della lingua predefinita potrebbe comportare la mancanza di contenuti predefiniti. + Ripiega a + Nessuna lingua alternativa + + Lingua alternativa + nessuna + + + Aggiungi parametro + Modifica parametro + Inserisci il nome della macro + Parametri + Definisci i parametri che dovranno essere disponibili utilizzando questa macro. + Seleziona il file partial view per la macro + + + Compilazione modelli in corso... + + Modelli generati + Impossibile generare i modelli + La generazione dei modelli non è andata a buon fine, consulta i log di Umbraco - - + Aggiungi campo alternativo + Campo alternativo + Aggiungi valore predefinito + Valore predefinito + Campo alternativo + Valore predefinito + Codifica Scegli il campo Converte le interruzioni di linea - + Si, converti le interruzioni di linea + Campi Personalizzati - + Solo data + Formato e codifica + Formatta il valore in data, o in data e ora, secondo la cultura corrente - + Minuscolo + Modifica output Nessuno + Esempio di output - + Ricorsivo - - + Si, rendilo ricorsivo + Separatore Campi Standard Maiuscolo - + Data e ora - Dettagli - Scarica xml DTD + Dettagli di traduzione + Scarica XML DTD Campi Includi le sottopagine - + @@ -849,6 +1909,9 @@ Per gestire il tuo sito web, è sufficiente aprire il backoffice di Umbraco e in + Contenuti + Modelli di contenuto + Media Cache Browser Cestino Pacchetti creati @@ -864,10 +1927,13 @@ Per gestire il tuo sito web, è sufficiente aprire il backoffice di Umbraco e in Membri Gruppi di Membri Ruoli - Tipologia Membri + Tipi di membro Tipi di documento + Tipi di relazione Pacchetti Pacchetti + Partial Views + Macro Partial Views Installa dal repository Installa Runway Moduli Runway @@ -875,84 +1941,739 @@ Per gestire il tuo sito web, è sufficiente aprire il backoffice di Umbraco e in Scripts Fogli di stile Templates - Permessi Utente - Tipi di Utente + Logs Utenti - Contenuti + Impostazioni + Templating + Terze parti - - + + + Accesso + Basandosi sui gruppi assegnati e sui nodi di partenza, l'utente ha accesso ai seguenti nodi + Assegna accessi Amministratore Campo Categoria + Utente creato il Cambia la tua password - + Cambia foto + Nuova password + Minimo %0% caratteri! + Dovrebbero esserci almeno %0% caratteri speciali qui. + + Conferma la nuova password + Contenuto del canale + Crea un altro utente + Crea nuovi utenti per dar loro accesso a Umbraco. Quando un nuovo utente viene creato, una nuova password da condividere con l'utente viene generata. Campo Descrizione Disabilita l'utente Tipo di Documento Editor Campo Eccezione + Tentativi di accesso falliti + Vai al profilo dell'utente + Crea gruppi per assegnare gli accessi e i permessi + Invita un altro utente + Lingua + Imposta la lingua che vedrai nei menu e nei dialoghi + Data dell'ultimo blocco + Ultimo login + Ultima modifica della password Login - + Nodo di inizio nella sezione Media + Limita la libreria multimediale a un nodo iniziale specifico + Nodi di inizio nella sezione Media + Sezioni - Modifica la tua password + non ha ancora effettuato l'accesso + Vecchia password Password + Resetta password + Password cambiata - Password attuale - - + Password attuale + + + Rimuovi foto + Permessi predefiniti + Permessi granulari + Imposta i permessi per nodi specifici + Profilo + Aggiungi sezioni per cui l'utente deve avere accesso + Seleziona gruppi di utenti + Nodo di partenza non selezionato + Nodi di partenza non selezionati + Limita l'albero dei contenuti a un nodo iniziale specifico + Nodi di inizio del contenuto + + Ultimo aggiornamento utente + + + Gestione utenti Username - - + Gruppo di utenti + + + Ciao e benvenuto su Umbraco! In solo 1 minuto sarai pronto a partire, dovrai solamente impostare una password e aggiungere una foto profilo. + + Caricando una tua foto, gli altri utenti potranno riconoscerti facilmente. Fai clic sul cerchio sopra per caricare la tua foto. Autore + Modifica Il tuo profilo - La tua storia recente + + La sessione scade in + Invita utente Crea utente - Crea nuovi utenti e dai loro accesso ad Umbraco. Quando un nuovo utente viene creato viene generata una password che potrai condividere con l'utente. - Aggiungi gruppi per assegnare accessi e permessi + Invia invito Torna agli utenti - Gestione utenti + Invito per Umbraco + + + + + + + + + + + + +
+ + + + + +
+ +
+ +
+
+ + + + + + +
+
+
+ + + + +
+ + + + +
+

+ Ciao %0%, +

+

+ Sei stato invitato nel Back Office di Umbraco da %1%. +

+

+ Messaggio da %1%: +
+ %2% +

+ + + + + + +
+ + + + + + +
+ + Clicca questo link per accettare l'invito + +
+
+

Se non puoi cliccare sul link, copia e incolla questo URL in una nuova finestra del tuo browser:

+ + + + +
+ + %3% + +
+

+
+
+


+
+
+ + ]]> +
+ Invita + Sto rinviando l'invito... + Cancella utente + Sei sicuro di voler cancellare questo account utente? + Tutti + Attivi + Disabilitati + Bloccati + Invitati + Inattivi + Nome (A-Z) + Nome (Z-A) + + + Ultimo login + Non sono stati aggiunti gruppi di utenti + Validazione + Valida come indirizzo email + Valida come numero + Valida come URL + ...oppure inserisci una validazione personalizzata + + Inserisci un errore di validazione personalizzato (opzionale) + Inserisci una regular expression + Inserisci un errore di validazione personalizzato (opzionale) Devi aggiungere almeno + Puoi avere solamente + Aggiungi fino a elementi + URL + URL selezionati + elementi selezionati + Data non valida + + + Email non valida + + + + Validazione personalizzata + %1% in più.]]> + %1% di troppo.]]> - - Digita per cercare... - Inserisci la tua email - Inserisci la tua password - Inserisci un nome... - Inserisci una email... + + + + + + + + Gli errori personalizzati sono impostati a '%0%'. + + Errori personalizzati impostati correttamente a '%0%'. + I MacroErrors sono impostati a '%0%'. + + I MacroErrors sono ora impostati a '%0%'. + + + + + + Il file seguente non esiste: '%0%'. + '%0%' nel file di configurazione '%1%'.]]> + + + Sono stati trovati %0% problemi con lo schema del database (Controlla i log per dettagli aggiuntivi) + Sono stati trovati alcuni errori durante la validazione dello schema del database per la versione corrente di Umbraco. + + Errore di validazione del certificato SSL: '%0%' + + + Errore durante il ping dell'URL %0% - '%1%' + Attualmente %0% stai visualizzando il sito web utilizzando lo schema HTTPS. + + + Non posso aggiornare l'impostazione 'Umbraco.Core.UseHttps' nel file web.config. Errore: %0% + + Abilita HTTPS + Imposta il valore di umbracoSSL a true nelle appSetting del file web.config. + + Correggi + Non posso correggere un controllo con un valore di confronto pari a 'ShouldNotEqual'. + Non posso correggere un controllo con un valore di confronto pari a 'ShouldEqual' con un valore fornito. + + + + + + + + Tutte le cartelle hanno i permessi corretti impostati. + + %0%.]]> + %0%. Se non vengono scritte non è necessario intraprendere alcuna azione.]]> + Tutti i file hanno i permessi corretti impostati. + + %0%.]]> + %0%. Se non vengono scritti non è necessario intraprendere alcuna azione.]]> + X-Frame-Options usato per controllare se un sito può essere inserito in un IFRAME da un altro è stato trovato.]]> + X-Frame-Options usato per controllare se un sito può essere inserito in un IFRAME da un altro non è stato trovato.]]> + Imposta l'header nella configurazione + Aggiunge un valore alla sezione httpProtocol/customHeaders del file web.config per prevenire che un sito possa essere inserito in un IFRAME da altri siti web. + + Non posso aggiornare il file web.config. Errore: %0% + X-Content-Type-Options usato per proteggere dalle vulnerabilità per MIME sniffing è stato trovato.]]> + X-Content-Type-Options usato per proteggere dalle vulnerabilità per MIME sniffing è stato trovato.]]> + + + Strict-Transport-Security, conosciuto anche come l'header HSTS, è stato trovato.]]> + Strict-Transport-Security non è stato trovato.]]> + Aggiunge l'header 'Strict-Transport-Security' con il valore 'max-age=10886400' alla sezione httpProtocol/customHeaders del file web.config. Usa questa correzione solo se avrai i tuoi domini in esecuzione con https per le prossime 18 settimane (minimo). + + X-XSS-Protection è stato trovato.]]> + X-XSS-Protection non è stato trovato.]]> + Aggiunge l'header 'X-XSS-Protection' con il valore '1; mode=block' alla sezione httpProtocol/customHeaders del file web.config. + + + %0%.]]> + Non sono stati trovati header che rivelano informazioni riguardo alla tecnologia utilizzata per il sito. + + + Le impostazioni SMTP sono state inserite correttamente e il servizio funziona come previsto. + + %0%.]]> + %0%.]]> +

I risultati dell'Health Check programmato di Umbraco del %0% alle %1% è il seguente:

%2%]]>
+ Stato dell'Health Check di Umbraco: %0% + Controlla tutti i gruppi + Controlla gruppo + + L'health checker valuta varie aree del tuo sito per le impostazioni delle migliori pratiche, la configurazione, i potenziali problemi, ecc. Puoi facilmente risolvere i problemi premendo un pulsante. + Puoi aggiungere i tuoi health check personalizzati, guarda sulla documentazione per più informazioni riguardo i custom health checks.

+ ]]> +
- - o clicca qui per scegliere i file - Trascina i tuoi file all'interno di quest'area + + Disabilita tracciamento degli URL + Abilita tracciamento degli URL + Cultura + URL originale + Reindirizzato a + Gestione Redirect URL + I seguenti URL reindirizzano a questo contenuto: + + + Sei sicuro di voler eliminare il reindirizzamento da '%0%' a '%1%'? + Reindirizzamento URL rimosso. + Errore durante la rimozione del reindirizzamento URL. + + Sei sicuro di voler disabilitare il tracciamento degli URL? + + + + - - Contenuti - Info - Elementi + + Nessun elemento del dizionario tra cui scegliere + + + %0% caratteri rimasti.]]> + %1% di troppo.]]> + + + Contenuto cestinato con Id: {0} relativo al contenuto principale originale con Id: {1} + Media cestinato con Id: {0} relativo al media principale originale con Id: {1} + Impossibile ripristinare automaticamente questo elemento + Non esiste una posizione in cui questo elemento possa essere ripristinato automaticamente. Puoi spostare l'elemento manualmente utilizzando l'albero sottostante. + + + + Direzione + Da genitore a figlio + Bidirezionale + Genitore + Figlio + Numero + Relazioni + Creato + Commento + Nome + Nessuna relazione per questo tipo di relazione + Tipo di relazione + Relazioni + + + Guida introduttiva + Gestione Redirect URL + Contenuto + Benvenuto + Gestione Examine + Stato di pubblicazione + Models Builder + Health Check + Profilazione + Guida introduttiva + Installa Umbraco Forms + + + Indietro + Layout attivo: + Vai a + gruppo + passato + attenzone + fallito + suggerimento + Check passato + Check fallito + Apri la ricerca nel backoffice + Apri/chiudi l'aiuto del backoffice + Apri/chiudi le opzioni del tuo profilo + Imposta le Culture e gli Hostnames per %0% + Crea nuovo nodo sotto %0% + Imposta le restrizioni di accesso per %0% + Imposta i permessi per %0% + Modifica l'ordinamento per %0% + Crea un modello di contenuto basato su %0% + Apri il menu contestuale per + Lingua corrente + Cambia lingua in + Crea nuova cartella + Partial View + Partial View Macro + Membro + Tipo di dato + Cerca nella dashboard di reindirizzamento + Cerca nella sezione dei gruppi di utenti + Cerca tra gli utenti + Crea oggetto + Crea + Modifica + Nome + Aggiungi nuova riga + + Cerca nel backoffice di Umbraco + Cerca contenuti, media, ecc. nel backoffice. + + Percorso: + Trovato in + Ha una traduzione + Traduzione mancante + Voci del dizionario + Seleziona una delle opzioni per modificare il nodo. + Esegui l'azione %0% sul nodo %1% + Aggiungi una descrizione per l'immagine + Cerca nell'albero dei contenuti + Numero massimo + + + Riferimenti + Questo tipo di dato non ha riferimenti. + Usato nei tipi di documento + Non ci sono riferimenti a tipi di documento. + Usato nei tipi di media + Non ci sono riferimenti a tipi di media. + Usato nei tipi di membro + Non ci sono riferimenti a tipi di membro. + Usato da + Usato nei documenti + Usato nei membri + Usato nei media + Elimina ricerca salvata + Livelli di log Seleziona tutto Deselezionare tutto + Ricerche salvate + Salva ricerca + Inserisci un nome descrittivo per la tua query di ricerca + Filtra la ricerca + Risultati totali + Timestamp + Livello + Macchina + Messaggio + Exception + + Ricerca con Google + Ricerca questo messaggio con Google + Ricerca con Bing + Ricerca questo messaggio con Bing + Ricerca su Our Umbraco + Ricerca questo messaggio sui forum e le documentazioni di Our Umbraco + Ricerca su Our Umbraco con Google + Ricerca sui forum di Our Umbraco con Google + Ricerca nel codice sorgente di Umbraco + Ricerca nel codice sorgente di Umbraco su GitHub + Ricerca tra i problemi di Umbraco + Ricerca tra i problemi di Umbraco su GitHub + Elimina questa ricerca + Trova log con Request ID + Trova log con Namespace + Trova log con Machine Name + Apri + Polling + Ogni 2 secondi + Ogni 5 secondi + Ogni 10 secondi + Ogni 20 secondi + Ogni 30 secondi + Polling ogni 2s + Polling ogni 5s + Polling ogni 10s + Polling ogni 20s + Polling ogni 30s + + + Copia %0% + %0% da %1% + Lista di %0% + Rimuovi tutti gli oggetti + Svuota appunti + + + + + + + Attendi + Aggiorna stato + Memory Cache + + + + Ricarica + Cache del Database + + La ricostruzione può metterci del tempo. + Usalo quando la ricarica della Memory Cache non è sufficiente e pensi che la cache del database non sia + stata generata correttamente, che indicherebbe un problema critico di Umbraco. + ]]> + + Ricostruisci + Interni + + non hai bisogno di usarlo. + ]]> + + Raccogli + Stato della Published Cache + Caches + + + Profilazione delle performance + + + Umbraco attualmente funziona in modalità debug. Ciò significa che puoi utilizzare il profiler delle prestazioni integrato per valutare le prestazioni durante il rendering delle pagine. +

+

+ Se vuoi attivare il profiler per il rendering di una pagina specifica, aggiungi semplicemente umbDebug=true alla querystring quando richiedi la pagina. +

+

+ Se vuoi che il profiler sia attivato per impostazione predefinita per tutti i rendering di pagina, puoi utilizzare l'interruttore qui sotto. + Verrà impostato un cookie nel tuo browser, che quindi attiverà automaticamente il profiler. + In altre parole, il profiler sarà attivo per impostazione predefinita solo nel tuo browser, non in quello di tutti gli altri. +

+ ]]> +
+ Attiva la profilazione per impostazione predefinita + Promemoria + + + Non dovresti mai lasciare che un sito di produzione venga eseguito in modalità debug. La modalità di debug viene disattivata impostando debug="false" nell'elemento <compilation /> nel file web.config. +

+ ]]> +
+ + + Umbraco attualmente non viene eseguito in modalità debug, quindi non è possibile utilizzare il profiler integrato. Questo è come dovrebbe essere per un sito produttivo. +

+

+ La modalità di debug viene attivata impostando debug="true" nell'elemento <compilation /> in web.config. +

+ ]]> +
+ + + Ore di videoallenamenti su Umbraco sono a solo un click da te + + Vuoi padroneggiare Umbraco? Dedica un paio di minuti all'apprendimento di alcune best practice guardando uno di questi video sull'utilizzo di Umbraco. Visita umbraco.tv per altri video su Umbraco

+ ]]> +
+ Per iniziare + + + Inizia da qui! + + + + nella documentazione di Our Umbraco + ]]> + + + Community Forum + ]]> + + + video tutorial (alcuni sono gratuiti, altri richiedono un abbonamento) + ]]> + + + strumenti per aumentare la produttività e il supporto commerciale + ]]> + + + certificazione + ]]> + + + + Benvenuto nell'amichevole CMS + + + + Umbraco Forms + Crea moduli utilizzando un'interfaccia drag and drop intuitiva. Da semplici moduli di contatto che inviano e-mail a questionari avanzati che si integrano con i sistemi CRM. I tuoi clienti lo adoreranno! + + + Scegli tipo di elemento + Allega un tipo di elemento delle impostazioni + Seleziona vista + Seleziona foglio di stile + Scegli miniatura + Crea nuovo tipo di elemento + Foglio di stile personalizzato + Aggiungi foglio di stile + Aspetto dell'editor + Modelli di dati + Aspetto del catalogo + Colore di sfondo + Colore dell'icona + Modello del contenuto + Etichetta + Vista personalizzata + Mostra la descrizione della vista personalizzata + + Modello di impostazioni + Dimensione dell'editor di sovrapposizione + Aggiungi vista personalizzata + Aggiungi impostazioni + Sovrascrivi modello di etichetta + %0%?]]> + %0%?]]> + + + Miniatura + Aggiungi miniatura + Crea vuota + Appunti + Impostazioni + Avanzate + Forza nascondi editor di contenuti + Hai fatto delle modifiche a questo contenuto. Sei sicuro di volerle scartare? + Scartare la creazione? + + Errore! + + Aggiungi contenuto + Aggiungi %0% + + + + Cosa sono i modelli di contenuto? + I modelli di contenuto sono contenuti predefiniti che possono essere selezionati durante la creazione di un nuovo nodo di contenuto. + Come creo un modello di contenuto? + + Ci sono due modi per creare un modello di contenuto:

+
    +
  • Fare clic con il pulsante destro del mouse su un nodo di contenuto e selezionare "Crea modello di contenuto" per creare un nuovo modello di contenuto.
  • +
  • Fare clic con il pulsante destro del mouse sull'albero dei modelli di contenuto nella sezione Impostazioni e selezionare il tipo di documento per il quale si desidera creare un modello di contenuto.
  • +
+

Una volta specificato un nome, gli editors potranno cominciare a usare il tipo di contenuto come base per la nuova pagina.

+ ]]> +
+ Come gestisco i modelli di contenuto? + Puoi modificare ed eliminare i modelli di contenuto dall'albero "Modelli di contenuto" nella sezione Impostazioni. Espandere il tipo di documento su cui si basa il modello di contenuto e fare clic su di esso per modificarlo o eliminarlo. + + + Chiudi + Chiudi anteprima + Anteprima sito web + + Aprire l'anteprima del sito web? + + Anteprima dell'ultima versione + Visualizza versione pubblicata + Vuoi vedere la versione pubblicata? + + Visualizza versione pubblicata + + + + oggetto trovato + oggetti trovati From f6f5723b7be0639cb4ff3ef0961db4f7d716725d Mon Sep 17 00:00:00 2001 From: Paul Johnson Date: Tue, 12 Oct 2021 09:18:42 +0100 Subject: [PATCH 25/75] Resolve incorrect ContentSavedState for failed publish Closes #11290 (for v8) --- .../Implement/DocumentRepository.cs | 14 +++++ .../Services/ContentServiceTests.cs | 63 ++++++++++++++++++- 2 files changed, 75 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/DocumentRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/DocumentRepository.cs index f5d993070c04..5716fbe129c4 100644 --- a/src/Umbraco.Core/Persistence/Repositories/Implement/DocumentRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/Implement/DocumentRepository.cs @@ -520,6 +520,7 @@ protected override void PersistNewItem(IContent entity) protected override void PersistUpdatedItem(IContent entity) { var isEntityDirty = entity.IsDirty(); + var editedSnapshot = entity.Edited; // check if we need to make any database changes at all if ((entity.PublishedState == PublishedState.Published || entity.PublishedState == PublishedState.Unpublished) @@ -621,6 +622,19 @@ protected override void PersistUpdatedItem(IContent entity) if (!publishing && entity.PublishName != entity.Name) edited = true; + // To establish the new value of "edited" we compare all properties publishedValue to editedValue and look + // for differences. + // + // If we SaveAndPublish but the publish fails (e.g. already scheduled for release) + // we have lost the publishedValue on IContent (in memory vs database) so we cannot correctly make that comparison. + // + // This is a slight change to behaviour, historically a publish, followed by change & save, followed by undo change & save + // would change edited back to false. + if (!publishing && editedSnapshot) + { + edited = true; + } + if (entity.ContentType.VariesByCulture()) { // bump dates to align cultures to version diff --git a/src/Umbraco.Tests/Services/ContentServiceTests.cs b/src/Umbraco.Tests/Services/ContentServiceTests.cs index d9a90b74d808..64e88b94131d 100644 --- a/src/Umbraco.Tests/Services/ContentServiceTests.cs +++ b/src/Umbraco.Tests/Services/ContentServiceTests.cs @@ -1375,6 +1375,65 @@ public void Cannot_Publish_Content_Awaiting_Release() Assert.AreEqual(PublishResultType.FailedPublishAwaitingRelease, published.Result); } + // V9 - Tests.Integration + [Test] + public void Failed_Publish_Should_Not_Update_Edited_State_When_Edited_True() + { + const int rootNodeId = NodeDto.NodeIdSeed + 2; + + // Arrange + var contentService = ServiceContext.ContentService; + var content = contentService.GetById(rootNodeId); + contentService.SaveAndPublish(content); + + content.Properties[0].SetValue("Foo", culture: string.Empty); + content.ContentSchedule.Add(DateTime.Now.AddHours(2), null); + contentService.Save(content); + + // Act + var result = contentService.SaveAndPublish(content, userId: Constants.Security.SuperUserId); + + // Assert + Assert.Multiple(() => + { + Assert.IsFalse(result.Success); + Assert.IsTrue(result.Content.Published); + Assert.AreEqual(PublishResultType.FailedPublishAwaitingRelease, result.Result); + + // We changed property data + Assert.IsTrue(result.Content.Edited, "result.Content.Edited"); + }); + } + + // V9 - Tests.Integration + [Test] + public void Failed_Publish_Should_Not_Update_Edited_State_When_Edited_False() + { + const int rootNodeId = NodeDto.NodeIdSeed + 2; + + // Arrange + var contentService = ServiceContext.ContentService; + var content = contentService.GetById(rootNodeId); + contentService.SaveAndPublish(content); + + content.ContentSchedule.Add(DateTime.Now.AddHours(2), null); + contentService.Save(content); + + // Act + var result = contentService.SaveAndPublish(content, userId: Constants.Security.SuperUserId); + + // Assert + Assert.Multiple(() => + { + Assert.IsFalse(result.Success); + Assert.IsTrue(result.Content.Published); + Assert.AreEqual(PublishResultType.FailedPublishAwaitingRelease, result.Result); + + // We didn't change any property data + Assert.IsFalse(result.Content.Edited, "result.Content.Edited"); + }); + } + [Test] public void Cannot_Publish_Culture_Awaiting_Release() { @@ -2176,7 +2235,7 @@ public void Can_Rollback_Version_On_Content() contentService.Save(rollback2); Assert.IsTrue(rollback2.Published); - Assert.IsFalse(rollback2.Edited); // all changes cleared! + Assert.IsTrue(rollback2.Edited); // Still edited, change of behaviour Assert.AreEqual("Jane Doe", rollback2.GetValue("author")); Assert.AreEqual("Text Page 2 ReReUpdated", rollback2.Name); @@ -2195,7 +2254,7 @@ public void Can_Rollback_Version_On_Content() content.CopyFrom(rollto); content.Name = rollto.PublishName; // must do it explicitely AND must pick the publish one! contentService.Save(content); - Assert.IsFalse(content.Edited); + Assert.IsTrue(content.Edited); // Still edited, change of behaviour Assert.AreEqual("Text Page 2 ReReUpdated", content.Name); Assert.AreEqual("Jane Doe", content.GetValue("author")); } From 3d53c72205f33c93bd0109eb5879aeb347fd6386 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 12 Oct 2021 11:52:01 +0200 Subject: [PATCH 26/75] add modelValue validation for server to correctly update validation errors --- .../mediapicker3/umb-media-picker3-property-editor.html | 4 ++++ .../mediapicker3/umbMediaPicker3PropertyEditor.component.js | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/mediapicker3/umb-media-picker3-property-editor.html b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/mediapicker3/umb-media-picker3-property-editor.html index daf9566e2d4d..f40c6bc437e5 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/mediapicker3/umb-media-picker3-property-editor.html +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/mediapicker3/umb-media-picker3-property-editor.html @@ -69,4 +69,8 @@ + + + + diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/mediapicker3/umbMediaPicker3PropertyEditor.component.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/mediapicker3/umbMediaPicker3PropertyEditor.component.js index 02b9f0b92813..ff0b0030e6b5 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/mediapicker3/umbMediaPicker3PropertyEditor.component.js +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/mediapicker3/umbMediaPicker3PropertyEditor.component.js @@ -137,6 +137,10 @@ if (vm.propertyForm) { vm.propertyForm.$setDirty(); } + + if (vm.modelValueForm) { + vm.modelValueForm.modelValue.$setDirty(); + } } function addMediaAt(createIndex, $event) { From d02440d4111b59e560cfe49eae7be2bf0366bf7b Mon Sep 17 00:00:00 2001 From: patrickdemooij9 Date: Tue, 12 Oct 2021 14:47:03 +0200 Subject: [PATCH 27/75] 11048: Bugfix for groups and properties that get replaced (#11257) (cherry picked from commit 1605dc10bd91caa46d4bec1946a392f1d47c993d) --- .../src/common/services/contenttypehelper.service.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/services/contenttypehelper.service.js b/src/Umbraco.Web.UI.Client/src/common/services/contenttypehelper.service.js index cceb67689fed..ba08739676b6 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/contenttypehelper.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/contenttypehelper.service.js @@ -96,7 +96,7 @@ function contentTypeHelper(contentTypeResource, dataTypeResource, $filter, $inje group.convertingToTab = true; group.type = this.TYPE_TAB; - + const newAlias = this.generateLocalAlias(group.name); // when checking for alias uniqueness we need to exclude the current group or the alias would get a + 1 const otherGroups = [...groups].filter(groupCopy => !groupCopy.convertingToTab); @@ -445,6 +445,12 @@ function contentTypeHelper(contentTypeResource, dataTypeResource, $filter, $inje // The saved content type might have updated values (eg. new IDs/keys), so make sure the view model is updated contentType.ModelState = savedContentType.ModelState; contentType.id = savedContentType.id; + + // Prevent rebinding if there was an error: https://github.com/umbraco/Umbraco-CMS/pull/11257 + if (savedContentType.ModelState) { + return; + } + contentType.groups.forEach(function (group) { if (!group.alias) return; From 93720c9897f3dc91f65ecd1e634738162d5d5088 Mon Sep 17 00:00:00 2001 From: Bjarne Fyrstenborg Date: Tue, 12 Oct 2021 16:49:33 +0200 Subject: [PATCH 28/75] Icon fallback to `icon-document` for existing document types (#11283) --- .../src/views/documenttypes/create.controller.js | 4 ++-- .../src/views/documenttypes/edit.controller.js | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/documenttypes/create.controller.js b/src/Umbraco.Web.UI.Client/src/views/documenttypes/create.controller.js index b82146e75be5..487fca626e3b 100644 --- a/src/Umbraco.Web.UI.Client/src/views/documenttypes/create.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/documenttypes/create.controller.js @@ -94,11 +94,11 @@ function DocumentTypesCreateController($scope, $location, navigationService, con }; $scope.createComposition = function (icon) { - createDocType({ iscomposition: true, iselement: true, icon }); + createDocType({ notemplate: true, iscomposition: true, iselement: true, icon }); }; $scope.createElement = function (icon) { - createDocType({ iselement: true, icon }); + createDocType({ notemplate: true, iselement: true, icon }); }; $scope.close = function() { diff --git a/src/Umbraco.Web.UI.Client/src/views/documenttypes/edit.controller.js b/src/Umbraco.Web.UI.Client/src/views/documenttypes/edit.controller.js index 7a29be0526b1..38eb0bb61a68 100644 --- a/src/Umbraco.Web.UI.Client/src/views/documenttypes/edit.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/documenttypes/edit.controller.js @@ -413,13 +413,14 @@ contentType.defaultTemplate = contentTypeHelper.insertDefaultTemplatePlaceholder(contentType.defaultTemplate); contentType.allowedTemplates = contentTypeHelper.insertTemplatePlaceholder(contentType.allowedTemplates); } + // set isElement checkbox by default if (isElement) { contentType.isElement = true; } // set icon if one is provided - if (icon !== null) { + if (icon !== null && icon !== undefined) { contentType.icon = icon; } @@ -427,6 +428,7 @@ if (allowVaryByCulture) { contentType.allowCultureVariant = true; } + // convert icons for content type convertLegacyIcons(contentType); From 03b2aed91edfc86ff5624f55169367268744cf39 Mon Sep 17 00:00:00 2001 From: patrickdemooij9 Date: Wed, 13 Oct 2021 01:03:19 +0200 Subject: [PATCH 29/75] Align create buttons styling (#11352) * Added button for cancelling dictionary create action * Use hideMenu * Align dictionary create with the other creates * Align import documenttype * Align for data type folder create * Align document type create buttons * Forgot small ng-show * Align create media folder buttons * Align create macro buttons * Align create relation buttons * Align create partial view macro folder buttons * Align partial view folder create buttons * Align create scripts folder buttons * Align create scripts folder buttons * Use primary instead of success --- .../src/views/datatypes/create.html | 100 ++++++----- .../src/views/dictionary/create.html | 46 ++++-- .../dictionary.create.controller.js | 6 + .../src/views/documenttypes/create.html | 76 +++++---- .../views/documenttypes/import.controller.js | 10 +- .../documenttypes/importdocumenttype.html | 93 ++++++----- .../src/views/macros/create.html | 36 ++-- .../views/macros/macros.create.controller.js | 4 + .../src/views/mediatypes/create.html | 111 +++++++------ .../src/views/partialviewmacros/create.html | 155 ++++++++++-------- .../src/views/partialviews/create.html | 137 +++++++++------- .../views/relationtypes/create.controller.js | 4 + .../src/views/relationtypes/create.html | 119 +++++++------- .../src/views/scripts/create.html | 100 ++++++----- .../src/views/stylesheets/create.html | 106 ++++++------ 15 files changed, 618 insertions(+), 485 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/datatypes/create.html b/src/Umbraco.Web.UI.Client/src/views/datatypes/create.html index 5a7859add901..46e70ccbf498 100644 --- a/src/Umbraco.Web.UI.Client/src/views/datatypes/create.html +++ b/src/Umbraco.Web.UI.Client/src/views/datatypes/create.html @@ -1,54 +1,66 @@
-