diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0e87f9824d..f8d8aac342 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -41,7 +41,7 @@ This project and everyone participating in it is governed by the [our Code of Co ### Reporting Bugs This section guides you through submitting a bug report for Umbraco CMS. Following these guidelines helps maintainers and the community understand your report 📝, reproduce the behavior 💻 💻, and find related reports 🔎. -Before creating bug reports, please check [this list](#before-submitting-a-bug-report) as you might find out that you don't need to create one. When you are creating a bug report, please [include as many details as possible](#how-do-i-submit-a-good-bug-report). Fill out [the required template](ISSUE_TEMPLATE.md), the information it asks for helps us resolve issues faster. +Before creating bug reports, please check [this list](#before-submitting-a-bug-report) as you might find out that you don't need to create one. When you are creating a bug report, please [include as many details as possible](#how-do-i-submit-a-good-bug-report). Fill out [the required template](http://issues.umbraco.org/issues#newissue=61-30118), the information it asks for helps us resolve issues faster. > **Note:** If you find a **Closed** issue that seems like it is the same thing that you're experiencing, open a new issue and include a link to the original issue in the body of your new one. diff --git a/src/Umbraco.Core/Scoping/Scope.cs b/src/Umbraco.Core/Scoping/Scope.cs index 01edb83d07..31386c9d0a 100644 --- a/src/Umbraco.Core/Scoping/Scope.cs +++ b/src/Umbraco.Core/Scoping/Scope.cs @@ -355,7 +355,7 @@ namespace Umbraco.Core.Scoping } var parent = ParentScope; - _scopeProvider.AmbientScope = parent; + _scopeProvider.AmbientScope = parent; // might be null = this is how scopes are removed from context objects #if DEBUG_SCOPES _scopeProvider.Disposed(this); diff --git a/src/Umbraco.Core/Services/IContentService.cs b/src/Umbraco.Core/Services/IContentService.cs index 93128ca67c..cb56b39e2c 100644 --- a/src/Umbraco.Core/Services/IContentService.cs +++ b/src/Umbraco.Core/Services/IContentService.cs @@ -43,17 +43,17 @@ namespace Umbraco.Core.Services /// Creates a new content item from a blueprint. /// IContent CreateContentFromBlueprint(IContent blueprint, string name, int userId = 0); - + /// /// Deletes blueprints for a content type. /// void DeleteBlueprintsOfType(int contentTypeId, int userId = 0); - + /// /// Deletes blueprints for content types. /// void DeleteBlueprintsOfTypes(IEnumerable contentTypeIds, int userId = 0); - + #endregion #region Get, Count Documents @@ -340,7 +340,7 @@ namespace Umbraco.Core.Services /// Sorts documents. /// bool Sort(IEnumerable ids, int userId = 0, bool raiseEvents = true); - + #endregion #region Publish Document diff --git a/src/Umbraco.Core/Services/IdkMap.cs b/src/Umbraco.Core/Services/IdkMap.cs index 668e3f4b09..9ec62fda0f 100644 --- a/src/Umbraco.Core/Services/IdkMap.cs +++ b/src/Umbraco.Core/Services/IdkMap.cs @@ -59,8 +59,9 @@ namespace Umbraco.Core.Services _locker.EnterWriteLock(); foreach (var pair in pairs) { - _id2Key.Add(pair.id, new TypedId(pair.key, umbracoObjectType)); - _key2Id.Add(pair.key, new TypedId(pair.id, umbracoObjectType)); + + _id2Key[pair.id] = new TypedId(pair.key, umbracoObjectType); + _key2Id[pair.key] = new TypedId(pair.id, umbracoObjectType); } } finally diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/application/umbtour.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/application/umbtour.directive.js index 6dc066b282..55641b6ec7 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/application/umbtour.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/application/umbtour.directive.js @@ -25,6 +25,7 @@ The tour object consist of two parts - The overall tour configuration and a list "group": "My Custom Group" // Used to group tours in the help drawer "groupOrder": 200 // Control the order of tour groups "allowDisable": // Adds a "Don't" show this tour again"-button to the intro step + "culture" : // From v7.11+. Specifies the culture of the tour (eg. en-US), if set the tour will only be shown to users with this culture set on their profile. If omitted or left empty the tour will be visible to all users "requiredSections":["content", "media", "mySection"] // Sections that the tour will access while running, if the user does not have access to the required tour sections, the tour will not load. "steps": [] // tour steps - see next example } diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/content/edit.controller.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/content/edit.controller.js index 8e214ae885..ffac0bf965 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/content/edit.controller.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/content/edit.controller.js @@ -286,6 +286,7 @@ $scope.page.buttonGroupState = "success"; }, function (err) { + formHelper.showNotifications(err.data); $scope.page.buttonGroupState = 'error'; }); } diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/content.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/content.resource.js index fe3a86e930..7d560d7b43 100644 --- a/src/Umbraco.Web.UI.Client/src/common/resources/content.resource.js +++ b/src/Umbraco.Web.UI.Client/src/common/resources/content.resource.js @@ -57,7 +57,7 @@ function contentResource($q, $http, umbDataFormatter, umbRequestHelper) { saveModel), 'Failed to save permissions'); }, - + getRecycleBin: function () { return umbRequestHelper.resourcePromise( @@ -425,7 +425,7 @@ function contentResource($q, $http, umbDataFormatter, umbRequestHelper) { $http.get( umbRequestHelper.getApiUrl( "contentApiBaseUrl", - "GetEmpty", + "GetEmpty", [{ blueprintId: blueprintId }, { parentId: parentId}])), 'Failed to retrieve blueprint for id ' + blueprintId); }, @@ -489,6 +489,7 @@ function contentResource($q, $http, umbDataFormatter, umbRequestHelper) { getChildren: function (parentId, options) { var defaults = { + includeProperties: [], pageSize: 0, pageNumber: 0, filter: '', @@ -532,6 +533,7 @@ function contentResource($q, $http, umbDataFormatter, umbRequestHelper) { "GetChildren", { id: parentId, + includeProperties: _.pluck(options.includeProperties, 'alias').join(","), pageNumber: options.pageNumber, pageSize: options.pageSize, orderBy: options.orderBy, @@ -581,7 +583,7 @@ function contentResource($q, $http, umbDataFormatter, umbRequestHelper) { "contentApiBaseUrl", "GetDetailedPermissions", { contentId: contentId })), 'Failed to retrieve permissions for content item ' + contentId); - }, + }, getPermissions: function (nodeIds) { return umbRequestHelper.resourcePromise( @@ -742,11 +744,11 @@ function contentResource($q, $http, umbDataFormatter, umbRequestHelper) { createBlueprintFromContent: function (contentId, name) { return umbRequestHelper.resourcePromise( - $http.post( + $http.post( umbRequestHelper.getApiUrl("contentApiBaseUrl", "CreateBlueprintFromContent", { contentId: contentId, name: name - }) - ), + }) + ), "Failed to create blueprint from content with id " + contentId ); } 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 06df2e0695..090d6a1ee9 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 @@ -122,6 +122,18 @@ function mediaTypeResource($q, $http, umbRequestHelper, umbDataFormatter) { 'Failed to delete content type contaier'); }, + /** + * @ngdoc method + * @name umbraco.resources.mediaTypeResource#save + * @methodOf umbraco.resources.mediaTypeResource + * + * @description + * Saves or update a media type + * + * @param {Object} content data type object to create/update + * @returns {Promise} resourcePromise object. + * + */ save: function (contentType) { var saveModel = umbDataFormatter.formatContentTypePostData(contentType); diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/membertype.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/membertype.resource.js index 6c83f69f84..eba0b41fe0 100644 --- a/src/Umbraco.Web.UI.Client/src/common/resources/membertype.resource.js +++ b/src/Umbraco.Web.UI.Client/src/common/resources/membertype.resource.js @@ -86,8 +86,8 @@ function memberTypeResource($q, $http, umbRequestHelper, umbDataFormatter) { /** * @ngdoc method - * @name umbraco.resources.contentTypeResource#save - * @methodOf umbraco.resources.contentTypeResource + * @name umbraco.resources.memberTypeResource#save + * @methodOf umbraco.resources.memberTypeResource * * @description * Saves or update a member type diff --git a/src/Umbraco.Web.UI.Client/src/common/services/contenteditinghelper.service.js b/src/Umbraco.Web.UI.Client/src/common/services/contenteditinghelper.service.js index dde6e2e612..36a184cd95 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/contenteditinghelper.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/contenteditinghelper.service.js @@ -237,10 +237,11 @@ function contentEditingHelper(fileManager, $q, $location, $routeParams, notifica } - //if we are not creating, then we should add unpublish too, + // if we are not creating, then we should add unpublish too, // so long as it's already published and if the user has access to publish + // and the user has access to unpublish (may have been removed via Event) if (!args.create) { - if (args.content.publishDate && _.contains(args.content.allowedActions, "U")) { + if (args.content.publishDate && _.contains(args.content.allowedActions, "U") && _.contains(args.content.allowedActions, "Z")) { buttons.subButtons.push(createButtonDefinition("Z")); } } diff --git a/src/Umbraco.Web.UI.Client/src/less/components/umb-grid.less b/src/Umbraco.Web.UI.Client/src/less/components/umb-grid.less index 5cc4817142..107c14ad86 100644 --- a/src/Umbraco.Web.UI.Client/src/less/components/umb-grid.less +++ b/src/Umbraco.Web.UI.Client/src/less/components/umb-grid.less @@ -8,7 +8,7 @@ -// Sortabel +// Sortable // ------------------------- // sortable-helper @@ -127,6 +127,16 @@ position: relative; margin-bottom: 40px; padding-top: 10px; + + &:hover { + background-color: @grayLighter; + } + + &[ng-click], + &[data-ng-click], + &[x-ng-click] { + cursor: pointer; + } } .umb-grid .row-tools a { @@ -431,7 +441,7 @@ background-color: @gray-10; .umb-row-title-bar { - cursor: default; + cursor: inherit; } .umb-row-title { diff --git a/src/Umbraco.Web.UI.Client/src/views/media/create.html b/src/Umbraco.Web.UI.Client/src/views/media/create.html index cfcbf1012f..56a1c9e90c 100644 --- a/src/Umbraco.Web.UI.Client/src/views/media/create.html +++ b/src/Umbraco.Web.UI.Client/src/views/media/create.html @@ -16,24 +16,23 @@ {{docType.name}} - - {{docType.description}} - + {{docType.description}} - + diff --git a/src/Umbraco.Web.UI.Client/src/views/member/create.html b/src/Umbraco.Web.UI.Client/src/views/member/create.html index 188c6214eb..57a11ac068 100644 --- a/src/Umbraco.Web.UI.Client/src/views/member/create.html +++ b/src/Umbraco.Web.UI.Client/src/views/member/create.html @@ -6,10 +6,9 @@
  • - - - - {{docType.name}} + + + {{docType.name}} {{docType.description}} @@ -24,4 +23,3 @@ Do something else - diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/contentpicker/contentpicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/contentpicker/contentpicker.controller.js index 14e2d1bf23..13c31ea1ad 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/contentpicker/contentpicker.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/contentpicker/contentpicker.controller.js @@ -1,6 +1,6 @@ /** - * The controller that is used for a couple different Property Editors: Multi Node Tree Picker, Content Picker, + * The controller that is used for a couple different Property Editors: Multi Node Tree Picker, Content Picker, * since this is used by MNTP and it supports content, media and members, there is code to deal with all 3 of those types * @param {any} $scope * @param {any} entityResource @@ -70,7 +70,7 @@ function contentPickerController($scope, entityResource, editorState, iconHelper $scope.renderModel = []; - $scope.dialogEditor = editorState && editorState.current && editorState.current.isDialogEditor === true; + $scope.dialogEditor = editorState && editorState.current && editorState.current.isDialogEditor === true; //the default pre-values var defaultConfig = { @@ -105,7 +105,7 @@ function contentPickerController($scope, entityResource, editorState, iconHelper $scope.model.config.showOpenButton = Object.toBoolean($scope.model.config.showOpenButton); $scope.model.config.showEditButton = Object.toBoolean($scope.model.config.showEditButton); $scope.model.config.showPathOnHover = Object.toBoolean($scope.model.config.showPathOnHover); - + var entityType = $scope.model.config.startNode.type === "member" ? "Member" : $scope.model.config.startNode.type === "media" @@ -135,8 +135,8 @@ function contentPickerController($scope, entityResource, editorState, iconHelper }, treeAlias: $scope.model.config.startNode.type, section: $scope.model.config.startNode.type, - idType: "int", - //only show the lang selector for content + idType: "int", + //only show the lang selector for content showLanguageSelector: $scope.model.config.startNode.type === "content" }; diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/nestedcontent/nestedcontent.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/nestedcontent/nestedcontent.controller.js index 03edf35853..728c820ca9 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/nestedcontent/nestedcontent.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/nestedcontent/nestedcontent.controller.js @@ -267,11 +267,6 @@ angular.module("umbraco").controller("Umbraco.PropertyEditors.NestedContent.Prop } var notSupported = [ - "Umbraco.CheckBoxList", - "Umbraco.DropDownMultiple", - "Umbraco.MacroContainer", - "Umbraco.RadioButtonList", - "Umbraco.MultipleTextstring", "Umbraco.Tags", "Umbraco.UploadField", "Umbraco.ImageCropper" diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/rte/rte.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/rte/rte.controller.js index f886c60bc1..17f0f3b698 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/rte/rte.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/rte/rte.controller.js @@ -266,7 +266,7 @@ angular.module("umbraco") editor.on('ObjectResized', function (e) { - var qs = "?width=" + e.width + "&height=" + e.height; + var qs = "?width=" + e.width + "&height=" + e.height + "&mode=max"; var srcAttr = $(e.target).attr("src"); var path = srcAttr.split("?")[0]; $(e.target).attr("data-mce-src", path + qs); @@ -384,7 +384,7 @@ angular.module("umbraco") // element might still be there even after the modal has been hidden. $scope.$on('$destroy', function () { unsubscribe(); - if (tinyMceEditor !== undefined && tinyMceEditor != null) { + if (tinyMceEditor !== undefined && tinyMceEditor != null) { tinyMceEditor.destroy() } }); diff --git a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj index 3618a12480..0d8d4f48d0 100644 --- a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj +++ b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj @@ -368,6 +368,7 @@ UI.xml + Designer diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/zh_tw.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/zh_tw.xml index cdcf095aae..b1997a1c0a 100644 --- a/src/Umbraco.Web.UI/Umbraco/config/lang/zh_tw.xml +++ b/src/Umbraco.Web.UI/Umbraco/config/lang/zh_tw.xml @@ -1283,7 +1283,7 @@ 媒體 - 所有XML:%0%,總共發佈:%1%,不合格:%2% 內容 - 所有XML:%0%,總共發佈:%1%,不合格:%2% 憑證驗證錯誤:%0% - 網址探查錯誤:%0% - '%1%' + 網址探查錯誤:%0% - '%1%' 您目前使用HTTPS瀏覽本站:%0% 在您的web.config檔案中,appSetting的umbracoUseSSL是設為false。當您開始使用HTTPS時,應將其改為 true。 在您的web.config檔案中,appSetting的umbracoUseSSL是設為 %0%,您的cookies %0% 標成安全。 @@ -1316,10 +1316,10 @@ %0%。如果無須寫入,不需採取行動。]]> X-Frame-Options 設定能控制網站是否可以被其他人IFRAMEd已找到。]]> X-Frame-Options 設定能控制網站是否可以被其他人IFRAMEd沒有找到。]]> - 調整設定的標頭 + 調整設定的標頭 在 web.config 的 httpProtocol/customHeaders 區域增加設定來防止本站被別的網站IFRAMEd。 在 web.config 的 httpProtocol/customHeaders 區域已經增加設定來防止本站被別的網站IFRAMEd。 - 無法更新web.config檔案,錯誤:%0% + 無法更新web.config檔案,錯誤:%0% diff --git a/src/Umbraco.Web.UI/umbraco/config/create/UI.Release.xml b/src/Umbraco.Web.UI/umbraco/config/create/UI.Release.xml index c640d7ad98..1a082ab916 100644 --- a/src/Umbraco.Web.UI/umbraco/config/create/UI.Release.xml +++ b/src/Umbraco.Web.UI/umbraco/config/create/UI.Release.xml @@ -30,20 +30,6 @@ - -
    Macro
    - /create/xslt.ascx - - - -
    - -
    Xslt
    - /create/xslt.ascx - - - -
    User
    /create/user.ascx diff --git a/src/Umbraco.Web.UI/umbraco/config/create/UI.xml b/src/Umbraco.Web.UI/umbraco/config/create/UI.xml index 56225e1562..46c93c6ede 100644 --- a/src/Umbraco.Web.UI/umbraco/config/create/UI.xml +++ b/src/Umbraco.Web.UI/umbraco/config/create/UI.xml @@ -30,21 +30,7 @@
    - -
    Macro
    - /create/xslt.ascx - - - -
    - -
    Xslt
    - /create/xslt.ascx - - - - -
    +
    User
    /create/user.ascx diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/en.xml b/src/Umbraco.Web.UI/umbraco/config/lang/en.xml index b03b028607..993f845831 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/en.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/en.xml @@ -1938,7 +1938,7 @@ To manage your website, simply open the Umbraco back office and start adding con Certificate validation error: '%0%' Your website's SSL certificate has expired. Your website's SSL certificate is expiring in %0% days. - Error pinging the URL %0% - '%1%' + Error pinging the URL %0% - '%1%' You are currently %0% viewing the site using the HTTPS scheme. The appSetting 'umbracoUseSSL' is set to 'false' in your web.config file. Once you access this site using the HTTPS scheme, that should be set to 'true'. The appSetting 'umbracoUseSSL' is set to '%0%' in your web.config file, your cookies are %1% marked as secure. @@ -1978,10 +1978,25 @@ To manage your website, simply open the Umbraco back office and start adding con X-Frame-Options used to control whether a site can be IFRAMEd by another was found.]]> X-Frame-Options used to control whether a site can be IFRAMEd by another was not found.]]> - Set Header in Config + Set Header in Config Adds a value to the httpProtocol/customHeaders section of web.config to prevent the site being IFRAMEd by other websites. A setting to create a header preventing IFRAMEing of the site by other websites has been added to your web.config file. - Could not update web.config file. Error: %0% + Could not update web.config file. Error: %0% + + X-Content-Type-Options used to protect against MIME sniffing vulnerabilities was found.]]> + X-Content-Type-Options used to protect against MIME sniffing vulnerabilities was not found.]]> + Adds a value to the httpProtocol/customHeaders section of web.config to protect against MIME sniffing vulnerabilities. + A setting to create a header protecting against MIME sniffing vulnerabilities has been added to your web.config file. + + Strict-Transport-Security, also known as the HSTS-header, was found.]]> + Strict-Transport-Security was not found.]]> + Adds the header 'Strict-Transport-Security' with the value 'max-age=10886400; preload' to the httpProtocol/customHeaders section of web.config. Use this fix only if you will have your domains running with https for the next 18 weeks (minimum). + The HSTS header has been added to your web.config file. + + X-XSS-Protection was found.]]> + X-XSS-Protection was not found.]]> + Adds the header 'X-XSS-Protection' with the value '1; mode=block' to the httpProtocol/customHeaders section of web.config. + The X-XSS-Protection header has been added to your web.config file.