public IActionResult WaitScreen(int id, int sessionId)
        {
            //Already chose a group
            CheckForCurrentGroup(sessionId);

            BoBSession session = _boBSessionRepository.GetById(sessionId);

            ViewData["freejoin"] = session.IsFreeJoinEnabled;

            //Make sure the chosen groupId is from the current session
            BoBGroup group = _boBSessionRepository.GetSpecificGroupFromSession(sessionId, id);

            //Chosen group is not from this session
            if (group == null)
            {
                TempData["bruteforce"] = "Groep is niet van de geselecteerde sessie";
                return(RedirectToAction("Index", "Home"));
            }

            //Chosen group has already been chosen
            try
            {
                session.SelectGroup(group);
            }
            catch (InvalidOperationException ex)
            {
                TempData["groupchosen"] = ex.Message;
                return(RedirectToAction("Index", null));
            }

            //Save Changes to database
            _boBSessionRepository.SaveChanges();
            HttpContext.Session.SetInt32("groupId", group.Id);
            return(RedirectToAction("WaitScreen"));
        }
        public IActionResult ValidateAccessCode(int sessionId, int groupId, int accessCode)
        {
            BoBGroup group = _bobSessionRepository.GetSpecificGroupFromSession(sessionId, groupId);

            //Get next assignment
            Assignment assignment = group.NextAssignment;

            //Code is wrong
            try
            {
                if (!assignment.ValidateCode(accessCode))
                {
                    //Try again
                    TempData["wrongaccess"] = true;
                    return(RedirectToAction("Action", new RouteValueDictionary
                    {
                        { "referenceNumber", assignment.ReferenceNr }
                    }));
                }
            }
            catch (InvalidOperationException ex)
            {
                //Groupstate not valid
                TempData["blocked"] = "Roep de leerkracht om te vragen om je te deblokkeren";
                return(RedirectToAction("Index"));
            }

            _bobSessionRepository.SaveChanges();
            return(RedirectToAction("Index"));
        }
        public IActionResult ValidateAnswer(int sessionId, int groupId, String answer)
        {
            //Get session and group from repo
            BoBSession session = _bobSessionRepository.GetById(sessionId);
            BoBGroup   group   = _bobSessionRepository.GetSpecificGroupFromSession(sessionId, groupId);
            bool       correct = false;

            //Get the next assignment, cannot use assignment method from repo because we need the groupstate to check
            Assignment assignment = group.NextAssignment;

            try
            {
                //Validate answer
                correct = session.ValidateAnswer(group, assignment, answer);
            }
            catch (InvalidOperationException ex)
            {
                //Groupstate not valid
                TempData["blocked"] = "Roep de leerkracht om te vragen om je te deblokkeren";
                return(RedirectToAction("Index"));
            }

            _bobSessionRepository.SaveChanges();

            //Is the answer incorrect?
            if (!correct)
            {
                //Show last answer
                TempData["wronganswer"] = answer + " was niet het juiste antwoord";

                //Is group blocked?
                if (group.Status == GroupStatus.Blocked)
                {
                    //yep
                    TempData["blocked"] = "Je bent geblokkeerd";
                }

                //Is feedback enabled and answercount higher than 3?
                if (session.IsFeedbackEnabled && group.NextAssignment.WrongCount >= 3)
                {
                    TempData["feedback"] = "Bekijk de feedback om dit hoofdstuk terug op te helderen";
                }

                //Try again
                return(RedirectToAction("Index"));
            }

            //Answer is correct, check if we need to show the next action
            if (session.AreActionsEnabled && !session.IsDistant)
            {
                return(RedirectToAction("Action", new RouteValueDictionary
                {
                    { "referenceNumber", assignment.ReferenceNr }
                }));
            }

            //Answer is correct, actions not enabled, show next assignment
            return(RedirectToAction("Index"));
        }
        public IActionResult BlockGroup(int groupId, int sessionId)
        {
            BoBGroup group = _boBSessionRepository.GetSpecificGroupFromSession(sessionId, groupId);

            group.Block();
            _boBSessionRepository.SaveChanges();
            return(RedirectToAction("SessionDetail", "Session"));
        }
        public IActionResult DeblockGroup(int groupId, int sessionId)
        {
            BoBGroup group = _boBSessionRepository.GetSpecificGroupFromSession(sessionId, groupId);

            if (group.Status == GroupStatus.Blocked)
            {
                group.Deblock();
                _boBSessionRepository.SaveChanges();
            }
            return(RedirectToAction("SessionDetail", "Session"));
        }
        public IActionResult BlockCurrentGroup(int groupId, int sessionId)
        {
            //Get group
            BoBGroup group = _bobSessionRepository.GetSpecificGroupFromSession(sessionId, groupId);

            //Block group, no need for try catch, method only called when group would be in 1 of 2 states, blocked and Locked both states implement Block
            group.Block();
            _bobSessionRepository.SaveChanges();

            //Go back to the assignment
            return(RedirectToAction("Index", "Assignment"));
        }
