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