55 lines
1.9 KiB
PHP
55 lines
1.9 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\User;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Image;
|
|
use App\Models\User;
|
|
use Illuminate\Database\Eloquent\Builder;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Http\Response;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\View\View;
|
|
|
|
class ImageController extends Controller
|
|
{
|
|
public function index(): View
|
|
{
|
|
return view('images');
|
|
}
|
|
|
|
public function images(Request $request): Response
|
|
{
|
|
/** @var User $user */
|
|
$user = Auth::user();
|
|
|
|
$images = $user->images()->when($request->query('order') ?: 'newest', function (Builder $builder, $order) {
|
|
switch ($order) {
|
|
case 'earliest':
|
|
$builder->orderBy('created_at');
|
|
break;
|
|
case 'utmost':
|
|
$builder->orderByDesc('size');
|
|
break;
|
|
case 'least':
|
|
$builder->orderBy('size');
|
|
break;
|
|
default:
|
|
$builder->latest();
|
|
}
|
|
})->when($request->query('keyword'), function (Builder $builder, $keyword) {
|
|
$builder->whereRaw("concat(IFNULL(origin_name,''),IFNULL(alias_name,'')) like ?", ["%{$keyword}%"]);
|
|
})->when((int) $request->query('album_id'), function (Builder $builder, $albumId) {
|
|
$builder->where('album_id', $albumId);
|
|
})->paginate(40);
|
|
$images->getCollection()->each(function (Image $image) {
|
|
$image->human_date = $image->created_at->diffForHumans();
|
|
$image->date = $image->created_at->format('Y-m-d H:i:s');
|
|
$image->append(['url', 'filename'])->setVisible([
|
|
'id', 'filename', 'url', 'human_date', 'date', 'human_date', 'width', 'height'
|
|
]);
|
|
});
|
|
return $this->success('success', compact('images'));
|
|
}
|
|
}
|