Example #1
0
        public ActionResult EndQuiz(int SessionId)
        {
            //ToDo: kad user klikne na zavrsi button ovde ode request, popune se svi podaci na sesiji i pokaze se useru result screen
            QuizSession session = db.QuizSessions.Include(x => x.PupilAnswers).Where(x => x.Id == SessionId).FirstOrDefault();

            session.FinishedAt = DateTime.Now;
            foreach (var answer in session.PupilAnswers)
            {
                if (answer.AndsweredCorrectly.HasValue && answer.AndsweredCorrectly.Value)
                {
                    session.CorrectAnswers++;
                }
                else
                {
                    session.WrongAnswers++;
                }
            }

            db.SaveChanges();

            QuizSession LastSession = db.QuizSessions.Include(x => x.Quiz).Include(x => x.User).ToList().Last();

            if (!(Autentifikacija.GetLogiraniKorisnik(HttpContext).Id == LastSession.UserId && LastSession.Id == SessionId))
            {
                return(RedirectToAction("Index", "Home"));
            }

            return(View("Results", LastSession));
        }
        public async Task <IActionResult> GetQuizStatus(Guid id)
        {
            string activeQuizId = HttpContext.Session.GetString("activeQuizId");

            if (activeQuizId == null)
            {
                HttpContext.Session.SetString("activeQuizId", id.ToString());
            }

            Quiz quiz = await _db.Quizzes.FirstOrDefaultAsync(q => q.Id == id);

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

            if (quiz.State == "Stopped")
            {
                return(Ok(new QuizStatusModel
                {
                    Status = "Stopped",
                    CurrentQuestion = null
                }));
            }

            QuizSession session = await _db.QuizSessions
                                  .Include(s => s.CurrentQuestion)
                                  .ThenInclude(q => q.Choices)
                                  .Where(s => s.EndedAt == null && s.QuizId == id)
                                  .SingleAsync();

            Question question        = session.CurrentQuestion;
            int?     timeLeftSeconds = null;

            if (session.QuestionTimeEndsAt.HasValue)
            {
                TimeSpan remainingTime = session.QuestionTimeEndsAt.Value.Subtract(DateTimeOffset.UtcNow);
                timeLeftSeconds = (int)remainingTime.TotalSeconds;
                if (timeLeftSeconds < 0)
                {
                    timeLeftSeconds = 0;
                }
            }
            return(Ok(new QuizStatusModel()
            {
                Status = quiz.State,
                CurrentQuestion = new QuestionModel()
                {
                    Id = question.Id,
                    MultipleCorrectAnswers = question.MultipleCorrectAnswers,
                    Text = question.Text,
                    TimeLeftSeconds = timeLeftSeconds,
                    Choices = question.Choices.Select(c => new ChoiceModel()
                    {
                        Id = c.Id,
                        Text = c.Text
                    }).ToList()
                }
            }));
        }
        public async Task <IActionResult> SubmitAnswer(Guid id, [FromBody] IList <Guid> chosenAnswers)
        {
            //Find the current question in the given quiz
            QuizSession session = await _db.QuizSessions
                                  .Where(s => s.EndedAt == null && s.QuizId == id)
                                  .SingleAsync();

            if (session.CurrentQuestionId.HasValue == false)
            {
                return(BadRequest());
            }

            string userId = HttpContext.Session.Id;
            //Assign a new answer for this session id on that question
            var answer = new Answer
            {
                Id              = Guid.NewGuid(),
                QuestionId      = session.CurrentQuestionId.Value,
                SessionId       = session.Id,
                UserId          = userId,
                SelectedChoices = chosenAnswers.Select(choiceId => new SelectedAnswer()
                {
                    ChoiceId = choiceId
                }).ToList()
            };

            _db.Answers.Add(answer);
            await _db.SaveChangesAsync();

            return(Ok());
        }
