Esempio n. 1
0
        public static async Task <string> ToHtmlEmail(FileContent content, IProgress <string> progress)
        {
            if (content == null)
            {
                return(string.Empty);
            }

            var preprocessResults = BracketCodeCommon.ProcessCodesForEmail(content.BodyContent, progress);
            var bodyHtmlString    = ContentProcessing.ProcessContent(preprocessResults, content.BodyContentFormat);

            var tags = Tags.TagListTextLinkList(content);

            tags.Style("text-align", "center");

            var createdUpdated = $"<p style=\"text-align: center;\">{Tags.CreatedByAndUpdatedOnString(content)}</p>";

            var possibleDownloadLink = FileParts.DownloadLinkTag(content);

            possibleDownloadLink.Style("text-align", "center");

            var innerContent = HtmlEmail.ChildrenIntoTableCells(
                $"{await HtmlEmail.EmailSimpleTitle(content)}{bodyHtmlString}{possibleDownloadLink}{tags}{createdUpdated}{HtmlEmail.EmailSimpleFooter()}");

            var emailHtml = HtmlEmail.WrapInNestedCenteringTable(innerContent);

            return(emailHtml);
        }
Esempio n. 2
0
        public void ContentBracketCodeStringTwoIdenticalAndOneDifferentWithoutTextAllParse()
        {
            var testGuid         = Guid.NewGuid();
            var bracketCodeToken = "SpecialTestToken";
            var bracketCode      = $"{{{{{bracketCodeToken} {testGuid}; Text that doesn't matter}}}}";

            var testGuid02    = Guid.NewGuid();
            var displayText02 = "Display text Test";
            var bracketCode02 = $"{{{{{bracketCodeToken} {testGuid02}; text {displayText02};}}}}";

            var testString =
                $"This is a test{bracketCode}{bracketCode}of the bracket string.{Environment.NewLine} And another {bracketCode02} test.";

            var matches = BracketCodeCommon.ContentBracketCodeMatches(testString, bracketCodeToken);

            Assert.IsTrue(matches.Count == 3);
            Assert.AreEqual(testGuid02, matches[0].contentGuid);
            Assert.AreEqual(testGuid, matches[1].contentGuid);
            Assert.AreEqual(testGuid, matches[2].contentGuid);

            Assert.AreEqual(bracketCode02, matches[0].bracketCodeText);
            Assert.AreEqual(bracketCode, matches[1].bracketCodeText);
            Assert.AreEqual(bracketCode, matches[2].bracketCodeText);

            Assert.AreEqual(displayText02, matches[0].displayText);
            Assert.AreEqual(string.Empty, matches[1].displayText);
            Assert.AreEqual(string.Empty, matches[2].displayText);
        }
        public void WriteLocalHtml()
        {
            WriteRss();

            foreach (var loopPosts in IndexContent.Take(_numberOfContentItemsToDisplay))
            {
                if (BracketCodeCommon.ContainsSpatialBracketCodes(loopPosts) ||
                    loopPosts.GetType() == typeof(PointContentDto))
                {
                    IncludeSpatialScripts = true;
                }
            }

            var parser  = new HtmlParser();
            var htmlDoc = parser.ParseDocument(TransformText());

            var stringWriter = new StringWriter();

            htmlDoc.ToHtml(stringWriter, new PrettyMarkupFormatter());

            var htmlString = stringWriter.ToString();

            var htmlFileInfo =
                new FileInfo($@"{UserSettingsSingleton.CurrentSettings().LocalSiteRootDirectory}\index.html");

            if (htmlFileInfo.Exists)
            {
                htmlFileInfo.Delete();
                htmlFileInfo.Refresh();
            }

            FileManagement.WriteAllTextToFileAndLog(htmlFileInfo.FullName, htmlString);
        }
        public void BracketCodeContentIdsFindsAllMatchesInBackToBackBracketCodes()
        {
            var testString = @"
A Test Post for Ironwood Forest National Monument. From
Wikipedia:
> Ironwood Forest National Monument is located in the Sonoran Desert of Arizona. Created by Bill Clinton by Presidential Proclamation 7320 on June 9, 2000, the monument is managed by the Bureau of Land Management, an agency within the United States Department of the Interior. The monument covers 129,055 acres (52,227 ha),[2] of which 59,573 acres (24,108 ha) are non-federal and include private land holdings and Arizona State School Trust lands.

A significant concentration of ironwood (also known as desert ironwood, Olneya tesota) trees is found in the monument, along with two federally recognized endangered animal and plant species. More than 200 Hohokam and Paleo-Indian archaeological sites have been identified in the monument, dated between 600 and 1450.{{photo efe8caac-9d62-4456-af54-873c0d6a0dce; 2018 August Agua Blanca Ranch Sign at the Manville Road Entrance to the Ironwood Forest National Monument}}{{photo d1bc6caf-2155-45f8-ac35-6b811535de0d; 2020 June Disappearing into the Flower}}{{photo 11d4c9e7-bfa0-489d-8dc0-69e93e3384de; 2020 May A Quarry in Ironwood Forest National Monument}}{{photo 481f4177-329b-46ae-8f53-b9f742a3d227; 2020 May Ironwood Pod}}{{photo 8526996b-71b5-4d31-85a8-4267619884b5; 2017 May Ironwood Tree Against The Sky}}Basic information for Ironwood Forest National Monument
";
            var result     = BracketCodeCommon.BracketCodeContentIds(testString);

            Assert.AreEqual(5, result.Count);
        }
