From f33b724c8e94d6c3348ea1c0f251a7682e7e2eed Mon Sep 17 00:00:00 2001 From: Tiffany Prosser Date: Fri, 19 Aug 2022 00:56:56 +0100 Subject: [PATCH 01/33] Content modal heading fix (#12797) * Fixes to modal and group headings * updated modal headings for h1 and h2 * Updated line-height Changed line-height: 0 to line-height: 1.3 and added margin: 0 --- .../src/less/components/html/umb-group-panel.less | 2 ++ src/Umbraco.Web.UI.Client/src/less/modals.less | 1 + 2 files changed, 3 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/less/components/html/umb-group-panel.less b/src/Umbraco.Web.UI.Client/src/less/components/html/umb-group-panel.less index 97646e57b9..32be2f2245 100644 --- a/src/Umbraco.Web.UI.Client/src/less/components/html/umb-group-panel.less +++ b/src/Umbraco.Web.UI.Client/src/less/components/html/umb-group-panel.less @@ -17,6 +17,8 @@ .umb-group-panel__header h2 { font-size: @fontSizeMedium; font-weight: bold; + line-height: 1.3; + margin: 0; } .umb-group-panel__content { diff --git a/src/Umbraco.Web.UI.Client/src/less/modals.less b/src/Umbraco.Web.UI.Client/src/less/modals.less index 256d7baf0a..e944bba1b2 100644 --- a/src/Umbraco.Web.UI.Client/src/less/modals.less +++ b/src/Umbraco.Web.UI.Client/src/less/modals.less @@ -16,6 +16,7 @@ white-space: nowrap } +.umb-modalcolumn-header h1, .umb-modalcolumn-header h2 { margin: 0; white-space: nowrap; From 56e282946f3b727e42c10c222302e52078e4b9de Mon Sep 17 00:00:00 2001 From: patrickdemooij9 Date: Fri, 19 Aug 2022 10:19:36 +0200 Subject: [PATCH 02/33] Added copy functionality for data types (#11867) * Added copy functionality for data types * Fix errors * Add logic to default interface * PR Feedback * PR feedback * Fix error --- src/Umbraco.Core/Models/IDataType.cs | 24 +- src/Umbraco.Core/Services/DataTypeService.cs | 33 + src/Umbraco.Core/Services/IDataTypeService.cs | 11 + .../Controllers/DataTypeController.cs | 24 + .../Trees/DataTypeTreeController.cs | 5 +- .../src/common/resources/datatype.resource.js | 691 ++++++++++-------- .../src/views/dataTypes/copy.controller.js | 62 ++ .../src/views/dataTypes/copy.html | 53 ++ 8 files changed, 571 insertions(+), 332 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/views/dataTypes/copy.controller.js create mode 100644 src/Umbraco.Web.UI.Client/src/views/dataTypes/copy.html diff --git a/src/Umbraco.Core/Models/IDataType.cs b/src/Umbraco.Core/Models/IDataType.cs index 6f0002c779..64ffe6489d 100644 --- a/src/Umbraco.Core/Models/IDataType.cs +++ b/src/Umbraco.Core/Models/IDataType.cs @@ -28,14 +28,26 @@ public interface IDataType : IUmbracoEntity, IRememberBeingDirty ValueStorageType DatabaseType { get; set; } /// - /// Gets or sets the configuration object. + /// Gets or sets the configuration object. /// /// - /// The configuration object is serialized to Json and stored into the database. - /// - /// The serialized Json is deserialized by the property editor, which by default should - /// return a Dictionary{string, object} but could return a typed object e.g. MyEditor.Configuration. - /// + /// The configuration object is serialized to Json and stored into the database. + /// The serialized Json is deserialized by the property editor, which by default should + /// return a Dictionary{string, object} but could return a typed object e.g. MyEditor.Configuration. /// object? Configuration { get; set; } + + /// + /// Creates a deep clone of the current entity with its identity/alias reset + /// We have the default implementation here to avoid breaking changes for the user + /// + /// + IDataType DeepCloneWithResetIdentities() + { + var clone = (DataType)DeepClone(); + clone.Key = Guid.Empty; + clone.ResetIdentity(); + return clone; + } } + diff --git a/src/Umbraco.Core/Services/DataTypeService.cs b/src/Umbraco.Core/Services/DataTypeService.cs index 1fdbb4a79b..d310954985 100644 --- a/src/Umbraco.Core/Services/DataTypeService.cs +++ b/src/Umbraco.Core/Services/DataTypeService.cs @@ -436,6 +436,39 @@ namespace Umbraco.Cms.Core.Services.Implement return OperationResult.Attempt.Succeed(MoveOperationStatusType.Success, evtMsgs); } + public Attempt?> Copy(IDataType copying, int containerId) + { + var evtMsgs = EventMessagesFactory.Get(); + + IDataType copy; + using (var scope = ScopeProvider.CreateCoreScope()) + { + try + { + if (containerId > 0) + { + var container = _dataTypeContainerRepository.Get(containerId); + if (container is null) + { + throw new DataOperationException(MoveOperationStatusType.FailedParentNotFound); // causes rollback + } + } + copy = copying.DeepCloneWithResetIdentities(); + + copy.Name += " (copy)"; // might not be unique + copy.ParentId = containerId; + _dataTypeRepository.Save(copy); + scope.Complete(); + } + catch (DataOperationException ex) + { + return OperationResult.Attempt.Fail(ex.Operation, evtMsgs); // causes rollback + } + } + + return OperationResult.Attempt.Succeed(MoveOperationStatusType.Success, evtMsgs, copy); + } + /// /// Saves an /// diff --git a/src/Umbraco.Core/Services/IDataTypeService.cs b/src/Umbraco.Core/Services/IDataTypeService.cs index effb4573b4..02bc51a8f6 100644 --- a/src/Umbraco.Core/Services/IDataTypeService.cs +++ b/src/Umbraco.Core/Services/IDataTypeService.cs @@ -100,4 +100,15 @@ public interface IDataTypeService : IService IEnumerable GetByEditorAlias(string propertyEditorAlias); Attempt?> Move(IDataType toMove, int parentId); + + /// + /// Copies the give to a given container + /// We have the default implementation here to avoid breaking changes for the user + /// + /// The data type that will be copied + /// The container ID under where the data type will be copied + /// + /// + Attempt?> Copy(IDataType copying, int containerId) => throw new NotImplementedException(); + } diff --git a/src/Umbraco.Web.BackOffice/Controllers/DataTypeController.cs b/src/Umbraco.Web.BackOffice/Controllers/DataTypeController.cs index a524062d36..7de06dfe6d 100644 --- a/src/Umbraco.Web.BackOffice/Controllers/DataTypeController.cs +++ b/src/Umbraco.Web.BackOffice/Controllers/DataTypeController.cs @@ -383,6 +383,30 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers } } + public IActionResult PostCopy(MoveOrCopy copy) + { + var toCopy = _dataTypeService.GetDataType(copy.Id); + if (toCopy is null) + { + return NotFound(); + } + + Attempt?> result = _dataTypeService.Copy(toCopy, copy.ParentId); + if (result.Success) + { + return Content(toCopy.Path, MediaTypeNames.Text.Plain, Encoding.UTF8); + } + + return result.Result?.Result switch + { + MoveOperationStatusType.FailedParentNotFound => NotFound(), + MoveOperationStatusType.FailedCancelledByEvent => ValidationProblem(), + MoveOperationStatusType.FailedNotAllowedByPath => ValidationProblem( + _localizedTextService.Localize("moveOrCopy", "notAllowedByPath")), + _ => throw new ArgumentOutOfRangeException() + }; + } + public IActionResult PostRenameContainer(int id, string name) { var currentUser = _backOfficeSecurityAccessor.BackOfficeSecurity?.CurrentUser; diff --git a/src/Umbraco.Web.BackOffice/Trees/DataTypeTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/DataTypeTreeController.cs index 84a32d3659..d0164afa06 100644 --- a/src/Umbraco.Web.BackOffice/Trees/DataTypeTreeController.cs +++ b/src/Umbraco.Web.BackOffice/Trees/DataTypeTreeController.cs @@ -181,8 +181,9 @@ public class DataTypeTreeController : TreeController, ISearchableTree menu.Items.Add(LocalizedTextService, opensDialog: true, useLegacyIcon: false); } - menu.Items.Add(LocalizedTextService, hasSeparator: true, opensDialog: true, useLegacyIcon: false); - } + menu.Items.Add(LocalizedTextService, hasSeparator: true, opensDialog: true, useLegacyIcon: false); + menu.Items.Add(LocalizedTextService, hasSeparator: true, opensDialog: true, useLegacyIcon: false); + } return menu; } diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/datatype.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/datatype.resource.js index 8f5308ce22..91d74e1efd 100644 --- a/src/Umbraco.Web.UI.Client/src/common/resources/datatype.resource.js +++ b/src/Umbraco.Web.UI.Client/src/common/resources/datatype.resource.js @@ -5,7 +5,7 @@ **/ function dataTypeResource($q, $http, umbDataFormatter, umbRequestHelper) { - return { + return { /** * @ngdoc method @@ -30,358 +30,401 @@ function dataTypeResource($q, $http, umbDataFormatter, umbRequestHelper) { */ getPreValues: function (editorAlias, dataTypeId) { - if (!dataTypeId) { - dataTypeId = -1; - } + if (!dataTypeId) { + dataTypeId = -1; + } - return umbRequestHelper.resourcePromise( - $http.get( - umbRequestHelper.getApiUrl( - "dataTypeApiBaseUrl", - "GetPreValues", - [{ editorAlias: editorAlias }, { dataTypeId: dataTypeId }])), - "Failed to retrieve pre values for editor alias " + editorAlias); - }, + return umbRequestHelper.resourcePromise( + $http.get( + umbRequestHelper.getApiUrl( + "dataTypeApiBaseUrl", + "GetPreValues", + [{ editorAlias: editorAlias }, { dataTypeId: dataTypeId }])), + "Failed to retrieve pre values for editor alias " + editorAlias); + }, - /** - * @ngdoc method - * @name umbraco.resources.dataTypeResource#getReferences - * @methodOf umbraco.resources.dataTypeResource - * - * @description - * Retrieves references of a given data type. - * - * @param {Int} id id of datatype to retrieve references for - * @returns {Promise} resourcePromise object. - * - */ - getReferences: function (id) { + /** + * @ngdoc method + * @name umbraco.resources.dataTypeResource#getReferences + * @methodOf umbraco.resources.dataTypeResource + * + * @description + * Retrieves references of a given data type. + * + * @param {Int} id id of datatype to retrieve references for + * @returns {Promise} resourcePromise object. + * + */ + getReferences: function (id) { - return umbRequestHelper.resourcePromise( - $http.get( - umbRequestHelper.getApiUrl( - "dataTypeApiBaseUrl", - "GetReferences", - { id: id })), - "Failed to retrieve usages for data type of id " + id); - - }, + return umbRequestHelper.resourcePromise( + $http.get( + umbRequestHelper.getApiUrl( + "dataTypeApiBaseUrl", + "GetReferences", + { id: id })), + "Failed to retrieve usages for data type of id " + id); - /** - * @ngdoc method - * @name umbraco.resources.dataTypeResource#getById - * @methodOf umbraco.resources.dataTypeResource - * - * @description - * Gets a data type item with a given id - * - * ##usage - *
-         * dataTypeResource.getById(1234)
-         *    .then(function(datatype) {
-         *        alert('its here!');
-         *    });
-         * 
- * - * @param {Int} id id of data type to retrieve - * @returns {Promise} resourcePromise object. - * - */ - getById: function (id) { + }, - return umbRequestHelper.resourcePromise( - $http.get( - umbRequestHelper.getApiUrl( - "dataTypeApiBaseUrl", - "GetById", - [{ id: id }])), - "Failed to retrieve data for data type id " + id); - }, + /** + * @ngdoc method + * @name umbraco.resources.dataTypeResource#getById + * @methodOf umbraco.resources.dataTypeResource + * + * @description + * Gets a data type item with a given id + * + * ##usage + *
+     * dataTypeResource.getById(1234)
+     *    .then(function(datatype) {
+     *        alert('its here!');
+     *    });
+     * 
+ * + * @param {Int} id id of data type to retrieve + * @returns {Promise} resourcePromise object. + * + */ + getById: function (id) { - /** - * @ngdoc method - * @name umbraco.resources.dataTypeResource#getByName - * @methodOf umbraco.resources.dataTypeResource - * - * @description - * Gets a data type item with a given name - * - * ##usage - *
-         * dataTypeResource.getByName("upload")
-         *    .then(function(datatype) {
-         *        alert('its here!');
-         *    });
-         * 
- * - * @param {String} name Name of data type to retrieve - * @returns {Promise} resourcePromise object. - * - */ - getByName: function (name) { + return umbRequestHelper.resourcePromise( + $http.get( + umbRequestHelper.getApiUrl( + "dataTypeApiBaseUrl", + "GetById", + [{ id: id }])), + "Failed to retrieve data for data type id " + id); + }, - return umbRequestHelper.resourcePromise( - $http.get( - umbRequestHelper.getApiUrl( - "dataTypeApiBaseUrl", - "GetByName", - [{ name: name }])), - "Failed to retrieve data for data type with name: " + name); - }, + /** + * @ngdoc method + * @name umbraco.resources.dataTypeResource#getByName + * @methodOf umbraco.resources.dataTypeResource + * + * @description + * Gets a data type item with a given name + * + * ##usage + *
+     * dataTypeResource.getByName("upload")
+     *    .then(function(datatype) {
+     *        alert('its here!');
+     *    });
+     * 
+ * + * @param {String} name Name of data type to retrieve + * @returns {Promise} resourcePromise object. + * + */ + getByName: function (name) { - getAll: function () { + return umbRequestHelper.resourcePromise( + $http.get( + umbRequestHelper.getApiUrl( + "dataTypeApiBaseUrl", + "GetByName", + [{ name: name }])), + "Failed to retrieve data for data type with name: " + name); + }, - return umbRequestHelper.resourcePromise( - $http.get( - umbRequestHelper.getApiUrl( - "dataTypeApiBaseUrl", - "GetAll")), - "Failed to retrieve data"); - }, + getAll: function () { - getGroupedDataTypes: function () { - return umbRequestHelper.resourcePromise( - $http.get( - umbRequestHelper.getApiUrl( - "dataTypeApiBaseUrl", - "GetGroupedDataTypes")), - "Failed to retrieve data"); - }, + return umbRequestHelper.resourcePromise( + $http.get( + umbRequestHelper.getApiUrl( + "dataTypeApiBaseUrl", + "GetAll")), + "Failed to retrieve data"); + }, - getGroupedPropertyEditors: function () { - return umbRequestHelper.resourcePromise( - $http.get( - umbRequestHelper.getApiUrl( - "dataTypeApiBaseUrl", - "GetGroupedPropertyEditors")), - "Failed to retrieve data"); - }, + getGroupedDataTypes: function () { + return umbRequestHelper.resourcePromise( + $http.get( + umbRequestHelper.getApiUrl( + "dataTypeApiBaseUrl", + "GetGroupedDataTypes")), + "Failed to retrieve data"); + }, - getAllPropertyEditors: function () { + getGroupedPropertyEditors: function () { + return umbRequestHelper.resourcePromise( + $http.get( + umbRequestHelper.getApiUrl( + "dataTypeApiBaseUrl", + "GetGroupedPropertyEditors")), + "Failed to retrieve data"); + }, - return umbRequestHelper.resourcePromise( - $http.get( - umbRequestHelper.getApiUrl( - "dataTypeApiBaseUrl", - "GetAllPropertyEditors")), - "Failed to retrieve data"); - }, + getAllPropertyEditors: function () { - /** - * @ngdoc method - * @name umbraco.resources.contentResource#getScaffold - * @methodOf umbraco.resources.contentResource - * - * @description - * Returns a scaffold of an empty data type item - * - * The scaffold is used to build editors for data types that has not yet been populated with data. - * - * ##usage - *
-         * dataTypeResource.getScaffold()
-         *    .then(function(scaffold) {
-         *        var myType = scaffold;
-         *        myType.name = "My new data type";
-         *
-         *        dataTypeResource.save(myType, myType.preValues, true)
-         *            .then(function(type){
-         *                alert("Retrieved, updated and saved again");
-         *            });
-         *    });
-         * 
- * - * @returns {Promise} resourcePromise object containing the data type scaffold. - * - */ - getScaffold: function (parentId) { + return umbRequestHelper.resourcePromise( + $http.get( + umbRequestHelper.getApiUrl( + "dataTypeApiBaseUrl", + "GetAllPropertyEditors")), + "Failed to retrieve data"); + }, - return umbRequestHelper.resourcePromise( - $http.get( - umbRequestHelper.getApiUrl( - "dataTypeApiBaseUrl", - "GetEmpty", { parentId: parentId })), - "Failed to retrieve data for empty datatype"); - }, - /** - * @ngdoc method - * @name umbraco.resources.dataTypeResource#deleteById - * @methodOf umbraco.resources.dataTypeResource - * - * @description - * Deletes a data type with a given id - * - * ##usage - *
-         * dataTypeResource.deleteById(1234)
-         *    .then(function() {
-         *        alert('its gone!');
-         *    });
-         * 
- * - * @param {Int} id id of content item to delete - * @returns {Promise} resourcePromise object. - * - */ - deleteById: function (id) { - return umbRequestHelper.resourcePromise( - $http.post( - umbRequestHelper.getApiUrl( - "dataTypeApiBaseUrl", - "DeleteById", - [{ id: id }])), - "Failed to delete item " + id); - }, + /** + * @ngdoc method + * @name umbraco.resources.contentResource#getScaffold + * @methodOf umbraco.resources.contentResource + * + * @description + * Returns a scaffold of an empty data type item + * + * The scaffold is used to build editors for data types that has not yet been populated with data. + * + * ##usage + *
+     * dataTypeResource.getScaffold()
+     *    .then(function(scaffold) {
+     *        var myType = scaffold;
+     *        myType.name = "My new data type";
+     *
+     *        dataTypeResource.save(myType, myType.preValues, true)
+     *            .then(function(type){
+     *                alert("Retrieved, updated and saved again");
+     *            });
+     *    });
+     * 
+ * + * @returns {Promise} resourcePromise object containing the data type scaffold. + * + */ + getScaffold: function (parentId) { - deleteContainerById: function (id) { + return umbRequestHelper.resourcePromise( + $http.get( + umbRequestHelper.getApiUrl( + "dataTypeApiBaseUrl", + "GetEmpty", { parentId: parentId })), + "Failed to retrieve data for empty datatype"); + }, + /** + * @ngdoc method + * @name umbraco.resources.dataTypeResource#deleteById + * @methodOf umbraco.resources.dataTypeResource + * + * @description + * Deletes a data type with a given id + * + * ##usage + *
+     * dataTypeResource.deleteById(1234)
+     *    .then(function() {
+     *        alert('its gone!');
+     *    });
+     * 
+ * + * @param {Int} id id of content item to delete + * @returns {Promise} resourcePromise object. + * + */ + deleteById: function (id) { + return umbRequestHelper.resourcePromise( + $http.post( + umbRequestHelper.getApiUrl( + "dataTypeApiBaseUrl", + "DeleteById", + [{ id: id }])), + "Failed to delete item " + id); + }, - return umbRequestHelper.resourcePromise( - $http.post( - umbRequestHelper.getApiUrl( - "dataTypeApiBaseUrl", - "DeleteContainer", - [{ id: id }])), - 'Failed to delete content type contaier'); - }, + deleteContainerById: function (id) { + + return umbRequestHelper.resourcePromise( + $http.post( + umbRequestHelper.getApiUrl( + "dataTypeApiBaseUrl", + "DeleteContainer", + [{ id: id }])), + 'Failed to delete content type contaier'); + }, - /** - * @ngdoc method - * @name umbraco.resources.dataTypeResource#getCustomListView - * @methodOf umbraco.resources.dataTypeResource - * - * @description - * Returns a custom listview, given a content types alias - * - * - * ##usage - *
-         * dataTypeResource.getCustomListView("home")
-         *    .then(function(listview) {
-         *    });
-         * 
- * - * @returns {Promise} resourcePromise object containing the listview datatype. - * - */ + /** + * @ngdoc method + * @name umbraco.resources.dataTypeResource#getCustomListView + * @methodOf umbraco.resources.dataTypeResource + * + * @description + * Returns a custom listview, given a content types alias + * + * + * ##usage + *
+     * dataTypeResource.getCustomListView("home")
+     *    .then(function(listview) {
+     *    });
+     * 
+ * + * @returns {Promise} resourcePromise object containing the listview datatype. + * + */ - getCustomListView: function (contentTypeAlias) { - return umbRequestHelper.resourcePromise( - $http.get( - umbRequestHelper.getApiUrl( - "dataTypeApiBaseUrl", - "GetCustomListView", - { contentTypeAlias: contentTypeAlias } - )), - "Failed to retrieve data for custom listview datatype"); - }, + getCustomListView: function (contentTypeAlias) { + return umbRequestHelper.resourcePromise( + $http.get( + umbRequestHelper.getApiUrl( + "dataTypeApiBaseUrl", + "GetCustomListView", + { contentTypeAlias: contentTypeAlias } + )), + "Failed to retrieve data for custom listview datatype"); + }, - /** - * @ngdoc method - * @name umbraco.resources.dataTypeResource#createCustomListView - * @methodOf umbraco.resources.dataTypeResource - * - * @description - * Creates and returns a custom listview, given a content types alias - * - * ##usage - *
-        * dataTypeResource.createCustomListView("home")
-        *    .then(function(listview) {
-        *    });
-        * 
- * - * @returns {Promise} resourcePromise object containing the listview datatype. - * - */ - createCustomListView: function (contentTypeAlias) { - return umbRequestHelper.resourcePromise( - $http.post( - umbRequestHelper.getApiUrl( - "dataTypeApiBaseUrl", - "PostCreateCustomListView", - { contentTypeAlias: contentTypeAlias } - )), - "Failed to create a custom listview datatype"); - }, + /** + * @ngdoc method + * @name umbraco.resources.dataTypeResource#createCustomListView + * @methodOf umbraco.resources.dataTypeResource + * + * @description + * Creates and returns a custom listview, given a content types alias + * + * ##usage + *
+    * dataTypeResource.createCustomListView("home")
+    *    .then(function(listview) {
+    *    });
+    * 
+ * + * @returns {Promise} resourcePromise object containing the listview datatype. + * + */ + createCustomListView: function (contentTypeAlias) { + return umbRequestHelper.resourcePromise( + $http.post( + umbRequestHelper.getApiUrl( + "dataTypeApiBaseUrl", + "PostCreateCustomListView", + { contentTypeAlias: contentTypeAlias } + )), + "Failed to create a custom listview datatype"); + }, - /** - * @ngdoc method - * @name umbraco.resources.dataTypeResource#save - * @methodOf umbraco.resources.dataTypeResource - * - * @description - * Saves or update a data type - * - * @param {Object} dataType data type object to create/update - * @param {Array} preValues collection of prevalues on the datatype - * @param {Bool} isNew set to true if type should be create instead of updated - * @returns {Promise} resourcePromise object. - * - */ - save: function (dataType, preValues, isNew) { + /** + * @ngdoc method + * @name umbraco.resources.dataTypeResource#save + * @methodOf umbraco.resources.dataTypeResource + * + * @description + * Saves or update a data type + * + * @param {Object} dataType data type object to create/update + * @param {Array} preValues collection of prevalues on the datatype + * @param {Bool} isNew set to true if type should be create instead of updated + * @returns {Promise} resourcePromise object. + * + */ + save: function (dataType, preValues, isNew) { - var saveModel = umbDataFormatter.formatDataTypePostData(dataType, preValues, "save" + (isNew ? "New" : "")); + var saveModel = umbDataFormatter.formatDataTypePostData(dataType, preValues, "save" + (isNew ? "New" : "")); - return umbRequestHelper.resourcePromise( - $http.post(umbRequestHelper.getApiUrl("dataTypeApiBaseUrl", "PostSave"), saveModel), - "Failed to save data for data type id " + dataType.id); - }, + return umbRequestHelper.resourcePromise( + $http.post(umbRequestHelper.getApiUrl("dataTypeApiBaseUrl", "PostSave"), saveModel), + "Failed to save data for data type id " + dataType.id); + }, - /** - * @ngdoc method - * @name umbraco.resources.dataTypeResource#move - * @methodOf umbraco.resources.dataTypeResource - * - * @description - * Moves a node underneath a new parentId - * - * ##usage - *
-         * dataTypeResource.move({ parentId: 1244, id: 123 })
-         *    .then(function() {
-         *        alert("node was moved");
-         *    }, function(err){
-         *      alert("node didnt move:" + err.data.Message); 
-         *    });
-         * 
- * @param {Object} args arguments object - * @param {Int} args.idd the ID of the node to move - * @param {Int} args.parentId the ID of the parent node to move to - * @returns {Promise} resourcePromise object. - * - */ - move: function (args) { - if (!args) { - throw "args cannot be null"; - } - if (!args.parentId) { - throw "args.parentId cannot be null"; - } - if (!args.id) { - throw "args.id cannot be null"; - } + /** + * @ngdoc method + * @name umbraco.resources.dataTypeResource#move + * @methodOf umbraco.resources.dataTypeResource + * + * @description + * Moves a node underneath a new parentId + * + * ##usage + *
+     * dataTypeResource.move({ parentId: 1244, id: 123 })
+     *    .then(function() {
+     *        alert("node was moved");
+     *    }, function(err){
+     *      alert("node didnt move:" + err.data.Message); 
+     *    });
+     * 
+ * @param {Object} args arguments object + * @param {Int} args.id the ID of the node to move + * @param {Int} args.parentId the ID of the parent node to move to + * @returns {Promise} resourcePromise object. + * + */ + move: function (args) { + if (!args) { + throw "args cannot be null"; + } + if (!args.parentId) { + throw "args.parentId cannot be null"; + } + if (!args.id) { + throw "args.id cannot be null"; + } - return umbRequestHelper.resourcePromise( - $http.post(umbRequestHelper.getApiUrl("dataTypeApiBaseUrl", "PostMove"), - { - parentId: args.parentId, - id: args.id - }, { responseType: 'text' }), - 'Failed to move content'); - }, + return umbRequestHelper.resourcePromise( + $http.post(umbRequestHelper.getApiUrl("dataTypeApiBaseUrl", "PostMove"), + { + parentId: args.parentId, + id: args.id + }, { responseType: 'text' }), + 'Failed to move content'); + }, - createContainer: function (parentId, name) { + /** + * @ngdoc method + * @name umbraco.resources.dataTypeResource#copy + * @methodOf umbraco.resources.dataTypeResource + * + * @description + * Copies a node underneath a new parentId + * + * ##usage + *
+     * dataTypeResource.copy({ parentId: 1244, id: 123 })
+     *    .then(function() {
+     *        alert("node has been copied");
+     *    }, function(err){
+     *      alert("node didnt copy:" + err.data.Message);
+     *    });
+     * 
+ * @param {Object} args arguments object + * @param {Int} args.idd the ID of the node to copy + * @param {Int} args.parentId the ID of the parent node to copy to + * @returns {Promise} resourcePromise object. + * + */ + copy: function (args) { + if (!args) { + throw "args cannot be null"; + } + if (!args.parentId) { + throw "args.parentId cannot be null"; + } + if (!args.id) { + throw "args.id cannot be null"; + } - return umbRequestHelper.resourcePromise( - $http.post( - umbRequestHelper.getApiUrl( - "dataTypeApiBaseUrl", - "PostCreateContainer", - { parentId: parentId, name: encodeURIComponent(name) })), - 'Failed to create a folder under parent id ' + parentId); - }, + return umbRequestHelper.resourcePromise( + $http.post(umbRequestHelper.getApiUrl("dataTypeApiBaseUrl", "PostCopy"), + { + parentId: args.parentId, + id: args.id + }, { responseType: 'text' }), + 'Failed to copy content'); + }, + + createContainer: function (parentId, name) { + + return umbRequestHelper.resourcePromise( + $http.post( + umbRequestHelper.getApiUrl( + "dataTypeApiBaseUrl", + "PostCreateContainer", + { parentId: parentId, name: encodeURIComponent(name) })), + 'Failed to create a folder under parent id ' + parentId); + }, renameContainer: function (id, name) { return umbRequestHelper.resourcePromise( diff --git a/src/Umbraco.Web.UI.Client/src/views/dataTypes/copy.controller.js b/src/Umbraco.Web.UI.Client/src/views/dataTypes/copy.controller.js new file mode 100644 index 0000000000..3f7634b50b --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/views/dataTypes/copy.controller.js @@ -0,0 +1,62 @@ +angular.module("umbraco") + .controller("Umbraco.Editors.DataType.CopyController", + function ($scope, dataTypeResource, treeService, navigationService, appState) { + + $scope.dialogTreeApi = {}; + $scope.source = _.clone($scope.currentNode); + + function nodeSelectHandler(args) { + args.event.preventDefault(); + args.event.stopPropagation(); + + if ($scope.target) { + //un-select if there's a current one selected + $scope.target.selected = false; + } + + $scope.target = args.node; + $scope.target.selected = true; + } + + $scope.copy = function () { + + $scope.busy = true; + $scope.error = false; + + dataTypeResource.copy({ parentId: $scope.target.id, id: $scope.source.id }) + .then(function (path) { + $scope.error = false; + $scope.success = true; + $scope.busy = false; + + //get the currently edited node (if any) + var activeNode = appState.getTreeState("selectedNode"); + + //we need to do a double sync here: first sync to the copied content - but don't activate the node, + //then sync to the currenlty edited content (note: this might not be the content that was copied!!) + + navigationService.syncTree({ tree: "dataTypes", path: path, forceReload: true, activate: false }).then(function (args) { + if (activeNode) { + var activeNodePath = treeService.getPath(activeNode).join(); + //sync to this node now - depending on what was copied this might already be synced but might not be + navigationService.syncTree({ tree: "dataTypes", path: activeNodePath, forceReload: false, activate: true }); + } + }); + + }, function (err) { + $scope.success = false; + $scope.error = err; + $scope.busy = false; + + }); + }; + + $scope.onTreeInit = function () { + $scope.dialogTreeApi.callbacks.treeNodeSelect(nodeSelectHandler); + } + + $scope.close = function () { + navigationService.hideDialog(); + }; + + }); diff --git a/src/Umbraco.Web.UI.Client/src/views/dataTypes/copy.html b/src/Umbraco.Web.UI.Client/src/views/dataTypes/copy.html new file mode 100644 index 0000000000..64f815148b --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/views/dataTypes/copy.html @@ -0,0 +1,53 @@ +
+ +
+
+ +

+ Select the folder to copy {{source.name}} to in the tree structure below +

+ + + +
+
+
{{error.errorMsg}}
+
{{error.data.message}}
+
+
+ +
+
+ {{source.name}} was copied underneath {{target.name}} +
+ +
+ +
+ +
+ + +
+ +
+
+
+ + +
From 1024b26cec726caa5bf644d82e317545de61e9fe Mon Sep 17 00:00:00 2001 From: Bjarne Fyrstenborg Date: Fri, 19 Aug 2022 15:03:56 +0200 Subject: [PATCH 03/33] Fix umb-range-slider merging overlapping tooltips (#12777) * Formatting CSS using Less syntax * Fix merging overlapping tooltips from noUiSlider v15.5.0+ --- .../components/umbrangeslider.directive.js | 26 +++--- .../src/less/components/umb-range-slider.less | 92 ++++++++++--------- 2 files changed, 60 insertions(+), 58 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbrangeslider.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbrangeslider.directive.js index 233d5c2f7d..0c46ada020 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbrangeslider.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbrangeslider.directive.js @@ -249,15 +249,15 @@ For extra details about options and events take a look here: https://refreshless var isVertical = slider.noUiSlider.options.orientation === 'vertical'; var tooltips = slider.noUiSlider.getTooltips(); var origins = slider.noUiSlider.getOrigins(); - + // Move tooltips into the origin element. The default stylesheet handles this. - if(tooltips && tooltips.length !== 0){ - tooltips.forEach(function (tooltip, index) { - if (tooltip) { - origins[index].appendChild(tooltip); - } - }); - } + if(tooltips && tooltips.length !== 0){ + tooltips.forEach(function (tooltip, index) { + if (tooltip) { + origins[index].appendChild(tooltip); + } + }); + } slider.noUiSlider.on('update', function (values, handle, unencoded, tap, positions) { @@ -293,17 +293,17 @@ For extra details about options and events take a look here: https://refreshless for (var j = 0; j < handlesInPool; j++) { var handleNumber = pool[j]; - + if (j === handlesInPool - 1) { var offset = 0; - + poolPositions[poolIndex].forEach(function (value) { - offset += 1000 - 10 * value; + offset += 1000 - value; }); - + var direction = isVertical ? 'bottom' : 'right'; var last = isRtl ? 0 : handlesInPool - 1; - var lastOffset = 1000 - 10 * poolPositions[poolIndex][last]; + var lastOffset = 1000 - poolPositions[poolIndex][last]; offset = (textIsRtl && !isVertical ? 100 : 0) + (offset / handlesInPool) - lastOffset; // Filter to unique values diff --git a/src/Umbraco.Web.UI.Client/src/less/components/umb-range-slider.less b/src/Umbraco.Web.UI.Client/src/less/components/umb-range-slider.less index 57273a6a4e..44d69d3856 100644 --- a/src/Umbraco.Web.UI.Client/src/less/components/umb-range-slider.less +++ b/src/Umbraco.Web.UI.Client/src/less/components/umb-range-slider.less @@ -1,56 +1,58 @@ +.umb-range-slider { + &.noUi-target { + background: linear-gradient(to bottom, @grayLighter 0%, @grayLighter 100%); + box-shadow: none; + border-radius: 20px; + height: 8px; + border: 1px solid @inputBorder; -.umb-range-slider.noUi-target { - background: linear-gradient(to bottom, @grayLighter 0%, @grayLighter 100%); - box-shadow: none; - border-radius: 20px; - height: 8px; - border: 1px solid @inputBorder; - &:focus, &:focus-within { - border-color: @inputBorderFocus; + &:focus, &:focus-within { + border-color: @inputBorderFocus; + } } -} -.umb-range-slider .noUi-connects { - cursor: pointer; - height: 20px; - top: -6px; -} -.umb-range-slider .noUi-connect { - background-color: @purple-washed; - border: 1px solid @purple-l3; -} -.umb-range-slider .noUi-tooltip { - padding: 2px 6px; -} -.umb-range-slider .noUi-handle { - cursor: grab; - border-radius: 100px; - border: none; - box-shadow: none; - width: 20px !important; - height: 20px !important; - right: -10px !important; // half the handle width - background-color: @blueExtraDark; -} -.umb-range-slider .noUi-horizontal .noUi-handle { - top: -7px; -} + .noUi-connects { + cursor: pointer; + height: 20px; + top: -6px; + } -.umb-range-slider .noUi-handle::before { - display: none; -} + .noUi-connect { + background-color: @purple-washed; + border: 1px solid @purple-l3; + } -.umb-range-slider .noUi-handle::after { - display: none; -} + .noUi-tooltip { + padding: 2px 6px; + } -.umb-range-slider .noUi-marker-large.noUi-marker-horizontal { - height: 10px; -} + .noUi-handle { + cursor: grab; + border-radius: 100px; + border: none; + box-shadow: none; + width: 20px !important; + height: 20px !important; + right: -10px !important; // half the handle width + background-color: @blueExtraDark; -.umb-range-slider .noUi-marker.noUi-marker-horizontal { - width: 1px; + &::before, &::after { + display: none; + } + } + + .noUi-horizontal .noUi-handle { + top: -7px; + } + + .noUi-marker-large.noUi-marker-horizontal { + height: 10px; + } + + .noUi-marker.noUi-marker-horizontal { + width: 1px; + } } .noUi-value { From 753cf35d6b47110e538588d4bb03189955ba6341 Mon Sep 17 00:00:00 2001 From: Bjarne Fyrstenborg Date: Fri, 19 Aug 2022 15:07:55 +0200 Subject: [PATCH 04/33] Use umb-icon component in tracked references to support custom SVG icons (#12766) --- .../components/references/umb-tracked-references-table.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/components/references/umb-tracked-references-table.html b/src/Umbraco.Web.UI.Client/src/views/components/references/umb-tracked-references-table.html index d09bc23318..650b3da0b9 100644 --- a/src/Umbraco.Web.UI.Client/src/views/components/references/umb-tracked-references-table.html +++ b/src/Umbraco.Web.UI.Client/src/views/components/references/umb-tracked-references-table.html @@ -15,7 +15,7 @@
-
+
{{::reference.contentTypeName}}
{{::reference.type}}
From fa8bb3f1da34cd8508f64cd86bee91ae626eeb00 Mon Sep 17 00:00:00 2001 From: Mayur D Date: Tue, 23 Aug 2022 04:01:49 +0530 Subject: [PATCH 05/33] Fix #12770 (#12865) * change "umbraco" to "Umbraco" in translation files. * Replace "" and "" tag with "" and "" --- .../EmbeddedResources/Lang/cs.xml | 12 ++++---- .../EmbeddedResources/Lang/cy.xml | 20 ++++++------- .../EmbeddedResources/Lang/da.xml | 6 ++-- .../EmbeddedResources/Lang/en.xml | 20 ++++++------- .../EmbeddedResources/Lang/en_us.xml | 30 +++++++++---------- .../EmbeddedResources/Lang/es.xml | 2 +- .../EmbeddedResources/Lang/fr.xml | 8 ++--- .../EmbeddedResources/Lang/he.xml | 2 +- .../EmbeddedResources/Lang/it.xml | 16 +++++----- .../EmbeddedResources/Lang/ja.xml | 8 ++--- .../EmbeddedResources/Lang/ko.xml | 2 +- .../EmbeddedResources/Lang/nb.xml | 2 +- .../EmbeddedResources/Lang/nl.xml | 12 ++++---- .../EmbeddedResources/Lang/pt.xml | 2 +- .../EmbeddedResources/Lang/sv.xml | 2 +- .../EmbeddedResources/Lang/tr.xml | 12 ++++---- .../EmbeddedResources/Lang/zh.xml | 2 +- .../EmbeddedResources/Lang/zh_tw.xml | 4 +-- 18 files changed, 81 insertions(+), 81 deletions(-) diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/cs.xml b/src/Umbraco.Core/EmbeddedResources/Lang/cs.xml index 939b515eeb..29b242d67e 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/cs.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/cs.xml @@ -781,8 +781,8 @@ Stiskněte Následující pro pokračování. ]]> následující, pro pokračování konfiguračního průvodce]]> Heslo výchozího uživatele musí být změněno!]]> - Výchozí uživatel byl deaktivován, nebo nemá přístup k umbracu!

Netřeba nic dalšího dělat. Klikněte na Následující pro pokračování.]]> - Heslo výchozího uživatele bylo úspěšně změněno od doby instalace!

Netřeba nic dalšího dělat. Klikněte na Následující pro pokračování.]]> + Výchozí uživatel byl deaktivován, nebo nemá přístup k umbracu!

Netřeba nic dalšího dělat. Klikněte na Následující pro pokračování.]]> + Heslo výchozího uživatele bylo úspěšně změněno od doby instalace!

Netřeba nic dalšího dělat. Klikněte na Následující pro pokračování.]]> Heslo je změněno! Mějte skvělý start, sledujte naše uváděcí videa Není nainstalováno. @@ -797,7 +797,7 @@ Vaše nastavení oprávnění může být problém!

