La mise à jour de l'avatar fonctionne à moitié Pour #12user_profile
parent
b54b9959cf
commit
f97c6a56ec
10 changed files with 745 additions and 22 deletions
@ -0,0 +1,41 @@ |
||||
<?php |
||||
|
||||
namespace App\Http\Controllers; |
||||
|
||||
use App\Http\Requests\UpdateUser; |
||||
use App\User; |
||||
use Illuminate\Support\Facades\Auth; |
||||
use Spatie\MediaLibrary\Exceptions\FileCannotBeAdded\DiskDoesNotExist; |
||||
use Spatie\MediaLibrary\Exceptions\FileCannotBeAdded\FileDoesNotExist; |
||||
use Spatie\MediaLibrary\Exceptions\FileCannotBeAdded\FileIsTooBig; |
||||
|
||||
class UserController extends Controller |
||||
{ |
||||
public function index() |
||||
{ |
||||
return view('user.index', ['user' => Auth::user()]); |
||||
} |
||||
|
||||
public function update(UpdateUser $request) |
||||
{ |
||||
/** @var User $user */ |
||||
$user_id = Auth::user()->getAuthIdentifier(); |
||||
$user = User::find($user_id); |
||||
$validated = $request->validated(); |
||||
if (!array_key_exists('encrypt_messages', $validated)) { |
||||
$validated['encrypt_messages'] = 0; |
||||
} |
||||
if (isset($validated['avatar'])) { |
||||
try { |
||||
$user->clearMediaCollection('avatars'); |
||||
$user->addMediaFromRequest('avatar')->toMediaCollection('avatars'); |
||||
} catch (DiskDoesNotExist $e) { |
||||
} catch (FileDoesNotExist $e) { |
||||
} catch (FileIsTooBig $e) { |
||||
} |
||||
} |
||||
$user->update($validated); |
||||
|
||||
return redirect(route('user.index'))->withSuccess('Data saved!'); |
||||
} |
||||
} |
@ -0,0 +1,35 @@ |
||||
<?php |
||||
|
||||
namespace App\Http\Requests; |
||||
|
||||
use Illuminate\Foundation\Http\FormRequest; |
||||
use Illuminate\Support\Facades\Auth; |
||||
|
||||
class UpdateUser extends FormRequest |
||||
{ |
||||
/** |
||||
* Determine if the user is authorized to make this request. |
||||
* |
||||
* @return bool |
||||
*/ |
||||
public function authorize() |
||||
{ |
||||
return !Auth::guest(); |
||||
} |
||||
|
||||
/** |
||||
* Get the validation rules that apply to the request. |
||||
* |
||||
* @return array |
||||
*/ |
||||
public function rules() |
||||
{ |
||||
return [ |
||||
'name' => 'required|min:4|max:255', |
||||
'email' => 'required|email:rfc|unique:users,email,'.Auth::user()->getAuthIdentifier(), |
||||
'encrypt_messages' => 'boolean', |
||||
'notification_hour' => 'in:0,1,2,3,4', |
||||
'avatar' => 'file|dimensions:min_width=50,min_height=50,max_width=200,max_height=200,ratio=1' |
||||
]; |
||||
} |
||||
} |
@ -0,0 +1,38 @@ |
||||
<?php |
||||
|
||||
use Illuminate\Support\Facades\Schema; |
||||
use Illuminate\Database\Schema\Blueprint; |
||||
use Illuminate\Database\Migrations\Migration; |
||||
|
||||
class CreateMediaTable extends Migration |
||||
{ |
||||
/** |
||||
* Run the migrations. |
||||
*/ |
||||
public function up() |
||||
{ |
||||
Schema::create('media', function (Blueprint $table) { |
||||
$table->bigIncrements('id'); |
||||
$table->morphs('model'); |
||||
$table->string('collection_name'); |
||||
$table->string('name'); |
||||
$table->string('file_name'); |
||||
$table->string('mime_type')->nullable(); |
||||
$table->string('disk'); |
||||
$table->unsignedBigInteger('size'); |
||||
$table->json('manipulations'); |
||||
$table->json('custom_properties'); |
||||
$table->json('responsive_images'); |
||||
$table->unsignedInteger('order_column')->nullable(); |
||||
$table->nullableTimestamps(); |
||||
}); |
||||
} |
||||
|
||||
/** |
||||
* Reverse the migrations. |
||||
*/ |
||||
public function down() |
||||
{ |
||||
Schema::dropIfExists('media'); |
||||
} |
||||
} |
@ -0,0 +1,106 @@ |
||||
@extends('layouts.connected') |
||||
|
||||
@section('content') |
||||
<div class="container"> |
||||
<div class="page-header"> |
||||
<div class="row align-items-center"> |
||||
<div class="col-auto"> |
||||
<h1 class="page-title"> |
||||
{{ __('My profile') }} |
||||
</h1> |
||||
@if (session('status')) |
||||
<div class="alert alert-success" role="alert"> |
||||
{{ session('status') }} |
||||
</div> |
||||
@endif |
||||
@if (session('success')) |
||||
<div class="alert alert-success" role="alert"> |
||||
{{ session('success') }} |
||||
</div> |
||||
@endif |
||||
@if (session('errors')) |
||||
<div class="alert alert-danger" role="alert"> |
||||
{{ session('errors') }} |
||||
</div> |
||||
@endif |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="row flex-fill"> |
||||
<div class="col-12"> |
||||
<form action="{{ route('user.update') }}" method="post" class="card" enctype="multipart/form-data"> |
||||
@csrf |
||||
<div class="card-body"> |
||||
<div class="row"> |
||||
<div class="col-md-6 col-lg-4"> |
||||
<div class="form-group"> |
||||
<label class="form-label">{{ __('Name') }}</label> |
||||
<input type="text" class="form-control" name="name" value="{{ $user->name }}"> |
||||
</div> |
||||
<div class="form-group"> |
||||
<label class="form-label">{{ __('Email') }}</label> |
||||
<input type="email" class="form-control" name="email" value="{{ $user->email }}"> |
||||
</div> |
||||
<div class="form-group"> |
||||
<label class="form-label">{{ __('Password') }}</label> |
||||
<div class="form-control-plaintext">*********</div> |
||||
</div> |
||||
<div class="form-group"> |
||||
<label class="form-label"> |
||||
<input type="checkbox" name="encrypt_messages" value="1" class="custom-switch-input" @if($user->encrypt_messages) checked @endif> |
||||
<span class="custom-switch-indicator"></span> |
||||
<span class="custom-switch-description">{{ __('Encrypt my posts') }}</span> |
||||
</label> |
||||
</div> |
||||
<div class="form-group"> |
||||
<label class="form-label">{{ __('Notification hour') }}</label> |
||||
<div class="selectgroup selectgroup-pills"> |
||||
<label class="selectgroup-item"> |
||||
<input type="radio" name="notification_hour" value="0" class="selectgroup-input" @if($user->notification_hour === null) checked @endif> |
||||
<span class="selectgroup-button selectgroup-button-icon"><i class="fe fe-slash"></i></span> |
||||
</label> |
||||
<label class="selectgroup-item"> |
||||
<input type="radio" name="notification_hour" value="1" class="selectgroup-input"@if($user->notification_hour === '1') checked @endif> |
||||
<span class="selectgroup-button selectgroup-button-icon"><i class="fe fe-moon"></i></span> |
||||
</label> |
||||
<label class="selectgroup-item"> |
||||
<input type="radio" name="notification_hour" value="2" class="selectgroup-input"@if($user->notification_hour === '2') checked @endif> |
||||
<span class="selectgroup-button selectgroup-button-icon"><i class="fe fe-sunrise"></i></span> |
||||
</label> |
||||
<label class="selectgroup-item"> |
||||
<input type="radio" name="notification_hour" value="3" class="selectgroup-input"@if($user->notification_hour === '3') checked @endif> |
||||
<span class="selectgroup-button selectgroup-button-icon"><i class="fe fe-sun"></i></span> |
||||
</label> |
||||
<label class="selectgroup-item"> |
||||
<input type="radio" name="notification_hour" value="4" class="selectgroup-input"@if($user->notification_hour === '4') checked @endif> |
||||
<span class="selectgroup-button selectgroup-button-icon"><i class="fe fe-sunset"></i></span> |
||||
</label> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="col-md-6 col-lg-4"> |
||||
<div class="form-group"> |
||||
<div class="form-label">{{ __('Avatar') }}</div> |
||||
@php($avatar = Auth::user()->getAvatar()) |
||||
@if($avatar !== '') |
||||
<img src="{{ $avatar}}"> |
||||
@endif |
||||
<div class="custom-file"> |
||||
<input type="file" class="custom-file-input" name="avatar"> |
||||
<label class="custom-file-label">{{ __('Choose your avatar') }}</label> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="card-footer text-right"> |
||||
<div class="d-flex"> |
||||
<a href="{{ route('dashboard') }}" class="btn btn-link">{{ __('Cancel') }}</a> |
||||
<button type="submit" class="btn btn-primary ml-auto">{{ __('Save') }}</button> |
||||
</div> |
||||
</div> |
||||
</form> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
@endsection |
Loading…
Reference in new issue