Esempio n. 1
0
        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));
            }
        }
Esempio n. 2
0
        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));
            }
        }