FEATURE: move creating thumbnails into event listener
This commit is contained in:
@@ -12,11 +12,11 @@ class UploadFile extends Event
|
||||
/**
|
||||
* @var UploadedFile
|
||||
*/
|
||||
private $uploadedFile;
|
||||
public $uploadedFile;
|
||||
/**
|
||||
* @var
|
||||
*/
|
||||
private $id;
|
||||
public $id;
|
||||
|
||||
/**
|
||||
* Create a new event instance.
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
|
||||
namespace App\Listeners;
|
||||
|
||||
use App\Events\UploadFile;
|
||||
use Illuminate\Support\Facades\File as FileFacade;
|
||||
use Illuminate\Support\Str;
|
||||
use Intervention\Image\Constraint;
|
||||
use Intervention\Image\Facades\Image;
|
||||
use Symfony\Component\HttpFoundation\File\File as SymphonyFile;
|
||||
|
||||
class CreateImageThumbnail
|
||||
{
|
||||
/**
|
||||
* Create the event listener.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the event.
|
||||
*
|
||||
* @param UploadFile $event
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function handle(UploadFile $event)
|
||||
{
|
||||
$uploadedFile = $event->uploadedFile;
|
||||
|
||||
// is uploaded file an image?
|
||||
if (!Str::startsWith($uploadedFile->getMimeType(), 'image')) {
|
||||
return;
|
||||
}
|
||||
// yes, create thumbnail
|
||||
$this->createThumbnail($uploadedFile);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create thumbnail of given image
|
||||
*
|
||||
* @param SymphonyFile $file
|
||||
*/
|
||||
private function createThumbnail(SymphonyFile $file)
|
||||
{
|
||||
// does thumbnail directory exist?
|
||||
if (!is_dir(config('app.thumbnail_path'))) {
|
||||
FileFacade::makeDirectory(config('app.thumbnail_path'));
|
||||
}
|
||||
|
||||
// get image instance
|
||||
$image = Image::make(config('app.upload_path') . DIRECTORY_SEPARATOR . $file->getFilename());
|
||||
|
||||
// resize image and keep aspect ration
|
||||
$image->resize(env('THUMBNAIL_WIDTH', setting('previewSize', 300)), null, function (Constraint $constraint) {
|
||||
$constraint->aspectRatio();
|
||||
$constraint->upsize();
|
||||
});
|
||||
|
||||
// save thumbnail with lower quality
|
||||
$image->save(config('app.thumbnail_path') . DIRECTORY_SEPARATOR . $file->getFilename(), 75);
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,49 @@
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use App\Events\AssignWidget;
|
||||
use App\Events\AttemptToEditInvalidContent;
|
||||
use App\Events\ChangeSettings;
|
||||
use App\Events\CreateNewContent;
|
||||
use App\Events\CreateNewUser;
|
||||
use App\Events\CreateNewWidget;
|
||||
use App\Events\CreateNewWidgetArea;
|
||||
use App\Events\DeleteContent;
|
||||
use App\Events\DeleteWidgetArea;
|
||||
use App\Events\EditContent;
|
||||
use App\Events\EditFile;
|
||||
use App\Events\EditUser;
|
||||
use App\Events\EditWidget;
|
||||
use App\Events\EditWidgetArea;
|
||||
use App\Events\MakeDraftFromContent;
|
||||
use App\Events\PublishContent;
|
||||
use App\Events\RemoveWidgetFromArea;
|
||||
use App\Events\SetHomepage;
|
||||
use App\Events\UploadFile;
|
||||
use App\Listeners\CreateImageThumbnail;
|
||||
use App\Listeners\Loggers\LogAssignWidget;
|
||||
use App\Listeners\Loggers\LogAttemptToInvalidContentEdit;
|
||||
use App\Listeners\Loggers\LogChangeSettings;
|
||||
use App\Listeners\Loggers\LogCreatedUser;
|
||||
use App\Listeners\Loggers\LogCreateNewContent;
|
||||
use App\Listeners\Loggers\LogDeleteContent;
|
||||
use App\Listeners\Loggers\LogDeleteWidgetArea;
|
||||
use App\Listeners\Loggers\LogDraftFromContent;
|
||||
use App\Listeners\Loggers\LogEditContent;
|
||||
use App\Listeners\Loggers\LogEditFile;
|
||||
use App\Listeners\Loggers\LogEditUser;
|
||||
use App\Listeners\Loggers\LogEditWidget;
|
||||
use App\Listeners\Loggers\LogEditWidgetArea;
|
||||
use App\Listeners\Loggers\LogLogin;
|
||||
use App\Listeners\Loggers\LogLogout;
|
||||
use App\Listeners\Loggers\LogNewWidget;
|
||||
use App\Listeners\Loggers\LogNewWidgetArea;
|
||||
use App\Listeners\Loggers\LogPublishContent;
|
||||
use App\Listeners\Loggers\LogRemoveWidgetFromArea;
|
||||
use App\Listeners\Loggers\LogSetHomepage;
|
||||
use App\Listeners\Loggers\LogUploadFile;
|
||||
use Illuminate\Auth\Events\Login;
|
||||
use Illuminate\Auth\Events\Logout;
|
||||
use Illuminate\Contracts\Events\Dispatcher as DispatcherContract;
|
||||
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
|
||||
|
||||
@@ -13,83 +56,71 @@ class EventServiceProvider extends ServiceProvider
|
||||
* @var array
|
||||
*/
|
||||
protected $listen = [
|
||||
'App\Events\CreateNewUser' => [
|
||||
'App\Listeners\Loggers\LogCreatedUser',
|
||||
CreateNewUser::class => [
|
||||
LogCreatedUser::class,
|
||||
],
|
||||
'App\Events\EditUser' => [
|
||||
'App\Listeners\Loggers\LogEditUser',
|
||||
EditUser::class => [
|
||||
LogEditUser::class,
|
||||
],
|
||||
'App\Events\CreateNewContent' => [
|
||||
'App\Listeners\Loggers\LogCreateNewContent'
|
||||
CreateNewContent::class => [
|
||||
LogCreateNewContent::class
|
||||
],
|
||||
'App\Events\EditContent' => [
|
||||
'App\Listeners\Loggers\LogEditContent'
|
||||
EditContent::class => [
|
||||
LogEditContent::class
|
||||
],
|
||||
'App\Events\PublishContent' => [
|
||||
'App\Listeners\Loggers\LogPublishContent'
|
||||
PublishContent::class => [
|
||||
LogPublishContent::class
|
||||
],
|
||||
'App\Events\MakeDraftFromContent' => [
|
||||
'App\Listeners\Loggers\LogDraftFromContent'
|
||||
MakeDraftFromContent::class => [
|
||||
LogDraftFromContent::class
|
||||
],
|
||||
'App\Events\SetHomepage' => [
|
||||
'App\Listeners\Loggers\LogSetHomepage'
|
||||
SetHomepage::class => [
|
||||
LogSetHomepage::class
|
||||
],
|
||||
'App\Events\AttemptToEditInvalidContent' => [
|
||||
'App\Listeners\Loggers\LogAttemptToInvalidContentEdit'
|
||||
AttemptToEditInvalidContent::class => [
|
||||
LogAttemptToInvalidContentEdit::class
|
||||
],
|
||||
'App\Events\DeleteContent' => [
|
||||
'App\Listeners\Loggers\LogDeleteContent'
|
||||
DeleteContent::class => [
|
||||
LogDeleteContent::class
|
||||
],
|
||||
|
||||
'App\Events\ChangeSettings' => [
|
||||
'App\Listeners\Loggers\LogChangeSettings',
|
||||
ChangeSettings::class => [
|
||||
LogChangeSettings::class,
|
||||
],
|
||||
'App\Events\UploadFile' => [
|
||||
'App\Listeners\Loggers\LogUploadFile'
|
||||
UploadFile::class => [
|
||||
LogUploadFile::class,
|
||||
CreateImageThumbnail::class
|
||||
],
|
||||
'App\Events\EditFile' => [
|
||||
'App\Listeners\Loggers\LogEditFile'
|
||||
EditFile::class => [
|
||||
LogEditFile::class
|
||||
],
|
||||
'App\Events\CreateNewWidgetArea' => [
|
||||
'App\Listeners\Loggers\LogNewWidgetArea'
|
||||
CreateNewWidgetArea::class => [
|
||||
LogNewWidgetArea::class
|
||||
],
|
||||
'App\Events\EditWidgetArea' => [
|
||||
'App\Listeners\Loggers\LogEditWidgetArea'
|
||||
EditWidgetArea::class => [
|
||||
LogEditWidgetArea::class
|
||||
],
|
||||
'App\Events\DeleteWidgetArea' => [
|
||||
'App\Listeners\Loggers\LogDeleteWidgetArea'
|
||||
DeleteWidgetArea::class => [
|
||||
LogDeleteWidgetArea::class
|
||||
],
|
||||
'App\Events\CreateNewWidget' => [
|
||||
'App\Listeners\Loggers\LogNewWidget'
|
||||
CreateNewWidget::class => [
|
||||
LogNewWidget::class
|
||||
],
|
||||
'App\Events\EditWidget' => [
|
||||
'App\Listeners\Loggers\LogEditWidget'
|
||||
EditWidget::class => [
|
||||
LogEditWidget::class
|
||||
],
|
||||
'App\Events\AssignWidget' => [
|
||||
'App\Listeners\Loggers\LogAssignWidget'
|
||||
AssignWidget::class => [
|
||||
LogAssignWidget::class
|
||||
],
|
||||
'App\Events\RemoveWidgetFromArea' => [
|
||||
'App\Listeners\Loggers\LogRemoveWidgetFromArea'
|
||||
RemoveWidgetFromArea::class => [
|
||||
LogRemoveWidgetFromArea::class
|
||||
],
|
||||
// internal Laravel events - should work as auth.login and auth.logout, however it doesn't...
|
||||
'Illuminate\Auth\Events\Login' => [
|
||||
'App\Listeners\Loggers\LogLogin'
|
||||
Login::class => [
|
||||
LogLogin::class
|
||||
],
|
||||
'Illuminate\Auth\Events\Logout' => [
|
||||
'App\Listeners\Loggers\LogLogout'
|
||||
Logout::class => [
|
||||
LogLogout::class
|
||||
],
|
||||
];
|
||||
|
||||
/**
|
||||
* Register any other events for your application.
|
||||
*
|
||||
* @param \Illuminate\Contracts\Events\Dispatcher $events
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function boot(DispatcherContract $events)
|
||||
{
|
||||
parent::boot($events);
|
||||
//
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user