210 lines
9.2 KiB
Plaintext
210 lines
9.2 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">
|
|
@Html.AntiForgeryToken()
|
|
<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>
|
|
@{
|
|
var platform = RMuseum.Utils.MusicUrlValidator.Detect(Model.PoemMusicTrackViewModel.TrackUrl);
|
|
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;
|
|
case RMuseum.Models.Ganjoor.PoemMusicTrackType.MusicUrl:
|
|
@if (platform == null)
|
|
{
|
|
<span class="up-badge up-badge--danger">نشانی خارج از فهرست سرویسهای مجاز</span>
|
|
}
|
|
else
|
|
{
|
|
@if (!string.IsNullOrEmpty(platform.LargeIconUrl))
|
|
{
|
|
<img src="@platform.LargeIconUrl" alt="@platform.Name" height="32" />
|
|
}
|
|
<span class="up-badge">@platform.Name</span>
|
|
}
|
|
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" rel="noopener nofollow" href="@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" rel="noopener nofollow" href="@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" rel="noopener nofollow" href="@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>
|