2010-04-24 06:10:47 +08:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Web;
|
|
|
|
|
using Orchard.Environment.Extensions;
|
2010-04-28 02:24:06 +08:00
|
|
|
|
using Orchard.Environment.Extensions.Models;
|
2010-04-24 06:10:47 +08:00
|
|
|
|
using Orchard.Modules.Models;
|
|
|
|
|
|
|
|
|
|
namespace Orchard.Modules.Services {
|
|
|
|
|
public class ModuleService : IModuleService {
|
2010-04-28 02:24:06 +08:00
|
|
|
|
private const string ModuleExtensionType = "module";
|
2010-04-24 06:10:47 +08:00
|
|
|
|
private readonly IExtensionManager _extensionManager;
|
|
|
|
|
|
|
|
|
|
public ModuleService(IExtensionManager extensionManager) {
|
|
|
|
|
_extensionManager = extensionManager;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public IModule GetModuleByName(string moduleName) {
|
2010-04-28 02:24:06 +08:00
|
|
|
|
return _extensionManager.AvailableExtensions().Where(e => string.Equals(e.Name, moduleName, StringComparison.OrdinalIgnoreCase) && string.Equals(e.ExtensionType, "Module", StringComparison.OrdinalIgnoreCase)).Select(
|
|
|
|
|
descriptor => AssembleModuleFromDescriptor(descriptor)).FirstOrDefault();
|
2010-04-24 06:10:47 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public IEnumerable<IModule> GetInstalledModules() {
|
|
|
|
|
return
|
|
|
|
|
_extensionManager.AvailableExtensions().Where(
|
2010-04-28 02:24:06 +08:00
|
|
|
|
e => String.Equals(e.ExtensionType, ModuleExtensionType, StringComparison.OrdinalIgnoreCase)).Select(
|
|
|
|
|
descriptor => AssembleModuleFromDescriptor(descriptor));
|
2010-04-24 06:10:47 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void InstallModule(HttpPostedFileBase file) {
|
2010-04-28 02:24:06 +08:00
|
|
|
|
_extensionManager.InstallExtension(ModuleExtensionType, file);
|
2010-04-24 06:10:47 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void UninstallModule(string moduleName) {
|
2010-04-28 02:24:06 +08:00
|
|
|
|
_extensionManager.UninstallExtension(ModuleExtensionType, moduleName);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public IEnumerable<Feature> GetAvailableFeatures() {
|
|
|
|
|
return GetInstalledModules()
|
|
|
|
|
.Where(m => m.Features != null)
|
|
|
|
|
.SelectMany(m => _extensionManager.LoadFeatures(m.Features));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public IEnumerable<Feature> GetAvailableFeaturesByModule(string moduleName) {
|
|
|
|
|
var module = GetModuleByName(moduleName);
|
|
|
|
|
if (module == null || module.Features == null)
|
|
|
|
|
return null;
|
|
|
|
|
|
|
|
|
|
return _extensionManager.LoadFeatures(module.Features);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void EnableFeatures(IEnumerable<string> featureNames) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void DisableFeatures(IEnumerable<string> featureNames) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static IModule AssembleModuleFromDescriptor(ExtensionDescriptor extensionDescriptor) {
|
|
|
|
|
return new Module {
|
|
|
|
|
ModuleName = extensionDescriptor.Name,
|
|
|
|
|
DisplayName = extensionDescriptor.DisplayName,
|
|
|
|
|
Description = extensionDescriptor.Description,
|
|
|
|
|
Version = extensionDescriptor.Version,
|
|
|
|
|
Author = extensionDescriptor.Author,
|
|
|
|
|
HomePage = extensionDescriptor.WebSite,
|
|
|
|
|
Tags = extensionDescriptor.Tags,
|
|
|
|
|
Features = extensionDescriptor.Features
|
|
|
|
|
};
|
2010-04-24 06:10:47 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|