From 13b976a79d4e56a7b20fe6d36e8f864d6b92a992 Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Wed, 25 Jan 2012 16:37:25 -0800 Subject: [PATCH] #18380: Fixing content type deletiong Work Item: 18380 --HG-- branch : 1.x --- .../Controllers/AdminController.cs | 11 ++---- .../Services/ContentDefinitionService.cs | 34 +++++++++++++++++-- .../Services/IContentDefinitionService.cs | 2 +- 3 files changed, 35 insertions(+), 12 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.ContentTypes/Controllers/AdminController.cs b/src/Orchard.Web/Modules/Orchard.ContentTypes/Controllers/AdminController.cs index 9dc1a6f85..2c8e5d07a 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentTypes/Controllers/AdminController.cs +++ b/src/Orchard.Web/Modules/Orchard.ContentTypes/Controllers/AdminController.cs @@ -159,13 +159,7 @@ namespace Orchard.ContentTypes.Controllers { if (typeViewModel == null) return HttpNotFound(); - _contentDefinitionManager.DeleteTypeDefinition(id); - - // delete all content items (but keep versions) - var contentItems = Services.ContentManager.Query(id).List(); - foreach (var contentItem in contentItems) { - Services.ContentManager.Remove(contentItem); - } + _contentDefinitionService.RemoveType(id, true); Services.Notifier.Information(T("\"{0}\" has been removed.", typeViewModel.DisplayName)); @@ -348,7 +342,8 @@ namespace Orchard.ContentTypes.Controllers { if (partViewModel == null) return HttpNotFound(); - _contentDefinitionManager.DeletePartDefinition(id); + _contentDefinitionService.RemovePart(id); + Services.Notifier.Information(T("\"{0}\" has been removed.", partViewModel.DisplayName)); return RedirectToAction("ListParts"); diff --git a/src/Orchard.Web/Modules/Orchard.ContentTypes/Services/ContentDefinitionService.cs b/src/Orchard.Web/Modules/Orchard.ContentTypes/Services/ContentDefinitionService.cs index 2904c7ce9..8db21adb0 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentTypes/Services/ContentDefinitionService.cs +++ b/src/Orchard.Web/Modules/Orchard.ContentTypes/Services/ContentDefinitionService.cs @@ -145,8 +145,30 @@ namespace Orchard.ContentTypes.Services { }); } - public void RemoveType(string name) { - throw new NotImplementedException(); + public void RemoveType(string name, bool deleteContent) { + + // first remove all attached parts + var typeDefinition = _contentDefinitionManager.GetTypeDefinition(name); + var partDefinitions = typeDefinition.Parts.ToArray(); + foreach (var partDefinition in partDefinitions) { + RemovePartFromType(partDefinition.PartDefinition.Name, name); + + // delete the part if it's its own part + if(partDefinition.PartDefinition.Name == name) { + RemovePart(name); + } + } + + _contentDefinitionManager.DeleteTypeDefinition(name); + + // delete all content items (but keep versions) + if (deleteContent) { + var contentItems = Services.ContentManager.Query(name).List(); + foreach (var contentItem in contentItems) { + Services.ContentManager.Remove(contentItem); + } + } + } public void AddPartToType(string partName, string typeName) { @@ -211,7 +233,13 @@ namespace Orchard.ContentTypes.Services { } public void RemovePart(string name) { - throw new NotImplementedException(); + var partDefinition = _contentDefinitionManager.GetPartDefinition(name); + var fieldDefinitions = partDefinition.Fields.ToArray(); + foreach(var fieldDefinition in fieldDefinitions) { + RemoveFieldFromPart(fieldDefinition.Name, name); + } + + _contentDefinitionManager.DeletePartDefinition(name); } public IEnumerable GetFields() { diff --git a/src/Orchard.Web/Modules/Orchard.ContentTypes/Services/IContentDefinitionService.cs b/src/Orchard.Web/Modules/Orchard.ContentTypes/Services/IContentDefinitionService.cs index fb734eceb..a7ee5136d 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentTypes/Services/IContentDefinitionService.cs +++ b/src/Orchard.Web/Modules/Orchard.ContentTypes/Services/IContentDefinitionService.cs @@ -10,7 +10,7 @@ namespace Orchard.ContentTypes.Services { EditTypeViewModel GetType(string name); ContentTypeDefinition AddType(string name, string displayName); void AlterType(EditTypeViewModel typeViewModel, IUpdateModel updater); - void RemoveType(string name); + void RemoveType(string name, bool deleteContent); void AddPartToType(string partName, string typeName); void RemovePartFromType(string partName, string typeName); string GenerateContentTypeNameFromDisplayName(string displayName);