user ban log

This commit is contained in:
xiaomlove
2021-05-12 13:45:00 +08:00
parent 02d7eb4e93
commit 70f1f31dcc
18 changed files with 107 additions and 217 deletions
+1 -1
View File
@@ -17,7 +17,7 @@ class InviteResource extends JsonResource
return [
'id' => $this->id,
'inviter' => $this->inviter,
'invitee' => $this->inviter,
'invitee' => $this->invitee,
'hash' => $this->hash,
'time_invited' => $this->time_invited,
'valid' => $this->valid,
+1 -1
View File
@@ -32,7 +32,7 @@ class UserResource extends JsonResource
'seedtime_text' => mkprettytime($this->seedtime),
'leechtime' => $this->leechtime,
'leechtime_text' => mkprettytime($this->leechtime),
'invitee_code' => new InviteResource($this->whenLoaded('invitee_code')),
'inviter' => new UserResource($this->whenLoaded('inviter')),
];
}
}
+7 -1
View File
@@ -103,7 +103,8 @@ class User extends Authenticatable
public static $commonFields = [
'id', 'username', 'email', 'class', 'status', 'added', 'avatar',
'uploaded', 'downloaded', 'seedbonus', 'seedtime', 'leechtime'
'uploaded', 'downloaded', 'seedbonus', 'seedtime', 'leechtime',
'invited_by',
];
public function checkIsNormal(array $fields = ['status', 'enabled'])
@@ -139,4 +140,9 @@ class User extends Authenticatable
return $this->hasOne(Invite::class, 'invitee_register_uid');
}
public function inviter()
{
return $this->belongsTo(User::class, 'invited_by');
}
}
+9
View File
@@ -0,0 +1,9 @@
<?php
namespace App\Models;
class UserBanLog extends NexusModel
{
protected $table = 'user_ban_logs';
}
+33 -4
View File
@@ -9,6 +9,7 @@ use App\Models\Message;
use App\Models\Setting;
use App\Models\Torrent;
use App\Models\User;
use App\Models\UserBanLog;
use Carbon\Carbon;
use Illuminate\Database\Query\JoinClause;
use Illuminate\Support\Arr;
@@ -502,6 +503,7 @@ class ExamRepository extends BaseRepository
$now = Carbon::now()->toDateTimeString();
$examUserTable = (new ExamUser())->getTable();
$examTable = (new Exam())->getTable();
$userTable = (new User())->getTable();
$baseQuery = ExamUser::query()
->join($examTable, "$examUserTable.exam_id", "=", "$examTable.id")
->where("$examUserTable.status", ExamUser::STATUS_NORMAL)
@@ -519,6 +521,7 @@ class ExamRepository extends BaseRepository
$size = 100;
$minId = 0;
$result = 0;
while (true) {
$logPrefix = sprintf('[%s], size: %s', __FUNCTION__, $size);
$examUsers = (clone $baseQuery)->where("$examUserTable.id", ">", $minId)->limit($size)->get();
@@ -530,11 +533,12 @@ class ExamRepository extends BaseRepository
}
$result += $examUsers->count();
$now = Carbon::now()->toDateTimeString();
$examUserIdArr = $uidToDisable = $messageToSend = [];
$examUserIdArr = $uidToDisable = $messageToSend = $userBanLog = $userModcommentUpdate = [];
foreach ($examUsers as $examUser) {
$minId = $examUser->id;
$examUserIdArr[] = $examUser->id;
$uid = $examUser->uid;
$exam = $examUser->exam;
$currentLogPrefix = sprintf("$logPrefix, user: %s, exam: %s, examUser: %s", $uid, $examUser->exam_id, $examUser->id);
$locale = $examUser->user->locale;
if ($examUser->is_done) {
@@ -547,10 +551,26 @@ class ExamRepository extends BaseRepository
$msgTransKey = 'exam.checkout_not_pass_message_content';
//ban user
$uidToDisable[] = $uid;
$userModcomment = nexus_trans('exam.ban_user_modcomment', [
'exam_name' => $exam->name,
'begin' => $examUser->begin,
'end' => $examUser->end
], $locale);
$userModcommentUpdate[] = sprintf("when `id` = %s then concat_ws('\n', modcomment, '%s')", $uid, $userModcomment);
$banLogReason = nexus_trans('exam.ban_log_reason', [
'exam_name' => $exam->name,
'begin' => $exam->begin,
'end' => $exam->end,
], $locale);
$userBanLog[] = [
'uid' => $uid,
'username' => $examUser->user->username,
'reason' => $banLogReason,
];
}
$subject = nexus_trans($subjectTransKey, [], $locale);
$msg = nexus_trans($msgTransKey, [
'exam_name' => $examUser->exam->name,
'exam_name' => $exam->name,
'begin' => $examUser->begin,
'end' => $examUser->end
], $locale);
@@ -561,11 +581,20 @@ class ExamRepository extends BaseRepository
'msg' => $msg
];
}
DB::transaction(function () use ($uidToDisable, $messageToSend, $examUserIdArr) {
DB::transaction(function () use ($uidToDisable, $messageToSend, $examUserIdArr, $userBanLog, $userModcommentUpdate, $userTable, $logPrefix) {
ExamUser::query()->whereIn('id', $examUserIdArr)->update(['status' => ExamUser::STATUS_FINISHED]);
Message::query()->insert($messageToSend);
if (!empty($uidToDisable)) {
User::query()->whereIn('id', $uidToDisable)->update(['enabled' => User::ENABLED_NO]);
$uidStr = implode(', ', $uidToDisable);
$sql = sprintf(
'update %s set enabled = %s, set modcomment = case when %s end where id in (%s)',
$userTable, User::ENABLED_NO, implode(' ', $userModcommentUpdate), $uidStr
);
$updateResult = DB::update($sql);
do_log(sprintf("$logPrefix, disable %s users: %s, sql: %s, updateResult: %s", count($uidToDisable), $uidStr, $sql, $updateResult));
}
if (!empty($userBanLog)) {
UserBanLog::query()->insert($userBanLog);
}
});
}
+5 -1
View File
@@ -6,6 +6,7 @@ use App\Http\Resources\UserResource;
use App\Models\ExamUser;
use App\Models\Setting;
use App\Models\User;
use Illuminate\Database\Eloquent\Builder;
class UserRepository extends BaseRepository
{
@@ -25,7 +26,10 @@ class UserRepository extends BaseRepository
public function getDetail($id)
{
$user = User::query()->with(['invitee_code'])->findOrFail($id, User::$commonFields);
$with = [
'inviter' => function (Builder $query) {return $query->select(User::$commonFields);}
];
$user = User::query()->with($with)->findOrFail($id, User::$commonFields);
$userResource = new UserResource($user);
$baseInfo = $userResource->response()->getData(true)['data'];