Example #1
0
        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"));
        }
Example #2
0
        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"));
            }
        }