mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-21 03:14:10 +08:00
Refactoring Packaging AdminMenu
--HG-- branch : dev extra : transplant_source : %EC%C1%8B%1E%F3%9F%7B4%87%84%3C%CBg%B4%86XK%9D%20%C8
This commit is contained in:
@@ -1,8 +1,5 @@
|
||||
using System.Linq;
|
||||
using Orchard.Environment.Extensions;
|
||||
using Orchard.Environment.Extensions.Models;
|
||||
using Orchard.Environment.Extensions;
|
||||
using Orchard.Localization;
|
||||
using Orchard.Packaging.Services;
|
||||
using Orchard.UI.Navigation;
|
||||
using Orchard.Security;
|
||||
|
||||
@@ -10,67 +7,28 @@ namespace Orchard.Packaging {
|
||||
[OrchardFeature("Gallery")]
|
||||
public class AdminMenu : INavigationProvider {
|
||||
public Localizer T { get; set; }
|
||||
public string MenuName { get { return "admin"; } }
|
||||
|
||||
private readonly IBackgroundPackageUpdateStatus _backgroundPackageUpdateStatus;
|
||||
|
||||
public AdminMenu(IBackgroundPackageUpdateStatus backgroundPackageUpdateStatus) {
|
||||
_backgroundPackageUpdateStatus = backgroundPackageUpdateStatus;
|
||||
public string MenuName {
|
||||
get { return "admin"; }
|
||||
}
|
||||
|
||||
public AdminMenu() {}
|
||||
|
||||
public void GetNavigation(NavigationBuilder builder) {
|
||||
builder.Add(T("Themes"), menu => menu
|
||||
.Add(T("Gallery"), "1", item => item.Action("Themes", "Gallery", new { area = "Orchard.Packaging" })
|
||||
.Permission(StandardPermissions.SiteOwner).LocalNav()));
|
||||
|
||||
builder.Add(T("Modules"), menu => menu
|
||||
.Add(T("Gallery"), "2", item => item.Action("Modules", "Gallery", new { area = "Orchard.Packaging" })
|
||||
.Permission(StandardPermissions.SiteOwner).LocalNav()));
|
||||
|
||||
builder.Add(T("Settings"), menu => menu
|
||||
.Add(T("Gallery"), "1", item => item.Action("Sources", "Gallery", new { area = "Orchard.Packaging" })
|
||||
.Permission(StandardPermissions.SiteOwner)));
|
||||
|
||||
builder.Add(T("Modules"), menu => menu
|
||||
.Add(T("Install"), "99", item => item.Action("AddModule", "PackagingServices", new { area = "Orchard.Packaging" })
|
||||
.Permission(StandardPermissions.SiteOwner).LocalNav()));
|
||||
|
||||
builder.Add(T("Themes"), menu => menu
|
||||
.Add(T("Install"), "99", item => item.Action("AddTheme", "PackagingServices", new { area = "Orchard.Packaging" })
|
||||
.Permission(StandardPermissions.SiteOwner).LocalNav()));
|
||||
|
||||
if (_backgroundPackageUpdateStatus != null) {
|
||||
// Only available if feature is enabled
|
||||
|
||||
int modulesUpdateCount = GetUpdateCount(DefaultExtensionTypes.Module);
|
||||
LocalizedString modulesCaption = (modulesUpdateCount == 0 ? T("Updates") : T("Updates ({0})", modulesUpdateCount));
|
||||
|
||||
int themesUpdateCount = GetUpdateCount(DefaultExtensionTypes.Theme);
|
||||
LocalizedString themesCaption = (themesUpdateCount == 0 ? T("Updates") : T("Updates ({0})", themesUpdateCount));
|
||||
|
||||
builder.Add(T("Modules"), "20", menu => menu
|
||||
.Add(modulesCaption, "30.0", item => item.Action("ModulesUpdates", "GalleryUpdates", new { area = "Orchard.Packaging" })
|
||||
.Permission(StandardPermissions.SiteOwner).LocalNav()));
|
||||
|
||||
builder.Add(T("Themes"), "25", menu => menu
|
||||
.Add(themesCaption, "30.0", item => item.Action("ThemesUpdates", "GalleryUpdates", new { area = "Orchard.Packaging" })
|
||||
.Permission(StandardPermissions.SiteOwner).LocalNav()));
|
||||
}
|
||||
builder
|
||||
.Add(T("Modules"), menu => menu
|
||||
.Add(T("Gallery"), "3", item => Describe(item, "Modules", "Gallery", true))
|
||||
.Add(T("Upload"), "9", item => Describe(item, "AddModule", "PackagingServices", true)))
|
||||
.Add(T("Themes"), menu => menu
|
||||
.Add(T("Gallery"), "3", item => Describe(item, "Themes", "Gallery", true))
|
||||
.Add(T("Upload"), "9", item => Describe(item, "AddTheme", "PackagingServices", true)))
|
||||
.Add(T("Settings"), menu => menu
|
||||
.Add(T("Gallery"), "1", item => Describe(item, "Sources", "Gallery", false)));
|
||||
}
|
||||
|
||||
private int GetUpdateCount(string extensionType) {
|
||||
try {
|
||||
// Admin menu should never block, so simply return the result from the background task
|
||||
return _backgroundPackageUpdateStatus.Value == null ?
|
||||
0 :
|
||||
_backgroundPackageUpdateStatus.Value.Entries.Where(updatePackageEntry =>
|
||||
updatePackageEntry.NewVersionToInstall != null &&
|
||||
updatePackageEntry.ExtensionsDescriptor.ExtensionType.Equals(extensionType)).Count();
|
||||
} catch {
|
||||
return 0;
|
||||
}
|
||||
static NavigationItemBuilder Describe(NavigationItemBuilder item, string actionName, string controllerName, bool localNav) {
|
||||
item = item.Action(actionName, controllerName, new { area = "Orchard.Packaging" }).Permission(StandardPermissions.SiteOwner);
|
||||
if (localNav)
|
||||
item = item.LocalNav();
|
||||
return item;
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,58 @@
|
||||
using System.Linq;
|
||||
using Orchard.Environment.Extensions;
|
||||
using Orchard.Environment.Extensions.Models;
|
||||
using Orchard.Localization;
|
||||
using Orchard.Mvc.Html;
|
||||
using Orchard.Packaging.Services;
|
||||
using Orchard.Security;
|
||||
using Orchard.UI.Navigation;
|
||||
|
||||
namespace Orchard.Packaging {
|
||||
[OrchardFeature("Gallery.Updates")]
|
||||
public class AdminMenuGalleryUpdates : INavigationProvider {
|
||||
public Localizer T { get; set; }
|
||||
|
||||
public string MenuName {
|
||||
get { return "admin"; }
|
||||
}
|
||||
|
||||
readonly IBackgroundPackageUpdateStatus _backgroundPackageUpdateStatus;
|
||||
|
||||
public AdminMenuGalleryUpdates(IBackgroundPackageUpdateStatus backgroundPackageUpdateStatus) {
|
||||
_backgroundPackageUpdateStatus = backgroundPackageUpdateStatus;
|
||||
}
|
||||
|
||||
public void GetNavigation(NavigationBuilder builder) {
|
||||
var modulesCaption = T.Plural("Updates", "Updates ({0})", GetUpdateCount(DefaultExtensionTypes.Module));
|
||||
var themesCaption = T.Plural("Updates", "Updates ({0})", GetUpdateCount(DefaultExtensionTypes.Theme));
|
||||
|
||||
builder
|
||||
.Add(T("Modules"), menu => menu
|
||||
.Add(modulesCaption, "8", item => Describe(item, "ModulesUpdates", "GalleryUpdates", true)))
|
||||
.Add(T("Themes"), menu => menu
|
||||
.Add(themesCaption, "8", item => Describe(item, "ThemesUpdates", "GalleryUpdates", true)));
|
||||
}
|
||||
|
||||
int GetUpdateCount(string extensionType) {
|
||||
try {
|
||||
// Admin menu should never block, so simply return the result from the background task
|
||||
if (_backgroundPackageUpdateStatus.Value == null)
|
||||
return 0;
|
||||
|
||||
return _backgroundPackageUpdateStatus.Value.Entries.Count(updatePackageEntry =>
|
||||
updatePackageEntry.NewVersionToInstall != null &&
|
||||
updatePackageEntry.ExtensionsDescriptor.ExtensionType == extensionType);
|
||||
}
|
||||
catch {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static NavigationItemBuilder Describe(NavigationItemBuilder item, string actionName, string controllerName, bool localNav) {
|
||||
item = item.Action(actionName, controllerName, new { area = "Orchard.Packaging" }).Permission(StandardPermissions.SiteOwner);
|
||||
if (localNav)
|
||||
item = item.LocalNav();
|
||||
return item;
|
||||
}
|
||||
}
|
||||
}
|
@@ -59,6 +59,7 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="AdminMenu.cs" />
|
||||
<Compile Include="AdminMenuGalleryUpdates.cs" />
|
||||
<Compile Include="Commands\PackagingCommands.cs" />
|
||||
<Compile Include="Controllers\GalleryUpdatesController.cs" />
|
||||
<Compile Include="Controllers\PackagingServicesController.cs" />
|
||||
|
Reference in New Issue
Block a user