From 00d7c970dea31cc4f00085b7964f20ca03844c3e Mon Sep 17 00:00:00 2001 From: Andre Rodrigues Date: Thu, 14 Oct 2010 16:24:05 -0700 Subject: [PATCH] Fix for #127 - Delete the layer "Homapage" cause the site crash (Build 2667) --HG-- branch : dev --- .../Orchard.Widgets/Controllers/AdminController.cs | 8 +++++++- .../Orchard.Widgets/Services/WidgetsService.cs | 13 ++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Widgets/Controllers/AdminController.cs b/src/Orchard.Web/Modules/Orchard.Widgets/Controllers/AdminController.cs index 54022bbd2..5560ea0fc 100644 --- a/src/Orchard.Web/Modules/Orchard.Widgets/Controllers/AdminController.cs +++ b/src/Orchard.Web/Modules/Orchard.Widgets/Controllers/AdminController.cs @@ -44,6 +44,12 @@ namespace Orchard.Widgets.Controllers { layers.First() : layers.FirstOrDefault(layer => layer.Id == id); + if (currentLayer == null) { + // Incorrect layer id passed + Services.Notifier.Error(T("Layer not found: {1}", id)); + return RedirectToAction("Index"); + } + currentLayerWidgets = _widgetsService.GetWidgets().Where(widgetPart => widgetPart.LayerPart.Id == currentLayer.Id); } else { @@ -237,7 +243,7 @@ namespace Orchard.Widgets.Controllers { Services.Notifier.Error(T("Removing Layer failed: {0}", exception.Message)); } - return RedirectToAction("Index", "Admin", new { id }); + return RedirectToAction("Index"); } public ActionResult EditWidget(int id) { diff --git a/src/Orchard.Web/Modules/Orchard.Widgets/Services/WidgetsService.cs b/src/Orchard.Web/Modules/Orchard.Widgets/Services/WidgetsService.cs index 386250c82..041ee4120 100644 --- a/src/Orchard.Web/Modules/Orchard.Widgets/Services/WidgetsService.cs +++ b/src/Orchard.Web/Modules/Orchard.Widgets/Services/WidgetsService.cs @@ -3,6 +3,7 @@ using System.Linq; using JetBrains.Annotations; using Orchard.ContentManagement; using Orchard.ContentManagement.Aspects; +using Orchard.Core.Common.Models; using Orchard.Themes; using Orchard.Widgets.Models; @@ -78,11 +79,21 @@ namespace Orchard.Widgets.Services { } public void DeleteLayer(int layerId) { + // Delete widgets in the layer + foreach (WidgetPart widgetPart in GetWidgets(layerId)) { + DeleteWidget(widgetPart.Id); + } + + // Delete actual layer _contentManager.Remove(GetLayer(layerId).ContentItem); } public WidgetPart GetWidget(int widgetId) { - return GetWidgets().FirstOrDefault(widgetPart => widgetPart.Id == widgetId); + return _contentManager + .Query() + .Where(widget => widget.Id == widgetId) + .List() + .FirstOrDefault(); } public WidgetPart CreateWidget(int layerId, string widgetType, string title, string position, string zone) {