// GET: Edit public async Task<ActionResult> Index(string topicId="",string articleId="",string EditMode="new",string RelatedArticle="") { //記事IDがある場合 ArticleEditViewModel vm=new ArticleEditViewModel(); ArticleModel articleModel = null; if(!String.IsNullOrWhiteSpace(articleId)) { //対象の記事の取得 var context = Request.GetOwinContext().Get<ApplicationDbContext>(); articleModel= await context.Articles.FindAsync(articleId); if (!articleModel.AuthorID.Equals(User.Identity.Name)) { return View("Page403"); } await context.Entry(articleModel).Collection(a=>a.Tags).LoadAsync(); } if (EditMode.Equals("edit")) { ArticleMarkupTableManager amtm = new ArticleMarkupTableManager(new BlobStorageConnection()); string markup = await amtm.GetArticleBodyAsync(articleId); vm.MarkupString = markup; } else if (EditMode.Equals("append")) { vm.MarkupString = string.Format("---\n\n##{0}追記分\n\n", DateTime.Now); } //newのときはしなくていい処理・・・タグ/タイトル/記事IDの保存 if (!EditMode.Equals("new")) { vm.Title = articleModel.Title; string tagsStr = ""; foreach (var tag in articleModel.Tags) { tagsStr += tag.TagName + " "; } vm.Tags = tagsStr; vm.ArticleId = articleId; } vm.EditMode = EditMode; vm.RelatedArticle = RelatedArticle; vm.TopicId = topicId; return View(vm); }
public async Task<ActionResult> Index(EditViewModel vm) { ApplicationDbContext context = HttpContext.GetOwinContext().Get<ApplicationDbContext>(); var connection = new BlobStorageConnection(); ArticleBodyTableManager abtm = new ArticleBodyTableManager(connection); ArticleMarkupTableManager amtm = new ArticleMarkupTableManager(connection); ArticleThumbnailManager atm=new ArticleThumbnailManager(connection); if (vm.Mode.Equals("new")) { if (!ArticleController.IsValidTitle(vm.Title, context).IsOK) return RedirectToAction("Page404", "Home"); var article = ArticleModel.GenerateArticle(vm.Title, User.Identity.Name); if (String.IsNullOrWhiteSpace(vm.RelatedArticle)) {//関連記事がない場合、新しいテーマとして判断する if (String.IsNullOrWhiteSpace(vm.TopicId)) { article.ThemeId = IdGenerator.getId(10); } else { article.ThemeId = vm.TopicId; } article.RelatedArticleId = null; } else { var relatedArticle =await context.Articles.FindAsync(vm.RelatedArticle); article.ThemeId = relatedArticle.ThemeId; article.RelatedArticleId = vm.RelatedArticle; } //タグの処理 var tags = System.Web.Helpers.Json.Decode<string[]>(vm.Tag); if (tags.Length > 5||vm.Markup.Length<=400||tags.Any(t=>t.Length>=15)) return RedirectToAction("Page404", "Home"); foreach (var tag in tags) { ArticleTagModel tagModel = context.Tags.Where(f => f.TagName.Equals(tag)).SingleOrDefault(); bool needToAdd = tagModel == null; tagModel = tagModel ?? ArticleTagModel.GenerateTag(tag); if (needToAdd) { context.Tags.Add(tagModel); } else { await context.Entry(tagModel).Collection(c => c.Articles).LoadAsync(); } tagModel.Articles.Add(article); article.Tags.Add(tagModel); } //記事の追加 context.Articles.Add(article); await context.SaveChangesAsync(); await abtm.AddArticle(article.ArticleModelId, vm.Body); await amtm.AddMarkupAsync(article.ArticleModelId, vm.Markup); await atm.UploadThumbnail(article.ArticleModelId, vm.Thumbnail); return Redirect("~/" + article.ArticleModelId); }else if (vm.Mode.Equals("edit")) { if (!User.IsInRole("Administrator")) return RedirectToAction("Page404", "Home"); LabelTableManager lm=new LabelTableManager(new TableStorageConnection()); ArticleModel articleModel = await context.Articles.FindAsync(vm.Id); if (!articleModel.AuthorID.Equals(User.Identity.Name)) return View("Page403"); await context.Entry(articleModel).Collection(a => a.Tags).LoadAsync(); articleModel.Tags.Clear(); var tags = System.Web.Helpers.Json.Decode<string[]>(vm.Tag); if (tags.Length > 5) return RedirectToAction("Page404", "Home"); foreach (var tag in tags) { ArticleTagModel tagModel = context.Tags.Where(f => f.TagName.Equals(tag)).SingleOrDefault(); bool needToAdd = tagModel == null; tagModel = tagModel ?? ArticleTagModel.GenerateTag(tag); if (needToAdd) { context.Tags.Add(tagModel); } else { await context.Entry(tagModel).Collection(c => c.Articles).LoadAsync(); } tagModel.Articles.Add(articleModel); articleModel.Tags.Add(tagModel); } articleModel.LabelCount = 0; await context.SaveChangesAsync(); await abtm.AddArticle(articleModel.ArticleModelId, vm.Body); await amtm.AddMarkupAsync(articleModel.ArticleModelId, vm.Markup); await atm.UploadThumbnail(articleModel.ArticleModelId, vm.Thumbnail); await lm.RemoveArticleLabelAsync(vm.Id); return Redirect("~/" + vm.Id); }else if (vm.Mode.Equals("append")) { LabelTableManager lm = new LabelTableManager(new TableStorageConnection()); ArticleModel articleModel = await context.Articles.FindAsync(vm.Id); if (!articleModel.AuthorID.Equals(User.Identity.Name)) return View("Page403"); await context.Entry(articleModel).Collection(a => a.Tags).LoadAsync(); articleModel.Tags.Clear(); var tags = System.Web.Helpers.Json.Decode<string[]>(vm.Tag); if (tags.Length > 5) return RedirectToAction("Page404", "Home"); foreach (var tag in tags) { ArticleTagModel tagModel = context.Tags.Where(f => f.TagName.Equals(tag)).SingleOrDefault(); bool needToAdd = tagModel == null; tagModel = tagModel ?? ArticleTagModel.GenerateTag(tag); if (needToAdd) { context.Tags.Add(tagModel); } else { await context.Entry(tagModel).Collection(c => c.Articles).LoadAsync(); } tagModel.Articles.Add(articleModel); articleModel.Tags.Add(tagModel); } articleModel.LabelCount = 0; await context.SaveChangesAsync(); await abtm.AppendArticle(articleModel.ArticleModelId, vm.Body); await amtm.AppendMarkupAsync(articleModel.ArticleModelId, vm.Markup); await atm.UploadThumbnail(articleModel.ArticleModelId, vm.Thumbnail); return Redirect("~/" + vm.Id); } else { return View("Page403"); } }
public async Task<ActionResult> DeleteArticle(string articleId) { var context = Request.GetOwinContext().Get<ApplicationDbContext>(); ArticleModel article = await context.Articles.FindAsync(articleId); if (article==null||!article.AuthorID.Equals(User.Identity.Name)) return View("Page403"); context.Entry(article).Collection(a => a.Tags); article.Tags.Clear(); BlobStorageConnection connection=new BlobStorageConnection(); ArticleBodyTableManager abtm=new ArticleBodyTableManager(connection); ArticleMarkupTableManager amtm=new ArticleMarkupTableManager(connection); await abtm.RemoveArticle(articleId); await amtm.RemoveArticle(articleId); context.Articles.Remove(article); await context.SaveChangesAsync(); return RedirectToAction("MyPage"); }