public async Task <IActionResult> EditStaff([FromRoute] string id, [FromBody] Staff staff)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != staff.StaffID)
            {
                return(BadRequest());
            }

            _context.Entry(staff).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!StaffExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
Example #2
0
        public async Task <IActionResult> Create(SlotRoomsViewModel slotRoomsViewModel)
        {
            // get logged in user
            ApplicationUser currentUser = _context.ApplicationUser
                                          .FirstOrDefault(u => u.Email == HttpContext.User.Identity.Name);

            if (ModelState.IsValid)
            {
                var slot = new Slot
                {
                    StartTime = slotRoomsViewModel.StartTime,
                    RoomID    = slotRoomsViewModel.RoomID,
                    StaffID   = currentUser.Id,
                };

                _context.Add(slot);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }

            // re-fetch the rooms
            var rooms = _context.Room.Select(x => x.RoomID);

            slotRoomsViewModel.Rooms = new SelectList(await rooms.ToListAsync());

            return(View(slotRoomsViewModel));
        }
Example #3
0
        public async Task <IActionResult> EditSlot(string roomid, string startTime, [FromBody][Bind("RoomID,StartTime,StaffID,StudentID")] Slot slot)
        {
            var slotTime = DateTime.ParseExact(startTime, "dd/MM/yyyy HH:mm", null, DateTimeStyles.None);

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (roomid != slot.RoomID && slotTime != slot.StartTime)
            {
                return(BadRequest());
            }

            _context.Entry(slot).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!SlotExists(roomid, slotTime))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
Example #4
0
        public async Task <ActionResult <Slot> > PutSlotStudent(string roomID, DateTime startTime, [FromBody] string studentID)
        {
            var slot = await _context.Slot.FirstOrDefaultAsync(s => s.RoomID == roomID && s.StartTime == startTime);

            if (slot == null)
            {
                return(NotFound());
            }

            if (String.IsNullOrEmpty(studentID))
            {
                slot.StudentID = null;
            }
            else
            {
                var student = await _context.Users.FirstOrDefaultAsync(u => u.SchoolID == studentID);

                if (student == null)
                {
                    return(BadRequest());
                }
                slot.StudentID = student.Id;
            }

            _context.Entry(slot).State = EntityState.Modified;
            await _context.SaveChangesAsync();

            return(NoContent());
        }
Example #5
0
        public async Task <IActionResult> Create([Bind("AdminID,FirstName,LastName,Email")] Admin admin)
        {
            if (ModelState.IsValid)
            {
                _context.Add(admin);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(admin));
        }
Example #6
0
        public async Task <ActionResult <Room> > Post(Room room)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            _context.Room.Add(room);
            await _context.SaveChangesAsync();

            return(CreatedAtAction(nameof(GetRoom), new { id = room.RoomID }, room));
        }
        public async Task <IActionResult> Create([Bind("RoomID,RoomName")] Room room)
        {
            if (ModelState.IsValid)
            {
                if (_context.Room.Any(rm => rm.RoomName == room.RoomName))
                {
                    ModelState.AddModelError("", "Room name already exist");
                    return(View(room));
                }
                else
                {
                    room.RoomName = room.RoomName.ToUpper();
                    _context.Add(room);
                    await _context.SaveChangesAsync();

                    return(RedirectToAction(nameof(Index)));
                }
            }
            return(View(room));
        }
Example #8
0
        public static async Task InitialiseAsync(IServiceProvider serviceProvider)
        {
            using (var userManager = serviceProvider.GetRequiredService <UserManager <ApplicationUser> >())
                using (var roleManager = serviceProvider.GetRequiredService <RoleManager <IdentityRole> >())
                    using (var context = new ASRContext(serviceProvider.GetRequiredService <DbContextOptions <ASRContext> >()))
                    {
                        await InitialiseRolesAsync(roleManager);
                        await InitialiseRoomsAsync(context);

                        await context.SaveChangesAsync();
                    }
        }
        public async Task <IActionResult> Create([Bind("RoomID,StartTime,StaffID,StudentID")] Slot slot, string StartHour)
        {
            slot.StudentID = null;
            slot.StartTime = slot.StartTime + TimeSpan.Parse(StartHour);

            if (ModelState.IsValid)
            {
                _context.Add(slot);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }

            //Check if room is already selected
            if (string.IsNullOrEmpty(slot.RoomID))
            {
                ModelState.AddModelError("", "Please select a room");
            }

            ViewData["RoomID"]  = new SelectList(_context.Room, "RoomID", "RoomName", slot.RoomID);
            ViewData["StaffID"] = new SelectList(_context.Staff, "StaffID", "StaffID", slot.StaffID);

            return(View(slot));
        }