Esempio n. 5
0
        public void SpecialPageBracketCodeStringSingleWithoutTextParses()
        {
            var bracketCodeToken = "SpecialTestToken";
            var bracketCode      = $"{{{{{bracketCodeToken};}}}}";

            var testString = $"This is a test {bracketCode} of the bracket text";

            var matches = BracketCodeCommon.SpecialPageBracketCodeMatches(testString, bracketCodeToken);

            Assert.IsTrue(matches.Count == 1);
            Assert.AreEqual(bracketCode, matches.First().bracketCodeText);
            Assert.AreEqual(string.Empty, matches.First().displayText);
        }
Esempio n. 6
0
        public static async Task <string> ToHtmlEmail(PhotoContent content, IProgress <string> progress)
        {
            if (content == null)
            {
                return(string.Empty);
            }

            var mdBuilder = new StringBuilder();

            mdBuilder.AppendLine(BracketCodePhotos.Create(content));

            var detailsList = new List <string>
            {
                content.Aperture,
                content.ShutterSpeed,
                content.Iso?.ToString("F0"),
                content.Lens,
                content.FocalLength,
                content.CameraMake,
                content.CameraModel,
                content.License
            }.Where(x => !string.IsNullOrWhiteSpace(x)).ToList();

            mdBuilder.AppendLine($"<p style=\"text-align: center;\">Details: {string.Join(", ", detailsList)}</p>");

            var tags = Tags.TagListTextLinkList(content);

            tags.Style("text-align", "center");
            mdBuilder.AppendLine(tags.ToString());

            mdBuilder.AppendLine();

            if (!string.IsNullOrWhiteSpace(content.BodyContent))
            {
                mdBuilder.AppendLine(content.BodyContent);
            }

            mdBuilder.AppendLine();

            mdBuilder.AppendLine($"<p style=\"text-align: center;\">{Tags.CreatedByAndUpdatedOnString(content)}</p>");

            var preprocessResults = BracketCodeCommon.ProcessCodesForEmail(mdBuilder.ToString(), progress);
            var bodyHtmlString    = ContentProcessing.ProcessContent(preprocessResults, content.BodyContentFormat);

            var innerContent = HtmlEmail.ChildrenIntoTableCells(
                $"{await HtmlEmail.EmailSimpleTitle(content)}{bodyHtmlString}{HtmlEmail.EmailSimpleFooter()}");

            var emailHtml = HtmlEmail.WrapInNestedCenteringTable(innerContent);

            return(emailHtml);
        }
Esempio n. 7
0
        public void SpecialPageBracketCodeStringSingleWithTextCasingCheckParses()
        {
            var bracketCodeToken = "SpecialTestToken";
            var displayText      = "text that does matter";
            var bracketCode      = $"{{{{{bracketCodeToken}; Text {displayText};}}}}";

            var testString = $"This is a test text {bracketCode} of the bracket string";

            var matches = BracketCodeCommon.SpecialPageBracketCodeMatches(testString, bracketCodeToken);

            Assert.IsTrue(matches.Count == 1);
            Assert.AreEqual(bracketCode, matches.First().bracketCodeText);
            Assert.AreEqual(displayText, matches.First().displayText);
        }