示例#7
0
        public DummyApplicationDbContext()
        {
            //Invullen
            this._sessions = new BoBSession[4];
            _sessions[0]   = new BoBSession();
            //invalid
            _sessions[1] = new BoBSession();
            _sessions[2] = new BoBSession();
            _sessions[3] = new BoBSession();

            _sessions[0].SessionStatus = SessionStatus.Scheduled;
            _sessions[1].SessionStatus = SessionStatus.Activated;
            _sessions[2].SessionStatus = SessionStatus.Closed;
            _sessions[3].SessionStatus = SessionStatus.Started;

            Assignment1 = new Assignment
            {
                Exercise = new Exercise()
                {
                    Answer = "10"
                },
                GroupOperation = new GroupOperation()
                {
                    AnswerBehaviour = new MinBehaviour(),
                    ValueString     = "5"
                }
            };

            LazyAssignment = new Assignment
            {
                Exercise = new Exercise()
                {
                    Answer = "10"
                },
                GroupOperation = new GroupOperation()
                {
                    GroupOperationCategory = GroupOperationCategory.Min,
                    ValueString            = "5"
                }
            };
            SelectedGroup = new BoBGroup
            {
                Path = new SessionPath
                {
                    Assignments = new List <Assignment>()
                    {
                        Assignment1
                    }
                },
            };
            SelectedGroup.GroupState = new LockedState(SelectedGroup);
        }
        public void TripleWrong_BlocksGroup()
        {
            BoBGroup   group      = _dummyContext.SelectedGroup;
            Assignment assignment = _dummyContext.Assignment1;

            for (int i = 1; i <= 3; i++)
            {
                Assert.False(group.ValidateAnswer(assignment, "nope", true, true));
                Assert.Equal(i, assignment.WrongCount);
            }
            Assert.Equal(GroupStatus.Blocked, group.Status);
            Assert.Equal(typeof(BlockedState), group.GroupState.GetType());
            Assert.Throws <InvalidOperationException>(() => group.ValidateAnswer(assignment, "5", true, true));
        }
        private int?CheckForCurrentGroup(int sessionId)
        {
            //Get current groupId
            int?       groupId = HttpContext.Session.GetInt32("groupId");
            BoBSession session = _boBSessionRepository.GetById(sessionId);

            //Deselect current group, there is a current group
            if (groupId.HasValue)
            {
                int      groupIdVal = groupId.Value;
                BoBGroup group      = _boBGroupRepository.GetById(groupIdVal);
                session.DeselectGroup(group);
                _boBGroupRepository.SaveChanges();
                TempData["groupchosen"] = "De vorig geselecteerde groep is nu niet meer geselecteerd!";
                HttpContext.Session.Remove("groupId");
            }
            return(groupId);
        }
        public IActionResult WaitScreen(int sessionId)
        {
            BoBSession boBSession = _boBSessionRepository.GetById(sessionId);

            //Are students able to join?
            ViewData["freejoin"] = boBSession.IsFreeJoinEnabled;

            //Could use filter
            int?groupId = HttpContext.Session.GetInt32("groupId");

            if (!groupId.HasValue)
            {
                TempData["groupchosen"] = "Kies een groep aub";
                return(RedirectToAction("Index"));
            }


            BoBGroup group = _boBGroupRepository.GetById(groupId.Value);

            return(View(group));
        }
        public IActionResult AddToGroup(int sessionId, int groupId, String studentId)
        {
            //Get student from class from session
            Student student = _boBSessionRepository.GetStudentFromSession(sessionId, studentId);

            if (student == null)
            {
                TempData["nostudent"] = "Student bestaat niet :'(";
                return(RedirectToAction("WaitScreen"));
            }
            //If null redirect and tempdat
            //Add student from "" to group
            if (_boBSessionRepository.IsStudentInGroup(sessionId, studentId))
            {
                TempData["nostudent"] = "Student zit al in een groep:'(";
                return(RedirectToAction("WaitScreen"));
            }
            BoBGroup group = _boBSessionRepository.GetSpecificGroupFromSession(sessionId, groupId);

            group.AddStudent(student);
            //Save changes
            _boBSessionRepository.SaveChanges();
            return(RedirectToAction("WaitScreen"));
        }
        public static GroupState CreateState(BoBGroup group, GroupStatus status)
        {
            GroupState state = null;

            switch (status)
            {
            case GroupStatus.NotSelected:
                state = new NotSelectedState(group);
                break;

            case GroupStatus.Selected:
                state = new SelectedState(group);
                break;;

            case GroupStatus.Locked:
                state = new LockedState(group);
                break;

            case GroupStatus.Blocked:
                state = new BlockedState(group);
                break;
            }
            return(state);
        }
示例#13
0
 public override bool ValidateAnswer(BoBGroup group, Assignment assignment, string answer)
 {
     return(group.ValidateAnswer(assignment, answer, !Session.IsDistant && Session.AreActionsEnabled, !Session.IsFeedbackEnabled));
 }
示例#14
0
 public LockedState(BoBGroup group) : base(group)
 {
 }
 public override void DeselectGroup(BoBGroup group)
 {
     group.Deselect();
 }
 public override void SelectGroup(BoBGroup group)
 {
     group.Select();
 }
示例#17
0
 public override bool ValidateCode(BoBGroup group, Assignment assignment, int code)
 {
     return(group.ValidateCode(assignment, code));
 }
示例#18
0
 public virtual void SelectGroup(BoBGroup group) => throw new InvalidOperationException("De sessie is momenteel niet actief");
示例#19
0
 public virtual void DeselectGroup(BoBGroup group) => throw new InvalidOperationException("De sessie is momenteel bezig dus kan de groep niet gewijzigd worden");
示例#20
0
 protected GroupState(BoBGroup group)
 {
     Group = group;
 }
示例#21
0
 public virtual Boolean ValidateCode(BoBGroup group, Assignment assignment, int code) => throw new InvalidOperationException();
示例#22
0
 public virtual Boolean ValidateAnswer(BoBGroup group, Assignment assignment, String answer) => throw new InvalidOperationException();
 public SelectedState(BoBGroup group) : base(group)
 {
 }
示例#24
0
 public GroupTest()
 {
     _group = new BoBGroup();
 }