From 163da0556940f60f8ecd81f13f1ac8d2b29492bf Mon Sep 17 00:00:00 2001 From: ncla Date: Sun, 3 Apr 2022 13:40:18 +0300 Subject: [PATCH 1/7] Square orientation user avatar generation for CP header --- routes/cp.php | 2 +- src/Auth/HasAvatar.php | 18 +++++++--- .../CP/Assets/ThumbnailController.php | 33 ++++++++++++++++--- 3 files changed, 44 insertions(+), 9 deletions(-) diff --git a/routes/cp.php b/routes/cp.php index cb10e4be258..48e1818670c 100644 --- a/routes/cp.php +++ b/routes/cp.php @@ -141,7 +141,7 @@ Route::get('assets-fieldtype', 'FieldtypeController@index'); Route::resource('assets', 'AssetsController')->parameters(['assets' => 'encoded_asset']); Route::get('assets/{encoded_asset}/download', 'AssetsController@download')->name('assets.download'); - Route::get('thumbnails/{encoded_asset}/{size?}', 'ThumbnailController@show')->name('assets.thumbnails.show'); + Route::get('thumbnails/{encoded_asset}/{size?}/{orientation?}', 'ThumbnailController@show')->name('assets.thumbnails.show'); Route::get('svgs/{encoded_asset}', 'SvgController@show')->name('assets.svgs.show'); Route::get('pdfs/{encoded_asset}', 'PdfController@show')->name('assets.pdfs.show'); }); diff --git a/src/Auth/HasAvatar.php b/src/Auth/HasAvatar.php index c9b7c1aa6ec..47714160f10 100644 --- a/src/Auth/HasAvatar.php +++ b/src/Auth/HasAvatar.php @@ -14,7 +14,7 @@ trait HasAvatar */ public function avatar($size = 64) { - if ($this->hasAvatarField() && ($url = $this->avatarFieldUrl())) { + if ($this->hasAvatarField() && ($url = $this->avatarFieldSmallSquareThumbnailUrl())) { return $url; } @@ -43,11 +43,21 @@ public function avatarFieldValue() } /** - * The URL of the avatar from the asset field. + * Square thumbnail URL of the avatar from the asset field. */ - public function avatarFieldUrl() + public function avatarFieldSmallSquareThumbnailUrl() { - return optional($this->avatarFieldValue()->value())->url(); + $assetId = optional($this->avatarFieldValue()->value())->id(); + + if (!$assetId) { + return null; + } + + return cp_route('assets.thumbnails.show', [ + 'encoded_asset' => base64_encode($assetId), + 'size' => 'small', + 'orientation' => 'square' + ]); } /** diff --git a/src/Http/Controllers/CP/Assets/ThumbnailController.php b/src/Http/Controllers/CP/Assets/ThumbnailController.php index bc7f7d2c0c2..d7ce96010be 100644 --- a/src/Http/Controllers/CP/Assets/ThumbnailController.php +++ b/src/Http/Controllers/CP/Assets/ThumbnailController.php @@ -18,7 +18,7 @@ class ThumbnailController extends Controller protected $server; /** - * @var Generator + * @var ImageGenerator */ protected $generator; @@ -32,6 +32,11 @@ class ThumbnailController extends Controller */ protected $size; + /** + * @var string + */ + protected $orientation; + /** * @var string */ @@ -52,11 +57,13 @@ public function __construct(Server $server, ImageGenerator $generator) * * @param string $asset * @param string $size + * @param string $orientation * @return \Illuminate\Http\Response */ - public function show($asset, $size = null) + public function show($asset, $size = null, $orientation = null) { $this->size = $size; + $this->orientation = $orientation; $this->asset = $this->asset($asset); if ($placeholder = $this->getPlaceholderResponse()) { @@ -107,9 +114,27 @@ private function generate() return $path; } - public function getPreset() + /** + * Get control panel thumbnail image preset name + * + * Statamic has few control panel specific image presets + * @see \Statamic\Imaging\Manager::cpManipulationPresets + * + * @return string + */ + private function getPreset() + { + return "cp_thumbnail_{$this->size}_{$this->getOrientation()}"; + } + + /** + * Get orientation override from URL path or directly from asset + * + * @return string|null + */ + private function getOrientation() { - return "cp_thumbnail_{$this->size}_{$this->asset->orientation()}"; + return $this->orientation ?? $this->asset->orientation(); } /** From 969f04549f03c0d6dc1d02d2a733f3b7d5320600 Mon Sep 17 00:00:00 2001 From: ncla Date: Sun, 3 Apr 2022 14:26:37 +0300 Subject: [PATCH 2/7] Adjust HasAvatarTest --- tests/Auth/HasAvatarTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/Auth/HasAvatarTest.php b/tests/Auth/HasAvatarTest.php index d75958dd9f1..c5b6c22e334 100644 --- a/tests/Auth/HasAvatarTest.php +++ b/tests/Auth/HasAvatarTest.php @@ -76,8 +76,8 @@ public function it_gets_the_avatar_if_theres_a_field_defined_in_the_blueprint_an { $user = $this->withAvatarField()->withGravatar()->userWithUploadedAvatar(); - $this->assertEquals('/avatars/john.jpg', $user->avatar()); - $this->assertEquals('/avatars/john.jpg', $user->avatar(64)); + $this->assertStringContainsString('/cp/thumbnails/YXZhdGFyczo6am9obi5qcGc=/small/square', $user->avatar()); + $this->assertStringContainsString('/cp/thumbnails/YXZhdGFyczo6am9obi5qcGc=/small/square', $user->avatar(64)); $this->assertEquals('https://www.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=64', $user->gravatarUrl()); $this->assertEquals('https://www.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=64', $user->gravatarUrl(64)); $this->assertEquals('https://www.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=128', $user->gravatarUrl(128)); From 12bf301b8fc2cee1e2761d7ff4b5dc6034a135e5 Mon Sep 17 00:00:00 2001 From: ncla Date: Sun, 3 Apr 2022 14:35:53 +0300 Subject: [PATCH 3/7] Style fixes --- src/Auth/HasAvatar.php | 4 ++-- src/Http/Controllers/CP/Assets/ThumbnailController.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Auth/HasAvatar.php b/src/Auth/HasAvatar.php index 47714160f10..cf7140f8524 100644 --- a/src/Auth/HasAvatar.php +++ b/src/Auth/HasAvatar.php @@ -49,14 +49,14 @@ public function avatarFieldSmallSquareThumbnailUrl() { $assetId = optional($this->avatarFieldValue()->value())->id(); - if (!$assetId) { + if (! $assetId) { return null; } return cp_route('assets.thumbnails.show', [ 'encoded_asset' => base64_encode($assetId), 'size' => 'small', - 'orientation' => 'square' + 'orientation' => 'square', ]); } diff --git a/src/Http/Controllers/CP/Assets/ThumbnailController.php b/src/Http/Controllers/CP/Assets/ThumbnailController.php index d7ce96010be..0ca3af0bbf5 100644 --- a/src/Http/Controllers/CP/Assets/ThumbnailController.php +++ b/src/Http/Controllers/CP/Assets/ThumbnailController.php @@ -115,7 +115,7 @@ private function generate() } /** - * Get control panel thumbnail image preset name + * Get control panel thumbnail image preset name. * * Statamic has few control panel specific image presets * @see \Statamic\Imaging\Manager::cpManipulationPresets @@ -128,7 +128,7 @@ private function getPreset() } /** - * Get orientation override from URL path or directly from asset + * Get orientation override from URL path or directly from asset. * * @return string|null */ From 673872fd2109521f481c9f57449df6efb6acfd23 Mon Sep 17 00:00:00 2001 From: ncla Date: Sun, 3 Apr 2022 15:01:37 +0300 Subject: [PATCH 4/7] One more style fix --- src/Http/Controllers/CP/Assets/ThumbnailController.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Http/Controllers/CP/Assets/ThumbnailController.php b/src/Http/Controllers/CP/Assets/ThumbnailController.php index 0ca3af0bbf5..6657670936d 100644 --- a/src/Http/Controllers/CP/Assets/ThumbnailController.php +++ b/src/Http/Controllers/CP/Assets/ThumbnailController.php @@ -118,6 +118,7 @@ private function generate() * Get control panel thumbnail image preset name. * * Statamic has few control panel specific image presets + * * @see \Statamic\Imaging\Manager::cpManipulationPresets * * @return string From a676ad4281c93e73bf00b6100a2128a3f1bba903 Mon Sep 17 00:00:00 2001 From: Jason Varga Date: Thu, 14 Apr 2022 12:31:49 -0400 Subject: [PATCH 5/7] Bring back avatarFieldUrl method --- src/Auth/HasAvatar.php | 8 ++++++++ tests/Auth/HasAvatarTest.php | 2 ++ 2 files changed, 10 insertions(+) diff --git a/src/Auth/HasAvatar.php b/src/Auth/HasAvatar.php index cf7140f8524..ab9d1a0fa08 100644 --- a/src/Auth/HasAvatar.php +++ b/src/Auth/HasAvatar.php @@ -42,6 +42,14 @@ public function avatarFieldValue() ); } + /** + * The URL of the avatar from the asset field. + */ + public function avatarFieldUrl() + { + return optional($this->avatarFieldValue()->value())->url(); + } + /** * Square thumbnail URL of the avatar from the asset field. */ diff --git a/tests/Auth/HasAvatarTest.php b/tests/Auth/HasAvatarTest.php index c5b6c22e334..4ab5a32d0ce 100644 --- a/tests/Auth/HasAvatarTest.php +++ b/tests/Auth/HasAvatarTest.php @@ -78,6 +78,8 @@ public function it_gets_the_avatar_if_theres_a_field_defined_in_the_blueprint_an $this->assertStringContainsString('/cp/thumbnails/YXZhdGFyczo6am9obi5qcGc=/small/square', $user->avatar()); $this->assertStringContainsString('/cp/thumbnails/YXZhdGFyczo6am9obi5qcGc=/small/square', $user->avatar(64)); + $this->assertEquals('/avatars/john.jpg', $user->avatarFieldUrl()); + $this->assertEquals('/avatars/john.jpg', $user->avatarFieldUrl(64)); $this->assertEquals('https://www.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=64', $user->gravatarUrl()); $this->assertEquals('https://www.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=64', $user->gravatarUrl(64)); $this->assertEquals('https://www.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=128', $user->gravatarUrl(128)); From 745e1c053fc34d81a138d43251b4fc4878532173 Mon Sep 17 00:00:00 2001 From: Jason Varga Date: Thu, 14 Apr 2022 12:32:14 -0400 Subject: [PATCH 6/7] no harm checking the whole url --- tests/Auth/HasAvatarTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/Auth/HasAvatarTest.php b/tests/Auth/HasAvatarTest.php index 4ab5a32d0ce..f895dd89b14 100644 --- a/tests/Auth/HasAvatarTest.php +++ b/tests/Auth/HasAvatarTest.php @@ -76,10 +76,10 @@ public function it_gets_the_avatar_if_theres_a_field_defined_in_the_blueprint_an { $user = $this->withAvatarField()->withGravatar()->userWithUploadedAvatar(); - $this->assertStringContainsString('/cp/thumbnails/YXZhdGFyczo6am9obi5qcGc=/small/square', $user->avatar()); - $this->assertStringContainsString('/cp/thumbnails/YXZhdGFyczo6am9obi5qcGc=/small/square', $user->avatar(64)); $this->assertEquals('/avatars/john.jpg', $user->avatarFieldUrl()); $this->assertEquals('/avatars/john.jpg', $user->avatarFieldUrl(64)); + $this->assertEquals('http://localhost/cp/thumbnails/YXZhdGFyczo6am9obi5qcGc=/small/square', $user->avatar()); + $this->assertEquals('http://localhost/cp/thumbnails/YXZhdGFyczo6am9obi5qcGc=/small/square', $user->avatar(64)); $this->assertEquals('https://www.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=64', $user->gravatarUrl()); $this->assertEquals('https://www.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=64', $user->gravatarUrl(64)); $this->assertEquals('https://www.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=128', $user->gravatarUrl(128)); From b2bc751ea351833dca3ba542487c8b7233159d1a Mon Sep 17 00:00:00 2001 From: Jason Varga Date: Thu, 14 Apr 2022 12:32:32 -0400 Subject: [PATCH 7/7] nitpick --- src/Auth/HasAvatar.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Auth/HasAvatar.php b/src/Auth/HasAvatar.php index ab9d1a0fa08..51bddd5d744 100644 --- a/src/Auth/HasAvatar.php +++ b/src/Auth/HasAvatar.php @@ -10,11 +10,11 @@ trait HasAvatar /** * Get a user's avatar URL. * - * Could be an asset's URL through a field named avatar, a Gravatar URL, or null. + * Could be an asset thumbnail URL through a field named avatar, a Gravatar URL, or null. */ public function avatar($size = 64) { - if ($this->hasAvatarField() && ($url = $this->avatarFieldSmallSquareThumbnailUrl())) { + if ($this->hasAvatarField() && ($url = $this->avatarFieldSquareThumbnailUrl())) { return $url; } @@ -53,7 +53,7 @@ public function avatarFieldUrl() /** * Square thumbnail URL of the avatar from the asset field. */ - public function avatarFieldSmallSquareThumbnailUrl() + public function avatarFieldSquareThumbnailUrl() { $assetId = optional($this->avatarFieldValue()->value())->id();