Esempio n. 8
0
        public void ContentBracketCodeStringSingleWithoutTextParses()
        {
            var testGuid         = Guid.NewGuid();
            var bracketCodeToken = "SpecialTestToken";
            var bracketCode      = $"{{{{{bracketCodeToken} {testGuid}; Text that doesn't matter}}}}";

            var testString = $"This is a test {bracketCode} of the bracket text";

            var matches = BracketCodeCommon.ContentBracketCodeMatches(testString, bracketCodeToken);

            Assert.IsTrue(matches.Count == 1);
            Assert.AreEqual(testGuid, matches.First().contentGuid);
            Assert.AreEqual(bracketCode, matches.First().bracketCodeText);
            Assert.AreEqual(string.Empty, matches.First().displayText);
        }
Esempio n. 9
0
        public static HtmlTag ImageSourceNotesDivTag(ImageContent dbEntry, IProgress <string> progress = null)
        {
            if (string.IsNullOrWhiteSpace(dbEntry.BodyContent))
            {
                return(HtmlTag.Empty());
            }

            var sourceNotesContainer = new DivTag().AddClass("image-source-notes-container");
            var sourceNotes          = new DivTag().AddClass("image-source-notes-content").Encoded(false).Text(
                ContentProcessing.ProcessContent(BracketCodeCommon.ProcessCodesForSite($"Source: {dbEntry.BodyContent}", progress), ContentFormatEnum.MarkdigMarkdown01));

            sourceNotesContainer.Children.Add(sourceNotes);

            return(sourceNotesContainer);
        }
Esempio n. 10
0
        public void SpecialPageBracketCodeStringTwoIdenticalWithoutTextBothParse()
        {
            var bracketCodeToken = "SpecialTestToken";
            var bracketCode      = $"{{{{{bracketCodeToken};}}}}";

            var testString =
                $"This is a test{bracketCode}of the bracket string.{Environment.NewLine} And another text{bracketCode}.";

            var matches = BracketCodeCommon.SpecialPageBracketCodeMatches(testString, bracketCodeToken);

            Assert.IsTrue(matches.Count == 2);
            Assert.AreEqual(bracketCode, matches[0].bracketCodeText);
            Assert.AreEqual(bracketCode, matches[1].bracketCodeText);
            Assert.AreEqual(string.Empty, matches[0].displayText);
            Assert.AreEqual(string.Empty, matches[1].displayText);
        }
Esempio n. 11
0
        public void ContentBracketCodeStringTwoIdenticalWithoutTextBothParse()
        {
            var testGuid         = Guid.NewGuid();
            var bracketCodeToken = "SpecialTestToken";
            var bracketCode      = $"{{{{{bracketCodeToken} {testGuid}; Text that doesn't matter}}}}";

            var testString =
                $"This is a test{bracketCode}of the bracket string.{Environment.NewLine} And another text{bracketCode}.";

            var matches = BracketCodeCommon.ContentBracketCodeMatches(testString, bracketCodeToken);

            Assert.IsTrue(matches.Count == 2);
            Assert.AreEqual(testGuid, matches[0].contentGuid);
            Assert.AreEqual(testGuid, matches[1].contentGuid);
            Assert.AreEqual(bracketCode, matches[0].bracketCodeText);
            Assert.AreEqual(bracketCode, matches[1].bracketCodeText);
            Assert.AreEqual(string.Empty, matches[0].displayText);
            Assert.AreEqual(string.Empty, matches[1].displayText);
        }
        public void PhotoOrImageCodeFirstIdInContentFindsFirstPhoto()
        {
            var testString = @"
A Test Post for Ironwood Forest National Monument. From
Wikipedia:
> Ironwood Forest National Monument is located in the Sonoran Desert of Arizona. Created by Bill Clinton by Presidential Proclamation 7320 on June 9, 2000, the monument is managed by the Bureau of Land Management, an agency within the United States Department of the Interior. The monument covers 129,055 acres (52,227 ha),[2] of which 59,573 acres (24,108 ha) are non-federal and include private land holdings and Arizona State School Trust lands.

A significant concentration of ironwood (also known as desert ironwood, Olneya tesota) trees is found in the monument, along with two federally recognized endangered animal and plant species. More than 200 Hohokam and Paleo-Indian archaeological sites have been identified in the monument, dated between 600 and 1450.

{{photo be010d97-a2b1-4c88-97ac-c36ebbd3fad4; 2020 June Disappearing into the Flower}}
{{photo ce493d74-516c-4e7d-a51f-2db458a834e3; 2020 May Ironwood Pod}}
{{photo 32563d87-d002-4672-a27e-d0b31c2a6875; 2020 May A Quarry in Ironwood Forest National Monument}}
{{photo d45ef8f8-e376-4144-acef-164310ee85bc; 2017 May Ironwood Tree Against The Sky}}
{{photo 611a88cd-908b-45bc-ac3c-a904b0c7a9c7; 2018 August Agua Blanca Ranch Sign at the Manville Road Entrance to the Ironwood Forest National Monument}}Basic information for Ironwood Forest National Monument
";
            var result     = BracketCodeCommon.PhotoOrImageCodeFirstIdInContent(testString);

            Assert.AreEqual(Guid.Parse("be010d97-a2b1-4c88-97ac-c36ebbd3fad4"), result);
        }
