示例#1
0
        public static void Delete(decimal Document_ID)
        {
            try
            {
                using (PSsqmEntities entities = new PSsqmEntities())
                {
                    DOCUMENT_FILE this_docfile = (from d in entities.DOCUMENT_FILE
                                                  where (d.DOCUMENT_ID == Document_ID)
                                                  select d).Single();
                    if (this_docfile != null)
                    {
                        entities.DeleteObject(this_docfile);
                        entities.SaveChanges();
                    }

                    DOCUMENT this_doc = (from d in entities.DOCUMENT
                                         where (d.DOCUMENT_ID == Document_ID)
                                         select d).Single();
                    if (this_doc != null)
                    {
                        entities.DeleteObject(this_doc);
                        entities.SaveChanges();
                    }
                }
            }
            catch (Exception e)
            {
                //SQMLogger.LogException(e);
            }

            return;
        }
示例#2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="fileName"></param>
        /// <param name="tmpFilename"></param>
        /// <param name="fileHash"></param>
        /// <param name="answerId"></param>
        /// <param name="File_Upload_Id"></param>
        /// <param name="stream_id">only used if moving away from the blob process</param>
        public void AddDocument(string title, int answerId, FileUploadStreamResult result)
        {
            if (string.IsNullOrWhiteSpace(title))
            {
                title = "click to edit title";
            }

            foreach (var file in result.FileResultList)
            {
                // first see if the document already exists on any question in this Assessment, based on the filename and hash
                var doc = db.DOCUMENT_FILE.Where(f => f.FileMd5 == file.FileHash &&
                                                 f.Name == file.FileName &&
                                                 f.Assessment_Id == this.assessmentId).FirstOrDefault();
                if (doc == null)
                {
                    doc = new DOCUMENT_FILE()
                    {
                        Assessment_Id = this.assessmentId,
                        Title         = title,
                        Path          = file.FileName, // this may end up being some other reference
                        Name          = file.FileName,
                        FileMd5       = file.FileHash,
                        ContentType   = file.ContentType,
                        Data          = file.FileBytes
                    };
                }
                else
                {
                    doc.Title = title;
                    doc.Name  = file.FileName;
                }

                var answer = db.ANSWER.Where(a => a.Answer_Id == answerId).FirstOrDefault();
                db.DOCUMENT_FILE.AddOrUpdate(doc, x => x.Document_Id);
                db.SaveChanges();

                DOCUMENT_ANSWERS temp = new DOCUMENT_ANSWERS()
                {
                    Answer_Id = answer.Answer_Id, Document_Id = doc.Document_Id
                };
                if (db.DOCUMENT_ANSWERS.Find(temp.Document_Id, temp.Answer_Id) == null)
                {
                    db.DOCUMENT_ANSWERS.Add(temp);
                }
                else
                {
                    db.DOCUMENT_ANSWERS.Update(temp);
                }
                db.SaveChanges();

                CSETWeb_Api.BusinessLogic.Helpers.AssessmentUtil.TouchAssessment(doc.Assessment_Id);
            }
        }
示例#3
0
        public IEnumerable <FileDescriptionShort> AddFileDescriptions(FileResult fileResult)
        {
            List <string> filenames = new List <string>();

            for (int i = 0; i < fileResult.FileNames.Count(); i++)
            {
                var fileDescription = new DOCUMENT_FILE
                {
                    ContentType      = fileResult.ContentTypes[i],
                    Path             = fileResult.FileNames[i],
                    CreatedTimestamp = fileResult.CreatedTimestamp,
                    UpdatedTimestamp = fileResult.UpdatedTimestamp,
                    Title            = fileResult.Tiitle
                };

                filenames.Add(fileResult.FileNames[i]);
                _context.DOCUMENT_FILE.Add(fileDescription);
            }

            _context.SaveChanges();
            return(GetNewFiles(filenames));
        }
示例#4
0
        private void SaveFileToDB(ZipArchiveEntry entry, DOCUMENT_FILE doc)
        {
            var    stream       = entry.Open();
            string contentType2 = MimeMapping.GetMimeMapping(entry.FullName);
            string fileHash;

            byte[] bytes;
            using (var ms = new MemoryStream())
            {
                stream.CopyTo(ms);
                bytes = ms.ToArray();
            }
            // Hash the file so that we can determine if it is already attached to another question
            using (var md5 = MD5.Create())
            {
                var hash = md5.ComputeHash(bytes);
                fileHash = BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant();
            }
            doc.UpdatedTimestamp = DateTime.Now;
            doc.ContentType      = contentType2;
            doc.Name             = entry.Name;
            doc.Data             = bytes;
        }
示例#5
0
 public DocumentObject(CSET_Context assessmentContext, DOCUMENT_FILE doc)
 {
     this.assessmentContext = assessmentContext;
     this.doc = doc;
 }
示例#6
0
 public DocumentObject()
 {
     this.Doc = new DOCUMENT_FILE();
 }
示例#7
0
        public DOCUMENT_FILE GetFileDescription(int id)
        {
            DOCUMENT_FILE doc = _context.DOCUMENT_FILE.Single(t => t.Document_Id == id);

            return(doc);
        }
