Startpunkten
This commit is contained in:
229
Controllers/PersonController.cs
Normal file
229
Controllers/PersonController.cs
Normal file
@@ -0,0 +1,229 @@
|
||||
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<Person> 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<Person> 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user