diff --git a/src/Orchard.Web/Modules/Orchard.ImportExport/Controllers/AdminController.cs b/src/Orchard.Web/Modules/Orchard.ImportExport/Controllers/AdminController.cs index 2767f8caa..9efb65b69 100644 --- a/src/Orchard.Web/Modules/Orchard.ImportExport/Controllers/AdminController.cs +++ b/src/Orchard.Web/Modules/Orchard.ImportExport/Controllers/AdminController.cs @@ -4,6 +4,7 @@ using System.IO; using System.Linq; using System.Web.Mvc; using Orchard.ContentManagement.MetaData; +using Orchard.DisplayManagement; using Orchard.ImportExport.Services; using Orchard.ImportExport.ViewModels; using Orchard.Localization; @@ -18,17 +19,21 @@ namespace Orchard.ImportExport.Controllers { private readonly IContentDefinitionManager _contentDefinitionManager; private readonly ICustomExportStep _customExportStep; private readonly IRecipeResultAccessor _recipeResultAccessor; + private readonly IEnumerable _exportStepProviders; public AdminController( IOrchardServices services, IImportExportService importExportService, IContentDefinitionManager contentDefinitionManager, ICustomExportStep customExportStep, - IRecipeResultAccessor recipeResultAccessor) { + IRecipeResultAccessor recipeResultAccessor, + IEnumerable exportStepProviders) { + _importExportService = importExportService; _contentDefinitionManager = contentDefinitionManager; _customExportStep = customExportStep; _recipeResultAccessor = recipeResultAccessor; + _exportStepProviders = exportStepProviders; Services = services; T = NullLocalizer.Instance; } @@ -74,10 +79,19 @@ namespace Orchard.ImportExport.Controllers { var customSteps = new List(); _customExportStep.Register(customSteps); + var exportSteps = _exportStepProviders.Select(x => { + var editor = x.BuildEditor(Services.New); + editor.Provider = x; + editor.Name = x.Name; + editor.DisplayName = x.DisplayName; + return editor; + }).Where(x => x != null); + var viewModel = new ExportViewModel { RecipeVersion = "1.0", ContentTypes = new List(), - CustomSteps = customSteps.Select(x => new CustomStepEntry { CustomStep = x }).ToList() + CustomSteps = customSteps.Select(x => new CustomStepEntry { CustomStep = x }).ToList(), + ExportSteps = exportSteps.ToList() }; foreach (var contentType in _contentDefinitionManager.ListTypeDefinitions().OrderBy(c => c.Name)) { diff --git a/src/Orchard.Web/Modules/Orchard.ImportExport/Orchard.ImportExport.csproj b/src/Orchard.Web/Modules/Orchard.ImportExport/Orchard.ImportExport.csproj index 842464bb7..0c3ffd7cc 100644 --- a/src/Orchard.Web/Modules/Orchard.ImportExport/Orchard.ImportExport.csproj +++ b/src/Orchard.Web/Modules/Orchard.ImportExport/Orchard.ImportExport.csproj @@ -71,10 +71,15 @@ + + + + + @@ -113,6 +118,9 @@ + + + 10.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) diff --git a/src/Orchard.Web/Modules/Orchard.ImportExport/Providers/DataExportStep.cs b/src/Orchard.Web/Modules/Orchard.ImportExport/Providers/DataExportStep.cs new file mode 100644 index 000000000..2a34c09c5 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.ImportExport/Providers/DataExportStep.cs @@ -0,0 +1,27 @@ +using Orchard.ContentManagement; +using Orchard.ImportExport.Services; +using Orchard.Localization; + +namespace Orchard.ImportExport.Providers { + public class DataExportStep : ExportStepProvider { + public override string Name { + get { return "Data"; } + } + + public override LocalizedString DisplayName { + get { return T("Data"); } + } + + public override dynamic BuildEditor(dynamic shapeFactory) { + return UpdateEditor(shapeFactory, null); + } + + public override dynamic UpdateEditor(dynamic shapeFactory, IUpdateModel updater) { + if (updater != null) { + + } + + return shapeFactory.EditorTemplate(TemplateName: "ExportSteps/Data"); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.ImportExport/Services/ExportStepProvider.cs b/src/Orchard.Web/Modules/Orchard.ImportExport/Services/ExportStepProvider.cs new file mode 100644 index 000000000..9ba84079a --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.ImportExport/Services/ExportStepProvider.cs @@ -0,0 +1,21 @@ +using Orchard.ContentManagement; +using Orchard.Localization; + +namespace Orchard.ImportExport.Services { + public abstract class ExportStepProvider : Component, IExportStepProvider { + public abstract string Name { get; } + public abstract LocalizedString DisplayName { get; } + + protected virtual string Prefix { + get { return GetType().Name; } + } + + public virtual dynamic BuildEditor(dynamic shapeFactory) { + return null; + } + + public virtual dynamic UpdateEditor(dynamic shapeFactory, IUpdateModel updater) { + return null; + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.ImportExport/Services/IExportStepProvider.cs b/src/Orchard.Web/Modules/Orchard.ImportExport/Services/IExportStepProvider.cs new file mode 100644 index 000000000..0c4d21c99 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.ImportExport/Services/IExportStepProvider.cs @@ -0,0 +1,11 @@ +using Orchard.ContentManagement; +using Orchard.Localization; + +namespace Orchard.ImportExport.Services { + public interface IExportStepProvider : IDependency { + string Name { get; } + LocalizedString DisplayName { get; } + dynamic BuildEditor(dynamic shapeFactory); + dynamic UpdateEditor(dynamic shapeFactory, IUpdateModel updater); + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.ImportExport/Services/IImportStepProvider.cs b/src/Orchard.Web/Modules/Orchard.ImportExport/Services/IImportStepProvider.cs new file mode 100644 index 000000000..19e68b435 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.ImportExport/Services/IImportStepProvider.cs @@ -0,0 +1,11 @@ +using Orchard.ContentManagement; +using Orchard.Localization; + +namespace Orchard.ImportExport.Services { + public interface IImportStepProvider : IDependency { + string Name { get; } + LocalizedString DisplayName { get; } + dynamic BuildEditor(dynamic shapeFactory); + dynamic UpdateEditor(dynamic shapeFactory, IUpdateModel updater); + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.ImportExport/Services/ImportStepProvider.cs b/src/Orchard.Web/Modules/Orchard.ImportExport/Services/ImportStepProvider.cs new file mode 100644 index 000000000..a2584047b --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.ImportExport/Services/ImportStepProvider.cs @@ -0,0 +1,21 @@ +using Orchard.ContentManagement; +using Orchard.Localization; + +namespace Orchard.ImportExport.Services { + public abstract class ImportStepProvider : Component, IImportStepProvider { + public abstract string Name { get; } + public abstract LocalizedString DisplayName { get; } + + protected virtual string Prefix { + get { return GetType().Name; } + } + + public virtual dynamic BuildEditor(dynamic shapeFactory) { + return null; + } + + public virtual dynamic UpdateEditor(dynamic shapeFactory, IUpdateModel updater) { + return null; + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.ImportExport/ViewModels/ExportViewModel.cs b/src/Orchard.Web/Modules/Orchard.ImportExport/ViewModels/ExportViewModel.cs index 6e7f5b1f3..35daa6532 100644 --- a/src/Orchard.Web/Modules/Orchard.ImportExport/ViewModels/ExportViewModel.cs +++ b/src/Orchard.Web/Modules/Orchard.ImportExport/ViewModels/ExportViewModel.cs @@ -4,6 +4,7 @@ namespace Orchard.ImportExport.ViewModels { public class ExportViewModel { public IList ContentTypes { get; set; } public IList CustomSteps { get; set; } + public IList ExportSteps { get; set; } public bool Metadata { get; set; } public bool Data { get; set; } public int? ImportBatchSize { get; set; } diff --git a/src/Orchard.Web/Modules/Orchard.ImportExport/Views/Admin/Export.cshtml b/src/Orchard.Web/Modules/Orchard.ImportExport/Views/Admin/Export.cshtml index c97832c18..12a8bf2a4 100644 --- a/src/Orchard.Web/Modules/Orchard.ImportExport/Views/Admin/Export.cshtml +++ b/src/Orchard.Web/Modules/Orchard.ImportExport/Views/Admin/Export.cshtml @@ -1,8 +1,19 @@ -@using Orchard.Utility.Extensions +@using Orchard.Localization +@using Orchard.Utility.Extensions @model Orchard.ImportExport.ViewModels.ExportViewModel @{ Layout.Title = T("Export").ToString(); } @using (Html.BeginFormAntiForgeryPost()) { Html.ValidationSummary(); + foreach (var exportStep in Model.ExportSteps) { + var displayName = (LocalizedString)exportStep.DisplayName; + var stepId = String.Format("step-{0}", displayName.ToString().HtmlClassify()); +
+ +
+ @Display(exportStep) +
+
+ }
@T("Choose the types to include in the export file:") diff --git a/src/Orchard.Web/Modules/Orchard.ImportExport/Views/EditorTemplates/ExportSteps/Data.cshtml b/src/Orchard.Web/Modules/Orchard.ImportExport/Views/EditorTemplates/ExportSteps/Data.cshtml new file mode 100644 index 000000000..ceba0d481 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.ImportExport/Views/EditorTemplates/ExportSteps/Data.cshtml @@ -0,0 +1,5 @@ + + + + +
\ No newline at end of file