Besma 2 년 전
부모
커밋
b5791c9442

+ 1 - 1
app/Http/Controllers/backend/PresentationController.php

@@ -106,7 +106,7 @@ class PresentationController extends Controller
            
             "image" => $tmp_file->folder . '/' . $tmp_file->file
         ]);
-        Storage::deleteDirectory('diapo/tmp/'.$tmp_file->folder);
+        Storage::deleteDirectory('image/tmp/'.$tmp_file->folder);
                 $tmp_file->delete();
        }
      

+ 41 - 10
app/Http/Controllers/backend/ProduitController.php

@@ -6,6 +6,8 @@ use Illuminate\Http\Request;
 use App\Models\Produit;
 use App\Models\Categorie;
 use App\Models\Media;
+use App\Models\CategorieProduit;
+
 use App\Models\temporaryFile;
 
 
@@ -14,8 +16,12 @@ use Illuminate\Support\Facades\Storage;
 class ProduitController extends Controller
 {
     public function Index(){
-        $articles = Produit::with('categorie')->get();
 
+        $articles = Produit::get();
+
+
+    ;
+         
 
         return view("backend.produit.index",compact('articles'));
      }
@@ -35,14 +41,17 @@ class ProduitController extends Controller
         if($tmp_file){
             Storage::copy('image/tmp/'.$tmp_file->folder.'/'.$tmp_file->file,'image/'.$tmp_file->folder.'/'.$tmp_file->file);
                
-           Produit::create( 
+         $article =  Produit::create( 
                [
                    'nom' => $request->nom,
-                   'category_id' => $request->input('categorie'),
+                //    'category_id' => $request->input('categorie'),
                    'description' => $request->description,
                    'image' => $tmp_file->folder . '/' . $tmp_file->file,
                    ],
                );
+
+               $article->categories()->sync((array)$request->input('categories'));
+
                Storage::deleteDirectory('diapo/tmp/'.$tmp_file->folder);
                $tmp_file->delete();
            
@@ -58,9 +67,15 @@ class ProduitController extends Controller
     public function show($id){
         $article=Produit::find($id);
         $diapos=Media::where('produit_id','=',$article->id)->get();
+        
+        
+        $size = Storage::size('document/'.$article->document); 
+        $file_size = $size * 0.0009765625; 
+       $sizeFile = number_format($file_size,2);
 
-         
-        return view('backend.produit.show',['article'=>$article],compact('diapos'));
+       $infoPath = pathinfo(public_path('document/'.$article->document));
+       $extension = $infoPath['extension'];
+        return view('backend.produit.show',['article'=>$article],compact('diapos','sizeFile','extension'));
     }
 
 
@@ -76,10 +91,13 @@ class ProduitController extends Controller
        
         $article = Produit::find($id);
         $article->nom = $request->input('nom');
-        $article->category_id = $request->input('categorie');
+     
 
         $article->description = $request->input('description');
 
+        $article->categories()->sync((array)$request->input('categories'));
+
+
         $tmp_file = temporaryFile::where('folder',$request->image)->first();
 
         if($tmp_file){
@@ -296,12 +314,25 @@ if($tmp_file){
  return response('');
 }
 }
-public function downloadDoc($id)
+public function downloadDoc(Produit $produit)
 {   
     
-    $article = Produit::where('document', $id)->firstOrFail();
-    return Storage::download('document/. $article->document');
-  
+   
+    return  Storage::download('document/'.$produit->document);
+     
+     
+    
+}
+public function sizeDoc(Produit $produit)
+{   
+    
+   
+    $size = Storage::size('document/'.$produit->document); 
+    return  view( compact('size'));
+     
+     
     
 }
+
+
 }

+ 30 - 0
app/Http/Requests/Produitrequest.php

@@ -0,0 +1,30 @@
+<?php
+
+namespace App\Http\Requests;
+
+use Illuminate\Foundation\Http\FormRequest;
+
+class Produitrequest extends FormRequest
+{
+    /**
+     * Determine if the user is authorized to make this request.
+     *
+     * @return bool
+     */
+    public function authorize()
+    {
+        return true;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array<string, mixed>
+     */
+    public function rules()
+    {
+        return [
+            //
+        ];
+    }
+}

+ 4 - 0
app/Models/Categorie.php

@@ -13,5 +13,9 @@ class Categorie extends Model
 
     protected $fillable = ['nom', 'image'];
 
+    public function produits()
+    {
+     return $this->belongsToMany(Produit::class,'categorie_produit');                 
+    }
    
 }

+ 26 - 0
app/Models/CategorieProduit.php

@@ -0,0 +1,26 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+
+class CategorieProduit extends Model
+{
+    use HasFactory;
+    protected $table = 'categorie_produit';
+    protected $guarded = [];
+
+    public function categorie()
+    {
+
+        return $this->belongsTo(Categorie::class,'categorie_id','id');
+    }
+
+    public function produit()
+    {
+       
+
+        return $this->belongsTo(Produit::class,'produit_id','id');
+    }
+}

+ 8 - 5
app/Models/Produit.php

@@ -10,12 +10,10 @@ class Produit extends Model
 {
     use HasFactory, SoftDeletes;
     protected $dates = ['deleted_at'];
-    protected $fillable = ['nom','document', 'category_id','description','image'];
+    
+    protected $fillable = ['nom','document','description','image'];
 
-    public function categorie()
-    {
-        return $this->belongsTo(Categorie::class,'category_id','id');
-    }
+    
     public function diapos(){
         return $this->hasMany(Media::class);    
     }
@@ -28,4 +26,9 @@ class Produit extends Model
     public function remove_categorie($category_id){
         $this->categorie()->detach($category_id);         
     }
+    
+    public function categories()
+    {
+     return $this->belongsToMany(Categorie::class,'categorie_produit');                 
+    }
 }

+ 37 - 0
database/migrations/2023_03_15_100638_create_categorie_produit_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('categorie_produit', function (Blueprint $table) {
+            $table->id();
+           
+            $table->unsignedBigInteger('produit_id')->unsigned();
+           
+
+            $table->unsignedBigInteger('categorie_id')->unsigned()->nullable();
+            $table->foreign('categorie_id')->references('id')->on('categories')->onDelete('cascade');
+                $table->foreign('produit_id')->references('id')->on('produits')->onDelete('cascade');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('categorie_produits');
+    }
+};

+ 21 - 5
resources/views/backend/produit/add.blade.php

@@ -3,7 +3,13 @@
 
 @section('content')
 
-
+<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"
+/>
 <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" />
 
@@ -58,16 +64,16 @@
 
                         <label class="" for="exampleFormControlInput1"><strong>Categorie</strong> :</label>
                         <br>
-                        <select onchange="optionCheck()" class="form-control" name="categorie" id="categorie" class="form-control categorie" aria-describedby="validationServer04Feedback" style=" margin-bottom: 40px;" >
+                        <select multiple onchange="optionCheck()" class="form-control" name="categories[]" id="categories" class=" select seletizeData categorie"  aria-describedby="validationServer04Feedback" style=" margin-bottom: 40px;" >
 
 
-                            <option>Vueillez selectionner une categorie</option>
+                            <!-- <option>Vueillez selectionner une categorie</option> -->
 
 
                             @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
@@ -109,7 +115,17 @@
     }
 
 </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();
+  });
+</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>

