public IActionResult Post([FromBody] NewsViewModel news) { try { var username = HttpContext.User.GetUsername(); var displayName = HttpContext.User.GetDisplayName(); if (_intranetApiContext.Users.Find(username) == null) { var user = new User { Username = username, DisplayName = displayName, }; _intranetApiContext.Users.Add(user); } var newNews = new News { Title = news.Title, Text = news.Text, UserId = username, Published = news.Published, }; if (!String.IsNullOrWhiteSpace(news.HeaderImage?.FileName)) { newNews.HeaderImage = new Image { FileName = news.HeaderImage.FileName }; } newNews.Created = _dateTimeFactory.DateTimeOffsetUtc; NewsKeywordHelper.SetKeywords(news.Keywords, newNews, _intranetApiContext); _intranetApiContext.News.Add(newNews); _intranetApiContext.SaveChanges(); var newsViewModel = new NewsViewModel(newNews); return(Ok(newsViewModel)); } catch (Exception) { return(StatusCode(StatusCodes.Status500InternalServerError)); } }
public async Task <IActionResult> Edit(int id, [Bind("Id,Title,Text,Published,HeaderImage,Tags")] NewsViewModel news) { try { if (!ModelState.IsValid) { return(View(news)); } var username = HttpContext.User.GetUsername(); var isAdmin = HttpContext.User.IsAdmin(); var entity = _context.News .Include(n => n.User) .SingleOrDefault(n => n.Id == id); if (entity == null) { return(NotFound()); } if (entity.UserId?.Equals(username) != true && !isAdmin) { ModelState.AddModelError("Error", "As a non admin you can only update your own news."); HttpContext.Response.StatusCode = StatusCodes.Status403Forbidden; return(View(news)); } // If the news changes to Published for the first time, set creation date if (!entity.HasEverBeenPublished && news.Published) { entity.Created = _dateTimeFactory.DateTimeOffsetUtc; } else if (news.Published) { entity.Updated = _dateTimeFactory.DateTimeOffsetUtc; } entity.Title = news.Title; entity.Text = news.Text; entity.Published = news.Published; var image = Request.Form.Files.SingleOrDefault(f => f.ContentType.Contains("image")); if (image.IsNotNull()) { var filename = await _fileStorageService.SetImageAsync(image); news.HeaderImage = new Image { FileName = filename }; } if (entity.HeaderImage.IsNotNull() && !String.IsNullOrWhiteSpace(news.HeaderImage?.FileName)) { entity.HeaderImage.FileName = news.HeaderImage?.FileName; } else if (!String.IsNullOrWhiteSpace(news.HeaderImage?.FileName)) { entity.HeaderImage = new Image { FileName = news.HeaderImage.FileName }; } var tags = TagHelpers.GetTagsFromString(news.Tags); var allTagEntities = GetAllTagEntitiesInternal(news, tags); TagHelpers.SetTags <News, NewsTag>(tags, entity, allTagEntities); _context.SaveChanges(); return(RedirectToAction("Details", new { Id = entity.Id })); } catch (Exception) { return(StatusCode(StatusCodes.Status500InternalServerError)); } }