/// <summary> /// The process distractors. /// </summary> /// <param name="question"> /// The question. /// </param> /// <param name="convertedQuestion"> /// The converted question. /// </param> /// <param name="saveImage"> /// The save image. /// </param> /// <param name="subModuleItem"> /// The sub module item. /// </param> /// <param name="creator"> /// The creator. /// </param> /// <param name="distractorModel"> /// The distractor model. /// </param> private static void ProcessDistractors( EdugameQuestion question, Question convertedQuestion, Func <string, string, File> saveImage, SubModuleItem subModuleItem, User creator, DistractorModel distractorModel) { foreach (EdugameDistractor distractor in question.Distractors) { Distractor convertedDistractor = EdugameConverter.Convert(distractor, convertedQuestion); File distractorImage = saveImage(distractor.ImageName, distractor.Image); if (distractorImage != null) { convertedDistractor.Image = distractorImage; } if (convertedDistractor.CreatedBy == null) { convertedDistractor.CreatedBy = subModuleItem.Return(x => x.CreatedBy, creator); } if (convertedDistractor.ModifiedBy == null) { convertedDistractor.ModifiedBy = convertedDistractor.CreatedBy; } if (subModuleItem != null) { distractorModel.RegisterSave(convertedDistractor); } convertedQuestion.Distractors.Add(convertedDistractor); } }
/// <summary> /// The get save image routine. /// </summary> /// <param name="subModuleItem"> /// The sub module item. /// </param> /// <param name="creator"> /// The creator. /// </param> /// <returns> /// The save image routine /// </returns> private Func <string, string, File> GetSaveImageRutine(SubModuleItem subModuleItem, User creator) { Func <string, string, File> saveImage = (imageName, imageData) => { if (string.IsNullOrEmpty(imageName) || string.IsNullOrEmpty(imageData)) { return(null); } FileModel fileModel = this.FileModel; File file = fileModel.CreateFile( subModuleItem.Return(x => x.CreatedBy, creator), imageName, default(DateTime), null, null, null, null); byte[] byteData = System.Convert.FromBase64String(imageData); fileModel.SetData(file, byteData); string permanentFileName = fileModel.PermanentFileName(file); using (FileStream stream = System.IO.File.OpenWrite(permanentFileName)) { fileModel.ResizeImage(byteData, fileModel.PermanentFileName(file), stream); } return(file); }; return(saveImage); }
public TestWithSmiDTO(Test result, SubModuleItem smi = null) : base(result) { this.SmiVO = new SubModuleItemDTO(smi.Return(x => x, result.SubModuleItem)); }
/// <summary> /// Get questions from imported file. /// </summary> /// <param name="fileId"> /// Imported file id. /// </param> /// <param name="smiId"> /// Sub module item id. /// </param> /// <param name="userId"> /// The user Id. /// </param> /// <param name="format"> /// Questions format. /// </param> /// <returns> /// The <see cref="ServiceResponse"/>. /// </returns> protected QuestionDTO[] Import(string fileId, int?smiId, int?userId, FormatsEnum format) { var questionDtos = new List <QuestionDTO>(); Error error = null; try { SubModuleItem subModuleItem = smiId.HasValue ? this.SubModuleItemModel.GetOneById(smiId.Value).Value : null; User creator = userId.HasValue ? this.UserModel.GetOneById(userId.Value).Value : null; string fileName = fileId + ".xml"; string filePath = Path.Combine(this.ImportPath, fileName); string schemaPath = Path.Combine(this.SchemasPath, format + ".xsd"); if (subModuleItem == null && creator == null) { throw new ArgumentException(); } EdugameQuestions questions = this.DeserializeEdugameQuestions(format, filePath, schemaPath); QuestionModel questionModel = this.QuestionModel; DistractorModel distractorModel = this.DistractorModel; Func <string, string, File> saveImage = this.GetSaveImageRutine(subModuleItem, creator); List <QuestionType> questionTypes = this.QuestionTypeModel.GetAllActive().ToList(); foreach (EdugameQuestion question in questions.Questions) { Question convertedQuestion = EdugameConverter.Convert(question, questionTypes); convertedQuestion.SubModuleItem = subModuleItem; if (convertedQuestion.CreatedBy == null) { convertedQuestion.CreatedBy = subModuleItem.Return(x => x.CreatedBy, creator); } if (convertedQuestion.ModifiedBy == null) { convertedQuestion.ModifiedBy = convertedQuestion.CreatedBy; } File questionImage = saveImage(question.ImageName, question.Image); if (questionImage != null) { convertedQuestion.Image = questionImage; } convertedQuestion.RandomizeAnswers = convertedQuestion.QuestionType.Id == (int)QuestionTypeEnum.Sequence ? (bool?)true : null; if (subModuleItem != null) { questionModel.RegisterSave(convertedQuestion); } QuestionFor customQuestion = this.ProcessCustomQuestionType(convertedQuestion, question); ProcessDistractors(question, convertedQuestion, saveImage, subModuleItem, creator, distractorModel); questionDtos.Add(new QuestionDTO(convertedQuestion, customQuestion)); } System.IO.File.Delete(filePath); } catch (ArgumentException) { error = new Error( Errors.CODE_ERRORTYPE_REQUEST_NOT_PROCESSED, ErrorsTexts.ImportError_Subject, ErrorsTexts.ImportError_NoData); } catch (SerializationException) { error = new Error( Errors.CODE_ERRORTYPE_REQUEST_NOT_PROCESSED, ErrorsTexts.ImportError_Subject, ErrorsTexts.ImportError_InvalidFormat); } catch (FileNotFoundException) { error = new Error( Errors.CODE_ERRORTYPE_REQUEST_NOT_PROCESSED, ErrorsTexts.ImportError_Subject, ErrorsTexts.ImportError_NotFound); } catch (Exception ex) { Logger.Error("Import", ex); error = new Error( Errors.CODE_ERRORTYPE_REQUEST_NOT_PROCESSED, ErrorsTexts.ImportError_Subject, ErrorsTexts.ImportError_Unknown); } if (error != null) { this.LogError("Export.Import", error); throw new FaultException <Error>(error, error.errorMessage); } return(questionDtos.ToArray()); }