public void TransferValuesFrom(CreateUserViewModel model) { UserName = model.UserName; Email = model.Email; Question = model.Question; Answer = model.Answer; User = model.User; }
/// <summary> /// Creates the user view model, including populating the lookups /// </summary> public static new CreateUserViewModel Create(IUserBLL userBLL, IRepository repository) { var baseViewModel = UserViewModel.Create(userBLL, repository); var viewModel = new CreateUserViewModel { Supervisors = baseViewModel.Supervisors, Projects = baseViewModel.Projects, FundTypes = baseViewModel.FundTypes, AvailableRoles = baseViewModel.AvailableRoles, Subordinates = baseViewModel.Subordinates }; return viewModel; }
public ActionResult Create(CreateUserViewModel model, List<string> roleList) { model.User.UserName = model.UserName; //transfer the username & email to the user class model.User.Email = model.Email; MvcValidationAdapter.TransferValidationMessagesTo(ModelState, MvcValidationAdapter.GetValidationResultsFor(model)); model.User.TransferValidationMessagesTo("User", ModelState); //CheckUserAssociations(model.User); //Make sure the associations are set//Done by users.cs now if (roleList == null || roleList.Count == 0) ModelState.AddModelError("RoleList", "User must have at least one role"); if (!ModelState.IsValid) { //If we aren't valid, return to the create page var viewModel = CreateUserViewModel.Create(UserBLL, Repository); viewModel.TransferValuesFrom(model); viewModel.UserRoles = roleList; return View(viewModel); } else { var user = model.User; //Set the current user as the new user's creator user.CreatedBy = UserBLL.GetUser(); //User is valid, let's go through the create process EnsureProperRoles(roleList, user); MembershipCreateStatus createStatus; //Create the user MembershipUser membershipUser = UserBLL.UserAuth.MembershipService.CreateUser(model.UserName, DefaultPassword, model.Email, model.Question, model.Answer, true, null, out createStatus); if (createStatus == MembershipCreateStatus.Success) { UserBLL.AddUserToRoles(model.UserName, roleList); } else { //This approach maintains all entered info for the user if there is an error switch (createStatus) { case MembershipCreateStatus.DuplicateEmail: //This is currently disabled in the Web.config ModelState.AddModelError("_FORM", "Create Failed Duplicate Email"); break; // return Create(); case MembershipCreateStatus.DuplicateProviderUserKey: ModelState.AddModelError("_FORM", "Create Failed Duplicate Provider User Key"); break; // return Create(); case MembershipCreateStatus.DuplicateUserName: //This one should be working ModelState.AddModelError("UserName", "Username already exists"); break; // return Create(); case MembershipCreateStatus.InvalidAnswer: ModelState.AddModelError("_FORM", "Create Failed Invalid Answer"); break; // return Create(); case MembershipCreateStatus.InvalidEmail: ModelState.AddModelError("_FORM", "Create Failed Invalid Email"); break; // return Create(); case MembershipCreateStatus.InvalidQuestion: ModelState.AddModelError("_FORM", "Create Failed Invalid Question"); break; // return Create(); case MembershipCreateStatus.InvalidUserName: ModelState.AddModelError("_FORM", "Create Failed Invalid User Name"); break; // return Create(); case MembershipCreateStatus.ProviderError: ModelState.AddModelError("_FORM", "Create Failed Provider Error"); break; // return Create(); //Added these two back, if we don't want them here we can disable the two unit tests. case MembershipCreateStatus.InvalidProviderUserKey: ModelState.AddModelError("_FORM", "Create Failed Invalid Provider User Key"); break; // return Create(); case MembershipCreateStatus.InvalidPassword: ModelState.AddModelError("_FORM", "Create Failed Invalid Password"); break; // return Create(); case MembershipCreateStatus.Success: throw new ApplicationException("Unexpected value."); case MembershipCreateStatus.UserRejected: ModelState.AddModelError("_FORM", "Create Failed User Rejected"); break; // return Create(); default: ModelState.AddModelError("_FORM", "Create Failed"); break; // return Create(); } //If we aren't valid, return to the create page var viewModel = CreateUserViewModel.Create(UserBLL, Repository); viewModel.TransferValuesFrom(model); viewModel.UserRoles = roleList; return View(viewModel); } user.SetUserID((Guid) membershipUser.ProviderUserKey); user.Token = Guid.NewGuid(); //setup the new user token UserBLL.DbContext.BeginTransaction(); try { //save the user UserBLL.EnsurePersistent(user); var supervisorEmail = UserBLL.UserAuth.MembershipService.GetUser(user.Supervisor.Id).Email; //MessageGateway.SendMessageToNewUser(user, model.UserName, model.Email, supervisorEmail, // Url.AbsoluteAction("Index", "Home", new {token = user.Token})); MessageGateway.SendMessageToNewUser(user, model.UserName, model.Email, supervisorEmail, Url.AbsoluteAction("NewUser", "Account", new {id = user.Token})); UserBLL.DbContext.CommitTransaction(); } catch (Exception) { UserBLL.DbContext.RollbackTransaction(); //delete the user then throw the exception UserBLL.UserAuth.MembershipService.DeleteUser(model.UserName); throw; } Message = string.Format("{0} Created Successfully", model.UserName); return this.RedirectToAction(a => a.List(null)); } }