public IActionResult GetPastChanges([FromQuery] string entryId, [FromQuery] string lang) { if (entryId == null || lang == null) { return(StatusCode(400, "Missing parameter(s).")); } int idVal = EntryId.StringToId(entryId); string hw, trg; EntryStatus status; SqlDict.GetEntryById(idVal, out hw, out trg, out status); var changes = SqlDict.GetEntryChanges(idVal); // Remove first item (most recent change). But first, backprop potential trg and status change if (changes[0].HeadBefore != null) { hw = changes[0].HeadBefore; } if (changes[0].BodyBefore != null) { trg = changes[0].BodyBefore; } if (changes[0].StatusBefore != 99) { status = (EntryStatus)changes[0].StatusBefore; } changes.RemoveAt(0); StringBuilder sb = new StringBuilder(); HistoryRenderer.RenderPastChanges(sb, entryId, hw, trg, status, changes, lang); return(new ObjectResult(sb.ToString())); }
private PageResult doHistory(string rel, string lang) { // Page size: from config int histPageSize = int.Parse(config["historyPageSize"]); // Page ID from URL int histPageIX = -1; rel = rel.Replace("edit/history", ""); if (rel.StartsWith("/")) { rel = rel.Substring(1); } rel = rel.Replace("page-", ""); if (rel != "") { int.TryParse(rel, out histPageIX); } if (histPageIX == -1) { histPageIX = 0; } else { --histPageIX; // Humans count from 1 } // Retrieve data from DB int histPageCount; List <ChangeItem> histChanges; using (SqlDict.History hist = new SqlDict.History()) { histPageCount = hist.GetChangeCount() / histPageSize + 1; histChanges = hist.GetChangePage(histPageIX * histPageSize, histPageSize); } // Render StringBuilder sb = new StringBuilder(); HistoryRenderer hr = new HistoryRenderer(lang, histPageSize, histPageIX, histPageCount, histChanges); hr.Render(sb); // Wrap up PageResult pr = pageProvider.GetPage(lang, "edit/history", false); pr.Html = sb.ToString(); return(pr); }
public IActionResult GetHistoryItem([FromQuery] string entryId, [FromQuery] string lang) { if (entryId == null || lang == null) { return(StatusCode(400, "Missing parameter(s).")); } int idVal = EntryId.StringToId(entryId); string hw, trg; EntryStatus status; SqlDict.GetEntryById(idVal, out hw, out trg, out status); StringBuilder sb = new StringBuilder(); List <ChangeItem> changes = SqlDict.GetEntryChanges(idVal); ChangeItem ci = changes[0]; ci.EntryBody = trg; ci.EntryHead = hw; ci.EntryStatus = status; HistoryRenderer.RenderItem(sb, trg, status, changes[0], lang); return(new ObjectResult(sb.ToString())); }
public IActionResult GetEditEntryData([FromQuery] string entryId, [FromQuery] string lang) { if (entryId == null || lang == null) { return(StatusCode(400, "Missing parameter(s).")); } // The data we'll return. EditEntryData res = new EditEntryData(); // Is this an authenticated user? int userId; string userName; auth.CheckSession(HttpContext.Request.Headers, out userId, out userName); // Can she approve entries? if (userId != -1) { res.CanApprove = auth.CanApprove(userId); } // Retrieve entry int idVal = EntryId.StringToId(entryId); string hw, trg; EntryStatus status; SqlDict.GetEntryById(idVal, out hw, out trg, out status); CedictParser parser = new CedictParser(); CedictEntry entry = parser.ParseEntry(hw + " " + trg, 0, null); res.Status = status.ToString().ToLowerInvariant(); res.HeadSimp = entry.ChSimpl; res.HeadTrad = entry.ChTrad; res.HeadPinyin = ""; for (int i = 0; i != entry.PinyinCount; ++i) { if (res.HeadPinyin.Length > 0) { res.HeadPinyin += " "; } var pys = entry.GetPinyinAt(i); res.HeadPinyin += pys.GetDisplayString(false); } res.TrgTxt = trg.Trim('/').Replace('/', '\n').Replace('\\', '/'); // Entry HTML entry.Status = status; EntryRenderer er = new EntryRenderer(lang, entry, true, "mainEntry"); er.OneLineHanziLimit = 12; StringBuilder sb = new StringBuilder(); er.Render(sb, null); res.EntryHtml = sb.ToString(); // Entry history List <ChangeItem> changes = SqlDict.GetEntryChanges(idVal); sb.Clear(); HistoryRenderer.RenderEntryChanges(sb, hw, trg, status, changes, lang); res.HistoryHtml = sb.ToString(); return(new ObjectResult(res)); }