Esempio n. 13
0
        public void MixedContentAndSpecialPagesBracketCodeParse()
        {
            var testGuid         = Guid.NewGuid();
            var bracketCodeToken = "SpecialTestToken";
            var bracketCode      = $"{{{{{bracketCodeToken} {testGuid}; Text that doesn't matter}}}}";

            var testGuid02    = Guid.NewGuid();
            var displayText02 = "Display text Test";
            var bracketCode02 = $"{{{{{bracketCodeToken} {testGuid02}; text {displayText02};}}}}";

            var pageBracketCodeToken01 = "SpecialTestToken";
            var pageDisplayText        = "text that does matter";
            var pageBracketCode01      = $"{{{{{pageBracketCodeToken01}; text {pageDisplayText};}}}}";

            var pageBracketCode02 = $"{{{{{pageBracketCodeToken01};}}}}";

            var testString =
                $"This is a test{bracketCode}{pageBracketCode02}{bracketCode}of the bracket string.{Environment.NewLine} And another {bracketCode02} test. {pageBracketCode01}";

            var contentMatches = BracketCodeCommon.ContentBracketCodeMatches(testString, bracketCodeToken);

            var pageMatches = BracketCodeCommon.SpecialPageBracketCodeMatches(testString, bracketCodeToken);

            Assert.IsTrue(contentMatches.Count == 3);
            Assert.AreEqual(testGuid02, contentMatches[0].contentGuid);
            Assert.AreEqual(testGuid, contentMatches[1].contentGuid);
            Assert.AreEqual(testGuid, contentMatches[2].contentGuid);

            Assert.AreEqual(bracketCode02, contentMatches[0].bracketCodeText);
            Assert.AreEqual(bracketCode, contentMatches[1].bracketCodeText);
            Assert.AreEqual(bracketCode, contentMatches[2].bracketCodeText);

            Assert.AreEqual(displayText02, contentMatches[0].displayText);
            Assert.AreEqual(string.Empty, contentMatches[1].displayText);
            Assert.AreEqual(string.Empty, contentMatches[2].displayText);

            Assert.IsTrue(pageMatches.Count == 2);
            Assert.AreEqual(pageBracketCode01, pageMatches[0].bracketCodeText);
            Assert.AreEqual(pageBracketCode02, pageMatches[1].bracketCodeText);
            Assert.AreEqual(pageDisplayText, pageMatches[0].displayText);
        }
Esempio n. 14
0
        public static async Task ExtractAndWriteRelatedContentDbReferencesFromString(Guid sourceGuid, string toSearch,
                                                                                     PointlessWaymarksContext db, IProgress <string> progress)
        {
            if (string.IsNullOrWhiteSpace(toSearch))
            {
                return;
            }

            var toAdd = BracketCodeCommon.BracketCodeContentIds(toSearch);

            if (!toAdd.Any())
            {
                return;
            }

            var dbEntries = toAdd.Select(x => new GenerationRelatedContent {
                ContentOne = sourceGuid, ContentTwo = x
            });

            await db.GenerationRelatedContents.AddRangeAsync(dbEntries);
        }
