From 5aad2aa8aba5dca6256ba45aebb53c56674269ef Mon Sep 17 00:00:00 2001 From: Nathan Heskew Date: Tue, 11 May 2010 16:14:18 -0700 Subject: [PATCH 1/3] More work on the MT UI - added suspend/resume actions --HG-- branch : dev --- .../Controllers/AdminController.cs | 31 +++++++++++++++++++ .../Services/ITenantService.cs | 1 + .../Services/TenantService.cs | 7 +++++ .../DisplayTemplates/ActionsForDisabled.ascx | 6 +++- .../DisplayTemplates/ActionsForRunning.ascx | 6 +++- .../Views/Admin/Index.ascx | 6 ++-- .../Themes/TheAdmin/Styles/site.css | 9 +++++- 7 files changed, 60 insertions(+), 6 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Controllers/AdminController.cs b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Controllers/AdminController.cs index 4f6a635ec..94e4a3829 100644 --- a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Controllers/AdminController.cs +++ b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Controllers/AdminController.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using System.Web.Mvc; using Orchard.Environment.Configuration; using Orchard.Localization; @@ -51,5 +52,35 @@ namespace Orchard.MultiTenancy.Controllers { return View(viewModel); } } + + [HttpPost] + public ActionResult Disable(ShellSettings shellSettings) { + if (!Services.Authorizer.Authorize(Permissions.ManageTenants, T("Couldn't disable tenant"))) + return new HttpUnauthorizedResult(); + + var tenant = _tenantService.GetTenants().FirstOrDefault(ss => ss.Name == shellSettings.Name); + + if (tenant != null) { + tenant.State.CurrentState = TenantState.State.Disabled; + _tenantService.UpdateTenant(tenant); + } + + return RedirectToAction("index"); + } + + [HttpPost] + public ActionResult Enable(ShellSettings shellSettings) { + if (!Services.Authorizer.Authorize(Permissions.ManageTenants, T("Couldn't enable tenant"))) + return new HttpUnauthorizedResult(); + + var tenant = _tenantService.GetTenants().FirstOrDefault(ss => ss.Name == shellSettings.Name); + + if (tenant != null) { + tenant.State.CurrentState = TenantState.State.Running; + _tenantService.UpdateTenant(tenant); + } + + return RedirectToAction("index"); + } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Services/ITenantService.cs b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Services/ITenantService.cs index d6fbb6862..f1f5ac508 100644 --- a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Services/ITenantService.cs +++ b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Services/ITenantService.cs @@ -5,5 +5,6 @@ namespace Orchard.MultiTenancy.Services { public interface ITenantService : IDependency { IEnumerable GetTenants(); void CreateTenant(ShellSettings settings); + void UpdateTenant(ShellSettings settings); } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Services/TenantService.cs b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Services/TenantService.cs index d838927e1..aa576c2b8 100644 --- a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Services/TenantService.cs +++ b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Services/TenantService.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Linq; using Orchard.Environment; using Orchard.Environment.Configuration; @@ -19,5 +20,11 @@ namespace Orchard.MultiTenancy.Services { public void CreateTenant(ShellSettings settings) { _shellSettingsManager.SaveSettings(settings); } + + public void UpdateTenant(ShellSettings settings) { + var tenant = GetTenants().FirstOrDefault(ss => ss.Name == settings.Name); + if (tenant != null) + _shellSettingsManager.SaveSettings(settings); + } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Views/Admin/DisplayTemplates/ActionsForDisabled.ascx b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Views/Admin/DisplayTemplates/ActionsForDisabled.ascx index ddf4a29bc..775f7c94b 100644 --- a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Views/Admin/DisplayTemplates/ActionsForDisabled.ascx +++ b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Views/Admin/DisplayTemplates/ActionsForDisabled.ascx @@ -1,3 +1,7 @@ <%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl" %> <%@ Import Namespace="Orchard.Environment.Configuration" %> -<%=Html.ActionLink(T("Resume").ToString(), "_enable", new {tenantName = Model.Name, area = "Orchard.MultiTenancy"}) %> \ No newline at end of file +<%@ Import Namespace="Orchard.Mvc.Html" %> +<% using(Html.BeginFormAntiForgeryPost(Url.Action("enable", new {tenantName = Model.Name, area = "Orchard.MultiTenancy"}), FormMethod.Post, new {@class = "inline link"})) { %> +<%=Html.HiddenFor(ss => ss.Name) %> +<% + } %> \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Views/Admin/DisplayTemplates/ActionsForRunning.ascx b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Views/Admin/DisplayTemplates/ActionsForRunning.ascx index b5892fc64..81d69cb91 100644 --- a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Views/Admin/DisplayTemplates/ActionsForRunning.ascx +++ b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Views/Admin/DisplayTemplates/ActionsForRunning.ascx @@ -1,3 +1,7 @@ <%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl" %> <%@ Import Namespace="Orchard.Environment.Configuration" %> -<%=Html.ActionLink(T("Suspend").ToString(), "_disable", new {tenantName = Model.Name, area = "Orchard.MultiTenancy"}) %> \ No newline at end of file +<%@ Import Namespace="Orchard.Mvc.Html" %> +<% using(Html.BeginFormAntiForgeryPost(Url.Action("disable", new {area = "Orchard.MultiTenancy"}), FormMethod.Post, new {@class = "inline link"})) { %> +<%=Html.HiddenFor(ss => ss.Name) %> +<% + } %> \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Views/Admin/Index.ascx b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Views/Admin/Index.ascx index a7d1a94a9..8f7b23fd1 100644 --- a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Views/Admin/Index.ascx +++ b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Views/Admin/Index.ascx @@ -18,12 +18,12 @@ diff --git a/src/Orchard.Web/Themes/TheAdmin/Styles/site.css b/src/Orchard.Web/Themes/TheAdmin/Styles/site.css index 09488b477..f0f2dd3ff 100644 --- a/src/Orchard.Web/Themes/TheAdmin/Styles/site.css +++ b/src/Orchard.Web/Themes/TheAdmin/Styles/site.css @@ -167,7 +167,6 @@ a:hover, a:active, a:focus { text-decoration:underline; } - /* Header - Branding and Login ----------------------------------------------------------*/ #header { @@ -469,6 +468,9 @@ button, .button, .button:link, .button:visited { text-align:center; padding:0 .8em .1em .8em; } +button { + padding-top:.08em; +} .primaryAction, .primaryAction:link, .primaryAction:visited { background:#4687ad; border:1px solid #8f8f8f; @@ -786,6 +788,11 @@ table.items, textarea, input.text, input.text-box, float:right; text-align:right; } +/*todo: (heskew) cleanup */ +.related .button { + font-size:1em; +} +/*end todo*/ .commentcount { line-height:2em; } From 89ffa5d5bfc2fa5dfd9439c0e9e0562247b2a5cc Mon Sep 17 00:00:00 2001 From: Nathan Heskew Date: Tue, 11 May 2010 16:21:00 -0700 Subject: [PATCH 2/3] Ensuring the current tenant (Default) cannot have its state changed --HG-- branch : dev --- .../Orchard.MultiTenancy/Controllers/AdminController.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Controllers/AdminController.cs b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Controllers/AdminController.cs index 94e4a3829..b6c91961e 100644 --- a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Controllers/AdminController.cs +++ b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Controllers/AdminController.cs @@ -11,9 +11,11 @@ namespace Orchard.MultiTenancy.Controllers { [ValidateInput(false)] public class AdminController : Controller { private readonly ITenantService _tenantService; + private readonly ShellSettings _thisShellSettings; - public AdminController(ITenantService tenantService, IOrchardServices orchardServices) { + public AdminController(ITenantService tenantService, IOrchardServices orchardServices, ShellSettings shellSettings) { _tenantService = tenantService; + _thisShellSettings = shellSettings; Services = orchardServices; T = NullLocalizer.Instance; } @@ -60,7 +62,7 @@ namespace Orchard.MultiTenancy.Controllers { var tenant = _tenantService.GetTenants().FirstOrDefault(ss => ss.Name == shellSettings.Name); - if (tenant != null) { + if (tenant != null && tenant.Name != _thisShellSettings.Name) { tenant.State.CurrentState = TenantState.State.Disabled; _tenantService.UpdateTenant(tenant); } @@ -75,7 +77,7 @@ namespace Orchard.MultiTenancy.Controllers { var tenant = _tenantService.GetTenants().FirstOrDefault(ss => ss.Name == shellSettings.Name); - if (tenant != null) { + if (tenant != null && tenant.Name != _thisShellSettings.Name) { tenant.State.CurrentState = TenantState.State.Running; _tenantService.UpdateTenant(tenant); } From 136452a7cd663800c2970e13ba68db99fa10953e Mon Sep 17 00:00:00 2001 From: Suha Can Date: Tue, 11 May 2010 16:22:50 -0700 Subject: [PATCH 3/3] - Renaming some event test cases. --HG-- branch : dev --- src/Orchard.Tests/Events/EventTests.cs | 32 +++++++++++++------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/Orchard.Tests/Events/EventTests.cs b/src/Orchard.Tests/Events/EventTests.cs index 2cbd7cf5e..1475d856a 100644 --- a/src/Orchard.Tests/Events/EventTests.cs +++ b/src/Orchard.Tests/Events/EventTests.cs @@ -63,7 +63,7 @@ namespace Orchard.Tests.Events { } [Test] - public void EventParametersAreCorrectlyPassedToMatchingMethod2() { + public void EventParametersAreCorrectlyPassedToExactlyMatchingMethod() { Assert.That(_eventHandler.Result, Is.EqualTo(0)); Dictionary arguments = new Dictionary(); arguments["a"] = 1000; @@ -74,7 +74,7 @@ namespace Orchard.Tests.Events { } [Test] - public void EventParametersAreCorrectlyPassedToMatchingMethod4() { + public void EventParametersAreCorrectlyPassedToBestMatchingMethodAndExtraParametersAreIgnored() { Assert.That(_eventHandler.Result, Is.EqualTo(0)); Dictionary arguments = new Dictionary(); arguments["a"] = 1000; @@ -86,7 +86,17 @@ namespace Orchard.Tests.Events { } [Test] - public void EventParametersAreCorrectlyPassedToMatchingMethod5() { + public void EventParametersAreCorrectlyPassedToBestMatchingMethodAndExtraParametersAreIgnored2() { + Assert.That(_eventHandler.Result, Is.EqualTo(0)); + Dictionary arguments = new Dictionary(); + arguments["a"] = 1000; + arguments["e"] = 1; + _eventBus.Notify("ITestEventHandler.Sum", arguments); + Assert.That(_eventHandler.Result, Is.EqualTo(3000)); + } + + [Test] + public void EventParametersAreCorrectlyPassedToExactlyMatchingMethodWhenThereIsOne() { Assert.That(_eventHandler.Result, Is.EqualTo(0)); Dictionary arguments = new Dictionary(); arguments["a"] = 1000; @@ -96,7 +106,7 @@ namespace Orchard.Tests.Events { } [Test] - public void EventParametersAreCorrectlyPassedToMatchingMethod6() { + public void EventParametersAreCorrectlyPassedToExactlyMatchingMethodWhenThereIsOne2() { Assert.That(_eventHandler.Result, Is.EqualTo(0)); Dictionary arguments = new Dictionary(); arguments["a"] = 1000; @@ -105,17 +115,7 @@ namespace Orchard.Tests.Events { } [Test] - public void EventParametersAreCorrectlyPassedToMatchingMethod7() { - Assert.That(_eventHandler.Result, Is.EqualTo(0)); - Dictionary arguments = new Dictionary(); - arguments["a"] = 1000; - arguments["e"] = 1; - _eventBus.Notify("ITestEventHandler.Sum", arguments); - Assert.That(_eventHandler.Result, Is.EqualTo(3000)); - } - - [Test] - public void EventParametersAreCorrectlyPassedToMatchingMethod8() { + public void EventHandlerWontBeCalledWhenNoParameterMatchExists() { Assert.That(_eventHandler.Result, Is.EqualTo(0)); Dictionary arguments = new Dictionary(); arguments["e"] = 1; @@ -124,7 +124,7 @@ namespace Orchard.Tests.Events { } [Test] - public void EventParametersAreCorrectlyPassedToMatchingMethod9() { + public void EventHandlerWontBeCalledWhenNoParameterMatchExists2() { Assert.That(_eventHandler.Result, Is.EqualTo(0)); Dictionary arguments = new Dictionary(); _eventBus.Notify("ITestEventHandler.Sum", arguments);