예제 #1
0
 public QuestionPage(Personal personal, Survey survey)
 {
     InitializeComponent();
     BindingContext = viewModel = new QuestionPageViewModel(Navigation);
     viewModel.SetSurvey(survey);
     viewModel.SetPersonal(personal);
 }
예제 #2
0
 public QuestionPage()
 {
     this.InitializeComponent();
     this.DataContext       = questionPageViewModel = new QuestionPageViewModel();
     ManipulationCompleted += The_ManipulationCompleted;
     ManipulationDelta     += The_ManipulationDelta;
 }
예제 #3
0
        private List <Question> NewQuestion(int id, QuestionPageViewModel userQuestionPage, Test test, UrlTest urlTest,
                                            UrlTestAttend urlAttendBase, List <Result> resultsBase)
        {
            userQuestionPage.TestName        = test.Name;
            userQuestionPage.UrlTestName     = urlTest.Name;
            userQuestionPage.UrlTestAttendId = urlAttendBase.Id;
            var questions = context.Questions.AsNoTracking().Where(a => a.TestId == test.Id & !a.IsDel)
                            .OrderBy(a => a.Id)
                            .ToList();


            userQuestionPage.Answers = context.Answers.AsNoTracking().Where(a => a.QuestionId == id & !a.IsDel).ToList();
            var answersPage = new List <Answer>();

            foreach (var result in resultsBase)
            {
                var answer = context.Answers.FirstOrDefault(a => a.Id == result.AnswerId & a.QuestionId == id);
                if (answer != null)
                {
                    answersPage.Add(answer);
                }
            }

            if (answersPage.Count != 0)
            {
                foreach (var answer in answersPage)
                {
                    userQuestionPage.Answers.Find(a => a.Id == answer.Id).Selected = true;
                }
            }

            return(questions);
        }
예제 #4
0
        public QuestionPage()
        {
            InitializeComponent();

            _viewModel     = new QuestionPageViewModel();
            BindingContext = _viewModel;
        }
예제 #5
0
        public async Task <IActionResult> Index(Guid id)
        {
            var questionResponse = await _queries.Request <GetQuestionRequest, GetQuestionResponse>(new GetQuestionRequest { Id = id });

            var question = questionResponse.Question;

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


            var profileResponse = await _queries.Request <GetProfileRequest, GetProfileResponse>(new GetProfileRequest { Id = question.CreatedById });

            var profile = profileResponse.Profile;

            var page = new QuestionPageViewModel
            {
                Question = new QuestionViewModel
                {
                    Id    = question.Id,
                    Title = question.Title
                },
                UserAsking = new UserViewModel
                {
                    Id                = profile.Id,
                    Name              = profile.Name,
                    TotalGoldBadges   = profile.Badges.Count(x => x.Badge.Rank == BadgeRank.Gold),
                    TotalSilverBadges = profile.Badges.Count(x => x.Badge.Rank == BadgeRank.Silver),
                    TotalBronzeBadges = profile.Badges.Count(x => x.Badge.Rank == BadgeRank.Bronze)
                }
            };

            return(View(page));
        }
예제 #6
0
        public QuestionPageViewModelTests()
        {
            Question    = new Question();
            NetworkApi  = new StubINetworkApi();
            Application = new StubIApplicationViewModel();
            Subject     = new QuestionPageViewModel(Question.QuestionId, Application, NetworkApi);

            Application.CurrentSite_Get(() => "test_site");
        }
예제 #7
0
        public QuestionPage(QuestionPageViewModel questionPageViewModel)
        {
            InitializeComponent();
            BindingContext = this._viewModel = questionPageViewModel;

            if (string.IsNullOrEmpty(questionPageViewModel.Question.ProTipText))
            {
                ProTipButton.IsVisible = false;
            }
        }
예제 #8
0
        private IActionResult QuestionView <TQuestion, TAnswer>(TAnswer answer) where TQuestion : IQuestionViewModel <TAnswer>, new()
        {
            var model = new QuestionPageViewModel <TAnswer>
            {
                Question = new TQuestion {
                    Answer = answer
                }
            };

            return(View(model));
        }
