Exemple #1
0
 private bool UpdateTestCategory(ListeningBaseCombined listeningBaseCombined)
 {
     if (listeningBaseCombined.TestCategory.Id <= 0)
     {
         _TestCategoryManager.Add(listeningBaseCombined.TestCategory);
     }
     else
     {
         _TestCategoryManager.Update(listeningBaseCombined.TestCategory);
     }
     return(listeningBaseCombined.TestCategory.Id > 0);
 }
Exemple #2
0
        public bool ValidateAndCountAnswers(ListeningBaseCombined listeningBaseCombined, bool isCheckQuestionText = true, bool isCheckAnswersText = true, IFormFile[] images = null)
        {
            // Tổng số câu trả lời
            int sumOfAnswer = 0;
            // Lấy mã người tạo
            int userId = User.Id();

            // Cập nhật mã người tạo cho category
            if (listeningBaseCombined.TestCategory.CreatorId <= 0)
            {
                listeningBaseCombined.TestCategory.CreatorId = userId;
            }
            // Tiến hành kiểm tra trong các phần câu hỏi và đặt mã người tạo + convert đối tượng thành Json và gán vào ANSWERS
            for (int i = 0; i < listeningBaseCombined.ListeningBaseQuestions.Count; i++)
            {
                if ((listeningBaseCombined.ListeningBaseQuestions[i].QuestionText == null || listeningBaseCombined.ListeningBaseQuestions[i].QuestionText.Length <= 0) && isCheckQuestionText)
                {
                    ModelState.AddModelError(string.Empty, $"{nameof(ListeningBaseQuestion.QuestionText)} of question {i + 1} is required.");
                    return(false);
                }

                //
                string validate = listeningBaseCombined.ListeningBaseQuestions[i].AnswerList.BaseAnswerValidation(isCheckAnswersText);
                if (!string.IsNullOrEmpty(validate))
                {
                    ModelState.AddModelError(string.Empty, $"{nameof(ListeningBaseQuestion.Answers)} of question {i + 1}: {validate}");
                    return(false);
                }
                if (listeningBaseCombined.ListeningBaseQuestions[i].CreatorId <= 0)
                {
                    listeningBaseCombined.ListeningBaseQuestions[i].CreatorId = userId;
                }

                sumOfAnswer += listeningBaseCombined.ListeningBaseQuestions[i].AnswerList.Count;
            }

            if (sumOfAnswer < 0)
            {
                return(false);
            }

            // Nếu là thêm nhưng số lượng ảnh kèm theo không đủ
            if (images != null && listeningBaseCombined.TestCategory.CreatorId <= 0 && sumOfAnswer != images.Length)
            {
                ModelState.AddModelError(string.Empty, "Please provide full photos for the answers.");
                return(false);
            }

            return(true);
        }
Exemple #3
0
 //=============================================================================//
 public bool IsValidate(ListeningBaseCombined listeningBaseCombined, IFormFile audio)
 {
     ModelState.Remove(nameof(ListeningBaseQuestion.Answers));
     if ((audio == null || audio.Length <= 0) && listeningBaseCombined.TestCategory.Id <= 0)
     {
         ModelState.AddModelError(string.Empty, $"{nameof(ListeningMedia.Audio)} is required.");
         return(false);
     }
     return(listeningBaseCombined != null && listeningBaseCombined.TestCategory != null &&
            listeningBaseCombined.TestCategory != null &&
            listeningBaseCombined.TestCategory.Name != null && listeningBaseCombined.TestCategory.Name.Length > 0 &&
            listeningBaseCombined.TestCategory.TypeCode != null && listeningBaseCombined.TestCategory.TypeCode.Length > 0 &&
            listeningBaseCombined.TestCategory.PartId > 0 &&
            listeningBaseCombined.ListeningMedia != null &&
            listeningBaseCombined.ListeningBaseQuestions != null &&
            listeningBaseCombined.ListeningBaseQuestions.Count > 0);
 }
Exemple #4
0
        private async Task <bool> UpdateImages(ListeningBaseCombined listeningBaseCombined, IFormFile[] images)
        {
            if (listeningBaseCombined.TestCategory.Id > 0 && (images == null || images.Length <= 0))
            {
                return(true);
            }

            if (listeningBaseCombined.TestCategory.Id <= 0 && images.Length < listeningBaseCombined.ListeningBaseQuestions.Count)
            {
                ModelState.AddModelError(string.Empty, "Missing photos for the answers.");
                return(false);
            }

            // Tiến hành tải các ảnh lên
            List <string> uploadImgePaths = new List <string>();

            for (int i = 0; i < images.Length; i++)
            {
                string uploadResult = await host.UploadForTestImage(images[i], TestCategory.LISTENING, 1);

                if (uploadResult == null || uploadResult.Length <= 0)
                {
                    uploadResult = "";
                }
                uploadImgePaths.Add(uploadResult);
            }
            var imgPathIndex = 0;

            // Cập nhật các đường dẫn được tải lên vào các câu trả lời
            for (int i = 0; i < listeningBaseCombined.ListeningBaseQuestions.Count; i++)
            {
                for (int j = 0; j < listeningBaseCombined.ListeningBaseQuestions[i].AnswerList.Count; j++)
                {
                    if (string.IsNullOrEmpty(listeningBaseCombined.ListeningBaseQuestions[i].AnswerList[j].AnswerContent))
                    {
                        listeningBaseCombined.ListeningBaseQuestions[i].AnswerList[j].AnswerContent = uploadImgePaths[imgPathIndex++];
                    }
                }
                //listeningBaseCombined.ListeningBaseQuestions[i].Answers = JsonConvert.SerializeObject(listeningBaseCombined.ListeningBaseQuestions[i].AnswerList);
            }

            return(true);
        }
