mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-21 19:34:40 +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;
|
|
||||||
using Orchard.Environment.Extensions.Models;
|
|
||||||
using Orchard.Localization;
|
using Orchard.Localization;
|
||||||
using Orchard.Packaging.Services;
|
|
||||||
using Orchard.UI.Navigation;
|
using Orchard.UI.Navigation;
|
||||||
using Orchard.Security;
|
using Orchard.Security;
|
||||||
|
|
||||||
@@ -10,67 +7,28 @@ namespace Orchard.Packaging {
|
|||||||
[OrchardFeature("Gallery")]
|
[OrchardFeature("Gallery")]
|
||||||
public class AdminMenu : INavigationProvider {
|
public class AdminMenu : INavigationProvider {
|
||||||
public Localizer T { get; set; }
|
public Localizer T { get; set; }
|
||||||
public string MenuName { get { return "admin"; } }
|
|
||||||
|
|
||||||
private readonly IBackgroundPackageUpdateStatus _backgroundPackageUpdateStatus;
|
public string MenuName {
|
||||||
|
get { return "admin"; }
|
||||||
public AdminMenu(IBackgroundPackageUpdateStatus backgroundPackageUpdateStatus) {
|
|
||||||
_backgroundPackageUpdateStatus = backgroundPackageUpdateStatus;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public AdminMenu() {}
|
|
||||||
|
|
||||||
public void GetNavigation(NavigationBuilder builder) {
|
public void GetNavigation(NavigationBuilder builder) {
|
||||||
builder.Add(T("Themes"), menu => menu
|
builder
|
||||||
.Add(T("Gallery"), "1", item => item.Action("Themes", "Gallery", new { area = "Orchard.Packaging" })
|
.Add(T("Modules"), menu => menu
|
||||||
.Permission(StandardPermissions.SiteOwner).LocalNav()));
|
.Add(T("Gallery"), "3", item => Describe(item, "Modules", "Gallery", true))
|
||||||
|
.Add(T("Upload"), "9", item => Describe(item, "AddModule", "PackagingServices", true)))
|
||||||
builder.Add(T("Modules"), menu => menu
|
.Add(T("Themes"), menu => menu
|
||||||
.Add(T("Gallery"), "2", item => item.Action("Modules", "Gallery", new { area = "Orchard.Packaging" })
|
.Add(T("Gallery"), "3", item => Describe(item, "Themes", "Gallery", true))
|
||||||
.Permission(StandardPermissions.SiteOwner).LocalNav()));
|
.Add(T("Upload"), "9", item => Describe(item, "AddTheme", "PackagingServices", true)))
|
||||||
|
.Add(T("Settings"), menu => menu
|
||||||
builder.Add(T("Settings"), menu => menu
|
.Add(T("Gallery"), "1", item => Describe(item, "Sources", "Gallery", false)));
|
||||||
.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()));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private int GetUpdateCount(string extensionType) {
|
static NavigationItemBuilder Describe(NavigationItemBuilder item, string actionName, string controllerName, bool localNav) {
|
||||||
try {
|
item = item.Action(actionName, controllerName, new { area = "Orchard.Packaging" }).Permission(StandardPermissions.SiteOwner);
|
||||||
// Admin menu should never block, so simply return the result from the background task
|
if (localNav)
|
||||||
return _backgroundPackageUpdateStatus.Value == null ?
|
item = item.LocalNav();
|
||||||
0 :
|
return item;
|
||||||
_backgroundPackageUpdateStatus.Value.Entries.Where(updatePackageEntry =>
|
|
||||||
updatePackageEntry.NewVersionToInstall != null &&
|
|
||||||
updatePackageEntry.ExtensionsDescriptor.ExtensionType.Equals(extensionType)).Count();
|
|
||||||
} catch {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -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>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="AdminMenu.cs" />
|
<Compile Include="AdminMenu.cs" />
|
||||||
|
<Compile Include="AdminMenuGalleryUpdates.cs" />
|
||||||
<Compile Include="Commands\PackagingCommands.cs" />
|
<Compile Include="Commands\PackagingCommands.cs" />
|
||||||
<Compile Include="Controllers\GalleryUpdatesController.cs" />
|
<Compile Include="Controllers\GalleryUpdatesController.cs" />
|
||||||
<Compile Include="Controllers\PackagingServicesController.cs" />
|
<Compile Include="Controllers\PackagingServicesController.cs" />
|
||||||
|
Reference in New Issue
Block a user