using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using GreenTree.Nachtragsmanagement.Core.Authentication; using GreenTree.Nachtragsmanagement.Services.User; using GreenTree.Nachtragsmanagement.Web.Models.Admin.User; using GreenTree.Nachtragsmanagement.Core.Domain.User; using Newtonsoft.Json; using GreenTree.Nachtragsmanagement.Core; namespace GreenTree.Nachtragsmanagement.Web.Controllers { public class AdminController : Controller { private readonly IUserService _userService; private readonly IUserHelper _userHelper; public AdminController( IUserService userService, IUserHelper userHelper) { _userService = userService; _userHelper = userHelper; ViewData["AllRoles"] = _userService.GetAllRoles(); } #region Users /// /// Basic user view function /// public ActionResult ViewUsers() { var users = _userService.GetAllUsers(); var userModels = users .Select(u => UserDataModel.FromUser(u, false)) .ToList(); return View("~/Views/Admin/Users/View.cshtml", userModels); } /// /// Get JSON data of specific user /// /// User id. public ActionResult GetUser(int id = -1) { var user = _userService.GetUserById(id); if (user == null) return new JsonResult { Data = "notFound", JsonRequestBehavior = JsonRequestBehavior.AllowGet }; var userModel = UserDataModel.FromUser(user, false); return new JsonResult { Data = JsonConvert.SerializeObject(userModel), JsonRequestBehavior = JsonRequestBehavior.AllowGet }; } /// /// Callback result for user grid /// public ActionResult PartialUsers() { var users = _userService.GetAllUsers(); var userModels = users .Select(u => UserDataModel.FromUser(u, false)) .ToList(); return PartialView("~/Views/Admin/Users/_UserGridPartial.cshtml", userModels); } /// /// Partial edit for editing of existing or for new user /// /// Id for existing user, otherweise -1. public ActionResult EditUser(int id = -1) { var user = _userService.GetUserById(id); var userModel = UserDataModel.FromUser(user, true); return PartialView("~/Views/Admin/Users/_UserEditPartial.cshtml", userModel); } /// /// Partial edit result if ModelState is valid, otherwise simple JSON result for success /// /// User model to be saved. [HttpPost, ValidateInput(false)] public ActionResult EditUser(UserDataModel userModel) { if (!ModelState.IsValid) { foreach (var role in userModel.RoleValues) userModel.RoleDescriptions.Add( ((IList)ViewData["AllRoles"]) .First(r => r.Id == role).Description); return PartialView("~/Views/Admin/Users/_UserEditPartial.cshtml", userModel); } var selectedRoles = _userService.GetRolesByIds(userModel.RoleValues.ToArray()); if (userModel.Id == -1) { var user = userModel.ToUser(); user.SetRoles(selectedRoles); user.Password = StaticHelper.GetMD5Hash(userModel.Password); _userService.InsertUser(user); } else { var user = _userService.GetUserById(userModel.Id); user.CustomNumber = userModel.CustomerNumber; user.Forename = userModel.Forename; user.Lastname = userModel.Lastname; user.MailAddress = userModel.MailAddress; if (!String.IsNullOrEmpty(userModel.Password)) user.Password = StaticHelper.GetMD5Hash(userModel.Password); user.SetRoles(selectedRoles); _userService.UpdateUser(user); } return new JsonResult { Data = "success" }; } /// /// Simple JSON result for deleting a specific user /// /// User id. [HttpPost] public ActionResult DeleteUser(int id) { var user = _userService.GetUserById(id); if (user != null) _userService.DeleteUser(user); return new JsonResult { Data = "success" }; } #endregion #region Roles /// /// Basic role view function /// public ActionResult ViewRoles() { return View("~/Views/Admin/Roles/View.cshtml"); } #endregion #region Plugins /// /// Basic plugin view function /// public ActionResult ViewPlugins() { return View("~/Views/Admin/Plugins/View.cshtml"); } #endregion } }