public IActionResult Update(SpiralLake.Models.MesmerAndText mesmerAndText) { var updatingMesmer = _context.Mesmers.Where(m => m.ID == mesmerAndText.Mesmer.ID).FirstOrDefault(); var userId = User.Claims.FirstOrDefault(c => c.Type.Equals("UserId")).Value; if (!updatingMesmer.CreatorID.Equals(userId)) { return(Redirect("/Account/Logoff")); } updatingMesmer.Name = HttpUtility.HtmlEncode(mesmerAndText.Mesmer.Name); updatingMesmer.Description = HttpUtility.HtmlEncode(mesmerAndText.Mesmer.Description.Replace("\r", "").Replace("\n", " ")); var mesmerLines = mesmerAndText.MesmerText.Replace("\r", "").Split("\n"); var lineIndex = 0; var existingLines = _context.MesmerTexts.Where(mt => mt.MesmerID == updatingMesmer.ID); foreach (var line in existingLines) { _context.MesmerTexts.Remove(line); } foreach (var line in mesmerLines) { var htmlEncodedLine = HttpUtility.HtmlEncode(line); _context.MesmerTexts.Add(new Data.MesmerText { LineID = lineIndex, MesmerID = updatingMesmer.ID, Text = htmlEncodedLine, UserID = userId }); lineIndex++; } var existingTags = _context.MesmerTags.Where(mt => mt.MesmerID == updatingMesmer.ID); foreach (var tag in existingTags) { _context.MesmerTags.Remove(tag); } _context.SaveChanges(); if (null != mesmerAndText.Tags) { var mesmerTags = mesmerAndText.Tags.Split(" "); foreach (var tag in mesmerTags) { if (!"".Equals(tag)) { var encodedTag = HttpUtility.HtmlEncode(tag); if (!_context.MesmerTags.Where(mt => mt.MesmerID.Equals(updatingMesmer.ID) && mt.Tag.Equals(encodedTag)).Any()) { _context.MesmerTags.Add(new Data.MesmerTag { MesmerID = updatingMesmer.ID, Tag = encodedTag }); _context.SaveChanges(); } } } } return(View("/Views/Mesmer/AddUpdate.cshtml", new SpiralLake.Models.MesmerAndText { ButtonLabel = "Update", Notification = "Mesmer updated", Mesmer = updatingMesmer, MesmerText = mesmerAndText.MesmerText })); }
public IActionResult Add(SpiralLake.Models.MesmerAndText mesmerAndText) { mesmerAndText.Mesmer.Name = HttpUtility.HtmlEncode(mesmerAndText.Mesmer.Name); mesmerAndText.Mesmer.Description = HttpUtility.HtmlEncode(mesmerAndText.Mesmer.Description.Replace("\r", "").Replace("\n", " ")); var seekingName = true; var randomBytes = new Byte[128]; var rng = new System.Random(); var userId = User.Claims.FirstOrDefault(c => c.Type.Equals("UserId")).Value; while (seekingName) { rng.NextBytes(randomBytes); var candidateName = System.Convert.ToBase64String(randomBytes).Replace("+", "_").Replace("=", "~").Replace("/", "-"); if (!_context.Mesmers.Where(m => m.ID.Equals(candidateName)).Any()) { mesmerAndText.Mesmer.CreatorID = userId; mesmerAndText.Mesmer.ID = candidateName; _context.Mesmers.Add(mesmerAndText.Mesmer); seekingName = false; } } var mesmerLines = mesmerAndText.MesmerText.Replace("\r", "").Split("\n"); var lineIndex = 0; foreach (var line in mesmerLines) { var htmlEncodedLine = HttpUtility.HtmlEncode(line); _context.MesmerTexts.Add(new Data.MesmerText { LineID = lineIndex, MesmerID = mesmerAndText.Mesmer.ID, Text = htmlEncodedLine, UserID = userId }); lineIndex++; } if (null != mesmerAndText.Tags) { var mesmerTags = mesmerAndText.Tags.Split(" "); foreach (var tag in mesmerTags) { if (!"".Equals(tag)) { var encodedTag = HttpUtility.HtmlEncode(tag); if (!_context.MesmerTags.Where(mt => mt.MesmerID.Equals(mesmerAndText.Mesmer.ID) && mt.Tag.Equals(encodedTag)).Any()) { _context.MesmerTags.Add(new Data.MesmerTag { MesmerID = mesmerAndText.Mesmer.ID, Tag = encodedTag }); _context.SaveChanges(); } } } } _context.SaveChanges(); return(View("/Views/Mesmer/AddUpdate.cshtml", new SpiralLake.Models.MesmerAndText { ButtonLabel = "Add", Notification = "Mesmer added", Mesmer = mesmerAndText.Mesmer, MesmerText = mesmerAndText.MesmerText })); }
private SpiralLake.Models.MesmerAndText GetMesmerAndText(String id, bool increment = false, bool includeTags = false) { var loadedMesmer = _context.Mesmers.Where(m => m.ID.Equals(id)).FirstOrDefault(); List <SpiralLake.Data.MesmerText> mesmerLines; var userId = User.Claims.FirstOrDefault(c => c.Type.Equals("UserId"))?.Value; if (_context.MesmerTexts.Where(mt => mt.MesmerID.Equals(id) && mt.UserID.Equals(userId)).Any()) { mesmerLines = _context.MesmerTexts.Where(mt => mt.MesmerID.Equals(id) && mt.UserID.Equals(userId)).OrderBy(mt => mt.LineID).ToList(); } else { mesmerLines = _context.MesmerTexts.Where(mt => mt.MesmerID.Equals(id) && mt.UserID.Equals(loadedMesmer.CreatorID)).OrderBy(mt => mt.LineID).ToList(); } var mesmerLineStrings = new List <String>(); foreach (var line in mesmerLines) { mesmerLineStrings.Add(line.Text); } var text = String.Join("\r\n", mesmerLineStrings); if (increment) { loadedMesmer.Views++; _context.SaveChanges(); } var results = new SpiralLake.Models.MesmerAndText { Mesmer = loadedMesmer, MesmerText = text }; if (includeTags) { var mesmerTags = _context.MesmerTags.Where(m => m.MesmerID == loadedMesmer.ID).Select(m => m.Tag); results.Tags = String.Join(" ", mesmerTags); } return(results); }