#186 displaying user last edit

This commit is contained in:
Hamid Reza Mohammadi 2021-07-30 15:17:44 +04:30
parent 18d84184e8
commit 61f41547e2
5 changed files with 167 additions and 102 deletions

View File

@ -13,72 +13,84 @@
}
else
{
<table>
<tr>
<td>
عنوان فعلی:
</td>
</tr>
<tr>
<td>
<p id="original-0">@Model.PageInformation.Poem.Title</p>
</td>
</tr>
<tr>
<td>
عنوان ویراستهٔ من:
</td>
</tr>
<tr>
<td>
<input type="text" id="id-0" name="id-0" value="@Model.PageInformation.Poem.Title" size="100" oninput="editorcompare(0)" />
</td>
</tr>
<tr>
<td>
تغییرات:
</td>
</tr>
<tr>
<td>
<p id="compare-0">@Model.PageInformation.Poem.Title</p>
</td>
</tr>
@foreach (var verse in Model.PageInformation.Poem.Verses)
if (Model.MyLastEdit != null)
{
<table>
<tr>
<td colspan="2">ویرایشهای من</td>
</tr>
@if (Model.MyLastEdit.Title != null)
{
<tr>
<td>
<p style="color:red">@Model.MyLastEdit.Title</p>
</td>
<td>
<p style="color:green">@Model.MyLastEdit.OriginalTitle</p>
</td>
</tr>
}
@if (Model.MyLastEdit.Rhythm != null)
{
<tr>
<td>
<p style="color:red">@Model.MyLastEdit.Rhythm</p>
</td>
<td>
<p style="color:green">@Model.MyLastEdit.OriginalRhythm</p>
</td>
</tr>
}
@if (Model.MyLastEdit.VerseOrderText != null)
@foreach (var verse in Model.MyLastEdit.VerseOrderText)
{
<tr>
<td>
<p style="color:red">@verse.OriginalText</p>
</td>
<td>
<p style="color:green">@verse.Text</p>
</td>
</tr>
}
@if (!string.IsNullOrEmpty(Model.MyLastEdit.Note))
{
<tr>
<td>یادداشت:</td>
<td>
@Model.MyLastEdit.Note
</td>
</tr>
}
</table>
}
<table>
<tr>
<td>
بیت @Model.GetVerseCoupletNumber(verse).ToPersianNumbers()
<p><strong>ویرایش متن:</strong></p>
</td>
</tr>
<tr>
<td>
مصرع @verse.VOrder.ToPersianNumbers()
عنوان فعلی:
</td>
</tr>
<tr>
<td>
نوع: @Model.GetVersePosition(verse)
<p id="original-0">@Model.PageInformation.Poem.Title</p>
</td>
</tr>
<tr>
<td>
متن فعلی:
عنوان ویراستهٔ من:
</td>
</tr>
<tr>
<td>
<p id="original-@($"{verse.VOrder}")">@verse.Text</p>
</td>
</tr>
<tr>
<td>
ویراستهٔ من:
</td>
</tr>
<tr>
<td>
<input type="text" id="id-@($"{verse.VOrder}")" name="name-@($"{verse.VOrder}")" value="@verse.Text" size="100" oninput="editorcompare(@verse.VOrder)" />
<input type="text" id="id-0" name="id-0" value="@Model.PageInformation.Poem.Title" size="100" oninput="editorcompare(0)" />
</td>
</tr>
<tr>
@ -88,57 +100,104 @@ else
</tr>
<tr>
<td>
<p id="compare-@($"{verse.VOrder}")">@verse.Text</p>
<p id="compare-0">@Model.PageInformation.Poem.Title</p>
</td>
</tr>
@foreach (var verse in Model.PageInformation.Poem.Verses)
{
<tr>
<td>
بیت @Model.GetVerseCoupletNumber(verse).ToPersianNumbers()
</td>
</tr>
<tr>
<td>
مصرع @verse.VOrder.ToPersianNumbers()
</td>
</tr>
<tr>
<td>
نوع: @Model.GetVersePosition(verse)
</td>
</tr>
<tr>
<td>
متن فعلی:
</td>
</tr>
<tr>
<td>
<p id="original-@($"{verse.VOrder}")">@verse.Text</p>
</td>
</tr>
<tr>
<td>
ویراستهٔ من:
</td>
</tr>
<tr>
<td>
<input type="text" id="id-@($"{verse.VOrder}")" name="name-@($"{verse.VOrder}")" value="@verse.Text" size="100" oninput="editorcompare(@verse.VOrder)" />
</td>
</tr>
<tr>
<td>
تغییرات:
</td>
</tr>
<tr>
<td>
<p id="compare-@($"{verse.VOrder}")">@verse.Text</p>
</td>
</tr>
}
<tr>
<td>
وزن فعلی:
</td>
</tr>
<tr>
<td>
<p id="rhythm-old">@(Model.PageInformation.Poem.GanjoorMetre == null ? "" : Model.PageInformation.Poem.GanjoorMetre.Rhythm)</p>
</td>
</tr>
<tr>
<td>
وزن ویراستهٔ من:
</td>
</tr>
<tr>
<td>
<input type="text" id="rhythm-new" name="rhythm-new" value="@(Model.PageInformation.Poem.GanjoorMetre == null ? "" : Model.PageInformation.Poem.GanjoorMetre.Rhythm)" size="100" list="rythms" />
<datalist id="rythms">
@if (Model.Rhythms != null)
@foreach (var rhythm in Model.Rhythms)
{
<option value="@rhythm.Rhythm">@rhythm.Rhythm</option>
}
</datalist>
</td>
</tr>
<tr>
<td>
توضیح این ویرایش:
</td>
</tr>
}
<tr>
<td>
<input type="text" id="note" name="note" value="" size="100" />
</td>
</tr>
<tr>
<td>
وزن فعلی:
</td>
</tr>
<tr>
<td>
<p id="rhythm-old">@(Model.PageInformation.Poem.GanjoorMetre == null ? "" : Model.PageInformation.Poem.GanjoorMetre.Rhythm)</p>
</td>
</tr>
<tr>
<td>
وزن ویراستهٔ من:
</td>
</tr>
<tr>
<td>
<input type="text" id="rhythm-new" name="rhythm-new" value="@(Model.PageInformation.Poem.GanjoorMetre == null ? "" : Model.PageInformation.Poem.GanjoorMetre.Rhythm)" size="100" list="rythms" />
<datalist id="rythms">
@if (Model.Rhythms != null)
@foreach (var rhythm in Model.Rhythms)
{
<option value="@rhythm.Rhythm">@rhythm.Rhythm</option>
}
</datalist>
</td>
</tr>
<tr>
<td>
توضیح این ویرایش:
</td>
</tr>
<tr>
<td>
<a role="button" style="cursor:pointer;width:100%;color:white;background-color:green;display:block" onclick="savePoemCorrections(@Model.PageInformation.Poem.Id, @Model.PageInformation.Poem.Verses.Length)">ذخیره</a>
</td>
</tr>
<tr>
<td>
<input type="text" id="note" name="note" value="" size="100" />
</td>
</tr>
<tr>
<td>
<a role="button" style="cursor:pointer;width:100%;color:white;background-color:green;display:block" onclick="savePoemCorrections(@Model.PageInformation.Poem.Id, @Model.PageInformation.Poem.Verses.Length)">ذخیره</a>
</td>
</tr>
</table>
</table>
}

