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; }
/// <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); } }
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)); }
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; }
public DocumentObject(CSET_Context assessmentContext, DOCUMENT_FILE doc) { this.assessmentContext = assessmentContext; this.doc = doc; }
public DocumentObject() { this.Doc = new DOCUMENT_FILE(); }
public DOCUMENT_FILE GetFileDescription(int id) { DOCUMENT_FILE doc = _context.DOCUMENT_FILE.Single(t => t.Document_Id == id); return(doc); }
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(); } } } }