From 2835a0db29fdb2bdb13cb880117f4a1731bb41b8 Mon Sep 17 00:00:00 2001 From: Lombiq Date: Sat, 19 Dec 2015 20:01:32 +0100 Subject: [PATCH] Creating helpers for settings based metadata scenarios to be used in migrations, fixes #4693 --- .../Modules/Orchard.Blogs/Migrations.cs | 9 ++- .../Orchard.Blogs/Orchard.Blogs.csproj | 4 ++ .../Orchard.DynamicForms/Migrations.cs | 16 +++-- .../Orchard.DynamicForms.csproj | 4 ++ .../Extensions/MetaDataExtensions.cs | 65 +++++++++++++++++++ .../Orchard.MediaLibrary/Migrations.cs | 30 ++------- .../Orchard.MediaLibrary.csproj | 1 + .../Modules/Orchard.Search/Migrations.cs | 5 +- .../Orchard.Search/Orchard.Search.csproj | 4 ++ .../Modules/Orchard.Tags/Migrations.cs | 4 +- .../Modules/Orchard.Tags/Orchard.Tags.csproj | 4 ++ .../Extensions/MetaDataExtensions.cs | 32 +++++++++ .../Modules/Orchard.Widgets/Migrations.cs | 5 +- .../Orchard.Widgets/Orchard.Widgets.csproj | 1 + 14 files changed, 140 insertions(+), 44 deletions(-) create mode 100644 src/Orchard.Web/Modules/Orchard.MediaLibrary/Extensions/MetaDataExtensions.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Widgets/Extensions/MetaDataExtensions.cs diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Migrations.cs b/src/Orchard.Web/Modules/Orchard.Blogs/Migrations.cs index f9a7b674a..e4b00a464 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Migrations.cs +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Migrations.cs @@ -68,9 +68,7 @@ namespace Orchard.Blogs { ContentDefinitionManager.AlterTypeDefinition("RecentBlogPosts", cfg => cfg .WithPart("RecentBlogPostsPart") - .WithPart("CommonPart") - .WithPart("WidgetPart") - .WithSetting("Stereotype", "Widget") + .AsWidgetWithIdentity() ); ContentDefinitionManager.AlterPartDefinition("BlogArchivesPart", part => part @@ -134,6 +132,11 @@ namespace Orchard.Blogs { } public int UpdateFrom6() { + ContentDefinitionManager.AlterTypeDefinition("RecentBlogPosts", + cfg => cfg + .WithPart("IdentityPart") + ); + ContentDefinitionManager.AlterTypeDefinition("BlogArchives", cfg => cfg .WithPart("IdentityPart") diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Orchard.Blogs.csproj b/src/Orchard.Web/Modules/Orchard.Blogs/Orchard.Blogs.csproj index 8eabc5568..31f5295d6 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Orchard.Blogs.csproj +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Orchard.Blogs.csproj @@ -167,6 +167,10 @@ {f301ef7d-f19c-4d83-aa94-cb64f29c037d} Orchard.ContentPicker + + {194d3ccc-1153-474d-8176-fde8d7d0d0bd} + Orchard.Widgets + diff --git a/src/Orchard.Web/Modules/Orchard.DynamicForms/Migrations.cs b/src/Orchard.Web/Modules/Orchard.DynamicForms/Migrations.cs index 16acf01e1..cc20cd75a 100644 --- a/src/Orchard.Web/Modules/Orchard.DynamicForms/Migrations.cs +++ b/src/Orchard.Web/Modules/Orchard.DynamicForms/Migrations.cs @@ -56,15 +56,14 @@ namespace Orchard.DynamicForms { .Draftable()); ContentDefinitionManager.AlterTypeDefinition("FormWidget", type => type + .AsWidgetWithIdentity() + .WithPart("LayoutPart", p => p + .WithSetting("LayoutTypePartSettings.DefaultLayoutData", DefaultFormLayoutData)) .WithPart("CommonPart", p => p .WithSetting("OwnerEditorSettings.ShowOwnerEditor", "false") .WithSetting("DateEditorSettings.ShowDateEditor", "false")) - .WithPart("WidgetPart") - .WithPart("LayoutPart", p => p - .WithSetting("LayoutTypePartSettings.DefaultLayoutData", DefaultFormLayoutData)) - .WithSetting("Stereotype", "Widget") .DisplayedAs("Form Widget")); - return 2; + return 3; } public int UpdateFrom1() { @@ -107,6 +106,13 @@ namespace Orchard.DynamicForms { return 2; } + public int UpdateFrom2() { + ContentDefinitionManager.AlterTypeDefinition("FormWidget", type => type + .WithPart("IdentityPart")); + + return 3; + } + private byte[] GetMD5(string text) { byte[] encodedText = System.Text.Encoding.UTF8.GetBytes(text); return ((HashAlgorithm)CryptoConfig.CreateFromName("MD5")).ComputeHash(encodedText); diff --git a/src/Orchard.Web/Modules/Orchard.DynamicForms/Orchard.DynamicForms.csproj b/src/Orchard.Web/Modules/Orchard.DynamicForms/Orchard.DynamicForms.csproj index f81446fb4..31d0071b5 100644 --- a/src/Orchard.Web/Modules/Orchard.DynamicForms/Orchard.DynamicForms.csproj +++ b/src/Orchard.Web/Modules/Orchard.DynamicForms/Orchard.DynamicForms.csproj @@ -154,6 +154,10 @@ {79aed36e-abd0-4747-93d3-8722b042454b} Orchard.Users + + {194d3ccc-1153-474d-8176-fde8d7d0d0bd} + Orchard.Widgets + {7059493c-8251-4764-9c1e-2368b8b485bc} Orchard.Workflows diff --git a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Extensions/MetaDataExtensions.cs b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Extensions/MetaDataExtensions.cs new file mode 100644 index 000000000..154150808 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Extensions/MetaDataExtensions.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using Orchard.ContentManagement.MetaData.Builders; + +namespace Orchard.ContentManagement.MetaData { + public static class MetaDataExtensions { + /// + /// This extension method can be used for easy image part creation. Adds all necessary parts and settings to the part. + /// + public static ContentTypeDefinitionBuilder AsImage(this ContentTypeDefinitionBuilder builder) { + return builder + .AsMedia() + .WithPart("ImagePart"); + } + + /// + /// This extension method can be used for easy vector image part creation. Adds all necessary parts and settings to the part. + /// + public static ContentTypeDefinitionBuilder AsVectorImage(this ContentTypeDefinitionBuilder builder) { + return builder + .AsMedia() + .WithPart("VectorImagePart"); + } + + /// + /// This extension method can be used for easy audio part creation. Adds all necessary parts and settings to the part. + /// + public static ContentTypeDefinitionBuilder AsAudio(this ContentTypeDefinitionBuilder builder) { + return builder + .AsMedia() + .WithPart("AudioPart"); + } + + /// + /// This extension method can be used for video image part creation. Adds all necessary parts and settings to the part. + /// + public static ContentTypeDefinitionBuilder AsVideo(this ContentTypeDefinitionBuilder builder) { + return builder + .AsMedia() + .WithPart("VideoPart"); + } + + /// + /// This extension method can be used for easy document part creation. Adds all necessary parts and settings to the part. + /// + public static ContentTypeDefinitionBuilder AsDocument(this ContentTypeDefinitionBuilder builder) { + return builder + .AsMedia() + .WithPart("DocumentPart"); + } + + /// + /// This extension method can be used for easy media part creation. Adds all necessary parts and settings to the part. + /// + public static ContentTypeDefinitionBuilder AsMedia(this ContentTypeDefinitionBuilder builder) { + return builder + .WithSetting("Stereotype", "Media") + .WithPart("CommonPart") + .WithPart("MediaPart") + .WithPart("TitlePart"); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Migrations.cs b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Migrations.cs index f231d8125..8a6be0d4c 100644 --- a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Migrations.cs +++ b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Migrations.cs @@ -57,57 +57,37 @@ namespace Orchard.MediaLibrary { ContentDefinitionManager.AlterTypeDefinition("Image", td => td .DisplayedAs("Image") - .WithSetting("Stereotype", "Media") .WithSetting("MediaFileNameEditorSettings.ShowFileNameEditor", "True") + .AsImage() .WithPart("IdentityPart") - .WithPart("CommonPart") - .WithPart("MediaPart") - .WithPart("ImagePart") - .WithPart("TitlePart") ); ContentDefinitionManager.AlterTypeDefinition("VectorImage", td => td .DisplayedAs("Vector Image") - .WithSetting("Stereotype", "Media") .WithSetting("MediaFileNameEditorSettings.ShowFileNameEditor", "True") + .AsVectorImage() .WithPart("IdentityPart") - .WithPart("CommonPart") - .WithPart("MediaPart") - .WithPart("VectorImagePart") - .WithPart("TitlePart") ); ContentDefinitionManager.AlterTypeDefinition("Video", td => td .DisplayedAs("Video") - .WithSetting("Stereotype", "Media") .WithSetting("MediaFileNameEditorSettings.ShowFileNameEditor", "True") + .AsVideo() .WithPart("IdentityPart") - .WithPart("CommonPart") - .WithPart("MediaPart") - .WithPart("VideoPart") - .WithPart("TitlePart") ); ContentDefinitionManager.AlterTypeDefinition("Audio", td => td .DisplayedAs("Audio") - .WithSetting("Stereotype", "Media") .WithSetting("MediaFileNameEditorSettings.ShowFileNameEditor", "True") + .AsAudio() .WithPart("IdentityPart") - .WithPart("CommonPart") - .WithPart("MediaPart") - .WithPart("AudioPart") - .WithPart("TitlePart") ); ContentDefinitionManager.AlterTypeDefinition("Document", td => td .DisplayedAs("Document") - .WithSetting("Stereotype", "Media") .WithSetting("MediaFileNameEditorSettings.ShowFileNameEditor", "True") + .AsDocument() .WithPart("IdentityPart") - .WithPart("CommonPart") - .WithPart("MediaPart") - .WithPart("DocumentPart") - .WithPart("TitlePart") ); ContentDefinitionManager.AlterTypeDefinition("OEmbed", td => td diff --git a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Orchard.MediaLibrary.csproj b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Orchard.MediaLibrary.csproj index 788aa1a3a..dac14d392 100644 --- a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Orchard.MediaLibrary.csproj +++ b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Orchard.MediaLibrary.csproj @@ -101,6 +101,7 @@ + diff --git a/src/Orchard.Web/Modules/Orchard.Search/Migrations.cs b/src/Orchard.Web/Modules/Orchard.Search/Migrations.cs index a8634d9a5..abd815677 100644 --- a/src/Orchard.Web/Modules/Orchard.Search/Migrations.cs +++ b/src/Orchard.Web/Modules/Orchard.Search/Migrations.cs @@ -11,10 +11,7 @@ namespace Orchard.Search { ContentDefinitionManager.AlterTypeDefinition("SearchForm", cfg => cfg .WithPart("SearchFormPart") - .WithPart("CommonPart") - .WithPart("WidgetPart") - .WithPart("IdentityPart") - .WithSetting("Stereotype", "Widget") + .AsWidgetWithIdentity() ); return 3; diff --git a/src/Orchard.Web/Modules/Orchard.Search/Orchard.Search.csproj b/src/Orchard.Web/Modules/Orchard.Search/Orchard.Search.csproj index c001741b9..17359f424 100644 --- a/src/Orchard.Web/Modules/Orchard.Search/Orchard.Search.csproj +++ b/src/Orchard.Web/Modules/Orchard.Search/Orchard.Search.csproj @@ -105,6 +105,10 @@ {73a7688a-5bd3-4f7e-adfa-ce36c5a10e3b} Orchard.MediaLibrary + + {194d3ccc-1153-474d-8176-fde8d7d0d0bd} + Orchard.Widgets + diff --git a/src/Orchard.Web/Modules/Orchard.Tags/Migrations.cs b/src/Orchard.Web/Modules/Orchard.Tags/Migrations.cs index 9cbbf25f7..a14a0fd54 100644 --- a/src/Orchard.Web/Modules/Orchard.Tags/Migrations.cs +++ b/src/Orchard.Web/Modules/Orchard.Tags/Migrations.cs @@ -47,9 +47,7 @@ namespace Orchard.Tags { "TagCloud", cfg => cfg .WithPart("TagCloudPart") - .WithPart("CommonPart") - .WithPart("WidgetPart") - .WithSetting("Stereotype", "Widget") + .AsWidget() ); return 1; diff --git a/src/Orchard.Web/Modules/Orchard.Tags/Orchard.Tags.csproj b/src/Orchard.Web/Modules/Orchard.Tags/Orchard.Tags.csproj index c49663fbf..d2ebbd3ba 100644 --- a/src/Orchard.Web/Modules/Orchard.Tags/Orchard.Tags.csproj +++ b/src/Orchard.Web/Modules/Orchard.Tags/Orchard.Tags.csproj @@ -135,6 +135,10 @@ {66FCCD76-2761-47E3-8D11-B45D0001DDAA} Orchard.Autoroute + + {194d3ccc-1153-474d-8176-fde8d7d0d0bd} + Orchard.Widgets + diff --git a/src/Orchard.Web/Modules/Orchard.Widgets/Extensions/MetaDataExtensions.cs b/src/Orchard.Web/Modules/Orchard.Widgets/Extensions/MetaDataExtensions.cs new file mode 100644 index 000000000..720ace53a --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Widgets/Extensions/MetaDataExtensions.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using Orchard.ContentManagement.MetaData.Builders; + +namespace Orchard.ContentManagement.MetaData { + public static class MetaDataExtensions { + /// + /// This extension method can be used for easy widget creation. Adds all necessary parts and settings to the part. + /// + /// The ContentTypeDefinitionBuilder object on which this method is called. + public static ContentTypeDefinitionBuilder AsWidget(this ContentTypeDefinitionBuilder builder) { + return builder + .WithPart("CommonPart") + .WithPart("WidgetPart") + .WithSetting("Stereotype", "Widget"); + } + + /// + /// This extension method can be used for easy widget creation. Adds all necessary parts and settings to the part. And adds IdentityPart too. + /// + /// The ContentTypeDefinitionBuilder object on which this method is called. + public static ContentTypeDefinitionBuilder AsWidgetWithIdentity(this ContentTypeDefinitionBuilder builder) { + return builder + .WithPart("CommonPart") + .WithPart("WidgetPart") + .WithPart("IdentityPart") + .WithSetting("Stereotype", "Widget"); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Widgets/Migrations.cs b/src/Orchard.Web/Modules/Orchard.Widgets/Migrations.cs index acf0be706..c1f2b91b0 100644 --- a/src/Orchard.Web/Modules/Orchard.Widgets/Migrations.cs +++ b/src/Orchard.Web/Modules/Orchard.Widgets/Migrations.cs @@ -36,11 +36,8 @@ namespace Orchard.Widgets { ContentDefinitionManager.AlterTypeDefinition("HtmlWidget", cfg => cfg - .WithPart("WidgetPart") .WithPart("BodyPart") - .WithPart("CommonPart") - .WithPart("IdentityPart") - .WithSetting("Stereotype", "Widget") + .AsWidgetWithIdentity() ); return 5; diff --git a/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj b/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj index c2ba01fe1..8770c9dca 100644 --- a/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj +++ b/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj @@ -72,6 +72,7 @@ +