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
            });
        }
Esempio n. 2
0
        // <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;
                }
            }
        }