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); } } _contentDefinitionEventHandlers.ContentTypeRemoved(new ContentTypeRemovedContext { ContentTypeDefinition = typeDefinition }); }
// <RemoveContentDefinition> // <Types> // <Blog creatable = "true" > // <Body format="abodyformat"/> // </Blog> // </Types> // <Parts> // </Parts> // </RemoveContentDefinition> public override void Execute(RecipeExecutionContext context) { foreach (var metadataElement in context.RecipeStep.Step.Elements()) { Logger.Debug("Processing element '{0}'.", metadataElement.Name.LocalName); switch (metadataElement.Name.LocalName) { case "Types": foreach (var element in metadataElement.Elements()) { var typeName = XmlConvert.DecodeName(element.Name.LocalName); Logger.Information("Removing content type '{0}'.", typeName); try { _contentDefinitionManager.DeleteTypeDefinition(typeName); _contentDefinitonEventHandlers.ContentTypeRemoved(new ContentTypeRemovedContext { ContentTypeDefinition = _contentDefinitionManager.GetTypeDefinition(typeName) }); } catch (Exception ex) { Logger.Error(ex, "Error while removing content type '{0}'.", typeName); throw; } } break; case "Parts": foreach (var element in metadataElement.Elements()) { var partElement = element; var partName = XmlConvert.DecodeName(element.Name.LocalName); Logger.Information("Removing content part definition '{0}'.", partName); try { _contentDefinitionManager.DeletePartDefinition(partName); _contentDefinitonEventHandlers.ContentPartRemoved(new ContentPartRemovedContext { ContentPartDefinition = _contentDefinitionManager.GetPartDefinition(partName) }); } catch (Exception ex) { Logger.Error(ex, "Error while removing content part definition for '{0}'.", partName); throw; } } break; default: Logger.Warning("Unrecognized element '{0}' encountered; skipping", metadataElement.Name.LocalName); break; } } }