✨ 完成图片管理功能
This commit is contained in:
@@ -2,29 +2,78 @@
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Enums\ImagePermission;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Image;
|
||||
use App\Services\UserService;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Response;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\View\View;
|
||||
|
||||
class ImageController extends Controller
|
||||
{
|
||||
public function index(Request $request): View
|
||||
{
|
||||
$statuses = [];
|
||||
$images = Image::query()->with(['user' => function (BelongsTo $belongsTo) {
|
||||
$belongsTo->withSum('images', 'size');
|
||||
}, 'album', 'group', 'strategy'])->latest()->paginate(40);
|
||||
}, 'album', 'group', 'strategy'])->when($request->input('keywords'), function (Builder $builder, $keywords) {
|
||||
$words = [];
|
||||
$qualifiers = [
|
||||
'name:', 'album:', 'group:', 'strategy:', 'email:', 'extension:', 'md5:', 'sha1:', 'ip:', 'is:', 'order:',
|
||||
];
|
||||
collect(array_filter(explode(' ', $keywords)))->filter(function ($keyword) use ($qualifiers, &$words) {
|
||||
if (Str::startsWith($keyword, $qualifiers)) {
|
||||
return true;
|
||||
}
|
||||
$words[] = $keyword;
|
||||
return false;
|
||||
})->each(function ($filter) use ($builder) {
|
||||
match ($filter) {
|
||||
'is:public' => $builder->where('permission', ImagePermission::Public),
|
||||
'is:private' => $builder->where('permission', ImagePermission::Private),
|
||||
'is:unhealthy' => $builder->where('is_unhealthy', 1),
|
||||
'is:guest' => $builder->whereNull('user_id'),
|
||||
'is:adminer' => $builder->whereHas('user', fn (Builder $builder) => $builder->where('is_adminer', 1)),
|
||||
'order:earliest' => $builder->orderBy('created_at'),
|
||||
'order:utmost' => $builder->orderBy('size'),
|
||||
'order:least' => $builder->orderByDesc('size'),
|
||||
default => 0,
|
||||
};
|
||||
|
||||
[$qualifier, $value] = explode(':', $filter);
|
||||
|
||||
if ($value) {
|
||||
$callback = fn (Builder $builder) => $builder->where('name', $value);
|
||||
match ($qualifier) {
|
||||
'name' => $builder->whereHas('user', $callback),
|
||||
'album' => $builder->whereHas('album', $callback),
|
||||
'group' => $builder->whereHas('group', $callback),
|
||||
'strategy' => $builder->whereHas('strategy', $callback),
|
||||
'email' => $builder->whereHas('user', fn (Builder $builder) => $builder->where('email', $value)),
|
||||
'extension' => $builder->where('extension', $value),
|
||||
'md5' => $builder->where('md5', $value),
|
||||
'sha1' => $builder->where('sha1', $value),
|
||||
'ip' => $builder->where('ip', $value),
|
||||
default => 0
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
foreach ($words as $word) {
|
||||
$builder->whereRaw("concat(origin_name,alias_name) like ?", ["%{$word}%"]);
|
||||
}
|
||||
})->latest()->paginate(40);
|
||||
$images->getCollection()->each(function (Image $image) {
|
||||
$image->append('url', 'pathname');
|
||||
$image->album?->setVisible(['name']);
|
||||
$image->group?->setVisible(['name']);
|
||||
$image->strategy?->setVisible(['name']);
|
||||
});
|
||||
return view('admin.image.index', compact('images', 'statuses'));
|
||||
|
||||
return view('admin.image.index', compact('images'));
|
||||
}
|
||||
|
||||
public function update(): Response
|
||||
|
||||
Reference in New Issue
Block a user