public async Task <IActionResult> Edit(string id, [Bind("Id,FirstName,LastName,Email,CourseId")] StudentListViewModel student) { if (id != student.Id) { return(NotFound()); } var courseId = student.CourseId; if (ModelState.IsValid) { var user = await userManager.FindByIdAsync(id); try { //_context.Update(student); //var setEmailResult = await userManager.SetEmailAsync(user, student.Email); user.FirstName = student.FirstName; user.LastName = student.LastName; user.Email = student.Email; // Replace composite key // TODO: Should remove all courses not only the first List <LMSUserCourse> previousCourses = _context.LMSUserCourses .Where(u => u.LMSUserId == user.Id).ToList(); _context.RemoveRange(previousCourses); var newCourse = new LMSUserCourse { CourseId = student.CourseId, LMSUserId = student.Id }; _context.Add(newCourse); //user.RegisteredCourses = student.RegisteredCourses; //user.RegisteredCourses = new LMSUserCourse //{ //} await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!StudentExists(student.Id)) { return(NotFound()); } else { throw; } } return(RedirectToAction(nameof(Participant))); } return(View(student)); }
internal static async Task InitializeAsync(IServiceProvider services, string adminPW) { var options = services.GetRequiredService <DbContextOptions <ApplicationDbContext> >(); using (var context = new ApplicationDbContext(options)) { var userManager = services.GetRequiredService <UserManager <LMSUser> >(); var roleManager = services.GetRequiredService <RoleManager <IdentityRole> >(); // Adding the roles to the db var roleNames = new[] { "Admin", "Teacher", "Student" }; foreach (var name in roleNames) { // If the role exists just continue if (await roleManager.RoleExistsAsync(name)) { continue; } // Otherwise create the role var role = new IdentityRole { Name = name }; var result = await roleManager.CreateAsync(role); if (!result.Succeeded) { throw new Exception(string.Join("\n", result.Errors)); } } // Creating admins var adminEmails = new[] { "*****@*****.**" }; foreach (var email in adminEmails) { var foundUser = await userManager.FindByEmailAsync(email); if (foundUser != null) { continue; } else { await NewUser(adminPW, userManager, email); } } // Assigning roles for the admin users foreach (var email in adminEmails) { var adminUser = await userManager.FindByEmailAsync(email); var adminUserRole = await userManager.GetRolesAsync(adminUser); if (adminUserRole.Count > 0) { continue; } else { //foreach (var role in roleNames) //{ // var addToRoleResult = await userManager.AddToRoleAsync(adminUser, role); // if (!addToRoleResult.Succeeded) // { // throw new Exception(string.Join("\n", addToRoleResult.Errors)); // } //} var addToRoleResult = await userManager.AddToRoleAsync(adminUser, "Admin"); var addToRoleResultTeacher = await userManager.AddToRoleAsync(adminUser, "Teacher"); if (!addToRoleResult.Succeeded | !addToRoleResultTeacher.Succeeded) { throw new Exception(string.Join("\n", addToRoleResult.Errors)); } } } // Create teacher var teacherEmails = new[] { "*****@*****.**" }; foreach (var email in teacherEmails) { var foundUser = await userManager.FindByEmailAsync(email); if (foundUser != null) { continue; } else { await NewUser(adminPW, userManager, email); } } // Assigning roles for the teachers users foreach (var email in teacherEmails) { var teacherUser = await userManager.FindByEmailAsync(email); var teacherUserRole = await userManager.GetRolesAsync(teacherUser); if (teacherUserRole.Count > 0) { continue; } else { var addToRoleResult = await userManager.AddToRoleAsync(teacherUser, "Teacher"); if (!addToRoleResult.Succeeded) { throw new Exception(string.Join("\n", addToRoleResult.Errors)); } } } // Faking courses, modules and activities var fake = new Faker(); var r = new Random(); if (!context.Courses.Any()) { var courses = new List <Course>(); for (int i = 0; i < 5; i++) { var course = new Course { CourseName = fake.Company.CompanyName(), StartDate = fake.Date.Future(), EndDate = fake.Date.Future(), Description = fake.Lorem.Paragraph() }; courses.Add(course); } context.AddRange(courses); context.SaveChanges(); } if (!context.Modules.Any()) { var modules = new List <Module>(); for (int i = 0; i < 20; i++) { var getCoursesIds = context.Courses.Select(v => v.CourseId).ToList(); var randomCourseId = getCoursesIds.OrderBy(x => r.Next()).Take(1).FirstOrDefault(); var module = new Module { ModuleName = fake.Company.CatchPhrase(), StartDate = fake.Date.Future(), EndDate = fake.Date.Future(), Description = fake.Lorem.Sentences(), CourseId = randomCourseId }; modules.Add(module); } context.AddRange(modules); context.SaveChanges(); } if (!context.Activities.Any()) { var activities = new List <Activity>(); for (int i = 0; i < 40; i++) { var getModulesIds = context.Modules.Select(v => v.ModuleId).ToList(); var randomModuleId = getModulesIds.OrderBy(x => r.Next()).Take(1).FirstOrDefault(); var activity = new Activity { ActivityName = fake.Hacker.Phrase(), StartDate = fake.Date.Future(), EndDate = fake.Date.Future(), Description = fake.Lorem.Sentences(), ActivityType = (ActivityType)fake.Random.Int(0, 4), ModuleId = randomModuleId }; activities.Add(activity); } context.AddRange(activities); context.SaveChanges(); } // Creating students var studentEmails = new List <string> { }; for (int i = 1; i < 21; i++) { var email = "student" + i + "@lms.se"; studentEmails.Add(email); } foreach (var email in studentEmails) { var foundUser = await userManager.FindByEmailAsync(email); if (foundUser != null) { continue; } else { await NewUser(adminPW, userManager, email); } } // Assigning roles and courses for the students foreach (var email in studentEmails) { var studentUser = await userManager.FindByEmailAsync(email); var studentUserRole = await userManager.GetRolesAsync(studentUser); if (studentUserRole.Count > 0) { continue; } else { var addToRoleResult = await userManager.AddToRoleAsync(studentUser, "Student"); if (!addToRoleResult.Succeeded) { throw new Exception(string.Join("\n", addToRoleResult.Errors)); } // Assigning student to a course var studentUserId = await userManager.GetUserIdAsync(studentUser); var getCoursesIds = context.Courses.Select(v => v.CourseId).ToList(); var randomCourseId = getCoursesIds.OrderBy(x => r.Next()).Take(1).FirstOrDefault(); var studentCourse = new LMSUserCourse { CourseId = randomCourseId, LMSUserId = studentUserId }; context.Add(studentCourse); context.SaveChanges(); } } } }
public async Task <IActionResult> OnPostAsync(string returnUrl = null) { returnUrl = returnUrl ?? Url.Content("~/"); ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList(); if (ModelState.IsValid) { var user = new LMSUser { UserName = Input.Email, Email = Input.Email }; //var result = await _userManager.CreateAsync(user, Input.Password); // Use the adminPW as the default password when creating new users // TODO: Having a default password is a temp solution and should be fixed var defaultPassword = _config["KEY"]; var result = await _userManager.CreateAsync(user, defaultPassword); if (result.Succeeded) { _logger.LogInformation("User created a new account with password."); // Add user to role var userRole = await _userManager.AddToRoleAsync(user, Input.Role); if (!userRole.Succeeded) { throw new Exception(string.Join("\n", userRole.Errors)); } // Add user to course var userCourse = new LMSUserCourse { CourseId = Input.CourseId, LMSUserId = user.Id }; _context.Add(userCourse); _context.SaveChanges(); var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code)); var callbackUrl = Url.Page( "/Account/ConfirmEmail", pageHandler: null, values: new { area = "Identity", userId = user.Id, code = code }, protocol: Request.Scheme); await _emailSender.SendEmailAsync(Input.Email, "Confirm your email", $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>."); if (_userManager.Options.SignIn.RequireConfirmedAccount) { return(RedirectToPage("RegisterConfirmation", new { email = Input.Email })); } else { //await _signInManager.SignInAsync(user, isPersistent: false); return(LocalRedirect(returnUrl)); } } foreach (var error in result.Errors) { ModelState.AddModelError(string.Empty, error.Description); } } // If we got this far, something failed, redisplay form return(Page()); }