public ActionResult Edit(TomeViewModel editedTome) { string path = Server.MapPath("../.."); try { string currentUserId = User.Identity.GetUserId(); ApplicationUser currentUser = db.Users.FirstOrDefault(x => x.Id == currentUserId); Models.Tome tome = db.Tomes.Find(editedTome.ReferredTome.TomeId); tome.CreationDate = DateTime.Now; tome.IsPrivate = editedTome.ReferredTome.IsPrivate; TomeHistory tomeHistory = new TomeHistory { Tome = tome, FilePath = path + BASE_PATH + TOME_IDENTIFIER + (User.Identity.GetUserName().IsEmpty() ? ("anonymous" + Request.AnonymousID) : User.Identity.GetUserName()) + "-" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".html", ModificationDate = DateTime.Now, ApplicationUser = currentUser }; if (!Request.IsAuthenticated && tome.IsPrivate) { return(RedirectToAction("NotFound", "Error")); } Models.TomeViewModel editTomeViewModel = new TomeViewModel(); var selectedTag = (from tag in db.TagReferences where tag.TomeId == tome.TomeId select tag).SingleOrDefault(); var SelectListItems = db.Tags.Select(x => new SelectListItem { Value = x.TagId.ToString(), Text = x.TagTitle }); var TagList = new List <SelectListItem>(SelectListItems); editTomeViewModel.TagList = TagList; if (selectedTag != null) { selectedTag.TagId = editedTome.SelectedTag; db.SaveChanges(); } else { TagReference newTagRef = new TagReference(); newTagRef.TomeId = editedTome.ReferredTome.TomeId; newTagRef.TagId = editedTome.SelectedTag; db.TagReferences.Add(newTagRef); } // insert into db db.TomeHistories.Add(tomeHistory); db.SaveChanges(); // create file and fill with content string content = editedTome.TomeContent.Content.Replace("\"../uploads/", "\"../../uploads/");; System.IO.File.WriteAllText(tomeHistory.FilePath, content); // update curent version var currentVersion = db.CurrentVersions.SingleOrDefault(m => m.Tome.TomeId == editedTome.ReferredTome.TomeId); currentVersion.TomeHistory = tomeHistory; db.SaveChanges(); } catch (Exception e) { TempData["Alert"] = "An error occured: TomeController Edit Post"; Console.WriteLine(e); throw; } return(RedirectToAction("Index")); }
public ActionResult Add(Models.TomeViewModel tome) { string path = Server.MapPath(".."); try { if (!ModelState.IsValid) { TempData["Alert"] = "Fill all required fields."; return(RedirectToAction("Add")); } string currentUserId = User.Identity.GetUserId(); ApplicationUser currentUser = db.Users.FirstOrDefault(x => x.Id == currentUserId); var resultTomes = db.Tomes.Where(x => x.Name == tome.ReferredTome.Name).SingleOrDefault(); if (resultTomes != null) { TempData["Alert"] = "A tome with this name already exists."; return(RedirectToAction("Add")); } tome.ReferredTome.CreationDate = DateTime.Now; tome.ReferredTome.Name = tome.ReferredTome.Name.ToLower(); if (Request.IsAuthenticated) { tome.ReferredTome.ApplicationUser = currentUser; } else { // need to be null for anonymous users tome.ReferredTome.IsPrivate = false; tome.ReferredTome.ApplicationUser = null; } db.Tomes.Add(tome.ReferredTome); db.SaveChanges(); // check if tag is non empty if (tome.SelectedTag != 0) { Tag chosenTag = db.Tags.Find(tome.SelectedTag); TagReference newReference = new TagReference(); newReference.Tag = chosenTag; newReference.Tome = tome.ReferredTome; db.TagReferences.Add(newReference); } // create init history TomeHistory tomeHistory = new TomeHistory { Tome = tome.ReferredTome, FilePath = path + BASE_PATH + TOME_IDENTIFIER + (User.Identity.GetUserName().IsEmpty() ? ("anonymous" + Request.AnonymousID) : User.Identity.GetUserName()) + "-" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".html", ModificationDate = DateTime.Now, ApplicationUser = currentUser }; db.TomeHistories.Add(tomeHistory); db.SaveChanges(); //Write content to file string content = tome.TomeContent.Content.Replace("\"../uploads/", "\"../../uploads/"); System.IO.File.WriteAllText(tomeHistory.FilePath, content); CurrentVersion currentVersion = new CurrentVersion { TomeHistory = tomeHistory, Tome = tome.ReferredTome }; db.CurrentVersions.Add(currentVersion); db.SaveChanges(); return(RedirectToAction("Show", new { id = tome.ReferredTome.TomeId })); } catch (Exception e) { TempData["Alert"] = "An error occured: TomeController Add Post"; Debug.WriteLine("An error occured: " + e); return(RedirectToAction("Index")); } }