Exemplo n.º 1
0
        public IActionResult Create(PostEditViewModel model,
                                    [FromServices] LinkGenerator linkGenerator,
                                    [FromServices] IPingbackSender pingbackSender)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    // get tags
                    string[] tagList = string.IsNullOrWhiteSpace(model.Tags)
                                             ? new string[] { }
                                             : model.Tags.Split(',').ToArray();

                    var request = new CreatePostRequest
                    {
                        Title               = model.Title.Trim(),
                        Slug                = model.Slug.Trim(),
                        HtmlContent         = model.HtmlContent,
                        EnableComment       = model.EnableComment,
                        ExposedToSiteMap    = model.ExposedToSiteMap,
                        IsFeedIncluded      = model.FeedIncluded,
                        ContentLanguageCode = model.ContentLanguageCode,
                        IsPublished         = model.IsPublished,
                        Tags                = tagList,
                        CategoryIds         = model.SelectedCategoryIds,
                        RequestIp           = HttpContext.Connection.RemoteIpAddress.ToString()
                    };

                    var response = _postService.CreateNewPost(request);
                    if (response.IsSuccess)
                    {
                        if (!model.IsPublished)
                        {
                            return(RedirectToAction(nameof(Manage)));
                        }

                        var pubDate = response.Item.PostPublish.PubDateUtc.GetValueOrDefault();
                        var link    = GetPostUrl(linkGenerator, pubDate, response.Item.Slug);

                        if (AppSettings.EnablePingBackSend)
                        {
                            Task.Run(async() => { await pingbackSender.TrySendPingAsync(link, response.Item.PostContent); });
                        }

                        return(RedirectToAction(nameof(Manage)));
                    }

                    ModelState.AddModelError("", response.Message);
                    return(View("CreateOrEdit", model));
                }

                return(View("CreateOrEdit", model));
            }
            catch (Exception ex)
            {
                Logger.LogError(ex, "Error Creating New Post.");
                ModelState.AddModelError("", ex.Message);
                return(View("CreateOrEdit", model));
            }
        }
Exemplo n.º 2
0
 public PostController(
     IMediator mediator,
     IBlogConfig blogConfig,
     ITimeZoneResolver timeZoneResolver,
     IPingbackSender pingbackSender,
     ILogger <PostController> logger)
 {
     _mediator         = mediator;
     _blogConfig       = blogConfig;
     _timeZoneResolver = timeZoneResolver;
     _pingbackSender   = pingbackSender;
     _logger           = logger;
 }
Exemplo n.º 3
0
 public PostManageController(
     IPostService postService,
     IBlogConfig blogConfig,
     ITZoneResolver tZoneResolver,
     IPingbackSender pingbackSender,
     ILogger <PostManageController> logger)
 {
     _postService    = postService;
     _blogConfig     = blogConfig;
     _tZoneResolver  = tZoneResolver;
     _pingbackSender = pingbackSender;
     _logger         = logger;
 }
Exemplo n.º 4
0
 public PostController(
     ILogger <PostController> logger,
     IOptions <AppSettings> settings,
     PostService postService,
     CategoryService categoryService,
     IPingbackSender pingbackSender,
     LinkGenerator linkGenerator)
     : base(logger, settings)
 {
     _postService     = postService;
     _categoryService = categoryService;
     _pingbackSender  = pingbackSender;
     _linkGenerator   = linkGenerator;
 }
