mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-05-04 05:05:58 +00:00
Generate multiple avatar sizes
This commit is contained in:
@@ -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')) {
|
||||
|
||||
@@ -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',
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user