mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
Showing allowed modules with dependencies
This commit is contained in:
@@ -81,7 +81,7 @@ namespace Orchard.Modules.Controllers {
|
||||
|
||||
IEnumerable<ModuleEntry> modules = _extensionManager.AvailableExtensions()
|
||||
.Where(extensionDescriptor => DefaultExtensionTypes.IsModule(extensionDescriptor.ExtensionType) &&
|
||||
ModuleIsAllowed(extensionDescriptor) &&
|
||||
|
||||
(string.IsNullOrEmpty(options.SearchText) || extensionDescriptor.Name.ToLowerInvariant().Contains(options.SearchText.ToLowerInvariant())))
|
||||
.OrderBy(extensionDescriptor => extensionDescriptor.Name)
|
||||
.Select(extensionDescriptor => new ModuleEntry { Descriptor = extensionDescriptor });
|
||||
@@ -174,7 +174,7 @@ namespace Orchard.Modules.Controllers {
|
||||
var featuresThatNeedUpdate = _dataMigrationManager.GetFeaturesThatNeedUpdate();
|
||||
|
||||
IEnumerable<ModuleFeature> features = _featureManager.GetAvailableFeatures()
|
||||
.Where(f => !DefaultExtensionTypes.IsTheme(f.Extension.ExtensionType) && ModuleIsAllowed(f.Extension))
|
||||
.Where(f => !DefaultExtensionTypes.IsTheme(f.Extension.ExtensionType))
|
||||
.Select(f => new ModuleFeature {
|
||||
Descriptor = f,
|
||||
IsEnabled = _shellDescriptor.Features.Any(sf => sf.Name == f.Id),
|
||||
@@ -184,7 +184,10 @@ namespace Orchard.Modules.Controllers {
|
||||
})
|
||||
.ToList();
|
||||
|
||||
return View(new FeaturesViewModel { Features = features });
|
||||
return View(new FeaturesViewModel {
|
||||
Features = features,
|
||||
IsAllowed = ModuleIsAllowed
|
||||
});
|
||||
}
|
||||
|
||||
[HttpPost, ActionName("Features")]
|
||||
|
@@ -1,10 +1,14 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Orchard.Environment.Configuration;
|
||||
using Orchard.Environment.Extensions.Models;
|
||||
using Orchard.Modules.Models;
|
||||
|
||||
namespace Orchard.Modules.ViewModels {
|
||||
public class FeaturesViewModel {
|
||||
public IEnumerable<ModuleFeature> Features { get; set; }
|
||||
public FeaturesBulkAction BulkAction { get; set; }
|
||||
public Func<ExtensionDescriptor, bool> IsAllowed { get; set; }
|
||||
}
|
||||
|
||||
public enum FeaturesBulkAction {
|
||||
|
@@ -35,10 +35,14 @@
|
||||
<button type="submit" name="submit.BulkExecute" value="yes">@T("Execute")</button>
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
<ul class="features summary-view switchable">@{
|
||||
|
||||
<ul class="features summary-view switchable">
|
||||
@{
|
||||
var featureGroups = Model.Features.OrderBy(f => f.Descriptor.Category, new DoghouseComparer("Core")).GroupBy(f => f.Descriptor.Category).ToList();
|
||||
foreach (var featureGroup in featureGroups) {
|
||||
if (!featureGroup.Any(x => Model.IsAllowed(x.Descriptor.Extension))) {
|
||||
continue;
|
||||
}
|
||||
var categoryName = LocalizedString.TextOrDefault(featureGroup.First().Descriptor.Category, T("Uncategorized"));
|
||||
var categoryClassName = string.Format("category {0}", Html.Encode(categoryName.ToString().HtmlClassify()));
|
||||
if (featureGroup == featureGroups.First()) {
|
||||
@@ -48,11 +52,15 @@
|
||||
categoryClassName += " last";
|
||||
}
|
||||
|
||||
<li class="@categoryClassName">
|
||||
<h2>@categoryName</h2>
|
||||
<ul>@{
|
||||
<li class="@categoryClassName">
|
||||
<h2>@categoryName</h2>
|
||||
<ul>
|
||||
@{
|
||||
var features = featureGroup.OrderBy(f => f.Descriptor.Name);
|
||||
foreach (var feature in features) {
|
||||
if (!Model.IsAllowed(feature.Descriptor.Extension)) {
|
||||
continue;
|
||||
}
|
||||
//hmmm...I feel like I've done this before...
|
||||
var featureId = feature.Descriptor.Id.AsFeatureId(n => T(n));
|
||||
var featureName = string.IsNullOrEmpty(feature.Descriptor.Name) ? feature.Descriptor.Id : feature.Descriptor.Name;
|
||||
@@ -74,57 +82,59 @@
|
||||
var missingDependencies = feature.Descriptor.Dependencies
|
||||
.Where(d => !Model.Features.Any(f => f.Descriptor.Id.Equals(d, StringComparison.OrdinalIgnoreCase)));
|
||||
var showDisable = categoryName.ToString() != "Core";
|
||||
var showEnable = !missingDependencies.Any() && feature.Descriptor.Id != "Orchard.Setup";
|
||||
|
||||
var showEnable = Model.IsAllowed(feature.Descriptor.Extension) && !missingDependencies.Any() && feature.Descriptor.Id != "Orchard.Setup";
|
||||
|
||||
<li class="@featureClassName" id="@featureId" title="@T("{0} is {1}", Html.AttributeEncode(featureName), featureState)">
|
||||
<div class="summary">
|
||||
<div class="properties">
|
||||
<h3>
|
||||
@if ((showEnable && !feature.IsEnabled) || (showDisable && feature.IsEnabled)) {
|
||||
<label>
|
||||
<input type="checkbox" name="featureIds" value="@feature.Descriptor.Id"/>
|
||||
<div class="summary">
|
||||
<div class="properties">
|
||||
<h3>
|
||||
@if ((showEnable && !feature.IsEnabled) || (showDisable && feature.IsEnabled)) {
|
||||
<label>
|
||||
<input type="checkbox" name="featureIds" value="@feature.Descriptor.Id" />
|
||||
@featureName
|
||||
</label>
|
||||
}
|
||||
else {
|
||||
@featureName
|
||||
</label>
|
||||
}
|
||||
else {
|
||||
@featureName
|
||||
}
|
||||
</h3>
|
||||
<p class="description" title="@feature.Descriptor.Description">@feature.Descriptor.Description</p>
|
||||
@if (feature.Descriptor.Dependencies != null && feature.Descriptor.Dependencies.Any()) {
|
||||
<div class="dependencies">
|
||||
<h4>@T("Depends on:")</h4>
|
||||
@Html.UnorderedList(dependencies,
|
||||
}
|
||||
</h3>
|
||||
<p class="description" title="@feature.Descriptor.Description">@feature.Descriptor.Description</p>
|
||||
@if (feature.Descriptor.Dependencies != null && feature.Descriptor.Dependencies.Any()) {
|
||||
<div class="dependencies">
|
||||
<h4>@T("Depends on:")</h4>
|
||||
@Html.UnorderedList(dependencies,
|
||||
(s, i) => Html.Link(string.IsNullOrEmpty(s.Descriptor.Name) ? s.Descriptor.Id : s.Descriptor.Name, string.Format("#{0}", s.Descriptor.Id.AsFeatureId(n => T(n)))),
|
||||
"",
|
||||
"dependency",
|
||||
"")
|
||||
</div>}
|
||||
@if (missingDependencies.Any()) {
|
||||
<div class="missingdependencies">
|
||||
<h4>@T("Missing:")</h4>
|
||||
@Html.UnorderedList(missingDependencies, (s, i) => MvcHtmlString.Create(s), "", "missingdependency", "")
|
||||
</div>}
|
||||
</div>
|
||||
<div class="actions">
|
||||
@if (showDisable && feature.IsEnabled) {
|
||||
var dependantsJoined = string.Join(", ", feature.DependentFeatures.Select(f => f.Name));
|
||||
<a href="#" data-feature-id="@feature.Descriptor.Id" data-feature-action="@FeaturesBulkAction.Disable" data-feature-force="true" data-feature-dependants="@dependantsJoined">@T("Disable")</a>
|
||||
}
|
||||
</div>}
|
||||
@if (missingDependencies.Any()) {
|
||||
<div class="missingdependencies">
|
||||
<h4>@T("Missing:")</h4>
|
||||
@Html.UnorderedList(missingDependencies, (s, i) => MvcHtmlString.Create(s), "", "missingdependency", "")
|
||||
</div>}
|
||||
</div>
|
||||
<div class="actions">
|
||||
@if (showDisable && feature.IsEnabled) {
|
||||
var dependantsJoined = string.Join(", ", feature.DependentFeatures.Select(f => f.Name));
|
||||
<a href="#" data-feature-id="@feature.Descriptor.Id" data-feature-action="@FeaturesBulkAction.Disable" data-feature-force="true" data-feature-dependants="@dependantsJoined">@T("Disable")</a>
|
||||
}
|
||||
|
||||
@if (showEnable && !feature.IsEnabled) {
|
||||
<a href="#" data-feature-id="@feature.Descriptor.Id" data-feature-action="@FeaturesBulkAction.Enable" data-feature-force="true">@T("Enable")</a>
|
||||
}
|
||||
@if (showEnable && !feature.IsEnabled) {
|
||||
<a href="#" data-feature-id="@feature.Descriptor.Id" data-feature-action="@FeaturesBulkAction.Enable" data-feature-force="true">@T("Enable")</a>
|
||||
}
|
||||
|
||||
@if (feature.NeedsUpdate) {
|
||||
<a href="#" data-feature-id="@feature.Descriptor.Id" data-feature-action="@FeaturesBulkAction.Update" data-feature-force="false">@T("Update")</a>
|
||||
}
|
||||
@if (feature.NeedsUpdate) {
|
||||
<a href="#" data-feature-id="@feature.Descriptor.Id" data-feature-action="@FeaturesBulkAction.Update" data-feature-force="false">@T("Update")</a>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</li>}
|
||||
}
|
||||
</ul>
|
||||
</li>}
|
||||
}</ul>
|
||||
</li>}
|
||||
}</ul>}
|
||||
}
|
||||
</ul>}
|
||||
|
||||
using (Script.Foot()) {
|
||||
<script type="text/javascript">
|
||||
|
Reference in New Issue
Block a user