Besma před 2 roky
rodič
revize
09ab7dc9a5

+ 33 - 0
app/Http/Controllers/backend/MediaController.php

@@ -0,0 +1,33 @@
+<?php
+
+namespace App\Http\Controllers\backend;
+use App\Http\Controllers\Controller;
+use Illuminate\Http\Request;
+use App\Models\Media;
+
+
+class MediaController extends Controller
+{
+    public function create(){
+        
+    
+        
+
+        return view('backend.produit.extension.diapo');
+       }
+
+    
+       public function store( Request $request){
+   
+        $article= new Media();
+        
+        
+        if($request->hasFile('diapo')){
+            $article->image = $request->image->store('image');
+           }
+           
+           $article->save();
+           return redirect('produits');
+   
+    }
+}

+ 35 - 20
app/Http/Controllers/backend/ProduitController.php

@@ -5,6 +5,7 @@ use App\Http\Controllers\Controller;
 use Illuminate\Http\Request;
 use App\Models\Produit;
 use App\Models\Categorie;
+use App\Models\Media;
 
 use Illuminate\Support\Facades\Storage;
 
@@ -45,8 +46,10 @@ class ProduitController extends Controller
     
     public function show($id){
         $article=Produit::find($id);
+        $diapos=Media::where('produit_id','=',$article->id)->get();
 
-        return view('backend.produit.show',['article'=>$article]);
+         
+        return view('backend.produit.show',['article'=>$article],compact('diapos'));
     }
 
 
@@ -87,30 +90,42 @@ class ProduitController extends Controller
     } 
 
     public function updateDiapo(Request $request, $id) {
-
-    //     request()->validate([
-    //         'diapo' => 'required|image|mimes:jpeg,png,jpg,gif,svg',
-    //    ]);
         
-       
     
-        $article = [];
-        if($request->hasfile('diapo'))
-         {
-            foreach($request->file('diapo') as $article)
-            {
-                $name=$article->getClientOriginalName();
-                $article->move(public_path().'storage/files/', $name);  
-                $data[] = $name;    
-            }
-         }
+        $diapo = [];
+
+        $article = Produit::find($id);
+         
+       
   
-         $article= Produit::find($id);
-         $article->diapo=json_encode($data);
-         $article->diapo = $article;
-         $article->save();
+          if($files=$request->file('diapo')){
+            foreach($files as $file){
+                $name=$file->hashName();
+                $file->move('storage/diapos',$name);
+                $diapo[]=$name;
+                Media::create(array_merge(
+                [
+                    'produit_id' => $article -> id,
+                    'diapo' => ($name),
+                    ],
+                ));
+            
+
+            }
         return back()->with('success', 'Image Upload successfully');
 
     }
+    $article->save();
+
+}
+
+public function destroyMedia(Request $request, $id){
+
+    $diapo = Media::find($id);
+    $diapo->delete();
+
+    return back();
+}
+
     
 }

+ 2 - 0
app/Models/Categorie.php

@@ -10,4 +10,6 @@ class Categorie extends Model
 {
     use HasFactory, SoftDeletes;
     protected $dates = ['deleted_at'];
+
+   
 }

+ 19 - 0
app/Models/Media.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\SoftDeletes;
+
+class Media extends Model
+{
+    use HasFactory, SoftDeletes;
+    protected $dates = ['deleted_at'];
+    protected $table = 'medias';
+    protected $fillable = ['diapo', 'produit_id'];
+
+    public function produit(){
+        return $this->belongsTo(Produit::class);
+    }
+}

+ 10 - 1
app/Models/Produit.php

