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 * @var UploadedFile
*/ */
private $uploadedFile; public $uploadedFile;
/** /**
* @var * @var
*/ */
private $id; public $id;
/** /**
* Create a new event instance. * 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; 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\Contracts\Events\Dispatcher as DispatcherContract;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
@@ -13,83 +56,71 @@ class EventServiceProvider extends ServiceProvider
* @var array * @var array
*/ */
protected $listen = [ protected $listen = [
'App\Events\CreateNewUser' => [ CreateNewUser::class => [
'App\Listeners\Loggers\LogCreatedUser', LogCreatedUser::class,
], ],
'App\Events\EditUser' => [ EditUser::class => [
'App\Listeners\Loggers\LogEditUser', LogEditUser::class,
], ],
'App\Events\CreateNewContent' => [ CreateNewContent::class => [
'App\Listeners\Loggers\LogCreateNewContent' LogCreateNewContent::class
], ],
'App\Events\EditContent' => [ EditContent::class => [
'App\Listeners\Loggers\LogEditContent' LogEditContent::class
], ],
'App\Events\PublishContent' => [ PublishContent::class => [
'App\Listeners\Loggers\LogPublishContent' LogPublishContent::class
], ],
'App\Events\MakeDraftFromContent' => [ MakeDraftFromContent::class => [
'App\Listeners\Loggers\LogDraftFromContent' LogDraftFromContent::class
], ],
'App\Events\SetHomepage' => [ SetHomepage::class => [
'App\Listeners\Loggers\LogSetHomepage' LogSetHomepage::class
], ],
'App\Events\AttemptToEditInvalidContent' => [ AttemptToEditInvalidContent::class => [
'App\Listeners\Loggers\LogAttemptToInvalidContentEdit' LogAttemptToInvalidContentEdit::class
], ],
'App\Events\DeleteContent' => [ DeleteContent::class => [
'App\Listeners\Loggers\LogDeleteContent' LogDeleteContent::class
], ],
'App\Events\ChangeSettings' => [ ChangeSettings::class => [
'App\Listeners\Loggers\LogChangeSettings', LogChangeSettings::class,
], ],
'App\Events\UploadFile' => [ UploadFile::class => [
'App\Listeners\Loggers\LogUploadFile' LogUploadFile::class,
CreateImageThumbnail::class
], ],
'App\Events\EditFile' => [ EditFile::class => [
'App\Listeners\Loggers\LogEditFile' LogEditFile::class
], ],
'App\Events\CreateNewWidgetArea' => [ CreateNewWidgetArea::class => [
'App\Listeners\Loggers\LogNewWidgetArea' LogNewWidgetArea::class
], ],
'App\Events\EditWidgetArea' => [ EditWidgetArea::class => [
'App\Listeners\Loggers\LogEditWidgetArea' LogEditWidgetArea::class
], ],
'App\Events\DeleteWidgetArea' => [ DeleteWidgetArea::class => [
'App\Listeners\Loggers\LogDeleteWidgetArea' LogDeleteWidgetArea::class
], ],
'App\Events\CreateNewWidget' => [ CreateNewWidget::class => [
'App\Listeners\Loggers\LogNewWidget' LogNewWidget::class
], ],
'App\Events\EditWidget' => [ EditWidget::class => [
'App\Listeners\Loggers\LogEditWidget' LogEditWidget::class
], ],
'App\Events\AssignWidget' => [ AssignWidget::class => [
'App\Listeners\Loggers\LogAssignWidget' LogAssignWidget::class
], ],
'App\Events\RemoveWidgetFromArea' => [ RemoveWidgetFromArea::class => [
'App\Listeners\Loggers\LogRemoveWidgetFromArea' LogRemoveWidgetFromArea::class
], ],
// internal Laravel events - should work as auth.login and auth.logout, however it doesn't... // internal Laravel events - should work as auth.login and auth.logout, however it doesn't...
'Illuminate\Auth\Events\Login' => [ Login::class => [
'App\Listeners\Loggers\LogLogin' LogLogin::class
], ],
'Illuminate\Auth\Events\Logout' => [ Logout::class => [
'App\Listeners\Loggers\LogLogout' 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);
//
}
} }