public async Task <IActionResult> Create(ProjectEntryViewModel model) { if (!ModelState.IsValid) { return(View(model)); } var entry = new ProjectEntry(); ParseModel(entry, model); foreach (var tag in model.TopicTagEntries) { entry.TopicTagEntries.Add(_context.TopicTags.Any(tt => tt.Title == tag) ? new TopicTagEntry { ProjectEntry = entry, TopicTag = _context.TopicTags.Single(tt => tt.Title == tag) } : new TopicTagEntry { ProjectEntry = entry, TopicTag = new TopicTag { Title = tag } }); } await _context.ProjectEntries.AddAsync(entry); await _context.SaveChangesAsync(); return(RedirectToAction("Index", new { slug = entry.Slug })); }
public async void ParseModel(ProjectEntry entry, ProjectEntryViewModel model) { entry.Title = model.Title; entry.RepositorySource = model.RepositorySource; entry.LanguageImage = model.LanguageImage; entry.Summary = model.Summary; entry.Description = model.Description; if (entry.DateCreated == default(DateTime)) { entry.DateCreated = DateTime.Now; } else { entry.LastModified = DateTime.Now; } if (entry.TopicTagEntries == null) { entry.TopicTagEntries = new List <TopicTagEntry>(); } entry.Slug = !string.IsNullOrWhiteSpace(model.Slug) ? model.Slug : entry.Title.GenerateSlug(); if (model.ProjectImageFile == null) { entry.ProjectImage = model.LanguageImage; } else { var projectImgRoot = Path.Combine(_hostingEnvironment.WebRootPath, "img", "projects"); if (!string.IsNullOrWhiteSpace(entry.ProjectImage) && entry.ProjectImage != entry.LanguageImage) { var delPath = Path.Combine(projectImgRoot, entry.ProjectImage); if (System.IO.File.Exists(delPath)) { System.IO.File.Delete(delPath); } } var filenameSplitter = model.ProjectImageFile.FileName.Split('.'); var filename = $"{model.Slug}-{Guid.NewGuid().ToString()}.{filenameSplitter.Last()}"; var path = Path.Combine(projectImgRoot, filename); using (var stream = new FileStream(path, FileMode.Create)) await model.ProjectImageFile.CopyToAsync(stream); entry.ProjectImage = filename; } }
public async Task <IActionResult> Modify(ProjectEntryViewModel model) { if (!ModelState.IsValid) { return(View(model)); } var entry = await _context.ProjectEntries .Include(pe => pe.TopicTagEntries) .ThenInclude(tte => tte.TopicTag) .FirstOrDefaultAsync(pe => pe.ID == model.ID); if (entry == default(ProjectEntry)) { return(RedirectToAction("NoResource", "Error")); } ParseModel(entry, model); foreach (var tag in model.TopicTagEntries.Where(tte => entry.TopicTagEntries.All(tt => tt.TopicTag.Title != tte))) { entry.TopicTagEntries.Add(_context.TopicTags.Any(tt => tt.Title == tag) ? new TopicTagEntry { ProjectEntry = entry, TopicTag = _context.TopicTags.Single(tt => tt.Title == tag) } : new TopicTagEntry { ProjectEntry = entry, TopicTag = new TopicTag { Title = tag } }); } foreach (var tag in entry.TopicTagEntries.Where(tte => model.TopicTagEntries.All(mtte => mtte != tte.TopicTag.Title))) { _context.TopicTagEntries.Remove(tag); } _context.ProjectEntries.Update(entry); await _context.SaveChangesAsync(); return(RedirectToAction("Index", new { slug = entry.Slug })); }