@@ -4,16 +4,25 @@ namespace App\Models;
 
 use Illuminate\Database\Eloquent\Factories\HasFactory;
 use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\SoftDeletes;
 
 class Produit extends Model
 {
-    use HasFactory;
+    use HasFactory, SoftDeletes;
+    protected $dates = ['deleted_at'];
 
     public function categorie()
     {
         return $this->belongsTo(Categorie::class,'category_id','id');
     }
+    public function diapos(){
+        return $this->hasMany(Media::class);    
+    }
 
+    public function diapo()
+    {
+        return $this->hasMany(Media::class,'produit_id','id');
+    }
    
     
 }

+ 2 - 5
config/filesystems.php

@@ -52,10 +52,7 @@ return [
             'endpoint' => env('AWS_ENDPOINT'),
             'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
         ],
-        'public_uploads' => [
-            'driver' => 'local',
-            'root'   => public_path() . '/uploads',
-        ],
+      
 
     ],
 
@@ -72,7 +69,7 @@ return [
 
     'links' => [
         public_path('storage') => storage_path('app/public'),
-        // public_path('images') => storage_path('app/images'),
+      
     ],
 
 ];

+ 37 - 0
database/migrations/2023_03_09_132154_create_medias_table.php

@@ -0,0 +1,37 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('medias', function (Blueprint $table) {
+            $table->id();
+            $table->string('diapo')->nullable();
+            $table->unsignedBigInteger('produit_id')->nullable();  
+            $table->datetime('deleted_at')->nullable();
+            $table->timestamps();
+           
+
+            $table->foreign('produit_id')->references('id')->on('produits')->onDelete('cascade');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('medias');
+    }
+};

binární
public/diapos/FeqcWs1pNC589N6mn6WqKD02HTm6hAKDLko7uGel.jpg


binární
public/diapos/IRsz3GlCxtedfnOpXYCkGrgDqL4nlpyvZtI9CObV.jpg


binární
public/diapos/UyO99moQGIwKlrzXjqw5dYsYHERwT5KqZAufaH14.jpg


binární
public/diapos/e0lVl2U88EiWaCijLTpiADGLQKwG4LVArJP7aVhR.jpg


binární
public/diapos/fvymmH6QIbBDYUp0JTrnhBjZ39BtGpzYkHJQDiLa.jpg


binární
public/diapos/tbEkyB23YoMVxBbBbQYmMq0VffJr1FlLtoZSdZTd.jpg


+ 1 - 1
resources/views/backend/produit/add.blade.php

@@ -49,7 +49,7 @@
 
                         <label class="" for="exampleFormControlInput1"><strong>Categorie</strong> :</label>
                         <br>
-                        <select onchange="optionCheck()" class="form-control" name="categorie" id="categorie" class="categorie" aria-describedby="validationServer04Feedback" style=" margin-bottom: 40px;" required>
+                        <select onchange="optionCheck()" class="form-control" name="categorie" id="categorie" class="form-control categorie" aria-describedby="validationServer04Feedback" style=" margin-bottom: 40px;" >
 
 
                             <option>Vueillez selectionner une categorie</option>

+ 1 - 1
resources/views/backend/produit/extension/diapo.blade.php

@@ -53,7 +53,7 @@
 
                     @csrf
                     <div class="input-group control-group increment" >
-                            <input type="file" name="diapo[]" class="form-control"  multiple="true">
+                            <input type="file" name="diapo[]" class="form-control"  multiple>
                     
                     </div>
                     <img id="preview_img" src="https://w3adda.com/wp-content/uploads/2019/09/No_Image-128.png" class="mt-4" width="200" height="150" />

+ 26 - 13
resources/views/backend/produit/show.blade.php

@@ -78,26 +78,39 @@
         </section>
         <section>
 
-            @if(session('success'))
-            <div class="alert alert-success">
-                {{ session('success') }}
-            </div>
-            @endif
-            @if(empty($article->image))
-
-            @else
+            
             <div class="card mt-4">
                 <h5 class="card-header">Image</h5>
                 <div class="card-body">
 
-                    <div class="showImage">
+                  
 
