#18380: Fixing content type deletiong

Work Item: 18380

--HG--
branch : 1.x
This commit is contained in:
Sebastien Ros
2012-01-25 16:37:25 -08:00
parent b26199832c
commit 13b976a79d
3 changed files with 35 additions and 12 deletions

View File

@@ -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");

View File

@@ -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<ContentFieldInfo> GetFields() {

View File

@@ -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);