Exemple #1
0
        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);
        }
Exemple #3
0
        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();
        }
Exemple #4
0
        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);
            }
        }
Exemple #5
0
        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"));
        }
Exemple #6
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);
        }