Example #1
0
        public ActionResult Create([Bind(Include = "Id,Date,Title,Text")] Posts posts, List<int> tags)
        {
            var userManager = new ApplicationUserManager(new UserStore<ApplicationUser>(db));

            if (ModelState.IsValid) {
                posts.User = userManager.FindByName(User.Identity.Name);

                // Связь поста с изображениями.
                List<Images> images = ImgMarkup.Matches(posts.Text);
                if (images?.Count > 0) {
                    foreach (var image in images) {
                        posts.Images.Add(db.Images.Find(image.Id));
                    }
                }

                // Связь поста с тегами.
                if (tags?.Count > 0) {
                    foreach (var id in tags) {
                        Tags tag = db.Tags.Find(id);
                        if (tag == null) {
                            ModelState.AddModelError("", "Выбран несуществующий тег.");
                            return View(posts);
                        }
                        posts.Tags.Add(tag);
                    }
                }
                
                db.Posts.Add(posts);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(posts);
        }
Example #2
0
        public ActionResult Edit([Bind(Include = "Id,Date,Title,Text")] Posts posts, List<int> tags)
        {
            Posts currentPost = db.Posts.Find(posts.Id);
            if (currentPost == null) {
                return HttpNotFound();
            }

            // Редактор может редактировать только свой пост, а администратор все.
            if ((User.IsInRole("editor") && (currentPost.User.Id == User.Identity.GetUserId())) || User.IsInRole("admin")) {
                if (ModelState.IsValid) {
                    #region
                    // Обновленные данные.
                    currentPost.Date = posts.Date;
                    currentPost.Title = posts.Title;
                    currentPost.Text = posts.Text;

                    // Удалить предшествующие изображения и теги.
                    currentPost.Images.Clear();
                    currentPost.Tags.Clear();

                    // Связь поста с изображениями.
                    List<Images> images = ImgMarkup.Matches(posts.Text);
                    if (images?.Count > 0) {
                        foreach (var image in images) {
                            currentPost.Images.Add(db.Images.Find(image.Id));
                        }
                    }

                    // Связь поста с тегами.
                    if (tags?.Count > 0) {
                        foreach (var id in tags) {
                            Tags tag = db.Tags.Find(id);
                            if (tag == null) {
                                ModelState.AddModelError("", "Выбран несуществующий тег.");
                                return View(posts);
                            }
                            currentPost.Tags.Add(tag);
                        }
                    }

                    // Обновление.
                    db.SaveChanges();
                    return RedirectToAction("Index");
                    #endregion
                }
            }
            else {
                ModelState.AddModelError("", "У вас недостаточно прав для редактирования поста.");
            }

            return View(posts);
        }