예제 #9
0
        public IActionResult Start(int id, QuestionPageViewModel userQuestionPage)
        {
            userQuestionPage.QuestionId = id;
            var urlTestBase = context.UrlTests.AsNoTracking().First(a => a.Url == userQuestionPage.Url);

            if (!string.IsNullOrEmpty(userQuestionPage.UrlTestName))
            {
                if (urlTestBase.Name != userQuestionPage.UrlTestName)
                {
                    urlTestBase.Name = userQuestionPage.UrlTestName;
                    context.Update(urlTestBase);
                    context.SaveChanges();
                }
            }

            if (!ModelState.IsValid)
            {
                userQuestionPage.TestName = context.Tests.First(a => a.Id == urlTestBase.TestId & !a.IsDel).Name;
                return(View(userQuestionPage));
            }

            if (string.IsNullOrEmpty(urlTestBase.Name))
            {
                userQuestionPage.TestName = context.Tests.First(a => a.Id == urlTestBase.TestId & !a.IsDel).Name;
                userQuestionPage.Mes      = "Write Name";
                return(View(userQuestionPage));
            }
            var urlAttends = context.UrlTestAttends.AsNoTracking().Where(a => a.UrlTestUrl == userQuestionPage.Url)
                             .OrderByDescending(a => a.NumberOfRun).ToList();
            var urlAttend = new UrlTestAttend()
            {
                UrlTestUrl = userQuestionPage.Url
            };

            if (urlAttends.Count == 0)
            {
                urlAttend.NumberOfRun = 1;
            }
            else
            {
                urlAttend.NumberOfRun = urlAttends[0].NumberOfRun + 1;
            }
            urlAttend.StartTimeTest = DateTime.Now;
            context.UrlTestAttends.Add(urlAttend);
            context.SaveChanges();
            var urlAttendBase = context.UrlTestAttends.AsNoTracking().First(a =>
                                                                            a.UrlTestUrl == userQuestionPage.Url & a.NumberOfRun == urlAttend.NumberOfRun);

            return(RedirectToAction("QuestionPage", new{ testAttemptId = urlAttendBase.Id, id }));
        }
예제 #10
0
        private QuestionPageViewModel CreateQuestionPage(UrlTest urlTest)
        {
            var questionPage = new QuestionPageViewModel();
            var test         = context.Tests.AsNoTracking().First(a => a.Id == urlTest.TestId & !a.IsDel);

            questionPage.TestName    = test.Name;
            questionPage.UrlTestName = urlTest.Name;
            var questions = context.Questions.AsNoTracking().Where(a => a.TestId == test.Id & !a.IsDel).OrderBy(a => a.Id)
                            .ToList();

            if (questions.Count != 0)
            {
                questionPage.QuestionId = questions[0].Id;
            }
            return(questionPage);
        }
예제 #11
0
        private void AddResult(QuestionPageViewModel userQuestionPage, List <Answer> answersUser, UrlTestAttend urlAttend,
                               UrlTestAttend urlAttendBase)
        {
            foreach (var answer in userQuestionPage.Answers)
            {
                if (answersUser.Count == 0)
                {
                    if (answer.Selected)
                    {
                        var result = new Result()
                        {
                            AnswerId = answer.Id, UrlTestAttendId = urlAttend.Id
                        };
                        context.Results.Add(result);
                    }
                }
                else
                {
                    if (answersUser.FirstOrDefault(a => a.Id == answer.Id) == null)
                    {
                        if (answer.Selected)
                        {
                            var result = new Result()
                            {
                                AnswerId = answer.Id, UrlTestAttendId = urlAttend.Id
                            };
                            context.Results.Add(result);
                        }
                    }
                    else
                    {
                        if (!answer.Selected)
                        {
                            var resultBase = context.Results.AsNoTracking()
                                             .First(a => a.UrlTestAttendId == urlAttendBase.Id & a.AnswerId == answer.Id);
                            context.Remove(resultBase);
                        }
                    }
                }
            }


            context.SaveChanges();
        }
예제 #12
0
        public IActionResult QuestionPage(int id)
        {
            var repository = new QuestionsRepository(_conn);

            var vm = new QuestionPageViewModel();

            vm.Question   = repository.GetQuestionById(id);
            vm.Tags       = repository.GetTagsByQuestion(vm.Question.QuestionsTags);
            vm.Answers    = repository.GetAnswersByQuestionId(id);
            vm.IsLoggedIn = User.Identity.IsAuthenticated;
            if (User.Identity.IsAuthenticated)
            {
                vm.User         = repository.GetUserByEmail(User.Identity.Name);
                vm.DidntLikeYet = repository.DidntLikeYet(id, vm.User.Id);
            }


            return(View(vm));
        }
