diff --git a/app/Events/UploadFile.php b/app/Events/UploadFile.php index a414602b..05def8d0 100644 --- a/app/Events/UploadFile.php +++ b/app/Events/UploadFile.php @@ -12,11 +12,11 @@ class UploadFile extends Event /** * @var UploadedFile */ - private $uploadedFile; + public $uploadedFile; /** * @var */ - private $id; + public $id; /** * Create a new event instance. diff --git a/app/Listeners/CreateImageThumbnail.php b/app/Listeners/CreateImageThumbnail.php new file mode 100644 index 00000000..07ff6145 --- /dev/null +++ b/app/Listeners/CreateImageThumbnail.php @@ -0,0 +1,66 @@ +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); + } +} diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index dfcfed78..47403ba2 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -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); - // - } }