예제 #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"));
        }
예제 #2
0
        public ActionResult Edit(int id)
        {
            try
            {
                ViewBag.canMakeProtected = false;


                String filePath;

                Models.Tome          tome = db.Tomes.Find(id);
                Models.TomeViewModel editTomeViewModel = new TomeViewModel();


                Tag selectedTag = (from tag in db.TagReferences
                                   where tag.TomeId == id
                                   select tag.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;

                ApplicationUser tomeOwner = (from selectedTome in db.Tomes
                                             where selectedTome.TomeId == id
                                             select selectedTome.ApplicationUser).SingleOrDefault();

                if (tomeOwner.Id == User.Identity.GetUserId() || User.IsInRole("Administrator") || User.IsInRole("Moderator"))
                {
                    ViewBag.canMakeProtected = true;
                }


                // Find current version and get the file path
                int currentVersionId = (from version in db.CurrentVersions
                                        where version.TomeId == id
                                        select version.TomeHistoryId).SingleOrDefault();

                filePath = (from history in db.TomeHistories
                            where history.Id == currentVersionId
                            select history.FilePath).SingleOrDefault();


                if (!Request.IsAuthenticated && tome.IsPrivate)
                {
                    return(RedirectToAction("AccessDenied", "Error"));
                }


                String tomeContent = System.IO.File.ReadAllText(filePath);
                editTomeViewModel.ReferredTome = tome;
                Debug.WriteLine(filePath);
                Debug.WriteLine(tomeContent);

                editTomeViewModel.ReferredTome = tome;
                TomeContent content = new TomeContent();
                content.Content = tomeContent;
                editTomeViewModel.TomeContent = content;


                String          currentUserId = User.Identity.GetUserId();
                ApplicationUser currentUser   = db.Users.FirstOrDefault(x => x.Id == currentUserId);
                var             roleName      = (from userroles in db.UserRoles
                                                 join roles in db.Roles on userroles.RoleId equals roles.Id
                                                 where userroles.UserId == currentUserId
                                                 select roles.Name).FirstOrDefault();
                ViewBag.roleAccount = roleName;

                return(View(editTomeViewModel));
            }
            catch (Exception e)
            {
                TempData["Alert"] = "An error occured: TomeController Edit Get";
                Debug.WriteLine("An error occured: " + e);
                return(RedirectToAction("Index"));
            }
        }