using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; using PersonSport.Models; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Hosting; using System.IO; using Microsoft.AspNetCore.Authorization; namespace PersonSport.Controllers { [Authorize] public class SportController : Controller { private const int FileNameLength = 8; private readonly IWebHostEnvironment Environment; public SportController(IWebHostEnvironment _environment) { Environment = _environment; } public IActionResult Index() { List sporter = new(); using (var db = new IdrottContext()) { sporter = db.Sporter.ToList(); } return View(sporter); } [AllowAnonymous] public IActionResult Utbud() { List sporter = new(); using (var db = new IdrottContext()) { sporter = db.Sporter.ToList(); } return View(sporter); } [HttpGet] public IActionResult Create() { return View(); } [HttpPost] public IActionResult Create(IFormCollection fc) { Sport sport = new(); try { sport.SportNamn = fc["SportNamn"]; sport.Ingress = fc["Ingress"]; sport.DetaljText = fc["DetaljText"]; sport.Traningstider = fc["Traningstider"]; sport.Bakgrundsbild = fc["Bakgrundsbild"]; if (sport.Bakgrundsbild != "") { sport.Bakgrundsbild = Request.Form.Files[0].FileName; IFormFileCollection files = Request.Form.Files; long size = files.Sum(f => f.Length); string BaseURL = this.Environment.WebRootPath + @"\images\sport\"; foreach (var formFile in files) { string localFileName = DateTime.UtcNow.Ticks.ToString()[FileNameLength..] + ".jpg"; var filePath = BaseURL + localFileName; sport.Bakgrundsbild = localFileName; // Kontrollerar så att den valda filen är en bildfil if (formFile.ContentType == "image/jpeg" || formFile.ContentType == "image/jpg" || formFile.ContentType == "image/png" || formFile.ContentType == "image/gif") { if (formFile.Length > 0) { using var stream = new FileStream(filePath, FileMode.Create); formFile.CopyTo(stream); } else ViewBag.e = "Där där bilden är 0 bytes. Måste vara lite tråkig eller?"; } else ViewBag.e = "Det där var ingen bildfil"; } } else sport.Bakgrundsbild = "noimage.jpg"; if (ModelState.IsValid) { using (var db = new IdrottContext()) { db.Add(sport); db.SaveChanges(); } TempData["MeddelandeSuccess"] = "Sporten är tillagd i systemet."; return RedirectToAction(nameof(Index)); } } catch (Exception) { throw; } TempData["MeddelandeFail"] = "Kunde inte lägga till sporten."; return NotFound(); } public IActionResult Delete(int id) { try { var sport = new Sport() { SportId = id }; using (var db = new IdrottContext()) { db.Attach(sport); db.Remove(sport); db.SaveChanges(); } TempData["MeddelandeSuccess"] = "Sporten är borttagen ur systemet."; return RedirectToAction(nameof(Index)); } catch (Exception) { TempData["MeddelandeFail"] = "Kunde inte ta bort sporten."; throw; } } [HttpGet] public IActionResult Edit(int id) { Sport p = new(); try { using (var db = new IdrottContext()) { var sport = db.Sporter.Where(p => p.SportId == id).FirstOrDefault(); p.SportId = sport.SportId; p.SportNamn = sport.SportNamn; p.Ingress = sport.Ingress; p.DetaljText = sport.DetaljText; p.Traningstider = sport.Traningstider; p.Bakgrundsbild = sport.Bakgrundsbild; db.SaveChanges(); } return View(p); } catch (Exception) { throw; } } [HttpPost] public IActionResult Edit(IFormCollection fc) { Sport sport = new(); bool bytaBild = false; try { sport.SportId = int.Parse(fc["SportId"]); sport.SportNamn = fc["SportNamn"]; sport.Ingress = fc["Ingress"]; sport.DetaljText = fc["DetaljText"]; sport.Traningstider = fc["Traningstider"]; sport.Bakgrundsbild = fc["Bakgrundsbild"]; if (sport.Bakgrundsbild == "") bytaBild = false; else bytaBild = true; if (bytaBild) { sport.Bakgrundsbild = Request.Form.Files[0].FileName; IFormFileCollection files = Request.Form.Files; long size = files.Sum(f => f.Length); string BaseURL = this.Environment.WebRootPath + @"\images\sport\"; foreach (var formFile in files) { string localFileName = DateTime.UtcNow.Ticks.ToString()[FileNameLength..] + ".jpg"; var filePath = BaseURL + localFileName; sport.Bakgrundsbild = localFileName; // Kontrollerar så att den valda filen är en bildfil if (formFile.ContentType == "image/jpeg" || formFile.ContentType == "image/jpg" || formFile.ContentType == "image/png" || formFile.ContentType == "image/gif") { if (formFile.Length > 0) { using var stream = new FileStream(filePath, FileMode.Create); formFile.CopyTo(stream); } else ViewBag.e = "Där där bilden är 0 bytes. Måste vara lite tråkig eller?"; } else ViewBag.e = "Det där var ingen bildfil"; } } else sport.Bakgrundsbild = "nosport.jpg"; if (ModelState.IsValid) { using (var db = new IdrottContext()) { var up = db.Sporter.Where(p => p.SportId == sport.SportId).FirstOrDefault(); up.SportId = sport.SportId; up.SportNamn = sport.SportNamn; up.Ingress = sport.Ingress; up.DetaljText = sport.DetaljText; up.Traningstider = sport.Traningstider; if (bytaBild) up.Bakgrundsbild = sport.Bakgrundsbild; db.SaveChanges(); } TempData["MeddelandeSuccess"] = "Sporten är uppdaterad med de nya uppgifterna."; return RedirectToAction(nameof(Index)); } } catch (Exception) { throw; } TempData["MeddelandeFail"] = "Kunde inte editera sporten."; return NotFound(); } [AllowAnonymous] [HttpGet] public IActionResult Details(int id) { Sport s = new(); try { using (var db = new IdrottContext()) { var valdSport = db.Sporter.Where(p => p.SportId == id).FirstOrDefault(); s.SportId = valdSport.SportId; s.SportNamn = valdSport.SportNamn; s.Ingress = valdSport.Ingress; s.DetaljText = valdSport.DetaljText; s.Traningstider = valdSport.Traningstider; s.Bakgrundsbild = valdSport.Bakgrundsbild; } ViewBag.metaAbstract = s.Ingress; ViewBag.metaImage = "https://sportpalatset.se/images/sport/" + s.Bakgrundsbild; return View(s); } catch (Exception) { throw; } } } }