Besma před 2 roky
rodič
revize
e55b43d5b9
30 změnil soubory, kde provedl 296 přidání a 197 odebrání
  1. 9 4
      app/Http/Controllers/backend/CategorieController.php
  2. 0 0
      app/Http/Controllers/backend/NotificationController.php
  3. 6 3
      app/Http/Controllers/backend/PresentationController.php
  4. 48 14
      app/Http/Controllers/backend/ProduitController.php
  5. 14 6
      app/Http/Controllers/backend/PromotionController.php
  6. 7 2
      app/Http/Controllers/backend/SlideController.php
  7. 35 0
      app/Listeners/SendPromotionNotification.php
  8. 4 6
      app/Notifications/PromotionNotification.php
  9. 2 0
      app/Providers/EventServiceProvider.php
  10. 14 1
      public/backend/css/admin.css
  11. 8 5
      public/backend/css/idara.css
  12. 2 2
      resources/views/backend/category/index.blade.php
  13. 1 1
      resources/views/backend/category/show.blade.php
  14. 1 1
      resources/views/backend/partials/features.blade.php
  15. 6 2
      resources/views/backend/partials/import.blade.php
  16. 0 35
      resources/views/backend/partials/scriptIndex.blade.php
  17. 1 1
      resources/views/backend/presentation/index.blade.php
  18. 7 5
      resources/views/backend/presentation/show.blade.php
  19. 24 28
      resources/views/backend/produit/add.blade.php
  20. 32 9
      resources/views/backend/produit/edit.blade.php
  21. 5 3
      resources/views/backend/produit/index.blade.php
  22. 18 3
      resources/views/backend/produit/show.blade.php
  23. 2 0
      resources/views/backend/promotion/add.blade.php
  24. 1 1
      resources/views/backend/promotion/edit.blade.php
  25. 3 16
      resources/views/backend/promotion/index.blade.php
  26. 2 2
      resources/views/backend/promotion/show.blade.php
  27. 2 14
      resources/views/backend/slide/index.blade.php
  28. 1 1
      resources/views/backend/slide/show.blade.php
  29. 17 10
      resources/views/layouts/idara/panel.blade.php
  30. 24 22
      routes/web.php

+ 9 - 4
app/Http/Controllers/backend/CategorieController.php

@@ -14,6 +14,11 @@ use App\Models\temporaryFile;
 
 class CategorieController extends Controller
 {
+    public function __construct(){
+        return $this->middleware(['auth','verified']);
+  
+    }
+    
     public function Index(){
         $articles = Categorie::get();
 
@@ -41,7 +46,7 @@ class CategorieController extends Controller
                Storage::deleteDirectory('image/tmp/'.$tmp_file->folder);
                $tmp_file->delete();
         
-           return redirect('categories');
+           return redirect()->route('categories');
    
     }
 }
@@ -80,7 +85,7 @@ class CategorieController extends Controller
 
           $article->created_at = \Carbon\Carbon::now();
         $article->save();
