From 33da5617b765ec456fbd99fbfaad11471c41c586 Mon Sep 17 00:00:00 2001 From: Daniel Stolt Date: Thu, 23 Jul 2015 11:41:55 +0100 Subject: [PATCH] Added a /Force option to the tenant reset command. --- .../Orchard.MultiTenancy/Commands/TenantCommand.cs | 8 +++++--- .../Controllers/AdminController.cs | 2 +- .../Orchard.MultiTenancy/Services/ITenantService.cs | 3 ++- .../Orchard.MultiTenancy/Services/TenantService.cs | 10 +++++++--- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs index 78b6046d6..02d8b8bec 100644 --- a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs +++ b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs @@ -30,6 +30,8 @@ namespace Orchard.MultiTenancy.Commands { public string Modules { get; set; } [OrchardSwitch] public bool DropDatabaseTables { get; set; } + [OrchardSwitch] + public bool Force { get; set; } [CommandHelp("tenant list\r\n\t" + "Display current tenants of the site.")] [CommandName("tenant list")] @@ -178,9 +180,9 @@ namespace Orchard.MultiTenancy.Commands { _tenantService.UpdateTenant(tenant); } - [CommandHelp("tenant reset /DropDatabaseTables:\r\n\t" + "Reset the tenant to its uninitialized, optionally dropping its tables from the database.")] + [CommandHelp("tenant reset /DropDatabaseTables:true|false /Force:true|false\r\n\t" + "Reset the tenant to its uninitialized, optionally dropping its tables from the database.")] [CommandName("tenant reset")] - [OrchardSwitches("DropDatabaseTables")] + [OrchardSwitches("DropDatabaseTables,Force")] public void Reset(string tenantName) { Context.Output.WriteLine(T("Resetting tenant '{0}'...", tenantName)); @@ -190,7 +192,7 @@ namespace Orchard.MultiTenancy.Commands { return; } - _tenantService.ResetTenant(tenant, DropDatabaseTables); + _tenantService.ResetTenant(tenant, DropDatabaseTables, Force); } } } diff --git a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Controllers/AdminController.cs b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Controllers/AdminController.cs index fb172f67c..0977ff396 100644 --- a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Controllers/AdminController.cs +++ b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Controllers/AdminController.cs @@ -247,7 +247,7 @@ namespace Orchard.MultiTenancy.Controllers { } try { - _tenantService.ResetTenant(tenant, viewModel.DropDatabaseTables); + _tenantService.ResetTenant(tenant, viewModel.DropDatabaseTables, force: false); return RedirectToAction("Index"); } catch (Exception ex) { diff --git a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Services/ITenantService.cs b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Services/ITenantService.cs index 038b3372d..789b20718 100644 --- a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Services/ITenantService.cs +++ b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Services/ITenantService.cs @@ -26,7 +26,8 @@ namespace Orchard.MultiTenancy.Services { /// /// A ShellSettings object to identify the tenant to reset. /// A boolean indicated whether tenant database tables should be dropped also. - void ResetTenant(ShellSettings settings, bool dropDatabaseTables); + /// A boolean indicating whether reset should be performed even if the tenant state is TenantState.Running. + void ResetTenant(ShellSettings settings, bool dropDatabaseTables, bool force); /// /// Returns a list of all known database tables in a tenant. diff --git a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Services/TenantService.cs b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Services/TenantService.cs index 791b161a1..0705fd919 100644 --- a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Services/TenantService.cs +++ b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Services/TenantService.cs @@ -43,9 +43,13 @@ namespace Orchard.MultiTenancy.Services { _shellSettingsManager.SaveSettings(settings); } - public void ResetTenant(ShellSettings settings, bool dropDatabaseTables) { - if (settings.State != TenantState.Disabled) - throw new InvalidOperationException(String.Format("Tenant state is '{0}'; must be '{1}' to perform reset action.", settings.State, TenantState.Disabled)); + public void ResetTenant(ShellSettings settings, bool dropDatabaseTables, bool force) { + if (settings.State == TenantState.Uninitialized) + return; + if (settings.State == TenantState.Invalid) + throw new InvalidOperationException(String.Format("Tenant reset action cannot be performed when tenant state is '{0}'.", settings.State)); + if (!force && settings.State != TenantState.Disabled) + throw new InvalidOperationException(String.Format("Tenant state is '{0}'; must be '{1}' to perform reset action. The 'force' option can be used to override this.", settings.State, TenantState.Disabled)); ExecuteOnTenantScope(settings, environment => { ExecuteResetEventHandlers(environment);