#478 contribs page

This commit is contained in:
Hamid Reza Mohammadi 2025-03-30 21:06:51 +03:30
parent 030a42e218
commit 25394f8b6e
18 changed files with 124 additions and 49 deletions

View File

@ -150,7 +150,7 @@
</p>
<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="~/js/bk.js?version=73"></script>
<script src="~/js/bk.js?version=74"></script>
<script src="~/js/jplayersupport.js"></script>
<script src="~/js/vaabd.js?version=10"></script>
<script src="~/dist/jplayer/jquery.jplayer.min.js"></script>

View File

@ -16,7 +16,7 @@
<link rel="shortcut icon" href="/favicon.ico?version=1" type="image/x-icon" />
<link rel="search" type="application/opensearchdescription+xml" title="گنجور" href="https://ganjoor.net/search.xml" />
<script src="/lib/jquery/dist/jquery.min.js"></script>
<script src="/js/bk.js?version=73"></script>
<script src="/js/bk.js?version=74"></script>
<script>
var cookieValue = getCookie("playerScrollLock");
var playerScrollLock = cookieValue === "true";

View File

@ -17,7 +17,7 @@
<link rel="search" type="application/opensearchdescription+xml" title="گنجور" href="https://ganjoor.net/search.xml" />
<script src="/lib/jquery/dist/jquery.min.js"></script>
<script src="/js/chart.js"></script>
<script src="/js/bk.js?version=73"></script>
<script src="/js/bk.js?version=74"></script>
<script>
var cookieValue = getCookie("playerScrollLock");
var playerScrollLock = cookieValue === "true";

View File

@ -13,6 +13,7 @@ using RMuseum.Models.Generic.ViewModels;
using RSecurityBackend.Models.Generic;
using System.Linq;
using static Betalgo.Ranul.OpenAI.ObjectModels.RealtimeModels.RealtimeEventTypes;
using Org.BouncyCastle.Asn1.Ocsp;
namespace GanjooRazor.Pages
{
@ -159,7 +160,7 @@ namespace GanjooRazor.Pages
return new BadRequestObjectResult(JsonConvert.DeserializeObject<string>(await responseUsers.Content.ReadAsStringAsync()));
}
users = JArray.Parse(await responseUsers.Content.ReadAsStringAsync()).ToObject<List<GroupedByUserViewModel>>();
usersPagination = JsonConvert.DeserializeObject<PaginationMetadata>(responseDays.Headers.GetValues("paging-headers").Single());
usersPagination = JsonConvert.DeserializeObject<PaginationMetadata>(responseUsers.Headers.GetValues("paging-headers").Single());
}
var response = await _httpClient.GetAsync($"{APIRoot.Url}/api/contributions/{dataType}/summary");
@ -190,6 +191,32 @@ namespace GanjooRazor.Pages
public async Task<ActionResult> OnGetGroupedByDayAsync(string dataType, int pageNumber)
{
var responseUsers = await _httpClient.GetAsync($"{APIRoot.Url}/api/contributions/{dataType}/by/user?PageNumber=1&PageSize=30");
if (!responseUsers.IsSuccessStatusCode)
{
return new BadRequestObjectResult(JsonConvert.DeserializeObject<string>(await responseUsers.Content.ReadAsStringAsync()));
}
var users = JArray.Parse(await responseUsers.Content.ReadAsStringAsync()).ToObject<List<GroupedByUserViewModel>>();
var usersPagination = JsonConvert.DeserializeObject<PaginationMetadata>(responseUsers.Headers.GetValues("paging-headers").Single());
return new PartialViewResult()
{
ViewName = "_GroupedByDateViewTablePartial",
ViewData = new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary())
{
Model = new _GroupedByDateViewTablePartialModel()
{
DataType = dataType,
Users = users.ToArray(),
UsersPagination = usersPagination,
}
}
};
}
public async Task<ActionResult> OnGetGroupedByUsersAsync(string dataType, int pageNumber)
{
var responseDays = await _httpClient.GetAsync($"{APIRoot.Url}/api/contributions/{dataType}/daily?PageNumber={pageNumber}&PageSize=30");
@ -214,6 +241,8 @@ namespace GanjooRazor.Pages
};
}
/// <summary>
/// memory cache
/// </summary>

