mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
Fixing regression #17617: Recipe doesn't download "recommended version" of module/theme
--HG-- branch : 1.x
This commit is contained in:
@@ -80,7 +80,7 @@ Features:
|
||||
ModuleRecipeHandler moduleRecipeHandler = _container.Resolve<ModuleRecipeHandler>();
|
||||
|
||||
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<IFeatureManager>();
|
||||
@@ -129,7 +129,7 @@ Features:
|
||||
public IEnumerable<PackagingEntry> GetExtensionList(PackagingSource packagingSource = null, Func<IQueryable<PublishedPackage>, IQueryable<PublishedPackage>> query = null) {
|
||||
return new[] {
|
||||
new PackagingEntry {
|
||||
PackageId = "SuperWiki",
|
||||
PackageId = "Orchard.Module.SuperWiki",
|
||||
Title = "SuperWiki",
|
||||
Version = "1.0.3"
|
||||
}
|
||||
|
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user