Example #4
0
        public IActionResult Previous(int id)
        {
            var session = new QuizSession(HttpContext.Session);

            //get list of questions from QuestionViewModel in session
            var listOfQuestions = session.GetMyQuestionViewModel();

            //get index of question displayed on the screen
            int index = listOfQuestions.FindIndex(q => q.QuestionId == id);

            //get previous question
            var quesVM = listOfQuestions[index - 1];

            if (index <= 1)
            {
                ViewBag.Previous = false;
            }
            else
            {
                ViewBag.Previous = true;
            }

            ViewBag.Action = "Next";
            ViewBag.QuesNo = index;

            return(View("Index", quesVM));
        }
Example #5
0
        public IActionResult Index()
        {
            var session   = new QuizSession(HttpContext.Session);
            var questions = context.Questions.OrderBy(q => Guid.NewGuid()).Take(10).ToList();

            session.SetMyQuestions(questions);

            return(View());
        }
Example #6
0
        public PartialViewResult StartQuiz(int QuizvId)
        {
            NewSessionViewModel vm = new NewSessionViewModel();
            Quiz q = db.Quizes.Include(x => x.Teacher).Include(x => x.Questions).Where(x => x.vId == QuizvId).FirstOrDefault();

            vm.vId       = q.vId;
            vm.Teacher   = q.Teacher.Name;
            vm.Name      = q.Name;
            vm.CreatedAt = q.CreatedAt;

            QuizSession session = new QuizSession();

            session.QuizId         = q.Id;
            session.StartedAt      = DateTime.Now;
            session.UserId         = Autentifikacija.GetLogiraniKorisnik(HttpContext).Id;
            session.WrongAnswers   = 0;
            session.CorrectAnswers = 0;

            db.QuizSessions.Add(session);
            db.SaveChanges();

            vm.SessionId = session.Id;

            int i = 1;

            foreach (var question in q.Questions)
            {
                session.PupilAnswers.Add(new Answer
                {
                    AndsweredCorrectly = null,
                    QuestionId         = question.Id,
                    QuestionOptionId   = null,
                    QuizSessionId      = session.Id,
                    SeqNumber          = i
                });
                i++;
            }

            db.SaveChanges();

            vm.CurrentQuestion = q.Questions.Where(qu => qu.Id == session.PupilAnswers.Where(pa => pa.SeqNumber == 1).First().QuestionId)
                                 .Select(x => new NewSessionViewModel.QuestionInfo
            {
                Id = x.Id,
                PossibleAnswers = db.QuestionOptions.Where(qo => qo.QuestionId == x.Id).Select(y => new NewSessionViewModel.QuestionInfo.OptionInfo
                {
                    Id   = y.Id,
                    Text = y.Text
                }).ToList(),
                Text           = x.Text,
                SeqNumber      = 1,
                IsLastQuestion = false
            }).FirstOrDefault();

            return(PartialView("_QuizQuestionPartial", vm));
        }
        public async Task <ActionResult <QuizSession> > PostQuizSession(QuizSession quizSession)
        {
            var entity = _mapper.Map(quizSession);

            entity.AppUserId = User.UserGuidId();
            _uow.QuizSessions.Add(entity);
            await _uow.SaveChangesAsync();

            Console.WriteLine(entity.Id);
            return(CreatedAtAction("GetQuizSession", new { id = entity.Id }, _mapper.Map(entity)));
        }
        public async Task <IActionResult> PutQuizSession(Guid id, QuizSession quizSession)
        {
            if (id != quizSession.Id)
            {
                return(BadRequest());
            }

            var dalEntity = _mapper.Map(quizSession);

            dalEntity.AppUserId = User.UserGuidId();
            await _uow.QuizSessions.UpdateAsync(dalEntity);

            await _uow.SaveChangesAsync();

            return(NoContent());
        }
        public async Task <IActionResult> StartQuiz(Guid id)
        {
            //Check the quiz is one owned by the user's tenant
            Quiz quiz = await _db.Quizzes
                        .Include(q => q.Questions)
                        .ThenInclude(q => q.Choices)
                        .FirstOrDefaultAsync(q => q.Id == id);

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

            if (User.FindFirst("http://schemas.microsoft.com/identity/claims/tenantid")?.Value != quiz.TenantId)
            {
                return(NotFound());
            }

            //Change status to "Started"
            quiz.State = "Started";

            Question firstQuestion = quiz.Questions.OrderBy(q => q.Id).First();

            //Create the session, assign the first question
            var session = new QuizSession()
            {
                Id = Guid.NewGuid(),
                CurrentQuestionId = firstQuestion.Id,
                StartedAt         = DateTimeOffset.UtcNow,
                QuizId            = id
            };

            //Setup the ending time in the session and fire off a delayed message
            if (firstQuestion.TimeLimitSeconds > 0)
            {
                session.QuestionTimeEndsAt =
                    DateTimeOffset.UtcNow.AddSeconds(firstQuestion.TimeLimitSeconds);
            }

            _db.QuizSessions.Add(session);
            await _db.SaveChangesAsync();

            //Notify the group of clients subscribed to the quiz of the question
            await NotifyNextQuestionAsync(id, firstQuestion);

            return(Ok());
        }