Exemple #5
0
        private async Task <bool> UpdateAudio(ListeningBaseCombined listeningBaseCombined, IFormFile audio)
        {
            if ((audio == null || audio.Length <= 0) && listeningBaseCombined.TestCategory.Id > 0)
            {
                return(true);
            }

            // Tiến hành tải audio lên
            string audioUploadPath = await host.UploadForTestAudio(audio, TestCategory.LISTENING, listeningBaseCombined.TestCategory.PartId);

            if (audioUploadPath == null || audioUploadPath.Length <= 0)
            {
                // Nếu gặp sự cố thì tiến hành xóa bỏ mục câu hỏi và trở lại trang thêm để thông báo
                if (listeningBaseCombined.ListeningMedia.Id <= 0)
                {
                    _TestCategoryManager.Delete(listeningBaseCombined.TestCategory);
                }
                ModelState.AddModelError(string.Empty, "Cannot upload audio file.");
                return(false);
            }
            else
            {
                // Cập nhật đường dẫn vào
                listeningBaseCombined.ListeningMedia.Audio = audioUploadPath;
                // Cập nhật mục nó thuộc về
                if (listeningBaseCombined.ListeningMedia.TestCategoryId <= 0)
                {
                    listeningBaseCombined.ListeningMedia.TestCategoryId = listeningBaseCombined.TestCategory.Id;
                    listeningBaseCombined.ListeningMedia.Active         = true;
                    // Cập nhật vào CSDl
                    _ListeningMediaManager.Add(listeningBaseCombined.ListeningMedia);
                }
                else
                {
                    // Cập nhật vào CSDl
                    _ListeningMediaManager.Update(listeningBaseCombined.ListeningMedia);
                }
            }

            return(true);
        }
Exemple #6
0
 public async Task <IActionResult> Part1Update(ListeningBaseCombined listeningBaseCombined, IFormFile audio, params IFormFile[] images)
 {
     return(await Processing(nameof(Part1), nameof(Part1Update), listeningBaseCombined, audio, images));
 }
Exemple #7
0
 private async Task <IActionResult> Processing(string partName, string actionName, ListeningBaseCombined listeningBaseCombined, IFormFile audio, IFormFile[] images, bool isCheckQuestionText = true)
 {
     return(await Processing(partName, actionName, listeningBaseCombined, audio, isCheckQuestionText, true, images));
 }
Exemple #8
0
        private async Task <IActionResult> Processing(string partName, string actionName, ListeningBaseCombined listeningBaseCombined, IFormFile audio, bool isCheckQuestionText = true, bool isUploadImages = false, IFormFile[] images = null)
        {
            var view = View($"{partName}/{actionName}", listeningBaseCombined);

            // Nếu mục không hợp lệ
            if (!IsValidate(listeningBaseCombined, audio))
            {
                return(view);
            }

            if (isUploadImages)
            {
                // Nếu cho phép cập nhật hình ảnh, thì kiểm tra tính hợp lệ với cả ảnh
                if (!ValidateAndCountAnswers(listeningBaseCombined, isCheckQuestionText, false, images))
                {
                    return(view);
                }
            }
            else
            {
                // Nếu không cho phép cập nhật hình ảnh, chỉ kiểm tra tính hợp lệ của câu hỏi
                if (!ValidateAndCountAnswers(listeningBaseCombined, isCheckQuestionText))
                {
                    return(view);
                }
            }

            // Nếu cập nhật mục không thành công
            if (!UpdateTestCategory(listeningBaseCombined))
            {
                ModelState.AddModelError(string.Empty, "An error occurred during execution.");
                return(view);
            }

            // Nếu up âm thanh không được
            if (!await UpdateAudio(listeningBaseCombined, audio))
            {
                return(View($"{partName}/{actionName}", listeningBaseCombined));
            }

            // Cho phép upload hình ảnh
            if (isUploadImages && !await UpdateImages(listeningBaseCombined, images))
            {
                return(View($"{partName}/{actionName}", listeningBaseCombined));
            }

            // Cập nhật người tạo câu hỏi, đồng thời thêm vào CSDL
            for (int i = 0; i < listeningBaseCombined.ListeningBaseQuestions.Count; i++)
            {
                // Chuyển danh sách câu trả lời thành JSON để lưu trữ
                listeningBaseCombined.ListeningBaseQuestions[i].Answers = JsonConvert.SerializeObject(listeningBaseCombined.ListeningBaseQuestions[i].AnswerList);

                if (listeningBaseCombined.ListeningBaseQuestions[i].Id <= 0)
                {
                    listeningBaseCombined.ListeningBaseQuestions[i].TestCategoryId = listeningBaseCombined.TestCategory.Id;
                    _ListeningBaseQuestionManager.Add(listeningBaseCombined.ListeningBaseQuestions[i]);
                }
                else
                {
                    _ListeningBaseQuestionManager.Update(listeningBaseCombined.ListeningBaseQuestions[i]);
                }
            }

            this.NotifySuccess("Update completed!");

            // Chuyển hướng đến hiển thị danh sách
            return(RedirectToAction(partName));
        }
Exemple #9
0
 public async Task <IActionResult> Part2Update(ListeningBaseCombined listeningBaseCombined, IFormFile audio)
 {
     return(await Processing(nameof(Part2), nameof(Part2Update), listeningBaseCombined, audio));
 }