Esempio n. 1
0
        public async Task <IActionResult> CreateOrEdit(PostEditModel model,
                                                       [FromServices] LinkGenerator linkGenerator,
                                                       [FromServices] IPingbackSender pingbackSender)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(Conflict(ModelState));
                }

                var tags = string.IsNullOrWhiteSpace(model.Tags)
                    ? Array.Empty <string>()
                    : model.Tags.Split(',').ToArray();

                var request = new UpdatePostRequest
                {
                    Title               = model.Title.Trim(),
                    Slug                = model.Slug.Trim(),
                    EditorContent       = model.EditorContent,
                    EnableComment       = model.EnableComment,
                    ExposedToSiteMap    = model.ExposedToSiteMap,
                    IsFeedIncluded      = model.FeedIncluded,
                    ContentLanguageCode = model.LanguageCode,
                    IsPublished         = model.IsPublished,
                    IsSelected          = model.Featured,
                    Tags                = tags,
                    CategoryIds         = model.SelectedCategoryIds
                };

                var tzDate = _tZoneResolver.NowOfTimeZone;
                if (model.ChangePublishDate &&
                    model.PublishDate.HasValue &&
                    model.PublishDate <= tzDate &&
                    model.PublishDate.GetValueOrDefault().Year >= 1975)
                {
                    request.PublishDate = _tZoneResolver.ToUtc(model.PublishDate.Value);
                }

                var postEntity = model.PostId == Guid.Empty ?
                                 await _postService.CreateAsync(request) :
                                 await _postService.UpdateAsync(model.PostId, request);

                if (model.IsPublished)
                {
                    _logger.LogInformation($"Trying to Ping URL for post: {postEntity.Id}");

                    var pubDate = postEntity.PubDateUtc.GetValueOrDefault();

                    var link = linkGenerator.GetUriByAction(HttpContext, "Slug", "Post",
                                                            new
                    {
                        year  = pubDate.Year,
                        month = pubDate.Month,
                        day   = pubDate.Day,
                        postEntity.Slug
                    });

                    if (_blogConfig.AdvancedSettings.EnablePingBackSend)
                    {
                        _ = Task.Run(async() => { await pingbackSender.TrySendPingAsync(link, postEntity.PostContent); });
                    }
                }

                return(Json(new { PostId = postEntity.Id }));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Error Creating New Post.");
                Response.StatusCode = (int)HttpStatusCode.InternalServerError;
                return(Json(ex.Message));
            }
        }