-        return redirect ('categories');
+        return redirect ()->route('categories');
     }
 
     public function destroy(Request $request, $id){
@@ -91,13 +96,13 @@ class CategorieController extends Controller
         // Produit::whereCategoryId($id)->update(['category_id' => null]);
         $products = Produit::where('category_id', $id)->count();
         if($products > 0){
-            return redirect ('categories')
+            return redirect ()->route('categories')
                     ->with('message', 'Produit existe dans cette categorie');
         }
         else{
             $category= Categorie::find($id);
             $category->delete();
-            return Redirect::to('categories')
+            return Redirect::to('/idara/categories')
                         ->with('message', 'Categorie supprimée');
         }
         

+ 0 - 0
app/Http/Controllers/backend/NotificationController.php


+ 6 - 3
app/Http/Controllers/backend/PresentationController.php

@@ -15,7 +15,10 @@ use App\Models\temporaryFile;
 class PresentationController extends Controller
 {
 
-       
+    public function __construct(){
+        return $this->middleware(['auth','verified']);
+  
+    }
           public function changeStatus(Request $request)
         {
             $article = Presentation::find($request->Id);
@@ -80,7 +83,7 @@ class PresentationController extends Controller
 
           $article->created_at = \Carbon\Carbon::now();
         $article->save();
-        return redirect ('presentations');
+        return redirect ()->route('presentations');
     }
 
      public function editImage($id) {
@@ -151,7 +154,7 @@ class PresentationController extends Controller
         
         
         $article->save();
-        return redirect ('presentations');
+        return redirect ()->route('presentations');
 
 
     }

+ 48 - 14
app/Http/Controllers/backend/ProduitController.php

@@ -6,7 +6,10 @@ use Illuminate\Http\Request;
 use App\Models\Produit;
 use App\Models\Categorie;
 use App\Models\Media;
+use App\Models\Promotion;
+
 use App\Models\CategorieProduit;
+use Illuminate\Support\Facades\Redirect;
 
 use App\Models\temporaryFile;
 
@@ -15,6 +18,11 @@ use Illuminate\Support\Facades\Storage;
 
 class ProduitController extends Controller
 {
+    public function __construct(){
+        return $this->middleware(['auth','verified']);
+  
+    }
+
     public function Index(){
 
         $articles = Produit::get();
@@ -50,30 +58,41 @@ class ProduitController extends Controller
 
                Storage::deleteDirectory('diapo/tmp/'.$tmp_file->folder);
                $tmp_file->delete();
-           
-           return redirect('produits');
+        
            }
            
     
-           return redirect('produits');
+           return redirect()->route('produits');
    
     }
 
     
     public function show($id){
+       
+
         $article=Produit::find($id);
         $diapos=Media::where('produit_id','=',$article->id)->get();
+       
+        if ($article->document != null) {
+            
+
+            $size = Storage::size('document/'.$article->document); 
+            $file_size = $size * 0.0009765625; 
+            $sizeFile = number_format($file_size,0);
+            
+            $infoPath = pathinfo(public_path('document/'.$article->document));
+            $extension = $infoPath['extension'];
+            
+            return view('backend.produit.show',compact('article','diapos','extension','sizeFile'));
+        }
         
-        
-        $size = Storage::size('document/'.$article->document); 
-        $file_size = $size * 0.0009765625; 
-       $sizeFile = number_format($file_size,2);
+  
+
+        return view('backend.produit.show',compact('article','diapos'));
 
-       $infoPath = pathinfo(public_path('document/'.$article->document));
-       $extension = $infoPath['extension'];
-        return view('backend.produit.show',['article'=>$article],compact('diapos','sizeFile','extension'));
     }
 
+    
 
     
     public function edit($id) {
@@ -108,7 +127,7 @@ class ProduitController extends Controller
            }
           $article->created_at = \Carbon\Carbon::now();
         $article->save();
-        return redirect ('produits');
+        return redirect ()->route('produits');
     }
 
     
@@ -159,10 +178,25 @@ public function destroyMedia(Request $request, $id){
 public function destroyProduit(Request $request, $id){
 
 
-    $article = Produit::find($id);
-    $article->delete();
+    // $article = Produit::find($id);
+    // $article->delete();
 
-    return back();
+    // return back();
+
+    $promo = Promotion::where('produit_id', $id)->count();
+        if($promo > 0){
+            return redirect ('produits')
+                    ->with('message', 'Produit existe dans une promotion');
+        }
+        else{
+            $article = Produit::find($id);
+
+            $article->delete();
+            return Redirect::to('produits')
+                        ->with('message', 'produit supprimée');
+        }
+        
+        return back();
 }
     
 

+ 14 - 6
app/Http/Controllers/backend/PromotionController.php

@@ -11,6 +11,8 @@ use App\Models\temporaryFile;
 use Illuminate\Support\Facades\Storage;
 use App\Models\Promotion;
 
+use Illuminate\Support\Facades\Notification;
+
 class PromotionController extends Controller
 {
    public function __construct(){
@@ -23,7 +25,9 @@ class PromotionController extends Controller
 
         $articles = Promotion::get();
 
-        return view("backend.promotion.index",compact('articles'));
+
+        $user = User::find(1);
+        return view("backend.promotion.index",compact('articles','user'));
      }
 
   
@@ -36,7 +40,7 @@ class PromotionController extends Controller
      }
      public function store(Request $request) {
 
-        
+        $user = User::all();
       
         $article = new Promotion();
         $article->titre = $request->input('titre');
@@ -50,7 +54,11 @@ class PromotionController extends Controller
         
 
         $article->save();
-           return redirect('/promotions');
+
+        
+        Notification::send($user, new PromotionNotification($request->titre));
+        
+           return redirect()->route('promotions');
 
     }
       
@@ -85,7 +93,7 @@ class PromotionController extends Controller
              Storage::deleteDirectory('image/tmp/'.$tmp_file->folder);
              $tmp_file->delete();
       
-         return redirect('promotions');
+         return redirect()->route('promotions');
  
   }
 
@@ -123,7 +131,7 @@ class PromotionController extends Controller
                $article->created_at = \Carbon\Carbon::now();
 
                $article->save();
-                  return redirect('/promotions');
+                  return redirect()->route('promotions');
 
             }
             public function editPack($id) {
@@ -163,7 +171,7 @@ class PromotionController extends Controller
                     $article->created_at = \Carbon\Carbon::now();
                     $article->save();
                
-                  return redirect('promotions');
+                  return redirect()->route('promotions');
          
            }
 

+ 7 - 2
app/Http/Controllers/backend/SlideController.php