Esempio n. 15
0
        public static async Task ExtractAndWriteRelatedContentDbReferences(DateTime generationVersion,
                                                                           IContentCommon content, PointlessWaymarksContext db, IProgress <string> progress)
        {
            var toAdd = new List <Guid>();

            if (content.MainPicture != null && content.MainPicture != content.ContentId)
            {
                toAdd.Add(content.MainPicture.Value);
            }

            var toSearch = string.Empty;

            toSearch += content.BodyContent + content.Summary;

            if (content is IUpdateNotes updateContent)
            {
                toSearch += updateContent.UpdateNotes;
            }

            if (string.IsNullOrWhiteSpace(toSearch) && !toAdd.Any())
            {
                return;
            }

            toAdd.AddRange(BracketCodeCommon.BracketCodeContentIds(toSearch));

            if (!toAdd.Any())
            {
                return;
            }

            var dbEntries = toAdd.Distinct().Select(x => new GenerationRelatedContent
            {
                ContentOne = content.ContentId, ContentTwo = x, GenerationVersion = generationVersion
            });

            await db.GenerationRelatedContents.AddRangeAsync(dbEntries);

            await db.SaveChangesAsync();
        }
Esempio n. 16
0
        public static async Task <GenerationReturn> CheckStringForBadContentReferences(string toSearch,
                                                                                       PointlessWaymarksContext db, IProgress <string> progress)
        {
            var extracted = new List <Guid>();

            if (string.IsNullOrWhiteSpace(toSearch))
            {
                return(await GenerationReturn.Success("No Content Ids Found"));
            }

            extracted.AddRange(BracketCodeCommon.BracketCodeContentIds(toSearch));

            if (!extracted.Any())
            {
                return(await GenerationReturn.Success("No Content Ids Found"));
            }

            progress?.Report($"Found {extracted.Count} ContentIds to check for");

            var notFoundList = new List <Guid>();

            foreach (var loopExtracted in extracted)
            {
                var contentLookup = await db.ContentFromContentId(loopExtracted);

                if (contentLookup == null)
                {
                    progress?.Report($"ContentId {loopExtracted} Not Found in Db...");
                    notFoundList.Add(loopExtracted);
                }
            }

            if (notFoundList.Any())
            {
                return(await GenerationReturn.Error(
                           $"Invalid ContentIds in Bracket Codes - {string.Join(", ", notFoundList)}"));
            }

            return(await GenerationReturn.Success("No Invalid Content Ids Found"));
        }
Esempio n. 17
0
        public static async Task <string> ToHtmlEmail(ImageContent content, IProgress <string> progress)
        {
            if (content == null)
            {
                return(string.Empty);
            }

            var mdBuilder = new StringBuilder();

            mdBuilder.AppendLine(BracketCodeImages.Create(content));

            if (!string.IsNullOrWhiteSpace(content.BodyContent))
            {
                mdBuilder.AppendLine();

                mdBuilder.AppendLine(content.BodyContent);
            }

            var tags = Tags.TagListTextLinkList(content);

            tags.Style("text-align", "center");
            mdBuilder.AppendLine(tags.ToString());

            mdBuilder.AppendLine();

            mdBuilder.AppendLine($"<p style=\"text-align: center;\">{Tags.CreatedByAndUpdatedOnString(content)}</p>");

            var preprocessResults = BracketCodeCommon.ProcessCodesForEmail(mdBuilder.ToString(), progress);
            var bodyHtmlString    = ContentProcessing.ProcessContent(preprocessResults, content.BodyContentFormat);

            var innerContent = HtmlEmail.ChildrenIntoTableCells(
                $"{await HtmlEmail.EmailSimpleTitle(content)}{bodyHtmlString}{HtmlEmail.EmailSimpleFooter()}");

            var emailHtml = HtmlEmail.WrapInNestedCenteringTable(innerContent);

            return(emailHtml);
        }
