Skip to content

Commit a3b721b

Browse files
Merge branch 'v8/contrib' into v8/dev
# Conflicts: # src/Umbraco.Web.UI.Client/src/views/documenttypes/views/permissions/permissions.html # src/Umbraco.Web.UI/Umbraco/config/lang/en.xml # src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml
2 parents 1c36af8 + b4059ec commit a3b721b

File tree

88 files changed

+709
-559
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

88 files changed

+709
-559
lines changed

src/Umbraco.Core/Constants-Conventions.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -242,9 +242,14 @@ public static class Member
242242
public const string FailedPasswordAttemptsLabel = "Failed Password Attempts";
243243

244244
/// <summary>
245-
/// Group name to put the membership properties on
245+
/// The standard properties group alias for membership properties.
246246
/// </summary>
247-
internal const string StandardPropertiesGroupName = "Membership";
247+
public const string StandardPropertiesGroupAlias = "membership";
248+
249+
/// <summary>
250+
/// The standard properties group name for membership properties.
251+
/// </summary>
252+
public const string StandardPropertiesGroupName = "Membership";
248253

249254
public static Dictionary<string, PropertyType> GetStandardPropertyTypeStubs()
250255
{

src/Umbraco.Core/Migrations/Install/DatabaseDataCreator.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -188,9 +188,9 @@ private void CreateUserData()
188188

189189
private void CreateUserGroupData()
190190
{
191-
_database.Insert(Constants.DatabaseSchema.Tables.UserGroup, "id", false, new UserGroupDto { Id = 1, StartMediaId = -1, StartContentId = -1, Alias = Constants.Security.AdminGroupAlias, Name = "Administrators", DefaultPermissions = "CADMOSKTPIURZ:5F7ï", CreateDate = DateTime.Now, UpdateDate = DateTime.Now, Icon = "icon-medal" });
192-
_database.Insert(Constants.DatabaseSchema.Tables.UserGroup, "id", false, new UserGroupDto { Id = 2, StartMediaId = -1, StartContentId = -1, Alias = Constants.Security.WriterGroupAlias, Name = "Writers", DefaultPermissions = "CAH:F", CreateDate = DateTime.Now, UpdateDate = DateTime.Now, Icon = "icon-edit" });
193-
_database.Insert(Constants.DatabaseSchema.Tables.UserGroup, "id", false, new UserGroupDto { Id = 3, StartMediaId = -1, StartContentId = -1, Alias = Constants.Security.EditorGroupAlias, Name = "Editors", DefaultPermissions = "CADMOSKTPUZ:5Fï", CreateDate = DateTime.Now, UpdateDate = DateTime.Now, Icon = "icon-tools" });
191+
_database.Insert(Constants.DatabaseSchema.Tables.UserGroup, "id", false, new UserGroupDto { Id = 1, StartMediaId = -1, StartContentId = -1, Alias = Constants.Security.AdminGroupAlias, Name = "Administrators", DefaultPermissions = "CADMOSKTPIURZ:5F7ïN", CreateDate = DateTime.Now, UpdateDate = DateTime.Now, Icon = "icon-medal" });
192+
_database.Insert(Constants.DatabaseSchema.Tables.UserGroup, "id", false, new UserGroupDto { Id = 2, StartMediaId = -1, StartContentId = -1, Alias = Constants.Security.WriterGroupAlias, Name = "Writers", DefaultPermissions = "CAH:FN", CreateDate = DateTime.Now, UpdateDate = DateTime.Now, Icon = "icon-edit" });
193+
_database.Insert(Constants.DatabaseSchema.Tables.UserGroup, "id", false, new UserGroupDto { Id = 3, StartMediaId = -1, StartContentId = -1, Alias = Constants.Security.EditorGroupAlias, Name = "Editors", DefaultPermissions = "CADMOSKTPUZ:5FïN", CreateDate = DateTime.Now, UpdateDate = DateTime.Now, Icon = "icon-tools" });
194194
_database.Insert(Constants.DatabaseSchema.Tables.UserGroup, "id", false, new UserGroupDto { Id = 4, StartMediaId = -1, StartContentId = -1, Alias = Constants.Security.TranslatorGroupAlias, Name = "Translators", DefaultPermissions = "AF", CreateDate = DateTime.Now, UpdateDate = DateTime.Now, Icon = "icon-globe" });
195195
_database.Insert(Constants.DatabaseSchema.Tables.UserGroup, "id", false, new UserGroupDto { Id = 5, StartMediaId = -1, StartContentId = -1, Alias = Constants.Security.SensitiveDataGroupAlias, Name = "Sensitive data", DefaultPermissions = "", CreateDate = DateTime.Now, UpdateDate = DateTime.Now, Icon = "icon-lock" });
196196
}
@@ -230,7 +230,7 @@ private void CreatePropertyTypeGroupData()
230230
_database.Insert(Constants.DatabaseSchema.Tables.PropertyTypeGroup, "id", false, new PropertyTypeGroupDto { Id = 54, UniqueId = new Guid(Constants.PropertyTypeGroups.Article), ContentTypeNodeId = 1036, Text = "Article", Alias = "article", SortOrder = 1 });
231231
_database.Insert(Constants.DatabaseSchema.Tables.PropertyTypeGroup, "id", false, new PropertyTypeGroupDto { Id = 55, UniqueId = new Guid(Constants.PropertyTypeGroups.VectorGraphics), ContentTypeNodeId = 1037, Text = "Vector Graphics", Alias = "vectorGraphics", SortOrder = 1 });
232232
//membership property group
233-
_database.Insert(Constants.DatabaseSchema.Tables.PropertyTypeGroup, "id", false, new PropertyTypeGroupDto { Id = 11, UniqueId = new Guid(Constants.PropertyTypeGroups.Membership), ContentTypeNodeId = 1044, Text = "Membership", Alias = "membership", SortOrder = 1 });
233+
_database.Insert(Constants.DatabaseSchema.Tables.PropertyTypeGroup, "id", false, new PropertyTypeGroupDto { Id = 11, UniqueId = new Guid(Constants.PropertyTypeGroups.Membership), ContentTypeNodeId = 1044, Text = Constants.Conventions.Member.StandardPropertiesGroupName, Alias = Constants.Conventions.Member.StandardPropertiesGroupAlias, SortOrder = 1 });
234234
}
235235

