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
}
}