From bdb3d061e33a90822ef4bd4ba24ff0f886fe32bb Mon Sep 17 00:00:00 2001 From: unknown <vaskomitevski@yahoo.com> Date: Sun, 24 Mar 2024 00:56:03 +0100 Subject: [PATCH] finishing the profile part --- app/Http/Controllers/UserController.php | 29 +++++++ app/Models/User.php | 3 +- .../2014_10_12_000000_create_users_table.php | 1 + database/seeders/UsersSeeder.php | 4 + public/css/admin-login.css | 5 -- public/js/profile.js | 27 +++++++ resources/views/layouts/app.blade.php | 1 + resources/views/layouts/navbar.blade.php | 8 +- resources/views/users/edit.blade.php | 81 +++++++++++++++++++ routes/web.php | 5 ++ 10 files changed, 155 insertions(+), 9 deletions(-) create mode 100644 app/Http/Controllers/UserController.php create mode 100644 public/js/profile.js create mode 100644 resources/views/users/edit.blade.php diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php new file mode 100644 index 0000000..faf6318 --- /dev/null +++ b/app/Http/Controllers/UserController.php @@ -0,0 +1,29 @@ +<?php + +namespace App\Http\Controllers; + +use App\Models\User; +use Illuminate\Http\Request; +use Illuminate\Support\Facades\Auth; + +class UserController extends Controller +{ + + /** + * Show the form for editing the specified resource. + */ + public function edit() + { + $user = Auth::user(); + + return view('users.edit', compact('user')); + } + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, User $user) + { + + } +} diff --git a/app/Models/User.php b/app/Models/User.php index 266a5c9..eb9f5f4 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -22,7 +22,8 @@ class User extends Authenticatable 'email', 'phone_number', 'password', - 'role' + 'role', + 'profile_picture' ]; /** diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php index f1ef8af..1dbd7f2 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -16,6 +16,7 @@ public function up(): void $table->string('name'); $table->string('email')->unique(); $table->string('phone_number')->nullable(); + $table->string('profile_picture')->nullable(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->enum('role', ['client', 'admin', 'super_admin']); diff --git a/database/seeders/UsersSeeder.php b/database/seeders/UsersSeeder.php index 1500729..5adde23 100644 --- a/database/seeders/UsersSeeder.php +++ b/database/seeders/UsersSeeder.php @@ -20,6 +20,7 @@ public function run(): void 'phone_number' => '+38977123456', 'password' => Hash::make('admin1234'), 'role' => 'admin', + 'profile_picture' => 'images/profile_images/360_F_243123463_zTooub557xEWABDLk0jJklDyLSGl2jrr.jpg', ]); User::create([ @@ -28,6 +29,9 @@ public function run(): void 'phone_number' => '+38977123456', 'password' => Hash::make('super_admin1234'), 'role' => 'super_admin', + 'profile_picture' => 'images/profile_images/360_F_243123463_zTooub557xEWABDLk0jJklDyLSGl2jrr.jpg', ]); } } + + diff --git a/public/css/admin-login.css b/public/css/admin-login.css index 202ae86..c3c7a67 100644 --- a/public/css/admin-login.css +++ b/public/css/admin-login.css @@ -49,8 +49,3 @@ #sidebar.expanded:hover .sidebar-expanded-text { margin-left: 10px; white-space: nowrap; } - -#sidebar.expanded .sidebar-expanded-text-container { -display: flex; -justify-content: center -} \ No newline at end of file diff --git a/public/js/profile.js b/public/js/profile.js new file mode 100644 index 0000000..f3ba139 --- /dev/null +++ b/public/js/profile.js @@ -0,0 +1,27 @@ +document.addEventListener("DOMContentLoaded", function () { + document + .getElementById("changePhotoLink") + .addEventListener("click", function (event) { + event.preventDefault(); + + var fileInput = document.getElementById("profile_picture"); + fileInput.click(); + }); + + document + .getElementById("profile_picture") + .addEventListener("change", function (event) { + var file = event.target.files[0]; + + if (file) { + var reader = new FileReader(); + + reader.onload = function (e) { + document.getElementById("profilePicture").src = + e.target.result; + }; + + reader.readAsDataURL(file); + } + }); +}); diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index f118d09..ed3d739 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -35,6 +35,7 @@ </div> <script src="{{ asset('js/script.js') }}"></script> + <script src="{{ asset('js/profile.js') }}"></script> <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.min.js" integrity="sha384-+sLIOodYLS7CIrQpBjl+C7nPvqq+FbNUBDunl/OZv93DB7Ln/533i8e/mZXLi/P+" crossorigin="anonymous"></script> diff --git a/resources/views/layouts/navbar.blade.php b/resources/views/layouts/navbar.blade.php index 70562c0..d34e13e 100644 --- a/resources/views/layouts/navbar.blade.php +++ b/resources/views/layouts/navbar.blade.php @@ -7,7 +7,9 @@ <a href="#" class="nav-link align-middle px-0"> <div class="photo d-flex justify-content-between"> <div class="sidebar-expanded-text-container"> - <span class="ms-1 d-sm-inline">Photo</span> + <span class="ms-1 d-sm-inline"> + <img src="{{ Storage::url(auth()->user()->profile_picture) }}" alt="Profile Picture" class="img-fluid rounded-circle"> + </span> </div> <div class="user-info sidebar-expanded-text"> <span class="name-row">{{ auth()->user()->name }}</span> <br> @@ -19,7 +21,7 @@ </div> </a> </li> - <li class="nav-item mt-3" id="menu-item-2"> + <li class="nav-item mt-2" id="menu-item-2"> <a href="{{ route('products.index') }}" class="nav-link align-middle px-0"> <div class="sidebar-expanded-text-container"> <span class="ms-1 d-sm-inline"><i class="fa-solid fa-gear fa-2x"></i></span> @@ -44,7 +46,7 @@ </a> </li> <li class="nav-item mt-2" id="menu-item-5"> - <a href="#" class="nav-link align-middle px-0"> + <a href="{{ route('users.edit') }}" class="nav-link align-middle px-0"> <div class="sidebar-expanded-text-container"> <span class="ms-1 d-sm-inline"><i class="fa-solid fa-user fa-2x"></i></span> <span class="h3 sidebar-expanded-text">Профил</span> diff --git a/resources/views/users/edit.blade.php b/resources/views/users/edit.blade.php new file mode 100644 index 0000000..1c6bcdc --- /dev/null +++ b/resources/views/users/edit.blade.php @@ -0,0 +1,81 @@ +@extends('layouts.app') + +@section('content') + <div class="container px-2 py-5"> + <div class="row"> + <div class="col-md-8 offset-md-2"> + <form id="edit_user" method="POST" action="{{ route('users.update', $user->id) }}" enctype="multipart/form-data"> + @csrf + + @method('PUT') + + + + <div class="row mb-3"> + <div class="col d-flex align-center"> + <a href="{{ route('products.index') }}" class="text-secondary"><i class="fa-solid fa-left-long fa-2x"></i></a> + <span class="product h4 px-3">Moj Profil</span> + </div> + </div> + + <div class="mb-3"> + @if($user->profile_picture) + <div class="rounded-circle overflow-hidden d-flex justify-content-center align-items-center" style="width: 100px; height: 100px;"> + <img id="profilePicture" src="{{ asset('storage/' . $user->profile_picture) }}" alt="Profile Picture" class="w-auto h-100"> + </div> + @else + <div class="rounded-circle bg-secondary text-light d-flex justify-content-center align-items-center" style="width: 200px; height: 200px;"> + <span class="fs-1">No Image</span> + </div> + @endif + <a href="#" id="changePhotoLink" class="text-decoration-none d-block text-center mt-2">Change Photo</a> + <input type="file" class="form-control mt-2" id="profile_picture" name="profile_picture" hidden> + @error('profile_picture') + <span class="text-danger">{{ $message }}</span> + @enderror + </div> + + <div class="mb-3"> + <label for="name" class="form-label">Име</label> + <input type="text" class="form-control" id="name" name="name" value="{{ $user->name }}"> + @error('name') + <span class="text-danger">{{ $message }}</span> + @enderror + </div> + + <div class="mb-3"> + <label for="email" class="form-label">Email адреÑа</label> + <input type="text" class="form-control" id="email" name="email" value="{{ $user->email }}"></input> + @error('email') + <span class="text-danger">{{ $message }}</span> + @enderror + </div> + + <div class="mb-3"> + <label for="phone_number" class="form-label">ТелефонÑки број</label> + <input type="text" class="form-control" id="phone_number" name="phone_number" value="{{ $user->phone_number }}"> + @error('phone_number') + <span class="text-danger">{{ $message }}</span> + @enderror + </div> + + <div class="mb-3"> + <label for="password" class="form-label">Лозинка</label> + <input type="password" class="form-control" id="password" name="password" value="********"> + @error('password') + <span class="text-danger">{{ $message }}</span> + @enderror + </div> + + <div class="mb-3"> + <a href="{{ route('users.update') }}">Промени лозинка</a> + </div> + + <div class="row mb-3 d-flex justify-center"> + <button type="submit" class="btn btn-dark w-50">Зачувај</button> + </div> + </form> + </div> + </div> + </div> +@endsection \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index cf67237..da06f59 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,6 +1,7 @@ <?php use Illuminate\Support\Facades\Route; +use App\Http\Controllers\UserController; use App\Http\Controllers\BrandController; use App\Http\Controllers\ProductController; use App\Http\Controllers\DiscountController; @@ -48,6 +49,10 @@ Route::get('brands/{brand}/edit', [BrandController::class, 'edit'])->name('brands.edit'); Route::put('brands/{brand}', [BrandController::class, 'update'])->name('brands.update'); +//user handle +Route::get('/user/edit', [UserController::class, 'edit'])->name('users.edit'); +Route::put('/user/update', [UserController::class, 'update'])->name('users.update'); + Route::group(['middleware' => ['admin', 'super_admin']], function () { }); -- GitLab