236236
private void CreatePropertyTypeData()

src/Umbraco.Core/Migrations/Upgrade/UmbracoPlan.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,8 +211,11 @@ protected void DefinePlan()
211211
// to 8.17.0
212212
To<AddPropertyTypeGroupColumns>("{153865E9-7332-4C2A-9F9D-F20AEE078EC7}");
213213

214-
//FINAL
214+
// to 8.18.0
215215
To<AddContentVersionCleanupFeature>("{8BAF5E6C-DCB7-41AE-824F-4215AE4F1F98}");
216+
To<AddDefaultForNotificationsToggle>("{AD3D3B7F-8E74-45A4-85DB-7FFAD57F9243}");
217+
218+
//FINAL
216219
}
217220
}
218221
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
namespace Umbraco.Core.Migrations.Upgrade.V_8_18_0
2+
{
3+
public class AddDefaultForNotificationsToggle : MigrationBase
4+
{
5+
public AddDefaultForNotificationsToggle(IMigrationContext context) : base(context)
6+
{
7+
}
8+
9+
public override void Migrate()
10+
{
11+
var updateSQL = Sql($"UPDATE {Constants.DatabaseSchema.Tables.UserGroup} SET userGroupDefaultPermissions = userGroupDefaultPermissions + 'N' WHERE userGroupAlias IN ('admin', 'writer', 'editor')");
12+
Execute.Sql(updateSQL.SQL).Do();
13+
}
14+
}
15+
}