View File

@ -15,6 +15,11 @@ namespace GanjooRazor.Areas.User.Pages
[IgnoreAntiforgeryToken(Order = 1001)]
public class EditorModel : PageModel
{
/// <summary>
/// my last edit
/// </summary>
public GanjoorPoemCorrectionViewModel MyLastEdit { get; set; }
/// <summary>
/// page
/// </summary>
@ -84,19 +89,21 @@ namespace GanjooRazor.Areas.User.Pages
{
if (await GanjoorSessionChecker.PrepareClient(secureClient, Request, Response))
{
var editResponse = await secureClient.GetAsync($"{APIRoot.Url}/api/ganjoor/poem/correction/last/{Request.Query["id"]}");
editResponse.EnsureSuccessStatusCode();
MyLastEdit = JsonConvert.DeserializeObject<GanjoorPoemCorrectionViewModel>(await editResponse.Content.ReadAsStringAsync());
var rhythmResponse = await secureClient.GetAsync($"{APIRoot.Url}/api/ganjoor/rhythms");
rhythmResponse.EnsureSuccessStatusCode();
Rhythms = JsonConvert.DeserializeObject<GanjoorMetre[]>(await rhythmResponse.Content.ReadAsStringAsync());
var pageUrlResponse = await secureClient.GetAsync($"{APIRoot.Url}/api/ganjoor/pageurl?id={Request.Query["id"]}");
pageUrlResponse.EnsureSuccessStatusCode();
var pageUrl = JsonConvert.DeserializeObject<string>(await pageUrlResponse.Content.ReadAsStringAsync());
var pageQuery = await secureClient.GetAsync($"{APIRoot.Url}/api/ganjoor/page?url={pageUrl}");
pageQuery.EnsureSuccessStatusCode();
PageInformation = JObject.Parse(await pageQuery.Content.ReadAsStringAsync()).ToObject<GanjoorPageCompleteViewModel>();
}
else

View File

@ -236,7 +236,6 @@
},
success: function () {
alert('تصحیحات ارسال شد.');
location.reload(true);
},
error: function (e) {

View File

@ -791,7 +791,7 @@ namespace RMuseum.Controllers
[HttpPost]
[Route("poem/correction")]
[Authorize]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(GanjoorPageCompleteViewModel))]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(GanjoorPoemCorrectionViewModel))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
[ProducesResponseType((int)HttpStatusCode.NotFound)]
public async Task<IActionResult> SuggestPoemCorrection([FromBody] GanjoorPoemCorrectionViewModel correction)
@ -816,7 +816,7 @@ namespace RMuseum.Controllers
[HttpGet]
[Route("poem/correction/last/{id}")]
[Authorize]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(GanjoorPageCompleteViewModel))]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(GanjoorPoemCorrectionViewModel))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
[ProducesResponseType((int)HttpStatusCode.NotFound)]
public async Task<IActionResult> GetLastUnreviewedUserCorrectionForPoem(int id)

View File

@ -1339,7 +1339,7 @@ namespace RMuseum.Services.Implementation
/// <returns></returns>
public async Task<RServiceResult<GanjoorPoemCorrectionViewModel>> GetLastUnreviewedUserCorrectionForPoem(Guid userId, int poemId)
{
var dbCorrection = await _context.GanjoorPoemCorrections
var dbCorrection = await _context.GanjoorPoemCorrections.AsNoTracking().Include(c => c.VerseOrderText)
.Where(c => c.UserId == userId && c.PoemId == poemId && c.Result == CorrectionReviewResult.NotReviewed)
.OrderByDescending(c => c.Id)
.FirstOrDefaultAsync();
@ -1353,7 +1353,7 @@ namespace RMuseum.Services.Implementation
{
PoemId = dbCorrection.PoemId,
UserId = dbCorrection.UserId,
VerseOrderText = dbCorrection.VerseOrderText.ToArray(),
VerseOrderText = dbCorrection.VerseOrderText == null ? null : dbCorrection.VerseOrderText.ToArray(),
Title = dbCorrection.Title,
OriginalTitle = dbCorrection.OriginalTitle,
Rhythm = dbCorrection.Rhythm,