using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; using PersonSport.Models; using Microsoft.AspNetCore.Http; using System.IO; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Authorization; namespace PersonSport.Controllers { [Authorize] public class PersonController : Controller { private const int FileNameLength = 8; private readonly IWebHostEnvironment Environment; public PersonController(IWebHostEnvironment _environment) { Environment = _environment; } public IActionResult Index(string sortOrder) { List personer = new(); using (var db = new IdrottContext()) { personer = sortOrder switch { "PersonId" => db.Personer.OrderBy(p => p.PersonId).ToList(), "PersonNamn" => db.Personer.OrderBy(p => p.PersonNamn).ToList(), "Epost" => db.Personer.OrderBy(p => p.Epost).ToList(), "Alder" => db.Personer.OrderBy(p => p.Alder).ToList(), "StartDatum" => db.Personer.OrderBy(p => p.StartDatum).ToList(), _ => db.Personer.OrderBy(p => p.PersonId).ToList(), }; } return View(personer); } /* ********************************************************* * Function: Search() * ----------------------------------------- * Sammanfattning: Söker i databasen efter en viss post genom * att söka efter namn eller e-postadress. * Skapar en lista av personer och sparar undan söksträngen. * Populerar listan genom ett lambda-uttryck som motsvarade söksträngen. * Denna lista av personer skickas slutligen till Vyn. * ****************************************************** */ [HttpPost] public IActionResult Search(IFormCollection fc) { string search = fc["search"]; List personer = new(); using (var db = new IdrottContext()) { personer = db.Personer.Where(p => p.PersonNamn.ToLower().Contains(search.ToLower()) || p.Epost.ToLower().Contains(search.ToLower())).ToList(); } return View(personer); } [AllowAnonymous] [HttpGet] public IActionResult Create() { return View(); } [AllowAnonymous] [HttpPost] public IActionResult Create(IFormCollection fc) { Person person = new(); try { person.PersonNamn = fc["PersonNamn"]; person.Epost = fc["Epost"]; person.Visningsbild = fc["Visningsbild"]; person.Alder = int.Parse(fc["Alder"]); if (person.Visningsbild != "") { person.Visningsbild = Request.Form.Files[0].FileName; IFormFileCollection files = Request.Form.Files; long size = files.Sum(f => f.Length); string BaseURL = this.Environment.WebRootPath + @"\images\userphoto\"; foreach (var formFile in files) { string localFileName = DateTime.UtcNow.Ticks.ToString()[FileNameLength..] + ".jpg"; var filePath = BaseURL + localFileName; person.Visningsbild = 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 person.Visningsbild = "noimage.jpg"; if (ModelState.IsValid) { person.StartDatum = DateTime.Now; using (var db = new IdrottContext()) { db.Add(person); db.SaveChanges(); } TempData["MeddelandeSuccess"] = "Medlemmen är tillagd i systemet."; return RedirectToAction("Index", "Start"); } } catch (Exception) { throw; } TempData["MeddelandeFail"] = "Kunde inte lägga till personen."; return NotFound(); } public IActionResult Delete(int id) { try { var person = new Person() { PersonId = id }; using (var db = new IdrottContext()) { db.Attach(person); db.Remove(person); db.SaveChanges(); } TempData["MeddelandeSuccess"] = "Medlemmen är borttagen ur systemet."; return RedirectToAction(nameof(Index)); } catch (Exception) { TempData["MeddelandeFail"] = "Kunde inte ta bort personen."; throw; } } [HttpGet] public IActionResult Edit(int id) { Person p = new(); try { using (var db = new IdrottContext()) { var person = db.Personer.Where(p => p.PersonId == id).FirstOrDefault(); p.PersonId = person.PersonId; p.PersonNamn = person.PersonNamn; p.Epost = person.Epost; p.Alder = person.Alder; p.Visningsbild = person.Visningsbild; db.SaveChanges(); } return View(p); } catch (Exception) { throw; } } [HttpPost] public IActionResult Edit(IFormCollection fc) { Person person = new(); bool bytaBild = false; try { person.PersonId = int.Parse(fc["PersonId"]); person.PersonNamn = fc["PersonNamn"]; person.Epost = fc["Epost"]; person.Visningsbild = fc["Visningsbild"]; person.Alder = int.Parse(fc["Alder"]); if (person.Visningsbild == "") bytaBild = false; else bytaBild = true; if (bytaBild) { person.Visningsbild = Request.Form.Files[0].FileName; IFormFileCollection files = Request.Form.Files; long size = files.Sum(f => f.Length); string BaseURL = this.Environment.WebRootPath + @"\images\userphoto\"; foreach (var formFile in files) { string localFileName = DateTime.UtcNow.Ticks.ToString()[FileNameLength..] + ".jpg"; var filePath = BaseURL + localFileName; person.Visningsbild = 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 person.Visningsbild = "noimage.jpg"; if (ModelState.IsValid) { using (var db = new IdrottContext()) { var up = db.Personer.Where(p => p.PersonId == person.PersonId).FirstOrDefault(); up.PersonId = person.PersonId; up.PersonNamn = person.PersonNamn; up.Epost = person.Epost; up.Alder = person.Alder; if (bytaBild) up.Visningsbild = person.Visningsbild; db.SaveChanges(); } TempData["MeddelandeSuccess"] = "Medlemmen är editerat med de nya uppgifterna."; return RedirectToAction(nameof(Index)); } } catch (Exception) { throw; } TempData["MeddelandeFail"] = "Kunde inte editera personen."; return NotFound(); } } }