#418 saving quoted poem

This commit is contained in:
Hamid Reza Mohammadi 2023-12-21 21:04:40 +03:30
parent f94f3542b5
commit 99bd73cb48
2 changed files with 341 additions and 278 deletions

View File

@ -11,7 +11,7 @@
<p>@Html.Raw(Model.LastMessage)</p>
@if (Model.GanjoorQuotedPoem != null)
@if (Model.GanjoorQuotedPoem != null && Model.Couplets != null)
{
<script>
@ -76,246 +76,256 @@
}
</script>
<table>
<tr>
<td>
بیت مرجع:
</td>
</tr>
<tr>
<td>
<select asp-for="GanjoorQuotedPoem.CoupletIndex" style="width:500px;">
@foreach (var item in Model.Couplets)
{
<option value="@item.Item1">@($"{(item.Item1 + 1).ToPersianNumbers()} - {item.Item2}")</option>
}
</select>
</td>
</tr>
<tr>
<td>
مصرع اول مهم است:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.CoupletVerse1ShouldBeEmphasized" />
</td>
</tr>
<tr>
<td>
مصرع دوم مهم است:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.CoupletVerse2ShouldBeEmphasized" />
</td>
</tr>
<tr>
<td>
شاعر مرجع:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.PoetId" />
</td>
</tr>
<tr>
<td>
<a onclick="finalizeSelectPage()" class="pagebutton" role="button" id="finalize-select" style="display:none">انتخاب کردم</a>
</td>
</tr>
<tr>
<td>
<iframe id="select-poem" src="/" width="800" height="600" style="display:none"></iframe>
</td>
</tr>
<form method="post">
<table>
<tr>
<td>
بیت مرجع:
<input type="hidden" asp-for="GanjoorQuotedPoem.Id" />
<input type="hidden" asp-for="GanjoorQuotedPoem.PoemId" />
<input type="hidden" asp-for="GanjoorQuotedPoem.PoetId" />
</td>
</tr>
<tr>
<td>
<select asp-for="GanjoorQuotedPoem.CoupletIndex" style="width:500px;">
@foreach (var item in Model.Couplets)
{
<option value="@item.Item1">@($"{(item.Item1 + 1).ToPersianNumbers()} - {item.Item2}")</option>
}
</select>
</td>
</tr>
<tr>
<td>
مصرع اول مهم است:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.CoupletVerse1ShouldBeEmphasized" />
</td>
</tr>
<tr>
<td>
مصرع دوم مهم است:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.CoupletVerse2ShouldBeEmphasized" />
</td>
</tr>
<tr>
<td>
شاعر مرجع:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.PoetId" />
</td>
</tr>
<tr>
<td>
<a onclick="finalizeSelectPage()" class="pagebutton" role="button" id="finalize-select" style="display:none">انتخاب کردم</a>
</td>
</tr>
<tr>
<td>
<iframe id="select-poem" src="/" width="800" height="600" style="display:none"></iframe>
</td>
</tr>
<tr>
<td>
<a onclick="selectGanjoorPage()" class="pagebutton" role="button" id="display-frame">گزینش شعر مرتبط</a>
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.RelatedPoemId" />
</td>
</tr>
<tr>
<td>
بیت مرتبط:
</td>
</tr>
<tr>
<td>
<select asp-for="GanjoorQuotedPoem.RelatedCoupletIndex" style="width:500px;">
@foreach (var item in Model.RelatedCouplets)
{
<option value="@item.Item1">@($"{(item.Item1 + 1).ToPersianNumbers()} - {item.Item2}")</option>
}
</select>
</td>
</tr>
<tr>
<td>
مصرع اول مهم است:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.RelatedCoupletVerse1ShouldBeEmphasized" />
</td>
</tr>
<tr>
<td>
مصرع دوم مهم است:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.RelatedCoupletVerse2ShouldBeEmphasized" />
</td>
</tr>
<tr>
<td>
ترتیب:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.SortOrder" />
</td>
</tr>
<tr>
<td>
شعر مرتبط پیش از این شعر است:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.IsPriorToRelated" />
</td>
</tr>
<tr>
<td>
نمایش در فهرست اصلی:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.ChosenForMainList" />
</td>
</tr>
<tr>
<td>
مستقیماً ارتباط ندارد:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.IndirectQuotation" />
</td>
</tr>
<tr>
<td>
منتسب به هر دو شاعر:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.ClaimedByBothPoets" />
</td>
</tr>
<tr>
<td>
شاعر:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.RelatedPoetId" />
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.CachedRelatedPoemPoetName" />
</td>
</tr>
<tr>
<td>
سالمرگ شاعر:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.CachedRelatedPoemPoetDeathYearInLHijri" />
</td>
</tr>
<tr>
<td>
نشانی صفحهٔ شاعر:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.CachedRelatedPoemPoetUrl" style="direction:ltr" size="80" />
</td>
</tr>
<tr>
<td>
تصویر شاعر:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.CachedRelatedPoemPoetImage" style="direction:ltr" size="80" />
</td>
</tr>
<tr>
<td>
عنوان شعر:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.CachedRelatedPoemFullTitle" size="80" />
</td>
</tr>
<tr>
<td>
نشانی شعر:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.CachedRelatedPoemFullUrl" style="direction:ltr" size="80" />
</td>
</tr>
<tr>
<td>
یادداشت:
</td>
</tr>
<tr>
<td>
<textarea asp-for="GanjoorQuotedPoem.Note" rows="4" cols="80"></textarea>
</td>
</tr>
<tr>
<td>
منتشر شده:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.Published" />
</td>
</tr>
<tr>
<td>
<a onclick="selectGanjoorPage()" class="pagebutton" role="button" id="display-frame">گزینش شعر مرتبط</a>
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.RelatedPoemId" />
</td>
</tr>
<tr>
<td>
بیت مرتبط:
</td>
</tr>
<tr>
<td>
<select asp-for="GanjoorQuotedPoem.RelatedCoupletIndex" style="width:500px;">
@foreach (var item in Model.RelatedCouplets)
{
<option value="@item.Item1">@($"{(item.Item1 + 1).ToPersianNumbers()} - {item.Item2}")</option>
}
</select>
</td>
</tr>
<tr>
<td>
مصرع اول مهم است:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.RelatedCoupletVerse1ShouldBeEmphasized" />
</td>
</tr>
<tr>
<td>
مصرع دوم مهم است:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.RelatedCoupletVerse2ShouldBeEmphasized" />
</td>
</tr>
<tr>
<td>
ترتیب:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.SortOrder" />
</td>
</tr>
<tr>
<td>
شعر مرتبط پیش از این شعر است:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.IsPriorToRelated" />
</td>
</tr>
<tr>
<td>
نمایش در فهرست اصلی:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.ChosenForMainList" />
</td>
</tr>
<tr>
<td>
مستقیماً ارتباط ندارد:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.IndirectQuotation" />
</td>
</tr>
<tr>
<td>
منتسب به هر دو شاعر:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.ClaimedByBothPoets" />
</td>
</tr>
<tr>
<td>
شاعر:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.RelatedPoetId" />
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.CachedRelatedPoemPoetName" />
</td>
</tr>
<tr>
<td>
سالمرگ شاعر:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.CachedRelatedPoemPoetDeathYearInLHijri" />
</td>
</tr>
<tr>
<td>
نشانی صفحهٔ شاعر:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.CachedRelatedPoemPoetUrl" style="direction:ltr" size="80" />
</td>
</tr>
<tr>
<td>
تصویر شاعر:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.CachedRelatedPoemPoetImage" style="direction:ltr" size="80" />
</td>
</tr>
<tr>
<td>
عنوان شعر:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.CachedRelatedPoemFullTitle" size="80" />
</td>
</tr>
<tr>
<td>
نشانی شعر:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.CachedRelatedPoemFullUrl" style="direction:ltr" size="80" />
</td>
</tr>
</table>
<tr>
<td>
یادداشت:
</td>
</tr>
<tr>
<td>
<textarea asp-for="GanjoorQuotedPoem.Note" rows="4" cols="80"></textarea>
</td>
</tr>
<tr>
<td>
منتشر شده:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.Published" />
</td>
</tr>
<tr>
<td>
<input type="submit" value="ذخیره" />
</td>
</tr>
</table>
</form>
}

