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-29 02:47:29 +08:00
|
|
|
|
using Orchard.Environment.Topology;
|
|
|
|
|
using Orchard.Environment.Topology.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;
|
2010-04-29 02:47:29 +08:00
|
|
|
|
private readonly IShellDescriptorManager _shellDescriptorManager;
|
2010-04-24 06:10:47 +08:00
|
|
|
|
|
2010-04-29 02:47:29 +08:00
|
|
|
|
public ModuleService(IExtensionManager extensionManager, IShellDescriptorManager shellDescriptorManager) {
|
2010-04-24 06:10:47 +08:00
|
|
|
|
_extensionManager = extensionManager;
|
2010-04-29 02:47:29 +08:00
|
|
|
|
_shellDescriptorManager = shellDescriptorManager;
|
2010-04-24 06:10:47 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public IModule GetModuleByName(string moduleName) {
|
2010-04-29 02:47:29 +08:00
|
|
|
|
return _extensionManager.AvailableExtensions().Where(e => string.Equals(e.Name, moduleName, StringComparison.OrdinalIgnoreCase) && string.Equals(e.ExtensionType, ModuleExtensionType, StringComparison.OrdinalIgnoreCase)).Select(
|
2010-04-28 02:24:06 +08:00
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
|
2010-04-29 02:47:29 +08:00
|
|
|
|
public IModule GetModuleByFeatureName(string featureName) {
|
2010-04-28 02:24:06 +08:00
|
|
|
|
return GetInstalledModules()
|
2010-04-29 02:47:29 +08:00
|
|
|
|
.Where(
|
|
|
|
|
m =>
|
|
|
|
|
m.Features.FirstOrDefault(f => string.Equals(f.Name, featureName, StringComparison.OrdinalIgnoreCase)) !=
|
|
|
|
|
null).FirstOrDefault();
|
2010-04-28 02:24:06 +08:00
|
|
|
|
}
|
|
|
|
|
|
2010-04-29 02:47:29 +08:00
|
|
|
|
public IEnumerable<IModuleFeature> GetAvailableFeatures() {
|
2010-05-18 00:50:36 +08:00
|
|
|
|
var enabledFeatures = _shellDescriptorManager.GetShellDescriptor().EnabledFeatures;
|
2010-04-29 02:47:29 +08:00
|
|
|
|
return GetInstalledModules()
|
|
|
|
|
.SelectMany(m => _extensionManager.LoadFeatures(m.Features))
|
2010-05-18 00:50:36 +08:00
|
|
|
|
.Select(f => AssembleModuleFromDescriptor(f, enabledFeatures.FirstOrDefault(sf => string.Equals(sf.Name, f.Descriptor.Name, StringComparison.OrdinalIgnoreCase)) != null));
|
2010-04-29 02:47:29 +08:00
|
|
|
|
}
|
2010-04-28 02:24:06 +08:00
|
|
|
|
|
2010-04-29 02:47:29 +08:00
|
|
|
|
public IEnumerable<Feature> GetAvailableFeaturesByModule(string moduleName) {
|
|
|
|
|
throw new NotImplementedException();
|
2010-04-28 02:24:06 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void EnableFeatures(IEnumerable<string> featureNames) {
|
2010-04-29 02:47:29 +08:00
|
|
|
|
var shellDescriptor = _shellDescriptorManager.GetShellDescriptor();
|
|
|
|
|
|
|
|
|
|
var enabledFeatures = shellDescriptor.EnabledFeatures
|
|
|
|
|
.Union(featureNames.Select(s => new ShellFeature {Name = s}));
|
|
|
|
|
|
|
|
|
|
_shellDescriptorManager.UpdateShellDescriptor(shellDescriptor.SerialNumber, enabledFeatures, shellDescriptor.Parameters);
|
2010-04-28 02:24:06 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void DisableFeatures(IEnumerable<string> featureNames) {
|
2010-04-29 02:47:29 +08:00
|
|
|
|
var shellDescriptor = _shellDescriptorManager.GetShellDescriptor();
|
|
|
|
|
var enabledFeatures = shellDescriptor.EnabledFeatures.ToList();
|
2010-05-18 00:50:36 +08:00
|
|
|
|
var features = GetAvailableFeatures().ToList();
|
2010-05-15 06:52:22 +08:00
|
|
|
|
|
|
|
|
|
foreach (var featureName in featureNames) {
|
|
|
|
|
var feature = featureName;
|
|
|
|
|
var dependants = features.Where(f => f.IsEnabled && f.Descriptor.Dependencies != null && f.Descriptor.Dependencies.Contains(feature));
|
|
|
|
|
|
|
|
|
|
if (dependants.Count() == 0) {
|
|
|
|
|
enabledFeatures.RemoveAll(f => f.Name == feature);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
// list what else will be disabled with ok/cancel
|
|
|
|
|
}
|
|
|
|
|
}
|
2010-04-29 02:47:29 +08:00
|
|
|
|
|
|
|
|
|
_shellDescriptorManager.UpdateShellDescriptor(shellDescriptor.SerialNumber, enabledFeatures, shellDescriptor.Parameters);
|
2010-04-28 02:24:06 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
}
|
2010-04-29 02:47:29 +08:00
|
|
|
|
|
|
|
|
|
private static IModuleFeature AssembleModuleFromDescriptor(Feature feature, bool isEnabled) {
|
|
|
|
|
return new ModuleFeature {
|
|
|
|
|
Descriptor = feature.Descriptor,
|
|
|
|
|
IsEnabled = isEnabled
|
|
|
|
|
};
|
|
|
|
|
}
|
2010-04-24 06:10:47 +08:00
|
|
|
|
}
|
|
|
|
|
}
|