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:
Louis DeJardin
2011-02-24 16:46:50 -08:00
parent 39bb7a3357
commit 6456a30859
3 changed files with 76 additions and 59 deletions

View File

@@ -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;
}
}
}

View File

@@ -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;
}
}
}

View File

@@ -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" />