Můžete provozovat Umbraco bez potíží, ale nebudete smět vytvářet složky a instalovat balíčky, které jsou doporučené pro plné využívání všech možností umbraca.]]>
- Vaše nastavení oprívnění není připraveno pro umbraco! + Vaše nastavení oprívnění není připraveno pro Umbraco!

Abyste mohli Umbraco provozovat, budete muset aktualizovat Vaše nastavení oprávnění.]]>
Vaše nastavení oprávnění je dokonalé!

@@ -838,7 +838,7 @@ Krok 3/5: Ověřování oprávnění k souborům Krok 4/5: Kontrola zabezpečení umbraca Krok 5/5: Umbraco je připraveno a můžete začít - Děkujeme, že jeste si vybrali umbraco + Děkujeme, že jeste si vybrali Umbraco Prohlédněte si svůj nový web Nainstalovali jste Runway, tak proč se nepodívat, jak Váš nový web vypadá.]]> Další pomoc a informace @@ -1379,7 +1379,7 @@ Makro je konfigurovatelná součást, která je skvělá pro opakovaně použitelné části návrhu, kde potřebujete předat parametry, jako jsou galerie, formuláře a seznamy. - Vložit pole stránky umbraco + Vložit pole stránky Umbraco Zobrazuje hodnotu pojmenovaného pole z aktuální stránky s možnostmi upravit hodnotu nebo alternativní hodnoty. Částečná šablona @@ -2132,7 +2132,7 @@ Profilování výkonu Umbraco aktuálně běží v režimu ladění. To znamená, že můžete použít vestavěný profiler výkonu k vyhodnocení výkonu při vykreslování stránek.

Pokud chcete aktivovat profiler pro konkrétní vykreslení stránky, jednoduše při požadavku na stránku jednoduše přidejte umbDebug=true do URL.

Pokud chcete, aby byl profiler ve výchozím nastavení aktivován pro všechna vykreslení stránky, můžete použít přepínač níže. Ve vašem prohlížeči nastaví soubor cookie, který automaticky aktivuje profiler. Jinými slovy, profiler bude ve výchozím nastavení aktivní pouze ve vašem prohlížeči, ne v ostatních.

