FEATURE: move creating thumbnails into event listener

This commit is contained in:
Michal Kváček
2017-03-02 10:33:45 +01:00
parent 4353345b3e
commit 4128fcf88e
3 changed files with 154 additions and 57 deletions
+2 -2
View File
@@ -12,11 +12,11 @@ class UploadFile extends Event
/**
* @var UploadedFile
*/
private $uploadedFile;
public $uploadedFile;
/**
* @var
*/
private $id;
public $id;
/**
* Create a new event instance.
+66
View File
@@ -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);
}
}
+86 -55
View File
@@ -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);
//
}
}