mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-21 19:34:40 +08:00
Module installation from a feed.
--HG-- branch : recipe
This commit is contained in:
@@ -1,6 +1,12 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Web.Hosting;
|
||||
using Orchard.Data.Migration;
|
||||
using Orchard.Environment.Extensions;
|
||||
using Orchard.Environment.Extensions.Models;
|
||||
using Orchard.Localization;
|
||||
using Orchard.Logging;
|
||||
using Orchard.Modules.Services;
|
||||
using Orchard.Packaging.Models;
|
||||
using Orchard.Packaging.Services;
|
||||
using Orchard.Recipes.Models;
|
||||
@@ -9,9 +15,22 @@ using Orchard.Recipes.Services;
|
||||
namespace Orchard.Recipes.RecipeHandlers {
|
||||
public class ModuleRecipeHandler : IRecipeHandler {
|
||||
private readonly IPackagingSourceManager _packagingSourceManager;
|
||||
private readonly IPackageManager _packageManager;
|
||||
private readonly IExtensionManager _extensionManager;
|
||||
private readonly IModuleService _moduleService;
|
||||
private readonly IDataMigrationManager _dataMigrationManager;
|
||||
|
||||
public ModuleRecipeHandler(IPackagingSourceManager packagingSourceManager) {
|
||||
public ModuleRecipeHandler(
|
||||
IPackagingSourceManager packagingSourceManager,
|
||||
IPackageManager packageManager,
|
||||
IExtensionManager extensionManager,
|
||||
IModuleService moduleService,
|
||||
IDataMigrationManager dataMigrationManager) {
|
||||
_packagingSourceManager = packagingSourceManager;
|
||||
_packageManager = packageManager;
|
||||
_extensionManager = extensionManager;
|
||||
_moduleService = moduleService;
|
||||
_dataMigrationManager = dataMigrationManager;
|
||||
Logger = NullLogger.Instance;
|
||||
T = NullLocalizer.Instance;
|
||||
}
|
||||
@@ -60,7 +79,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;
|
||||
PackagingSource packagingSource = null;
|
||||
PackagingSource packagingSource = _packagingSourceManager.GetSources().FirstOrDefault();
|
||||
if (repository != null) {
|
||||
enforceVersion = false;
|
||||
packagingSource = new PackagingSource {FeedTitle = repository, FeedUrl = repository};
|
||||
@@ -70,7 +89,18 @@ namespace Orchard.Recipes.RecipeHandlers {
|
||||
if (enforceVersion && !String.Equals(packagingEntry.Version, version, StringComparison.OrdinalIgnoreCase)) {
|
||||
continue;
|
||||
}
|
||||
// install.
|
||||
// use for replace.
|
||||
bool moduleExists = false;
|
||||
foreach (var extension in _extensionManager.AvailableExtensions()
|
||||
.Where(extension =>
|
||||
DefaultExtensionTypes.IsModule(extension.ExtensionType) &&
|
||||
String.Equals(packagingEntry.Title, extension.Name, StringComparison.OrdinalIgnoreCase))) {
|
||||
moduleExists = true;
|
||||
}
|
||||
_packageManager.Install(packagingEntry.PackageId, packagingEntry.Version, packagingSource.FeedUrl, HostingEnvironment.MapPath("~/"));
|
||||
_moduleService.EnableFeatures(new[] { packagingEntry.Title }, true);
|
||||
_dataMigrationManager.Update(packagingEntry.Title);
|
||||
|
||||
installed = true;
|
||||
break;
|
||||
}
|
||||
|
@@ -1,4 +1,7 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using Orchard.Environment.Extensions;
|
||||
using Orchard.Environment.Extensions.Models;
|
||||
using Orchard.Localization;
|
||||
using Orchard.Logging;
|
||||
using Orchard.Packaging.Models;
|
||||
@@ -10,12 +13,12 @@ using Orchard.Themes.Services;
|
||||
namespace Orchard.Recipes.RecipeHandlers {
|
||||
public class ThemeRecipeHandler : IRecipeHandler {
|
||||
private readonly IPackagingSourceManager _packagingSourceManager;
|
||||
private readonly IThemeService _themeService;
|
||||
private readonly IExtensionManager _extensionManager;
|
||||
private readonly ISiteThemeService _siteThemeService;
|
||||
|
||||
public ThemeRecipeHandler(IPackagingSourceManager packagingSourceManager, IThemeService themeService, ISiteThemeService siteThemeService) {
|
||||
public ThemeRecipeHandler(IPackagingSourceManager packagingSourceManager, IExtensionManager extensionManager, ISiteThemeService siteThemeService) {
|
||||
_packagingSourceManager = packagingSourceManager;
|
||||
_themeService = themeService;
|
||||
_extensionManager = extensionManager;
|
||||
_siteThemeService = siteThemeService;
|
||||
Logger = NullLogger.Instance;
|
||||
T = NullLocalizer.Instance;
|
||||
@@ -81,6 +84,13 @@ namespace Orchard.Recipes.RecipeHandlers {
|
||||
if (enforceVersion && !String.Equals(packagingEntry.Version, version, StringComparison.OrdinalIgnoreCase)) {
|
||||
continue;
|
||||
}
|
||||
bool themeExists = false;
|
||||
foreach (var extension in _extensionManager.AvailableExtensions()
|
||||
.Where(extension =>
|
||||
DefaultExtensionTypes.IsTheme(extension.ExtensionType) &&
|
||||
String.Equals(packagingEntry.Title, extension.Name, StringComparison.OrdinalIgnoreCase))) {
|
||||
themeExists = true;
|
||||
}
|
||||
// install.
|
||||
installed = true;
|
||||
break;
|
||||
|
@@ -8,7 +8,11 @@
|
||||
<Tags>blog</Tags>
|
||||
<Version>1.0</Version>
|
||||
</Recipe>
|
||||
|
||||
|
||||
<Module name="Bing.Maps" version="0.5.0" />
|
||||
|
||||
<Theme name="People Person" version="1.0" enable="true" current="true" />
|
||||
|
||||
<Feature enable="Orchard.Blogs,Orchard.Comments,Orchard.Tags,
|
||||
XmlRpc,Orchard.Blogs.RemotePublishing,
|
||||
TinyMce,Orchard.Media,Orchard.PublishLater,
|
||||
|
Reference in New Issue
Block a user