divan/GanjooRazor/Areas/User/Pages/ReviewSongs.cshtml
2026-08-05 16:55:42 +03:30

194 lines
8.3 KiB
Plaintext

@page
@model GanjooRazor.Areas.User.Pages.ReviewSongsModel
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@using DNTPersianUtils.Core
@{
Layout = "_UserPanelLayout";
ViewData["Title"] = "آهنگ‌های پیشنهادی";
await GanjooRazor.Utils.GanjoorSessionChecker.ApplyPermissionsToViewData(Request, Response, ViewData);
}
<div class="up-page-header">
<h1>@ViewData["Title"]</h1>
</div>
@if (Model.LastError != "")
{
<div class="up-alert up-alert--danger">@Model.LastError</div>
}
else if (@Model.PoemMusicTrackViewModel == null)
{
<partial name="_EmptyState" model="@("پیشنهادی وجود ندارد.")" />
}
else if (@Model.Poem == null)
{
<div class="up-alert up-alert--warning">شعر مرتبط یافت نشد!</div>
}
else
{
<div class="up-card">
<form method="post" class="up-form">
<div class="up-field">
<label>شعر</label>
<div>
<a href="@Html.Raw(Model.Poem.FullUrl)" target="_blank">@Model.Poem.FullTitle</a>
<input type="hidden" asp-for="PoemMusicTrackViewModel.Id" />
<input type="hidden" asp-for="PoemMusicTrackViewModel.PoemId" />
<input type="hidden" asp-for="PoemMusicTrackViewModel.GolhaTrackId" />
<input type="hidden" asp-for="PoemMusicTrackViewModel.TrackType" />
</div>
</div>
<div class="up-field">
<label>پیشنهاد دهنده</label>
<div><a href="/hashieha/?userid=@Model.PoemMusicTrackViewModel.SuggestedById" target="_blank">@Model.PoemMusicTrackViewModel.SuggestedByNickName</a></div>
</div>
@if (Model.UserSongSuggestionsHistory != null && (Model.UserSongSuggestionsHistory.Approved + Model.UserSongSuggestionsHistory.Rejected) > 0)
{
<div class="up-form-actions">
@if (Model.UserSongSuggestionsHistory.Approved > 0)
{
<span class="up-badge up-badge--success">@Model.UserSongSuggestionsHistory.Approved.ToPersianNumbers() پیشنهاد تأیید شده</span>
}
@if (Model.UserSongSuggestionsHistory.Rejected > 0)
{
<span class="up-badge up-badge--danger">@Model.UserSongSuggestionsHistory.Rejected.ToPersianNumbers() پیشنهاد رد شده</span>
}
</div>
}
<div>
@{
switch (Model.PoemMusicTrackViewModel.TrackType)
{
case RMuseum.Models.Ganjoor.PoemMusicTrackType.Spotify:
<img src="/image/spotify.png" alt="اسپاتیفای" height="32" />
break;
case RMuseum.Models.Ganjoor.PoemMusicTrackType.Golha:
<img src="/image/golha.png" alt="گلها" height="32" />
break;
default:
<img src="/image/beeptunes.png" alt="بیپ‌تونز" height="32" />
break;
}
}
</div>
<div class="up-field">
<label asp-for="PoemMusicTrackViewModel.ArtistName">خواننده</label>
<input asp-for="PoemMusicTrackViewModel.ArtistName" />
</div>
<div class="up-field up-field--ltr">
<label><a target="_blank" href="@Html.Raw(Model.PoemMusicTrackViewModel.ArtistUrl)">نشانی خواننده</a></label>
<input asp-for="PoemMusicTrackViewModel.ArtistUrl" />
</div>
<div class="up-field">
<label asp-for="PoemMusicTrackViewModel.AlbumName">آلبوم</label>
<input asp-for="PoemMusicTrackViewModel.AlbumName" />
</div>
<div class="up-field up-field--ltr">
<label><a target="_blank" href="@Html.Raw(Model.PoemMusicTrackViewModel.AlbumUrl)">نشانی آلبوم</a></label>
<input asp-for="PoemMusicTrackViewModel.AlbumUrl" />
</div>
<div class="up-field">
<label asp-for="PoemMusicTrackViewModel.TrackName">آهنگ</label>
<input asp-for="PoemMusicTrackViewModel.TrackName" />
</div>
<div class="up-field up-field--ltr">
<label><a target="_blank" href="@Html.Raw(Model.PoemMusicTrackViewModel.TrackUrl)">نشانی آهنگ</a></label>
<input asp-for="PoemMusicTrackViewModel.TrackUrl" />
</div>
<div class="up-field">
<label asp-for="PoemMusicTrackViewModel.Description">توضیح</label>
<input asp-for="PoemMusicTrackViewModel.Description" />
</div>
<div class="up-form-actions">
<button type="submit" name="approve" id="approve" class="up-btn up-btn--success">
@if (Model.EditMode)
{
<text>اصلاح</text>
}
else
{
<text>تأیید</text>
}
</button>
@if (Model.EditMode)
{
<button type="submit" name="delsong" id="delsong" class="up-btn up-btn--danger">حذف</button>
}
else
{
<button type="submit" name="reject1" id="reject1" class="up-btn up-btn--danger">در آهنگ این شعر خوانده نشده</button>
<button type="submit" name="reject2" id="reject2" class="up-btn up-btn--danger">لینک یا اطلاعات آهنگ ایراد دارد</button>
<button type="submit" name="next" id="next" class="up-btn up-btn--ghost">بعدی</button>
}
</div>
@if (!Model.EditMode)
{
<div class="up-field">
<label asp-for="PoemMusicTrackViewModel.RejectionCause">رد به دلیل دیگر</label>
<div class="up-form-actions">
<input asp-for="PoemMusicTrackViewModel.RejectionCause" style="flex:1;" />
<button type="submit" name="reject3" id="reject3" class="up-btn up-btn--danger">رد</button>
</div>
</div>
}
<p class="up-hint">تعداد کل: @Model.TotalCount</p>
</form>
</div>
}
@if (ViewData.ContainsKey("ganjoor-songrevu"))
{
<div class="up-form-actions">
<a class="up-btn up-btn--ghost" asp-area="User" asp-page="/AddSong">اضافه کردن آهنگ از منبع دلخواه</a>
</div>
}
<script>
async function rebuildMundex() {
var ok = await upConfirm('آیا از بازسازی صفحات نمایهٔ موسیقی اطمینان دارید؟');
if (!ok) return;
$.ajax({
type: "POST",
url: '?handler=RebuildMundex',
error: function () {
upToast('خطا رخ داد.', 'error');
},
success: function () {
upToast('فرایند بازسازی صفحات نمایهٔ موسیقی شروع شد.', 'success');
},
});
}
async function cleanMundexCache() {
var ok = await upConfirm('آیا از حذف کش صفحات موسیقی اطمینان دارید؟');
if (!ok) return;
$.ajax({
type: "POST",
url: '?handler=CleanMundexCache',
error: function () {
upToast('خطا رخ داد.', 'error');
},
success: function () {
upToast('کش صفحات پاک شد.', 'success');
},
});
}
</script>
<div class="up-form-actions">
<a role="button" onclick="rebuildMundex()" class="up-btn up-btn--ghost" title="بازسازی صفحات نمایهٔ موسیقی">بازسازی صفحات نمایهٔ موسیقی</a>
<a role="button" onclick="cleanMundexCache()" class="up-btn up-btn--ghost" title="حذف کش صفحات نمایهٔ موسیقی">حذف کش صفحات نمایهٔ موسیقی</a>
</div>