Example #10
0
        public IActionResult Index()
        {
            var session = new QuizSession(HttpContext.Session);

            //get first question
            var question = session.GetMyQuestions().FirstOrDefault();

            ViewBag.Previous = false;
            ViewBag.Action   = "Next";
            ViewBag.QuesNo   = 1;

            List <QuizViewModel> quesVMList = new List <QuizViewModel>();

            //get QuestionViewModel for the question
            var quesVM = GetQuestionViewModel(question);

            //adding first question to list in session
            quesVMList.Add(quesVM);
            session.SetMyQuestionViewModel(quesVMList);

            return(View(quesVM));
        }
        //[Authorize("goToNextQuestion")]
        public async Task <IActionResult> GoToNextQuestion(Guid id)
        {
            //Get the quiz, check it is running
            Quiz quiz = await _db.Quizzes
                        .Include(q => q.Questions)
                        .ThenInclude(q => q.Choices)
                        .FirstOrDefaultAsync(q => q.Id == id);

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

            if (User.FindFirst("http://schemas.microsoft.com/identity/claims/tenantid")?.Value != quiz.TenantId)
            {
                return(NotFound());
            }

            if (quiz.State != "Started")
            {
                return(BadRequest());
            }

            //Get next question
            QuizSession session = await _db.QuizSessions
                                  .Where(s => s.EndedAt == null && s.QuizId == id && s.CurrentQuestionId != null)
                                  .SingleAsync();

            Question nextQuestion = quiz.Questions
                                    .OrderBy(q => q.Id)
                                    .FirstOrDefault(q => q.Id.CompareTo(session.CurrentQuestionId.Value) > 0);

            //If there is one
            if (nextQuestion != null)
            {
                //  Do same things as when quiz was started, update the session
                //  and signal the clients
                session.CurrentQuestionId = nextQuestion.Id;
                if (nextQuestion.TimeLimitSeconds > 0)
                {
                    session.QuestionTimeEndsAt = DateTimeOffset.UtcNow.AddSeconds(nextQuestion.TimeLimitSeconds);
                }
                await NotifyNextQuestionAsync(id, nextQuestion);

                await _db.SaveChangesAsync();
            }
            else
            {
                //  quiz is over
                //  update status to stopped, end the session
                quiz.State                = "Stopped";
                session.EndedAt           = DateTimeOffset.UtcNow;
                session.CurrentQuestionId = null;
                await _db.SaveChangesAsync();

                //  send a message to all clients
                await _hub.Clients.Group(id.ToString()).QuizOver();

                //  erase the group created for the quiz?
            }

            return(Ok());
        }
