mirror of
https://github.com/lkddi/nexusphp.git
synced 2026-04-24 03:57:22 +08:00
exam add user filter: register_days_range
This commit is contained in:
@@ -98,8 +98,9 @@ class Test extends Command
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
CleanupRepository::recordBatch(NexusDB::redis(), "1", "5");
|
||||
CleanupRepository::runBatchJobCalculateUserSeedBonus("bbbbb");
|
||||
$str = "2023-11-14 02:59:00";
|
||||
$diff = Carbon::parse($str)->diffInDays(now());
|
||||
dd($diff);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -100,6 +100,8 @@ class ExamResource extends Resource
|
||||
->label(__('label.user.class')),
|
||||
Forms\Components\DateTimePicker::make('filters.register_time_range.0')->label(__("label.exam.register_time_range.begin")),
|
||||
Forms\Components\DateTimePicker::make('filters.register_time_range.1')->label(__("label.exam.register_time_range.end")),
|
||||
Forms\Components\TextInput::make('filters.register_days_range.0')->numeric()->label(__("label.exam.register_days_range.begin")),
|
||||
Forms\Components\TextInput::make('filters.register_days_range.1')->numeric()->label(__("label.exam.register_days_range.end")),
|
||||
Forms\Components\CheckboxList::make('filters.donate_status')
|
||||
->options(self::$yesOrNo)
|
||||
->label(__('label.exam.donated')),
|
||||
|
||||
@@ -51,11 +51,13 @@ class Exam extends NexusModel
|
||||
const FILTER_USER_CLASS = 'classes';
|
||||
const FILTER_USER_REGISTER_TIME_RANGE = 'register_time_range';
|
||||
const FILTER_USER_DONATE = 'donate_status';
|
||||
const FILTER_USER_REGISTER_DAYS_RANGE = 'register_days_range';
|
||||
|
||||
public static $filters = [
|
||||
self::FILTER_USER_CLASS => ['name' => 'User class'],
|
||||
self::FILTER_USER_REGISTER_TIME_RANGE => ['name' => 'User register time range'],
|
||||
self::FILTER_USER_DONATE => ['name' => 'User donated'],
|
||||
self::FILTER_USER_REGISTER_DAYS_RANGE => ['name' => 'User register days range'],
|
||||
];
|
||||
|
||||
protected static function booted()
|
||||
@@ -138,6 +140,19 @@ class Exam extends NexusModel
|
||||
}
|
||||
}
|
||||
|
||||
$filter = self::FILTER_USER_REGISTER_DAYS_RANGE;
|
||||
if (!empty($currentFilters[$filter])) {
|
||||
$range = $currentFilters[$filter];
|
||||
if (!empty($range[0]) || !empty($range[1])) {
|
||||
$arr[] = sprintf(
|
||||
"%s: %s ~ %s",
|
||||
nexus_trans("exam.filters.$filter"),
|
||||
$range[0] ?? "--",
|
||||
$range[1] ?? '--'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$filter = self::FILTER_USER_DONATE;
|
||||
if (!empty($currentFilters[$filter])) {
|
||||
$donateStatus = collect(User::$donateStatus)->only($currentFilters[$filter]);
|
||||
|
||||
@@ -151,6 +151,30 @@ class ExamRepository extends BaseRepository
|
||||
throw new \InvalidArgumentException("Invalid user register time end: $end");
|
||||
}
|
||||
}
|
||||
if ($begin && $end && $begin > $end) {
|
||||
throw new \InvalidArgumentException("user register time begin must less than end");
|
||||
}
|
||||
|
||||
$filter = Exam::FILTER_USER_REGISTER_DAYS_RANGE;
|
||||
$begin = $filters[$filter][0] ?? null;
|
||||
$end = $filters[$filter][1] ?? null;
|
||||
if ($begin) {
|
||||
if (is_numeric($begin) && $begin >= 0) {
|
||||
$hasValid = true;
|
||||
} else {
|
||||
throw new \InvalidArgumentException("Invalid user register days begin: $begin" );
|
||||
}
|
||||
}
|
||||
if ($end) {
|
||||
if (is_numeric($end) && $end >= 0) {
|
||||
$hasValid = true;
|
||||
} else {
|
||||
throw new \InvalidArgumentException("Invalid user register days end: $end");
|
||||
}
|
||||
}
|
||||
if ($begin && $end && $begin > $end) {
|
||||
throw new \InvalidArgumentException("user register days begin must less than end");
|
||||
}
|
||||
|
||||
if (!$hasValid) {
|
||||
throw new \InvalidArgumentException("No valid filters");
|
||||
@@ -276,6 +300,20 @@ class ExamRepository extends BaseRepository
|
||||
return false;
|
||||
}
|
||||
|
||||
$filter = Exam::FILTER_USER_REGISTER_DAYS_RANGE;
|
||||
$filterValues = $filters[$filter] ?? [];
|
||||
$value = $user->added->diffInDays(now());
|
||||
$begin = $filterValues[0] ?? null;
|
||||
$end = $filterValues[1] ?? null;
|
||||
if ($begin !== null && $value < $begin) {
|
||||
do_log("$logPrefix, user registerDays: $value not bigger than begin: " . $begin);
|
||||
return false;
|
||||
}
|
||||
if ($end !== null && $value > $end) {
|
||||
do_log("$logPrefix, user registerDays: $value not less than end: " . $end);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -953,6 +991,18 @@ class ExamRepository extends BaseRepository
|
||||
$baseQuery->where("$userTable.added", '<=', Carbon::parse($range[1])->toDateTimeString());
|
||||
}
|
||||
}
|
||||
|
||||
$filter = Exam::FILTER_USER_REGISTER_DAYS_RANGE;
|
||||
$range = $filters[$filter] ?? [];
|
||||
if (!empty($range)) {
|
||||
if (!empty($range[0])) {
|
||||
$baseQuery->where("$userTable.added", "<=", now()->subDays($range[0])->toDateTimeString());
|
||||
}
|
||||
if (!empty($range[1])) {
|
||||
$baseQuery->where("$userTable.added", '>=', now()->subDays($range[1])->toDateTimeString());
|
||||
}
|
||||
}
|
||||
|
||||
//Does not has this exam
|
||||
$baseQuery->whereDoesntHave('exams', function (Builder $query) use ($exam) {
|
||||
$query->where('exam_id', $exam->id);
|
||||
|
||||
Reference in New Issue
Block a user