예제 #1
0
        public async Task <IActionResult> OnPostAsync(string returnUrl = null)
        {
            returnUrl      = returnUrl ?? Url.Content("~/");
            ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
            if (ModelState.IsValid)
            {
                var user = new NEAUser
                {
                    FirstName = Input.FirstName,
                    LastName  = Input.LastName,
                    UserName  = Input.Email,
                    Email     = Input.Email
                };

                var result = await _userManager.CreateAsync(user, Input.Password);


                await _userManager.AddToRoleAsync(user, Input.AccountType);


                if (result.Succeeded)
                {
                    _logger.LogInformation("User created a new account with password.");

                    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, returnUrl = returnUrl },
                        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, returnUrl = returnUrl }));
                    }
                    //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
            PopulateSelectList();
            return(Page());
        }
        private async Task LoadAsync(NEAUser user)
        {
            var userName = await _userManager.GetUserNameAsync(user);

            var accountType = await _userManager.IsInRoleAsync(user, Constants.StudentRole) ? "Student" : "Teacher";

            var phoneNumber = await _userManager.GetPhoneNumberAsync(user);

            Username    = userName;
            AccountType = accountType;

            Input = new InputModel
            {
                FirstName   = user.FirstName,
                LastName    = user.LastName,
                PhoneNumber = phoneNumber
            };
        }
예제 #3
0
        public string AuthorizeAccessToID(NEAUser teacher, NEAContext context, string classID)
        {
            var list = context.StudentQuestions.ToList();

            var id = UserId;

            var classroom = context.Users
                            .SingleOrDefault(u => u.Id == id)
                            .Enrollments
                            .SingleOrDefault(e => e.ClassroomID == classID)
                            .Classroom;

            if (classroom.UserID == teacher.Id)
            {
                return(UserId);
            }

            return("");
        }
