Files
yavsc/src/Yavsc/Controllers/Survey/BugController.cs
2024-12-25 14:55:57 +00:00

187 lines
5.6 KiB
C#

using Microsoft.AspNetCore.Mvc;
using Yavsc.Models;
using Yavsc.Models.IT.Fixing;
using Yavsc.Models.IT.Evolution;
using Yavsc.Server.Helpers;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.Extensions.Localization;
using Microsoft.AspNetCore.Authorization;
using Microsoft.EntityFrameworkCore;
namespace Yavsc.Controllers
{
public class BugController : Controller
{
readonly ApplicationDbContext _context;
readonly IStringLocalizer<BugController> _localizer;
readonly IStringLocalizer<Yavsc.Models.IT.Fixing.Resources> _statusLocalizer;
public BugController(ApplicationDbContext context,
IStringLocalizer<BugController> localizer,
IStringLocalizer<Resources> statusLocalizer
)
{
_context = context;
_localizer = localizer;
_statusLocalizer = statusLocalizer;
}
// GET: Bug
public async Task<IActionResult> Index(int skip = 0, int take = 25)
{
if (take > 50) return BadRequest();
ViewData["skip"]=skip;
ViewData["take"]=take;
return View(await _context.Bug.Skip(skip).Take(take).ToListAsync());
}
// GET: Bug/Details/5
public async Task<IActionResult> Details(long? id)
{
if (id == null)
{
return NotFound();
}
Bug bug = await _context.Bug.SingleAsync(m => m.Id == id);
if (bug == null)
{
return NotFound();
}
return View(bug);
}
// GET: Bug/Create
public IActionResult Create()
{
ViewBag.Features = Features(_context);
ViewBag.Statuses = Statuses(default(BugStatus));
return View();
}
IEnumerable<SelectListItem> Statuses(BugStatus ?status) =>
_statusLocalizer.CreateSelectListItems(typeof(BugStatus), status);
IEnumerable<SelectListItem> Features(ApplicationDbContext context) =>
context.Feature.CreateSelectListItems<Feature>(f => f.Id.ToString(), f => $"{f.ShortName} ({f.Description})", null)
.AddNull(_localizer["noAttachedFID"]);
// POST: Bug/Create
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(Bug bug)
{
if (ModelState.IsValid)
{
_context.Bug.Add(bug);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
ViewBag.Features = Features(_context);
ViewBag.Statuses = Statuses(default(BugStatus));
return View(bug);
}
// GET: Bug/Edit/5
[Authorize("AdministratorOnly")]
public async Task<IActionResult> Edit(long? id)
{
if (id == null)
{
return NotFound();
}
Bug bug = await _context.Bug.SingleAsync(m => m.Id == id);
if (bug == null)
{
return NotFound();
}
ViewBag.Features = Features(_context);
ViewBag.Statuses = Statuses(bug.Status);
return View(bug);
}
// POST: Bug/Edit/5
[HttpPost]
[ValidateAntiForgeryToken]
[Authorize("AdministratorOnly")]
public async Task<IActionResult> Edit(Bug bug)
{
if (ModelState.IsValid)
{
_context.Update(bug);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
return View(bug);
}
// GET: Bug/Delete/5
[ActionName("Delete")]
[Authorize("AdministratorOnly")]
public async Task<IActionResult> Delete(long? id)
{
if (id == null)
{
return NotFound();
}
Bug bug = await _context.Bug.SingleAsync(m => m.Id == id);
if (bug == null)
{
return NotFound();
}
return View(bug);
}
// POST: Bug/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
[Authorize("AdministratorOnly")]
public async Task<IActionResult> DeleteConfirmed(long id)
{
Bug bug = await _context.Bug.SingleAsync(m => m.Id == id);
_context.Bug.Remove(bug);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
[Authorize("AdministratorOnly")]
public async Task<IActionResult> DeleteAllLike(long? id)
{
if (id == null)
{
return NotFound();
}
Bug bugref = await _context.Bug.SingleAsync(m => m.Id == id);
if (bugref == null)
{
return null;
}
var bugs = _context.Bug.Where(b => b.Description == bugref.Description);
return View(bugs);
}
// POST: Bug/Delete/5
[HttpPost]
[ValidateAntiForgeryToken]
[Authorize("AdministratorOnly")]
public async Task<IActionResult> DeleteAllLikeConfirmed(long id, int prefixLen = 25)
{
Bug bug = await _context.Bug.SingleAsync(m => m.Id == id);
var bugs = await _context.Bug.Where(b => b.Description.Substring(0, prefixLen) == bug.Description.Substring(0, prefixLen)).ToArrayAsync();
foreach (var btd in bugs)
_context.Bug.Remove(btd);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
}
}