Файл: app/Http/Controllers/User/PictureController.php
Строк: 60
<?php
declare(strict_types=1);
namespace AppHttpControllersUser;
use AppClassesValidator;
use AppHttpControllersController;
use AppModelsUser;
use IlluminateHttpRedirectResponse;
use IlluminateHttpRequest;
use IlluminateViewView;
use InterventionImageFormat;
use InterventionImageImageManager;
class PictureController extends Controller
{
public ?User $user;
/**
* Конструктор
*/
public function __construct()
{
$this->middleware('check.user');
$this->middleware(function ($request, $next) {
$this->user = getUser();
return $next($request);
});
}
/**
* Главная страница
*/
public function index(
Request $request,
Validator $validator,
ImageManager $imageManager,
): View|RedirectResponse {
if ($request->isMethod('post')) {
$photo = $request->file('photo');
$rules = [
'maxsize' => setting('filesize'),
'extensions' => explode(',', setting('media_extensions')),
'minweight' => 100,
];
$validator->file($photo, $rules, ['photo' => __('validator.image_upload_failed')]);
if ($validator->isValid()) {
// -------- Удаляем старое фото и аватар ----------//
if ($this->user->picture) {
deleteFile(public_path($this->user->picture));
deleteFile(public_path($this->user->avatar));
$this->user->picture = null;
$this->user->avatar = null;
$this->user->save();
}
// -------- Генерируем аватар -------//
$image = $imageManager->decode($photo);
$image->coverDown(64, 64);
$image->encodeUsingFormat(Format::PNG);
$avatar = $this->user->uploadAvatarPath . '/' . uniqueName('png');
$image->save(public_path($avatar));
// -------- Загружаем фото ----------//
$file = $this->user->uploadFile($photo, false);
$this->user->picture = $file['path'];
$this->user->avatar = $avatar;
$this->user->save();
setFlash('success', __('users.photo_success_uploaded'));
return redirect('profile');
}
return redirect('/pictures')
->withErrors($validator->getErrors())
->withInput();
}
$user = $this->user;
return view('users/picture', compact('user'));
}
/**
* Удаление фотографии
*/
public function delete(Validator $validator): RedirectResponse
{
if (! $this->user->picture) {
$validator->addError(__('users.photo_not_exist'));
}
if ($validator->isValid()) {
deleteFile(public_path($this->user->picture));
deleteFile(public_path($this->user->avatar));
$this->user->picture = null;
$this->user->avatar = null;
$this->user->save();
setFlash('success', __('users.photo_success_deleted'));
} else {
setFlash('danger', $validator->getErrors());
}
return redirect('profile');
}
}