@@ -11,6 +11,11 @@ use App\Models\temporaryFile;
 
 class SlideController extends Controller
 {
+
+    public function __construct(){
+        return $this->middleware(['auth','verified']);
+  
+    }
     public function index()
 
     {
@@ -44,7 +49,7 @@ class SlideController extends Controller
         }
            
         
-           return redirect('slides');
+           return redirect()->route('slides');
    
     }
     public function show($id){
@@ -79,7 +84,7 @@ class SlideController extends Controller
 
           $article->created_at = \Carbon\Carbon::now();
         $article->save();
-        return redirect ('slides');
+        return redirect ()->route('slides');
     }
 
     public function destroy(Request $request, $id){

+ 35 - 0
app/Listeners/SendPromotionNotification.php

@@ -0,0 +1,35 @@
+<?php
+
+namespace App\Listeners;
+
+use App\Models\Promotion;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Queue\InteractsWithQueue;
+use App\Notifications\PromotionNotification;
+use Illuminate\Support\Facades\Notification;
+class SendPromotionNotification
+{
+    /**
+     * Create the event listener.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        //
+    }
+
+    /**
+     * Handle the event.
+     *
+     * @param  object  $event
+     * @return void
+     */
+    public function handle($event)
+    {
+      $titre =  Promotion::where('fin', '<', \Carbon\Carbon::now())->get();
+
+          Notification::send($titre, new PromotionNotification($event->titre));
+    }
+
+}

+ 4 - 6
app/Notifications/PromotionNotification.php

@@ -6,21 +6,19 @@ use Illuminate\Bus\Queueable;
 use Illuminate\Contracts\Queue\ShouldQueue;
 use Illuminate\Notifications\Messages\MailMessage;
 use Illuminate\Notifications\Notification;
-use App\Models\Promotion;
 
 class PromotionNotification extends Notification
 {
     use Queueable;
-    public $promo;
-
+    public $titre;
     /**
      * Create a new notification instance.
      *
      * @return void
      */
-    public function __construct(Promotion $promo)
+    public function __construct($titre)
     {
-    $this->promo = $promo;
+        $this->titre = $titre;
     }
 
     /**
@@ -57,7 +55,7 @@ class PromotionNotification extends Notification
     public function toArray($notifiable)
     {
         return [
-            'promo_id' =>$this->promo->id
+            'titre' =>$this->titre
         ];
     }
 }

+ 2 - 0
app/Providers/EventServiceProvider.php

@@ -2,6 +2,7 @@
 
 namespace App\Providers;
 
+use App\Listeners\SendPromotionNotification;
 use Illuminate\Auth\Events\Registered;
 use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
 use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
@@ -17,6 +18,7 @@ class EventServiceProvider extends ServiceProvider
     protected $listen = [
         Registered::class => [
             SendEmailVerificationNotification::class,
+            SendPromotionNotification::class,
         ],
     ];
 

+ 14 - 1
public/backend/css/admin.css

@@ -14,7 +14,7 @@
     left: 0;
     height: 100%;
     width: 260px;
-    background: #483331;
+    background: #103770;
     z-index: 100;
     transition: all 0.5s ease;
 }
@@ -189,7 +189,20 @@
     opacity: 0;
     pointer-events: none;
 }
+.sidebar li.profile{
+    position: fixed;
+    height: 60px;
+    width: 78px;
+    left: 0;
+    bottom: 38px;
+    padding: 10px 14px;
 
+    transition: all 0.5s ease;
+    overflow: hidden;
+  }
+  .sidebar.open li.profile{
+    width: 250px;
+  }
 .sidebar .nav-links li:hover .sub-menu.blank {
     top: 50%;
     transform: translateY(-50%);

+ 8 - 5
public/backend/css/idara.css

@@ -1,7 +1,4 @@
-@import '~@fortawesome/fontawesome-free/css/fontawesome';
-@import '~@fortawesome/fontawesome-free/css/regular';
-@import '~@fortawesome/fontawesome-free/css/solid';
-@import '~@fortawesome/fontawesome-free/css/brands';
+
 .flexBtn{
     display: contents;
 }
@@ -11,4 +8,10 @@
  }
   .showImage img {
       height: 200px;
-  }
+  }
+
+   a.title{
+    color: #78879d !important;
+    text-decoration: none!important;
+}
+

+ 2 - 2
resources/views/backend/category/index.blade.php

@@ -59,7 +59,7 @@
                             <tr>
                                 <th scope="row">
 
-                                <a href="{{ url('categorie/'.$article->id) }}" >{{$article->nom}}</a>
+                                <a class="title" href="{{ route('category.show',['id'=>$article]) }}" >{{$article->nom}}</a>
 
 
                                 </th>
@@ -78,7 +78,7 @@
 
                                             <input data-id="{{$article->id}}" class="toggle-class" type="checkbox" data-onstyle="success" data-offstyle="danger" data-toggle="toggle" data-on="✔" data-off="⊘" {{ $article->etat ? 'checked' : '' }}>
 
-                                            <Tooltip title="Voir Plus"> <a href="{{ url('categorie/'.$article->id) }}" class="btn btn-xs btn-primary"><i class="fa fa-sign-out" aria-hidden="true"></i></a></Tooltip>
+                                            <Tooltip title="Voir Plus"> <a href="{{ route('category.show',['id'=>$article]) }}" class="btn btn-xs btn-primary"><i class="fa fa-sign-out" aria-hidden="true"></i></a></Tooltip>
 
 
 

+ 1 - 1
resources/views/backend/category/show.blade.php

@@ -29,7 +29,7 @@
                                         <li><button class="dropdown-item" type="button"><i class="fas fa-eye" aria-hidden="true"></i> Visualiser</button></li>
 
                                     </a>
-                                    <a href="{{ url('categorie/'.$article->id.'/edit') }}">
+                                    <a href="{{ route('category.edit',['id'=>$article]) }}">
                                         <li><button class="dropdown-item" type="button"> <i class="fa-solid fa-pen-to-square"></i> Modifier</button></li>
                                     </a>
 

+ 1 - 1
resources/views/backend/partials/features.blade.php

@@ -10,7 +10,7 @@
                 <div class="card-body">
 
                     <a href="<?php echo $_SERVER["REQUEST_URI"]; ?>" class="btn btn-secondary"><i class="fa-solid fa-arrows-rotate"></i>Actualiser</a>
-                    <a onclick="history.back()" href="<?php echo $_SERVER["REQUEST_URI"]; ?>" class="btn btn-primary">Retour</a>
+                    <a href="{{ URL::previous() }}" class="btn btn-primary">Retour</a>
 
 
                 </div>

+ 6 - 2
resources/views/backend/partials/import.blade.php

@@ -1,6 +1,10 @@
-<link rel="stylesheet" href="{{ asset('css/bootstrap.css') }}">
+{{-- <link rel="stylesheet" href="{{ asset('css/bootstrap.css') }}"> --}}
+<link rel="stylesheet" href="{{ asset('backend/css/idara.css') }}">
+
+
+
+{{-- <script src="{{ asset('js/bootstrap.js') }}"></script> --}}
 
-<script src="{{ asset('js/bootstrap.js') }}"></script>
 <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
 
 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css" integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ==" crossorigin="anonymous" referrerpolicy="no-referrer" />

+ 0 - 35
resources/views/backend/partials/scriptIndex.blade.php

@@ -1,40 +1,5 @@
 
-<script src="https://cdnjs.cloudflare.com/ajax/libs/sweetalert/2.1.2/sweetalert.min.js"></script>
-<script type="text/javascript">
-    $('.show_confirm').click(function(event) {
 
-        var form = $(this).closest("form");
-        var name = $(this).data("name");
-        event.preventDefault();
-        swal({
-                title: `Are you sure you want to delete this record?`
-                , text: "If you delete this, it will be gone forever."
-                , icon: "warning"
-                , buttons: true
-                , dangerMode: true
-            , })
-            .then((willDelete) => {
-                if (willDelete) {
-                    form.submit();
-                }
-            });
-    });
-
-    function myFunction() {
-        document.getElementById("demo").innerHTML = "Hello World";
-    }
-
-    var myModal = document.getElementById('myModal')
-    var myInput = document.getElementById('myInput')
-
-    myModal.addEventListener('shown.bs.modal', function() {
-        myInput.focus()
-    })
-    $('form input').on('change', function() {
-        $(this).closest('form').submit();
-    });
-
-</script>
 
 <script src="https://cdn.ckeditor.com/ckeditor5/36.0.0/classic/ckeditor.js"></script>
 <script>

+ 1 - 1
resources/views/backend/presentation/index.blade.php

@@ -84,7 +84,7 @@
 
                             <tr>
                                 <th scope="row">
-                      <a href="{{route('presentation.show', ['id' => $article])}}" >{{$article->titre}}</a>
+                      <a class="title" href="{{route('presentation.show', ['id' => $article])}}" >{{$article->titre}}</a>
 
                                 </th>
                                 <th scope="row">

+ 7 - 5
resources/views/backend/presentation/show.blade.php

@@ -34,7 +34,9 @@
                                         <li><button class="dropdown-item" type="button"><i class="fas fa-eye" aria-hidden="true"></i> Visualiser</button></li>
 
                                     </a>
-                                    <a href="{{ url('presentation/'.$article->id.'/edit') }}">
+                      {{-- <a href="{{route('presentation.show', ['id' => $article])}}" >{{$article->titre}}</a> --}}
+
+                                    <a href="{{ route('presentation.edit', ['id'=> $article]) }}">
                                         <li><button class="dropdown-item" type="button"> <i class="fa-solid fa-pen-to-square"></i> Modifier</button></li>
                                     </a>
 
@@ -46,13 +48,13 @@
                                 </button>
                                 <ul class="dropdown-menu">
 
-                                    <a href="{{url('presentations/'.$article->id.'/editImage')}}">
+                                    <a href="{{route('presentation.editImage', ['id'=> $article])}}">
                                         <li><button class="dropdown-item" type="button"> <i class="fa fa-camera"></i> image</button></li>
                                     </a>
-                                    <a href="{{url('presentations/'.$article->id.'/editVideo')}}">
+                                    {{-- <a href="{{url('presentations/'.$article->id.'/editVideo')}}">
                                         <li><button class="dropdown-item" type="button"> <i class="fa fa-camera"></i> Video</button></li>
-                                    </a>
-                                    <a href="{{url('presentations/'.$article->id.'/editDetails')}}">
+                                    </a> --}}
+                                    <a href="{{route('presentation.editDetails', ['id'=> $article])}}">
                                         <li><button class="dropdown-item" type="button"> <i class="fa fa-camera"></i> Details</button></li>
                                     </a>
 

+ 24 - 28
resources/views/backend/produit/add.blade.php

@@ -5,10 +5,7 @@
 
 <link
   rel="stylesheet"
-  href="https://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.15.2/css/selectize.default.min.css"
-  integrity="sha512-pTaEn+6gF1IeWv3W1+7X7eM60TFu/agjgoHmYhAfLEU8Phuf6JKiiE8YmsNC0aCgQv4192s4Vai8YZ6VNM6vyQ=="
-  crossorigin="anonymous"
-  referrerpolicy="no-referrer"
+  href="https://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.15.2/css/selectize.default.min.css""
 />
 <link href="https://unpkg.com/filepond@4.30.4/dist/filepond.min.css" rel="stylesheet" type="text/css" />
 <link href="https://unpkg.com/filepond-plugin-file-poster@2.5.1/dist/filepond-plugin-file-poster.min.css" rel="stylesheet" type="text/css" />
@@ -107,7 +104,7 @@
 
 </div>
 
-@include('backend.partials.scriptIndex')
+
 
 
 <style>
@@ -117,29 +114,11 @@
     }
 
 </style>
-<script
-  src="https://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.15.2/js/selectize.min.js"
-  integrity="sha512-IOebNkvA/HZjMM7MxL0NYeLYEalloZ8ckak+NDtOViP7oiYzG5vn6WVXyrJDiJPhl4yRdmNAG49iuLmhkUdVsQ=="
-  crossorigin="anonymous"
-  referrerpolicy="no-referrer"
-></script>
-<script>
-  $(function () {
-    $("#categories").selectize({
-  plugins: ["remove_button"],
-  delimiter: ",",
-  persist: false,
-  create: function (input) {
-    return {
-        value: input,
-        text: input,
-    };
-  },
-});
-  });
- 
-</script>
 
+
+<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.4/jquery.min.js" integrity="sha512-pumBsjNRGGqkPzKHndZMaAG+bir374sORyzM3uulLV14lN5LyykqNk8eEeUlUkB3U0M4FApyaHraT65ihJhDpQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
+
+<script src="https://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.15.2/js/selectize.min.js"></script>
 <script src="https://unpkg.com/filepond@4.30.4/dist/filepond.min.js"></script>
 <script src="https://unpkg.com/filepond-plugin-file-poster@2.5.1/dist/filepond-plugin-file-poster.min.js"></script>
 <script src="https://unpkg.com/filepond-plugin-file-validate-type@1.2.8/dist/filepond-plugin-file-validate-type.min.js"></script>
@@ -266,4 +245,21 @@ FilePond.create(document.querySelector(pond_selector), {
 
 </script>
 
-@endsection
+
+<script>
+    $(function () {
+      $("#categories").selectize({
+    plugins: ["remove_button"],
+    delimiter: ",",
+    persist: false,
+    create: function (input) {
+      return {
+          value: input,
+          text: input,
+      };
+    },
+  });
+    });
+   
+  </script>
+@endsection

+ 32 - 9
resources/views/backend/produit/edit.blade.php

@@ -2,7 +2,10 @@
 
 
 @section('content')
-
+<link
+  rel="stylesheet"
+  href="https://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.15.2/css/selectize.default.min.css""
+/>
 <link href="https://unpkg.com/filepond@4.30.4/dist/filepond.min.css" rel="stylesheet" type="text/css" />
 <link href="https://unpkg.com/filepond-plugin-file-poster@2.5.1/dist/filepond-plugin-file-poster.min.css" rel="stylesheet" type="text/css" />
 
@@ -11,10 +14,11 @@
 <!-- Custom css -->
 <link href="{{asset('css/custom.css')}}" rel="stylesheet" />
 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
-@include('backend.partials.features')
+
 
 <div class="container">
-    <div class="card">
+    @include('backend.partials.features')
+    <div class="card mt-4">
         <h5 class="card-header">Modifier</h5>
         <div class="card-body">
             <form action="{{url('produit/'.$article->id)}}" method="post" enctype="multipart/form-data">
@@ -30,17 +34,17 @@
                     <label for="exampleFormControlInput1">Categorie</label>
                 <select multiple onchange="optionCheck()" class="form-control" name="categories[]" id="categories" class="categorie" aria-describedby="validationServer04Feedback" style=" margin-bottom: 40px;" required>
 
-
-                        <option  value="{{ $article->category_id }}">
-                            @foreach ($article->categories as $singleTag)
-                                <span class="label label-info label-many btn btn-secondary">{{ $singleTag->nom }}</span>
-                            @endforeach</option>
+                           @foreach ($article->categories as $singleTag)
+                           
+                               
+                                <option  value="{{ $article->category_id }}">  {{ $singleTag->nom }}</option> 
+                           @endforeach
 
 
                               @foreach ($categories as $categorie)
 
 
-                     <option value="{{ $categorie->id }}" {{ old('categorie') == $categorie->id  ? 'selected' : '' }}>{{ $categorie->nom }}</option>
+                          <option value="{{ $categorie->id }}" {{ old('categorie') == $categorie->id  ? 'selected' : '' }}>{{ $categorie->nom }}</option>
 
 
                              @endforeach
@@ -87,12 +91,31 @@
 </style>    
 
 @include('backend.partials.scriptIndex')
+
+<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.4/jquery.min.js" integrity="sha512-pumBsjNRGGqkPzKHndZMaAG+bir374sORyzM3uulLV14lN5LyykqNk8eEeUlUkB3U0M4FApyaHraT65ihJhDpQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.15.2/js/selectize.min.js"></script>
 <script src="https://unpkg.com/filepond@4.30.4/dist/filepond.min.js"></script>
 <script src="https://unpkg.com/filepond-plugin-file-poster@2.5.1/dist/filepond-plugin-file-poster.min.js"></script>
 <script src="https://unpkg.com/filepond-plugin-file-validate-type@1.2.8/dist/filepond-plugin-file-validate-type.min.js"></script>
 <script src="https://unpkg.com/filepond-plugin-file-validate-size@2.2.8/dist/filepond-plugin-file-validate-size.min.js"></script>
 <script src="https://unpkg.com/filepond-plugin-image-exif-orientation@1.0.11/dist/filepond-plugin-image-exif-orientation.min.js"></script>
 
+<script>
+    $(function () {
+      $("#categories").selectize({
+    plugins: ["remove_button"],
+    delimiter: ",",
+    persist: false,
+    create: function (input) {
+      return {
+          value: input,
+          text: input,
+      };
+    },
+  });
+    });
+   
+  </script>
 <script  type="module">
     var  img_width = 1080 ;
     var img_height = {{ env('IMG_HEIGHT') }};

+ 5 - 3
resources/views/backend/produit/index.blade.php

@@ -33,7 +33,9 @@
     </section>
 
 
-
+    @if (Session::has('message'))
+    <div class="alert alert-info">{{ Session::get('message') }}</div>
+ @endif
     <div class="card">
             <div class="card-header">
                Catégories
@@ -60,7 +62,7 @@
                             <tr>
                                 <th scope="row">
 
-                                <a href="{{ url('produit/'.$article->id) }}" >{{$article->nom}}</a>
+                                <a class="title" href="{{ route('produit.show',['id'=>$article]) }" >{{$article->nom}}</a>
 
 
                                 </th>
@@ -86,7 +88,7 @@
                                             <input data-id="{{$article->id}}" class="toggle-class btn" type="checkbox" data-onstyle="success" data-offstyle="danger" data-toggle="toggle" data-on="✔" data-off="⊘" {{ $article->etat ? 'checked' : '' }}>
                                             <input data-id="{{$article->id}}" class="toggle-class-home" type="checkbox" data-onstyle="success" data-offstyle="warning" data-toggle="toggle" data-on="🏠" data-off="🏠" {{ $article->home ? 'checked' : '' }}>
 
-                                            <Tooltip title="Voir Plus"> <a href="{{ url('produit/'.$article->id) }}" class="btn btn-xs btn-primary"><i class="fa fa-sign-out" aria-hidden="true"></i></a></Tooltip>
+                                            <Tooltip title="Voir Plus"> <a href="{{ route('produit.show',['id'=>$article]) }}" class="btn btn-xs btn-primary"><i class="fa fa-sign-out" aria-hidden="true"></i></a></Tooltip>
 
 
 

+ 18 - 3
resources/views/backend/produit/show.blade.php

@@ -29,7 +29,7 @@
                                         <li><button class="dropdown-item" type="button"><i class="fas fa-eye" aria-hidden="true"></i> Visualiser</button></li>
 
                                     </a>
-                                    <a href="{{ url('produit/'.$article->id.'/edit') }}">
+                                    <a href="{{ route('produit.edit',['id'=>$article]) }}">
                                         <li><button class="dropdown-item" type="button"> <i class="fa-solid fa-pen-to-square"></i> Modifier</button></li>
                                     </a>
 
@@ -40,11 +40,13 @@
                                 <i class="fa fa-puzzle-piece"></i> Extensions
                             </button>
                             <ul class="dropdown-menu">
-                                <a href="{{url('produit/'.$article->id.'/editDoc')}}">
+                                <a href="{{ route('produit.editDoc',['id'=>$article]) }}">
+
                                     <li><button class="dropdown-item" type="button"><i class="fa-solid fa-pen"></i> Ducument</button></li>
                                 </a>
                                
-                                <a href="{{url('produit/'.$article->id.'/diapo')}}">
+                                <a href="{{ route('produit.editDiapo',['id'=>$article]) }}">
+
                                     <li><button class="dropdown-item" type="button"> <i class="fa fa-camera"></i>photo Produit</button></li>
                                 </a>
 
@@ -110,7 +112,20 @@
                 </div>
           
                
+                @if ($article->document !=null)
+                    
                
+                <div class="card mt-4">
+                    <div class="card-header">
+                        Featured
+                    </div>
+                    <div class="card-body">
+                    <a href="{{ route('doc.download', $article->id) }}" class="btn btn-secondary"><i class="fa fa-download"></i>Fiche Technique.  {{$extension}} .{{  $sizeFile}} kB</a> 
+
+
+                    </div>
+             </div>
+              @endif
 
         </section>
 

+ 2 - 0
resources/views/backend/promotion/add.blade.php

@@ -120,6 +120,8 @@
     }
 
 </style>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.4/jquery.min.js" integrity="sha512-pumBsjNRGGqkPzKHndZMaAG+bir374sORyzM3uulLV14lN5LyykqNk8eEeUlUkB3U0M4FApyaHraT65ihJhDpQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
+
 <script
   src="https://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.15.2/js/selectize.min.js"
   integrity="sha512-IOebNkvA/HZjMM7MxL0NYeLYEalloZ8ckak+NDtOViP7oiYzG5vn6WVXyrJDiJPhl4yRdmNAG49iuLmhkUdVsQ=="

+ 1 - 1
resources/views/backend/promotion/edit.blade.php

@@ -113,7 +113,7 @@
 
 </div>
 
-@include('backend.partials.upload')
+@include('backend.partials.scriptIndex')
 <style>
     .ck.ck-editor__main>.ck-editor__editable:not(.ck-focused) {
         border-color: var(--ck-color-base-border);

+ 3 - 16
resources/views/backend/promotion/index.blade.php

@@ -64,7 +64,7 @@
                             <tr>
                                 <th scope="row">
 
-                                <a href="{{ url('promotion/'.$article->id) }}" >{{$article->titre}}</a>
+                                <a class="title" href="{{ route('promotion.show',['id'=>$article]) }}" >{{$article->titre}}</a>
 
 
                                 </th>
@@ -94,7 +94,7 @@
                                             <input data-id="{{$article->id}}" class="toggle-class" type="checkbox" data-onstyle="success" data-offstyle="danger" data-toggle="toggle" data-on="✔" data-off="⊘" {{ $article->etat ? 'checked' : '' }}>
                          
 
-                                            <Tooltip title="Voir Plus"> <a href="{{ url('promotion/'.$article->id) }}" class="btn btn-xs btn-primary"><i class="fa fa-sign-out" aria-hidden="true"></i></a></Tooltip>
+                                            <Tooltip title="Voir Plus"> <a href="{{ route('promotion.show',['id'=>$article]) }}" class="btn btn-xs btn-primary"><i class="fa fa-sign-out" aria-hidden="true"></i></a></Tooltip>
 
 
 
@@ -146,20 +146,7 @@
             });
     });
 
-    function myFunction() {
-        document.getElementById("demo").innerHTML = "Hello World";
-    }
-
-    var myModal = document.getElementById('myModal')
-    var myInput = document.getElementById('myInput')
-
-    myModal.addEventListener('shown.bs.modal', function() {
-        myInput.focus()
-    })
-    $('form input').on('change', function() {
-        $(this).closest('form').submit();
-    });
-
+   
 </script>
 <script>
     $(function() {

+ 2 - 2
resources/views/backend/promotion/show.blade.php

@@ -30,11 +30,11 @@
 
                                     </a>
                                     @if($article->produit_id == null)
-                                    <a href="{{ url('promotion/pack/'.$article->id.'/edit') }}">
+                                    <a href="{{ route('promotion.editPack',['id'=>$article]) }}">
                                         <li><button class="dropdown-item" type="button"> <i class="fa-solid fa-pen-to-square"></i> Modifier</button></li>
                                     </a>
                                     @else
-                                    <a href="{{ url('promotion/'.$article->id.'/edit') }}">
+                                    <a href="{{ route('promotion.edit',['id'=>$article]) }}">
                                         <li><button class="dropdown-item" type="button"> <i class="fa-solid fa-pen-to-square"></i> Modifier</button></li>
                                     </a>
                                     @endif

+ 2 - 14
resources/views/backend/slide/index.blade.php

@@ -59,7 +59,7 @@
                             <tr>
                                 <th scope="row">
 
-                                <a href="{{ url('slide/'.$article->id) }}" >{{$article->titre}}</a>
+                                <a class="title" href="{{ url('slide/'.$article->id) }}" >{{$article->titre}}</a>
 
 
                                 </th>
@@ -78,7 +78,7 @@
 
                                             <input data-id="{{$article->id}}" class="toggle-class" type="checkbox" data-onstyle="success" data-offstyle="danger" data-toggle="toggle" data-on="✔" data-off="⊘" {{ $article->etat ? 'checked' : '' }}>
 
-                                            <Tooltip title="Voir Plus"> <a href="{{ url('slide/'.$article->id) }}" class="btn btn-xs btn-primary"><i class="fa fa-sign-out" aria-hidden="true"></i></a></Tooltip>
+                                            <Tooltip title="Voir Plus"> <a href="{{ route('slide.show',['id'=>$article]) }}" class="btn btn-xs btn-primary"><i class="fa fa-sign-out" aria-hidden="true"></i></a></Tooltip>
 
 
 
@@ -127,19 +127,7 @@
             });
     });
 
-    function myFunction() {
-        document.getElementById("demo").innerHTML = "Hello World";
-    }
 
-    var myModal = document.getElementById('myModal')
-    var myInput = document.getElementById('myInput')
-
-    myModal.addEventListener('shown.bs.modal', function() {
-        myInput.focus()
-    })
-    $('form input').on('change', function() {
-        $(this).closest('form').submit();
-    });
 
 </script>
 <script>

+ 1 - 1
resources/views/backend/slide/show.blade.php

@@ -29,7 +29,7 @@
                                         <li><button class="dropdown-item" type="button"><i class="fas fa-eye" aria-hidden="true"></i> Visualiser</button></li>
 
                                     </a>
-                                    <a href="{{ url('slide/'.$article->id.'/edit') }}">
+                                    <a href="{{ route('slide.edit',['id'=>$article]) }}">
                                         <li><button class="dropdown-item" type="button"> <i class="fa-solid fa-pen-to-square"></i> Modifier</button></li>
                                     </a>
 

+ 17 - 10
resources/views/layouts/idara/panel.blade.php

@@ -22,11 +22,11 @@
 
             </li>
 
-            <li>
-                <div class="iocn-link">
+            <li class="mt-4">
+                <div class="iocn-link ">
                     <a href="{{route('presentations')}}">
 
-                        <i class='bx bx-book-alt'></i>
+                        <i class="fa-solid fa-circle-info"></i>
                         <span class="link_name">Presentation</span>
 
                     </a>
@@ -85,14 +85,21 @@
                     <li><a class="link_name" href="{{route('contact')}}">contact</a></li>
                 </ul>
             </li>
-            <li>
-                <a href="#">
-                    <i class='bx bx-cog'></i>
-                    <span class="link_name">Setting</span>
-                </a>
-                <ul class="sub-menu blank">
-                    <li><a class="link_name" href="#">Setting</a></li>
+            
+            <li class="profile">
+                <a  href="{{ route('logout') }}"
+                     onclick="event.preventDefault();
+                    document.getElementById('logout-form').submit();">
+                     <i class='bx bx-log-out' id="log_out" ></i>
+                     <span class="link_name">logout</span>
+
+                  </a>
+                  <ul class="sub-menu blank">
+                    <li><a class="link_name" href="#">logout</a></li>
                 </ul>
+                       <form id="logout-form" action="{{ route('logout') }}" method="POST" class="d-none">
+                              @csrf
+                           </form>
             </li>
             <li>
 

+ 24 - 22
routes/web.php

@@ -32,9 +32,9 @@ Route::get('/idara/presentations', [App\Http\Controllers\backend\PresentationCon
 Route::get('/presentation/add', [App\Http\Controllers\backend\PresentationController::class, 'Create'])->name('presentation.add');
 Route::post('/presentation', [App\Http\Controllers\backend\PresentationController::class, 'store'])->name('presentation');
 Route::get('/idara/presentation/{id}', [App\Http\Controllers\backend\PresentationController::class, 'show'])->name('presentation.show');
-Route::get('presentation/{id}/edit', [App\Http\Controllers\backend\PresentationController::class, 'edit'])->name('presentation.edit');
+Route::get('/idara/presentation/{id}/edit', [App\Http\Controllers\backend\PresentationController::class, 'edit'])->name('presentation.edit');
 Route::put('presentation/{id}', [App\Http\Controllers\backend\PresentationController::class, 'update']);
-Route::get('presentations/{id}/editImage', [App\Http\Controllers\backend\PresentationController::class, 'editImage'])->name('presentation.editImage');
+Route::get('/idarapresentations/{id}/editImage', [App\Http\Controllers\backend\PresentationController::class, 'editImage'])->name('presentation.editImage');
 Route::put('presentationsImage/{id}', [App\Http\Controllers\backend\PresentationController::class, 'updateImage']);
 Route::delete("deleteImageP/{id}", [App\Http\Controllers\backend\PresentationController::class, "deleteImage"])->name("delete");
 
@@ -42,7 +42,7 @@ Route::get('changeStatusPresentation',  [App\Http\Controllers\backend\Presentati
 
 Route::delete("presentations/{id}", [App\Http\Controllers\backend\PresentationController::class, "destroyP"]);
 
-Route::get('presentations/{id}/editDetails', [App\Http\Controllers\backend\PresentationController::class, 'editDetails'])->name('presentation.editDetails');
+Route::get('/idara/presentations/{id}/editDetails', [App\Http\Controllers\backend\PresentationController::class, 'editDetails'])->name('presentation.editDetails');
 Route::put('presentationsDetails/{id}', [App\Http\Controllers\backend\PresentationController::class, 'updateDetails']);
 
 Route::get('presentations/{id}/editVideo', [App\Http\Controllers\backend\PresentationController::class, 'editVideo'])->name('presentation.editVideo');
@@ -54,12 +54,12 @@ Route::delete("/file-delete-presentation", [App\Http\Controllers\backend\Present
 // Route::resource('/test', PresentationController::class);
 
 //Slide backend
-Route::get('/slides', [App\Http\Controllers\backend\SlideController::class, 'Index'])->name('slides');
+Route::get('/idara/slides', [App\Http\Controllers\backend\SlideController::class, 'Index'])->name('slides');
 
-Route::get('/slide/add', [App\Http\Controllers\backend\SlideController::class, 'Create'])->name('slide.add');
+Route::get('/idara/slide/add', [App\Http\Controllers\backend\SlideController::class, 'Create'])->name('slide.add');
 Route::post('/slide', [App\Http\Controllers\backend\SlideController::class, 'store'])->name('slide');
-Route::get('slide/{id}', [App\Http\Controllers\backend\SlideController::class, 'show']);
-Route::get('slide/{id}/edit', [App\Http\Controllers\backend\SlideController::class, 'edit']);
+Route::get('/idara/slide/{id}', [App\Http\Controllers\backend\SlideController::class, 'show'])->name('slide.show');
+Route::get('/idara/slide/{id}/edit', [App\Http\Controllers\backend\SlideController::class, 'edit'])->name('slide.edit');
 Route::put('slide/{id}', [App\Http\Controllers\backend\SlideController::class, 'update']);
 Route::delete("slide/{id}", [App\Http\Controllers\backend\SlideController::class, "destroy"]);
 Route::get('changeStatusSlide',  [App\Http\Controllers\backend\SlideController::class, 'changeStatus']);
@@ -67,14 +67,14 @@ Route::POST('/file-upload-slide', [App\Http\Controllers\backend\SlideController:
 Route::delete("/file-delete-slide", [App\Http\Controllers\backend\SlideController::class, "deleteUpload"]);
 
 //category backend
-Route::get('/categories', [App\Http\Controllers\backend\CategorieController::class, 'Index'])->name('categories');
+Route::get('/idara/categories', [App\Http\Controllers\backend\CategorieController::class, 'Index'])->name('categories');
 
-Route::get('/categorie/add', [App\Http\Controllers\backend\CategorieController::class, 'Create'])->name('categorie.add');
+Route::get('/idara/categorie/add', [App\Http\Controllers\backend\CategorieController::class, 'Create'])->name('categorie.add');
 Route::post('/categorie', [App\Http\Controllers\backend\CategorieController::class, 'store'])->name('/categorie');
 
-Route::get('categorie/{id}', [App\Http\Controllers\backend\CategorieController::class, 'show']);
+Route::get('/idara/categorie/{id}', [App\Http\Controllers\backend\CategorieController::class, 'show'])->name('category.show');
 
-Route::get('categorie/{id}/edit', [App\Http\Controllers\backend\CategorieController::class, 'edit']);
+Route::get('/idara/categorie/{id}/edit', [App\Http\Controllers\backend\CategorieController::class, 'edit'])->name('category.edit');
 Route::put('categorie/{id}', [App\Http\Controllers\backend\CategorieController::class, 'update']);
 Route::delete("categorie/{id}", [App\Http\Controllers\backend\CategorieController::class, "destroy"]);
 Route::get('changeStatusCategory',  [App\Http\Controllers\backend\CategorieController::class, 'changeStatus']);
@@ -83,15 +83,15 @@ Route::delete("/file-delete-category", [App\Http\Controllers\backend\CategorieCo
 //produit categorie
 
 
-Route::get('/produits', [App\Http\Controllers\backend\ProduitController::class, 'Index'])->name('produits');
+Route::get('/idara/produits', [App\Http\Controllers\backend\ProduitController::class, 'Index'])->name('produits');
 
 Route::get('/produit/add', [App\Http\Controllers\backend\ProduitController::class, 'Create'])->name('produit.add');
 Route::post('/produit', [App\Http\Controllers\backend\ProduitController::class, 'store'])->name('/produit');
 
-Route::get('produit/{id}', [App\Http\Controllers\backend\ProduitController::class, 'show']);
-Route::get('produit/{id}/edit', [App\Http\Controllers\backend\ProduitController::class, 'edit']);
+Route::get('/idara/produit/{id}', [App\Http\Controllers\backend\ProduitController::class, 'show'])->name('produit.show');
+Route::get('/idara/produit/{id}/edit', [App\Http\Controllers\backend\ProduitController::class, 'edit'])->name('produit.edit');
 Route::put('produit/{id}', [App\Http\Controllers\backend\ProduitController::class, 'update']);
-Route::get('produit/{id}/diapo', [App\Http\Controllers\backend\ProduitController::class, 'diapo']);
+Route::get('/idara/produit/{id}/diapo', [App\Http\Controllers\backend\ProduitController::class, 'diapo'])->name('produit.editDiapo');
 Route::put('produitDiapo/{id}', [App\Http\Controllers\backend\ProduitController::class, 'updateDiapo']);
 Route::delete("deleteMedia/{id}", [App\Http\Controllers\backend\ProduitController::class, "destroyMedia"])->name("delete");
 Route::delete("produit/{id}", [App\Http\Controllers\backend\ProduitController::class, "destroyProduit"]);
@@ -103,7 +103,7 @@ Route::delete("/file-delete", [App\Http\Controllers\backend\ProduitController::c
 Route::get('changeStatusProduit',  [App\Http\Controllers\backend\ProduitController::class, 'changeStatus']);
 Route::get('changeStatusProduitHome',  [App\Http\Controllers\backend\ProduitController::class, 'homeStatus']);
 
-Route::get('produit/{id}/editDoc', [App\Http\Controllers\backend\ProduitController::class, 'editDoc']);
+Route::get('/idara/produit/{id}/editDoc', [App\Http\Controllers\backend\ProduitController::class, 'editDoc'])->name('produit.editDoc');
 Route::get('Doc/{produit}/download', [App\Http\Controllers\backend\ProduitController::class, 'downloadDoc'])->name('doc.download');
 Route::get('Doc/{produit}/size', [App\Http\Controllers\backend\ProduitController::class, 'sizeDoc'])->name('doc.size');
 
@@ -122,18 +122,18 @@ Route::delete("/doc-delete", [App\Http\Controllers\backend\ProduitController::cl
 
 //promotion routes
 
-Route::get('/promotions', [App\Http\Controllers\backend\PromotionController::class, 'Index'])->name('promotions');
+Route::get('/idara/promotions', [App\Http\Controllers\backend\PromotionController::class, 'Index'])->name('promotions');
 
-Route::get('/promotion/add', [App\Http\Controllers\backend\PromotionController::class, 'Create'])->name('promotion.add');
-Route::get('/promotion/pack/add', [App\Http\Controllers\backend\PromotionController::class, 'CreatePack'])->name('promotionPack.add');
+Route::get('/idara/promotion/add', [App\Http\Controllers\backend\PromotionController::class, 'Create'])->name('promotion.add');
+Route::get('/idara/promotion/pack/add', [App\Http\Controllers\backend\PromotionController::class, 'CreatePack'])->name('promotionPack.add');
 Route::post('/promotion/produit', [App\Http\Controllers\backend\PromotionController::class, 'store'])->name('/promotion/produit');
 Route::post('/promotion/produitPack', [App\Http\Controllers\backend\PromotionController::class, 'storePack'])->name('/promotion/produit');
 
-Route::get('promotion/{id}', [App\Http\Controllers\backend\PromotionController::class, 'show']);
+Route::get('/idara/promotion/{id}', [App\Http\Controllers\backend\PromotionController::class, 'show'])->name('promotion.show');
 
-Route::get('promotion/{id}/edit', [App\Http\Controllers\backend\PromotionController::class, 'edit']);
+Route::get('promotion/{id}/edit', [App\Http\Controllers\backend\PromotionController::class, 'edit'])->name('promotion.edit');
 Route::put('promotion/{id}', [App\Http\Controllers\backend\PromotionController::class, 'update']);
-Route::get('promotion/pack/{id}/edit', [App\Http\Controllers\backend\PromotionController::class, 'editPack']);
+Route::get('promotion/pack/{id}/edit', [App\Http\Controllers\backend\PromotionController::class, 'editPack'])->name('promotion.editPack');
 Route::put('promotion/pack/{id}', [App\Http\Controllers\backend\PromotionController::class, 'updatePack']);
 
 
@@ -162,3 +162,5 @@ Route::get('send', [App\Http\Controllers\backend\NotifyController::class, 'Index
 Auth::routes();
 
 Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
+
+Route::get('/send-notification', [backend\NotificationController::class, 'sendPromotionNotification']);