From a1f723671daa83414d869090f086fe4e283f637a Mon Sep 17 00:00:00 2001 From: Franz Liedke Date: Wed, 25 Mar 2015 14:23:31 +0100 Subject: [PATCH] Add simple implementation (command handler) for avatar upload. --- src/Core/Commands/UploadAvatarCommand.php | 30 ++++++++++ src/Core/Events/AvatarWillBeUploaded.php | 16 +++++ .../Commands/UploadAvatarCommandHandler.php | 59 +++++++++++++++++++ 3 files changed, 105 insertions(+) create mode 100644 src/Core/Commands/UploadAvatarCommand.php create mode 100644 src/Core/Events/AvatarWillBeUploaded.php create mode 100644 src/Core/Handlers/Commands/UploadAvatarCommandHandler.php diff --git a/src/Core/Commands/UploadAvatarCommand.php b/src/Core/Commands/UploadAvatarCommand.php new file mode 100644 index 000000000..acbd8aaef --- /dev/null +++ b/src/Core/Commands/UploadAvatarCommand.php @@ -0,0 +1,30 @@ +userId = $userId; + $this->file = $file; + $this->actor = $actor; + } +} diff --git a/src/Core/Events/AvatarWillBeUploaded.php b/src/Core/Events/AvatarWillBeUploaded.php new file mode 100644 index 000000000..efb93c2aa --- /dev/null +++ b/src/Core/Events/AvatarWillBeUploaded.php @@ -0,0 +1,16 @@ +user = $user; + $this->command = $command; + } +} diff --git a/src/Core/Handlers/Commands/UploadAvatarCommandHandler.php b/src/Core/Handlers/Commands/UploadAvatarCommandHandler.php new file mode 100644 index 000000000..5914a768b --- /dev/null +++ b/src/Core/Handlers/Commands/UploadAvatarCommandHandler.php @@ -0,0 +1,59 @@ +users = $users; + $this->uploadDir = $uploadDir; + } + + public function handle(UploadAvatarCommand $command) + { + $user = $this->users->findOrFail($command->userId); + + // Make sure the current user is allowed to edit the user profile. + // This will let admins and the user themselves pass through, and + // throw an exception otherwise. + $user->assertCan($command->actor, 'edit'); + + $filename = $command->file->getFilename(); + $uploadName = Str::lower(Str::quickRandom()) . '.jpg'; + + $mount = new MountManager([ + 'source' => new Local($command->file->getPath()), + 'target' => $this->uploadDir, + ]); + + $user->changeAvatarUrl($uploadName); + + event(new AvatarWillBeUploaded($user, $command)); + + $mount->move("source://$filename", "target://$uploadName"); + $user->save(); + $this->dispatchEventsFor($user); + + return $user; + } +}