From fa4e864a896f62e95f1958e03b04960350bed130 Mon Sep 17 00:00:00 2001 From: Andre Rodrigues Date: Thu, 10 Mar 2011 14:21:59 -0800 Subject: [PATCH] Using moduleservice instead of featuremanager. Installing module and enabling features in different steps to avoid data migration issue. --HG-- branch : dev --- .../Controllers/GalleryController.cs | 79 ++++++++----------- .../Orchard.Packaging.csproj | 4 + .../Views/Gallery/InstallModule.cshtml | 4 +- .../Modules/Orchard.Setup/Module.txt | 3 +- 4 files changed, 40 insertions(+), 50 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Packaging/Controllers/GalleryController.cs b/src/Orchard.Web/Modules/Orchard.Packaging/Controllers/GalleryController.cs index 795f015ea..a0f7b6ed7 100644 --- a/src/Orchard.Web/Modules/Orchard.Packaging/Controllers/GalleryController.cs +++ b/src/Orchard.Web/Modules/Orchard.Packaging/Controllers/GalleryController.cs @@ -7,11 +7,14 @@ using System.Web.Mvc; using System.Web.Routing; using System.Xml.Linq; using NuGet; +using Orchard.Data.Migration; +using Orchard.Environment; using Orchard.Environment.Configuration; using Orchard.Environment.Extensions; using Orchard.Environment.Extensions.Models; -using Orchard.Environment.Features; +using Orchard.Environment.ShellBuilders; using Orchard.Localization; +using Orchard.Modules.Services; using Orchard.Packaging.Models; using Orchard.Packaging.Services; using Orchard.Packaging.ViewModels; @@ -32,18 +35,18 @@ namespace Orchard.Packaging.Controllers { private readonly ShellSettings _shellSettings; private readonly IPackageManager _packageManager; private readonly IPackagingSourceManager _packagingSourceManager; - private readonly IFeatureManager _featureManager; + private readonly IModuleService _moduleService; public GalleryController( ShellSettings shellSettings, IPackageManager packageManager, IPackagingSourceManager packagingSourceManager, - IFeatureManager featureManager, + IModuleService moduleService, IOrchardServices services) { _shellSettings = shellSettings; _packageManager = packageManager; _packagingSourceManager = packagingSourceManager; - _featureManager = featureManager; + _moduleService = moduleService; Services = services; T = NullLocalizer.Instance; @@ -239,30 +242,29 @@ namespace Orchard.Packaging.Controllers { return HttpNotFound(); } - if (packageId.StartsWith(PackagingSourceManager.GetExtensionPrefix(DefaultExtensionTypes.Theme))) { - return InstallPOST(packageId, version, sourceId, redirectTo); + PackageInfo packageInfo = InstallPackage(packageId, version, source); + if (DefaultExtensionTypes.IsModule(packageInfo.ExtensionType)) { + IPackageRepository packageRepository = PackageRepositoryFactory.Default.CreateRepository(new PackageSource(source.FeedUrl, "Default")); + + IPackage package = packageRepository.FindPackage(packageId); + ExtensionDescriptor extensionDescriptor = _packageManager.GetExtensionDescriptor(package); + + List features = extensionDescriptor.Features + .Where(featureDescriptor => !DefaultExtensionTypes.IsTheme(featureDescriptor.Extension.ExtensionType)) + .Select(featureDescriptor => new PackagingInstallFeatureViewModel { + Enable = true, // by default all features are enabled + FeatureDescriptor = featureDescriptor + }).ToList(); + + if (features.Count > 0) { + return View("InstallModule", new PackagingInstallViewModel { + Features = features, + ExtensionDescriptor = extensionDescriptor + }); + } } - IPackageRepository packageRepository = PackageRepositoryFactory.Default.CreateRepository(new PackageSource(source.FeedUrl, "Default")); - - IPackage package = packageRepository.FindPackage(packageId); - ExtensionDescriptor extensionDescriptor = _packageManager.GetExtensionDescriptor(package); - - List features = extensionDescriptor.Features - .Where(featureDescriptor => !DefaultExtensionTypes.IsTheme(featureDescriptor.Extension.ExtensionType)) - .Select(featureDescriptor => new PackagingInstallFeatureViewModel { - Enable = true, // by default all features are enabled - FeatureDescriptor = featureDescriptor - }).ToList(); - - if (features.Count > 0) { - return View("InstallModule", new PackagingInstallViewModel { - Features = features, - ExtensionDescriptor = extensionDescriptor - }); - } - - return InstallPOST(packageId, version, sourceId, redirectTo); + return RedirectToAction(redirectTo); } [HttpPost, ActionName("InstallModule")] @@ -276,30 +278,15 @@ namespace Orchard.Packaging.Controllers { return HttpNotFound(); } - InstallPackage(packageId, version, source); - // Enable selected features if (packagingInstallViewModel.Features.Count > 0) { - _featureManager.EnableFeatures(packagingInstallViewModel.Features - .Select(feature => feature.FeatureDescriptor.Id)); + IEnumerable featureIds = packagingInstallViewModel.Features.Select(feature => feature.FeatureDescriptor.Id); + + // Enable the features and its dependencies + _moduleService.EnableFeatures(featureIds, true); } - return RedirectToAction(redirectTo == "Themes" ? "Themes" : "Modules"); - } - - [HttpPost, ActionName("Install")] - public ActionResult InstallPOST(string packageId, string version, int sourceId, string redirectTo) { - if (_shellSettings.Name != ShellSettings.DefaultName || !Services.Authorizer.Authorize(StandardPermissions.SiteOwner, T("Not authorized to add sources"))) - return new HttpUnauthorizedResult(); - - var source = _packagingSourceManager.GetSources().Where(s => s.Id == sourceId).FirstOrDefault(); - if (source == null) { - return HttpNotFound(); - } - - InstallPackage(packageId, version, source); - - return RedirectToAction(redirectTo == "Themes" ? "Themes" : "Modules"); + return RedirectToAction(redirectTo); } private PackageInfo InstallPackage(string packageId, string version, PackagingSource source) { diff --git a/src/Orchard.Web/Modules/Orchard.Packaging/Orchard.Packaging.csproj b/src/Orchard.Web/Modules/Orchard.Packaging/Orchard.Packaging.csproj index bfe35d837..79a33f598 100644 --- a/src/Orchard.Web/Modules/Orchard.Packaging/Orchard.Packaging.csproj +++ b/src/Orchard.Web/Modules/Orchard.Packaging/Orchard.Packaging.csproj @@ -125,6 +125,10 @@ {2D1D92BB-4555-4CBE-8D0E-63563D6CE4C6} Orchard.Framework + + {17F86780-9A1F-4AA1-86F1-875EEC2730C7} + Orchard.Modules + diff --git a/src/Orchard.Web/Modules/Orchard.Packaging/Views/Gallery/InstallModule.cshtml b/src/Orchard.Web/Modules/Orchard.Packaging/Views/Gallery/InstallModule.cshtml index 1803e1c83..c9154e42b 100644 --- a/src/Orchard.Web/Modules/Orchard.Packaging/Views/Gallery/InstallModule.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Packaging/Views/Gallery/InstallModule.cshtml @@ -10,7 +10,7 @@ } @using (Html.BeginFormAntiForgeryPost(Url.Action("InstallModule", "Gallery", new { packageId = Request.QueryString["packageId"], version = Request.QueryString["version"], sourceId = Request.QueryString["sourceId"], redirectTo = Request.QueryString["redirectTo"] }))) { -

@T("Pick the features you want enabled during install").ToString()

+

@T("Pick the features you want enabled").ToString()

@{ var index = 0; } @@ -33,5 +33,5 @@ }
- + } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Setup/Module.txt b/src/Orchard.Web/Modules/Orchard.Setup/Module.txt index d241c8453..fa3a4b592 100644 --- a/src/Orchard.Web/Modules/Orchard.Setup/Module.txt +++ b/src/Orchard.Web/Modules/Orchard.Setup/Module.txt @@ -8,5 +8,4 @@ Features: Orchard.Setup: Name: Setup Description: Standard site setup. This feature is disabled automatically once setup is over. - Category: Core - \ No newline at end of file + Category: Core \ No newline at end of file