View File

@ -9,6 +9,9 @@ using System.Threading.Tasks;
using System;
using System.Collections.Generic;
using RMuseum.Models.Ganjoor;
using GanjooRazor.Utils;
using System.Text;
using System.Linq;
namespace GanjooRazor.Areas.Admin.Pages
{
@ -33,6 +36,8 @@ namespace GanjooRazor.Areas.Admin.Pages
public GanjoorPoemCompleteViewModel Poem { get; set; }
public GanjoorPoemCompleteViewModel RelatedPoem { get; set; }
public Tuple<int, string>[] Couplets { get; set; }
public Tuple<int, string>[] RelatedCouplets { get; set; }
@ -96,64 +101,43 @@ namespace GanjooRazor.Areas.Admin.Pages
return couplets.ToArray();
}
public async Task<IActionResult> OnGetAsync()
private async Task<string> Prepare(int poemId, string id)
{
if (string.IsNullOrEmpty(Request.Cookies["Token"]))
return Redirect("/");
if (string.IsNullOrEmpty(Request.Query["p"]))
LastMessage = "";
var poemQuery = await _httpClient.GetAsync($"{APIRoot.Url}/api/ganjoor/poem/{poemId}");
if (!poemQuery.IsSuccessStatusCode)
{
return StatusCode(StatusCodes.Status500InternalServerError, "شناسهٔ شعر مشخص نیست.");
LastMessage = JsonConvert.DeserializeObject<string>(await poemQuery.Content.ReadAsStringAsync());
return LastMessage;
}
int poemId = int.Parse(Request.Query["p"]);
var pageUrlResponse = await _httpClient.GetAsync($"{APIRoot.Url}/api/ganjoor/pageurl?id={poemId}");
if (!pageUrlResponse.IsSuccessStatusCode)
{
LastMessage = JsonConvert.DeserializeObject<string>(await pageUrlResponse.Content.ReadAsStringAsync());
return Page();
}
var pageUrl = JsonConvert.DeserializeObject<string>(await pageUrlResponse.Content.ReadAsStringAsync());
var pageQuery = await _httpClient.GetAsync($"{APIRoot.Url}/api/ganjoor/page?url={pageUrl}");
if (!pageQuery.IsSuccessStatusCode)
{
LastMessage = JsonConvert.DeserializeObject<string>(await pageQuery.Content.ReadAsStringAsync());
return Page();
}
var pageInformation = JObject.Parse(await pageQuery.Content.ReadAsStringAsync()).ToObject<GanjoorPageCompleteViewModel>();
Poem = pageInformation.Poem;
Poem = JObject.Parse(await poemQuery.Content.ReadAsStringAsync()).ToObject<GanjoorPoemCompleteViewModel>();
Couplets = GetCouplets(Poem.Verses);
RelatedCouplets = [];
if (!string.IsNullOrEmpty(Request.Query["id"]))
if (!string.IsNullOrEmpty(id))
{
var id = Request.Query["id"];
var quoteQuery = await _httpClient.GetAsync($"{APIRoot.Url}/api/ganjoor/quoted/{id}");
if (!quoteQuery.IsSuccessStatusCode)
{
LastMessage = JsonConvert.DeserializeObject<string>(await quoteQuery.Content.ReadAsStringAsync());
return Page();
return LastMessage;
}
GanjoorQuotedPoem = JObject.Parse(await quoteQuery.Content.ReadAsStringAsync()).ToObject<GanjoorQuotedPoem>();
if(GanjoorQuotedPoem.RelatedPoemId != null)
if (GanjoorQuotedPoem.RelatedPoemId != null)
{
var poemQuery = await _httpClient.GetAsync($"{APIRoot.Url}/api/ganjoor/poem/{GanjoorQuotedPoem.RelatedPoemId}");
if (!poemQuery.IsSuccessStatusCode)
var relPoemQuery = await _httpClient.GetAsync($"{APIRoot.Url}/api/ganjoor/poem/{GanjoorQuotedPoem.RelatedPoemId}");
if (!relPoemQuery.IsSuccessStatusCode)
{
LastMessage = JsonConvert.DeserializeObject<string>(await poemQuery.Content.ReadAsStringAsync());
return Page();
LastMessage = JsonConvert.DeserializeObject<string>(await relPoemQuery.Content.ReadAsStringAsync());
return LastMessage;
}
var relPoem = JObject.Parse(await poemQuery.Content.ReadAsStringAsync()).ToObject<GanjoorPoemCompleteViewModel>();
RelatedPoem = JObject.Parse(await relPoemQuery.Content.ReadAsStringAsync()).ToObject<GanjoorPoemCompleteViewModel>();
RelatedCouplets = GetCouplets(relPoem.Verses);
RelatedCouplets = GetCouplets(RelatedPoem.Verses);
}
}
else
{
@ -190,7 +174,76 @@ namespace GanjooRazor.Areas.Admin.Pages
};
}
return LastMessage;
}
public async Task<IActionResult> OnGetAsync()
{
if (string.IsNullOrEmpty(Request.Cookies["Token"]))
return Redirect("/");
if (string.IsNullOrEmpty(Request.Query["p"]))
{
return StatusCode(StatusCodes.Status500InternalServerError, "شناسهٔ شعر مشخص نیست.");
}
await Prepare(int.Parse(Request.Query["p"]), Request.Query["id"]);
return Page();
}
public async Task<IActionResult> OnPostAsync(GanjoorQuotedPoem GanjoorQuotedPoem)
{
await Prepare(GanjoorQuotedPoem.PoemId, GanjoorQuotedPoem.Id == Guid.Empty ? null : GanjoorQuotedPoem.Id.ToString());
GanjoorQuotedPoem.CoupletVerse1 = Poem.Verses.Where(v => v.CoupletIndex == GanjoorQuotedPoem.CoupletIndex).ToArray()[0].Text;
GanjoorQuotedPoem.CoupletVerse2 = Poem.Verses.Where(v => v.CoupletIndex == GanjoorQuotedPoem.CoupletIndex).ToArray()[1].Text;
if (GanjoorQuotedPoem.RelatedPoemId != null && RelatedPoem == null)
{
var relPoemQuery = await _httpClient.GetAsync($"{APIRoot.Url}/api/ganjoor/poem/{GanjoorQuotedPoem.RelatedPoemId}");
if (!relPoemQuery.IsSuccessStatusCode)
{
LastMessage = JsonConvert.DeserializeObject<string>(await relPoemQuery.Content.ReadAsStringAsync());
return Page();
}
RelatedPoem = JObject.Parse(await relPoemQuery.Content.ReadAsStringAsync()).ToObject<GanjoorPoemCompleteViewModel>();
RelatedCouplets = GetCouplets(RelatedPoem.Verses);
}
if (GanjoorQuotedPoem.RelatedCoupletIndex != null)
{
GanjoorQuotedPoem.RelatedCoupletVerse1 = RelatedPoem.Verses.Where(v => v.CoupletIndex == GanjoorQuotedPoem.RelatedCoupletIndex).ToArray()[0].Text;
GanjoorQuotedPoem.RelatedCoupletVerse2 = RelatedPoem.Verses.Where(v => v.CoupletIndex == GanjoorQuotedPoem.RelatedCoupletIndex).ToArray()[1].Text;
}
using (HttpClient secureClient = new HttpClient())
{
if (await GanjoorSessionChecker.PrepareClient(secureClient, Request, Response))
{
var url = $"{APIRoot.Url}/api/ganjoor/quoted";
var payload = new StringContent(JsonConvert.SerializeObject(GanjoorQuotedPoem), Encoding.UTF8, "application/json");
HttpResponseMessage response =
GanjoorQuotedPoem.Id == Guid.Empty ?
await secureClient.PostAsync(url, payload) :
await secureClient.PutAsync(url, payload);
if (!response.IsSuccessStatusCode)
{
LastMessage = JsonConvert.DeserializeObject<string>(await response.Content.ReadAsStringAsync());
}
else
{
GanjoorQuotedPoem = JObject.Parse(await response.Content.ReadAsStringAsync()).ToObject<GanjoorQuotedPoem>();
LastMessage = $"انجام شد. <br /><a href=\"/Admin/SuggesteQuoted/?p={GanjoorQuotedPoem.PoemId}&id={GanjoorQuotedPoem.Id}\">برگشت</a>";
}
}
else
{
LastMessage = "لطفاً از گنجور خارج و مجددا به آن وارد شوید.";
}
}
return Page();
}
}