View File

@ -16,7 +16,7 @@
<link rel="shortcut icon" href="/favicon.ico?version=1" type="image/x-icon" />
<link rel="search" type="application/opensearchdescription+xml" title="گنجور" href="https://ganjoor.net/search.xml" />
<script src="/lib/jquery/dist/jquery.min.js"></script>
<script src="/js/bk.js?version=73"></script>
<script src="/js/bk.js?version=74"></script>
<script>
var cookieValue = getCookie("playerScrollLock");
var playerScrollLock = cookieValue === "true";

View File

@ -18,7 +18,7 @@
<link rel="shortcut icon" href="/favicon.ico?version=1" type="image/x-icon" />
<link rel="search" type="application/opensearchdescription+xml" title="گنجور" href="https://ganjoor.net/search.xml" />
<script src="/lib/jquery/dist/jquery.min.js"></script>
<script src="/js/bk.js?version=73"></script>
<script src="/js/bk.js?version=74"></script>
<script>
var cookieValue = getCookie("playerScrollLock");
var playerScrollLock = cookieValue === "true";

View File

@ -17,7 +17,7 @@
<link rel="search" type="application/opensearchdescription+xml" title="گنجور" href="https://ganjoor.net/search.xml">
<script src="/lib/jquery/dist/jquery.min.js"></script>
<script src="/js/chart.js"></script>
<script src="/js/bk.js?version=73"></script>
<script src="/js/bk.js?version=74"></script>
<script src="/js/jquery.mark.min.js"></script>
<script>
var cookieValue = getCookie("playerScrollLock");

View File

@ -23,7 +23,7 @@
font-family: 'Vazir'
}
</style>
<script src="/js/bk.js?version=73"></script>
<script src="/js/bk.js?version=74"></script>
<script src="https://code.jquery.com/jquery-1.10.2.min.js"></script>
<script src="~/js/leaflet.js"></script>
<script src="~/js/leaflet-providers.js"></script>

View File

@ -15,7 +15,7 @@
<link rel="shortcut icon" href="/favicon.ico?version=1" type="image/x-icon" />
<link rel="search" type="application/opensearchdescription+xml" title="گنجور" href="https://ganjoor.net/search.xml" />
<script src="/lib/jquery/dist/jquery.min.js"></script>
<script src="/js/bk.js?version=73"></script>
<script src="/js/bk.js?version=74"></script>
<script>
var cookieValue = getCookie("playerScrollLock");
var playerScrollLock = cookieValue === "true";

View File

@ -16,7 +16,7 @@
<link rel="shortcut icon" href="/favicon.ico?version=1" type="image/x-icon" />
<link rel="search" type="application/opensearchdescription+xml" title="گنجور" href="https://ganjoor.net/search.xml" />
<script src="/lib/jquery/dist/jquery.min.js"></script>
<script src="/js/bk.js?version=73"></script>
<script src="/js/bk.js?version=74"></script>
<script>
var cookieValue = getCookie("playerScrollLock");
var playerScrollLock = cookieValue === "true";

View File

@ -238,7 +238,7 @@
<script src="~/js/bk.js?version=73"></script>
<script src="~/js/bk.js?version=74"></script>
<script src="~/js/jplayersupport.js"></script>
<script src="~/js/vaabd.js?version=10"></script>
<script src="~/dist/jplayer/jquery.jplayer.min.js"></script>

View File

