mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2026-02-09 09:16:41 +08:00
Added full command line support for tenant management operations.
This commit is contained in:
@@ -14,12 +14,23 @@ namespace Orchard.MultiTenancy.Commands {
|
||||
}
|
||||
|
||||
[OrchardSwitch]
|
||||
public string Host { get; set; }
|
||||
|
||||
public string DataProvider { get; set; }
|
||||
[OrchardSwitch]
|
||||
public string DataConnectionString { get; set; }
|
||||
[OrchardSwitch]
|
||||
public string DataTablePrefix { get; set; }
|
||||
[OrchardSwitch]
|
||||
public string UrlHost { get; set; }
|
||||
[OrchardSwitch]
|
||||
public string UrlPrefix { get; set; }
|
||||
[OrchardSwitch]
|
||||
public string Themes { get; set; }
|
||||
[OrchardSwitch]
|
||||
public string Modules { get; set; }
|
||||
[OrchardSwitch]
|
||||
public bool DropDatabaseTables { get; set; }
|
||||
|
||||
[CommandHelp("tenant list\r\n\t" + "Display current tenants of a site")]
|
||||
[CommandHelp("tenant list\r\n\t" + "Display current tenants of the site.")]
|
||||
[CommandName("tenant list")]
|
||||
public void List() {
|
||||
Context.Output.WriteLine(T("List of tenants"));
|
||||
@@ -28,42 +39,23 @@ namespace Orchard.MultiTenancy.Commands {
|
||||
var tenants = _tenantService.GetTenants();
|
||||
foreach (var tenant in tenants) {
|
||||
Context.Output.WriteLine(T("Name: ") + tenant.Name);
|
||||
Context.Output.WriteLine(T("Provider: ") + tenant.DataProvider);
|
||||
Context.Output.WriteLine(T("ConnectionString: ") + tenant.DataConnectionString);
|
||||
Context.Output.WriteLine(T("Data Table Prefix: ") + tenant.DataTablePrefix);
|
||||
Context.Output.WriteLine(T("Request Url Host: ") + tenant.RequestUrlHost);
|
||||
Context.Output.WriteLine(T("Request Url Prefix: ") + tenant.RequestUrlPrefix);
|
||||
Context.Output.WriteLine(T("State: ") + tenant.State.ToString());
|
||||
Context.Output.WriteLine(T("Data provider: ") + tenant.DataProvider);
|
||||
Context.Output.WriteLine(T("Connection string: ") + tenant.DataConnectionString);
|
||||
Context.Output.WriteLine(T("Data table prefix: ") + tenant.DataTablePrefix);
|
||||
Context.Output.WriteLine(T("Request URL host: ") + tenant.RequestUrlHost);
|
||||
Context.Output.WriteLine(T("Request URL prefix: ") + tenant.RequestUrlPrefix);
|
||||
Context.Output.WriteLine(T("Encryption algorithm: ") + tenant.EncryptionAlgorithm);
|
||||
Context.Output.WriteLine(T("Encryption key: ") + tenant.EncryptionKey);
|
||||
Context.Output.WriteLine(T("Hash algorithm: ") + tenant.HashAlgorithm);
|
||||
Context.Output.WriteLine(T("Hash key: ") + tenant.HashKey);
|
||||
Context.Output.WriteLine(T("Themes: ") + String.Join(";", tenant.Themes));
|
||||
Context.Output.WriteLine(T("Modules: ") + String.Join(";", tenant.Modules));
|
||||
Context.Output.WriteLine(T("---------------------------"));
|
||||
}
|
||||
}
|
||||
|
||||
[CommandHelp("tenant add <tenantName> /Host:<hostname> /UrlPrefix:<url prefix>\r\n\t" +
|
||||
"Create new tenant named <tenantName> on the site")]
|
||||
[CommandName("tenant add")]
|
||||
[OrchardSwitches("Host,UrlPrefix")]
|
||||
public void Create(string tenantName) {
|
||||
Context.Output.WriteLine(T("Creating tenant"));
|
||||
|
||||
if (string.IsNullOrWhiteSpace(tenantName) || !Regex.IsMatch(tenantName, @"^\w+$")) {
|
||||
Context.Output.WriteLine(T("Invalid tenant name. Must contain characters only and no spaces."));
|
||||
return;
|
||||
}
|
||||
if (_tenantService.GetTenants().Any(tenant => string.Equals(tenant.Name, tenantName, StringComparison.OrdinalIgnoreCase))) {
|
||||
Context.Output.WriteLine(T("Could not create tenant \"{0}\". A tenant with the same name already exists.", tenantName));
|
||||
return;
|
||||
}
|
||||
|
||||
_tenantService.CreateTenant(
|
||||
new ShellSettings {
|
||||
Name = tenantName,
|
||||
RequestUrlHost = Host,
|
||||
RequestUrlPrefix = UrlPrefix,
|
||||
State = TenantState.Uninitialized
|
||||
});
|
||||
}
|
||||
|
||||
[CommandHelp("tenant info <tenantName>\r\n\t" + "Display settings for a tenant")]
|
||||
[CommandHelp("tenant info <tenantName>\r\n\t" + "Display the current settings for a tenant.")]
|
||||
[CommandName("tenant info")]
|
||||
public void Info(string tenantName) {
|
||||
ShellSettings tenant = _tenantService.GetTenants().Where(x => x.Name == tenantName).FirstOrDefault();
|
||||
@@ -72,17 +64,143 @@ namespace Orchard.MultiTenancy.Commands {
|
||||
Context.Output.Write(T("Tenant: ") + tenantName + T(" was not found"));
|
||||
}
|
||||
else {
|
||||
Context.Output.WriteLine(T("Tenant Settings:"));
|
||||
Context.Output.WriteLine(T("Tenant settings:"));
|
||||
Context.Output.WriteLine(T("---------------------------"));
|
||||
Context.Output.WriteLine(T("Name: ") + tenant.Name);
|
||||
Context.Output.WriteLine(T("Provider: ") + tenant.DataProvider);
|
||||
Context.Output.WriteLine(T("ConnectionString: ") + tenant.DataConnectionString);
|
||||
Context.Output.WriteLine(T("Data Table Prefix: ") + tenant.DataTablePrefix);
|
||||
Context.Output.WriteLine(T("Request Url Host: ") + tenant.RequestUrlHost);
|
||||
Context.Output.WriteLine(T("Request Url Prefix: ") + tenant.RequestUrlPrefix);
|
||||
Context.Output.WriteLine(T("State: ") + tenant.State.ToString());
|
||||
Context.Output.WriteLine(T("Data provider: ") + tenant.DataProvider);
|
||||
Context.Output.WriteLine(T("Connection string: ") + tenant.DataConnectionString);
|
||||
Context.Output.WriteLine(T("Data table prefix: ") + tenant.DataTablePrefix);
|
||||
Context.Output.WriteLine(T("Request URL host: ") + tenant.RequestUrlHost);
|
||||
Context.Output.WriteLine(T("Request URL prefix: ") + tenant.RequestUrlPrefix);
|
||||
Context.Output.WriteLine(T("Encryption algorithm: ") + tenant.EncryptionAlgorithm);
|
||||
Context.Output.WriteLine(T("Encryption key: ") + tenant.EncryptionKey);
|
||||
Context.Output.WriteLine(T("Hash algorithm: ") + tenant.HashAlgorithm);
|
||||
Context.Output.WriteLine(T("Hash key: ") + tenant.HashKey);
|
||||
Context.Output.WriteLine(T("Themes: ") + String.Join(";", tenant.Themes));
|
||||
Context.Output.WriteLine(T("Modules: ") + String.Join(";", tenant.Modules));
|
||||
Context.Output.WriteLine(T("---------------------------"));
|
||||
}
|
||||
}
|
||||
|
||||
[CommandHelp("tenant add <tenantName> /DataProvider:<provider> /DataConnectionString:<connectionString> /DataTablePrefix:<prefix> /UrlHost:<hostname> /UrlPrefix:<prefix> /Themes:<themes> /Modules:<modules>\r\n\t" + "Create a new tenant named <tenantName> on the site.")]
|
||||
[CommandName("tenant add")]
|
||||
[OrchardSwitches("DataProvider,DataConnectionString,DataTablePrefix,UrlHost,UrlPrefix,Themes,Modules")]
|
||||
public void Create(string tenantName) {
|
||||
Context.Output.WriteLine(T("Creating tenant '{0}'...", tenantName));
|
||||
|
||||
if (string.IsNullOrWhiteSpace(tenantName) || !Regex.IsMatch(tenantName, @"^\w+$")) {
|
||||
Context.Output.WriteLine(T("Invalid tenant name. Must contain characters only and no spaces."));
|
||||
return;
|
||||
}
|
||||
if (_tenantService.GetTenants().Any(tenant => String.Equals(tenant.Name, tenantName, StringComparison.OrdinalIgnoreCase))) {
|
||||
Context.Output.WriteLine(T("Could not create tenant '{0}'. A tenant with the same name already exists.", tenantName));
|
||||
return;
|
||||
}
|
||||
|
||||
_tenantService.CreateTenant(
|
||||
new ShellSettings {
|
||||
Name = tenantName,
|
||||
State = TenantState.Uninitialized,
|
||||
DataProvider = DataProvider,
|
||||
DataConnectionString = DataConnectionString,
|
||||
DataTablePrefix = DataTablePrefix,
|
||||
RequestUrlHost = UrlHost,
|
||||
RequestUrlPrefix = UrlPrefix,
|
||||
Themes = Themes.Split(';'),
|
||||
Modules = Modules.Split(';')
|
||||
});
|
||||
}
|
||||
|
||||
[CommandHelp("tenant update <tenantName> /DataProvider:<provider> /DataConnectionString:<connectionString> /DataTablePrefix:<prefix> /UrlHost:<hostname> /UrlPrefix:<prefix> /Themes:<themes> /Modules:<modules>\r\n\t" + "Update the settings of the existing tenant <tenantName>.")]
|
||||
[CommandName("tenant update")]
|
||||
[OrchardSwitches("DataProvider,DataConnectionString,DataTablePrefix,UrlHost,UrlPrefix,Themes,Modules")]
|
||||
public void Edit(string tenantName) {
|
||||
Context.Output.WriteLine(T("Updating tenant '{0}'...", tenantName));
|
||||
|
||||
if (string.IsNullOrWhiteSpace(tenantName) || !Regex.IsMatch(tenantName, @"^\w+$")) {
|
||||
Context.Output.WriteLine(T("Invalid tenant name. Must contain characters only and no spaces."));
|
||||
return;
|
||||
}
|
||||
|
||||
var tenant = _tenantService.GetTenants().FirstOrDefault(t => String.Equals(t.Name, tenantName, StringComparison.OrdinalIgnoreCase));
|
||||
if (tenant == null) {
|
||||
Context.Output.WriteLine(T("Could not update tenant '{0}'. No tenant with that name exists.", tenantName));
|
||||
return;
|
||||
}
|
||||
|
||||
_tenantService.UpdateTenant(
|
||||
new ShellSettings {
|
||||
Name = tenant.Name,
|
||||
State = tenant.State,
|
||||
DataProvider = DataProvider ?? tenant.DataProvider,
|
||||
DataConnectionString = DataConnectionString ?? tenant.DataConnectionString,
|
||||
DataTablePrefix = DataTablePrefix ?? tenant.DataTablePrefix,
|
||||
RequestUrlHost = UrlHost ?? tenant.RequestUrlHost,
|
||||
RequestUrlPrefix = UrlPrefix ?? tenant.RequestUrlPrefix,
|
||||
Themes = Themes != null ? Themes.Split(';') : tenant.Themes,
|
||||
Modules = Modules != null ? Modules.Split(';') : tenant.Modules
|
||||
});
|
||||
}
|
||||
|
||||
[CommandHelp("tenant disable <tenantName>\r\n\t" + "Disable the tenant <tenantName>.")]
|
||||
[CommandName("tenant disable")]
|
||||
public void Disable(string tenantName) {
|
||||
Context.Output.WriteLine(T("Disabling tenant '{0}'...", tenantName));
|
||||
|
||||
if (string.IsNullOrWhiteSpace(tenantName) || !Regex.IsMatch(tenantName, @"^\w+$")) {
|
||||
Context.Output.WriteLine(T("Invalid tenant name. Must contain characters only and no spaces."));
|
||||
return;
|
||||
}
|
||||
|
||||
var tenant = _tenantService.GetTenants().FirstOrDefault(t => String.Equals(t.Name, tenantName, StringComparison.OrdinalIgnoreCase));
|
||||
if (tenant == null) {
|
||||
Context.Output.WriteLine(T("Could not disable tenant '{0}'. No tenant with that name exists.", tenantName));
|
||||
return;
|
||||
}
|
||||
|
||||
tenant.State = TenantState.Disabled;
|
||||
_tenantService.UpdateTenant(tenant);
|
||||
}
|
||||
|
||||
[CommandHelp("tenant enable <tenantName>\r\n\t" + "Enable the tenant <tenantName>.")]
|
||||
[CommandName("tenant enable")]
|
||||
public void Enable(string tenantName) {
|
||||
Context.Output.WriteLine(T("Enabling tenant '{0}'...", tenantName));
|
||||
|
||||
if (string.IsNullOrWhiteSpace(tenantName) || !Regex.IsMatch(tenantName, @"^\w+$")) {
|
||||
Context.Output.WriteLine(T("Invalid tenant name. Must contain characters only and no spaces."));
|
||||
return;
|
||||
}
|
||||
|
||||
var tenant = _tenantService.GetTenants().FirstOrDefault(t => String.Equals(t.Name, tenantName, StringComparison.OrdinalIgnoreCase));
|
||||
if (tenant == null) {
|
||||
Context.Output.WriteLine(T("Could not enable tenant '{0}'. No tenant with that name exists.", tenantName));
|
||||
return;
|
||||
}
|
||||
|
||||
tenant.State = TenantState.Running;
|
||||
_tenantService.UpdateTenant(tenant);
|
||||
}
|
||||
|
||||
[CommandHelp("tenant reset <tenantName> /DropDatabaseTables:<true|false>\r\n\t" + "Reset the tenant <tenantName>, optionally dropping its tables from the database.")]
|
||||
[CommandName("tenant reset")]
|
||||
[OrchardSwitches("DropDatabaseTables")]
|
||||
public void Reset(string tenantName) {
|
||||
Context.Output.WriteLine(T("Resetting tenant '{0}'...", tenantName));
|
||||
|
||||
if (string.IsNullOrWhiteSpace(tenantName) || !Regex.IsMatch(tenantName, @"^\w+$")) {
|
||||
Context.Output.WriteLine(T("Invalid tenant name. Must contain characters only and no spaces."));
|
||||
return;
|
||||
}
|
||||
|
||||
var tenant = _tenantService.GetTenants().FirstOrDefault(t => String.Equals(t.Name, tenantName, StringComparison.OrdinalIgnoreCase));
|
||||
if (tenant == null) {
|
||||
Context.Output.WriteLine(T("Could not reset tenant '{0}'. No tenant with that name exists.", tenantName));
|
||||
return;
|
||||
}
|
||||
|
||||
_tenantService.ResetTenant(tenant, DropDatabaseTables);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user