src/Umbraco.Core/Persistence/Repositories/Implement/ContentTypeCommonRepository.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -280,14 +280,10 @@ private void MapGroupsAndProperties(IDictionary<int, IContentTypeComposition> co
280280
// ensure builtin properties
281281
if (contentType is MemberType memberType)
282282
{
283-
// ensure that the group exists (ok if it already exists)
284-
memberType.AddPropertyGroup(Constants.Conventions.Member.StandardPropertiesGroupName);
285-
286283
// ensure that property types exist (ok if they already exist)
287284
foreach (var (alias, propertyType) in builtinProperties)
288285
{
289-
var added = memberType.AddPropertyType(propertyType, Constants.Conventions.Member.StandardPropertiesGroupName);
290-
286+
var added = memberType.AddPropertyType(propertyType, Constants.Conventions.Member.StandardPropertiesGroupAlias, Constants.Conventions.Member.StandardPropertiesGroupName);
291287
if (added)
292288
{
293289
var access = new MemberTypePropertyProfileAccess(false, false, false);

src/Umbraco.Core/Persistence/Repositories/Implement/MemberTypeRepository.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,11 +142,10 @@ protected override void PersistNewItem(IMemberType entity)
142142
}
143143

144144
//By Convention we add 9 standard PropertyTypes to an Umbraco MemberType
145-
entity.AddPropertyGroup(Constants.Conventions.Member.StandardPropertiesGroupName);
146145
var standardPropertyTypes = Constants.Conventions.Member.GetStandardPropertyTypeStubs();
147146
foreach (var standardPropertyType in standardPropertyTypes)
148147
{
149-
entity.AddPropertyType(standardPropertyType.Value, Constants.Conventions.Member.StandardPropertiesGroupName);
148+
entity.AddPropertyType(standardPropertyType.Value, Constants.Conventions.Member.StandardPropertiesGroupAlias, Constants.Conventions.Member.StandardPropertiesGroupName);
150149
}
151150

152151
EnsureExplicitDataTypeForBuiltInProperties(entity);

src/Umbraco.Core/Services/Implement/MemberService.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1201,8 +1201,10 @@ internal static IMember CreateGenericMembershipProviderMember(string name, strin
12011201
var memType = new MemberType(-1);
12021202
var propGroup = new PropertyGroup(MemberType.SupportsPublishingConst)
12031203
{
1204-
Name = "Membership",
1205-
Id = --identity
1204+
Alias = Constants.Conventions.Member.StandardPropertiesGroupAlias,
1205+
Name = Constants.Conventions.Member.StandardPropertiesGroupName,
1206+
Id = --identity,
1207+
Key = identity.ToGuid()
12061208
};
12071209
propGroup.PropertyTypes.Add(new PropertyType(Constants.PropertyEditors.Aliases.TextBox, ValueStorageType.Ntext, Constants.Conventions.Member.Comments)
12081210
{

src/Umbraco.Core/Umbraco.Core.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@
151151
<Compile Include="Migrations\Upgrade\V_8_10_0\AddPropertyTypeLabelOnTopColumn.cs" />
152152
<Compile Include="Migrations\Upgrade\V_8_17_0\AddPropertyTypeGroupColumns.cs" />
153153
<Compile Include="Migrations\Upgrade\V_8_18_0\AddContentVersionCleanupFeature.cs" />
154+
<Compile Include="Migrations\Upgrade\V_8_18_0\AddDefaultForNotificationsToggle.cs" />
154155
<Compile Include="Migrations\Upgrade\V_8_9_0\ExternalLoginTableUserData.cs" />
155156
<Compile Include="Models\Blocks\BlockEditorDataConverter.cs" />
156157
<Compile Include="Models\Blocks\BlockEditorData.cs" />

src/Umbraco.Tests/Persistence/Repositories/MemberTypeRepositoryTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ public void Built_In_Member_Type_Properties_Missing_Are_Automatically_Added_When
326326
Assert.AreEqual(3, memberType.PropertyTypes.Count());
327327

328328
// add one stub property, others are still missing
329-
memberType.AddPropertyType(stubs.First().Value, Constants.Conventions.Member.StandardPropertiesGroupName);
329+
memberType.AddPropertyType(stubs.First().Value, Constants.Conventions.Member.StandardPropertiesGroupAlias, Constants.Conventions.Member.StandardPropertiesGroupName);
330330

331331
// saving *new* member type adds the (missing) stub properties
332332
repository.Save(memberType);

src/Umbraco.Web.UI.Client/src/common/directives/components/content/edit.controller.js

Lines changed: 35 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -602,8 +602,6 @@
602602
$scope.page.buttonGroupState = 'error';
603603
handleHttpException(err);
604604
});
605-
606-
607605
},
608606
close: function () {
609607
overlayService.close();
@@ -641,13 +639,14 @@
641639
overlayService.close();
642640
return $q.when(data);
643641
},
644-
function (err) {
645-
clearDirtyState($scope.content.variants);
646-
model.submitButtonState = "error";
647-
//re-map the dialog model since we've re-bound the properties
648-
dialog.variants = $scope.content.variants;
649-
handleHttpException(err);
650-
});
642+
function (err) {
643+
clearDirtyState($scope.content.variants);
644+
model.submitButtonState = "error";
645+
//re-map the dialog model since we've re-bound the properties
646+
dialog.variants = $scope.content.variants;
647+
648+
handleHttpException(err);
649+
});
651650
},
652651
close: function () {
653652
overlayService.close();
@@ -699,14 +698,18 @@
699698
clearNotifications($scope.content);
700699
overlayService.close();
701700
return $q.when(data);
702-
},
703-
function (err) {
704-
clearDirtyState($scope.content.variants);
705-
model.submitButtonState = "error";
706-
//re-map the dialog model since we've re-bound the properties
707-
dialog.variants = $scope.content.variants;
708-
handleHttpException(err);
709-
});
701+
}, function (err) {
702+
clearDirtyState($scope.content.variants);
703+
model.submitButtonState = "error";
704+
//re-map the dialog model since we've re-bound the properties
705+
dialog.variants = $scope.content.variants;
706+
707+
//ensure error messages are displayed
708+
formHelper.showNotifications(err.data);
709+
clearNotifications($scope.content);
710+
711+
handleHttpException(err);
712+
});
710713
},
711714
close: function () {
712715
overlayService.close();
@@ -760,20 +763,24 @@
760763
clearNotifications($scope.content);
761764
overlayService.close();
762765
return $q.when(data);
763-
},
764-
function (err) {
765-
clearDirtyState($scope.content.variants);
766-
//model.submitButtonState = "error";
767-
// Because this is the "save"-action, then we actually save though there was a validation error, therefor we will show success and display the validation errors politely.
768-
if(err && err.data && err.data.ModelState && Object.keys(err.data.ModelState).length > 0) {
769-
model.submitButtonState = "success";
770-
} else {
771-
model.submitButtonState = "error";
772-
}
766+
}, function (err) {
767+
clearDirtyState($scope.content.variants);
768+
//model.submitButtonState = "error";
769+
// Because this is the "save"-action, then we actually save though there was a validation error, therefor we will show success and display the validation errors politely.
770+
if(err && err.data && err.data.ModelState && Object.keys(err.data.ModelState).length > 0) {
771+
model.submitButtonState = "success";
772+
} else {
773+
model.submitButtonState = "error";
773774
//re-map the dialog model since we've re-bound the properties
774775
dialog.variants = $scope.content.variants;
776+
777+
//ensure error messages are displayed
778+
formHelper.showNotifications(err.data);
779+
clearNotifications($scope.content);
780+
775781
handleHttpException(err);
776-
});
782+
}
783+
})
777784
},
778785
close: function (oldModel) {
779786
overlayService.close();

0 commit comments

Comments
 (0)