Exemplo n.º 5
0
        public IActionResult Edit(PostEditViewModel model,
                                  [FromServices] LinkGenerator linkGenerator,
                                  [FromServices] IPingbackSender pingbackSender)
        {
            if (ModelState.IsValid)
            {
                string[] tagList = string.IsNullOrWhiteSpace(model.Tags)
                                         ? new string[] { }
                                         : model.Tags.Split(',').ToArray();

                var request = new EditPostRequest(model.PostId)
                {
                    Title               = model.Title.Trim(),
                    Slug                = model.Slug.Trim(),
                    HtmlContent         = model.HtmlContent,
                    EnableComment       = model.EnableComment,
                    ExposedToSiteMap    = model.ExposedToSiteMap,
                    IsFeedIncluded      = model.FeedIncluded,
                    ContentLanguageCode = model.ContentLanguageCode,
                    IsPublished         = model.IsPublished,
                    Tags                = tagList,
                    CategoryIds         = model.SelectedCategoryIds
                };

                var response = _postService.EditPost(request);
                if (response.IsSuccess)
                {
                    if (model.IsPublished)
                    {
                        Logger.LogInformation($"Trying to Ping URL for post: {response.Item.Id}");

                        var pubDate = response.Item.PostPublish.PubDateUtc.GetValueOrDefault();
                        var link    = GetPostUrl(linkGenerator, pubDate, response.Item.Slug);

                        if (AppSettings.EnablePingBackSend)
                        {
                            Task.Run(async() => { await pingbackSender.TrySendPingAsync(link, response.Item.PostContent); });
                        }
                    }

                    return(RedirectToAction(nameof(Manage)));
                }

                ModelState.AddModelError("", response.Message);
                return(View("CreateOrEdit", model));
            }

            return(View("CreateOrEdit", model));
        }
Exemplo n.º 6
0
        public async Task <IActionResult> CreateOrEdit(PostEditViewModel 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 EditPostRequest(model.PostId)
                {
                    Title               = model.Title.Trim(),
                    Slug                = model.Slug.Trim(),
                    EditorContent       = model.EditorContent,
                    EnableComment       = model.EnableComment,
                    ExposedToSiteMap    = model.ExposedToSiteMap,
                    IsFeedIncluded      = model.FeedIncluded,
                    ContentLanguageCode = model.ContentLanguageCode,
                    IsPublished         = model.IsPublished,
                    Tags                = tags,
                    CategoryIds         = model.SelectedCategoryIds
                };

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

                var postEntity = model.PostId == Guid.Empty ?
                                 await _postService.CreateAsync(request) :
                                 await _postService.UpdateAsync(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));
            }
        }
Exemplo n.º 7
0
        public async Task <IActionResult> CreateOrEdit(PostEditViewModel model,
                                                       [FromServices] LinkGenerator linkGenerator,
                                                       [FromServices] IPingbackSender pingbackSender)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    var tagList = string.IsNullOrWhiteSpace(model.Tags)
                                             ? new string[] { }
                                             : model.Tags.Split(',').ToArray();

                    var request = new EditPostRequest(model.PostId)
                    {
                        Title               = model.Title.Trim(),
                        Slug                = model.Slug.Trim(),
                        EditorContent       = model.EditorContent,
                        EnableComment       = model.EnableComment,
                        ExposedToSiteMap    = model.ExposedToSiteMap,
                        IsFeedIncluded      = model.FeedIncluded,
                        ContentLanguageCode = model.ContentLanguageCode,
                        IsPublished         = model.IsPublished,
                        Tags                = tagList,
                        CategoryIds         = model.SelectedCategoryIds,
                        RequestIp           = HttpContext.Connection.RemoteIpAddress.ToString()
                    };

                    var tzDate = _dateTimeResolver.GetNowWithUserTZone();
                    if (model.ChangePublishDate &&
                        model.PublishDate.HasValue &&
                        model.PublishDate <= tzDate &&
                        model.PublishDate.GetValueOrDefault().Year >= 1975)
                    {
                        request.PublishDate = model.PublishDate;
                    }

                    var response = model.PostId == Guid.Empty ?
                                   await _postService.CreateNewPost(request) :
                                   await _postService.EditPost(request);

                    if (response.IsSuccess)
                    {
                        if (model.IsPublished)
                        {
                            Logger.LogInformation($"Trying to Ping URL for post: {response.Item.Id}");

                            var pubDate = response.Item.PostPublish.PubDateUtc.GetValueOrDefault();
                            var link    = GetPostUrl(linkGenerator, pubDate, response.Item.Slug);

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

                        return(Json(new { PostId = response.Item.Id }));
                    }

                    Response.StatusCode = (int)HttpStatusCode.InternalServerError;
                    return(Json(new FailedResponse(response.Message)));
                }

                Response.StatusCode = (int)HttpStatusCode.BadRequest;
                return(Json(new FailedResponse("Invalid ModelState")));
            }
            catch (Exception ex)
            {
                Logger.LogError(ex, "Error Creating New Post.");
                Response.StatusCode = (int)HttpStatusCode.InternalServerError;
                return(Json(new FailedResponse(ex.Message)));
            }
        }