Files
Orchard/src/Orchard.Web/Modules/Orchard.MultiTenancy/Controllers/AdminController.cs
Andre Rodrigues a8a48ab4e1 #17284: Exceptions should log errors
--HG--
branch : dev
2011-02-08 11:22:47 -08:00

168 lines
7.0 KiB
C#

using System;
using System.Linq;
using System.Web.Mvc;
using Orchard.Environment.Configuration;
using Orchard.Localization;
using Orchard.Logging;
using Orchard.MultiTenancy.Services;
using Orchard.MultiTenancy.ViewModels;
using Orchard.Security;
using Orchard.UI.Notify;
using Orchard.Utility.Extensions;
namespace Orchard.MultiTenancy.Controllers {
[ValidateInput(false)]
public class AdminController : Controller {
private readonly ITenantService _tenantService;
private readonly ShellSettings _thisShellSettings;
public AdminController(ITenantService tenantService, IOrchardServices orchardServices, ShellSettings shellSettings) {
_tenantService = tenantService;
_thisShellSettings = shellSettings;
Services = orchardServices;
T = NullLocalizer.Instance;
Logger = NullLogger.Instance;
}
public Localizer T { get; set; }
public IOrchardServices Services { get; set; }
public ILogger Logger { get; set; }
public ActionResult Index() {
return View(new TenantsIndexViewModel { TenantSettings = _tenantService.GetTenants() });
}
public ActionResult Add() {
if (!Services.Authorizer.Authorize(StandardPermissions.SiteOwner, T("Cannot create tenant")))
return new HttpUnauthorizedResult();
if ( !EnsureDefaultTenant() )
return new HttpUnauthorizedResult();
return View(new TenantAddViewModel());
}
[HttpPost, ActionName("Add")]
public ActionResult AddPOST(TenantAddViewModel viewModel) {
try {
if (!Services.Authorizer.Authorize(StandardPermissions.SiteOwner, T("Couldn't create tenant")))
return new HttpUnauthorizedResult();
if ( !EnsureDefaultTenant() )
return new HttpUnauthorizedResult();
_tenantService.CreateTenant(
new ShellSettings {
Name = viewModel.Name,
RequestUrlHost = viewModel.RequestUrlHost,
RequestUrlPrefix = viewModel.RequestUrlPrefix,
DataProvider = viewModel.DataProvider,
DataConnectionString = viewModel.DatabaseConnectionString,
DataTablePrefix = viewModel.DatabaseTablePrefix,
State = new TenantState("Uninitialized")
});
return RedirectToAction("Index");
} catch (Exception exception) {
this.Error(exception, T("Creating Tenant failed: {0}", exception.Message), Logger, Services.Notifier);
return View(viewModel);
}
}
public ActionResult Edit(string name) {
if (!Services.Authorizer.Authorize(StandardPermissions.SiteOwner, T("Cannot edit tenant")))
return new HttpUnauthorizedResult();
if ( !EnsureDefaultTenant() )
return new HttpUnauthorizedResult();
var tenant = _tenantService.GetTenants().FirstOrDefault(ss => ss.Name == name);
if (tenant == null)
return HttpNotFound();
return View(new TenantEditViewModel {
Name = tenant.Name,
RequestUrlHost = tenant.RequestUrlHost,
RequestUrlPrefix = tenant.RequestUrlPrefix,
DataProvider = tenant.DataProvider,
DatabaseConnectionString = tenant.DataConnectionString,
DatabaseTablePrefix = tenant.DataTablePrefix,
State = tenant.State
});
}
[HttpPost, ActionName("Edit")]
public ActionResult EditPost(TenantEditViewModel viewModel) {
try {
if (!Services.Authorizer.Authorize(StandardPermissions.SiteOwner, T("Couldn't edit tenant")))
return new HttpUnauthorizedResult();
if ( !EnsureDefaultTenant() )
return new HttpUnauthorizedResult();
var tenant = _tenantService.GetTenants().FirstOrDefault(ss => ss.Name == viewModel.Name);
if (tenant == null)
return HttpNotFound();
_tenantService.UpdateTenant(
new ShellSettings {
Name = tenant.Name,
RequestUrlHost = viewModel.RequestUrlHost,
RequestUrlPrefix = viewModel.RequestUrlPrefix,
DataProvider = viewModel.DataProvider,
DataConnectionString = viewModel.DatabaseConnectionString,
DataTablePrefix = viewModel.DatabaseTablePrefix,
State = tenant.State
});
return RedirectToAction("Index");
} catch (Exception exception) {
this.Error(exception, T("Failed to edit tenant: {0} ", exception.Message), Logger, Services.Notifier);
return View(viewModel);
}
}
[HttpPost]
public ActionResult Disable(string name) {
if (!Services.Authorizer.Authorize(StandardPermissions.SiteOwner, T("Couldn't disable tenant")))
return new HttpUnauthorizedResult();
if ( !EnsureDefaultTenant() )
return new HttpUnauthorizedResult();
var tenant = _tenantService.GetTenants().FirstOrDefault(ss => ss.Name == name);
if (tenant != null && tenant.Name != _thisShellSettings.Name) {
tenant.State.CurrentState = TenantState.State.Disabled;
_tenantService.UpdateTenant(tenant);
}
return RedirectToAction("Index");
}
[HttpPost]
public ActionResult Enable(string name) {
if (!Services.Authorizer.Authorize(StandardPermissions.SiteOwner, T("Couldn't enable tenant")))
return new HttpUnauthorizedResult();
if ( !EnsureDefaultTenant() )
return new HttpUnauthorizedResult();
var tenant = _tenantService.GetTenants().FirstOrDefault(ss => ss.Name == name);
if (tenant != null && tenant.Name != _thisShellSettings.Name) {
tenant.State.CurrentState = TenantState.State.Running;
_tenantService.UpdateTenant(tenant);
}
return RedirectToAction("Index");
}
private bool EnsureDefaultTenant() {
return _thisShellSettings.Name == ShellSettings.DefaultName;
}
}
}