Skip to content

Commit e60d423

Browse files
nclajasonvarga
andauthored
Square orientation user avatar generation for CP header (#5731)
Co-authored-by: Jason Varga <jason@pixelfear.com>
1 parent 10eb74e commit e60d423

4 files changed

Lines changed: 55 additions & 9 deletions

File tree

routes/cp.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@
141141
Route::get('assets-fieldtype', 'FieldtypeController@index');
142142
Route::resource('assets', 'AssetsController')->parameters(['assets' => 'encoded_asset']);
143143
Route::get('assets/{encoded_asset}/download', 'AssetsController@download')->name('assets.download');
144-
Route::get('thumbnails/{encoded_asset}/{size?}', 'ThumbnailController@show')->name('assets.thumbnails.show');
144+
Route::get('thumbnails/{encoded_asset}/{size?}/{orientation?}', 'ThumbnailController@show')->name('assets.thumbnails.show');
145145
Route::get('svgs/{encoded_asset}', 'SvgController@show')->name('assets.svgs.show');
146146
Route::get('pdfs/{encoded_asset}', 'PdfController@show')->name('assets.pdfs.show');
147147
});

src/Auth/HasAvatar.php

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@ trait HasAvatar
1010
/**
1111
* Get a user's avatar URL.
1212
*
13-
* Could be an asset's URL through a field named avatar, a Gravatar URL, or null.
13+
* Could be an asset thumbnail URL through a field named avatar, a Gravatar URL, or null.
1414
*/
1515
public function avatar($size = 64)
1616
{
17-
if ($this->hasAvatarField() && ($url = $this->avatarFieldUrl())) {
17+
if ($this->hasAvatarField() && ($url = $this->avatarFieldSquareThumbnailUrl())) {
1818
return $url;
1919
}
2020

@@ -50,6 +50,24 @@ public function avatarFieldUrl()
5050
return optional($this->avatarFieldValue()->value())->url();
5151
}
5252

53+
/**
54+
* Square thumbnail URL of the avatar from the asset field.
55+
*/
56+
public function avatarFieldSquareThumbnailUrl()
57+
{
58+
$assetId = optional($this->avatarFieldValue()->value())->id();
59+
60+
if (! $assetId) {
61+
return null;
62+
}
63+
64+
return cp_route('assets.thumbnails.show', [
65+
'encoded_asset' => base64_encode($assetId),
66+
'size' => 'small',
67+
'orientation' => 'square',
68+
]);
69+
}
70+
5371
/**
5472
* The Gravatar URL.
5573
*/

src/Http/Controllers/CP/Assets/ThumbnailController.php

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class ThumbnailController extends Controller
1818
protected $server;
1919

2020
/**
21-
* @var Generator
21+
* @var ImageGenerator
2222
*/
2323
protected $generator;
2424

@@ -32,6 +32,11 @@ class ThumbnailController extends Controller
3232
*/
3333
protected $size;
3434

35+
/**
36+
* @var string
37+
*/
38+
protected $orientation;
39+
3540
/**
3641
* @var string
3742
*/
@@ -52,11 +57,13 @@ public function __construct(Server $server, ImageGenerator $generator)
5257
*
5358
* @param string $asset
5459
* @param string $size
60+
* @param string $orientation
5561
* @return \Illuminate\Http\Response
5662
*/
57-
public function show($asset, $size = null)
63+
public function show($asset, $size = null, $orientation = null)
5864
{
5965
$this->size = $size;
66+
$this->orientation = $orientation;
6067
$this->asset = $this->asset($asset);
6168

6269
if ($placeholder = $this->getPlaceholderResponse()) {
@@ -107,9 +114,28 @@ private function generate()
107114
return $path;
108115
}
109116

110-
public function getPreset()
117+
/**
118+
* Get control panel thumbnail image preset name.
119+
*
120+
* Statamic has few control panel specific image presets
121+
*
122+
* @see \Statamic\Imaging\Manager::cpManipulationPresets
123+
*
124+
* @return string
125+
*/
126+
private function getPreset()
127+
{
128+
return "cp_thumbnail_{$this->size}_{$this->getOrientation()}";
129+
}
130+
131+
/**
132+
* Get orientation override from URL path or directly from asset.
133+
*
134+
* @return string|null
135+
*/
136+
private function getOrientation()
111137
{
112-
return "cp_thumbnail_{$this->size}_{$this->asset->orientation()}";
138+
return $this->orientation ?? $this->asset->orientation();
113139
}
114140

115141
/**

tests/Auth/HasAvatarTest.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,10 @@ public function it_gets_the_avatar_if_theres_a_field_defined_in_the_blueprint_an
7676
{
7777
$user = $this->withAvatarField()->withGravatar()->userWithUploadedAvatar();
7878

79-
$this->assertEquals('/avatars/john.jpg', $user->avatar());
80-
$this->assertEquals('/avatars/john.jpg', $user->avatar(64));
79+
$this->assertEquals('/avatars/john.jpg', $user->avatarFieldUrl());
80+
$this->assertEquals('/avatars/john.jpg', $user->avatarFieldUrl(64));
81+
$this->assertEquals('http://localhost/cp/thumbnails/YXZhdGFyczo6am9obi5qcGc=/small/square', $user->avatar());
82+
$this->assertEquals('http://localhost/cp/thumbnails/YXZhdGFyczo6am9obi5qcGc=/small/square', $user->avatar(64));
8183
$this->assertEquals('https://www.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=64', $user->gravatarUrl());
8284
$this->assertEquals('https://www.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=64', $user->gravatarUrl(64));
8385
$this->assertEquals('https://www.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=128', $user->gravatarUrl(128));

0 commit comments

Comments
 (0)