private int SaveNewVersion(CreateVersionViewModel model) { byte[] byteArray = null; using (var memory = new MemoryStream()) { model.Archive.InputStream.CopyTo(memory); byteArray = memory.GetBuffer(); } var fileName = string.Format(GlobalPatternConstants.VERSION_NAME, DateTime.Now.ToUniversalTime(), model.Archive.FileName); var fullPath = storage.UploadFile(byteArray, fileName, GlobalConstants.STORAGE_FOLDER); var extensionStartIndex = model.Archive.FileName.LastIndexOf('.'); var fileExtension = model.Archive.FileName.Substring(extensionStartIndex + 1, model.Archive.FileName.Length - extensionStartIndex - 1).ToLower(); var version = new ThesesSystem.Models.Version() { ThesisId = model.Id, StoragePath = fullPath, FileName = model.Archive.FileName, FileExtension = fileExtension }; this.Data.Versions.Add(version); this.Data.SaveChanges(); return(version.Id); }
public ActionResult AddVersion(int id, CreateVersionViewModel model) { if (this.IsThesisStudentOrTeacher(id)) { if (ModelState.IsValid && model.Archive != null && model.Archive.ContentLength > 0) { var userId = this.User.Identity.GetUserId(); var versionId = 0; try { versionId = SaveNewVersion(model); } catch (Exception) { return(View(model)); } UpdateParts(model.Id, model.ThesisParts); UpdatePages(model.Id, model.Pages); var logger = this.loggerCreator.Create(this.Data); var log = new ThesisLog { ThesisId = model.Id, UserId = userId, LogType = LogType.AddedVersion, ForwardUrl = string.Format(GlobalPatternConstants.FORWARD_URL_WITH_ID, "Thesis", "Version", versionId) }; logger.Log(log); CreateNotification(id, userId, log.ForwardUrl, GlobalPatternConstants.NOTIFICATION_ADDED_VERSION); return(RedirectToAction("Version", "Thesis", new { id = versionId })); } return(View(model)); } return(RedirectToAction("Index", "Storage")); }
public async Task <IActionResult> Create(CreateVersionViewModel model, string projectUrl) { if (ModelState.IsValid) { if (model.StartDate > model.DueDate) { ModelState.AddModelError("DueDate", "Due date cannot be before start date."); return(View(model)); } int versionCount = Database.ProjectVersion .Include(v => v.Project) .Where(v => v.Project.Url == projectUrl && v.Url == model.Url) .Select(v => v.Id) .Count(); bool isUnique = versionCount == 0 ? true : false; if (!isUnique) { ModelState.AddModelError("Version", "Such url is taken."); return(View(model)); } Project project = Database.Project .Where(p => p.Url == projectUrl) .FirstOrDefault(); if (model.StartDate < project.StartDate) { ModelState.AddModelError("StartDate", $"Start date must be after or equal {project.StartDate:dd.MM.yy}"); return(View(model)); } if (model.DueDate > project.DueDate) { ModelState.AddModelError("DueDate", $"Due date must be before or equal {project.DueDate:dd.MM.yy}"); return(View(model)); } ProjectVersion version = new ProjectVersion { Name = model.Name, Overview = model.Overview, StartDate = model.StartDate, DueDate = model.DueDate, Url = model.Url, ProjectId = project.Id }; Database.ProjectVersion.Add(version); int userId = int.Parse(User.Claims.First(c => c.Type == "UserId").Value); ProjectActivity activity = new ProjectActivity { ProjectId = project.Id, AuthorId = userId, Content = $"Created version '{version.Name}'" }; Database.ProjectActivity.Add(activity); await Database.SaveChangesAsync(); return(RedirectToAction("Index", "Version", new { versionUrl = version.Url })); } return(View(model)); }
private int SaveNewVersion(CreateVersionViewModel model) { byte[] byteArray = null; using (var memory = new MemoryStream()) { model.Archive.InputStream.CopyTo(memory); byteArray = memory.GetBuffer(); } var fileName = string.Format(GlobalPatternConstants.VERSION_NAME, DateTime.Now.ToUniversalTime(), model.Archive.FileName); var fullPath = storage.UploadFile(byteArray, fileName, GlobalConstants.STORAGE_FOLDER); var extensionStartIndex = model.Archive.FileName.LastIndexOf('.'); var fileExtension = model.Archive.FileName.Substring(extensionStartIndex + 1, model.Archive.FileName.Length - extensionStartIndex - 1).ToLower(); var version = new ThesesSystem.Models.Version() { ThesisId = model.Id, StoragePath = fullPath, FileName = model.Archive.FileName, FileExtension = fileExtension }; this.Data.Versions.Add(version); this.Data.SaveChanges(); return version.Id; }
public ActionResult AddVersion(int id, CreateVersionViewModel model) { if (this.IsThesisStudentOrTeacher(id)) { if (ModelState.IsValid && model.Archive != null && model.Archive.ContentLength > 0) { var userId = this.User.Identity.GetUserId(); var versionId = 0; try { versionId = SaveNewVersion(model); } catch (Exception) { return View(model); } UpdateParts(model.Id, model.ThesisParts); UpdatePages(model.Id, model.Pages); var logger = this.loggerCreator.Create(this.Data); var log = new ThesisLog { ThesisId = model.Id, UserId = userId, LogType = LogType.AddedVersion, ForwardUrl = string.Format(GlobalPatternConstants.FORWARD_URL_WITH_ID, "Thesis", "Version", versionId) }; logger.Log(log); CreateNotification(id, userId, log.ForwardUrl, GlobalPatternConstants.NOTIFICATION_ADDED_VERSION); return RedirectToAction("Version", "Thesis", new { id = versionId }); } return View(model); } return RedirectToAction("Index", "Storage"); }