-                        <img src="{{ asset('storage/'.$article->image) }}" alt="description of myimage">
+                       <div class="row">
+                     
+                         @foreach($diapos as $diapo)
+                         <div class="col-md-3 mt-4" style="margin-left:74px">
+                         <form action="{{url('deleteMedia/'.$diapo->id)}}" method="post">
+
+                                @csrf
+                                @method('DELETE')
+                                <div>
+                            <img src="{{ asset('storage/diapos/'.$diapo->diapo) }}" alt="description of myimage" style="    height: 200px;">
+                            </div>
+                            <div>
+                                <input type="hidden" name="id" value="{{$diapo->id}}" />
+                               <button type="submit" class="btn btn-sm btn-secondary ml-2"><i class="fa-solid fa-x"></i></button>
+                               </div>
+                         </form>
+                         </div>
+                            @endforeach
                         
-                    </div>
+                      
                 </div>
-            </div>
-            @endif
+                </div>
+                  
+                </div>
+          
+          
 
         </section>
 

+ 254 - 0
resources/views/header.blade.php

@@ -0,0 +1,254 @@
+{{--
+    View    : Header Frontend Partial
+    Path    : frontend.layouts.header
+
+    $list_categories_activities //=> liste des categories activites
+--}}
+
+
+
+<!doctype html>
+<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
+<head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+
+    <!-- CSRF Token -->
+    <meta name="csrf-token" content="{{ csrf_token() }}">
+
+    <link rel="stylesheet" href=" {{asset ('frontend/css/style.css')}}">
+
+    <link rel="stylesheet" href=" {{asset ('frontend/css/front.css')}}">
+
+
+    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.min.js" integrity="sha384-cVKIPhGWiC2Al4u+LWgxfKTRIcfu0JTxR+EQDz/bgldoEyl4H0zUF0QKbrJ0EcQF" crossorigin="anonymous"></script>
+
+    <link rel="dns-prefetch" href="//fonts.gstatic.com">
+    <link href="https://fonts.bunny.net/css?family=Nunito" rel="stylesheet">
+    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
+
+
+</head>
+<body>
+
+
+    <!--Main Navigation-->
+    <header>
+        <!-- Jumbotron -->
+        <div class="nav-head p-3 text-center bg-white border-bottom">
+            <div class="container">
+                <div class="row">
+                    <!-- Left elements -->
+                    <div class=" logo col-md-3 d-flex   mb-3 mb-md-0">
+
+                        <a href="{{ LaravelLocalization::getURLFromRouteNameTranslated(app()->getLocale(), 'routes.homepage') }}" class="ulockd-main-logo"><img src="{{asset('frontend/imagesAll/logo.jpg')}}" height=35 alt="logo Tasshil"></a>
+
+                    </div>
+                    <!-- Left elements -->
+
+                    <!-- Center elements -->
+                    <div class="col-md-6">
+                        <div class=" title-nav d-flex input-group w-auto justify-content-center pt-4 my-auto mb-3 mb-md-0">
+
+                            <h2 style="font-size: 27px;">{{ trans('menu.header')}}</h2>
+
+                        </div>
+                        <div class=" title-nav d-flex input-group w-auto justify-content-center my-auto mb-3 mb-md-0" style="margin-right: 23px;">
+
+                            @if("ar" == app()->getLocale())
+                            <img style="
+    padding-top: 10px;
+" src="{{asset('frontend/imagesAll/headerTwo-Ar.png')}}">
+
+                            @else
+                            <img style="
+    padding-top: 10px;
+" src="{{asset('frontend/imagesAll/header.png')}}">
+
+
+                            @endif
+
+
+                        </div>
+
+                    </div>
+                </div>
+            </div>
+        </div>
+        <!-- Jumbotron -->
+        <!-- Navbar -->
+
+        <nav class="navbar navbar-expand-lg navbar-light bg-white">
+            <!-- Container wrapper -->
+            <div class="container justify-content-center justify-content-md-between">
+                <!-- Left links -->
+
+                <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
+                    <span class="navbar-toggler-icon"></span>
+                </button>
+                <div class="collapse navbar-collapse" id="navbarNavDropdown">
+                    <ul class="navbar-nav">
+
+                        @if (!empty($data))
+                        @if ('ar' == app()->getLocale())
+                        <li class="language nav-item"><a href="{{ $data['uris']['fr']}}" class="nav-link">Français</a></li>
+                        {{-- <li class="language nav-item"><a href="#" class="nav-link">Français</a></li> --}}
+
+
+
+                        @endif
+
+                        @if ('fr' == app()->getLocale())
+                        <li class="language nav-item"><a href="{{ $data['uris']['ar']}}" class="nav-link">عربي</a></li>
+                        {{-- <li class="language nav-item"><a href="#" class="nav-link">عربي</a></li> --}}
+
+
+
+                        @endif
+                        @endif
+
+
+                        <li class="nav-item">
+
+                            <a class="nav-link {{ (strpos(Route::currentRouteName(), 'homepage') === 0) ? 'active' : '' }}" href="{{ LaravelLocalization::getURLFromRouteNameTranslated(app()->getLocale(), 'routes.homepage') }}">{{ trans('menu.homepage') }}</a>
+
+                        </li>
+
+
+                        <li class="nav-item">
+                            <a class="nav-link {{ (strpos(Route::currentRouteName(), 'areas-intervention') === 0) ? 'active' : '' }}" href="{{ LaravelLocalization::getURLFromRouteNameTranslated(app()->getLocale(), 'routes.areas-intervention') }}">{{ trans('menu.areas-intervention') }}</a>
+
+
+                        </li>
+                        <li class="nav-item dropdown">
+
+                          <a href="#"  class="nav-link dropdown-toggle" data-toggle="dropdown">{{ trans('menu.activities') }}</a>
+                        
+                                <ul class="dropdown-menu" aria-labelledby="navbarDropdown">
+                                @foreach ($list_categories_activities as $slug => $category)
+                               
+                                  @if (is_array($category))
+                                 <li class="dropdown-submenu nav-item">
+                              <a target='_blank'data-toggle="dropdown" class="dropdown-toggle dropdown-item"  href="{{ LaravelLocalization::getURLFromRouteNameTranslated(app()->getLocale(), 'routes.activities') . '?category=' . $slug }}">{{ $slug }}</a> 
+
+                                    <ul class="dropdown-menu">
+                                       @foreach ($category as $subCategorySlug => $subCategoryTitle)
+
+                                    <li><a class="dropdown-item"  target='_blank' href="{{ LaravelLocalization::getURLFromRouteNameTranslated(app()->getLocale(), 'routes.activities') . '?category=' . $subCategorySlug }}">{{ $subCategoryTitle }}</a></li>
+
+                                       @endforeach
+                                         
+                                   </ul> 
+                                 </li>
+
+                                   @else
+                                    <li><a class="dropdown-item" target='_blank' href="{{ LaravelLocalization::getURLFromRouteNameTranslated(app()->getLocale(), 'routes.activities') . '?category=' . $slug }}">{{ $category }}</a></li>  
+                            
+                               
+                              
+                                        @endif
+
+                                  @endforeach
+                                 </ul>
+                 
+
+                     </li>
+
+
+                    <li class="nav-item">
+
+                        <a class="nav-link {{ (strpos(Route::currentRouteName(), 'news') === 0) ? 'active' : '' }}" href="{{ LaravelLocalization::getURLFromRouteNameTranslated(app()->getLocale(), 'routes.news') }}">{{ trans('menu.news') }}</a>
+
+                    </li>
+
+                    <li class="nav-item dropdown">
+
+                        <a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown">{{ trans('menu.media') }}</a>
+
+                        <ul class="dropdown-menu">
+
+                            <li><a class="dropdown-item" style="font-size: 14px;" {{ (strpos(Route::currentRouteName(), 'press-releases') === 0) ? 'active' : '' }}" href="#">{{ trans('menu.press-releases') }}</a></li>
+
+                           
+
+                    <li><a class="dropdown-item" style="font-size: 14px;" {{ (strpos(Route::currentRouteName(), 'press-review') === 0) ? 'active' : '' }}" href="#">{{ trans('menu.press-review') }}</a>
+
+
+                    </li>
+
+
+
+                  
+                    <li>
+                        <a class="dropdown-item" style="font-size: 14px;" {{ (strpos(Route::currentRouteName(), 'photo-gallery') === 0) ? 'active' : '' }}" href="#">{{ trans('menu.photo-gallery') }}</a>
+
+                    </li>
+
+
+                    <li><a class="dropdown-item" style="font-size: 14px;" {{ (strpos(Route::currentRouteName(), 'video-library') === 0) ? 'active' : '' }}" href="#">{{ trans('menu.video-library') }}</a></li>
+
+                    {{-- <li><a style="font-size: 14px;" {{ (strpos(Route::currentRouteName(), 'video-library') === 0) ? 'active' : '' }}" href="{{ LaravelLocalization::getURLFromRouteNameTranslated(app()->getLocale(), 'routes.video-library') }}">{{ trans('menu.video-library') }}</a></li> --}}
+
+
+
+                    </ul>
+                    </li>
+
+
+
+
+                    <li class="nav-item">
+
+                        <a class="nav-link {{ (strpos(Route::currentRouteName(), 'diary') === 0) ? 'active' : '' }}" href="#">{{ trans('menu.diary') }}</a>
+                        {{-- <a class="nav-link {{ (strpos(Route::currentRouteName(), 'diary') === 0) ? 'active' : '' }}" href="" {{ LaravelLocalization::getURLFromRouteNameTranslated(app()->getLocale(), 'routes.diary') }}"">{{ trans('menu.diary') }}</a> --}}
+
+
+                    </li>
+                    <li class="nav-item">
+
+                        <a class="nav-link {{ (strpos(Route::currentRouteName(), 'contact') === 0) ? 'active' : '' }}" href="{{ LaravelLocalization::getURLFromRouteNameTranslated(app()->getLocale(), 'routes.contact') }}">{{ trans('menu.contact') }}</a>
+
+                    </li>
+
+
+
+                    </ul>
+                </div>
+
+            </div>
+            <!-- Container wrapper -->
+        </nav>
+
+
+    </header>
+
+    <!-- Footer -->
+
+
+
+    <!-- Footer -->
+
+</body>
+</html>
+<style>
+    .navbar-nav li:hover>ul.dropdown-menu {
+        display: block;
+    }
+
+    .dropdown-submenu {
+        position: relative;
+    }
+
+    .dropdown-submenu>.dropdown-menu {
+        top: 0;
+        left: 100%;
+        margin-top: -6px;
+    }
+
+    /* rotate caret on hover */
+    .dropdown-menu>li>a:hover:after {
+        text-decoration: underline;
+        transform: rotate(-90deg);
+    }
+
+</style>

+ 3 - 1
routes/web.php

@@ -88,7 +88,9 @@ Route::get('produit/{id}/edit', [App\Http\Controllers\backend\ProduitController:
 Route::put('produit/{id}', [App\Http\Controllers\backend\ProduitController::class, 'update']);
 Route::get('produit/{id}/diapo', [App\Http\Controllers\backend\ProduitController::class, 'diapo']);
 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, "destroy"]);
+// Route::get('changeStatusProduit',  [App\Http\Controllers\backend\ProduitController::class, 'changeStatus']);
 
  Route::get('/test', [App\Http\Controllers\frontend\HomeController::class, 'index']);
 //  Route::get('/test', [App\Http\Controllers\frontend\HomeController::class, 'index']);