Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        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();
                    }
                }
            }
        }
Exemplo n.º 3
0
        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());
        }