Ejemplo n.º 1
0
        public async Task <IActionResult> Edit(int id, string NewWriter, bool DeletePicture, IFormFile Picture, Article article)
        {
            if (id != article.Id)
            {
                return(NotFound());
            }

            ModelState.Remove("Category.Name");
            ModelState.Remove("Writer.Name");
            ModelState.Remove("DeletePicture");

            if (ModelState.IsValid)
            {
                var originalArticle = context.Article
                                      .Include(i => i.Issue)
                                      .Include(a => a.Category)
                                      .Include(a => a.Writer)
                                      .First(a => a.Id == id);

                try
                {
                    string startLogMessage = GetEditLogMessage(originalArticle);

                    articleService
                    .SetArticleWriter(originalArticle,
                                      (article.Writer.Name == "+ NEW WRITER") ? NewWriter : article.Writer.Name)
                    .SetLanguage(article.Language)
                    .SetText(article.Text)
                    .SetTitle(article.Title)
                    .SetSubtitle(article.Subtitle)
                    .SetCategory(context.Category
                                 .First(c => c.Name == article.Category.Name));

                    if (originalArticle.PicturePath == null)
                    {
                        if (Picture != null)
                        {
                            await articleService.AddArticlePicture(originalArticle, Picture, env.WebRootPath);
                        }
                    }
                    else
                    {
                        if (Picture != null)
                        {
                            articleService.DeleteArticlePicture(originalArticle, env.WebRootPath);

                            await articleService.AddArticlePicture(originalArticle, Picture, env.WebRootPath);
                        }
                        else if (DeletePicture)
                        {
                            articleService.DeleteArticlePicture(originalArticle, env.WebRootPath);
                        }
                    }

                    await context.SaveChangesAsync();

                    string endLogMessage = GetEditLogMessage(originalArticle);

                    logger.Log($@"This article is edited 
                                from `{startLogMessage}`
                                to: {endLogMessage}
                                by {HttpContext.User.Identity.Name}");
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!ArticleExists(article.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index), new { id = originalArticle.Issue.Id }));
            }
            return(View(article));
        }