@ -22,7 +22,7 @@
<link rel="search" type="application/opensearchdescription+xml" title="گنجور" href="https://ganjoor.net/search.xml" />
<script src="/js/chart.js"></script>
<script src="/lib/jquery/dist/jquery.min.js"></script>
<script src="/js/bk.js?version=73"></script>
<script src="/js/bk.js?version=74"></script>
<script>
var cookieValue = getCookie("playerScrollLock");
var playerScrollLock = cookieValue === "true";

View File

@ -35,7 +35,7 @@
});
</script>
<script src="/js/bk.js?version=73"></script>
<script src="/js/bk.js?version=74"></script>
<script>
function editBanner(bannerId) {
var url = '?handler=Edit';

View File

@ -32,7 +32,7 @@
});
</script>
<script src="/lib/diff.js"></script>
<script src="/js/bk.js?version=73"></script>
<script src="/js/bk.js?version=74"></script>
<script>
function compareCorrectionBlocks(originalElemenyId, editedElementId, resultElementId) {
var a = document.getElementById(originalElemenyId);

View File

@ -18,7 +18,7 @@
<link rel="shortcut icon" href="/favicon.ico?version=1" type="image/x-icon" />
<link rel="search" type="application/opensearchdescription+xml" title="گنجور" href="https://ganjoor.net/search.xml" />
<script src="/lib/jquery/dist/jquery.min.js"></script>
<script src="/js/bk.js?version=73"></script>
<script src="/js/bk.js?version=74"></script>
<script>
var cookieValue = getCookie("playerScrollLock");
var playerScrollLock = cookieValue === "true";

View File

@ -18,7 +18,7 @@
<link rel="shortcut icon" href="/favicon.ico?version=1" type="image/x-icon" />
<link rel="search" type="application/opensearchdescription+xml" title="گنجور" href="https://ganjoor.net/search.xml" />
<script src="/lib/jquery/dist/jquery.min.js"></script>
<script src="/js/bk.js?version=73"></script>
<script src="/js/bk.js?version=74"></script>
<script>
var cookieValue = getCookie("playerScrollLock");
var playerScrollLock = cookieValue === "true";

View File

@ -9,20 +9,20 @@
<div class="pagination-controls">
@if (Model.DaysPagination.hasPreviousPage)
{
<button id="dailyPrevPage" class="btn btn-primary" onclick="loadContributionsDays('@Model.DataType', @(Model.DaysPagination.currentPage - 1))">صفحهٔ قبل</button>
<button class="btn btn-primary" onclick="loadContributionsDays('@Model.DataType', @(Model.DaysPagination.currentPage - 1))">صفحهٔ قبل</button>
}
else
{
<button id="dailyPrevPage" class="btn btn-primary" disabled>صفحهٔ قبل</button>
<button class="btn btn-primary" disabled>صفحهٔ قبل</button>
}
<span id="dailyCurrentPage">صفحهٔ @Model.DaysPagination.currentPage.ToPersianNumbers() از @Model.DaysPagination.totalPages.ToPersianNumbers()</span>
@if (Model.DaysPagination.hasNextPage)
{
<button id="dailyNextPage" class="btn btn-primary" onclick="loadContributionsDays('@Model.DataType', @(Model.DaysPagination.currentPage + 1))">صفحهٔ بعد</button>
<button class="btn btn-primary" onclick="loadContributionsDays('@Model.DataType', @(Model.DaysPagination.currentPage + 1))">صفحهٔ بعد</button>
}
else
{
<button id="dailyNextPage" class="btn btn-primary" disabled>صفحهٔ بعد</button>
<button class="btn btn-primary" disabled>صفحهٔ بعد</button>
}
</div>
</div>
@ -62,37 +62,58 @@
@if (Model.Users != null && Model.Users.Length > 0)
{
<table class="stats" id="grouped-by-user">
<thead>
<tr class="h">
<td class="c1">ردیف</td>
<td class="c2">کاربر</td>
<td class="c3">تعداد</td>
</tr>
</thead>
<tbody>
@for (int i = 0; i < Model.Users.Length; i++)
<div id="usrs">
<div class="pagination-controls">
@if (Model.UsersPagination.hasPreviousPage)
{
@if (i % 2 == 0)
{
<tr class="e">
<td class="c1">@((i + 1).ToPersianNumbers())</td>
<td class="c2"><a href="/hashieha/?userid=@Model.Users[i].UserId">@Model.Users[i].UserName</a></td>
<td class="c3">@RMuseum.Services.Implementation.LanguageUtils.FormatMoney(Model.Users[i].Number)</td>
</tr>
}
else
{
<tr>
<td class="c1">@((i + 1).ToPersianNumbers())</td>
<td class="c2"><a href="/hashieha/?userid=@Model.Users[i].UserId">@Model.Users[i].UserName</a></td>
<td class="c3">@RMuseum.Services.Implementation.LanguageUtils.FormatMoney(Model.Users[i].Number)</td>
</tr>
}
<button class="btn btn-primary" onclick="loadContributionsUsers('@Model.DataType', @(Model.UsersPagination.currentPage - 1))">صفحهٔ قبل</button>
}
</tbody>
</table>
else
{
<button class="btn btn-primary" disabled>صفحهٔ قبل</button>
}
<span id="dailyCurrentPage">صفحهٔ @Model.UsersPagination.currentPage.ToPersianNumbers() از @Model.UsersPagination.totalPages.ToPersianNumbers()</span>
@if (Model.UsersPagination.hasNextPage)
{
<button class="btn btn-primary" onclick="loadContributionsUsers('@Model.DataType', @(Model.UsersPagination.currentPage + 1))">صفحهٔ بعد</button>
}
else
{
<button class="btn btn-primary" disabled>صفحهٔ بعد</button>
}
</div>
<table class="stats" id="grouped-by-user">
<thead>
<tr class="h">
<td class="c1">ردیف</td>
<td class="c2">کاربر</td>
<td class="c3">تعداد</td>
</tr>
</thead>
<tbody>
@for (int i = 0; i < Model.Users.Length; i++)
{
@if (i % 2 == 0)
{
<tr class="e">
<td class="c1">@((i + 1).ToPersianNumbers())</td>
<td class="c2"><a href="/hashieha/?userid=@Model.Users[i].UserId">@Model.Users[i].UserName</a></td>
<td class="c3">@RMuseum.Services.Implementation.LanguageUtils.FormatMoney(Model.Users[i].Number)</td>
</tr>
}
else
{
<tr>
<td class="c1">@((i + 1).ToPersianNumbers())</td>
<td class="c2"><a href="/hashieha/?userid=@Model.Users[i].UserId">@Model.Users[i].UserName</a></td>
<td class="c3">@RMuseum.Services.Implementation.LanguageUtils.FormatMoney(Model.Users[i].Number)</td>
</tr>
}
}
</tbody>
</table>
</div>
}

View File

@ -1930,4 +1930,29 @@ function loadContributionsDays(dataType, pageNumber) {
}
},
});
}
function loadContributionsUsers(dataType, pageNumber) {
var divParent = document.getElementById('usrs');
divParent.innerHTML = '<div class="bnumdiv" id="remove-days-placeholder"><img src="/image/loading.gif" alt="بارگذاری"/></div>';
$.ajax({
type: "GET",
url: '?Handler=GroupedByUsers&dataType=' + dataType + '&pageNumber=' + pageNumber.toString(),
error: function (e) {
if (document.getElementById("remove-days-placeholder") != null) {
document.getElementById("remove-days-placeholder").remove();
}
if (e.responseText == null)
alert(e);
else
alert(e.responseText);
},
success: function (data) {
if (document.getElementById("remove-days-placeholder") != null) {
document.getElementById("remove-days-placeholder").remove();
$(data).appendTo(divParent);
plotChart('grouped-by-user', 100);
}
},
});
}