Exemple #1
0
        public override async Task ConvertAndSendSurveyResultToLmsAsync(IEnumerable <SurveyQuestionResultDTO> results, SurveyResult surveyResult, LmsUserParameters lmsUserParameters)
        {
            var toSend = new List <MoodleQuizResultDTO>();

            foreach (SurveyQuestionResultDTO r in results.Where(x => x.questionTypeId != (int)QuestionTypeEnum.TextNoQuestion))
            {
                var m = new MoodleQuizResultDTO();

                m.quizId = surveyResult.Survey.LmsSurveyId ?? 0;
                Question question = this.QuestionModel.GetOneById(r.questionId).Value;
                m.questionId   = question.LmsQuestionId ?? 0;
                m.questionType = question.QuestionType.Type;
                m.userId       = lmsUserParameters.LmsUser.UserId;
                m.startTime    = surveyResult.StartTime.ConvertToUTCTimestamp();

                m.answers = (question.QuestionType.Id == (int)QuestionTypeEnum.SingleMultipleChoiceText ||
                             question.QuestionType.Id == (int)QuestionTypeEnum.Rate)
                ? this.GetSurveyAnswerLmsIds(question, r)
                : this.ConvertSurveyAnswersToQuizAnswers(question, r, false);

                toSend.Add(m);
            }

            if (toSend.Count == 0)
            {
                return;
            }

            var ret =
                toSend.GroupBy(s => s.quizId)
                .Select(
                    s =>
                    new
            {
                surveyId     = s.Key,
                courseId     = surveyResult.Survey.SubModuleItem.SubModuleCategory.LmsCourseId,
                usersResults =
                    s.GroupBy(u => new { u.userId, u.startTime })
                    .Select(
                        u =>
                        new
                {
                    u.Key.userId,
                    u.Key.startTime,
                    answers = u.Select(a => new { a.questionId, answer = a.answers.Aggregate((b, c) => b.ToString() + "|" + c.ToString()) })
                })
            });

            string json = (new JsonSerializer()).Serialize(ret);

            await this.MoodleApi.SendAnswersAsync(lmsUserParameters.CompanyLms.GetLMSSettings(Settings, lmsUserParameters), json, true, null);
        }
Exemple #2
0
        public override async Task ConvertAndSendQuizResultToLmsAsync(IEnumerable <QuizQuestionResultDTO> results, QuizResult quizResult, LmsUserParameters lmsUserParameters)
        {
            var toSend = new List <MoodleQuizResultDTO>();

            foreach (QuizQuestionResultDTO r in results.Where(x => x.questionTypeId != (int)QuestionTypeEnum.TextNoQuestion))
            {
                var m = new MoodleQuizResultDTO();

                m.quizId = quizResult.Quiz.LmsQuizId ?? 0;
                Question question = this.QuestionModel.GetOneById(r.questionId).Value;
                m.questionId   = question.LmsQuestionId ?? 0;
                m.questionType = question.QuestionType.Type;
                m.userId       = lmsUserParameters.LmsUser.UserId;
                m.startTime    = quizResult.StartTime.ConvertToUTCTimestamp();

                m.answers = this.ProcessAnswers(question, r);

                toSend.Add(m);
            }

            if (toSend.Count == 0)
            {
                return;
            }

            var ret =
                toSend.GroupBy(s => s.quizId)
                .Select(
                    s =>
                    new
            {
                quizId       = s.Key,
                usersResults =
                    s.GroupBy(u => new { u.userId, u.startTime })
                    .Select(
                        u =>
                        new
                {
                    u.Key.userId,
                    u.Key.startTime,
                    answers = u.Select(a => new { a.questionId, a.answers })
                })
            });

            string json = (new JsonSerializer()).Serialize(ret);

            await this.MoodleApi.SendAnswersAsync(lmsUserParameters.CompanyLms.GetLMSSettings(Settings, lmsUserParameters), json, false, null);
        }