public static User userFromVMCreatingUser(VMCreatingUser vmUser)
        {
            User user = new User()
            {
                FirstName = vmUser.FirstName,
                LastName = vmUser.LastName,
                Email = vmUser.Email,
                ContactInfoes = contactInfoListFromVMContactInfoList(vmUser.ContactInfos),
                Educations = educationListFromVMEducationList(vmUser.Education),
                Links = linkListFromVMLinkList(vmUser.Links),
                Id = vmUser.UserId,
            };

            return user;
        }
        public ActionResult AccountCreation(VMCreatingUser model)
        {
            bool isValidInput = true;

            List<ContactInfo> contacts = new List<ContactInfo>();
            if (!AllContactInfosVerified(out contacts))
            {
                isValidInput = false;
            }

            List<Education> educations = new List<Education>();
            if (!AllEducationsVerified(out educations))
            {
                isValidInput = false;
            }

            List<Link> links = new List<Link>();
            if (!AllLinksVerified(out links))
            {
                isValidInput = false;
            }

            if (ModelState.IsValid)
            {
                if (!model.Email.Equals(model.ConfirmationEmail))
                {
                    isValidInput = false;
                    ModelState.AddModelError("ConfirmationEmail", "Email and Confirmation Email do not match.");
                }
                if (model.Password.Count() < 6)
                {
                    isValidInput = false;
                    ModelState.AddModelError("Password", "Your Password must be at least six characters long.");
                }
                else if (!model.Password.Equals(model.ConfirmationPassword))
                {
                    isValidInput = false;
                    ModelState.AddModelError("ConfirmationPassword", "Password and Confirmation Password do not match.");
                }
            }

            if (isValidInput && ModelState.IsValid)
            {
                try
                {
                    string confirmationToken = WebSecurity.CreateUserAndAccount(model.Email, model.Password, new { model.FirstName, model.LastName },true);
                    VMEditAccountSettings settings = new VMEditAccountSettings()
                    {
                        EmailAdminMessage = false,
                        EmailCollaborationAddition = false,
                        EmailCollaborationRemoval = false,
                        EmailCollaborationRequest = false,
                        EmailDailyViewReport = false,
                        ProfileVisibility = false,
                        UserID = db.retrieveUserByEmail(model.Email).Id
                    };

                    db.addUserSettings(Translator.UserSettingFromVMEditAccountSettings(settings));
                    dynamic email = new Email("RegEmail");
                    email.To = model.Email;
                    email.UserName = model.FirstName;
                    email.ConfirmationToken = confirmationToken;
                    try
                    {
                        email.Send();
                    }
                    catch (Exception e)
                    {
                        
                    }

                    int NewUserId = db.retrieveUserByEmail(model.Email).Id;

                    foreach (ContactInfo c in contacts)
                    {
                        db.addContactInfo(c, NewUserId);
                    }
                    foreach (Education e in educations)
                    {
                        db.addEducation(e, NewUserId);
                    }
                    foreach (Link l in links)
                    {
                        db.addLink(l, NewUserId);
                    }

                    System.Web.Security.Roles.AddUserToRole(model.Email, "User");                    
                    return RedirectToAction("RegistratoinStepTwo", "User");
                }
                catch (MembershipCreateUserException e)
                {
                    ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
                }
            }

            User u = new User();
            u.FirstName = model.FirstName;
            u.LastName = model.LastName;
            u.Email = model.Email;
            u.ContactInfoes = contacts;
            u.Links = links;
            u.Educations = educations;

            return View(new VMCreatingUser(u));
        }