Example #12
0
        public async Task <ActionResult> LaunchQuiz(int QuizId, string code)
        //public ActionResult LaunchQuiz(int QuizId, string code)
        {
            //newException.AddDummyException("Quiz ID First - " + Convert.ToString(QuizId));
            bool isPlek = false;

            try
            {
                TblUser sessionUser = (TblUser)Session["UserSession"];
                if (string.IsNullOrEmpty(code))
                {
                    QuizSession quizForSession = new QuizSession();
                    quizForSession.QuizId = Convert.ToInt32(QuizId);
                    quizForSession.isUsed = false;
                    lstQuiz.Add(quizForSession);
                    Session["QuizId"] = lstQuiz;

                    if (string.IsNullOrEmpty(Convert.ToString(Session["QuizId"])))
                    {
                        newException.AddDummyException("Quiz Id in LaunchQuiz is Null");
                    }
                }
                List <TblQuiz> lstAllQuiz = new List <TblQuiz>();
                if (sessionUser == null)
                {
                    TenantRepository tr            = new TenantRepository();
                    List <TblTenant> tenantDetails = new List <TblTenant>();
                    string           host          = Request.Url.Host;

                    var tenantList1 = tr.VerifyTenantDomain(host);
                    if (tenantList1.Count > 0)
                    {
                        if (tenantList1[0].TenantId == 6)
                        {
                            if (string.IsNullOrEmpty(code))
                            {
                                return(Redirect("https://pumplace.plek.co/oidc/auth?client_id=1663f8ca-7b8a-42eb-ae3b-845e32be1baf&scope=openid&response_type=code&redirect_uri=https://quiz.rockettech.co.nz/"));
                            }
                            else
                            {
                                using (var client = new HttpClient())
                                {
                                    client.DefaultRequestHeaders.Accept.Clear();
                                    client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
                                    client.DefaultRequestHeaders.Add("Access-Control-Allow-Origin", "*");
                                    string tokenApi = "https://pumplace.plek.co/oidc/token";
                                    var    values   = new Dictionary <string, string>();
                                    values.Add("client_id", "1663f8ca-7b8a-42eb-ae3b-845e32be1baf");
                                    values.Add("client_secret", "TZD4Jr837e6uymsJdyxH2jk8qxGQiK7gXDCmYqtC");
                                    values.Add("grant_type", "authorization_code");
                                    values.Add("code", code);
                                    values.Add("redirect_uri", "https://quiz.rockettech.co.nz/");

                                    var content = new FormUrlEncodedContent(values);

                                    var responseTask = await client.PostAsync(tokenApi, content);

                                    var result = await responseTask.Content.ReadAsStringAsync();

                                    var    data  = (JObject)JsonConvert.DeserializeObject(result);
                                    string token = data["access_token"].Value <string>();//Access Token Received

                                    //Now get User Details
                                    string userApi = "https://pumplace.plek.co/oidc/me";

                                    client.DefaultRequestHeaders.Accept.Clear();
                                    client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
                                    client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);

                                    HttpResponseMessage response = await client.GetAsync(userApi);

                                    if (response.IsSuccessStatusCode)
                                    {
                                        string jsondata = await response.Content.ReadAsStringAsync();

                                        var    userData = (JObject)JsonConvert.DeserializeObject(jsondata);
                                        string email    = userData["email"].Value <string>();
                                        string name     = userData["username"].Value <string>();

                                        var userId = ur.IsUserExist(email, Request.Url.Host);

                                        if (userId == 0)
                                        {
                                            try
                                            {
                                                //Create user
                                                TblUser newUser = new TblUser();
                                                newUser.FirstName = name;
                                                newUser.EmailId   = email;
                                                newUser.RoleId    = 3;
                                                newUser.IsActive  = true;
                                                newUser.CreatedBy = 1;
                                                CommonFunctions common = new CommonFunctions();
                                                newUser.Password = common.GetEncodePassword("123456");


                                                var tenantList = tr.VerifyTenantDomain(Request.Url.Host);
                                                newUser.TenantId = tenantList[0].TenantId;

                                                var newUserId = ur.AddUser(newUser);


                                                if (newUserId > 0)
                                                {
                                                    //Assign Quiz to Newly Created User
                                                    //newException.AddDummyException("111 - " + Convert.ToString(QuizId));
                                                    var objQuiz = quizRepository.GetQuizByID(Convert.ToInt32(QuizId));
                                                    if (objQuiz != null)
                                                    {
                                                        if (objQuiz[0] != null)
                                                        {
                                                            if (objQuiz[0].TenantId == 6)
                                                            {
                                                                var assign = quizRepository.AssignQuiz(Convert.ToInt32(QuizId), newUserId, null);
                                                            }
                                                        }
                                                    }
                                                    userId = newUserId;
                                                }
                                            }
                                            catch (Exception ex)
                                            {
                                                newException.AddException(ex);
                                            }
                                        }
                                        else
                                        {
                                            //check Quiz assigned or not

                                            var isAssigned = quizRepository.CheckQuizAssignedUser(Convert.ToInt32(QuizId), userId);
                                            if (!isAssigned)
                                            {
                                                newException.AddDummyException("222 - " + QuizId);
                                                var objQuiz = quizRepository.GetQuizByID(Convert.ToInt32(QuizId));
                                                if (objQuiz != null)
                                                {
                                                    if (objQuiz[0] != null)
                                                    {
                                                        if (objQuiz[0].TenantId == 6)
                                                        {
                                                            var assign = quizRepository.AssignQuiz(Convert.ToInt32(QuizId), userId, null);
                                                        }
                                                    }
                                                }
                                            }
                                        }

                                        List <TblUser> tblUser = ur.GetUserById(userId);
                                        Session["UserSession"] = tblUser[0];
                                        lstAllQuiz             = quizRepository.GetQuizForLaunch(Convert.ToInt32(QuizId), userId);

                                        JavaScriptSerializer json_serializer = new JavaScriptSerializer();
                                        json_serializer.MaxJsonLength = int.MaxValue;
                                        lstAllQuiz[0].hdnLaunchData   = json_serializer.Serialize(lstAllQuiz[0]);

                                        isPlek = true;
                                    }
                                }
                            }
                        }
                        if (tenantList1[0].TenantId == 9)
                        {
                            //newException.AddDummyException("In - 111 ");
                            CommonFunctions common   = new CommonFunctions();
                            var             password = common.GetEncodePassword("123456");
                            TblUser         tblUser  = ur.IsValidUser("*****@*****.**", password, Request.Url.Host);
                            lstAllQuiz = quizRepository.GetQuizForLaunch(Convert.ToInt32(QuizId), tblUser.UserId);

                            JavaScriptSerializer json_serializer = new JavaScriptSerializer();
                            json_serializer.MaxJsonLength = int.MaxValue;
                            lstAllQuiz[0].hdnLaunchData   = json_serializer.Serialize(lstAllQuiz[0]);
                            //newException.AddDummyException("In - 222 ");
                            isPlek = true;
                        }
                    }
                }
                else
                {
                    if (sessionUser.TenantId == 6)
                    {
                        isPlek = true;
                        //check Quiz assigned or not

                        var isAssigned = quizRepository.CheckQuizAssignedUser(Convert.ToInt32(QuizId), sessionUser.UserId);
                        //newException.AddDummyException(Convert.ToString(isAssigned));
                        if (!isAssigned)
                        {
                            //newException.AddDummyException("333 - " + QuizId);
                            var objQuiz = quizRepository.GetQuizByID(Convert.ToInt32(QuizId));
                            if (objQuiz != null)
                            {
                                if (objQuiz[0] != null)
                                {
                                    if (objQuiz[0].TenantId == 6)
                                    {
                                        var assign = quizRepository.AssignQuiz(Convert.ToInt32(QuizId), sessionUser.UserId, null);
                                        lstAllQuiz = quizRepository.GetQuizForLaunch(Convert.ToInt32(QuizId), sessionUser.UserId);
                                        JavaScriptSerializer json_serializer = new JavaScriptSerializer();
                                        json_serializer.MaxJsonLength = int.MaxValue;
                                        lstAllQuiz[0].hdnLaunchData   = json_serializer.Serialize(lstAllQuiz[0]);
                                    }
                                }
                            }
                        }
                        else
                        {
                            lstAllQuiz = quizRepository.GetQuizForLaunch(Convert.ToInt32(QuizId), sessionUser.UserId);
                            JavaScriptSerializer json_serializer = new JavaScriptSerializer();
                            json_serializer.MaxJsonLength = int.MaxValue;
                            lstAllQuiz[0].hdnLaunchData   = json_serializer.Serialize(lstAllQuiz[0]);
                        }
                    }
                    if (sessionUser.TenantId == 9)
                    {
                        //newException.AddDummyException("In - 111 ");
                        CommonFunctions common   = new CommonFunctions();
                        var             password = common.GetEncodePassword("123456");
                        TblUser         tblUser  = ur.IsValidUser("*****@*****.**", password, Request.Url.Host);
                        lstAllQuiz = quizRepository.GetQuizForLaunch(Convert.ToInt32(QuizId), tblUser.UserId);

                        JavaScriptSerializer json_serializer = new JavaScriptSerializer();
                        json_serializer.MaxJsonLength = int.MaxValue;
                        lstAllQuiz[0].hdnLaunchData   = json_serializer.Serialize(lstAllQuiz[0]);
                        //newException.AddDummyException("In - 222 ");
                        isPlek = true;
                    }
                    else
                    {
                        lstAllQuiz = quizRepository.GetQuizForLaunch(Convert.ToInt32(QuizId), sessionUser.UserId);
                        JavaScriptSerializer json_serializer = new JavaScriptSerializer();
                        json_serializer.MaxJsonLength = int.MaxValue;
                        lstAllQuiz[0].hdnLaunchData   = json_serializer.Serialize(lstAllQuiz[0]);
                    }
                }
                if (isPlek)
                {
                    return(View("LaunchQuizForPlek", lstAllQuiz[0]));
                }
                else
                {
                    return(View("LaunchQuizNew", lstAllQuiz[0]));
                }
            }
            catch (Exception ex)
            {
                newException.AddException(ex);
                if (isPlek)
                {
                    return(View("LaunchQuizForPlek"));
                }
                else
                {
                    return(View("LaunchQuizNew"));
                }
            }
        }
        public async Task <IActionResult> Update([FromBody] QuizSession quizSession, string id)
        {
            var res = await Clients.Group(id).UpdateSession(quizSession);

            return(Ok(res));
        }
        public async Task <IActionResult> Save([FromBody] QuizSession quizSession)
        {
            var res = await quizSessionRepository.Insert(quizSession);

            return(this.Ok(res));
        }
