bulletboards/ImageBoardServerApp/Pages/Basic/ReportPage.razor

104 lines
No EOL
3.3 KiB
Text

@page "/sys/report/{type}/{board}/{id}"
@using System.ComponentModel.DataAnnotations
@using System.Data
@using ImageBoardServerApp.Auth
@using ImageBoardServerApp.Data.Repository
@inject AuthenticationStateProvider authStateProvider
@inject IJSRuntime js
<AuthorizeView>
<Authorized>
<h3>Report @type#@id on /@board/</h3>
<div>
<select name="rule" id="rule" @bind="@selectedItem">
<option value="none">Select</option>
@foreach (var r in RulesConv.dict.Keys)
{
<option value="@r">@RulesConv.dict[r]</option>
}
</select>
</div>
<span>@selectedItem</span>
<br/>
<span>Explain further (optional)</span>
<div class="pd centered marg">
<RadzenTextArea Placeholder="Specify..." @bind-Value="@explaination" Cols="30" Rows="6" Class="w-100"/>
</div>
<RadzenButton class="pd" Click="@onReportClick" Text="Report"></RadzenButton>
</Authorized>
<NotAuthorized>
<span>Please login to report</span>
</NotAuthorized>
</AuthorizeView>
@code {
private IEnumerable<Rule> rules;
private string selectedItem;
private string explaination;
[Parameter]
[Required]
public string type { get; set; }
[Parameter]
[Required]
public string board { get; set; }
[Parameter]
[Required]
public string id { get; set; }
private async Task onReportClick()
{
if (selectedItem == null || selectedItem == "none")
return;
var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider;
var user = await cauthStateProvder.GetAuthenticationStateAsync();
var usr = user.User;
UserData foundusr = await UsersRepository.getUserByEmailAsync(usr.Identity.Name);
if (foundusr == null)
{
return;
}
if (foundusr.TimeBanned != -1)
{
return;
}
foundusr.lastActionTimeStamp = DateTimeOffset.UnixEpoch.ToUnixTimeMilliseconds();
await UsersRepository.updateUserAsync(foundusr);
int targetID = 0;
if (type == "op")
{
var post = await PostsRepository.getPostByIdAsync(Int32.Parse(id));
targetID = post.User.UserID;
}
else
{
var comment = await CommentsRepository.getCommentByIdAsync(Int32.Parse(id));
targetID = comment.User.UserID;
}
ReportData reportData = new ReportData()
{
Type = type,
ReportedCommentID = type == "op" ? null : Int32.Parse(id),
ReportedPostID = type == "op" ? Int32.Parse(id) : null,
UserReporterID = foundusr.UserID,
UserReportedID = targetID,
ReportReason = RulesConv.dict[RulesConv.dict2[selectedItem]],
ReportExlaination = explaination
};
List<ReportData> submittedReports = foundusr.RecivedReports;
foreach(var r in submittedReports)
{
if (r.ReportedPostID == reportData.ReportedPostID && r.ReportedCommentID == reportData.ReportedCommentID)
return;
}
var reportID = await ReportsRepository.createReportAsync(reportData);
js.InvokeVoidAsync("window.close");
}
}