public static async Task <(GenerationReturn generationReturn, PointContentDto pointContent)> SaveAndGenerateHtml( PointContentDto toSave, DateTime?generationVersion, IProgress <string> progress) { var validationReturn = await Validate(toSave); if (validationReturn.HasError) { return(validationReturn, null); } Db.DefaultPropertyCleanup(toSave); toSave.Tags = Db.TagListCleanup(toSave.Tags); var savedPoint = await Db.SavePointContent(toSave); GenerateHtml(savedPoint, generationVersion, progress); await Export.WriteLocalDbJson(Db.PointContentDtoToPointContentAndDetails(savedPoint).content); DataNotifications.PublishDataNotification("Point Generator", DataNotificationContentType.Point, DataNotificationUpdateType.LocalContent, new List <Guid> { savedPoint.ContentId }); return(await GenerationReturn.Success($"Saved and Generated Content And Html for {savedPoint.Title}"), savedPoint); }
public SinglePointDiv(PointContentDto dbEntry) { DbEntry = dbEntry; var settings = UserSettingsSingleton.CurrentSettings(); SiteUrl = settings.SiteUrl; SiteName = settings.SiteName; PageUrl = settings.PointPageUrl(DbEntry); }
public static void GenerateHtml(PointContentDto toGenerate, DateTime?generationVersion, IProgress <string> progress) { progress?.Report($"Point Content - Generate HTML for {toGenerate.Title}"); var htmlContext = new SinglePointPage(toGenerate) { GenerationVersion = generationVersion }; htmlContext.WriteLocalHtml(); }
public SinglePointPage(PointContentDto dbEntry) { DbEntry = dbEntry; var settings = UserSettingsSingleton.CurrentSettings(); SiteUrl = settings.SiteUrl; SiteName = settings.SiteName; PageUrl = settings.PointPageUrl(DbEntry); if (DbEntry.MainPicture != null) { MainImage = new PictureSiteInformation(DbEntry.MainPicture.Value); } }
public static async Task <GenerationReturn> Validate(PointContentDto pointContent) { var rootDirectoryCheck = UserSettingsUtilities.ValidateLocalSiteRootDirectory(); if (!rootDirectoryCheck.Item1) { return(await GenerationReturn.Error($"Problem with Root Directory: {rootDirectoryCheck.Item2}", pointContent.ContentId)); } var commonContentCheck = await CommonContentValidation.ValidateContentCommon(pointContent); if (!commonContentCheck.valid) { return(await GenerationReturn.Error(commonContentCheck.explanation, pointContent.ContentId)); } var latitudeCheck = CommonContentValidation.LatitudeValidation(pointContent.Latitude); if (!latitudeCheck.isValid) { return(await GenerationReturn.Error(latitudeCheck.explanation, pointContent.ContentId)); } var longitudeCheck = CommonContentValidation.LongitudeValidation(pointContent.Longitude); if (!longitudeCheck.isValid) { return(await GenerationReturn.Error(longitudeCheck.explanation, pointContent.ContentId)); } var elevationCheck = CommonContentValidation.ElevationValidation(pointContent.Elevation); if (!elevationCheck.isValid) { return(await GenerationReturn.Error(elevationCheck.explanation, pointContent.ContentId)); } var updateFormatCheck = CommonContentValidation.ValidateUpdateContentFormat(pointContent.UpdateNotesFormat); if (!updateFormatCheck.isValid) { return(await GenerationReturn.Error(updateFormatCheck.explanation, pointContent.ContentId)); } foreach (var loopDetails in pointContent.PointDetails) { if (loopDetails.ContentId == Guid.Empty) { return(await GenerationReturn.Error("Point Detail Data must have a valid Content Id", loopDetails.ContentId)); } if (loopDetails.PointContentId != pointContent.ContentId) { return(await GenerationReturn.Error( $"{loopDetails.DataType} Point Detail isn't assigned to the current point?", loopDetails.ContentId)); } if (string.IsNullOrWhiteSpace(loopDetails.DataType)) { return(await GenerationReturn.Error("Point Detail Data Type doesn't have a value", loopDetails.ContentId)); } if (string.IsNullOrWhiteSpace(loopDetails.StructuredDataAsJson)) { return(await GenerationReturn.Error($"{loopDetails.DataType} Point Detail doesn't have any data?", loopDetails.ContentId)); } try { var content = Db.PointDetailDataFromIdentifierAndJson(loopDetails.DataType, loopDetails.StructuredDataAsJson); var contentValidation = content.Validate(); if (!contentValidation.isValid) { return(await GenerationReturn.Error( $"{loopDetails.DataType} Point Detail: {contentValidation.validationMessage}", pointContent.ContentId)); } } catch (Exception e) { return(await GenerationReturn.Error( $"Exception loading the Structured Data for {loopDetails.DataType} Point Detail {e.Message}", pointContent.ContentId)); } } return(await GenerationReturn.Success("Point Content Validation Successful")); }
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); }