104 lines
No EOL
3.3 KiB
Text
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");
|
|
}
|
|
} |