예제 #4
0
        public async Task OnGetAsync(string classId, int?simId, bool?showDetails)
        {
            ClassroomData = new ClassroomIndexData();



            if (User.IsInRole(Constants.StudentRole))
            {
                var userEnrollments = (from e in Context.Enrollments
                                       select e)
                                      .Where(e => e.NEAUserId == UserManager.GetUserId(User));

                var classIDs = await(from e in userEnrollments
                                     select e.ClassroomID)
                               .AsNoTracking()
                               .ToListAsync();

                ClassroomData.Classrooms = await Context.Classrooms
                                           .Include(c => c.Teacher)
                                           .Include(c => c.Enrollments)
                                           .ThenInclude(c => c.NEAUser)
                                           .ThenInclude(c => c.StudentAssignments)
                                           .Include(c => c.Enrollments)
                                           .ThenInclude(c => c.NEAUser)
                                           .ThenInclude(c => c.StudentQuestions)
                                           .Include(c => c.ClassAssignments)
                                           .ThenInclude(c => c.Simulation)
                                           .ThenInclude(c => c.Questions)
                                           .Where(c => classIDs.Contains(c.ClassroomID))
                                           .AsNoTracking()
                                           .ToListAsync();
            }
            else
            {
                ClassroomData.Classrooms = await Context.Classrooms
                                           .Include(c => c.Teacher)
                                           .Include(c => c.Enrollments)
                                           .ThenInclude(c => c.NEAUser)
                                           .ThenInclude(c => c.StudentAssignments)
                                           .Include(c => c.Enrollments)
                                           .ThenInclude(c => c.NEAUser)
                                           .ThenInclude(c => c.StudentQuestions)
                                           .Include(c => c.ClassAssignments)
                                           .ThenInclude(c => c.Simulation)
                                           .ThenInclude(c => c.Questions)
                                           .Where(c => c.UserID == UserManager.GetUserId(User))
                                           .AsNoTracking()
                                           .ToListAsync();
            }


            /*foreach (var item in classroom)
             * {
             *  List<Enrollment> students = await Context.Enrollments
             *              .Where(e => e.ClassroomID == item.ClassroomID)
             *              .AsNoTracking()
             *              .ToListAsync();
             *
             *  ClassroomVM.Add(
             *      new ClassroomVM
             *      {
             *          ID = item.ClassroomID,
             *          Name = item.Name,
             *          Teacher = item.Teacher.LastName + ", " + item.Teacher.FirstName,
             *          StudentCount = students.Count()
             *      }
             *  ) ;
             * }*/

            if (classId != null)
            {
                ClassID = classId;
                Classroom classroom = ClassroomData.Classrooms.Where(c => c.ClassroomID == ClassID).SingleOrDefault();
                if (classroom == null)
                {
                    return;
                }
                ClassroomData.ClassAssignments = classroom.ClassAssignments.Select(c => c);
            }

            if (simId != null)
            {
                SimulatorID = simId.Value;
                ClassAssignment assignment = ClassroomData.ClassAssignments.Where(c => c.SimulationID == SimulatorID).SingleOrDefault();
                if (assignment == null)
                {
                    return;
                }

                if (User.IsInRole(Constants.StudentRole))
                {
                    NEAUser thisuser = ClassroomData.Classrooms
                                       .Single(c => c.ClassroomID == ClassID)
                                       .Enrollments
                                       .Single(e => e.NEAUserId == UserManager.GetUserId(User))
                                       .NEAUser;

                    StudentAssignment?studentAssignment = thisuser
                                                          .StudentAssignments
                                                          .SingleOrDefault(s => s.SimulationID == SimulatorID);


                    ClassroomData.StudentAssignments = new List <StudentAssignmentIndexVM>
                    {
                        new StudentAssignmentIndexVM
                        {
                            StudentName   = thisuser.LastName + ", " + thisuser.FirstName,
                            Percentage    = studentAssignment?.Percentage,
                            DateCompleted = studentAssignment?.DateCompleted,
                            SimulationID  = SimulatorID
                        }
                    };
                }
                else
                {
                    var enrollments = ClassroomData.Classrooms
                                      .Single(c => c.ClassroomID == ClassID)
                                      .Enrollments;

                    var students = from e in enrollments
                                   select e.NEAUser;

                    var studentAssignments = new List <StudentAssignmentIndexVM>();

                    foreach (var item in students)
                    {
                        var studentAssignment = item.StudentAssignments.SingleOrDefault(s => s.SimulationID == SimulatorID);

                        studentAssignments.Add(new StudentAssignmentIndexVM()
                        {
                            StudentName   = item.LastName + ", " + item.FirstName,
                            Percentage    = studentAssignment?.Percentage,
                            DateCompleted = studentAssignment?.DateCompleted,
                            SimulationID  = SimulatorID
                        });
                    }

                    ClassroomData.StudentAssignments = studentAssignments;
                }

                if (showDetails != null && showDetails == true)
                {
                    ShowDetails = showDetails.Value;

                    ClassroomData.Questions = await Context.Questions
                                              .Where(s => s.SimulationID == SimulatorID)
                                              .AsNoTracking()
                                              .ToListAsync();

                    List <NEAUser> students = await(from e in Context.Enrollments
                                                    where e.ClassroomID == ClassID
                                                    select e.NEAUser)
                                              .AsNoTracking()
                                              .ToListAsync();

                    List <StudentQuestion> studentQuestions = await Context.StudentQuestions
                                                              .Include(s => s.NEAUser)
                                                              .ThenInclude(s => s.Enrollments)
                                                              .Where(s => s.SimulationID == SimulatorID)
                                                              .AsNoTracking()
                                                              .ToListAsync();



                    var studentQuestionsVM = new List <StudentQuestionVM>();



                    foreach (var student in students)
                    {
                        var thisStudentsQuestions = studentQuestions.Where(s => s.UserID == student.Id);

                        foreach (var question in ClassroomData.Questions)
                        {
                            var studentQuestion = thisStudentsQuestions.SingleOrDefault(s => s.QIndex == question.QIndex);

                            if (studentQuestion == null)
                            {
                                studentQuestion = new StudentQuestion
                                {
                                    QIndex       = question.QIndex,
                                    SimulationID = SimulatorID,
                                    Answer       = "",
                                    isCorrect    = AnswerType.Unanswered
                                };
                            }

                            var isAuthorized = await AuthorizationService.AuthorizeAsync(User, studentQuestion, Operations.ViewStudentAssignment);

                            if (!isAuthorized.Succeeded)
                            {
                                var enrollment = Context.Enrollments
                                                 .Include(e => e.Classroom)
                                                 .ThenInclude(e => e.Teacher)
                                                 .AsNoTracking()
                                                 .SingleOrDefault(e => e.NEAUserId == student.Id && e.ClassroomID == ClassID);

                                isAuthorized = await AuthorizationService.AuthorizeAsync(User, enrollment, Operations.ViewStudentAssignment);

                                if (!isAuthorized.Succeeded)
                                {
                                    continue;
                                }
                            }
                            studentQuestionsVM.Add(
                                new StudentQuestionVM
                            {
                                UserId      = student.Id,
                                QIndex      = studentQuestion.QIndex,
                                StudentName = student.FirstName + " " + student.LastName,
                                Answer      = studentQuestion.Answer,
                                isCorrect   = studentQuestion.isCorrect,
                                SimID       = SimulatorID
                            });
                        }
                    }

                    ClassroomData.StudentQuestions = studentQuestionsVM;
                }
            }
        }