Example #15
0
        public IActionResult Result(QuizViewModel quesViewModel)
        {
            var session = new QuizSession(HttpContext.Session);

            List <Question> listOfQuestions = session.GetMyQuestions();

            //get index of the question displayed on the screen
            int index = listOfQuestions.FindIndex(q => q.QuestionId == quesViewModel.QuestionId);

            //saving selected option in the QuestionViewModel
            var questionViewModelList = session.GetMyQuestionViewModel();

            questionViewModelList[index].SelectedOptionId = quesViewModel.SelectedOptionId;
            session.SetMyQuestionViewModel(questionViewModelList);

            // clear model state
            ModelState.Clear();

            var score = 0;

            //if present displayed question is not last question then condition is true
            if (index < (listOfQuestions.Count - 1))
            {
                //select next question
                var question = listOfQuestions[index + 1];
                ViewBag.Previous = true;
                ViewBag.Action   = "Next";

                //if next question to be displayed is last
                if ((index + 1) >= (listOfQuestions.Count - 1))
                {
                    ViewBag.Action = "Submit";
                }

                ViewBag.QuesNo = index + 2;

                var quesVM = GetQuestionViewModel(question);

                //adding question to list in QuestionViewModel list of session if not already added
                if (!questionViewModelList.Select(q => q.QuestionId).Contains(quesVM.QuestionId))
                {
                    questionViewModelList.Add(quesVM);
                    session.SetMyQuestionViewModel(questionViewModelList);
                }
                else
                {
                    quesVM = session.GetMyQuestionViewModel()[index + 1];
                }
                return(View("Index", quesVM));
            }
            else
            {
                //submit is pressed on last question so calculate score
                questionViewModelList = session.GetMyQuestionViewModel();
                foreach (var question in questionViewModelList)
                {
                    if (question.CorrectAnswer == question.SelectedOptionId)
                    {
                        score++;
                    }
                }

                Quiz quiz = new Quiz();
                quiz.Score    = score;
                quiz.QuizDate = DateTime.Now;

                context.Quizzes.Add(quiz);
                context.SaveChanges();
                return(View(quiz));
            }
        }