From c4fb8a94508e417deeeb458b8d78e0e48beb99f8 Mon Sep 17 00:00:00 2001 From: Tobias Klika Date: Thu, 14 May 2020 13:32:33 +0200 Subject: [PATCH] final draft of plugin backoffice modification --- zero.Core/Api/PermissionsApi.cs | 8 +- zero.Core/Api/SectionsApi.cs | 13 +-- zero.Core/Api/SettingsApi.cs | 9 +- zero.Core/Api/SetupApi.cs | 1 + zero.Core/Api/SpacesApi.cs | 18 ++-- zero.Core/Api/Token.cs | 1 + .../Entities/Pages/PageTypeCollection.cs | 43 --------- zero.Core/Entities/Spaces/SpaceCollection.cs | 88 ------------------- zero.Core/Options/FeatureOptions.cs | 6 -- zero.Core/Options/IZeroCollectionOptions.cs | 2 + zero.Core/Options/ZeroBackofficeCollection.cs | 10 ++- zero.Core/Options/ZeroOptions.cs | 74 +++++++++++++++- zero.Core/Plugins/PluginCollection.cs | 9 +- zero.Core/Plugins/ZeroPlugin.cs | 11 +-- zero.Core/Plugins/ZeroPluginConfiguration.cs | 61 ------------- zero.Core/Renderer/AbstractRenderer.cs | 2 +- zero.Core/Renderer/IRendererFieldBuilder.cs | 2 +- .../Options/DefaultRendererOptions.cs | 7 ++ zero.Core/Renderer/Options/RendererOptions.cs | 7 -- zero.Core/Renderer/RendererFieldBuilder.cs | 2 +- zero.Core/ZeroBackofficeCollection.cs | 25 ------ zero.Debug/TestData/TestPlugin.cs | 46 ++++------ .../Controllers/ApplicationsController.cs | 3 +- zero.Web/Controllers/BackofficeController.cs | 1 + zero.Web/Controllers/TestController.cs | 5 +- zero.Web/Controllers/UsersController.cs | 6 +- zero.Web/Defaults/DefaultBackofficePlugin.cs | 29 ++---- zero.Web/Views/Setup.cshtml | 4 +- zero.Web/ZeroApplicationBuilderExtensions.cs | 3 +- zero.Web/ZeroBuilder.cs | 28 +++--- zero.Web/ZeroMiddleware.cs | 13 +-- zero.Web/ZeroServiceCollectionExtensions.cs | 2 +- zero.Web/ZeroVue.cs | 6 +- 33 files changed, 192 insertions(+), 353 deletions(-) delete mode 100644 zero.Core/Entities/Pages/PageTypeCollection.cs delete mode 100644 zero.Core/Entities/Spaces/SpaceCollection.cs delete mode 100644 zero.Core/Plugins/ZeroPluginConfiguration.cs create mode 100644 zero.Core/Renderer/Options/DefaultRendererOptions.cs delete mode 100644 zero.Core/Renderer/Options/RendererOptions.cs delete mode 100644 zero.Core/ZeroBackofficeCollection.cs diff --git a/zero.Core/Api/PermissionsApi.cs b/zero.Core/Api/PermissionsApi.cs index 1b806df5..c15cde14 100644 --- a/zero.Core/Api/PermissionsApi.cs +++ b/zero.Core/Api/PermissionsApi.cs @@ -10,7 +10,7 @@ namespace zero.Core.Api protected IZeroOptions Options { get; set; } - public PermissionsApi (IZeroOptions options) + public PermissionsApi(IZeroOptions options) { Options = options; } @@ -38,7 +38,9 @@ namespace zero.Core.Api // TODO add back spaces - if (Options.Backoffice.Spaces.Count > 0) + IReadOnlyCollection spaces = Options.Spaces.GetAllItems(); + + if (spaces.Count > 0) { PermissionCollection permissionSpaces = new PermissionCollection() { @@ -47,7 +49,7 @@ namespace zero.Core.Api Description = "@permission.collections.spaces_description" }; - foreach (Space space in Options.Backoffice.Spaces) + foreach (Space space in spaces) { permissionSpaces.Items.Add(new Permission(Permissions.Spaces.PREFIX + space.Alias, space.Name, null, PermissionValueType.ReadWrite)); } diff --git a/zero.Core/Api/SectionsApi.cs b/zero.Core/Api/SectionsApi.cs index 07ff33ab..93000343 100644 --- a/zero.Core/Api/SectionsApi.cs +++ b/zero.Core/Api/SectionsApi.cs @@ -1,7 +1,8 @@ -using Microsoft.Extensions.Options; -using System; +using System; +using System.Collections.Generic; using System.Linq; using zero.Core.Entities; +using zero.Core.Options; namespace zero.Core.Api { @@ -17,16 +18,16 @@ namespace zero.Core.Api /// - public SectionCollection GetAll() + public IReadOnlyCollection GetAll() { - return Options.Backoffice.Sections; + return Options.Sections.GetAllItems(); } /// public ISection GetByAlias(string alias) { - return Options.Backoffice.Sections.FirstOrDefault(section => section.Alias.Equals(alias, StringComparison.InvariantCultureIgnoreCase)); + return Options.Sections.GetAllItems().FirstOrDefault(section => section.Alias.Equals(alias, StringComparison.InvariantCultureIgnoreCase)); } } @@ -36,7 +37,7 @@ namespace zero.Core.Api /// /// Get all available backoffice sections /// - SectionCollection GetAll(); + IReadOnlyCollection GetAll(); /// /// Get backoffice section by alias diff --git a/zero.Core/Api/SettingsApi.cs b/zero.Core/Api/SettingsApi.cs index 5ba533f5..58e25101 100644 --- a/zero.Core/Api/SettingsApi.cs +++ b/zero.Core/Api/SettingsApi.cs @@ -1,11 +1,12 @@ using System.Collections.Generic; using zero.Core.Entities; +using zero.Core.Options; namespace zero.Core.Api { public class SettingsApi : ISettingsApi { - protected IZeroOptions Options { get; private set; } + protected IZeroOptions Options { get; set; } public SettingsApi(IZeroOptions options) @@ -15,9 +16,9 @@ namespace zero.Core.Api /// - public IList GetAreas() + public IReadOnlyCollection GetAreas() { - return Options.Backoffice.Settings; + return Options.Settings.GetAllItems(); } } @@ -27,6 +28,6 @@ namespace zero.Core.Api /// /// Get settings areas for backoffice display and grouping /// - IList GetAreas(); + IReadOnlyCollection GetAreas(); } } diff --git a/zero.Core/Api/SetupApi.cs b/zero.Core/Api/SetupApi.cs index fc1d67dd..f527e185 100644 --- a/zero.Core/Api/SetupApi.cs +++ b/zero.Core/Api/SetupApi.cs @@ -12,6 +12,7 @@ using System.Threading.Tasks; using zero.Core.Entities; using zero.Core.Entities.Setup; using zero.Core.Identity; +using zero.Core.Options; using zero.Core.Validation; diff --git a/zero.Core/Api/SpacesApi.cs b/zero.Core/Api/SpacesApi.cs index 066b1a9a..0b1f516d 100644 --- a/zero.Core/Api/SpacesApi.cs +++ b/zero.Core/Api/SpacesApi.cs @@ -9,6 +9,7 @@ using System.Linq; using System.Threading.Tasks; using zero.Core.Entities; using zero.Core.Extensions; +using zero.Core.Options; using zero.Core.Plugins; using zero.Core.Renderer; @@ -20,31 +21,28 @@ namespace zero.Core.Api protected IPermissionsApi PermissionsApi { get; private set; } - protected IZeroOptions Options { get; private set; } - - protected IZeroPluginConfiguration PluginBuilder { get; private set; } + protected IZeroOptions Options { get; set; } - public SpacesApi(IDocumentStore raven, IPermissionsApi permissionsApi, IZeroOptions options, IZeroPluginConfiguration pluginBuilder) + public SpacesApi(IDocumentStore raven, IPermissionsApi permissionsApi, IZeroOptions options) { Raven = raven; PermissionsApi = permissionsApi; Options = options; - PluginBuilder = pluginBuilder; } /// public Space GetByAlias(string alias) { - return PluginBuilder.Spaces.FirstOrDefault(x => x.Alias.Equals(alias, StringComparison.InvariantCultureIgnoreCase)); + return Options.Spaces.GetAllItems().FirstOrDefault(x => x.Alias.Equals(alias, StringComparison.InvariantCultureIgnoreCase)); } /// - public SpaceCollection GetAll() + public IReadOnlyCollection GetAll() { - return PluginBuilder.Spaces; + return Options.Spaces.GetAllItems(); } @@ -58,7 +56,7 @@ namespace zero.Core.Api return null; } - AbstractGenericRenderer renderer = PluginBuilder.Renderers.FirstOrDefault(x => x.TargetType == space.Type); + AbstractGenericRenderer renderer = Options.Renderers.GetAllItems().FirstOrDefault(x => x.TargetType == space.Type); if (renderer == null) { @@ -190,7 +188,7 @@ namespace zero.Core.Api /// /// Get all spaces /// - SpaceCollection GetAll(); + IReadOnlyCollection GetAll(); /// /// Get editor configuration for a space diff --git a/zero.Core/Api/Token.cs b/zero.Core/Api/Token.cs index 06b8c8ab..01d6949b 100644 --- a/zero.Core/Api/Token.cs +++ b/zero.Core/Api/Token.cs @@ -4,6 +4,7 @@ using System; using System.Threading.Tasks; using zero.Core.Entities; using zero.Core.Extensions; +using zero.Core.Options; namespace zero.Core.Api { diff --git a/zero.Core/Entities/Pages/PageTypeCollection.cs b/zero.Core/Entities/Pages/PageTypeCollection.cs deleted file mode 100644 index ddf56868..00000000 --- a/zero.Core/Entities/Pages/PageTypeCollection.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace zero.Core.Entities -{ - public class PageTypeCollection : List - { - public void Add(PageType pageType) where T : Page, new() - { - Add(PageType.Convert(pageType)); - } - - - public void Add(string alias, string name, string description, string icon, bool allowAsRoot = false, bool allowAllChildrenTypes = false, List allowedChildrenTypes = null) where T : Page, new() - { - Add(new PageType(typeof(T)) - { - Alias = alias, - Name = name, - Description = description, - Icon = icon, - AllowAsRoot = allowAsRoot, - AllowAllChildrenTypes = allowAllChildrenTypes, - AllowedChildrenTypes = allowedChildrenTypes - }); - } - - - public void Add(Type type, string alias, string name, string description, string icon, bool allowAsRoot = false, bool allowAllChildrenTypes = false, List allowedChildrenTypes = null) - { - Add(new PageType(type) - { - Alias = alias, - Name = name, - Description = description, - Icon = icon, - AllowAsRoot = allowAsRoot, - AllowAllChildrenTypes = allowAllChildrenTypes, - AllowedChildrenTypes = allowedChildrenTypes - }); - } - } -} diff --git a/zero.Core/Entities/Spaces/SpaceCollection.cs b/zero.Core/Entities/Spaces/SpaceCollection.cs deleted file mode 100644 index 7ca06580..00000000 --- a/zero.Core/Entities/Spaces/SpaceCollection.cs +++ /dev/null @@ -1,88 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; - -namespace zero.Core.Entities -{ - public class SpaceCollection : List - { - public Space GetByAlias(string alias) - { - return this.FirstOrDefault(x => x.Alias.Equals(alias, StringComparison.InvariantCultureIgnoreCase)); - } - - - public void Add() where T : Space, new() - { - Add(new T()); - } - - - public void AddList(string alias, string name, string description, string icon) where T : SpaceContent, new() - { - Add(new Space() - { - Alias = alias, - View = SpaceView.List, - Name = name, - Description = description, - Icon = icon, - Type = typeof(T) - }); - } - - - public void AddEditor(string alias, string name, string description, string icon) where T : SpaceContent, new() - { - Add(new Space() - { - Alias = alias, - View = SpaceView.Editor, - Name = name, - Description = description, - Icon = icon, - Type = typeof(T) - }); - } - - - public void AddSeparator() - { - Space lastSpace = this.LastOrDefault(); - - if (lastSpace != null) - { - lastSpace.LineBelow = true; - } - } - - - public void AddCustom(string componentPath, string alias, string name, string description, string icon) where T : SpaceContent, new() - { - Add(new Space() - { - Alias = alias, - View = SpaceView.Custom, - ComponentPath = componentPath, - Name = name, - Description = description, - Icon = icon, - Type = typeof(T) - }); - } - - - public void AddCustom(string componentPath, string alias, string name, string description, string icon) - { - Add(new Space() - { - Alias = alias, - View = SpaceView.Custom, - ComponentPath = componentPath, - Name = name, - Description = description, - Icon = icon - }); - } - } -} diff --git a/zero.Core/Options/FeatureOptions.cs b/zero.Core/Options/FeatureOptions.cs index e4f2f323..4b5bab9b 100644 --- a/zero.Core/Options/FeatureOptions.cs +++ b/zero.Core/Options/FeatureOptions.cs @@ -4,12 +4,6 @@ namespace zero.Core.Options { public class FeatureOptions : ZeroBackofficeCollection, IZeroCollectionOptions { - public FeatureOptions() - { - - } - - public void Add() where T : IFeature, new() { Items.Add(new T()); diff --git a/zero.Core/Options/IZeroCollectionOptions.cs b/zero.Core/Options/IZeroCollectionOptions.cs index c46db823..bbcb26cb 100644 --- a/zero.Core/Options/IZeroCollectionOptions.cs +++ b/zero.Core/Options/IZeroCollectionOptions.cs @@ -1,10 +1,12 @@ using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Text; namespace zero.Core.Options { public interface IZeroCollectionOptions { + } } diff --git a/zero.Core/Options/ZeroBackofficeCollection.cs b/zero.Core/Options/ZeroBackofficeCollection.cs index 37459e13..1c1e1bfd 100644 --- a/zero.Core/Options/ZeroBackofficeCollection.cs +++ b/zero.Core/Options/ZeroBackofficeCollection.cs @@ -1,11 +1,19 @@ using System; using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; using System.Text; namespace zero.Core.Options { public abstract class ZeroBackofficeCollection { - protected IList Items { get; set; } = new List(); + protected List Items { get; set; } = new List(); + + + public IReadOnlyCollection GetAllItems() + { + return Items.AsReadOnly(); + } } } diff --git a/zero.Core/Options/ZeroOptions.cs b/zero.Core/Options/ZeroOptions.cs index decc6144..3220f2d4 100644 --- a/zero.Core/Options/ZeroOptions.cs +++ b/zero.Core/Options/ZeroOptions.cs @@ -11,6 +11,13 @@ namespace zero.Core.Options DefaultLanguage = SupportedLanguages[0]; TokenExpiration = 60; BackofficePath = "/zero"; + Sections = new SectionOptions(); + Features = new FeatureOptions(); + Pages = new PageOptions(); + Permissions = new PermissionOptions(); + Renderers = new RendererOptions(); + Settings = new SettingsOptions(); + Spaces = new SpaceOptions(); } /// @@ -32,10 +39,31 @@ namespace zero.Core.Options public string BackofficePath { get; set; } /// - public IZeroPluginConfiguration Backoffice { get; set; } + //public IZeroPluginConfiguration Backoffice { get; set; } /// public PluginCollection Plugins { get; set; } + + /// + public SectionOptions Sections { get; private set; } + + /// + public FeatureOptions Features { get; private set; } + + /// + public PageOptions Pages { get; private set; } + + /// + public PermissionOptions Permissions { get; private set; } + + /// + public RendererOptions Renderers { get; private set; } + + /// + public SettingsOptions Settings { get; private set; } + + /// + public SpaceOptions Spaces { get; private set; } } @@ -80,9 +108,51 @@ namespace zero.Core.Options /// string BackofficePath { get; set; } + /// + /// + /// + PluginCollection Plugins { get; set; } + + /// + /// + /// + SectionOptions Sections { get; } + + /// + /// + /// + FeatureOptions Features { get; } + + /// + /// + /// + PageOptions Pages { get; } + + /// + /// + /// + PermissionOptions Permissions { get; } + + /// + /// + /// + RendererOptions Renderers { get; } + + /// + /// + /// + SettingsOptions Settings { get; } + + /// + /// + /// + SpaceOptions Spaces { get; } + + + /// /// Default settings for the backoffice /// - IZeroPluginConfiguration Backoffice { get; set; } + //IZeroPluginConfiguration Backoffice { get; set; } } } diff --git a/zero.Core/Plugins/PluginCollection.cs b/zero.Core/Plugins/PluginCollection.cs index eb720712..ae7bd6e1 100644 --- a/zero.Core/Plugins/PluginCollection.cs +++ b/zero.Core/Plugins/PluginCollection.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.DependencyInjection; using System; +using zero.Core.Options; namespace zero.Core.Plugins { @@ -7,13 +8,13 @@ namespace zero.Core.Plugins { IServiceCollection Services; - IZeroPluginConfiguration Builder; + IZeroOptions Options; - public PluginCollection(IServiceCollection services, IZeroPluginConfiguration builder) + public PluginCollection(IServiceCollection services, IZeroOptions options) { Services = services; - Builder = builder; + Options = options; } @@ -45,7 +46,7 @@ namespace zero.Core.Plugins { try { - new T().Configure(Services, Builder); + new T().Configure(Services, Options); } catch { diff --git a/zero.Core/Plugins/ZeroPlugin.cs b/zero.Core/Plugins/ZeroPlugin.cs index 5d5ecac7..befe2780 100644 --- a/zero.Core/Plugins/ZeroPlugin.cs +++ b/zero.Core/Plugins/ZeroPlugin.cs @@ -1,16 +1,17 @@ using Microsoft.Extensions.DependencyInjection; +using zero.Core.Options; namespace zero.Core.Plugins { - public abstract class ZeroPlugin : IZeroPlugin - { - public virtual void Configure(IServiceCollection services, IZeroPluginConfiguration zero) { } + //public abstract class ZeroPlugin : IZeroPlugin + //{ + // public virtual void Configure(IServiceCollection services, IZeroOptions zero) { } - } + //} public interface IZeroPlugin { - void Configure(IServiceCollection services, IZeroPluginConfiguration zero); + void Configure(IServiceCollection services, IZeroOptions zero); } } \ No newline at end of file diff --git a/zero.Core/Plugins/ZeroPluginConfiguration.cs b/zero.Core/Plugins/ZeroPluginConfiguration.cs deleted file mode 100644 index e6bd764d..00000000 --- a/zero.Core/Plugins/ZeroPluginConfiguration.cs +++ /dev/null @@ -1,61 +0,0 @@ -using System; -using System.Collections.Generic; -using zero.Core.Entities; -using zero.Core.Identity; -using zero.Core.Options; - -namespace zero.Core.Plugins -{ - public class ZeroPluginConfiguration : IZeroPluginConfiguration - { - public void Configure(Action setupAction) where T : IZeroCollectionOptions - { - setupAction(null); // TODO - } - //public SectionCollection Sections { get; private set; } - - //public SpaceOptions Spaces { get; private set; } - - //public RendererCollection Renderers { get; private set; } - - //public IList Settings { get; private set; } - - //public PermissionGroupCollection Permissions { get; private set; } - - //public FeatureCollection Features { get; private set; } - - //public PageTypeCollection PageTypes { get; private set; } - - - //public ZeroPluginBuilder() - //{ - // Sections = new SectionCollection(); - // Spaces = new SpaceOptions(); - // Renderers = new RendererCollection(); - // Settings = new List(); - // Permissions = new PermissionGroupCollection(); - // Features = new FeatureCollection(); - // PageTypes = new PageTypeCollection(); - //} - } - - - public interface IZeroPluginConfiguration - { - //SectionCollection Sections { get; } - - //SpaceOptions Spaces { get; } - - //RendererCollection Renderers { get; } - - //IList Settings { get; } - - //PermissionGroupCollection Permissions { get; } - - //FeatureCollection Features { get; } - - //PageTypeCollection PageTypes { get; } - - void Configure(Action setupAction) where T : IZeroCollectionOptions; - } -} diff --git a/zero.Core/Renderer/AbstractRenderer.cs b/zero.Core/Renderer/AbstractRenderer.cs index b1d8b746..684d803b 100644 --- a/zero.Core/Renderer/AbstractRenderer.cs +++ b/zero.Core/Renderer/AbstractRenderer.cs @@ -25,7 +25,7 @@ namespace zero.Core.Renderer } - public abstract class AbstractRenderer : IRenderer where T : new() + public abstract class AbstractRenderer : IRenderer, IRenderer where T : new() { const string METHOD_FIELD = "field"; diff --git a/zero.Core/Renderer/IRendererFieldBuilder.cs b/zero.Core/Renderer/IRendererFieldBuilder.cs index 112dc66b..9f26c90e 100644 --- a/zero.Core/Renderer/IRendererFieldBuilder.cs +++ b/zero.Core/Renderer/IRendererFieldBuilder.cs @@ -22,7 +22,7 @@ namespace zero.Core.Renderer void Nested(IRenderer renderer, Action optionsBuilder = null); - void Renderer(IRenderer renderer, Action optionsBuilder = null); + void Renderer(IRenderer renderer, Action optionsBuilder = null); void Custom(string path, Func optionsBuilder = null); } diff --git a/zero.Core/Renderer/Options/DefaultRendererOptions.cs b/zero.Core/Renderer/Options/DefaultRendererOptions.cs new file mode 100644 index 00000000..449e8ffc --- /dev/null +++ b/zero.Core/Renderer/Options/DefaultRendererOptions.cs @@ -0,0 +1,7 @@ +namespace zero.Core.Renderer +{ + public class DefaultRendererOptions : AbstractFieldOptions + { + + } +} diff --git a/zero.Core/Renderer/Options/RendererOptions.cs b/zero.Core/Renderer/Options/RendererOptions.cs deleted file mode 100644 index b387dac9..00000000 --- a/zero.Core/Renderer/Options/RendererOptions.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace zero.Core.Renderer -{ - public class RendererOptions : AbstractFieldOptions - { - - } -} diff --git a/zero.Core/Renderer/RendererFieldBuilder.cs b/zero.Core/Renderer/RendererFieldBuilder.cs index 9d9e025c..c336376f 100644 --- a/zero.Core/Renderer/RendererFieldBuilder.cs +++ b/zero.Core/Renderer/RendererFieldBuilder.cs @@ -78,7 +78,7 @@ namespace zero.Core.Renderer View = "rte"; } - public void Renderer(IRenderer renderer, Action optionsBuilder = null) + public void Renderer(IRenderer renderer, Action optionsBuilder = null) { View = "_renderer"; CustomRenderer = renderer.ToGenericRenderer(); diff --git a/zero.Core/ZeroBackofficeCollection.cs b/zero.Core/ZeroBackofficeCollection.cs deleted file mode 100644 index a0f94f12..00000000 --- a/zero.Core/ZeroBackofficeCollection.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using zero.Core.Entities; -using zero.Core.Identity; - -namespace zero.Core -{ - public class ZeroBackofficeCollection - { - public SectionCollection Sections { get; private set; } - - public SpaceCollection Spaces { get; private set; } - - public RendererCollection Renderers { get; private set; } - - public IList Settings { get; private set; } - - public PermissionGroupCollection Permissions { get; private set; } - - public FeatureCollection Features { get; private set; } - - public PageTypeCollection PageTypes { get; private set; } - } -} diff --git a/zero.Debug/TestData/TestPlugin.cs b/zero.Debug/TestData/TestPlugin.cs index fdd7cfc3..d45a00d6 100644 --- a/zero.Debug/TestData/TestPlugin.cs +++ b/zero.Debug/TestData/TestPlugin.cs @@ -9,41 +9,29 @@ namespace zero.TestData { public class TestPlugin : IZeroPlugin { - public void Configure(IServiceCollection services, IZeroPluginConfiguration zero) + public void Configure(IServiceCollection services, IZeroOptions zero) { services.AddTransient(); - zero.Configure(opts => - { - opts.AddList("team", "Team", "Our team members", "fth-users"); - opts.AddList("news", "News", "Articles about the company", "fth-edit"); - opts.AddSeparator(); - opts.AddEditor("social", "Social", "Links to social media", "fth-twitter"); - }); + zero.Spaces.AddList("team", "Team", "Our team members", "fth-users"); + zero.Spaces.AddList("news", "News", "Articles about the company", "fth-edit"); + zero.Spaces.AddSeparator(); + zero.Spaces.AddEditor("social", "Social", "Links to social media", "fth-twitter"); - zero.Configure(opts => - { - opts.Add(TestFeatures.Wishlist, "Wishlist", "Frontend wishlist for logged-in users"); - opts.Add(TestFeatures.SocialShopping, "Social shopping", "Integrate products into social media portals"); - }); + zero.Features.Add(TestFeatures.Wishlist, "Wishlist", "Frontend wishlist for logged-in users"); + zero.Features.Add(TestFeatures.SocialShopping, "Social shopping", "Integrate products into social media portals"); - zero.Configure(opts => - { - opts.Add(); - opts.Add(); - opts.Add(); - opts.Add(); - opts.Add(); - opts.Add(); - opts.Add(); - }); + zero.Renderers.Add(); + zero.Renderers.Add(); + zero.Renderers.Add(); + zero.Renderers.Add(); + zero.Renderers.Add(); + zero.Renderers.Add(); + zero.Renderers.Add(); - zero.Configure(opts => - { - opts.Add("news", "News", "News about the company", "fth-book"); - opts.Add("content", "Page", "Page consisting of modules", "fth-box", true, true); - opts.Add("redirect", "Redirect", "Redirect to another page or an external URL", "fth-box", true, false, new List() { "content", "redirect" }); - }); + zero.Pages.Add("news", "News", "News about the company", "fth-book"); + zero.Pages.Add("content", "Page", "Page consisting of modules", "fth-box", true, true); + zero.Pages.Add("redirect", "Redirect", "Redirect to another page or an external URL", "fth-box", true, false, new List() { "content", "redirect" }); } } } diff --git a/zero.Web/Controllers/ApplicationsController.cs b/zero.Web/Controllers/ApplicationsController.cs index 19e779f1..5faca92c 100644 --- a/zero.Web/Controllers/ApplicationsController.cs +++ b/zero.Web/Controllers/ApplicationsController.cs @@ -3,6 +3,7 @@ using System.Threading.Tasks; using zero.Core.Api; using zero.Core.Entities; using zero.Core.Identity; +using zero.Core.Options; using zero.Web.Models; namespace zero.Web.Controllers @@ -55,7 +56,7 @@ namespace zero.Web.Controllers /// public IActionResult GetAllFeatures() { - return Json(Options.Backoffice.Features); + return Json(Options.Features.GetAllItems()); } diff --git a/zero.Web/Controllers/BackofficeController.cs b/zero.Web/Controllers/BackofficeController.cs index 210d5603..746f1489 100644 --- a/zero.Web/Controllers/BackofficeController.cs +++ b/zero.Web/Controllers/BackofficeController.cs @@ -7,6 +7,7 @@ using zero.Core.Api; using zero.Core.Entities; using zero.Core.Identity; using zero.Core.Mapper; +using zero.Core.Options; using zero.Web.Filters; using zero.Web.Mapper; using zero.Web.Models; diff --git a/zero.Web/Controllers/TestController.cs b/zero.Web/Controllers/TestController.cs index 1b033f26..85837ada 100644 --- a/zero.Web/Controllers/TestController.cs +++ b/zero.Web/Controllers/TestController.cs @@ -9,6 +9,7 @@ using zero.Core; using zero.Core.Api; using zero.Core.Entities; using zero.Core.Identity; +using zero.Core.Options; using zero.Core.Plugins; using zero.Core.Renderer; @@ -34,7 +35,7 @@ namespace zero.Web.Controllers [HttpGet] [ZeroAuthorize(false)] - public IActionResult GetPlugins([FromServices] IEnumerable plugins) + public IActionResult GetPlugins([FromServices] IEnumerable plugins) { return Json(plugins); } @@ -103,7 +104,7 @@ namespace zero.Web.Controllers { Space space = SpacesApi.GetByAlias(alias); - AbstractGenericRenderer renderer = Options.Backoffice.Renderers.FirstOrDefault(x => x.TargetType == space.Type); + AbstractGenericRenderer renderer = Options.Renderers.GetAllItems().FirstOrDefault(x => x.TargetType == space.Type); if (renderer == null) { diff --git a/zero.Web/Controllers/UsersController.cs b/zero.Web/Controllers/UsersController.cs index 77ab14f7..62934494 100644 --- a/zero.Web/Controllers/UsersController.cs +++ b/zero.Web/Controllers/UsersController.cs @@ -14,14 +14,16 @@ namespace zero.Web.Controllers IAuthenticationApi AuthenticationApi; IUserRolesApi RolesApi; ILanguagesApi LanguagesApi; + IPermissionsApi PermissionsApi; - public UsersController(IUserApi api, IAuthenticationApi authenticationApi, IUserRolesApi rolesApi, ILanguagesApi languagesApi) + public UsersController(IUserApi api, IAuthenticationApi authenticationApi, IUserRolesApi rolesApi, ILanguagesApi languagesApi, IPermissionsApi permissionsApi) { Api = api; AuthenticationApi = authenticationApi; RolesApi = rolesApi; LanguagesApi = languagesApi; + PermissionsApi = permissionsApi; } @@ -58,7 +60,7 @@ namespace zero.Web.Controllers /// public IActionResult GetAllPermissions() { - return Json(Options.Backoffice.Permissions); + return Json(PermissionsApi.GetAll()); } diff --git a/zero.Web/Defaults/DefaultBackofficePlugin.cs b/zero.Web/Defaults/DefaultBackofficePlugin.cs index 964c11c5..14a3c1c4 100644 --- a/zero.Web/Defaults/DefaultBackofficePlugin.cs +++ b/zero.Web/Defaults/DefaultBackofficePlugin.cs @@ -1,4 +1,5 @@ using Microsoft.Extensions.DependencyInjection; +using zero.Core; using zero.Core.Options; using zero.Core.Plugins; using zero.Web.Sections; @@ -7,28 +8,16 @@ namespace zero.Web.Defaults { public class DefaultBackofficePlugin : IZeroPlugin { - public void Configure(IServiceCollection services, IZeroPluginConfiguration zero) + public void Configure(IServiceCollection services, IZeroOptions zero) { - zero.Configure(opts => - { - opts.Add(); - opts.Add(); - opts.Add(); - opts.Add(); - opts.Add(); - }); + zero.Sections.Add(); + zero.Sections.Add(); + zero.Sections.Add(); + zero.Sections.Add(); + zero.Sections.Add(); - zero.Configure(opts => - { - opts.AddGroup(); - opts.AddGroup(); - }); - - - zero.Configure(opts => - { - - }); + zero.Settings.AddGroup(); + zero.Settings.AddGroup(); } } } \ No newline at end of file diff --git a/zero.Web/Views/Setup.cshtml b/zero.Web/Views/Setup.cshtml index 50af1823..60ed0c0e 100644 --- a/zero.Web/Views/Setup.cshtml +++ b/zero.Web/Views/Setup.cshtml @@ -1,5 +1,5 @@ @using zero.Core.Extensions -@inject Microsoft.Extensions.Options.IOptionsMonitor Options +@inject zero.Core.Options.IZeroOptions Options @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers @{ Layout = null; @@ -23,7 +23,7 @@
diff --git a/zero.Web/ZeroApplicationBuilderExtensions.cs b/zero.Web/ZeroApplicationBuilderExtensions.cs index 79e1df97..54dab5c1 100644 --- a/zero.Web/ZeroApplicationBuilderExtensions.cs +++ b/zero.Web/ZeroApplicationBuilderExtensions.cs @@ -6,6 +6,7 @@ using System; using System.IO; using zero.Core; using zero.Core.Extensions; +using zero.Core.Options; namespace zero.Web { @@ -13,7 +14,7 @@ namespace zero.Web { public static IApplicationBuilder UseZero(this IApplicationBuilder app) { - ZeroOptions options = app.ApplicationServices.GetService>().CurrentValue; + IZeroOptions options = app.ApplicationServices.GetService(); string path = options.BackofficePath.EnsureStartsWith('/').TrimEnd('/'); diff --git a/zero.Web/ZeroBuilder.cs b/zero.Web/ZeroBuilder.cs index f58e912f..245f3ef4 100644 --- a/zero.Web/ZeroBuilder.cs +++ b/zero.Web/ZeroBuilder.cs @@ -18,8 +18,10 @@ using zero.Core.Entities; using zero.Core.Extensions; using zero.Core.Identity; using zero.Core.Mapper; +using zero.Core.Options; using zero.Core.Plugins; using zero.Core.Validation; +using zero.Web.Defaults; using zero.Web.Mapper; namespace zero.Web @@ -32,16 +34,12 @@ namespace zero.Web IConfiguration Configuration { get; set; } - IZeroPluginConfiguration PluginBuilder { get; set; } - public ZeroBuilder(IServiceCollection services, IConfiguration configuration) { Services = services; Configuration = configuration; - PluginBuilder = new ZeroPluginConfiguration(); - //CultureInfo cultureInfo = new CultureInfo("en-US"); //cultureInfo.NumberFormat.CurrencySymbol = "€"; //CultureInfo.DefaultThreadCurrentCulture = cultureInfo; @@ -62,16 +60,16 @@ namespace zero.Web /// void AddConfiguration() { - Services.Configure(Configuration.GetSection("Zero")); - Services.PostConfigureAll(opts => - { - opts.ZeroVersion = "0.0.1.0"; // TODO - opts.Plugins = new PluginCollection(Services, PluginBuilder); - opts.Plugins.Add(); - opts.Backoffice = PluginBuilder; - }); + Services.AddOptions() + .Bind(Configuration.GetSection("Zero")) + .Configure(opts => + { + opts.ZeroVersion = "0.0.1.0"; // TODO + opts.Plugins = new PluginCollection(Services, opts); + opts.Plugins.Add(); + }); - Services.AddTransient(factory => factory.GetService>().CurrentValue); + Services.AddTransient(factory => factory.GetService>().CurrentValue); } @@ -110,8 +108,6 @@ namespace zero.Web Services.AddScoped(); Services.AddScoped(); Services.AddScoped(); - - Services.AddSingleton(PluginBuilder); } @@ -265,7 +261,7 @@ namespace zero.Web /// public ZeroBuilder WithOptions(Action configureOptions) { - Services.PostConfigure(configureOptions); + Services.Configure(configureOptions); return this; } } diff --git a/zero.Web/ZeroMiddleware.cs b/zero.Web/ZeroMiddleware.cs index a432ac1c..919ec84c 100644 --- a/zero.Web/ZeroMiddleware.cs +++ b/zero.Web/ZeroMiddleware.cs @@ -1,21 +1,16 @@ -using System; -using System.Net; +using Microsoft.AspNetCore.Http; using System.Threading.Tasks; -using Microsoft.AspNetCore.Antiforgery; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Routing; -using Microsoft.Extensions.DependencyInjection; -using zero.Core; +using zero.Core.Options; namespace zero.Web { public class ZeroMiddleware { private RequestDelegate Next { get; set; } - private ZeroOptions Options { get; set; } + private IZeroOptions Options { get; set; } - public ZeroMiddleware(RequestDelegate next, ZeroOptions options) + public ZeroMiddleware(RequestDelegate next, IZeroOptions options) { Next = next; Options = options; diff --git a/zero.Web/ZeroServiceCollectionExtensions.cs b/zero.Web/ZeroServiceCollectionExtensions.cs index c953c023..a40a4132 100644 --- a/zero.Web/ZeroServiceCollectionExtensions.cs +++ b/zero.Web/ZeroServiceCollectionExtensions.cs @@ -1,7 +1,7 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using System; -using zero.Core; +using zero.Core.Options; namespace zero.Web { diff --git a/zero.Web/ZeroVue.cs b/zero.Web/ZeroVue.cs index c50b6a38..5b5afa4e 100644 --- a/zero.Web/ZeroVue.cs +++ b/zero.Web/ZeroVue.cs @@ -1,4 +1,5 @@ using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Options; using Newtonsoft.Json.Linq; using System.Collections.Generic; using System.IO; @@ -13,6 +14,7 @@ using zero.Core.Entities; using zero.Core.Extensions; using zero.Core.Identity; using zero.Core.Mapper; +using zero.Core.Options; using zero.Web.Models; using zero.Web.Sections; @@ -77,7 +79,7 @@ namespace zero.Web List sections = new List(); - foreach (ISection section in Options.Backoffice.Sections) + foreach (ISection section in Options.Sections.GetAllItems()) { if (!isSuperUser && !Permission.CanReadKey(permissions, section.Alias, true)) { @@ -161,7 +163,7 @@ namespace zero.Web List groups = new List(); - foreach (SettingsGroup group in Options.Backoffice.Settings) + foreach (SettingsGroup group in Options.Settings.GetAllItems()) { List areas = new List();