private void UpdateVolume1(ImplementationGuide implementationGuide, IGSettingsManager igSettings, ImportImplementationGuide importImplementationGuide)
        {
            if (importImplementationGuide.Volume1 == null)
            {
                igSettings.SaveSetting(IGSettingsManager.SettingProperty.Volume1Html, string.Empty);
                this.RemoveVolume1Sections(implementationGuide);
                return;
            }

            if (importImplementationGuide.Volume1.Items.Count == 1 && importImplementationGuide.Volume1.Items.First() is string)
            {
                this.RemoveVolume1Sections(implementationGuide);
                igSettings.SaveSetting(IGSettingsManager.SettingProperty.Volume1Html, importImplementationGuide.Volume1.Items.First() as string);
            }
            else if (importImplementationGuide.Volume1.Items.Count > 0)
            {
                igSettings.SaveSetting(IGSettingsManager.SettingProperty.Volume1Html, string.Empty);

                foreach (ImportImplementationGuideSection importSection in importImplementationGuide.Volume1.Items)
                {
                    if (importSection.Heading == null)
                    {
                        throw new ArgumentException("All implementation guide sections must have a heading");
                    }

                    ImplementationGuideSection newSection = new ImplementationGuideSection()
                    {
                        Heading = importSection.Heading.Title,
                        Level   = importSection.Heading.Level,
                        Order   = implementationGuide.Sections.Count + 1
                    };
                    implementationGuide.Sections.Add(newSection);
                }
            }
        }
        protected override void ProcessRecord()
        {
            if (!string.IsNullOrEmpty(this.RootDirectory))
            {
                var igDirectories = Directory.GetDirectories(this.RootDirectory);

                foreach (var igDirectory in igDirectories)
                {
                    FileInfo igDirectoryInfo       = new FileInfo(igDirectory);
                    int      implementationGuideId = Int32.Parse(igDirectoryInfo.Name);

                    ImplementationGuide ig = this.tdb.ImplementationGuides.Single(y => y.Id == implementationGuideId);

                    var sectionFiles = Directory.GetFiles(igDirectory, "*.txt");

                    foreach (var sectionFile in sectionFiles)
                    {
                        FileInfo sectionFileInfo = new FileInfo(sectionFile);
                        string   sectionName     = sectionFileInfo.Name.Substring(0, sectionFileInfo.Name.Length - sectionFileInfo.Extension.Length);

                        ImplementationGuideSection section = ig.Sections.Single(y => y.Heading.Trim().ToLower() == sectionName.Trim().ToLower());
                        section.Content = File.ReadAllText(sectionFile);

                        this.WriteVerbose("Updating implementation guide " + ig.Id + " section " + section.Id + " (" + section.Heading + ")");
                    }
                }

                this.tdb.SaveChanges();
            }
        }
        public ActionResult NewVersion(int implementationGuideId)
        {
            if (!CheckPoint.Instance.GrantEditImplementationGuide(implementationGuideId))
            {
                throw new AuthorizationException("You do not have permissions to edit this implementation guide!");
            }

            if (this.tdb.ImplementationGuides.Count(y => y.PreviousVersionImplementationGuideId == implementationGuideId) > 0)
            {
                throw new Exception("This implementation guide already has a new version.");
            }

            ImplementationGuide ig = this.tdb.ImplementationGuides.Single(y => y.Id == implementationGuideId);

            if (!ig.IsPublished())
            {
                throw new Exception("Cannot version an implementation guide that has not been published");
            }

            ImplementationGuide newIg = new ImplementationGuide()
            {
                Name = ig.Name,
                ImplementationGuideType = ig.ImplementationGuideType,
                Organization            = ig.Organization,
                PreviousVersionImplementationGuideId = ig.Id,
                PublishStatus     = PublishStatus.GetDraftStatus(this.tdb),
                Version           = ig.Version + 1,
                WebReadmeOverview = ig.WebReadmeOverview,
                WebDescription    = ig.WebDescription
            };

            // Copy permissions
            foreach (var cPermission in ig.Permissions)
            {
                ImplementationGuidePermission newPermission = new ImplementationGuidePermission()
                {
                    GroupId    = cPermission.GroupId,
                    UserId     = cPermission.UserId,
                    Type       = cPermission.Type,
                    Permission = cPermission.Permission
                };
                newIg.Permissions.Add(newPermission);
            }

            // Copy settings
            foreach (var cSetting in ig.Settings)
            {
                ImplementationGuideSetting newSetting = new ImplementationGuideSetting()
                {
                    PropertyName  = cSetting.PropertyName,
                    PropertyValue = cSetting.PropertyValue
                };
                newIg.Settings.Add(newSetting);
            }

            // Copy IG Template Types
            foreach (var cTemplateType in ig.TemplateTypes)
            {
                ImplementationGuideTemplateType newTemplateType = new ImplementationGuideTemplateType()
                {
                    TemplateTypeId = cTemplateType.TemplateTypeId,
                    Name           = cTemplateType.Name,
                    DetailsText    = cTemplateType.DetailsText
                };
                newIg.TemplateTypes.Add(newTemplateType);
            }

            // Copy volume 1
            foreach (var cSection in ig.Sections)
            {
                var newSection = new ImplementationGuideSection()
                {
                    Content = cSection.Content,
                    Heading = cSection.Heading,
                    Level   = cSection.Level,
                    Order   = cSection.Order
                };
                newIg.Sections.Add(newSection);
            }

            this.tdb.SaveChanges();

            IGSettingsManager igSettings    = new IGSettingsManager(this.tdb, implementationGuideId);
            IGSettingsManager newIgSettings = new IGSettingsManager(this.tdb, newIg.Id);

            var cardinalityAtLeastOne            = igSettings.GetSetting(IGSettingsManager.SettingProperty.CardinalityAtLeastOne);
            var cardinalityOneToOne              = igSettings.GetSetting(IGSettingsManager.SettingProperty.CardinalityOneToOne);
            var cardinalityZero                  = igSettings.GetSetting(IGSettingsManager.SettingProperty.CardinalityZero);
            var cardinalityZeroOrMore            = igSettings.GetSetting(IGSettingsManager.SettingProperty.CardinalityZeroOrMore);
            var cardinalityZeroToOne             = igSettings.GetSetting(IGSettingsManager.SettingProperty.CardinalityZeroToOne);
            var categories                       = igSettings.GetSetting(IGSettingsManager.SettingProperty.Categories);
            var useConsolidationConstraintFormat = igSettings.GetBoolSetting(IGSettingsManager.SettingProperty.UseConsolidatedConstraintFormat);
            var volume1Html                      = igSettings.GetSetting(IGSettingsManager.SettingProperty.Volume1Html);

            if (!string.IsNullOrEmpty(cardinalityAtLeastOne))
            {
                newIgSettings.SaveSetting(IGSettingsManager.SettingProperty.CardinalityAtLeastOne, cardinalityAtLeastOne);
            }

            if (!string.IsNullOrEmpty(cardinalityOneToOne))
            {
                newIgSettings.SaveSetting(IGSettingsManager.SettingProperty.CardinalityZero, cardinalityZero);
            }

            if (!string.IsNullOrEmpty(cardinalityZeroOrMore))
            {
                newIgSettings.SaveSetting(IGSettingsManager.SettingProperty.CardinalityZeroOrMore, cardinalityZeroOrMore);
            }

            if (!string.IsNullOrEmpty(cardinalityZeroToOne))
            {
                newIgSettings.SaveSetting(IGSettingsManager.SettingProperty.CardinalityZeroToOne, cardinalityZeroToOne);
            }

            if (!string.IsNullOrEmpty(categories))
            {
                newIgSettings.SaveSetting(IGSettingsManager.SettingProperty.Categories, categories);
            }

            if (!string.IsNullOrEmpty(volume1Html))
            {
                newIgSettings.SaveSetting(IGSettingsManager.SettingProperty.Volume1Html, volume1Html);
            }

            newIgSettings.SaveBoolSetting(IGSettingsManager.SettingProperty.UseConsolidatedConstraintFormat, useConsolidationConstraintFormat);

            return(Json(new { ImplementationGuideId = newIg.Id }));
        }