Generate multiple avatar sizes

This commit is contained in:
Čarodej
2021-11-02 16:11:53 +01:00
parent 9b2dbe06c7
commit dc8ec5f20b
18 changed files with 197 additions and 75 deletions
@@ -17,6 +17,7 @@ use Domain\Pages\Actions\SeedDefaultPagesAction;
use Domain\Settings\Actions\SeedDefaultSettingsAction;
use Domain\Localization\Actions\SeedDefaultLanguageAction;
use Domain\SetupWizard\Actions\CreateDiskDirectoriesAction;
use Intervention\Image\ImageManagerStatic as Image;
class SetupDevEnvironment extends Command
{
@@ -99,10 +100,12 @@ class SetupDevEnvironment extends Command
'email_verified_at' => now(),
]);
$avatar_name = $this->generate_avatar('avatar-01.png');
$user
->settings()
->create([
'avatar' => 'avatars/avatar-01.png',
'avatar' => $avatar_name,
'storage_capacity' => 5,
'name' => 'Jane Doe',
'address' => $this->faker->address,
@@ -114,8 +117,6 @@ class SetupDevEnvironment extends Command
'timezone' => $this->faker->randomElement(['+1.0', '+2.0', '+3.0']),
]);
Storage::putFileAs('avatars', storage_path('demo/avatars/avatar-01.png'), 'avatar-01.png', 'private');
// Show user credentials
$this->info('Default admin account created. Email: howdy@hi5ve.digital and Password: vuefilemanager');
}
@@ -158,10 +159,12 @@ class SetupDevEnvironment extends Command
'email_verified_at' => now(),
]);
$avatar_name = $this->generate_avatar($user['avatar']);
$newbie
->settings()
->create([
'avatar' => "avatars/{$user['avatar']}",
'avatar' => $avatar_name,
'storage_capacity' => 5,
'name' => $this->faker->name,
'address' => $this->faker->address,
@@ -173,8 +176,6 @@ class SetupDevEnvironment extends Command
'timezone' => $this->faker->randomElement(['+1.0', '+2.0', '+3.0']),
]);
Storage::putFileAs('avatars', storage_path("demo/avatars/{$user['avatar']}"), $user['avatar'], 'private');
$this->info("Generated user with email: $newbie->email and Password: vuefilemanager");
});
}
@@ -1119,4 +1120,33 @@ class SetupDevEnvironment extends Command
$this->call('config:clear');
$this->call('view:clear');
}
/**
* @param $avatar
* @return string
* @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
*/
private function generate_avatar($avatar): string
{
$image = \Illuminate\Support\Facades\File::get(storage_path("/demo/avatars/{$avatar}"));
// Create avatar name
$avatar_name = Str::uuid() . '.png';
// Create intervention image
$img = Image::make($image);
// Generate avatar
collect(config('vuefilemanager.avatar_sizes'))
->each(function ($size) use ($img, $image, $avatar_name) {
// fit thumbnail
$img->fit($size['size'], $size['size'])->stream();
// Store thumbnail to disk
Storage::put("avatars/{$size['name']}-{$avatar_name}", $img);
});
return $avatar_name;
}
}
@@ -1,6 +1,7 @@
<?php
namespace App\Users\Controllers\Account;
use App\Users\Requests\UpdateUserProfileSettingsRequest;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use App\Http\Controllers\Controller;
@@ -12,26 +13,13 @@ class UpdateProfileSettingsController extends Controller
/**
* Update user settings
*/
public function __invoke(Request $request): Response
public function __invoke(UpdateUserProfileSettingsRequest $request): Response
{
// Validate request
// TODO: pridat validator do requestu
$validator = Validator::make($request->all(), [
'avatar' => 'sometimes|file',
'name' => 'string',
'value' => 'string',
]);
// Return error
if ($validator->fails()) {
abort(400, 'Bad input');
}
// Get user
$user = Auth::user();
// Check if is demo
abort_if(is_demo_account($user->email), 204, 'Done.');
abort_if(is_demo_account(), 204, 'Done.');
// Update avatar
if ($request->hasFile('avatar')) {
+9 -2
View File
@@ -16,7 +16,7 @@ class UserSettings extends Model
/**
* Format avatar to full url
*
* @return \Illuminate\Contracts\Routing\UrlGenerator|string
* @return \Illuminate\Contracts\Routing\UrlGenerator|string|array
*/
public function getAvatarAttribute()
{
@@ -27,7 +27,14 @@ class UserSettings extends Model
// Get avatar from local storage
if ($this->attributes['avatar']) {
return url('/' . $this->attributes['avatar']);
$link = [];
foreach (config('vuefilemanager.avatar_sizes') as $item) {
$link[$item['name']] = url("/avatars/{$item['name']}-{$this->attributes['avatar']}");
}
return $link;
}
return null;
@@ -0,0 +1,32 @@
<?php
namespace App\Users\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UpdateUserProfileSettingsRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'avatar' => 'sometimes|file',
'name' => 'string',
'value' => 'string',
];
}
}