Beispiel #1
0
        /// <summary>
        /// Get file data as File.
        /// </summary>
        /// <param name="id">
        /// The file id.
        /// </param>
        /// <returns>
        /// The <see cref="Stream"/>.
        /// </returns>
        public Stream GetFile(string id)
        {
            Error result;

            if (this.Validate(id, out result))
            {
                File file   = this.FileModel.GetOneById(Guid.Parse(id)).Value;
                var  buffer = this.FileModel.GetData(file);
                if (buffer != null)
                {
                    var contentType = GetContentTypeByExtension(file.FileName);
                    if (WebOperationContext.Current != null && !string.IsNullOrWhiteSpace(contentType))
                    {
                        WebOperationContext.Current.OutgoingResponse.Headers["Content-Type"] = contentType;
                    }

                    return(new MemoryStream(buffer));
                }
            }

            if (result != null)
            {
                this.LogError("Rest.GetFile", result);
                throw new FaultException <Error>(result, result.errorMessage);
            }

            throw new WebException(HttpStatusCode.NotFound, "File not found");
        }
Beispiel #2
0
        /// <summary>
        /// Get file data as content disposition file.
        /// </summary>
        /// <param name="id">
        /// The file id.
        /// </param>
        /// <returns>
        /// The <see cref="Stream"/>.
        /// </returns>
        public Stream GetFileStream(string id)
        {
            Error result;

            if (this.Validate(id, out result))
            {
                File file   = this.FileModel.GetOneById(Guid.Parse(id)).Value;
                var  buffer = this.FileModel.GetData(file);
                if (buffer != null)
                {
                    if (WebOperationContext.Current != null)
                    {
                        WebOperationContext.Current.OutgoingResponse.Headers["Content-Disposition"] = "attachment; filename=" + file.FileName;
                        WebOperationContext.Current.OutgoingResponse.Headers["Content-Type"]        = @"image\" + Path.GetExtension(file.FileName).If(x => !string.IsNullOrEmpty(x), x => x.Substring(1));
                    }

                    return(new MemoryStream(buffer));
                }
            }

            if (result != null)
            {
                this.LogError("Rest.GetFileStream", result);
                throw new FaultException <Error>(result, result.errorMessage);
            }

            throw new WebException(HttpStatusCode.NotFound, "File not found");
        }
Beispiel #3
0
        /// <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);
        }
Beispiel #4
0
        /// <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);
            }
        }
Beispiel #5
0
        public virtual ActionResult GetFile(string id)
        {
            File file = null;
            Guid webOrbId;

            if (Guid.TryParse(id, out webOrbId))
            {
                file = this._fileModel.GetOneByWebOrbId(webOrbId).Value;
            }

            if (file != null)
            {
                byte[] buffer = this._fileModel.GetData(file);
                if (buffer != null)
                {
                    return(this.File(buffer, GetContentTypeByExtension(file.FileName), file.FileName));
                }
            }

            return(new HttpStatusCodeResult(HttpStatusCode.NotFound));
        }
Beispiel #6
0
        /// <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());
        }