Esempio n. 18
0
        public static HtmlTag PointDetailsDiv(PointContentDto dbEntry)
        {
            if (dbEntry?.PointDetails == null && !dbEntry.PointDetails.Any())
            {
                return(HtmlTag.Empty());
            }

            var containerDiv = new DivTag().AddClass("point-detail-list-container");

            foreach (var loopDetail in dbEntry.PointDetails)
            {
                var outerDiv = new DivTag().AddClass("point-detail-container");
                var typeLine = new HtmlTag("p").Text(loopDetail.DataType).AddClass("point-detail-type");
                outerDiv.Children.Add(typeLine);

                switch (loopDetail.DataType)
                {
                case "Campground":
                {
                    var pointDetails = JsonSerializer.Deserialize <Campground>(loopDetail.StructuredDataAsJson);

                    if (pointDetails == null)
                    {
                        return(outerDiv);
                    }

                    var infoList = new HtmlTag("ul").AddClass("point-detail-info-list");

                    if (pointDetails.Fee != null)
                    {
                        infoList.Children.Add(new HtmlTag("li").Text($"Fee: {pointDetails.Fee}"));
                    }

                    if (!string.IsNullOrEmpty(pointDetails.Notes))
                    {
                        var noteText = ContentProcessing.ProcessContent(
                            BracketCodeCommon.ProcessCodesForSite(pointDetails.Notes, null),
                            pointDetails.NotesContentFormat);

                        infoList.Children.Add(new HtmlTag("li").Encoded(false).Text(noteText));
                    }

                    outerDiv.Children.Add(infoList);

                    break;
                }

                case "Parking":
                {
                    var pointDetails = JsonSerializer.Deserialize <Parking>(loopDetail.StructuredDataAsJson);

                    if (pointDetails == null)
                    {
                        return(outerDiv);
                    }

                    var infoList = new HtmlTag("ul").AddClass("point-detail-info-list");

                    if (pointDetails.Fee != null)
                    {
                        infoList.Children.Add(new HtmlTag("li").Text($"Fee: {pointDetails.Fee}"));
                    }

                    if (!string.IsNullOrEmpty(pointDetails.Notes))
                    {
                        var noteText = ContentProcessing.ProcessContent(
                            BracketCodeCommon.ProcessCodesForSite(pointDetails.Notes, null),
                            pointDetails.NotesContentFormat);

                        infoList.Children.Add(new HtmlTag("li").Encoded(false).Text(noteText));
                    }

                    outerDiv.Children.Add(infoList);

                    break;
                }

                case "Feature":
                {
                    var pointDetails = JsonSerializer.Deserialize <Feature>(loopDetail.StructuredDataAsJson);

                    if (pointDetails == null)
                    {
                        return(outerDiv);
                    }

                    typeLine.Text($"Point Detail: {pointDetails.Type}");

                    var infoList = new HtmlTag("ul").AddClass("point-detail-info-list");

                    if (!string.IsNullOrEmpty(pointDetails.Notes))
                    {
                        var noteText = ContentProcessing.ProcessContent(
                            BracketCodeCommon.ProcessCodesForSite(pointDetails.Notes, null),
                            pointDetails.NotesContentFormat);

                        infoList.Children.Add(new HtmlTag("li").Encoded(false).Text(noteText));
                    }

                    outerDiv.Children.Add(infoList);

                    break;
                }

                case "Peak":
                {
                    var pointDetails = JsonSerializer.Deserialize <Peak>(loopDetail.StructuredDataAsJson);

                    if (pointDetails == null)
                    {
                        return(outerDiv);
                    }

                    var infoList = new HtmlTag("ul").AddClass("point-detail-info-list");

                    if (!string.IsNullOrEmpty(pointDetails.Notes))
                    {
                        var noteText = ContentProcessing.ProcessContent(
                            BracketCodeCommon.ProcessCodesForSite(pointDetails.Notes, null),
                            pointDetails.NotesContentFormat);

                        infoList.Children.Add(new HtmlTag("li").Encoded(false).Text(noteText));
                    }

                    outerDiv.Children.Add(infoList);

                    break;
                }

                case "Restroom":
                {
                    var pointDetails = JsonSerializer.Deserialize <Restroom>(loopDetail.StructuredDataAsJson);

                    if (pointDetails == null)
                    {
                        return(outerDiv);
                    }

                    var infoList = new HtmlTag("ul").AddClass("point-detail-info-list");

                    if (!string.IsNullOrEmpty(pointDetails.Notes))
                    {
                        var noteText = ContentProcessing.ProcessContent(
                            BracketCodeCommon.ProcessCodesForSite(pointDetails.Notes, null),
                            pointDetails.NotesContentFormat);

                        infoList.Children.Add(new HtmlTag("li").Encoded(false).Text(noteText));
                    }

                    outerDiv.Children.Add(infoList);

                    break;
                }

                case "TrailJunction":
                {
                    var pointDetails = JsonSerializer.Deserialize <TrailJunction>(loopDetail.StructuredDataAsJson);

                    if (pointDetails == null)
                    {
                        return(outerDiv);
                    }

                    var infoList = new HtmlTag("ul").AddClass("point-detail-info-list");

                    if (pointDetails.Sign != null)
                    {
                        infoList.Children.Add(
                            new HtmlTag("li").Text(pointDetails.Sign.Value ? "Signed" : "No Sign"));
                    }

                    if (!string.IsNullOrEmpty(pointDetails.Notes))
                    {
                        var noteText = ContentProcessing.ProcessContent(
                            BracketCodeCommon.ProcessCodesForSite(pointDetails.Notes, null),
                            pointDetails.NotesContentFormat);

                        infoList.Children.Add(new HtmlTag("li").Encoded(false).Text(noteText));
                    }

                    outerDiv.Children.Add(infoList);

                    break;
                }
                }

                containerDiv.Children.Add(outerDiv);
            }

            return(containerDiv);
        }