+

Umbraco aktuálně běží v režimu ladění. To znamená, že můžete použít vestavěný profiler výkonu k vyhodnocení výkonu při vykreslování stránek.

Pokud chcete aktivovat profiler pro konkrétní vykreslení stránky, jednoduše při požadavku na stránku jednoduše přidejte umbDebug=true do URL.

Pokud chcete, aby byl profiler ve výchozím nastavení aktivován pro všechna vykreslení stránky, můžete použít přepínač níže. Ve vašem prohlížeči nastaví soubor cookie, který automaticky aktivuje profiler. Jinými slovy, profiler bude ve výchozím nastavení aktivní pouze ve vašem prohlížeči, ne v ostatních.

]]>
Ve výchozím stavu aktivovat profiler diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/cy.xml b/src/Umbraco.Core/EmbeddedResources/Lang/cy.xml index d0c6a45d27..e34cc2ab29 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/cy.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/cy.xml @@ -449,13 +449,13 @@ Gweinyddu enwau gwesteia Cau'r ffenestr yma Ydych chi'n sicr eich bod eisiau dileu - %0%
yn seiliedig ar %1%]]> + %0% yn seiliedig ar %1%]]> Ydych chi'n sicr eich bod eisiau analluogi Wyt ti'n siŵr fod ti eisiau dileu - %0%]]> - %0%]]> + %0%]]> + %0%]]> Ydych chi'n sicr? Ydych chi'n sicr? @@ -546,8 +546,8 @@ Dewiswch ffurfweddiad Dewiswch damaid Bydd hyn yn dileu'r nod a'i holl ieithoedd. Os mai dim ond un iaith yr ydych am ei dileu, ewch i'w anghyhoedd yn lle. - %0%.]]> - %0% o'r grŵp %1%]]> + %0%.]]> + %0% o'r grŵp %1%]]> Ydw, dileu @@ -965,7 +965,7 @@ nesaf i barhau gyda'r dewin ffurfwedd]]> Mae angen newid cyfrinair y defnyddiwr Diofyn!]]> - Mae'r defnyddiwr Diofyn wedi'u analluogi neu does dim hawliau i Umbraco!

Does dim angen unrhyw weithredoedd pellach. Cliciwch Nesaf i barhau.]]> + Mae'r defnyddiwr Diofyn wedi'u analluogi neu does dim hawliau i Umbraco!

Does dim angen unrhyw weithredoedd pellach. Cliciwch Nesaf i barhau.]]> Mae cyfrinair y defnyddiwr Diofyn wedi'i newid yn llwyddiannus ers y gosodiad!

Does dim angen unrhyw weithredoedd pellach. Cliciwch Nesaf i barhau.]]> Mae'r cyfrinair wedi'i newid! Cewch gychwyn gwych, gwyliwch ein fideos rhaglith @@ -2695,12 +2695,12 @@ Er mwyn gweinyddu eich gwefan, agorwch swyddfa gefn Umbraco a dechreuwch ychwang Mae Umbraco yn rhedeg mewn modd dadfygio. Mae hyn yn golygu y gallwch chi ddefnyddio'r proffiliwr perfformiad adeiledig i asesu'r perfformiad wrth rendro tudalennau.

- OS ti eisiau actifadu'r proffiliwr am rendro tudalen penodol, bydd angen ychwanegu umbDebug=true i'r ymholiad wrth geisio am y tudalen + OS ti eisiau actifadu'r proffiliwr am rendro tudalen penodol, bydd angen ychwanegu umbDebug=true i'r ymholiad wrth geisio am y tudalen

Os ydych chi am i'r proffiliwr gael ei actifadu yn ddiofyn am bob rendrad tudalen, gallwch chi ddefnyddio'r togl isod. Bydd e'n gosod cwci yn eich porwr, sydd wedyn yn actifadu'r proffiliwr yn awtomatig. - Mewn geiriau eraill, bydd y proffiliwr dim ond yn actif yn ddiofyn yn eich porwr chi - nid porwr pawb eraill. + Mewn geiriau eraill, bydd y proffiliwr dim ond yn actif yn ddiofyn yn eich porwr chi - nid porwr pawb eraill.

]]>
@@ -2709,7 +2709,7 @@ Er mwyn gweinyddu eich gwefan, agorwch swyddfa gefn Umbraco a dechreuwch ychwang - Ni ddylech chi fyth adael i safle cynhyrchu redeg yn y modd dadfygio. Mae'r modd dadfygio yn gallu cael ei diffodd trwy ychwanegu'r gosodiad debug="false" ar yr elfen <grynhoi /> yn web.config. + Ni ddylech chi fyth adael i safle cynhyrchu redeg yn y modd dadfygio. Mae'r modd dadfygio yn gallu cael ei diffodd trwy ychwanegu'r gosodiad debug="false" ar yr elfen <grynhoi /> yn web.config.

]]>
@@ -2719,7 +2719,7 @@ Er mwyn gweinyddu eich gwefan, agorwch swyddfa gefn Umbraco a dechreuwch ychwang Mae Umbraco ddim yn rhedeg mewn modd dadfygio ar hyn o bryd, felly nid allwch chi ddefnyddio'r proffiliwer adeiledig. Dyma sut y dylai fod ar gyfer safle cynhyrchu.

- Mae'r modd dadfygio yn gallu cael ei throi arno gan ychwanegu'r gosodiad debug="true" ar yr elfen <grynhoi /> yn web.config. + Mae'r modd dadfygio yn gallu cael ei throi arno gan ychwanegu'r gosodiad debug="true" ar yr elfen <grynhoi /> yn web.config.

]]> diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/da.xml b/src/Umbraco.Core/EmbeddedResources/Lang/da.xml index b03fa9d884..93b0f95af2 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/da.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/da.xml @@ -465,7 +465,7 @@ Er du sikker på at du vil slette Er du sikker på du vil deaktivere Er du sikker på at du vil fjerne - %0%]]> + %0%]]> Er du sikker på at du vil forlade Umbraco? Er du sikker? Klip @@ -556,8 +556,8 @@ Dette vil slette noden og alle dets sprog. Hvis du kun vil slette et sprog, så afpublicér det i stedet. - %0%]]> - %0% fra gruppen]]> + %0%]]> + %0% fra %1% gruppen]]> Ja, fjern diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/en.xml b/src/Umbraco.Core/EmbeddedResources/Lang/en.xml index e6ba39eb17..0a8b03b115 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/en.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/en.xml @@ -469,10 +469,10 @@ Manage hostnames Close this window Are you sure you want to delete - %0% of %1% items]]> + %0% of %1% items]]> Are you sure you want to disable Are you sure you want to remove - %0%]]> + %0%]]> Are you sure? Are you sure? Cut @@ -564,8 +564,8 @@ This will delete the node and all its languages. If you only want to delete one language, you should unpublish the node in that language instead. - %0%.]]> - %0% from the %1% group]]> + %0%.]]> + %0% from the %1% group]]> Yes, remove You are deleting the layout Modifying layout will result in loss of data for any existing content that is based on this configuration. @@ -948,7 +948,7 @@ The Default users' password needs to be changed!]]> - The Default user has been disabled or has no access to Umbraco!

No further actions needs to be taken. Click Next to proceed.]]> + The Default user has been disabled or has no access to Umbraco!

No further actions needs to be taken. Click Next to proceed.]]> The Default user's password has been successfully changed since the installation!

No further actions needs to be taken. Click Next to proceed.]]> The password is changed! @@ -1873,7 +1873,7 @@ To manage your website, simply open the Umbraco backoffice and start adding cont Keep all versions newer than days Keep latest version per day for days Prevent cleanup - NOTE! The cleanup of historically content versions are disabled globally. These settings will not take effect before it is enabled.]]> + NOTE! The cleanup of historically content versions are disabled globally. These settings will not take effect before it is enabled.]]> Add language @@ -2611,12 +2611,12 @@ To manage your website, simply open the Umbraco backoffice and start adding cont Umbraco currently runs in debug mode. This means you can use the built-in performance profiler to assess the performance when rendering pages.

- If you want to activate the profiler for a specific page rendering, simply add umbDebug=true to the querystring when requesting the page. + If you want to activate the profiler for a specific page rendering, simply add umbDebug=true to the querystring when requesting the page.

If you want the profiler to be activated by default for all page renderings, you can use the toggle below. It will set a cookie in your browser, which then activates the profiler automatically. - In other words, the profiler will only be active by default in your browser - not everyone else's. + In other words, the profiler will only be active by default in your browser - not everyone else's.

]]>
@@ -2625,7 +2625,7 @@ To manage your website, simply open the Umbraco backoffice and start adding cont - You should never let a production site run in debug mode. Debug mode is turned off by setting Umbraco:CMS:Hosting:Debug to false in appsettings.json, appsettings.{Environment}.json or via an environment variable. + You should never let a production site run in debug mode. Debug mode is turned off by setting Umbraco:CMS:Hosting:Debug to false in appsettings.json, appsettings.{Environment}.json or via an environment variable.

]]>
@@ -2635,7 +2635,7 @@ To manage your website, simply open the Umbraco backoffice and start adding cont Umbraco currently does not run in debug mode, so you can't use the built-in profiler. This is how it should be for a production site.

- Debug mode is turned on by setting Umbraco:CMS:Hosting:Debug to true in appsettings.json, appsettings.{Environment}.json or via an environment variable. + Debug mode is turned on by setting Umbraco:CMS:Hosting:Debug to true in appsettings.json, appsettings.{Environment}.json or via an environment variable.

]]> diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml b/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml index 70aa1c2d5c..eba0feaa05 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml @@ -483,10 +483,10 @@ Name Close this window Are you sure you want to delete - %0% of %1% items]]> + %0% of %1% items]]> Are you sure you want to disable Are you sure you want to remove - %0%]]> + %0%]]> Are you sure? Are you sure? Cut @@ -579,8 +579,8 @@ This will delete the node and all its languages. If you only want to delete one language, you should unpublish the node in that language instead. - %0%.]]> - %0% from the %1% group]]> + %0%.]]> + %0% from the %1% group]]> Yes, remove You are deleting the layout Modifying layout will result in loss of data for any existing content that is based on this configuration. @@ -975,7 +975,7 @@ The Default users' password needs to be changed!]]> - The Default user has been disabled or has no access to Umbraco!

No further actions needs to be taken. Click Next to proceed.]]> + The Default user has been disabled or has no access to Umbraco!

No further actions needs to be taken. Click Next to proceed.]]> The Default user's password has been successfully changed since the installation!

No further actions needs to be taken. Click Next to proceed.]]> The password is changed! @@ -1947,7 +1947,7 @@ To manage your website, simply open the Umbraco backoffice and start adding cont Keep all versions newer than days Keep latest version per day for days Prevent cleanup - NOTE! The cleanup of historically content versions are disabled globally. These settings will not take effect before it is enabled.]]> + NOTE! The cleanup of historically content versions are disabled globally. These settings will not take effect before it is enabled.]]> Changing a data type with stored values is disabled. To allow this you can change the Umbraco:CMS:DataTypes:CanBeChanged setting in appsettings.json. @@ -2713,12 +2713,12 @@ To manage your website, simply open the Umbraco backoffice and start adding cont Umbraco currently runs in debug mode. This means you can use the built-in performance profiler to assess the performance when rendering pages.

- If you want to activate the profiler for a specific page rendering, simply add umbDebug=true to the querystring when requesting the page. + If you want to activate the profiler for a specific page rendering, simply add umbDebug=true to the querystring when requesting the page.

If you want the profiler to be activated by default for all page renderings, you can use the toggle below. It will set a cookie in your browser, which then activates the profiler automatically. - In other words, the profiler will only be active by default in your browser - not everyone else's. + In other words, the profiler will only be active by default in your browser - not everyone else's.

]]>
@@ -2727,7 +2727,7 @@ To manage your website, simply open the Umbraco backoffice and start adding cont - You should never let a production site run in debug mode. Debug mode is turned off by setting Umbraco:CMS:Hosting:Debug to false in appsettings.json, appsettings.{Environment}.json or via an environment variable. + You should never let a production site run in debug mode. Debug mode is turned off by setting Umbraco:CMS:Hosting:Debug to false in appsettings.json, appsettings.{Environment}.json or via an environment variable.

]]>
@@ -2737,7 +2737,7 @@ To manage your website, simply open the Umbraco backoffice and start adding cont Umbraco currently does not run in debug mode, so you can't use the built-in profiler. This is how it should be for a production site.