示例#8
0
        public async Task ProcessCSETAssessmentImport(byte[] zipFileFromDatabase, int currentUserId)
        {
            using (CSET_Context web = new CSET_Context())
            {
                //* read from db and set as memory stream here.
                using (Stream fs = new MemoryStream(zipFileFromDatabase))
                {
                    ZipArchive   zip        = new ZipArchive(fs);
                    StreamReader r          = new StreamReader(zip.GetEntry("model.json").Open());
                    string       jsonObject = r.ReadToEnd();


                    // Apply any data updates to older versions
                    ImportUpgradeManager upgrader = new ImportUpgradeManager();
                    jsonObject = upgrader.Upgrade(jsonObject);


                    UploadAssessmentModel model = (UploadAssessmentModel)JsonConvert.DeserializeObject(jsonObject, new UploadAssessmentModel().GetType());
                    foreach (var doc in model.CustomStandardDocs)
                    {
                        var genFile = web.GEN_FILE.FirstOrDefault(s => s.File_Name == doc);
                        if (genFile == null)
                        {
                            StreamReader docReader = new StreamReader(zip.GetEntry(doc + ".json").Open());
                            var          docModel  = JsonConvert.DeserializeObject <ExternalDocument>(docReader.ReadToEnd());
                            genFile = docModel.ToGenFile();
                            var extension = Path.GetExtension(genFile.File_Name).Substring(1);
                            genFile.File_Type_ = web.FILE_TYPE.Where(s => s.File_Type1 == extension).FirstOrDefault();

                            try
                            {
                                web.FILE_REF_KEYS.Add(new FILE_REF_KEYS {
                                    Doc_Num = genFile.Doc_Num
                                });
                                await web.SaveChangesAsync();
                            }
                            catch
                            {
                            }
                            web.GEN_FILE.Add(genFile);
                            web.SaveChanges();
                        }
                    }
                    foreach (var standard in model.CustomStandards)
                    {
                        var          sets            = web.SETS.Where(s => s.Set_Name.Contains(standard)).ToList();
                        SETS         set             = null;
                        StreamReader setReader       = new StreamReader(zip.GetEntry(standard + ".json").Open());
                        var          setJson         = setReader.ReadToEnd();
                        var          setModel        = JsonConvert.DeserializeObject <ExternalStandard>(setJson);
                        var          originalSetName = setModel.ShortName;
                        foreach (var testSet in sets)
                        {
                            setModel.ShortName = testSet.Short_Name;
                            var testSetJson = JsonConvert.SerializeObject(testSet.ToExternalStandard(), Formatting.Indented);
                            if (testSetJson == setJson)
                            {
                                set = testSet;
                                break;
                            }
                            else
                            {
                                setModel.ShortName = originalSetName;
                            }
                        }
                        if (set == null)
                        {
                            int incr = 1;
                            while (sets.Any(s => s.Short_Name == setModel.ShortName))
                            {
                                setModel.ShortName = originalSetName + " " + incr;
                                incr++;
                            }
                            var setResult = await setModel.ToSet();

                            if (setResult.IsSuccess)
                            {
                                web.SETS.Add(setResult.Result);

                                foreach (var question in setResult.Result.NEW_REQUIREMENT.SelectMany(s => s.NEW_QUESTIONs()).Where(s => s.Question_Id != 0).ToList())
                                {
                                    web.Entry(question).State = EntityState.Unchanged;
                                }
                                try
                                {
                                    await web.SaveChangesAsync();
                                }
                                catch (Exception e)
                                {
                                    throw (e);
                                }
                                //Set the GUID at time of export so we are sure it's right!!!
                                model.jANSWER = model.jANSWER.Where(s => s.Is_Requirement).GroupJoin(setResult.Result.NEW_REQUIREMENT, s => s.Custom_Question_Guid, req => new Guid(new MD5CryptoServiceProvider().ComputeHash(Encoding.Default.GetBytes(originalSetName + "|||" + req.Requirement_Title + "|||" + req.Requirement_Text))).ToString(), (erea, s) =>
                                {
                                    var req = s.FirstOrDefault();
                                    if (req != null)
                                    {
                                        erea.Question_Or_Requirement_Id = req.Requirement_Id;
                                    }
                                    return(erea);
                                }).Concat(model.jANSWER.Where(s => !s.Is_Requirement).GroupJoin(setResult.Result.NEW_QUESTION, s => s.Custom_Question_Guid, req => new Guid(new MD5CryptoServiceProvider().ComputeHash(Encoding.Default.GetBytes(req.Simple_Question))).ToString(), (erer, s) =>
                                {
                                    var req = s.FirstOrDefault();
                                    if (req != null)
                                    {
                                        erer.Question_Or_Requirement_Id = req.Question_Id;
                                    }
                                    return(erer);
                                })).ToList();
                            }
                        }
                        foreach (var availableStandard in model.jAVAILABLE_STANDARDS.Where(s => s.Set_Name == Regex.Replace(originalSetName, @"\W", "_") && s.Selected))
                        {
                            availableStandard.Set_Name = Regex.Replace(setModel.ShortName, @"\W", "_");
                        }
                    }

                    string email = web.USERS.Where(x => x.UserId == currentUserId).First().PrimaryEmail;

                    Importer import = new Importer();
                    Tuple <int, Dictionary <int, DOCUMENT_FILE> > t    = import.RunImport(model, currentUserId, email, web);
                    Dictionary <int, DOCUMENT_FILE> oldIdToNewDocument = t.Item2;
                    foreach (jDOCUMENT_FILE d in model.jDOCUMENT_FILE)
                    {
                        DOCUMENT_FILE   docDB   = oldIdToNewDocument[d.Document_Id];
                        string          newPath = Path.GetFileName(d.Path);// getPath(d.Path);
                        ZipArchiveEntry entry   = zip.GetEntry(newPath);
                        if (entry == null)
                        {
                            entry = zip.GetEntry(d.Path);
                        }
                        if (entry != null)
                        {
                            SaveFileToDB(entry, docDB);
                        }
                        web.SaveChanges();
                    }
                }
            }
        }