Esempio n. 19
0
        public static async Task <GenerationReturn> CheckForBadContentReferences(IContentCommon content,
                                                                                 PointlessWaymarksContext db, IProgress <string> progress)
        {
            progress?.Report($"Checking ContentIds for {content.Title}");

            var extracted = new List <Guid>();

            if (content.MainPicture != null && content.MainPicture != content.ContentId)
            {
                extracted.Add(content.MainPicture.Value);
            }

            var toSearch = string.Empty;

            toSearch += content.BodyContent + content.Summary;

            if (content is IUpdateNotes updateContent)
            {
                toSearch += updateContent.UpdateNotes;
            }

            if (content is PointContentDto pointDto)
            {
                pointDto.PointDetails.ForEach(x => toSearch += x.StructuredDataAsJson);
            }

            if (content is PointContent point)
            {
                (await Db.PointDetailsForPoint(point.ContentId, db)).ForEach(x => toSearch += x.StructuredDataAsJson);
            }

            if (string.IsNullOrWhiteSpace(toSearch) && !extracted.Any())
            {
                return(await GenerationReturn.Success(
                           $"{Db.ContentTypeString(content)} {content.Title} - No Content Ids Found", content.ContentId));
            }

            extracted.AddRange(BracketCodeCommon.BracketCodeContentIds(toSearch));

            if (!extracted.Any())
            {
                return(await GenerationReturn.Success(
                           $"{Db.ContentTypeString(content)} {content.Title} - No Content Ids Found", content.ContentId));
            }

            progress?.Report($"Found {extracted.Count} ContentIds to check for {content.Title}");

            var notFoundList = new List <Guid>();

            foreach (var loopExtracted in extracted)
            {
                var contentLookup = await db.ContentFromContentId(loopExtracted);

                if (contentLookup != null)
                {
                    continue;
                }
                if (await db.MapComponents.AnyAsync(x => x.ContentId == loopExtracted))
                {
                    continue;
                }

                progress?.Report($"ContentId {loopExtracted} Not Found in Db...");
                notFoundList.Add(loopExtracted);
            }

            if (notFoundList.Any())
            {
                return(await GenerationReturn.Error(
                           $"{Db.ContentTypeString(content)} {content.Title} has " +
                           $"Invalid ContentIds in Bracket Codes - {string.Join(", ", notFoundList)}", content.ContentId));
            }

            return(await GenerationReturn.Success(
                       $"{Db.ContentTypeString(content)} {content.Title} - No Invalid Content Ids Found"));
        }