+ 7 - 3
resources/views/backend/produit/edit.blade.php

@@ -2,6 +2,7 @@
 
 
 @section('content')
+
 <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" />
 
@@ -27,10 +28,13 @@
 
                 <div class="form-group mt-4">
                     <label for="exampleFormControlInput1">Categorie</label>
-                <select onchange="optionCheck()" class="form-control" name="categorie" id="categorie" class="categorie" aria-describedby="validationServer04Feedback" style=" margin-bottom: 40px;" required>
+                <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 }}">{{ $article->categorie->nom }}</option>
+                        <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 ($categories as $categorie)
@@ -91,7 +95,7 @@
 </script>
 
 
-</div>
+    </div>
 </div>
 
 <script src="https://unpkg.com/filepond@4.30.4/dist/filepond.min.js"></script>

+ 6 - 4
resources/views/backend/produit/index.blade.php

@@ -31,7 +31,8 @@
             </div>
         </div>
     </section>
-    
+
+
 
     <div class="card">
             <div class="card-header">
@@ -64,9 +65,10 @@
 
                                 </th>
                                 <th scope="row">
-
-                                     {{$article->categorie->nom}}
-
+                                   
+                                @foreach ($article->categories as $singleTag)
+                                <span class="label label-info label-many btn btn-secondary">{{ $singleTag->nom }}</span>
+                            @endforeach
                                 </th>
                                 <th scope="row">
 

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

@@ -61,8 +61,7 @@
                 <div class="card-body">
                     <div><i class="fa-solid fa-calendar-days"></i> <strong>Date de mise à jour : </strong> {{$article->created_at}}</div>
 
-                    <div class="mt-3"><i class="fa-solid fa-list-ul"></i> <strong>Categorie : </strong> {{ $article->categorie->nom}}</div>
-                    <a href="{{ route('doc.download', $article->id) }}">{{ $article->document }}</a> 
+                   
                     <div class="mt-3"><i class="fa-solid fa-circle-info"></i> <strong>Descritpion : </strong> {!! html_entity_decode ($article->description)!!}</div>
 
                     <div class=" mt-3 showImage">
@@ -110,7 +109,16 @@
                   
                 </div>
           
-          
+                <div class="card">
+                            <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>
 
         </section>
 

+ 3 - 1
routes/web.php

@@ -104,7 +104,9 @@ Route::delete("/file-delete", [App\Http\Controllers\backend\ProduitController::c
 Route::get('changeStatusProduit',  [App\Http\Controllers\backend\ProduitController::class, 'changeStatus']);
 
 Route::get('produit/{id}/editDoc', [App\Http\Controllers\backend\ProduitController::class, 'editDoc']);
-Route::get('Doc/{id}/download', [App\Http\Controllers\backend\ProduitController::class, 'downloadDoc'])->name('doc.download');
+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');
+
 
 Route::put('produitDoc/{id}', [App\Http\Controllers\backend\ProduitController::class, 'updateDoc']);