예제 #13
0
        public IActionResult QuestionPage(int testAttemptId, int id, QuestionPageViewModel userQuestionPage)
        {
            var urlAttend     = context.UrlTestAttends.AsNoTracking().First(a => a.Id == testAttemptId);
            var urlTest       = context.UrlTests.AsNoTracking().First(a => a.Url == urlAttend.UrlTestUrl);
            var test          = context.Tests.AsNoTracking().First(a => a.Id == urlTest.TestId);
            var urlAttendBase = context.UrlTestAttends.AsNoTracking().First(a =>
                                                                            a.UrlTestUrl == urlTest.Url & a.NumberOfRun == urlAttend.NumberOfRun);
            var resultsBase = context.Results.AsNoTracking()
                              .Where(a => a.UrlTestAttendId == urlAttendBase.Id).ToList();

            if (userQuestionPage.Answers != null)
            {
                var answersUser = AnswersUser(userQuestionPage.QuestionId, resultsBase);
                AddResult(userQuestionPage, answersUser, urlAttend, urlAttendBase);
            }

            var dateNow = DateTime.Now;
            var data    = test.TestTime;

            urlAttend.TestTime = dateNow.Subtract(urlAttendBase.StartTimeTest);
            if (id == -2 | (TimeSpan.Compare(urlAttend.TestTime, data) == 1))
            {
                if (string.IsNullOrEmpty(urlTest.Name))
                {
                    userQuestionPage.Question   = NewQuestion(userQuestionPage.Question.Id, userQuestionPage, test, urlTest, urlAttendBase, resultsBase).Find(a => a.Id == userQuestionPage.Question.Id);
                    userQuestionPage.QuestionId = userQuestionPage.Question.Id;
                    userQuestionPage.Mes        = "Not write Username!";
                    return(View(userQuestionPage));
                }

                urlAttend.IsEnd = true;
                context.Update(urlAttend);
                context.SaveChanges();
                return(RedirectToAction("CheckTest", "Result"));
            }

            var questions = NewQuestion(id, userQuestionPage, test, urlTest, urlAttendBase, resultsBase);

            FillNextPrev(id, userQuestionPage, questions);
            userQuestionPage.QuestionId = userQuestionPage.Question.Id;
            return(RedirectToAction("QuestionPage", "UserTest"));
        }
예제 #14
0
        public IActionResult QuestionPage(int testAttemptId, int id)
        {
            var questionPage = new QuestionPageViewModel();
            var urlAttend    = context.UrlTestAttends.AsNoTracking().First(a => a.Id == testAttemptId);

            if (urlAttend.IsEnd)
            {
                return(RedirectToAction("CheckTest", "Result"));
            }
            var urlTest       = context.UrlTests.AsNoTracking().First(a => a.Url == urlAttend.UrlTestUrl);
            var test          = context.Tests.AsNoTracking().First(a => a.Id == urlTest.TestId);
            var urlAttendBase = context.UrlTestAttends.AsNoTracking().First(a =>
                                                                            a.UrlTestUrl == urlTest.Url & a.NumberOfRun == urlAttend.NumberOfRun);

            questionPage.Answers = context.Answers.AsNoTracking().Where(a => a.QuestionId == id).ToList();
            var resultsBase = context.Results.AsNoTracking()
                              .Where(a => a.UrlTestAttendId == testAttemptId).ToList();

            if (questionPage.Answers != null)
            {
                var answersUser = AnswersUser(id, resultsBase);
                if (answersUser.Count != 0)
                {
                    foreach (var answer in answersUser)
                    {
                        for (var i = 0; i < questionPage.Answers.Count; i++)
                        {
                            if (answer.Id == questionPage.Answers[i].Id)
                            {
                                questionPage.Answers[i].Selected = true;
                            }
                        }
                    }
                }
            }

            var questions = NewQuestion(id, questionPage, test, urlTest, urlAttendBase, resultsBase);

            FillNextPrev(id, questionPage, questions);
            questionPage.QuestionId = questionPage.Question.Id;
            return(View(questionPage));
        }
예제 #15
0
        private static void FillNextPrev(int id, QuestionPageViewModel userQuestionPage, List <Question> questions)
        {
            var i = questions.FindIndex(q => q.Id == id);

            userQuestionPage.Question = questions[i];
            if (i != 0)
            {
                userQuestionPage.PrevId = questions[i - 1].Id;
            }
            else
            {
                userQuestionPage.PrevId = null;
            }
            if (questions.Count - 1 == i)
            {
                userQuestionPage.NextId = null;
            }
            else
            {
                userQuestionPage.NextId = questions[i + 1].Id;
            }
        }
예제 #16
0
 public QuestionPage()
 {
     InitializeComponent();
     BindingContext = new QuestionPageViewModel(Navigation);
     NavigationPage.SetHasNavigationBar(this, false);
 }
예제 #17
0
 public QuestionPage(QuestionPageViewModel viewModel)
 {
     BindingContext = viewModel;
     InitializeComponent();
 }
예제 #18
0
        public QuestionPage(QuestionPageViewModel qpvm)
        {
            InitializeComponent();

            this.BindingContext = qpvm;
        }