From 6df96cb6906692200ff2b81f26da184cd47933bf Mon Sep 17 00:00:00 2001 From: Suha Can Date: Thu, 31 Mar 2011 12:26:37 -0700 Subject: [PATCH] Fixing regression #17617: Recipe doesn't download "recommended version" of module/theme --HG-- branch : 1.x --- .../RecipeHandlers/ModuleRecipeHandlerTest.cs | 4 +- .../RecipeHandlers/ModuleRecipeHandler.cs | 40 ++++++++++++------- .../RecipeHandlers/ThemeRecipeHandler.cs | 33 +++++++++++---- 3 files changed, 53 insertions(+), 24 deletions(-) diff --git a/src/Orchard.Tests.Modules/Recipes/RecipeHandlers/ModuleRecipeHandlerTest.cs b/src/Orchard.Tests.Modules/Recipes/RecipeHandlers/ModuleRecipeHandlerTest.cs index 3550f9143..3358c7189 100644 --- a/src/Orchard.Tests.Modules/Recipes/RecipeHandlers/ModuleRecipeHandlerTest.cs +++ b/src/Orchard.Tests.Modules/Recipes/RecipeHandlers/ModuleRecipeHandlerTest.cs @@ -80,7 +80,7 @@ Features: ModuleRecipeHandler moduleRecipeHandler = _container.Resolve(); RecipeContext recipeContext = new RecipeContext { RecipeStep = new RecipeStep { Name = "Module", Step = new XElement("SuperWiki") } }; - recipeContext.RecipeStep.Step.Add(new XAttribute("packageId", "SuperWiki")); + recipeContext.RecipeStep.Step.Add(new XAttribute("packageId", "Orchard.Module.SuperWiki")); recipeContext.RecipeStep.Step.Add(new XAttribute("repository", "test")); IFeatureManager featureManager = _container.Resolve(); @@ -129,7 +129,7 @@ Features: public IEnumerable GetExtensionList(PackagingSource packagingSource = null, Func, IQueryable> query = null) { return new[] { new PackagingEntry { - PackageId = "SuperWiki", + PackageId = "Orchard.Module.SuperWiki", Title = "SuperWiki", Version = "1.0.3" } diff --git a/src/Orchard.Web/Modules/Orchard.Recipes/RecipeHandlers/ModuleRecipeHandler.cs b/src/Orchard.Web/Modules/Orchard.Recipes/RecipeHandlers/ModuleRecipeHandler.cs index fb95cc43c..6ec620226 100644 --- a/src/Orchard.Web/Modules/Orchard.Recipes/RecipeHandlers/ModuleRecipeHandler.cs +++ b/src/Orchard.Web/Modules/Orchard.Recipes/RecipeHandlers/ModuleRecipeHandler.cs @@ -17,20 +17,14 @@ namespace Orchard.Recipes.RecipeHandlers { private readonly IPackagingSourceManager _packagingSourceManager; private readonly IPackageManager _packageManager; private readonly IExtensionManager _extensionManager; - private readonly IFeatureManager _featureManager; - private readonly IDataMigrationManager _dataMigrationManager; public ModuleRecipeHandler( IPackagingSourceManager packagingSourceManager, IPackageManager packageManager, - IExtensionManager extensionManager, - IFeatureManager featureManager, - IDataMigrationManager dataMigrationManager) { + IExtensionManager extensionManager) { _packagingSourceManager = packagingSourceManager; _packageManager = packageManager; _extensionManager = extensionManager; - _featureManager = featureManager; - _dataMigrationManager = dataMigrationManager; Logger = NullLogger.Instance; T = NullLocalizer.Instance; @@ -69,6 +63,7 @@ namespace Orchard.Recipes.RecipeHandlers { // download and install module from the orchard feed or a custom feed if repository is specified. bool enforceVersion = version != null; bool installed = false; + PackagingEntry packagingEntry = null; var packagingSource = _packagingSourceManager.GetSources().FirstOrDefault(); if (repository != null) { @@ -76,15 +71,25 @@ namespace Orchard.Recipes.RecipeHandlers { packagingSource = new PackagingSource {FeedTitle = repository, FeedUrl = repository}; } - var packagingEntry = _packagingSourceManager.GetExtensionList(packagingSource, - packages => packages.Where(package => - package.PackageType.Equals(DefaultExtensionTypes.Module) && - package.Id.Equals(packageId, StringComparison.OrdinalIgnoreCase) && - (!enforceVersion || package.Version.Equals(version, StringComparison.OrdinalIgnoreCase)))) - .FirstOrDefault(); + if (enforceVersion) { + packagingEntry = _packagingSourceManager.GetExtensionList(packagingSource, + packages => packages.Where(package => + package.PackageType.Equals(DefaultExtensionTypes.Module) && + package.Id.Equals(packageId, StringComparison.OrdinalIgnoreCase) && + package.Version.Equals(version, StringComparison.OrdinalIgnoreCase))).FirstOrDefault(); + } + else { + packagingEntry = _packagingSourceManager.GetExtensionList(packagingSource, + packages => packages.Where(package => + package.PackageType.Equals(DefaultExtensionTypes.Module) && + package.Id.Equals(packageId, StringComparison.OrdinalIgnoreCase) && + package.IsLatestVersion)).FirstOrDefault(); + } if (packagingEntry != null) { - _packageManager.Install(packagingEntry.PackageId, packagingEntry.Version, packagingSource.FeedUrl, HostingEnvironment.MapPath("~/")); + if (!ModuleAlreadyInstalled(packagingEntry.PackageId)) { + _packageManager.Install(packagingEntry.PackageId, packagingEntry.Version, packagingSource.FeedUrl, HostingEnvironment.MapPath("~/")); + } installed = true; } @@ -94,5 +99,12 @@ namespace Orchard.Recipes.RecipeHandlers { recipeContext.Executed = true; } + + private bool ModuleAlreadyInstalled(string packageId) { + return _extensionManager.AvailableExtensions().Where(m => DefaultExtensionTypes.IsModule(m.ExtensionType)) + .Any(module => module.Id.Equals( + packageId.Substring(PackagingSourceManager.GetExtensionPrefix(DefaultExtensionTypes.Module).Length), + StringComparison.OrdinalIgnoreCase)); + } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Recipes/RecipeHandlers/ThemeRecipeHandler.cs b/src/Orchard.Web/Modules/Orchard.Recipes/RecipeHandlers/ThemeRecipeHandler.cs index b00e0a52f..1b3217e24 100644 --- a/src/Orchard.Web/Modules/Orchard.Recipes/RecipeHandlers/ThemeRecipeHandler.cs +++ b/src/Orchard.Web/Modules/Orchard.Recipes/RecipeHandlers/ThemeRecipeHandler.cs @@ -77,6 +77,7 @@ namespace Orchard.Recipes.RecipeHandlers { // download and install theme from the orchard feed or a custom feed if repository is specified. bool enforceVersion = version != null; bool installed = false; + PackagingEntry packagingEntry = null; var packagingSource = _packagingSourceManager.GetSources().FirstOrDefault(); if (repository != null) { @@ -84,16 +85,25 @@ namespace Orchard.Recipes.RecipeHandlers { packagingSource = new PackagingSource { FeedTitle = repository, FeedUrl = repository }; } - var packagingEntry = _packagingSourceManager.GetExtensionList(packagingSource, - packages => packages.Where(package => - package.PackageType.Equals(DefaultExtensionTypes.Theme) && - package.Id.Equals(packageId, StringComparison.OrdinalIgnoreCase) && - (!enforceVersion || package.Version.Equals(version, StringComparison.OrdinalIgnoreCase)))) - .FirstOrDefault(); + if (enforceVersion) { + packagingEntry = _packagingSourceManager.GetExtensionList(packagingSource, + packages => packages.Where(package => + package.PackageType.Equals(DefaultExtensionTypes.Theme) && + package.Id.Equals(packageId, StringComparison.OrdinalIgnoreCase) && + package.Version.Equals(version, StringComparison.OrdinalIgnoreCase))).FirstOrDefault(); + } + else { + packagingEntry = _packagingSourceManager.GetExtensionList(packagingSource, + packages => packages.Where(package => + package.PackageType.Equals(DefaultExtensionTypes.Theme) && + package.Id.Equals(packageId, StringComparison.OrdinalIgnoreCase) && + package.IsLatestVersion)).FirstOrDefault(); + } if (packagingEntry != null) { - _packageManager.Install(packagingEntry.PackageId, packagingEntry.Version, packagingSource.FeedUrl, HostingEnvironment.MapPath("~/")); - + if (!ThemeAlreadyInstalled(packagingEntry.PackageId)) { + _packageManager.Install(packagingEntry.PackageId, packagingEntry.Version, packagingSource.FeedUrl, HostingEnvironment.MapPath("~/")); + } if (current) { _themeService.EnableThemeFeatures(packagingEntry.Title); _siteThemeService.SetSiteTheme(packagingEntry.Title); @@ -111,5 +121,12 @@ namespace Orchard.Recipes.RecipeHandlers { recipeContext.Executed = true; } + + private bool ThemeAlreadyInstalled(string packageId) { + return _extensionManager.AvailableExtensions().Where(t => DefaultExtensionTypes.IsTheme(t.ExtensionType)) + .Any(theme => theme.Id.Equals( + packageId.Substring(PackagingSourceManager.GetExtensionPrefix(DefaultExtensionTypes.Theme).Length), + StringComparison.OrdinalIgnoreCase)); + } } } \ No newline at end of file