Example #10
0
        public async Task <IActionResult> OnPostConfirmationAsync(string returnUrl = null)
        {
            returnUrl = returnUrl ?? Url.Content("~/");
            // Get the information about the user from the external login provider
            var info = await _signInManager.GetExternalLoginInfoAsync();

            if (info == null)
            {
                ErrorMessage = "Error loading external login information during confirmation.";
                return(RedirectToPage("./Login", new { ReturnUrl = returnUrl }));
            }

            if (ModelState.IsValid)
            {
                // If email is already in use for login
                if (_context.Users.Any(e => e.Email == Input.Email.ToLower()))
                {
                    ModelState.AddModelError("", "This email has already exist");
                    return(Page());
                }

                //if email is new but user id already exist
                if (_context.Users.Any(e => e.StaffID == Input.UserID.ToLower()) || _context.Users.Any(e => e.StudentID == Input.UserID.ToLower()))
                {
                    ModelState.AddModelError("", "This user ID has already exist");
                    return(Page());
                }


                if ((staffEmailRegex.IsMatch(Input.Email) && !staffIDRegex.IsMatch(Input.UserID)) ||
                    (studentEmailRegex.IsMatch(Input.Email) && !studentIDRegex.IsMatch(Input.UserID)))
                {
                    ModelState.AddModelError("", "Email and ID type does not match");
                    return(Page());
                }

                if (((staffEmailRegex.IsMatch(Input.Email)) && (Input.Email.Substring(0, 6).ToLower() != Input.UserID.ToLower())) ||
                    ((studentEmailRegex.IsMatch(Input.Email)) && (Input.Email.Substring(0, 8).ToLower() != Input.UserID.ToLower())))
                {
                    ModelState.AddModelError("", "Please use your own RMIT credentials only");
                    return(Page());
                }

                var user = new AccountUser {
                    UserName = Input.Email.ToLower(), Email = Input.Email.ToLower()
                };
                var result = await _userManager.CreateAsync(user);

                if (staffEmailRegex.IsMatch(Input.Email))
                {
                    await _userManager.AddToRoleAsync(user, Constants.StaffRole);

                    var staff = new Staff
                    {
                        StaffID   = Input.UserID.ToLower(),
                        FirstName = Input.FirstName,
                        Email     = Input.Email,
                    };
                    //Adding staff into staff table
                    _context.Add(staff);
                    await _context.SaveChangesAsync();

                    //Adding the staffID column at AspNetUser Table
                    _context.Users.FirstOrDefault(u => u.Email == Input.Email.ToLower()).StaffID = staff.StaffID;
                    await _context.SaveChangesAsync();
                }
                else if (studentEmailRegex.IsMatch(Input.Email))
                {
                    await _userManager.AddToRoleAsync(user, Constants.StudentRole);

                    var student = new Student
                    {
                        StudentID = Input.UserID.ToLower(),
                        FirstName = Input.FirstName,
                        Email     = Input.Email,
                    };
                    //Adding student into student table
                    _context.Add(student);
                    await _context.SaveChangesAsync();

                    //Adding the studentID column at AspNetUser Table
                    _context.Users.FirstOrDefault(u => u.Email == Input.Email.ToLower()).StudentID = student.StudentID;
                    await _context.SaveChangesAsync();
                }
                else
                {
                    throw new Exception();
                }


                if (result.Succeeded)
                {
                    result = await _userManager.AddLoginAsync(user, info);

                    if (result.Succeeded)
                    {
                        // Initial login after sign in with external provider
                        if (staffEmailRegex.IsMatch(Input.Email))
                        {
                            returnUrl = Url.Content($"~/Staffs/Index/{Input.Email}");
                        }
                        else if (studentEmailRegex.IsMatch(Input.Email))
                        {
                            returnUrl = Url.Content($"~/Students/Index/{Input.Email}");
                        }

                        await _signInManager.SignInAsync(user, isPersistent : false);

                        _logger.LogInformation("User created an account using {Name} provider.", info.LoginProvider);

                        ViewData["Message"] = "You have been successfully registered into our system";
                        ViewData["role"]    = staffEmailRegex.IsMatch(Input.Email) ? "Staffs" : studentEmailRegex.IsMatch(Input.Email) ? "Students" : "Home";
                        ViewData["userID"]  = Input.Email;
                        return(Page());
                        //return LocalRedirect(returnUrl);
                    }
                }
                foreach (var error in result.Errors)
                {
                    ModelState.AddModelError(string.Empty, error.Description);
                }
            }

            LoginProvider = info.LoginProvider;
            ReturnUrl     = returnUrl;
            return(Page());
        }
        public async Task <IActionResult> OnPostAsync(string returnUrl = null)
        {
            returnUrl = returnUrl ?? Url.Content("~/");
            if (ModelState.IsValid)
            {
                // If email is already in use for login
                if (_context.Users.Any(e => e.Email == Input.Email.ToLower()))
                {
                    ModelState.AddModelError("", "This email has already exist");
                    return(Page());
                }

                //if email is new but user id already exist
                if (_context.Users.Any(e => e.StaffID == Input.UserID.ToLower()) || _context.Users.Any(e => e.StudentID == Input.UserID.ToLower()))
                {
                    ModelState.AddModelError("", "This user ID has already exist");
                    return(Page());
                }


                if ((staffEmailRegex.IsMatch(Input.Email) && !staffIDRegex.IsMatch(Input.UserID)) ||
                    (studentEmailRegex.IsMatch(Input.Email) && !studentIDRegex.IsMatch(Input.UserID)))
                {
                    ModelState.AddModelError("", "Email and ID type does not match");
                    return(Page());
                }

                if (((staffEmailRegex.IsMatch(Input.Email)) && (Input.Email.Substring(0, 6).ToLower() != Input.UserID.ToLower())) ||
                    ((studentEmailRegex.IsMatch(Input.Email)) && (Input.Email.Substring(0, 8).ToLower() != Input.UserID.ToLower())))
                {
                    ModelState.AddModelError("", "Please use your own RMIT credentials only");
                    return(Page());
                }

                var user = new AccountUser {
                    UserName = Input.Email.ToLower(), Email = Input.Email.ToLower()
                };
                var result = await _userManager.CreateAsync(user, Input.Password);

                if (staffEmailRegex.IsMatch(Input.Email))
                {
                    await _userManager.AddToRoleAsync(user, Constants.StaffRole);

                    var staff = new Staff
                    {
                        StaffID   = Input.UserID.ToLower(),
                        FirstName = Input.FirstName,
                        LastName  = Input.LastName,
                        Email     = Input.Email.ToLower(),
                    };
                    //Adding staff into staff table
                    _context.Add(staff);
                    await _context.SaveChangesAsync();

                    //Adding the staffID column at AspNetUser Table
                    _context.Users.FirstOrDefault(u => u.Email == Input.Email.ToLower()).StaffID = staff.StaffID;
                    await _context.SaveChangesAsync();
                }
                else if (studentEmailRegex.IsMatch(Input.Email))
                {
                    await _userManager.AddToRoleAsync(user, Constants.StudentRole);

                    var student = new Student
                    {
                        StudentID = Input.UserID.ToLower(),
                        FirstName = Input.FirstName,
                        LastName  = Input.LastName,
                        Email     = Input.Email.ToLower(),
                    };
                    //Adding student into student table
                    _context.Add(student);
                    await _context.SaveChangesAsync();

                    //Adding the studentID column at AspNetUser Table
                    _context.Users.FirstOrDefault(u => u.Email == Input.Email.ToLower()).StudentID = student.StudentID;
                    await _context.SaveChangesAsync();
                }
                else
                {
                    throw new Exception();
                }


                if (result.Succeeded)
                {
                    _logger.LogInformation("User created a new account with password.");
                    await _signInManager.SignInAsync(user, isPersistent : false);

                    ViewData["Message"] = "You have been successfully registered into our system";
                    ViewData["role"]    = staffEmailRegex.IsMatch(Input.Email) ? "Staffs" : studentEmailRegex.IsMatch(Input.Email) ? "Students" : "Home";
                    ViewData["userID"]  = Input.Email;
                    return(Page());
                }
                foreach (var error in result.Errors)
                {
                    ModelState.AddModelError(string.Empty, error.Description);
                }
            }

            // If we got this far, something failed, redisplay form
            return(Page());
        }