- Debug mode is turned on by setting Umbraco:CMS:Hosting:Debug to true in appsettings.json, appsettings.{Environment}.json or via an environment variable. + Debug mode is turned on by setting Umbraco:CMS:Hosting:Debug to true in appsettings.json, appsettings.{Environment}.json or via an environment variable.

]]> @@ -2906,22 +2906,22 @@ To manage your website, simply open the Umbraco backoffice and start adding cont
Aggregate data will be shared on a regular basis as well as learnings from these metrics.
Hopefully, you will help us collect some valuable data.
-
We WILL NOT collect any personal data such as content, code, user information, and all data will be fully anonymized. +
We WILL NOT collect any personal data such as content, code, user information, and all data will be fully anonymized. ]]> We will only send an anonymized site ID to let us know that the site exists. - We will send an anonymized site ID, umbraco version, and packages installed + We will send an anonymized site ID, Umbraco version, and packages installed -
  • Anonymized site ID, umbraco version, and packages installed.
  • +
  • Anonymized site ID, Umbraco version, and packages installed.
  • Number of: Root nodes, Content nodes, Macros, Media, Document Types, Templates, Languages, Domains, User Group, Users, Members, and Property Editors in use.
  • System information: Webserver, server OS, server framework, server OS language, and database provider.
  • Configuration settings: Modelsbuilder mode, if custom Umbraco path exists, ASP environment, and if you are in debug mode.
  • - We might change what we send on the Detailed level in the future. If so, it will be listed above. -
    By choosing "Detailed" you agree to current and future anonymized information being collected.
    + We might change what we send on the Detailed level in the future. If so, it will be listed above. +
    By choosing "Detailed" you agree to current and future anonymized information being collected.
    ]]>
    diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/es.xml b/src/Umbraco.Core/EmbeddedResources/Lang/es.xml index 2c64f3f9a6..3e59088ef9 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/es.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/es.xml @@ -601,7 +601,7 @@ Pincha en Próximo para continuar. ]]> próximo para continuar con el asistente de configuración]]> La contraseña del usuario por defecto debe ser cambiada]]> - El usuario por defecto ha sido deshabilitado o ha perdido el acceso a Umbraco!

    Pincha en Próximo para continuar.]]> + El usuario por defecto ha sido deshabilitado o ha perdido el acceso a Umbraco!

    Pincha en Próximo para continuar.]]> ¡La contraseña del usuario por defecto ha sido cambiada desde que se instaló!

    No hay que realizar ninguna tarea más. Pulsa Siguiente para proseguir.]]> ¡La contraseña se ha cambiado! Ten un buen comienzo, visita nuestros videos de introducción diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/fr.xml b/src/Umbraco.Core/EmbeddedResources/Lang/fr.xml index 9013a4473f..24d5f565e5 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/fr.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/fr.xml @@ -390,7 +390,7 @@ Nom Fermer cette fenêtre Êtes-vous certain(e) de vouloir supprimer - %0% des %1% éléments]]> + %0% des %1% éléments]]> Êtes-vous certain(e) de vouloir désactiver Êtes-vous certain(e)? Êtes-vous certain(e)? @@ -799,7 +799,7 @@ poursuivre. ]]> Suivant pour poursuivre la configuration]]> Le mot de passe par défaut doit être modifié !]]> - L'utilisateur par défaut a été désactivé ou n'a pas accès à Umbraco!

    Aucune autre action n'est requise. Cliquez sur Suivant pour poursuivre.]]> + L'utilisateur par défaut a été désactivé ou n'a pas accès à Umbraco!

    Aucune autre action n'est requise. Cliquez sur Suivant pour poursuivre.]]> Le mot de passe par défaut a été modifié avec succès depuis l'installation!

    Aucune autre action n'est requise. Cliquez sur Suivant pour poursuivre.]]> Le mot de passe a été modifié ! Pour bien commencer, regardez nos vidéos d'introduction @@ -2177,12 +2177,12 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à Umbraco est actuellement exécuté en mode debug. Cela signifie que vous pouvez utiliser le profileur de performances intégré pour évaluer les performance lors du rendu des pages.

    - Si vous souhaitez activer le profileur pour le rendu d'une page spécifique, ajoutez simplement umbDebug=true au querystring lorsque vous demandez la page. + Si vous souhaitez activer le profileur pour le rendu d'une page spécifique, ajoutez simplement umbDebug=true au querystring lorsque vous demandez la page.

    Si vous souhaitez que le profileur soit activé par défaut pour tous les rendus de pages, vous pouvez utiliser le bouton bascule ci-dessous. Cela créera un cookie dans votre browser, qui activera alors le profileur automatiquement. - En d'autres termes, le profileur ne sera activé par défaut que dans votre browser - pas celui des autres. + En d'autres termes, le profileur ne sera activé par défaut que dans votre browser - pas celui des autres.

    ]]>
    diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/he.xml b/src/Umbraco.Core/EmbeddedResources/Lang/he.xml index 0996c81ba0..c52961307d 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/he.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/he.xml @@ -366,7 +366,7 @@ proceed. ]]> next to continue the configuration wizard]]> The Default users’ password needs to be changed!]]> - The Default user has been disabled or has no access to Umbraco!

    No further actions needs to be taken. Click Next to proceed.]]> + The Default user has been disabled or has no access to Umbraco!

    No further actions needs to be taken. Click Next to proceed.]]> The Default user's password has been successfully changed since the installation!

    No further actions needs to be taken. Click Next to proceed.]]> הסיסמה שונתה! התחל מכאן, צפה בסרטוני ההדרכה עבור אומברקו diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/it.xml b/src/Umbraco.Core/EmbeddedResources/Lang/it.xml index 23bff095a3..cea82fc4e0 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/it.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/it.xml @@ -487,8 +487,8 @@ Sei sicuro di voler eliminare Sei sicuro di voler disabilitare Sei sicuro di voler rimuovere - %0%]]> - %0%]]> + %0%]]> + %0%]]> Taglia @@ -574,8 +574,8 @@ Seleziona snippet - %0%.]]> - %0% dal gruppo %1%]]> + %0%.]]> + %0% dal gruppo %1%]]> Si, rimuovi @@ -2767,12 +2767,12 @@ Per gestire il tuo sito web, è sufficiente aprire il backoffice di Umbraco e in 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 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. + In altre parole, il profiler sarà attivo per impostazione predefinita solo nel tuo browser, non in quello di tutti gli altri.

    ]]>
    @@ -2781,7 +2781,7 @@ Per gestire il tuo sito web, è sufficiente aprire il backoffice di Umbraco e in - 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. + 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.

    ]]>
    @@ -2791,7 +2791,7 @@ Per gestire il tuo sito web, è sufficiente aprire il backoffice di Umbraco e in 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. + La modalità di debug viene attivata impostando debug="true" nell'elemento <compilation /> in web.config.

    ]]> diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/ja.xml b/src/Umbraco.Core/EmbeddedResources/Lang/ja.xml index 2d4c80570b..bcf9e8c9a9 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/ja.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/ja.xml @@ -481,7 +481,7 @@ を押して続行してください。]]> 次へ をクリックして設定ウィザードを進めてください。]]> デフォルトユーザーのパスワードを変更する必要があります!]]> - デフォルトユーザーは無効化されているかUmbracoにアクセスできない状態になっています!

    これ以上のアクションは必要ありません。次へをクリックして続行してください。]]> + デフォルトユーザーは無効化されているかUmbracoにアクセスできない状態になっています!

    これ以上のアクションは必要ありません。次へをクリックして続行してください。]]> インストール後にデフォルトユーザーのパスワードが変更されています!

    これ以上のアクションは必要ありません。次へをクリックして続行してください。]]> パスワードは変更されました! 始めに、ビデオによる解説を見ましょう @@ -555,7 +555,7 @@ Runwayをインストールして作られた新しいウェブサイトがど Umbraco Version 3 Umbraco Version 4 見る - umbraco %0% の新規インストールまたは3.0からの更新について設定方法を案内します。 + Umbraco %0% の新規インストールまたは3.0からの更新について設定方法を案内します。

    "次へ"を押してウィザードを開始します。]]>
    @@ -849,9 +849,9 @@ Runwayをインストールして作られた新しいウェブサイトがど コンテンツ領域プレースホルダーの挿入 ディクショナリ アイテムを挿入 マクロの挿入 - umbraco ページフィールドの挿入 + Umbraco ページフィールドの挿入 マスターテンプレート - umbraco テンプレートタグのクイックガイド + Umbraco テンプレートタグのクイックガイド テンプレート diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/ko.xml b/src/Umbraco.Core/EmbeddedResources/Lang/ko.xml index 852d8765aa..6a20975bb1 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/ko.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/ko.xml @@ -357,7 +357,7 @@ 계속 진행하시려면 다음 을 누르세요. ]]> 다음을 클릭하시면 설정마법사를 계속 진행합니다.]]> 기본 사용자의 암호가 변경되어야 합니다!]]> - 기본 사용자가 비활성화되었거나 Umbraco에 접근할 수 없습니다!

    더 이상 과정이 필요없으시면 다음을 눌러주세요.]]> + 기본 사용자가 비활성화되었거나 Umbraco에 접근할 수 없습니다!

    더 이상 과정이 필요없으시면 다음을 눌러주세요.]]> 설치후 기본사용자의 암호가 성공적으로 변경되었습니다!

    더 이상 과정이 필요없으시면 다음을 눌러주세요.]]> 비밀번호가 변경되었습니다! 편리한 시작을 위해, 소개 Video를 시청하세요 diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/nb.xml b/src/Umbraco.Core/EmbeddedResources/Lang/nb.xml index 30d2da3e4f..87bcb3138a 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/nb.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/nb.xml @@ -420,7 +420,7 @@ Trykk Neste for å fortsette.]]> neste for å fortsette konfigurasjonsveiviseren]]> Passordet til standardbrukeren må endres!]]> - Standardbrukeren har blitt deaktivert eller har ingen tilgang til Umbraco!

    Ingen videre handling er nødvendig. Klikk neste for å fortsette.]]> + Standardbrukeren har blitt deaktivert eller har ingen tilgang til Umbraco!

    Ingen videre handling er nødvendig. Klikk neste for å fortsette.]]> Passordet til standardbrukeren har blitt forandret etter installasjonen!

    Ingen videre handling er nødvendig. Klikk Neste for å fortsette.]]> Passordet er blitt endret! Få en god start med våre introduksjonsvideoer diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/nl.xml b/src/Umbraco.Core/EmbeddedResources/Lang/nl.xml index 163fd14199..28793081b7 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/nl.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/nl.xml @@ -439,7 +439,7 @@ Weet je zeker dat je dit wilt verwijderen Weet je zeker dat je dit wilt uitschakelen Weet u zeker dat u wilt verwijderen - %0% wil verwijderen]]> + %0% wil verwijderen]]> Weet je het zeker? Weet je het zeker? Knippen @@ -529,8 +529,8 @@ Dit zal de node en al zijn talen verwijderen. Als je slechts één taal wil verwijderen, moet je de node in die taal depubliceren. - %0% verwijderen.]]> - %0% verwijderen van de %1% groep]]> + %0% verwijderen.]]> + %0% verwijderen van de %1% groep]]> Ja, verwijderen @@ -889,7 +889,7 @@ Het wachtwoord van de default gebruiker dient veranderd te worden!]]> - De default gebruiker is geblokkeerd of heeft geen toegang tot Umbraco!

    Geen verdere actie noodzakelijk. Klik Volgende om verder te gaan.]]> + De default gebruiker is geblokkeerd of heeft geen toegang tot Umbraco!

    Geen verdere actie noodzakelijk. Klik Volgende om verder te gaan.]]> Het wachtwoord van de default gebruiker is sinds installatie met succes veranderd.

    Geen verdere actie noodzakelijk. Klik Volgende om verder te gaan.]]> Het wachtwoord is veranderd! @@ -2399,12 +2399,12 @@ Echter, Runway biedt een gemakkelijke basis om je snel op weg te helpen. Als je Umbraco wordt uitgevoerd in de foutopsporingsmodus. Dit betekent dat u de ingebouwde prestatieprofiler kunt gebruiken om de prestaties te beoordelen bij het renderen van pagina's.

    - Als je de profiler voor een specifieke paginaweergave wilt activeren, voeg je umbDebug=true toe aan de querystring wanneer je de pagina opvraagt. + Als je de profiler voor een specifieke paginaweergave wilt activeren, voeg je umbDebug=true toe aan de querystring wanneer je de pagina opvraagt.

    Als je wil dat de profiler standaard wordt geactiveerd voor alle paginaweergaven, kun je de onderstaande schakelaar gebruiken. Het plaatst een cookie in je browser, die vervolgens de profiler automatisch activeert. - Met andere woorden, de profiler zal alleen voor jouw browser actief zijn, niet voor andere bezoekers. + Met andere woorden, de profiler zal alleen voor jouw browser actief zijn, niet voor andere bezoekers.

    ]]>
    diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/pt.xml b/src/Umbraco.Core/EmbeddedResources/Lang/pt.xml index 39d0cfc4a1..25060a4bd3 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/pt.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/pt.xml @@ -358,7 +358,7 @@ Pressione Próximo para prosseguir.]]> próximo para continuar com o assistente de configuração]]> A senha do usuário padrão precisa ser alterada!]]> - O usuário padrão foi desabilitado ou não tem acesso à Umbraco!

    Nenhuma ação posterior precisa ser tomada. Clique Próximo para prosseguir.]]> + O usuário padrão foi desabilitado ou não tem acesso à Umbraco!

    Nenhuma ação posterior precisa ser tomada. Clique Próximo para prosseguir.]]> A senha do usuário padrão foi alterada com sucesso desde a instalação!

    Nenhuma ação posterior é necessária. Clique Próximo para prosseguir.]]> Senha foi alterada! Comece com o pé direito, assista nossos vídeos introdutórios diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/sv.xml b/src/Umbraco.Core/EmbeddedResources/Lang/sv.xml index af3f157bf4..fa359fbbbc 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/sv.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/sv.xml @@ -493,7 +493,7 @@ Tryck Nästa för att fortsätta.]]> Nästa för att fortsätta med konfigurationsguiden]]> Lösenordet på standardanvändaren måste bytas!]]> - Standardanvändaren har avaktiverats eller har inte åtkomst till Umbraco!

    Du behöver inte göra något ytterligare här. Klicka Next för att fortsätta.]]> + Standardanvändaren har avaktiverats eller har inte åtkomst till Umbraco!

    Du behöver inte göra något ytterligare här. Klicka Next för att fortsätta.]]> Standardanvändarens lösenord har ändrats sedan installationen!

    Du behöver inte göra något ytterligare här. Klicka Nästa för att fortsätta.]]> Lösenordet är ändrat! Få en flygande start, kolla på våra introduktionsvideor diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/tr.xml b/src/Umbraco.Core/EmbeddedResources/Lang/tr.xml index 3ef3db0ad6..47549f5f40 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/tr.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/tr.xml @@ -393,7 +393,7 @@ Silmek istediğinizden emin misiniz Devre dışı bırakmak istediğinizden emin misiniz Kaldırmak istediğinizden emin misiniz - %0% kullanımını kaldırmak istediğinizden emin misiniz?]]> + %0% kullanımını kaldırmak istediğinizden emin misiniz?]]> Emin misiniz? Emin misiniz? Kes @@ -471,8 +471,8 @@ Düzenleyici seçin Snippet seçin Bu, düğümü ve tüm dillerini silecektir. Yalnızca bir dili silmek istiyorsanız, bunun yerine düğümü o dilde yayından kaldırmalısınız. - %0% kullanıcısını kaldıracaktır.]]> - %0% kullanıcısını %1% grubundan kaldıracak]]> + %0% kullanıcısını kaldıracaktır.]]> + %0% kullanıcısını %1% grubundan kaldıracak]]> Evet, kaldır @@ -818,7 +818,7 @@ ileri 'yi tıklayın]]> Varsayılan kullanıcıların şifresinin değiştirilmesi gerekiyor! ]]> - Varsayılan kullanıcı devre dışı bırakıldı veya Umbraco'ya erişimi yok!

    Başka işlem yapılmasına gerek yok. Devam etmek için İleri 'yi tıklayın.]]> + Varsayılan kullanıcı devre dışı bırakıldı veya Umbraco'ya erişimi yok!

    Başka işlem yapılmasına gerek yok. Devam etmek için İleri 'yi tıklayın.]]> Varsayılan kullanıcının şifresi kurulumdan bu yana başarıyla değiştirildi!

    Başka işlem yapılmasına gerek yok. Devam etmek için İleri 'yi tıklayın.]]> Şifre değiştirildi! Harika bir başlangıç ​​yapın, tanıtım videolarımızı izleyin @@ -2289,12 +2289,12 @@ Web sitenizi yönetmek için, Umbraco'nun arka ofisini açın ve içerik eklemey Umbraco şu anda hata ayıklama modunda çalışıyor. Bu, sayfaları işlerken performansı değerlendirmek için yerleşik performans profilleyicisini kullanabileceğiniz anlamına gelir.

    - Profil oluşturucuyu belirli bir sayfa oluşturma için etkinleştirmek istiyorsanız, sayfayı talep ederken sorgu dizesine umbDebug=true eklemeniz yeterlidir. + Profil oluşturucuyu belirli bir sayfa oluşturma için etkinleştirmek istiyorsanız, sayfayı talep ederken sorgu dizesine umbDebug=true eklemeniz yeterlidir.

    Profilcinin tüm sayfa görüntülemeleri için varsayılan olarak etkinleştirilmesini istiyorsanız, aşağıdaki geçişi kullanabilirsiniz. Tarayıcınızda, profil oluşturucuyu otomatik olarak etkinleştiren bir çerez ayarlayacaktır. - Başka bir deyişle, profil oluşturucu yalnızca tarayıcınızda varsayılan olarak etkin olacaktır - diğer herkesin değil. + Başka bir deyişle, profil oluşturucu yalnızca tarayıcınızda varsayılan olarak etkin olacaktır - diğer herkesin değil.

    ]]>
    diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/zh.xml b/src/Umbraco.Core/EmbeddedResources/Lang/zh.xml index d8132c151b..5d9a6e9ab3 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/zh.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/zh.xml @@ -501,7 +501,7 @@ 点击下一步继续。]]> 下一步继续]]> 需要修改默认密码!]]> - 默认账户已禁用或无权访问系统!

    点击下一步继续。]]> + 默认账户已禁用或无权访问系统!

    点击下一步继续。]]> 安装过程中默认用户密码已更改

    点击下一步继续。]]> 密码已更改 作为入门者,从视频教程开始吧! diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/zh_tw.xml b/src/Umbraco.Core/EmbeddedResources/Lang/zh_tw.xml index 216dc3d0fe..b3e3b7bdcf 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/zh_tw.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/zh_tw.xml @@ -493,8 +493,8 @@ 點選下一步繼續。]]> 下一步繼續設定精靈。]]> 預設使用者的密碼必須更改!]]> - 預設使用者已經被暫停或沒有Umbraco的使用權!

    不需更多的操作步驟。點選下一步繼續。]]> - 安裝後預設使用者的密碼已經成功修改!

    不需更多的操作步驟。點選下一步繼續。]]> + 預設使用者已經被暫停或沒有Umbraco的使用權!

    不需更多的操作步驟。點選下一步繼續。]]> + 安裝後預設使用者的密碼已經成功修改!

    不需更多的操作步驟。點選下一步繼續。]]> 密碼已更改 作為入門者,從視頻教程開始吧! 安裝失敗。 From 523aa6c12e19163747b9f479451eaa10680bc617 Mon Sep 17 00:00:00 2001 From: Warren Buckley Date: Tue, 23 Aug 2022 13:12:45 +0100 Subject: [PATCH 06/33] V10 Fixup GitHub CodeSpaces / VSCode Remote Container (#12882) * Remove SQL Server part of the CodeSpace - we have SQLite to use * Update to use .NET 6 and simplified docker stuff https://github.com/microsoft/vscode-dev-containers/ * Need to set the SQLite Connection string env variable * Path to SLN has changed to the root of the repo * Fix up launch and VSCode tasks --- .devcontainer/Dockerfile | 39 +++-------- .devcontainer/devcontainer.json | 30 ++------- .devcontainer/docker-compose.yml | 25 ++------ .devcontainer/library-scripts/azcli-debian.sh | 33 ---------- .devcontainer/mssql/BlankDb.sql | 11 ---- .devcontainer/mssql/installSQLtools.sh | 16 ----- .devcontainer/mssql/postCreateCommand.sh | 64 ------------------- .vscode/launch.json | 5 +- .vscode/tasks.json | 3 +- 9 files changed, 23 insertions(+), 203 deletions(-) delete mode 100644 .devcontainer/library-scripts/azcli-debian.sh delete mode 100644 .devcontainer/mssql/BlankDb.sql delete mode 100644 .devcontainer/mssql/installSQLtools.sh delete mode 100644 .devcontainer/mssql/postCreateCommand.sh diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 0f5a12b34b..a6303468cc 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,36 +1,15 @@ -# [Choice] .NET Core version: 5.0, 3.1, 2.1 -ARG VARIANT=3.1 -FROM mcr.microsoft.com/vscode/devcontainers/dotnetcore:0-${VARIANT} +# [Choice] .NET version: 6.0, 3.1, 6.0-bullseye, 3.1-bullseye, 6.0-focal, 3.1-focal +ARG VARIANT=6.0-bullseye +FROM mcr.microsoft.com/vscode/devcontainers/dotnet:0-${VARIANT} -# [Option] Install Node.js -ARG INSTALL_NODE="true" -ARG NODE_VERSION="lts/*" -RUN if [ "${INSTALL_NODE}" = "true" ]; then su vscode -c "umask 0002 && . /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"; fi - -# [Option] Install Azure CLI -ARG INSTALL_AZURE_CLI="false" -COPY library-scripts/azcli-debian.sh /tmp/library-scripts/ -RUN if [ "$INSTALL_AZURE_CLI" = "true" ]; then bash /tmp/library-scripts/azcli-debian.sh; fi \ - && apt-get clean -y && rm -rf /var/lib/apt/lists/* /tmp/library-scripts - -# Install SQL Tools: SQLPackage and sqlcmd -COPY mssql/installSQLtools.sh installSQLtools.sh -RUN bash ./installSQLtools.sh \ - && apt-get clean -y && rm -rf /var/lib/apt/lists/* /tmp/library-scripts - -# Update args in docker-compose.yaml to set the UID/GID of the "vscode" user. -ARG USER_UID=1000 -ARG USER_GID=$USER_UID -RUN if [ "$USER_GID" != "1000" ] || [ "$USER_UID" != "1000" ]; then groupmod --gid $USER_GID vscode && usermod --uid $USER_UID --gid $USER_GID vscode; fi +# [Choice] Node.js version: none, lts/*, 18, 16, 14 +ARG NODE_VERSION="none" +RUN if [ "${NODE_VERSION}" != "none" ]; then su vscode -c "umask 0002 && . /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"; fi # [Optional] Uncomment this section to install additional OS packages. -# Following added by Warren... -# Needed to add as Gifsicle used by gulp-imagemin does not ship a Linux binary and has to be compiled from source -# And this Linux package is needed in order to build it -# https://github.com/imagemin/imagemin-gifsicle/issues/40#issuecomment-616487214 -RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ - && apt-get -y install --no-install-recommends dh-autoreconf chromium-browser +# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ +# && apt-get -y install --no-install-recommends # [Optional] Uncomment this line to install global node packages. # RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && npm install -g " 2>&1 @@ -42,7 +21,7 @@ RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ # Needing to set unsafe-perm as root is the user setup # https://docs.npmjs.com/cli/v6/using-npm/config#unsafe-perm # Default: false if running as root, true otherwise (we are ROOT) -RUN npm -g config set user vscode && npm -g config set unsafe-perm +#RUN npm -g config set user vscode && npm -g config set unsafe-perm # Generate and trust a local developer certificate for Kestrel # This is needed for Kestrel to bind on https diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index dfda3a4f94..4b1f593281 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,26 +1,13 @@ // For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: -// https://github.com/microsoft/vscode-dev-containers/tree/v0.158.0/containers/dotnet-mssql +// https://github.com/microsoft/vscode-dev-containers/tree/main/containers/dotnet { - "name": "C# (.NET) and MS SQL", + "name": "C# (.NET) Umbraco & SMTP4Dev", "dockerComposeFile": "docker-compose.yml", "service": "app", "workspaceFolder": "/workspace", - + // Set *default* container specific settings.json values on container create. - "settings": { - "terminal.integrated.shell.linux": "/bin/bash", - "mssql.connections": [ - { - "server": "localhost,1433", - "database": "", - "authenticationType": "SqlLogin", - "user": "sa", - "password": "P@ssw0rd", - "emptyPasswordInput": false, - "savePassword": false, - "profileName": "mssql-container" - } - ], + "settings": { "omnisharp.defaultLaunchSolution": "umbraco.sln", "omnisharp.enableDecompilationSupport": true, "omnisharp.enableRoslynAnalyzers": true @@ -28,14 +15,11 @@ // Add the IDs of extensions you want installed when the container is created. "extensions": [ - "ms-dotnettools.csharp", - "ms-mssql.mssql" + "ms-dotnettools.csharp" ], // Use 'forwardPorts' to make a list of ports inside the container available locally. - // 1433 for SQL if you want to connect from local into the one running inside the container - // Can connect to the SQL Server running in the image on local with 'host.docker.internal' as hostname - "forwardPorts": [1433, 9000, 5000, 25], + "forwardPorts": [9000, 5000, 25] // [Optional] To reuse of your local HTTPS dev cert: // @@ -56,6 +40,4 @@ // 2. Drag ~/.aspnet/https/aspnetapp.pfx into the root of the file explorer // 3. Open a terminal in VS Code and run "mkdir -p /home/vscode/.aspnet/https && mv aspnetapp.pfx /home/vscode/.aspnet/https" - // postCreateCommand.sh parameters: $1=SA password, $2=dacpac path, $3=sql script(s) path - "postCreateCommand": "bash .devcontainer/mssql/postCreateCommand.sh 'P@ssw0rd' './bin/Debug/' './.devcontainer/mssql/'" } diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml index e88327b779..a071d3a1b8 100644 --- a/.devcontainer/docker-compose.yml +++ b/.devcontainer/docker-compose.yml @@ -6,15 +6,10 @@ services: context: . dockerfile: Dockerfile args: - # [Choice] Update 'VARIANT' to pick a .NET Core version: 2.1, 3.1, 5.0 - VARIANT: 5.0 + # [Choice] .NET version: 6.0, 3.1, 6.0-bullseye, 3.1-bullseye, 6.0-focal, 3.1-focal + VARIANT: 6.0-bullseye # Options - INSTALL_NODE: "true" NODE_VERSION: "lts/*" - INSTALL_AZURE_CLI: "false" - # On Linux, you may need to update USER_UID and USER_GID below if not your local UID is not 1000. - USER_UID: 1000 - USER_GID: 1000 volumes: - ..:/workspace:cached @@ -22,9 +17,6 @@ services: # Overrides default command so things don't shut down after the process ends. command: sleep infinity - # Runs app on the same network as the database container, allows "forwardPorts" in devcontainer.json function. - network_mode: service:db - # Uncomment the next line to use a non-root user for all processes. # user: vscode @@ -34,7 +26,8 @@ services: # DotNetCore ENV Variables # https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-5.0#environment-variables environment: - - ConnectionStrings__umbracoDbDSN=server=localhost;database=UmbracoUnicore;user id=sa;password='P@ssw0rd' + - ConnectionStrings__umbracoDbDSN=Data Source=|DataDirectory|/Umbraco.sqlite.db;Cache=Shared;Foreign Keys=True;Pooling=True + - ConnectionStrings__umbracoDbDSN_ProviderName=Microsoft.Data.Sqlite - Umbraco__CMS__Unattended__InstallUnattended=true - Umbraco__CMS__Unattended__UnattendedUserName=Admin - Umbraco__CMS__Unattended__UnattendedUserEmail=test@umbraco.com @@ -43,16 +36,6 @@ services: - Umbraco__CMS__Global__Smtp__Port=25 - Umbraco__CMS__Global__Smtp__From=noreply@umbraco.test - db: - image: mcr.microsoft.com/mssql/server:2019-latest - restart: unless-stopped - environment: - SA_PASSWORD: P@ssw0rd - ACCEPT_EULA: Y - - # Add "forwardPorts": ["1433"] to **devcontainer.json** to forward MSSQL locally. - # (Adding the "ports" property to this file will not forward from a Codespace.) - smtp4dev: image: rnwood/smtp4dev:v3 restart: always diff --git a/.devcontainer/library-scripts/azcli-debian.sh b/.devcontainer/library-scripts/azcli-debian.sh deleted file mode 100644 index b03dcb0f04..0000000000 --- a/.devcontainer/library-scripts/azcli-debian.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env bash -#------------------------------------------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See https://go.microsoft.com/fwlink/?linkid=2090316 for license information. -#------------------------------------------------------------------------------------------------------------- -# -# Docs: https://github.com/microsoft/vscode-dev-containers/blob/master/script-library/docs/azcli.md -# -# Syntax: ./azcli-debian.sh - -set -e - -if [ "$(id -u)" -ne 0 ]; then - echo -e 'Script must be run as root. Use sudo, su, or add "USER root" to your Dockerfile before running this script.' - exit 1 -fi - -export DEBIAN_FRONTEND=noninteractive - -# Install curl, apt-transport-https, lsb-release, or gpg if missing -if ! dpkg -s apt-transport-https curl ca-certificates lsb-release > /dev/null 2>&1 || ! type gpg > /dev/null 2>&1; then - if [ ! -d "/var/lib/apt/lists" ] || [ "$(ls /var/lib/apt/lists/ | wc -l)" = "0" ]; then - apt-get update - fi - apt-get -y install --no-install-recommends apt-transport-https curl ca-certificates lsb-release gnupg2 -fi - -# Install the Azure CLI -echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ $(lsb_release -cs) main" > /etc/apt/sources.list.d/azure-cli.list -curl -sL https://packages.microsoft.com/keys/microsoft.asc | (OUT=$(apt-key add - 2>&1) || echo $OUT) -apt-get update -apt-get install -y azure-cli -echo "Done!" \ No newline at end of file diff --git a/.devcontainer/mssql/BlankDb.sql b/.devcontainer/mssql/BlankDb.sql deleted file mode 100644 index 44546efebf..0000000000 --- a/.devcontainer/mssql/BlankDb.sql +++ /dev/null @@ -1,11 +0,0 @@ -/* - This will generate a blank database when the container is spun up - that you can use to connect to for the SQL configuration in the web installer flow - - ---- NOTE ---- - Any .sql files in this folder will be executed - Along with any .dacpac will be restored as databases - See postCreateCommand.sh for specifics -*/ -CREATE DATABASE UmbracoUnicore; -GO \ No newline at end of file diff --git a/.devcontainer/mssql/installSQLtools.sh b/.devcontainer/mssql/installSQLtools.sh deleted file mode 100644 index 3fa6a67a09..0000000000 --- a/.devcontainer/mssql/installSQLtools.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash -set -echo -echo "Installing mssql-tools" -curl -sSL https://packages.microsoft.com/keys/microsoft.asc | (OUT=$(apt-key add - 2>&1) || echo $OUT) -DISTRO=$(lsb_release -is | tr '[:upper:]' '[:lower:]') -CODENAME=$(lsb_release -cs) -echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-${DISTRO}-${CODENAME}-prod ${CODENAME} main" > /etc/apt/sources.list.d/microsoft.list -apt-get update -ACCEPT_EULA=Y apt-get -y install unixodbc-dev msodbcsql17 libunwind8 mssql-tools - -echo "Installing sqlpackage" -curl -sSL -o sqlpackage.zip "https://aka.ms/sqlpackage-linux" -mkdir /opt/sqlpackage -unzip sqlpackage.zip -d /opt/sqlpackage -rm sqlpackage.zip -chmod a+x /opt/sqlpackage/sqlpackage diff --git a/.devcontainer/mssql/postCreateCommand.sh b/.devcontainer/mssql/postCreateCommand.sh deleted file mode 100644 index e25583e0ff..0000000000 --- a/.devcontainer/mssql/postCreateCommand.sh +++ /dev/null @@ -1,64 +0,0 @@ -#!/bin/bash -dacpac="false" -sqlfiles="false" -SApassword=$1 -dacpath=$2 -sqlpath=$3 - -echo "SELECT * FROM SYS.DATABASES" | dd of=testsqlconnection.sql -for i in {1..60}; -do - /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P $SApassword -d master -i testsqlconnection.sql > /dev/null - if [ $? -eq 0 ] - then - echo "SQL server ready" - break - else - echo "Not ready yet..." - sleep 1 - fi -done -rm testsqlconnection.sql - -for f in $dacpath/* -do - if [ $f == $dacpath/*".dacpac" ] - then - dacpac="true" - echo "Found dacpac $f" - fi -done - -for f in $sqlpath/* -do - if [ $f == $sqlpath/*".sql" ] - then - sqlfiles="true" - echo "Found SQL file $f" - fi -done - -if [ $sqlfiles == "true" ] -then - for f in $sqlpath/* - do - if [ $f == $sqlpath/*".sql" ] - then - echo "Executing $f" - /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P $SApassword -d master -i $f - fi - done -fi - -if [ $dacpac == "true" ] -then - for f in $dacpath/* - do - if [ $f == $dacpath/*".dacpac" ] - then - dbname=$(basename $f ".dacpac") - echo "Deploying dacpac $f" - /opt/sqlpackage/sqlpackage /Action:Publish /SourceFile:$f /TargetServerName:localhost /TargetDatabaseName:$dbname /TargetUser:sa /TargetPassword:$SApassword - fi - done -fi \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json index ab97269d1f..65a3d08583 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -9,9 +9,8 @@ "type": "coreclr", "request": "launch", "preLaunchTask": "Dotnet build", - // If you have changed target frameworks, make sure to update the program path. - "program": "${workspaceFolder}/src/Umbraco.Web.UI/bin/Debug/net5.0/Umbraco.Web.UI.dll", - "args": [], + "program": "dotnet", + "args": ["run"], "cwd": "${workspaceFolder}/src/Umbraco.Web.UI", "stopAtEntry": false, "requireExactSource": false, diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 99876bc77e..b8f058c18a 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -54,7 +54,7 @@ "type": "process", "args": [ "build", - "${workspaceFolder}/src/umbraco.sln", + "${workspaceFolder}/umbraco.sln", "/property:GenerateFullPaths=true", "/consoleloggerparameters:NoSummary" ], @@ -69,6 +69,7 @@ "args": [ "watch", "run", + "--project", "${workspaceFolder}/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj", "/property:GenerateFullPaths=true", "/consoleloggerparameters:NoSummary" From 2431a21de16deeefca9649a3ed84b689c72d0099 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Wed, 24 Aug 2022 16:17:56 +0200 Subject: [PATCH 07/33] V10/bugfix/variant permissions segments (#12890) * Remove null check from MapperContext.SetCulture and .SetSegment We need to be able to set these to null, since null = invariant / default segment * show segment label on property * Add ContentVariation to ContentPropertyDisplay * Add ContentVariation to DocumentTypeDisplay * Change variations to be on ContentTypeBasic.cs * don't cache value * show correct label and unlock text for culture and segment variations * make lock overlay take up less space Co-authored-by: nikolajlauridsen Co-authored-by: Zeegaan --- .../EmbeddedResources/Lang/en_us.xml | 6 ++++- .../ContentEditing/ContentPropertyDisplay.cs | 3 +++ .../Models/ContentEditing/ContentTypeBasic.cs | 3 +++ .../ContentEditing/DocumentTypeDisplay.cs | 3 +++ .../Mapping/ContentPropertyDisplayMapper.cs | 3 +++ .../Mapping/ContentTypeMapDefinition.cs | 4 +++ .../Models/Mapping/MapperContextExtensions.cs | 16 ++--------- .../content/umbtabbedcontent.directive.js | 6 +---- .../property/umbproperty.directive.js | 1 + .../property/umbpropertyeditor.directive.js | 11 ++++++++ .../less/components/umb-property-editor.less | 2 +- .../src/less/components/umb-property.less | 22 ++++++++++----- .../content/umb-tabbed-content.html | 6 +++-- .../property/umb-property-editor.html | 11 ++++++-- .../components/property/umb-property.html | 27 ++++++++++++++++--- 15 files changed, 89 insertions(+), 35 deletions(-) diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml b/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml index eba0feaa05..88030198a3 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml @@ -1967,7 +1967,11 @@ To manage your website, simply open the Umbraco backoffice and start adding cont Fall back language none - %0% is shared across all languages.]]> + %0% is shared across languages and segments.]]> + %0% is shared across all languages.]]> + %0% is shared across all segments.]]> + Shared: Languages + Shared: Segments Add parameter diff --git a/src/Umbraco.Core/Models/ContentEditing/ContentPropertyDisplay.cs b/src/Umbraco.Core/Models/ContentEditing/ContentPropertyDisplay.cs index d0f2b9aed6..9368de8ce1 100644 --- a/src/Umbraco.Core/Models/ContentEditing/ContentPropertyDisplay.cs +++ b/src/Umbraco.Core/Models/ContentEditing/ContentPropertyDisplay.cs @@ -15,6 +15,9 @@ public class ContentPropertyDisplay : ContentPropertyBasic Validation = new PropertyTypeValidation(); } + [DataMember(Name = "variations")] + public ContentVariation Variations { get; set; } + [DataMember(Name = "label", IsRequired = true)] [Required] public string? Label { get; set; } diff --git a/src/Umbraco.Core/Models/ContentEditing/ContentTypeBasic.cs b/src/Umbraco.Core/Models/ContentEditing/ContentTypeBasic.cs index 90dd6ce5c9..0ba344f7fc 100644 --- a/src/Umbraco.Core/Models/ContentEditing/ContentTypeBasic.cs +++ b/src/Umbraco.Core/Models/ContentEditing/ContentTypeBasic.cs @@ -42,6 +42,9 @@ public class ContentTypeBasic : EntityBasic [DataMember(Name = "thumbnail")] public string? Thumbnail { get; set; } + [DataMember(Name = "variations")] + public ContentVariation Variations { get; set; } + ///

    /// Returns true if the icon represents a CSS class instead of a file path /// diff --git a/src/Umbraco.Core/Models/ContentEditing/DocumentTypeDisplay.cs b/src/Umbraco.Core/Models/ContentEditing/DocumentTypeDisplay.cs index 3c292a7e6a..110ab98547 100644 --- a/src/Umbraco.Core/Models/ContentEditing/DocumentTypeDisplay.cs +++ b/src/Umbraco.Core/Models/ContentEditing/DocumentTypeDisplay.cs @@ -16,6 +16,9 @@ public class DocumentTypeDisplay : ContentTypeCompositionDisplay AllowedTemplates { get; set; } + [DataMember(Name = "variations")] + public ContentVariation Variations { get; set; } + [DataMember(Name = "defaultTemplate")] public EntityBasic? DefaultTemplate { get; set; } diff --git a/src/Umbraco.Core/Models/Mapping/ContentPropertyDisplayMapper.cs b/src/Umbraco.Core/Models/Mapping/ContentPropertyDisplayMapper.cs index eb6c6d92e0..22407219eb 100644 --- a/src/Umbraco.Core/Models/Mapping/ContentPropertyDisplayMapper.cs +++ b/src/Umbraco.Core/Models/Mapping/ContentPropertyDisplayMapper.cs @@ -56,6 +56,9 @@ internal class ContentPropertyDisplayMapper : ContentPropertyBasicMapper c.SortOrder).Select(x => x.Id.Value); target.CompositeContentTypes = source.ContentTypeComposition.Select(x => x.Alias); target.LockedCompositeContentTypes = MapLockedCompositions(source); + target.Variations = source.Variations; } // no MapAll - relies on the non-generic method @@ -794,6 +797,7 @@ public class ContentTypeMapDefinition : IMapDefinition : _hostingEnvironment.ToAbsolute("~/umbraco/images/thumbnails/" + source.Thumbnail); target.Trashed = source.Trashed; target.Udi = source.Udi; + target.Variations = source.Variations; } // no MapAll - relies on the non-generic method diff --git a/src/Umbraco.Core/Models/Mapping/MapperContextExtensions.cs b/src/Umbraco.Core/Models/Mapping/MapperContextExtensions.cs index 70d4826ab6..c8637c3042 100644 --- a/src/Umbraco.Core/Models/Mapping/MapperContextExtensions.cs +++ b/src/Umbraco.Core/Models/Mapping/MapperContextExtensions.cs @@ -26,24 +26,12 @@ public static class MapperContextExtensions /// /// Sets a context culture. /// - public static void SetCulture(this MapperContext context, string? culture) - { - if (culture is not null) - { - context.Items[CultureKey] = culture; - } - } + public static void SetCulture(this MapperContext context, string? culture) => context.Items[CultureKey] = culture; /// /// Sets a context segment. /// - public static void SetSegment(this MapperContext context, string? segment) - { - if (segment is not null) - { - context.Items[SegmentKey] = segment; - } - } + public static void SetSegment(this MapperContext context, string? segment) => context.Items[SegmentKey] = segment; /// /// Get included properties. diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/content/umbtabbedcontent.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/content/umbtabbedcontent.directive.js index b91baa16c0..4eefa5176d 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/content/umbtabbedcontent.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/content/umbtabbedcontent.directive.js @@ -189,10 +189,6 @@ return false; } - if (property.$propertyEditorDisabledCache) { - return property.$propertyEditorDisabledCache; - } - var contentLanguage = $scope.content.language; var otherCreatedVariants = $scope.contentNodeModel.variants.filter(x => x.compositeId !== $scope.content.compositeId && (x.state !== "NotCreated" || x.name !== null)).length === 0; @@ -205,7 +201,7 @@ var canEditSegment = property.segment === $scope.content.segment; - return property.$propertyEditorDisabledCache = !canEditCulture || !canEditSegment; + return !canEditCulture || !canEditSegment; } } diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/property/umbproperty.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/property/umbproperty.directive.js index 25e55455db..702cd5aeda 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/property/umbproperty.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/property/umbproperty.directive.js @@ -19,6 +19,7 @@ }, bindings: { property: "=", + node: "<", elementKey: "@", // optional, if set this will be used for the property alias validation path (hack required because NC changes the actual property.alias :/) propertyAlias: "@", diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/property/umbpropertyeditor.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/property/umbpropertyeditor.directive.js index cc9f36852a..2d1ff762d5 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/property/umbpropertyeditor.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/property/umbpropertyeditor.directive.js @@ -11,6 +11,7 @@ function umbPropEditor(umbPropEditorHelper, localizationService) { return { scope: { model: "=", + node: "<", isPreValue: "@", preview: "<", allowUnlock: " 1 && !property.culture" + show-inherit="contentNodeModel.variants.length > 1 && property.variation !== 'CultureAndSegment'" inherits-from="defaultVariant.displayName"> - +
    - + + + + + + + +
    diff --git a/src/Umbraco.Web.UI.Client/src/views/components/property/umb-property.html b/src/Umbraco.Web.UI.Client/src/views/components/property/umb-property.html index 40666133b2..8d0087b395 100644 --- a/src/Umbraco.Web.UI.Client/src/views/components/property/umb-property.html +++ b/src/Umbraco.Web.UI.Client/src/views/components/property/umb-property.html @@ -28,10 +28,31 @@
    -
    - - {{ vm.property.culture }} +
    + + + + + + + + + + + {{ vm.property.culture }} + + + + + + + + {{ vm.property.segment }} + Default + +
    +
    From 0f3feb17730a9521d505bad1fb59027903078d1b Mon Sep 17 00:00:00 2001 From: Mikael Lindemann <359941+mikaellindemann@users.noreply.github.com> Date: Thu, 25 Aug 2022 00:47:43 +0200 Subject: [PATCH 08/33] #12802 Fix partial view model type replacements (#12831) --- src/Umbraco.Core/Snippets/PartialViewSnippetCollection.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Core/Snippets/PartialViewSnippetCollection.cs b/src/Umbraco.Core/Snippets/PartialViewSnippetCollection.cs index 5a0cda96e9..7b07d554c0 100644 --- a/src/Umbraco.Core/Snippets/PartialViewSnippetCollection.cs +++ b/src/Umbraco.Core/Snippets/PartialViewSnippetCollection.cs @@ -56,7 +56,7 @@ namespace Umbraco.Cms.Core.Snippets return content; } - private string CleanUpContents(string content) + private static string CleanUpContents(string content) { // Strip the @inherits if it's there var headerMatch = new Regex("^@inherits\\s+?.*$", RegexOptions.Multiline); @@ -64,7 +64,9 @@ namespace Umbraco.Cms.Core.Snippets return newContent .Replace("Model.Content.", "Model.") - .Replace("(Model.Content)", "(Model)"); + .Replace("(Model.Content)", "(Model)") + .Replace("Model?.Content.", "Model.") + .Replace("(Model?.Content)", "(Model)"); } } } From 62423143bd0fbf70da61856e4f368bd53854a29d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20Knippers?= Date: Wed, 24 Aug 2022 16:09:48 +0200 Subject: [PATCH 09/33] Update appsettings-schema: remove {Member,User}Password from Umbraco:CMS They are located in Umbraco:CMS:Security and are read from that location. Setting any values in Umbraco:CMS does not actually work but intellisense shows up so the user thinks it will work. --- src/JsonSchema/AppSettings.cs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/JsonSchema/AppSettings.cs b/src/JsonSchema/AppSettings.cs index fb9db8387a..18d83b53a3 100644 --- a/src/JsonSchema/AppSettings.cs +++ b/src/JsonSchema/AppSettings.cs @@ -56,8 +56,6 @@ namespace JsonSchema public LoggingSettings? Logging { get; set; } - public MemberPasswordConfigurationSettings? MemberPassword { get; set; } - public NuCacheSettings? NuCache { get; set; } public RequestHandlerSettings? RequestHandler { get; set; } @@ -70,8 +68,6 @@ namespace JsonSchema public TypeFinderSettings? TypeFinder { get; set; } - public UserPasswordConfigurationSettings? UserPassword { get; set; } - public WebRoutingSettings? WebRouting { get; set; } public UmbracoPluginSettings? Plugins { get; set; } From b55f50c34a929a36cfae397890437a9c1d971ce8 Mon Sep 17 00:00:00 2001 From: Erik-Jan Westendorp Date: Fri, 26 Aug 2022 02:30:34 +0200 Subject: [PATCH 10/33] Translate TreeHeaders to Spanish (#12902) * Translate 'logViewer' to Spanish * Translate 'relationTypes' to Spanish --- src/Umbraco.Core/EmbeddedResources/Lang/es.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/es.xml b/src/Umbraco.Core/EmbeddedResources/Lang/es.xml index 3e59088ef9..931a8793fe 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/es.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/es.xml @@ -1260,6 +1260,7 @@ Roles Tipos de miembros Tipos de documento + Tipos de relaciones Paquetes Paquetes Vistas Parciales @@ -1271,6 +1272,7 @@ Scripts Hojas de estilo Plantillas + Visor de registro Usuarios From 47f77b60a63508ed12e04bffcff4c790a510f2c5 Mon Sep 17 00:00:00 2001 From: Anders Bjerner Date: Sun, 7 Aug 2022 15:50:02 +0200 Subject: [PATCH 11/33] Added support for disabling tabs in elements --- src/Umbraco.Web.UI.Client/src/less/components/umb-tabs.less | 5 +++++ src/Umbraco.Web.UI.Client/src/less/navs.less | 6 ++++++ .../src/views/components/tabs/umb-tabs-nav.html | 3 ++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/less/components/umb-tabs.less b/src/Umbraco.Web.UI.Client/src/less/components/umb-tabs.less index 25073250f5..c6adae65fc 100644 --- a/src/Umbraco.Web.UI.Client/src/less/components/umb-tabs.less +++ b/src/Umbraco.Web.UI.Client/src/less/components/umb-tabs.less @@ -57,6 +57,11 @@ text-decoration: none; } + &:disabled { + color: @ui-option-disabled-type; + text-decoration: none; + } + &::after { content: ""; height: 0px; diff --git a/src/Umbraco.Web.UI.Client/src/less/navs.less b/src/Umbraco.Web.UI.Client/src/less/navs.less index 6b4a6abb30..b7897e90e5 100644 --- a/src/Umbraco.Web.UI.Client/src/less/navs.less +++ b/src/Umbraco.Web.UI.Client/src/less/navs.less @@ -290,6 +290,12 @@ background: @ui-option-hover; } +.dropdown-menu > li > button:disabled, +.dropdown-submenu:hover > button:disabled { + color: @ui-option-disabled-type; + background: transparent; +} + .nav-tabs .dropdown-menu { .border-radius(0 0 3px 3px); // remove the top rounded corners here since there is a hard edge above the menu } diff --git a/src/Umbraco.Web.UI.Client/src/views/components/tabs/umb-tabs-nav.html b/src/Umbraco.Web.UI.Client/src/views/components/tabs/umb-tabs-nav.html index df649a9e4a..9480d14fba 100644 --- a/src/Umbraco.Web.UI.Client/src/views/components/tabs/umb-tabs-nav.html +++ b/src/Umbraco.Web.UI.Client/src/views/components/tabs/umb-tabs-nav.html @@ -1,6 +1,6 @@
    • - @@ -23,6 +23,7 @@ ng-class="{'dropdown-menu--active': tab.active}" ng-click="vm.clickTab($event, tab)" role="tab" + ng-disabled="tab.disabled" aria-selected="{{tab.active}}" > {{ tab.label }}
      !
      From 68cf80168937a8a8050905504c0856ee72091480 Mon Sep 17 00:00:00 2001 From: Bjarne Fyrstenborg Date: Tue, 16 Aug 2022 21:31:51 +0200 Subject: [PATCH 12/33] Replace uppercase chars to make behaviour consistent --- .../Models/RequestHandlerSettings.cs | 54 ++++++++++--------- .../RequestHandlerSettingsExtension.cs | 9 ++-- 2 files changed, 34 insertions(+), 29 deletions(-) diff --git a/src/Umbraco.Core/Configuration/Models/RequestHandlerSettings.cs b/src/Umbraco.Core/Configuration/Models/RequestHandlerSettings.cs index 0c5d39f47a..dee888edf0 100644 --- a/src/Umbraco.Core/Configuration/Models/RequestHandlerSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/RequestHandlerSettings.cs @@ -19,30 +19,36 @@ public class RequestHandlerSettings internal static readonly CharItem[] DefaultCharCollection = { - new () { Char = " ", Replacement = "-" }, - new () { Char = "\"", Replacement = string.Empty }, - new () { Char = "'", Replacement = string.Empty }, - new () { Char = "%", Replacement = string.Empty }, - new () { Char = ".", Replacement = string.Empty }, - new () { Char = ";", Replacement = string.Empty }, - new () { Char = "/", Replacement = string.Empty }, - new () { Char = "\\", Replacement = string.Empty }, - new () { Char = ":", Replacement = string.Empty }, - new () { Char = "#", Replacement = string.Empty }, - new () { Char = "+", Replacement = "plus" }, - new () { Char = "*", Replacement = "star" }, - new () { Char = "&", Replacement = string.Empty }, - new () { Char = "?", Replacement = string.Empty }, - new () { Char = "æ", Replacement = "ae" }, - new () { Char = "ä", Replacement = "ae" }, - new () { Char = "ø", Replacement = "oe" }, - new () { Char = "ö", Replacement = "oe" }, - new () { Char = "å", Replacement = "aa" }, - new () { Char = "ü", Replacement = "ue" }, - new () { Char = "ß", Replacement = "ss" }, - new () { Char = "|", Replacement = "-" }, - new () { Char = "<", Replacement = string.Empty }, - new () { Char = ">", Replacement = string.Empty }, + new() { Char = " ", Replacement = "-" }, + new() { Char = "\"", Replacement = string.Empty }, + new() { Char = "'", Replacement = string.Empty }, + new() { Char = "%", Replacement = string.Empty }, + new() { Char = ".", Replacement = string.Empty }, + new() { Char = ";", Replacement = string.Empty }, + new() { Char = "/", Replacement = string.Empty }, + new() { Char = "\\", Replacement = string.Empty }, + new() { Char = ":", Replacement = string.Empty }, + new() { Char = "#", Replacement = string.Empty }, + new() { Char = "&", Replacement = string.Empty }, + new() { Char = "?", Replacement = string.Empty }, + new() { Char = "<", Replacement = string.Empty }, + new() { Char = ">", Replacement = string.Empty }, + new() { Char = "+", Replacement = "plus" }, + new() { Char = "*", Replacement = "star" }, + new() { Char = "æ", Replacement = "ae" }, + new() { Char = "Æ", Replacement = "ae" }, + new() { Char = "ä", Replacement = "ae" }, + new() { Char = "Ä", Replacement = "ae" }, + new() { Char = "ø", Replacement = "oe" }, + new() { Char = "Ø", Replacement = "oe" }, + new() { Char = "ö", Replacement = "oe" }, + new() { Char = "Ö", Replacement = "oe" }, + new() { Char = "å", Replacement = "aa" }, + new() { Char = "Å", Replacement = "aa" }, + new() { Char = "ü", Replacement = "ue" }, + new() { Char = "Ü", Replacement = "ue" }, + new() { Char = "ß", Replacement = "ss" }, + new() { Char = "|", Replacement = "-" }, }; /// diff --git a/src/Umbraco.Core/Extensions/RequestHandlerSettingsExtension.cs b/src/Umbraco.Core/Extensions/RequestHandlerSettingsExtension.cs index 475f093785..10ea5a02ed 100644 --- a/src/Umbraco.Core/Extensions/RequestHandlerSettingsExtension.cs +++ b/src/Umbraco.Core/Extensions/RequestHandlerSettingsExtension.cs @@ -7,13 +7,13 @@ namespace Umbraco.Extensions; /// /// Get concatenated user and default character replacements -/// taking into account +/// taking into account . /// public static class RequestHandlerSettingsExtension { /// /// Get concatenated user and default character replacements - /// taking into account + /// taking into account . /// public static IEnumerable GetCharReplacements(this RequestHandlerSettings requestHandlerSettings) { @@ -34,7 +34,7 @@ public static class RequestHandlerSettingsExtension } /// - /// Merges CharCollection and UserDefinedCharCollection, prioritizing UserDefinedCharCollection + /// Merges CharCollection and UserDefinedCharCollection, prioritizing UserDefinedCharCollection. /// internal static void MergeReplacements( this RequestHandlerSettings requestHandlerSettings, @@ -71,8 +71,7 @@ public static class RequestHandlerSettingsExtension } /// - /// Merges two IEnumerable of CharItem without any duplicates, items in priorityReplacements will override those in - /// alternativeReplacements + /// Merges two IEnumerable of CharItem without any duplicates, items in priorityReplacements will override those in alternativeReplacements. /// private static IEnumerable MergeUnique( IEnumerable priorityReplacements, From 07fba1eb8413118e7eebd7db1a55c290424fef70 Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Tue, 30 Aug 2022 13:22:59 +0200 Subject: [PATCH 13/33] Revert "Break word for limited width content" This reverts commit 448836ee2df5f1e35d94515c7f6d544801b7fe2a. --- .../src/less/components/umb-node-preview.less | 1 + .../src/less/components/umb-readonlyvalue.less | 5 ++--- src/Umbraco.Web.UI.Client/src/less/mixins.less | 1 - 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/less/components/umb-node-preview.less b/src/Umbraco.Web.UI.Client/src/less/components/umb-node-preview.less index 350483be97..bac1ebc4f3 100644 --- a/src/Umbraco.Web.UI.Client/src/less/components/umb-node-preview.less +++ b/src/Umbraco.Web.UI.Client/src/less/components/umb-node-preview.less @@ -38,6 +38,7 @@ .umb-node-preview__content { flex: 1 1 auto; + margin-right: 25px; overflow: hidden; } diff --git a/src/Umbraco.Web.UI.Client/src/less/components/umb-readonlyvalue.less b/src/Umbraco.Web.UI.Client/src/less/components/umb-readonlyvalue.less index b2eca6613d..0790bdd07a 100644 --- a/src/Umbraco.Web.UI.Client/src/less/components/umb-readonlyvalue.less +++ b/src/Umbraco.Web.UI.Client/src/less/components/umb-readonlyvalue.less @@ -1,4 +1,3 @@ -.umb-readonlyvalue { - position: relative; - .umb-property-editor--limit-width(); +.umb-readonlyvalue { + position:relative; } diff --git a/src/Umbraco.Web.UI.Client/src/less/mixins.less b/src/Umbraco.Web.UI.Client/src/less/mixins.less index 78ccbe0ace..c0ddcd6cdb 100644 --- a/src/Umbraco.Web.UI.Client/src/less/mixins.less +++ b/src/Umbraco.Web.UI.Client/src/less/mixins.less @@ -421,7 +421,6 @@ // Limit width of specific property editors .umb-property-editor--limit-width { max-width: @propertyEditorLimitedWidth; - word-break: break-all; } // Horizontal dividers From fcd1c22bf8892a6afc3630ff5099829c7c0df4c9 Mon Sep 17 00:00:00 2001 From: neilnaveen <42328488+neilnaveen@users.noreply.github.com> Date: Fri, 24 Jun 2022 01:08:45 +0000 Subject: [PATCH 14/33] chore: Set permissions for GitHub actions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Restrict the GitHub token permissions only to the required ones; this way, even if the attackers will succeed in compromising your workflow, they won’t be able to do much. - Included permissions for the action. https://github.com/ossf/scorecard/blob/main/docs/checks.md#token-permissions https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions https://docs.github.com/en/actions/using-jobs/assigning-permissions-to-jobs [Keeping your GitHub Actions and workflows secure Part 1: Preventing pwn requests](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/) Signed-off-by: neilnaveen <42328488+neilnaveen@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 74e488206e..ebfc9350e1 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -7,9 +7,16 @@ on: # The branches below must be a subset of the branches above branches: ['*/dev','*/contrib'] +permissions: + contents: read + jobs: CodeQL-Build: + permissions: + actions: read # for github/codeql-action/init to get workflow details + contents: read # for actions/checkout to fetch code + security-events: write # for github/codeql-action/analyze to upload SARIF results runs-on: ubuntu-latest permissions: actions: read From 5f4f16957fddc884bb6650cdb8bacd07e7ecb25e Mon Sep 17 00:00:00 2001 From: Erik-Jan Westendorp Date: Tue, 30 Aug 2022 15:13:36 +0200 Subject: [PATCH 15/33] Translate 'settingsGroup' treeHeader to Spanish --- src/Umbraco.Core/EmbeddedResources/Lang/es.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/es.xml b/src/Umbraco.Core/EmbeddedResources/Lang/es.xml index 931a8793fe..00f14f9593 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/es.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/es.xml @@ -1274,6 +1274,7 @@ Plantillas Visor de registro Usuarios + Ajustes Existe una nueva actualización From 17d72f9436300f7473fb13102cd6d02bc05fe0cc Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Fri, 2 Sep 2022 09:33:09 +0200 Subject: [PATCH 16/33] Update 01_bug_report.yml --- .github/ISSUE_TEMPLATE/01_bug_report.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/01_bug_report.yml b/.github/ISSUE_TEMPLATE/01_bug_report.yml index a60d373b9c..47f6fe038d 100644 --- a/.github/ISSUE_TEMPLATE/01_bug_report.yml +++ b/.github/ISSUE_TEMPLATE/01_bug_report.yml @@ -6,7 +6,7 @@ body: - type: input id: "version" attributes: - label: "Which *exact* Umbraco version are you using? For example: 9.0.1 - don't just write v9" + label: "Which Umbraco version are you using? (Please write the *exact* version, example: 10.1.0)" description: "Use the help icon in the Umbraco backoffice to find the version you're using" validations: required: true From 8f4d8d60b077fa58a23df9152ec3bee62515acc4 Mon Sep 17 00:00:00 2001 From: Bjarne Fyrstenborg Date: Fri, 2 Sep 2022 15:28:39 +0200 Subject: [PATCH 17/33] Use SVG logo in installer/upgrader (#12922) * Use SVG logo in upgrader * Adjust logo in app header and boot failed as well * Remove width and height from CSS * Update sizes * Set image size * Disable draggable of logo --- .../umbraco/UmbracoInstall/Index.cshtml | 2 +- .../application/umb-app-header.less | 19 ++------ .../application/umb-app-header.html | 46 +++++++++---------- .../src/views/errors/BootFailed.html | 12 ++--- 4 files changed, 33 insertions(+), 46 deletions(-) diff --git a/src/Umbraco.Cms.StaticAssets/umbraco/UmbracoInstall/Index.cshtml b/src/Umbraco.Cms.StaticAssets/umbraco/UmbracoInstall/Index.cshtml index 406c311312..be1b741535 100644 --- a/src/Umbraco.Cms.StaticAssets/umbraco/UmbracoInstall/Index.cshtml +++ b/src/Umbraco.Cms.StaticAssets/umbraco/UmbracoInstall/Index.cshtml @@ -16,7 +16,7 @@ - +
      diff --git a/src/Umbraco.Web.UI.Client/src/views/errors/BootFailed.html b/src/Umbraco.Web.UI.Client/src/views/errors/BootFailed.html index 7b91125e09..e7aa63eff0 100644 --- a/src/Umbraco.Web.UI.Client/src/views/errors/BootFailed.html +++ b/src/Umbraco.Web.UI.Client/src/views/errors/BootFailed.html @@ -45,8 +45,6 @@ position: absolute; top: 22px; left: 25px; - width: 30px; - height: 30px; z-index: 1; } .error-container { @@ -71,10 +69,12 @@
      - +

      Boot Failed

      From 7bb5fbf26846fcd1a08aa2cb53e39f9af14936cc Mon Sep 17 00:00:00 2001 From: Erik-Jan Westendorp Date: Thu, 1 Sep 2022 16:12:46 +0200 Subject: [PATCH 18/33] Translate languages area --- src/Umbraco.Core/EmbeddedResources/Lang/es.xml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/es.xml b/src/Umbraco.Core/EmbeddedResources/Lang/es.xml index 00f14f9593..a4b6495ad1 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/es.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/es.xml @@ -1173,6 +1173,24 @@ Mostrar en perfil de miembro pestaña no tiene orden + + Agregar idioma + Código ISO + Idioma obligatorio + + Las propiedades en este idioma deben completarse antes de que se pueda publicar el nodo. + + Idioma predeterminado + Un sitio de Umbraco solo puede tener un conjunto de idiomas predeterminado. + Cambiar el idioma predeterminado puede provocar que falte el contenido predeterminado. + Vuelve a caer + Sin lenguaje alternativo + + Para permitir que el contenido multilingüe retroceda a otro idioma si no está presente en el idioma solicitado, selecciónelo aquí. + + Idioma de retroceso + ninguno + Construyendo modelos esto puede llevar un rato, no te preocupes From df3777f9763627f5faed93dee83feeeb6ef88635 Mon Sep 17 00:00:00 2001 From: Alex <93376818+sashashura@users.noreply.github.com> Date: Fri, 2 Sep 2022 17:27:06 +0100 Subject: [PATCH 19/33] Update add-issues-to-review-project.yml Signed-off-by: sashashura <93376818+sashashura@users.noreply.github.com> --- .github/workflows/add-issues-to-review-project.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/add-issues-to-review-project.yml b/.github/workflows/add-issues-to-review-project.yml index 4590c173fc..0d89451373 100644 --- a/.github/workflows/add-issues-to-review-project.yml +++ b/.github/workflows/add-issues-to-review-project.yml @@ -5,6 +5,9 @@ on: types: - opened +permissions: + contents: read + jobs: get-user-type: runs-on: ubuntu-latest @@ -43,6 +46,8 @@ jobs: core.setOutput("ignored", isIgnoredUser); console.log("Ignored is", isIgnoredUser); add-to-project: + permissions: + repository-projects: write # for actions/add-to-project if: needs.get-user-type.outputs.ignored == 'false' runs-on: ubuntu-latest needs: [get-user-type] From 1f5d58b1a91e1451d2c7a2e406c520b588b20c53 Mon Sep 17 00:00:00 2001 From: Mayur D Date: Mon, 5 Sep 2022 05:47:46 +0530 Subject: [PATCH 20/33] Fix: Media Picker creates duplicated folders (#12918) (#12948) * fix: Media Picker creates duplicated folders (#12918) * Fix: Media section multiple content creation (#12918) --- .../infiniteeditors/mediapicker/mediapicker.controller.js | 3 +++ .../src/views/media/media.edit.controller.js | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/mediapicker/mediapicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/mediapicker/mediapicker.controller.js index b19f35034b..a6e10f8e8f 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/mediapicker/mediapicker.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/mediapicker/mediapicker.controller.js @@ -218,6 +218,9 @@ angular.module("umbraco") } function submitFolder() { + if ($scope.model.creatingFolder) { + return; + } if ($scope.model.newFolderName) { $scope.model.creatingFolder = true; mediaResource diff --git a/src/Umbraco.Web.UI.Client/src/views/media/media.edit.controller.js b/src/Umbraco.Web.UI.Client/src/views/media/media.edit.controller.js index 006840bbd5..66db534475 100644 --- a/src/Umbraco.Web.UI.Client/src/views/media/media.edit.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/media/media.edit.controller.js @@ -176,6 +176,10 @@ function mediaEditController($scope, $routeParams, $location, $http, $q, appStat $scope.save = function () { + if($scope.page.saveButtonState == "busy"){ + return; + } + if (formHelper.submitForm({ scope: $scope })) { $scope.page.saveButtonState = "busy"; From a0d673262ceafc636e4fc5b856b7933733e1fc23 Mon Sep 17 00:00:00 2001 From: Erik-Jan Westendorp Date: Tue, 6 Sep 2022 16:10:09 +0200 Subject: [PATCH 21/33] Translate content apps to spanish (#12950) * Add apps area to Spanish language file * Translate apps --- src/Umbraco.Core/EmbeddedResources/Lang/es.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/es.xml b/src/Umbraco.Core/EmbeddedResources/Lang/es.xml index a4b6495ad1..4012566597 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/es.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/es.xml @@ -71,6 +71,10 @@ Permitir acceso para guardar un nodo Permitir acceso para crear una Plantilla de Contenido + + Contenido + Información + Permiso denegado. Añadir nuevo dominio From 5f42cf0cf7143fb65415cd770aa0beaf067a3789 Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Thu, 8 Sep 2022 09:47:00 +0200 Subject: [PATCH 22/33] Revert "Replace uppercase chars to make behaviour consistent" This reverts commit 68cf80168937a8a8050905504c0856ee72091480. --- .../Models/RequestHandlerSettings.cs | 54 +++++++++---------- .../RequestHandlerSettingsExtension.cs | 9 ++-- 2 files changed, 29 insertions(+), 34 deletions(-) diff --git a/src/Umbraco.Core/Configuration/Models/RequestHandlerSettings.cs b/src/Umbraco.Core/Configuration/Models/RequestHandlerSettings.cs index dee888edf0..0c5d39f47a 100644 --- a/src/Umbraco.Core/Configuration/Models/RequestHandlerSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/RequestHandlerSettings.cs @@ -19,36 +19,30 @@ public class RequestHandlerSettings internal static readonly CharItem[] DefaultCharCollection = { - new() { Char = " ", Replacement = "-" }, - new() { Char = "\"", Replacement = string.Empty }, - new() { Char = "'", Replacement = string.Empty }, - new() { Char = "%", Replacement = string.Empty }, - new() { Char = ".", Replacement = string.Empty }, - new() { Char = ";", Replacement = string.Empty }, - new() { Char = "/", Replacement = string.Empty }, - new() { Char = "\\", Replacement = string.Empty }, - new() { Char = ":", Replacement = string.Empty }, - new() { Char = "#", Replacement = string.Empty }, - new() { Char = "&", Replacement = string.Empty }, - new() { Char = "?", Replacement = string.Empty }, - new() { Char = "<", Replacement = string.Empty }, - new() { Char = ">", Replacement = string.Empty }, - new() { Char = "+", Replacement = "plus" }, - new() { Char = "*", Replacement = "star" }, - new() { Char = "æ", Replacement = "ae" }, - new() { Char = "Æ", Replacement = "ae" }, - new() { Char = "ä", Replacement = "ae" }, - new() { Char = "Ä", Replacement = "ae" }, - new() { Char = "ø", Replacement = "oe" }, - new() { Char = "Ø", Replacement = "oe" }, - new() { Char = "ö", Replacement = "oe" }, - new() { Char = "Ö", Replacement = "oe" }, - new() { Char = "å", Replacement = "aa" }, - new() { Char = "Å", Replacement = "aa" }, - new() { Char = "ü", Replacement = "ue" }, - new() { Char = "Ü", Replacement = "ue" }, - new() { Char = "ß", Replacement = "ss" }, - new() { Char = "|", Replacement = "-" }, + new () { Char = " ", Replacement = "-" }, + new () { Char = "\"", Replacement = string.Empty }, + new () { Char = "'", Replacement = string.Empty }, + new () { Char = "%", Replacement = string.Empty }, + new () { Char = ".", Replacement = string.Empty }, + new () { Char = ";", Replacement = string.Empty }, + new () { Char = "/", Replacement = string.Empty }, + new () { Char = "\\", Replacement = string.Empty }, + new () { Char = ":", Replacement = string.Empty }, + new () { Char = "#", Replacement = string.Empty }, + new () { Char = "+", Replacement = "plus" }, + new () { Char = "*", Replacement = "star" }, + new () { Char = "&", Replacement = string.Empty }, + new () { Char = "?", Replacement = string.Empty }, + new () { Char = "æ", Replacement = "ae" }, + new () { Char = "ä", Replacement = "ae" }, + new () { Char = "ø", Replacement = "oe" }, + new () { Char = "ö", Replacement = "oe" }, + new () { Char = "å", Replacement = "aa" }, + new () { Char = "ü", Replacement = "ue" }, + new () { Char = "ß", Replacement = "ss" }, + new () { Char = "|", Replacement = "-" }, + new () { Char = "<", Replacement = string.Empty }, + new () { Char = ">", Replacement = string.Empty }, }; ///

      diff --git a/src/Umbraco.Core/Extensions/RequestHandlerSettingsExtension.cs b/src/Umbraco.Core/Extensions/RequestHandlerSettingsExtension.cs index 10ea5a02ed..475f093785 100644 --- a/src/Umbraco.Core/Extensions/RequestHandlerSettingsExtension.cs +++ b/src/Umbraco.Core/Extensions/RequestHandlerSettingsExtension.cs @@ -7,13 +7,13 @@ namespace Umbraco.Extensions; /// /// Get concatenated user and default character replacements -/// taking into account . +/// taking into account /// public static class RequestHandlerSettingsExtension { /// /// Get concatenated user and default character replacements - /// taking into account . + /// taking into account /// public static IEnumerable GetCharReplacements(this RequestHandlerSettings requestHandlerSettings) { @@ -34,7 +34,7 @@ public static class RequestHandlerSettingsExtension } /// - /// Merges CharCollection and UserDefinedCharCollection, prioritizing UserDefinedCharCollection. + /// Merges CharCollection and UserDefinedCharCollection, prioritizing UserDefinedCharCollection /// internal static void MergeReplacements( this RequestHandlerSettings requestHandlerSettings, @@ -71,7 +71,8 @@ public static class RequestHandlerSettingsExtension } /// - /// Merges two IEnumerable of CharItem without any duplicates, items in priorityReplacements will override those in alternativeReplacements. + /// Merges two IEnumerable of CharItem without any duplicates, items in priorityReplacements will override those in + /// alternativeReplacements /// private static IEnumerable MergeUnique( IEnumerable priorityReplacements, From fdc1b02b4f5b36958ecf4d7886c9bb81281d5401 Mon Sep 17 00:00:00 2001 From: Chad Date: Thu, 8 Sep 2022 23:17:54 +1200 Subject: [PATCH 23/33] Fix Nucache rebuilding more type caches than necessary (#12785) --- .../IPublishedSnapshotService.cs | 16 ++++++++++++++++ .../PublishedSnapshotRebuilder.cs | 2 +- .../Persistence/NuCacheContentRepository.cs | 18 +++++++++++++++--- .../Persistence/NuCacheContentService.cs | 14 ++++++++++---- .../PublishedSnapshotCacheStatusController.cs | 3 ++- .../Services/NuCacheRebuildTests.cs | 5 +++-- 6 files changed, 47 insertions(+), 11 deletions(-) diff --git a/src/Umbraco.Core/PublishedCache/IPublishedSnapshotService.cs b/src/Umbraco.Core/PublishedCache/IPublishedSnapshotService.cs index f8d158dce9..5bd5ff23cc 100644 --- a/src/Umbraco.Core/PublishedCache/IPublishedSnapshotService.cs +++ b/src/Umbraco.Core/PublishedCache/IPublishedSnapshotService.cs @@ -61,6 +61,22 @@ public interface IPublishedSnapshotService : IDisposable IReadOnlyCollection? mediaTypeIds = null, IReadOnlyCollection? memberTypeIds = null); + + /// + /// Rebuilds all internal database caches (but does not reload). + /// + /// + /// + /// Forces the snapshot service to rebuild its internal database caches. For instance, some caches + /// may rely on a database table to store pre-serialized version of documents. + /// + /// + /// This does *not* reload the caches. Caches need to be reloaded, for instance via + /// RefreshAllPublishedSnapshot method. + /// + /// + void RebuildAll() => Rebuild(Array.Empty(), Array.Empty(), Array.Empty()); + /* An IPublishedCachesService implementation can rely on transaction-level events to update * its internal, database-level data, as these events are purely internal. However, it cannot * rely on cache refreshers CacheUpdated events to update itself, as these events are external diff --git a/src/Umbraco.Infrastructure/Migrations/PostMigrations/PublishedSnapshotRebuilder.cs b/src/Umbraco.Infrastructure/Migrations/PostMigrations/PublishedSnapshotRebuilder.cs index f70fd0ddb3..d86307b1f9 100644 --- a/src/Umbraco.Infrastructure/Migrations/PostMigrations/PublishedSnapshotRebuilder.cs +++ b/src/Umbraco.Infrastructure/Migrations/PostMigrations/PublishedSnapshotRebuilder.cs @@ -26,7 +26,7 @@ public class PublishedSnapshotRebuilder : IPublishedSnapshotRebuilder /// public void Rebuild() { - _publishedSnapshotService.Rebuild(); + _publishedSnapshotService.RebuildAll(); _distributedCache.RefreshAllPublishedSnapshot(); } } diff --git a/src/Umbraco.PublishedCache.NuCache/Persistence/NuCacheContentRepository.cs b/src/Umbraco.PublishedCache.NuCache/Persistence/NuCacheContentRepository.cs index 176a664d42..cb4439f2ae 100644 --- a/src/Umbraco.PublishedCache.NuCache/Persistence/NuCacheContentRepository.cs +++ b/src/Umbraco.PublishedCache.NuCache/Persistence/NuCacheContentRepository.cs @@ -97,6 +97,7 @@ public class NuCacheContentRepository : RepositoryBase, INuCacheContentRepositor OnRepositoryRefreshed(serializer, member, false); } + /// public void Rebuild( IReadOnlyCollection? contentTypeIds = null, IReadOnlyCollection? mediaTypeIds = null, @@ -107,9 +108,20 @@ public class NuCacheContentRepository : RepositoryBase, INuCacheContentRepositor | ContentCacheDataSerializerEntityType.Media | ContentCacheDataSerializerEntityType.Member); - RebuildContentDbCache(serializer, _nucacheSettings.Value.SqlPageSize, contentTypeIds); - RebuildMediaDbCache(serializer, _nucacheSettings.Value.SqlPageSize, mediaTypeIds); - RebuildMemberDbCache(serializer, _nucacheSettings.Value.SqlPageSize, memberTypeIds); + if(contentTypeIds != null) + { + RebuildContentDbCache(serializer, _nucacheSettings.Value.SqlPageSize, contentTypeIds); + } + + if (mediaTypeIds != null) + { + RebuildMediaDbCache(serializer, _nucacheSettings.Value.SqlPageSize, mediaTypeIds); + } + + if (memberTypeIds != null) + { + RebuildMemberDbCache(serializer, _nucacheSettings.Value.SqlPageSize, memberTypeIds); + } } // assumes content tree lock diff --git a/src/Umbraco.PublishedCache.NuCache/Persistence/NuCacheContentService.cs b/src/Umbraco.PublishedCache.NuCache/Persistence/NuCacheContentService.cs index 3aa071716e..09855f5682 100644 --- a/src/Umbraco.PublishedCache.NuCache/Persistence/NuCacheContentService.cs +++ b/src/Umbraco.PublishedCache.NuCache/Persistence/NuCacheContentService.cs @@ -51,7 +51,7 @@ public class NuCacheContentService : RepositoryService, INuCacheContentService using (_profilingLogger.TraceDuration( $"Rebuilding NuCache database with {serializer} serializer")) { - Rebuild(); + RebuildAll(); _keyValueService.SetValue(NuCacheSerializerKey, serializer.ToString()); } } @@ -113,11 +113,17 @@ public class NuCacheContentService : RepositoryService, INuCacheContentService public void RefreshMember(IMember member) => _repository.RefreshMember(member); + /// + public void RebuildAll() + { + Rebuild(Array.Empty(), Array.Empty(), Array.Empty()); + } + /// public void Rebuild( - IReadOnlyCollection? contentTypeIds = null, - IReadOnlyCollection? mediaTypeIds = null, - IReadOnlyCollection? memberTypeIds = null) + IReadOnlyCollection? contentTypeIds = null, + IReadOnlyCollection? mediaTypeIds = null, + IReadOnlyCollection? memberTypeIds = null) { using (ICoreScope scope = ScopeProvider.CreateCoreScope(repositoryCacheMode: RepositoryCacheMode.Scoped)) { diff --git a/src/Umbraco.Web.BackOffice/Controllers/PublishedSnapshotCacheStatusController.cs b/src/Umbraco.Web.BackOffice/Controllers/PublishedSnapshotCacheStatusController.cs index 9980089248..c8c391d990 100644 --- a/src/Umbraco.Web.BackOffice/Controllers/PublishedSnapshotCacheStatusController.cs +++ b/src/Umbraco.Web.BackOffice/Controllers/PublishedSnapshotCacheStatusController.cs @@ -34,7 +34,8 @@ public class PublishedSnapshotCacheStatusController : UmbracoAuthorizedApiContro [HttpPost] public string RebuildDbCache() { - _publishedSnapshotService.Rebuild(); + //Rebuild All + _publishedSnapshotService.RebuildAll(); return _publishedSnapshotStatus.GetStatus(); } diff --git a/tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/NuCacheRebuildTests.cs b/tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/NuCacheRebuildTests.cs index ed0c7ac264..5604419623 100644 --- a/tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/NuCacheRebuildTests.cs +++ b/tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/NuCacheRebuildTests.cs @@ -1,3 +1,4 @@ +using System; using NUnit.Framework; using Umbraco.Cms.Core; using Umbraco.Cms.Core.PublishedCache; @@ -59,7 +60,7 @@ public class NuCacheRebuildTests : UmbracoIntegrationTest Assert.AreEqual("hello", segment); - PublishedSnapshotService.Rebuild(); + PublishedSnapshotService.RebuildAll(); cachedContent = ContentService.GetById(content.Id); segment = urlSegmentProvider.GetUrlSegment(cachedContent); @@ -76,7 +77,7 @@ public class NuCacheRebuildTests : UmbracoIntegrationTest // The page has now been published, so we should see the new url segment Assert.AreEqual("goodbye", segment); - PublishedSnapshotService.Rebuild(); + PublishedSnapshotService.RebuildAll(); cachedContent = ContentService.GetById(content.Id); segment = urlSegmentProvider.GetUrlSegment(cachedContent); From 1bd0a1f86d6b540b241c1df805bcf5b34efb6905 Mon Sep 17 00:00:00 2001 From: Matthew Care Date: Sat, 3 Sep 2022 22:58:03 +0200 Subject: [PATCH 24/33] Set the first app to active if no active apps Add support for a block list item which only contains settings --- .../infiniteeditors/blockeditor/blockeditor.controller.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/blockeditor/blockeditor.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/blockeditor/blockeditor.controller.js index d3a87791f9..64e3f67fea 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/blockeditor/blockeditor.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/blockeditor/blockeditor.controller.js @@ -35,6 +35,11 @@ angular.module("umbraco") } } + var activeApp = apps.filter(x => x.active); + if (activeApp.length === 0 && apps.length > 0) { + apps[0].active = true; + } + vm.tabs = apps; } From 4df012e8e9bc7bf3131791b15b4a41ebc63c4abe Mon Sep 17 00:00:00 2001 From: CyberReiter <90895378+CyberReiter@users.noreply.github.com> Date: Fri, 9 Sep 2022 03:06:50 +0200 Subject: [PATCH 25/33] Skip move logic if the parent is staying the same (#12937) * v10/feature/skip-move-logic: add logic to skip move logic when parentId would be the same as before * v10/feature/skip-move-logic: remove unnecessary checks * remove check for mediaservice as there is already one in place * remove unnecessary using * added parent checks for dictionary items * changing behaviour for contenttypes, datatypes and mediatypes to show errors on move --- src/Umbraco.Core/EmbeddedResources/Lang/en.xml | 2 +- src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml | 2 +- src/Umbraco.Core/Services/ContentService.cs | 5 +++++ ...ContentTypeServiceBaseOfTRepositoryTItemTService.cs | 4 ++++ src/Umbraco.Core/Services/DataTypeService.cs | 5 +++++ .../Controllers/DictionaryController.cs | 10 ++++++++++ .../src/common/resources/contenttype.resource.js | 4 +--- .../src/common/resources/mediatype.resource.js | 4 +--- 8 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/en.xml b/src/Umbraco.Core/EmbeddedResources/Lang/en.xml index 0a8b03b115..77f8543491 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/en.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/en.xml @@ -1178,7 +1178,7 @@ To manage your website, simply open the Umbraco backoffice and start adding cont has been selected as the root of your new content, click 'ok' below. No node selected yet, please select a node in the list above before clicking 'ok' The current node is not allowed under the chosen node because of its type - The current node cannot be moved to one of its subpages + The current node cannot be moved to one of its subpages neither can the parent and destination be the same The current node cannot exist at the root The action isn't allowed since you have insufficient permissions on 1 or more child documents. diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml b/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml index 88030198a3..f193518c24 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml @@ -1203,7 +1203,7 @@ To manage your website, simply open the Umbraco backoffice and start adding cont has been selected as the root of your new content, click 'ok' below. No node selected yet, please select a node in the list above before clicking 'ok' The current node is not allowed under the chosen node because of its type - The current node cannot be moved to one of its subpages + The current node cannot be moved to one of its subpages neither can the parent and destination be the same The current node cannot exist at the root The action isn't allowed since you have insufficient permissions on 1 or more child documents. diff --git a/src/Umbraco.Core/Services/ContentService.cs b/src/Umbraco.Core/Services/ContentService.cs index 63a05dcd6e..915b92d78d 100644 --- a/src/Umbraco.Core/Services/ContentService.cs +++ b/src/Umbraco.Core/Services/ContentService.cs @@ -2432,6 +2432,11 @@ public class ContentService : RepositoryService, IContentService /// Optional Id of the User moving the Content public void Move(IContent content, int parentId, int userId = Constants.Security.SuperUserId) { + if(content.ParentId == parentId) + { + return; + } + // if moving to the recycle bin then use the proper method if (parentId == Constants.System.RecycleBinContent) { diff --git a/src/Umbraco.Core/Services/ContentTypeServiceBaseOfTRepositoryTItemTService.cs b/src/Umbraco.Core/Services/ContentTypeServiceBaseOfTRepositoryTItemTService.cs index 98a7195fbf..7cf63445a9 100644 --- a/src/Umbraco.Core/Services/ContentTypeServiceBaseOfTRepositoryTItemTService.cs +++ b/src/Umbraco.Core/Services/ContentTypeServiceBaseOfTRepositoryTItemTService.cs @@ -845,6 +845,10 @@ public abstract class ContentTypeServiceBase : ContentTypeSe public Attempt?> Move(TItem moving, int containerId) { EventMessages eventMessages = EventMessagesFactory.Get(); + if(moving.ParentId == containerId) + { + return OperationResult.Attempt.Fail(MoveOperationStatusType.FailedNotAllowedByPath, eventMessages); + } var moveInfo = new List>(); using (ICoreScope scope = ScopeProvider.CreateCoreScope()) diff --git a/src/Umbraco.Core/Services/DataTypeService.cs b/src/Umbraco.Core/Services/DataTypeService.cs index d310954985..de3f96d834 100644 --- a/src/Umbraco.Core/Services/DataTypeService.cs +++ b/src/Umbraco.Core/Services/DataTypeService.cs @@ -396,6 +396,11 @@ namespace Umbraco.Cms.Core.Services.Implement public Attempt?> Move(IDataType toMove, int parentId) { EventMessages evtMsgs = EventMessagesFactory.Get(); + if (toMove.ParentId == parentId) + { + return OperationResult.Attempt.Fail(MoveOperationStatusType.FailedNotAllowedByPath, evtMsgs); + } + var moveInfo = new List>(); using (ICoreScope scope = ScopeProvider.CreateCoreScope()) diff --git a/src/Umbraco.Web.BackOffice/Controllers/DictionaryController.cs b/src/Umbraco.Web.BackOffice/Controllers/DictionaryController.cs index b9508a501b..8b25275508 100644 --- a/src/Umbraco.Web.BackOffice/Controllers/DictionaryController.cs +++ b/src/Umbraco.Web.BackOffice/Controllers/DictionaryController.cs @@ -260,6 +260,11 @@ public class DictionaryController : BackOfficeNotificationsController return ValidationProblem(_localizedTextService.Localize("dictionary", "itemDoesNotExists")); } + if(dictionaryItem.ParentId == null && move.ParentId == Constants.System.Root) + { + return ValidationProblem(_localizedTextService.Localize("moveOrCopy", "notAllowedByPath")); + } + IDictionaryItem? parent = _localizationService.GetDictionaryItemById(move.ParentId); if (parent == null) { @@ -274,6 +279,11 @@ public class DictionaryController : BackOfficeNotificationsController } else { + if (dictionaryItem.ParentId == parent.Key) + { + return ValidationProblem(_localizedTextService.Localize("moveOrCopy", "notAllowedByPath")); + } + dictionaryItem.ParentId = parent.Key; if (dictionaryItem.Key == parent.ParentId) { diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/contenttype.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/contenttype.resource.js index ada64bd3f6..dfac875e5e 100644 --- a/src/Umbraco.Web.UI.Client/src/common/resources/contenttype.resource.js +++ b/src/Umbraco.Web.UI.Client/src/common/resources/contenttype.resource.js @@ -432,15 +432,13 @@ function contentTypeResource($q, $http, umbRequestHelper, umbDataFormatter, loca throw "args.id cannot be null"; } - var promise = localizationService.localize("contentType_moveFailed"); - return umbRequestHelper.resourcePromise( $http.post(umbRequestHelper.getApiUrl("contentTypeApiBaseUrl", "PostMove"), { parentId: args.parentId, id: args.id }, { responseType: 'text' }), - promise); + 'Failed to move content type'); }, /** diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/mediatype.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/mediatype.resource.js index 62fe2b7367..79f35d0d74 100644 --- a/src/Umbraco.Web.UI.Client/src/common/resources/mediatype.resource.js +++ b/src/Umbraco.Web.UI.Client/src/common/resources/mediatype.resource.js @@ -208,15 +208,13 @@ function mediaTypeResource($q, $http, umbRequestHelper, umbDataFormatter, locali throw "args.id cannot be null"; } - var promise = localizationService.localize("mediaType_moveFailed"); - return umbRequestHelper.resourcePromise( $http.post(umbRequestHelper.getApiUrl("mediaTypeApiBaseUrl", "PostMove"), { parentId: args.parentId, id: args.id }, { responseType: 'text' }), - promise); + 'Failed to move media type'); }, copy: function (args) { From 902f126e6bf788ba5b506a323405a8793ea7c0c0 Mon Sep 17 00:00:00 2001 From: Anders Bjerner Date: Fri, 9 Sep 2022 12:50:21 +0200 Subject: [PATCH 26/33] Added support for virtual backoffice icons (#12833) --- .../Services/IconService.cs | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/src/Umbraco.Web.BackOffice/Services/IconService.cs b/src/Umbraco.Web.BackOffice/Services/IconService.cs index 7f060dc756..c8b6eaaf1b 100644 --- a/src/Umbraco.Web.BackOffice/Services/IconService.cs +++ b/src/Umbraco.Web.BackOffice/Services/IconService.cs @@ -136,6 +136,9 @@ public class IconService : IIconService } } + // Get icons from the web root file provider (both physical and virtual) + icons.UnionWith(GetIconsFiles(_webHostEnvironment.WebRootFileProvider, Constants.SystemDirectories.AppPlugins)); + IDirectoryContents? iconFolder = _webHostEnvironment.WebRootFileProvider.GetDirectoryContents(_globalSettings.IconsPath); @@ -148,6 +151,63 @@ public class IconService : IIconService return icons; } + + /// + /// Finds all SVG icon files based on the specified and . + /// The method will find both physical and virtual (eg. from a Razor Class Library) icons. + /// + /// The file provider to be used. + /// The sub path to start from - should probably always be . + /// A collection of representing the found SVG icon files. + private static IEnumerable GetIconsFiles(IFileProvider fileProvider, string path) + { + // Iterate through all plugin folders, this is necessary because on Linux we'll get casing issues when + // we directly try to access {path}/{pluginDirectory.Name}/{Constants.SystemDirectories.PluginIcons} + foreach (IFileInfo pluginDirectory in fileProvider.GetDirectoryContents(path)) + { + // Ideally there shouldn't be any files, but we'd better check to be sure + if (!pluginDirectory.IsDirectory) + { + continue; + } + + // Iterate through the sub directories of each plugin folder + foreach (IFileInfo subDir1 in fileProvider.GetDirectoryContents($"{path}/{pluginDirectory.Name}")) + { + // Skip files again + if (!subDir1.IsDirectory) + { + continue; + } + + // Iterate through second level sub directories + foreach (IFileInfo subDir2 in fileProvider.GetDirectoryContents($"{path}/{pluginDirectory.Name}/{subDir1.Name}")) + { + // Skip files again + if (!subDir2.IsDirectory) + { + continue; + } + + // Does the directory match the plugin icons folder? (case insensitive for legacy support) + if (!$"/{subDir1.Name}/{subDir2.Name}".InvariantEquals(Constants.SystemDirectories.PluginIcons)) + { + continue; + } + + // Iterate though the files of the second level sub directory. This should be where the SVG files are located :D + foreach (IFileInfo file in fileProvider.GetDirectoryContents($"{path}/{pluginDirectory.Name}/{subDir1.Name}/{subDir2.Name}")) + { + if (file.Name.InvariantEndsWith(".svg")) + { + yield return new FileInfo(file.PhysicalPath); + } + } + } + } + } + } + private IReadOnlyDictionary? GetIconDictionary() => _cache.GetCacheItem( $"{typeof(IconService).FullName}.{nameof(GetIconDictionary)}", () => GetAllIconsFiles() From b84ccea96fe3ec6037c9abe367391f3f93c13535 Mon Sep 17 00:00:00 2001 From: Erik-Jan Westendorp Date: Wed, 14 Sep 2022 13:36:36 +0200 Subject: [PATCH 27/33] Add label-key to prevent cleanup button (#12990) * Add label-key * Translate 'historyCleanupEnableCleanup' to Dutch * Add 'historyCleanupEnableCleanup' to en_us.xml --- src/Umbraco.Core/EmbeddedResources/Lang/en.xml | 1 + src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml | 1 + src/Umbraco.Core/EmbeddedResources/Lang/nl.xml | 1 + .../src/views/common/infiniteeditors/rollback/rollback.html | 3 ++- 4 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/en.xml b/src/Umbraco.Core/EmbeddedResources/Lang/en.xml index 77f8543491..a686b4eb56 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/en.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/en.xml @@ -1873,6 +1873,7 @@ To manage your website, simply open the Umbraco backoffice and start adding cont Keep all versions newer than days Keep latest version per day for days Prevent cleanup + Enable cleanup NOTE! The cleanup of historically content versions are disabled globally. These settings will not take effect before it is enabled.]]> diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml b/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml index f193518c24..33a33bbfe6 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml @@ -1947,6 +1947,7 @@ To manage your website, simply open the Umbraco backoffice and start adding cont Keep all versions newer than days Keep latest version per day for days Prevent cleanup + Enable cleanup NOTE! The cleanup of historically content versions are disabled globally. These settings will not take effect before it is enabled.]]> Changing a data type with stored values is disabled. To allow this you can change the Umbraco:CMS:DataTypes:CanBeChanged setting in appsettings.json. diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/nl.xml b/src/Umbraco.Core/EmbeddedResources/Lang/nl.xml index 28793081b7..53ec669c1b 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/nl.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/nl.xml @@ -1693,6 +1693,7 @@ Echter, Runway biedt een gemakkelijke basis om je snel op weg te helpen. Als je Bewaar alle versies nieuwer dan dagen Bewaar de laatste versie per dag voor dagen Voorkom opschonen + Opschonen aanzetten Geschiedenis opschonen is globaal uitgeschakeld. Deze instellingen worden pas van kracht nadat ze zijn ingeschakeld. diff --git a/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/rollback/rollback.html b/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/rollback/rollback.html index a5ac2ea6cb..2ad16e83f6 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/rollback/rollback.html +++ b/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/rollback/rollback.html @@ -73,7 +73,8 @@ size="xxs" state="version.pinningState" action="vm.pinVersion(version, $event)" - label="{{ version.preventCleanup ? 'Enable cleanup' : 'Prevent cleanup' }}"> + label="{{ version.preventCleanup ? 'Enable cleanup' : 'Prevent cleanup' }}" + label-key="{{version.preventCleanup ? 'contentTypeEditor_historyCleanupEnableCleanup' : 'contentTypeEditor_historyCleanupPreventCleanup' }}">
      From 6d27454ed2159d47fcd88ff04fe3e15b28c7f6db Mon Sep 17 00:00:00 2001 From: patrickdemooij9 Date: Fri, 16 Sep 2022 01:14:23 +0200 Subject: [PATCH 28/33] Added nullable helper for IfNullOrWhiteSpace (#12979) * Added nullable helper for IfNullOrWhiteSpace * Remove for str as that one could be an empty string --- src/Umbraco.Core/Extensions/StringExtensions.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Core/Extensions/StringExtensions.cs b/src/Umbraco.Core/Extensions/StringExtensions.cs index 694b4d05e6..805a29b908 100644 --- a/src/Umbraco.Core/Extensions/StringExtensions.cs +++ b/src/Umbraco.Core/Extensions/StringExtensions.cs @@ -419,7 +419,8 @@ public static class StringExtensions /// returns . /// public static bool IsNullOrWhiteSpace(this string? value) => string.IsNullOrWhiteSpace(value); - + + [return: NotNullIfNotNull("defaultValue")] public static string? IfNullOrWhiteSpace(this string? str, string? defaultValue) => str.IsNullOrWhiteSpace() ? defaultValue : str; From eddf0ad61e52de9f5b730fcb9712ffbeb6eeee98 Mon Sep 17 00:00:00 2001 From: Bjarne Fyrstenborg Date: Fri, 16 Sep 2022 02:45:10 +0200 Subject: [PATCH 29/33] Only show table when any filtered result (#12993) * Only show table when any filtered result * Show table when any filtered dictionary items --- .../dictionary/dictionary.list.controller.js | 16 ++++++++++------ .../src/views/dictionary/list.html | 17 ++++++++--------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/dictionary/dictionary.list.controller.js b/src/Umbraco.Web.UI.Client/src/views/dictionary/dictionary.list.controller.js index a6121e3afb..788e438936 100644 --- a/src/Umbraco.Web.UI.Client/src/views/dictionary/dictionary.list.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/dictionary/dictionary.list.controller.js @@ -7,7 +7,9 @@ * The controller for listting dictionary items */ function DictionaryListController($scope, $location, dictionaryResource, localizationService, appState, navigationService) { - var vm = this; + + const vm = this; + vm.title = "Dictionary overview"; vm.loading = false; vm.items = []; @@ -20,11 +22,13 @@ function DictionaryListController($scope, $location, dictionaryResource, localiz vm.loading = true; dictionaryResource.getList() - .then(function (data) { - vm.items = data; - vm.items.forEach(function(item){ - item.style = { "paddingLeft": item.level * 10 }; + .then(data => { + let items = data || []; + + items.forEach(item => { + item.style = { "paddingLeft": item.level * 10 }; }); + vm.items = items; vm.loading = false; }); } @@ -47,7 +51,7 @@ function DictionaryListController($scope, $location, dictionaryResource, localiz vm.createNewItem = createNewItem; function onInit() { - localizationService.localize("dictionaryItem_overviewTitle").then(function (value) { + localizationService.localize("dictionaryItem_overviewTitle").then(value => { vm.title = value; }); diff --git a/src/Umbraco.Web.UI.Client/src/views/dictionary/list.html b/src/Umbraco.Web.UI.Client/src/views/dictionary/list.html index 43fe6c45ec..0acd6ae0a3 100644 --- a/src/Umbraco.Web.UI.Client/src/views/dictionary/list.html +++ b/src/Umbraco.Web.UI.Client/src/views/dictionary/list.html @@ -1,9 +1,6 @@
      - - - - + - + + + @@ -42,7 +41,7 @@ - +
      @@ -51,7 +50,7 @@ - + @@ -69,8 +68,8 @@
      Dictionary items
      - - There were no dictionary items found. From 6967fadf3d51b02dccfd41cd780d5bc23a28a3fc Mon Sep 17 00:00:00 2001 From: Sean <29239704+Bakersbakebread@users.noreply.github.com> Date: Sat, 17 Sep 2022 12:00:06 +0100 Subject: [PATCH 30/33] pass in parameters needed to member service (#13020) --- src/Umbraco.Core/Services/MemberService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Core/Services/MemberService.cs b/src/Umbraco.Core/Services/MemberService.cs index 76d730dc78..4f242cb53e 100644 --- a/src/Umbraco.Core/Services/MemberService.cs +++ b/src/Umbraco.Core/Services/MemberService.cs @@ -180,10 +180,10 @@ namespace Umbraco.Cms.Core.Services => CreateMemberWithIdentity(username, email, string.Empty, string.Empty, memberTypeAlias, isApproved); public IMember CreateMemberWithIdentity(string username, string email, string name, string memberTypeAlias) - => CreateMemberWithIdentity(username, email, string.Empty, string.Empty, memberTypeAlias); + => CreateMemberWithIdentity(username, email, name, string.Empty, memberTypeAlias); public IMember CreateMemberWithIdentity(string username, string email, string name, string memberTypeAlias, bool isApproved) - => CreateMemberWithIdentity(username, string.Empty, name, string.Empty, memberTypeAlias, isApproved); + => CreateMemberWithIdentity(username, email, name, string.Empty, memberTypeAlias, isApproved); /// /// Creates and persists a Member From 6f9bf59e045396fa1acc4edbb3a74c4830da31ee Mon Sep 17 00:00:00 2001 From: Mike Masey Date: Sat, 17 Sep 2022 13:45:33 +0100 Subject: [PATCH 31/33] fix: focus state for search and help icons --- .../components/application/umb-app-header.less | 4 ++++ .../components/application/umb-app-header.html | 14 ++++++-------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/less/components/application/umb-app-header.less b/src/Umbraco.Web.UI.Client/src/less/components/application/umb-app-header.less index 8e9fdf902d..a9b9cf6936 100644 --- a/src/Umbraco.Web.UI.Client/src/less/components/application/umb-app-header.less +++ b/src/Umbraco.Web.UI.Client/src/less/components/application/umb-app-header.less @@ -75,6 +75,10 @@ align-items: center; height: @appHeaderHeight; outline: none; + + .umb-icon { + display: block; + } &:focus { .tabbing-active & { diff --git a/src/Umbraco.Web.UI.Client/src/views/components/application/umb-app-header.html b/src/Umbraco.Web.UI.Client/src/views/components/application/umb-app-header.html index 763ddd20cf..7936a7848e 100644 --- a/src/Umbraco.Web.UI.Client/src/views/components/application/umb-app-header.html +++ b/src/Umbraco.Web.UI.Client/src/views/components/application/umb-app-header.html @@ -54,10 +54,9 @@ >Open backoffice search... - + + +
    • @@ -75,10 +74,9 @@ >Open/Close backoffice help... - + + +
    • From 0b1295d05bd849cbcc99cf496b3345f815fac997 Mon Sep 17 00:00:00 2001 From: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com> Date: Mon, 19 Sep 2022 09:26:10 +0100 Subject: [PATCH 32/33] Missing methods from IMemberService (#13022) * Add back methods to interface * Add default implementations to avoid breaking changes Co-authored-by: Zeegaan --- src/Umbraco.Core/Services/IMemberService.cs | 51 +++++++++++++++++++++ src/Umbraco.Core/Services/MemberService.cs | 2 +- 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Core/Services/IMemberService.cs b/src/Umbraco.Core/Services/IMemberService.cs index ec600efab7..b2b2b5d8d5 100644 --- a/src/Umbraco.Core/Services/IMemberService.cs +++ b/src/Umbraco.Core/Services/IMemberService.cs @@ -90,6 +90,39 @@ public interface IMemberService : IMembershipMemberService /// IMember CreateMember(string username, string email, string name, IMemberType memberType); + /// + /// Creates and persists a Member + /// + /// + /// Using this method will persist the Member object before its returned + /// meaning that it will have an Id available (unlike the CreateMember method) + /// + /// Username of the Member to create + /// Email of the Member to create + /// Alias of the MemberType the Member should be based on + /// + /// + /// + IMember CreateMemberWithIdentity(string username, string email, string memberTypeAlias) => + throw new NotImplementedException(); + + /// + /// Creates and persists a Member + /// + /// + /// Using this method will persist the Member object before its returned + /// meaning that it will have an Id available (unlike the CreateMember method) + /// + /// Username of the Member to create + /// Email of the Member to create + /// Alias of the MemberType the Member should be based on + /// Whether the member is approved or not + /// + /// + /// + IMember CreateMemberWithIdentity(string username, string email, string memberTypeAlias, bool isApproved) => + throw new NotImplementedException(); + /// /// Creates and persists a Member /// @@ -106,6 +139,24 @@ public interface IMemberService : IMembershipMemberService /// IMember CreateMemberWithIdentity(string username, string email, string name, string memberTypeAlias); + /// + /// Creates and persists a Member + /// + /// + /// Using this method will persist the Member object before its returned + /// meaning that it will have an Id available (unlike the CreateMember method) + /// + /// Username of the Member to create + /// Email of the Member to create + /// Name of the Member to create + /// Alias of the MemberType the Member should be based on + /// Whether the member is approved or not + /// + /// + /// + IMember CreateMemberWithIdentity(string username, string email, string name, string memberTypeAlias, bool isApproved) + => throw new NotImplementedException(); + /// /// Creates and persists a Member /// diff --git a/src/Umbraco.Core/Services/MemberService.cs b/src/Umbraco.Core/Services/MemberService.cs index 4f242cb53e..21f9948c1d 100644 --- a/src/Umbraco.Core/Services/MemberService.cs +++ b/src/Umbraco.Core/Services/MemberService.cs @@ -177,7 +177,7 @@ namespace Umbraco.Cms.Core.Services => CreateMemberWithIdentity(username, email, username, string.Empty, memberTypeAlias); public IMember CreateMemberWithIdentity(string username, string email, string memberTypeAlias, bool isApproved) - => CreateMemberWithIdentity(username, email, string.Empty, string.Empty, memberTypeAlias, isApproved); + => CreateMemberWithIdentity(username, email, username, string.Empty, memberTypeAlias, isApproved); public IMember CreateMemberWithIdentity(string username, string email, string name, string memberTypeAlias) => CreateMemberWithIdentity(username, email, name, string.Empty, memberTypeAlias); From 8d5fb41ab77c74ea3c38e713a92bf6f0216dbd44 Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Tue, 20 Sep 2022 09:08:28 +0200 Subject: [PATCH 33/33] Revert "Updated dependencies and fixed new NRT issues" This reverts commit b2b2903a6e83b42f8d64a8f97f5f7692fdb9e9d6. --- Directory.Build.props | 2 +- .../Serilog/Enrichers/ThreadAbortExceptionEnricher.cs | 6 +++--- .../Umbraco.Infrastructure.csproj | 10 +++++----- .../Umbraco.PublishedCache.NuCache.csproj | 2 +- .../Umbraco.Web.BackOffice.csproj | 2 +- .../Media/MediaPrependBasePathFileProvider.cs | 4 ++-- src/Umbraco.Web.Common/Umbraco.Web.Common.csproj | 8 +++----- src/Umbraco.Web.UI/Umbraco.Web.UI.csproj | 8 -------- .../Umbraco.Tests.Benchmarks.csproj | 2 +- tests/Umbraco.Tests.Common/Umbraco.Tests.Common.csproj | 2 +- .../Umbraco.Tests.Integration.csproj | 3 +-- 11 files changed, 19 insertions(+), 30 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 487c193812..8ae2e0baec 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -8,7 +8,7 @@ all - 3.5.109 + 3.5.107 diff --git a/src/Umbraco.Infrastructure/Logging/Serilog/Enrichers/ThreadAbortExceptionEnricher.cs b/src/Umbraco.Infrastructure/Logging/Serilog/Enrichers/ThreadAbortExceptionEnricher.cs index 4083aa7311..45495de9e8 100644 --- a/src/Umbraco.Infrastructure/Logging/Serilog/Enrichers/ThreadAbortExceptionEnricher.cs +++ b/src/Umbraco.Infrastructure/Logging/Serilog/Enrichers/ThreadAbortExceptionEnricher.cs @@ -38,9 +38,9 @@ public class ThreadAbortExceptionEnricher : ILogEventEnricher } } - private static bool IsTimeoutThreadAbortException(Exception? exception) + private static bool IsTimeoutThreadAbortException(Exception exception) { - if (exception is null || !(exception is ThreadAbortException abort)) + if (!(exception is ThreadAbortException abort)) { return false; } @@ -76,7 +76,7 @@ public class ThreadAbortExceptionEnricher : ILogEventEnricher // dump if configured, or if stacktrace contains Monitor.ReliableEnter var dump = _coreDebugSettings.DumpOnTimeoutThreadAbort || - IsMonitorEnterThreadAbortException(logEvent.Exception!); + IsMonitorEnterThreadAbortException(logEvent.Exception); // dump if it is ok to dump (might have a cap on number of dump...) dump &= MiniDump.OkToDump(_hostingEnvironment); diff --git a/src/Umbraco.Infrastructure/Umbraco.Infrastructure.csproj b/src/Umbraco.Infrastructure/Umbraco.Infrastructure.csproj index 0f2163b6b8..7903f14f96 100644 --- a/src/Umbraco.Infrastructure/Umbraco.Infrastructure.csproj +++ b/src/Umbraco.Infrastructure/Umbraco.Infrastructure.csproj @@ -18,8 +18,8 @@ - - + + @@ -36,14 +36,14 @@ - + - + - + diff --git a/src/Umbraco.PublishedCache.NuCache/Umbraco.PublishedCache.NuCache.csproj b/src/Umbraco.PublishedCache.NuCache/Umbraco.PublishedCache.NuCache.csproj index 7b729d5097..0eb68b99fe 100644 --- a/src/Umbraco.PublishedCache.NuCache/Umbraco.PublishedCache.NuCache.csproj +++ b/src/Umbraco.PublishedCache.NuCache/Umbraco.PublishedCache.NuCache.csproj @@ -18,7 +18,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/src/Umbraco.Web.BackOffice/Umbraco.Web.BackOffice.csproj b/src/Umbraco.Web.BackOffice/Umbraco.Web.BackOffice.csproj index 21066d19bb..eb3a5c5f01 100644 --- a/src/Umbraco.Web.BackOffice/Umbraco.Web.BackOffice.csproj +++ b/src/Umbraco.Web.BackOffice/Umbraco.Web.BackOffice.csproj @@ -24,7 +24,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + all diff --git a/src/Umbraco.Web.Common/Media/MediaPrependBasePathFileProvider.cs b/src/Umbraco.Web.Common/Media/MediaPrependBasePathFileProvider.cs index 45d522d0de..c6ce59456d 100644 --- a/src/Umbraco.Web.Common/Media/MediaPrependBasePathFileProvider.cs +++ b/src/Umbraco.Web.Common/Media/MediaPrependBasePathFileProvider.cs @@ -70,7 +70,7 @@ internal class MediaPrependBasePathFileProvider : IFileProvider if (TryMapSubPath(subpath, out PathString newPath)) { // KJA changed: use explicit newPath.Value instead of implicit newPath string operator (which calls ToString()) - IFileInfo? result = _underlyingFileProvider.GetFileInfo(newPath.Value!); + IFileInfo? result = _underlyingFileProvider.GetFileInfo(newPath.Value); return result; } @@ -84,7 +84,7 @@ internal class MediaPrependBasePathFileProvider : IFileProvider if (TryMapSubPath(filter, out PathString newPath)) { // KJA changed: use explicit newPath.Value instead of implicit newPath string operator (which calls ToString()) - IChangeToken? result = _underlyingFileProvider.Watch(newPath.Value!); + IChangeToken? result = _underlyingFileProvider.Watch(newPath.Value); return result; } diff --git a/src/Umbraco.Web.Common/Umbraco.Web.Common.csproj b/src/Umbraco.Web.Common/Umbraco.Web.Common.csproj index bda3be4ebc..c75ddfe98f 100644 --- a/src/Umbraco.Web.Common/Umbraco.Web.Common.csproj +++ b/src/Umbraco.Web.Common/Umbraco.Web.Common.csproj @@ -37,14 +37,12 @@ - - - + - - + + diff --git a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj index 2e9cca84fc..2ec54bc2d8 100644 --- a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj +++ b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj @@ -17,14 +17,6 @@ - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - all - diff --git a/tests/Umbraco.Tests.Benchmarks/Umbraco.Tests.Benchmarks.csproj b/tests/Umbraco.Tests.Benchmarks/Umbraco.Tests.Benchmarks.csproj index b8e9130d56..29e0a36353 100644 --- a/tests/Umbraco.Tests.Benchmarks/Umbraco.Tests.Benchmarks.csproj +++ b/tests/Umbraco.Tests.Benchmarks/Umbraco.Tests.Benchmarks.csproj @@ -23,7 +23,7 @@ - 0.13.2 + 0.13.1 6.0.0 diff --git a/tests/Umbraco.Tests.Common/Umbraco.Tests.Common.csproj b/tests/Umbraco.Tests.Common/Umbraco.Tests.Common.csproj index e24424631f..05a5554db2 100644 --- a/tests/Umbraco.Tests.Common/Umbraco.Tests.Common.csproj +++ b/tests/Umbraco.Tests.Common/Umbraco.Tests.Common.csproj @@ -16,7 +16,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/tests/Umbraco.Tests.Integration/Umbraco.Tests.Integration.csproj b/tests/Umbraco.Tests.Integration/Umbraco.Tests.Integration.csproj index 43c6aa2a1a..687f9dfca0 100644 --- a/tests/Umbraco.Tests.Integration/Umbraco.Tests.Integration.csproj +++ b/tests/Umbraco.Tests.Integration/Umbraco.Tests.Integration.csproj @@ -85,14 +85,13 @@ - - + all