added attachment relations

added deattach
pull/44/head
A1Gard 5 months ago
parent 56acb26137
commit 84ad1c1584

@ -115,6 +115,16 @@ class AttachmentController extends XController
{ {
return parent::delete($item); return parent::delete($item);
} }
public function deattach(Attachment $item)
{
$item->attachable_id = null;
$item->attachable_type = null;
$item->save();
logAdmin(__METHOD__,__CLASS__,$item->id);
return redirect()->back()
->with(['message' => __('As you wished deattached successfully')]);
}
public function update(Request $request, Attachment $item) public function update(Request $request, Attachment $item)

@ -37,4 +37,24 @@ class Attachment extends Model
return \Storage::url('attachments/' . $this->file); return \Storage::url('attachments/' . $this->file);
} }
public function ownerModel(){
switch ($this->attachable_type){
case Product::class:
return Product::whereId($this->attachable_id)->first();
case Post::class:
return Post::whereId($this->attachable_id)->first();
case Group::class:
return Group::whereId($this->attachable_id)->first();
case Category::class:
return Category::whereId($this->attachable_id)->first();
case Clip::class:
return Clip::whereId($this->attachable_id)->first();
case Gallery::class:
return Gallery::whereId($this->attachable_id)->first();
default:
return null;
}
}
} }

@ -50,4 +50,8 @@ class Category extends Model
return $this->belongsToMany(Prop::class); return $this->belongsToMany(Prop::class);
} }
public function attachs(){
return $this->morphMany(Attachment::class,'attachable');
}
} }

@ -41,4 +41,10 @@ class Clip extends Model
{ {
return $this->belongsTo(\App\Models\User::class); return $this->belongsTo(\App\Models\User::class);
} }
public function attachs(){
return $this->morphMany(Attachment::class,'attachable');
}
} }

@ -59,4 +59,8 @@ class Gallery extends Model implements HasMedia
{ {
return $this->belongsTo(\App\Models\User::class); return $this->belongsTo(\App\Models\User::class);
} }
public function attachs(){
return $this->morphMany(Attachment::class,'attachable');
}
} }

@ -55,4 +55,8 @@ class Group extends Model
return \Storage::url('groups/' . $this->bg); return \Storage::url('groups/' . $this->bg);
} }
public function attachs(){
return $this->morphMany(Attachment::class,'attachable');
}
} }

@ -97,6 +97,10 @@ class Post extends Model implements HasMedia
return $this->belongsTo(Group::class); return $this->belongsTo(Group::class);
} }
public function attachs(){
return $this->morphMany(Attachment::class,'attachable');
}
// public function toArray() // public function toArray()
// { // {

@ -21,6 +21,9 @@ class Product extends Model implements HasMedia
'qidz' => 'array' 'qidz' => 'array'
]; ];
public function attachs(){
return $this->morphMany(Attachment::class,'attachable');
}
protected $guarded = []; protected $guarded = [];

@ -43,6 +43,14 @@
</div> </div>
@endif @endif
@if(isset($item))
<div class="item-list mb-3">
<div class="p-3">
@include('components.panel-attachs',['attachs' => $item->attachs])
</div>
</div>
@endif
</div> </div>
<div class="col-lg-9 ps-xl-1 ps-xxl-1"> <div class="col-lg-9 ps-xl-1 ps-xxl-1">
<div class="general-form "> <div class="general-form ">

@ -38,6 +38,13 @@
</div> </div>
</div> </div>
@endif @endif
@if(isset($item))
<div class="item-list mb-3">
<div class="p-3">
@include('components.panel-attachs',['attachs' => $item->attachs])
</div>
</div>
@endif
</div> </div>
<div class="col-lg-9 ps-xl-1 ps-xxl-1"> <div class="col-lg-9 ps-xl-1 ps-xxl-1">

@ -41,6 +41,14 @@
</div> </div>
@endif @endif
@if(isset($item))
<div class="item-list mb-3">
<div class="p-3">
@include('components.panel-attachs',['attachs' => $item->attachs])
</div>
</div>
@endif
</div> </div>
<div class="col-lg-9 ps-xl-1 ps-xxl-1"> <div class="col-lg-9 ps-xl-1 ps-xxl-1">
<div class="general-form "> <div class="general-form ">

@ -42,6 +42,14 @@
</div> </div>
@endif @endif
@if(isset($item))
<div class="item-list mb-3">
<div class="p-3">
@include('components.panel-attachs',['attachs' => $item->attachs])
</div>
</div>
@endif
</div> </div>
<div class="col-lg-9 ps-xl-1 ps-xxl-1"> <div class="col-lg-9 ps-xl-1 ps-xxl-1">

@ -72,6 +72,13 @@
<remix-icon-picker xname="icon" xvalue="{{old('icon',$item->icon??null)}}"></remix-icon-picker> <remix-icon-picker xname="icon" xvalue="{{old('icon',$item->icon??null)}}"></remix-icon-picker>
</div> </div>
</div> </div>
@if(isset($item))
<div class="item-list mb-3">
<div class="p-3">
@include('components.panel-attachs',['attachs' => $item->attachs])
</div>
</div>
@endif
</div> </div>
<div class="col-lg-9 ps-xl-1 ps-xxl-1"> <div class="col-lg-9 ps-xl-1 ps-xxl-1">

@ -76,6 +76,7 @@
<i class="ri-save-3-line"></i> <i class="ri-save-3-line"></i>
</li> </li>
</ul> </ul>
@include('components.err')
<div id="step-tabs"> <div id="step-tabs">
<div id="step1"> <div id="step1">
<div class="card"> <div class="card">

@ -1,118 +1,119 @@
<div class="row"> <div class="row">
<div class="col-md-6 mt-3"> <div class="col-md-6 mt-3">
<div class="form-group"> <div class="form-group">
<label for="name"> <label for="name">
{{__('Name')}} {{__('Name')}}
</label> </label>
<input name="name" type="text" <input name="name" type="text"
id="name" id="name"
class="form-control @error('name') is-invalid @enderror" class="form-control @error('name') is-invalid @enderror"
placeholder="{{__('Name')}}" placeholder="{{__('Name')}}"
value="{{old('name',$item->name??null)}}"/> value="{{old('name',$item->name??null)}}"/>
</div>
</div> </div>
<div class="col-md-6 mt-3"> </div>
<div class="form-group"> <div class="col-md-6 mt-3">
<label for="name"> <div class="form-group">
{{__('Slug')}} <label for="name">
</label> {{__('Slug')}}
<input name="slug" type="text" </label>
id="slug" <input name="slug" type="text"
class="form-control @error('slug') is-invalid @enderror" id="slug"
placeholder="{{__('Slug')}}" class="form-control @error('slug') is-invalid @enderror"
value="{{old('slug',$item->slug??null)}}"/> placeholder="{{__('Slug')}}"
</div> value="{{old('slug',$item->slug??null)}}"/>
</div> </div>
</div>
<div class="col-lg-6 mt-3"> <div class="col-lg-6 mt-3">
<div class="form-group"> <div class="form-group">
<label for="price"> <label for="price">
{{__('Base price')}} {{__('Base price')}}
</label> </label>
<currency-input xname="price" xid="price" @error('price') <currency-input xname="price" xid="price" @error('price')
:err="true" @enderror xtitle="{{__('Base price')}}" :xvalue="{{old('price',$item->price??null)}}"></currency-input> :err="true" @enderror xtitle="{{__('Base price')}}"
</div> :xvalue="{{old('price',$item->price??null)}}"></currency-input>
</div> </div>
<div class="col-lg-6 mt-3"> </div>
<div class="form-group"> <div class="col-lg-6 mt-3">
<label for="buy_price"> <div class="form-group">
{{__('Purchase price')}} <label for="buy_price">
</label> {{__('Purchase price')}}
</label>
<currency-input xname="buy_price" xid="buy_price" @error('buy_price') <currency-input xname="buy_price" xid="buy_price" @error('buy_price')
:err="true" @enderror :xvalue="{{old('buy_price',$item->buy_price??0)}}"></currency-input> :err="true" @enderror :xvalue="{{old('buy_price',$item->buy_price??0)}}"></currency-input>
</div>
</div> </div>
<div class="col-lg-4 mt-3"> </div>
<div class="form-group"> <div class="col-lg-4 mt-3">
<label for="categoryId"> <div class="form-group">
{{__('Main product category')}} <label for="categoryId">
</label> {{__('Main product category')}}
</label>
{{-- data-url="{{route('props.list','')}}/"--}} {{-- data-url="{{route('props.list','')}}/"--}}
<searchable-select <searchable-select
vuex-dispatch="updateCategory" vuex-dispatch="updateCategory"
@error('category_id') :err="true" @enderror @error('category_id') :err="true" @enderror
:items='@json($cats)' :items='@json($cats)'
title-field="name" title-field="name"
value-field="id" value-field="id"
xlang="{{config('app.locale')}}" xlang="{{config('app.locale')}}"
xid="categoryId" xid="categoryId"
xname="category_id" xname="category_id"
@error('category_id') :err="true" @enderror @error('category_id') :err="true" @enderror
xvalue='{{old('category_id',$item->category_id??null)}}' xvalue='{{old('category_id',$item->category_id??null)}}'
:close-on-Select="true"></searchable-select> :close-on-Select="true"></searchable-select>
</div>
</div> </div>
<div class="col-lg-4 mt-3"> </div>
<div class="form-group"> <div class="col-lg-4 mt-3">
<label for="price"> <div class="form-group">
{{__('SKU')}} <label for="price">
</label> {{__('SKU')}}
<input name="sku" type="text" </label>
id="sku" <input name="sku" type="text"
class="form-control @error('sku') is-invalid @enderror" id="sku"
placeholder="{{__('SKU')}}" class="form-control @error('sku') is-invalid @enderror"
value="{{old('sku',$item->sku??null)}}"/> placeholder="{{__('SKU')}}"
</div> value="{{old('sku',$item->sku??null)}}"/>
</div> </div>
<div class="col-lg-4 mt-3"> </div>
<div class="form-group"> <div class="col-lg-4 mt-3">
<label for="status"> <div class="form-group">
{{__('Status')}} <label for="status">
</label> {{__('Status')}}
<select name="status" id="status" </label>
class="form-control @error('status') is-invalid @enderror"> <select name="status" id="status"
<option value="1" class="form-control @error('status') is-invalid @enderror">
@if (old('status',$item->status??null) == '1' ) selected @endif >{{__("Published")}} </option> <option value="1"
<option value="0" @if (old('status',$item->status??null) == '1' ) selected @endif >{{__("Published")}} </option>
@if (old('status',$item->status??null) == '0' ) selected @endif >{{__("Draft")}} </option> <option value="0"
</select> @if (old('status',$item->status??null) == '0' ) selected @endif >{{__("Draft")}} </option>
</div> </select>
</div> </div>
<div class="col-md-12 mt-3"> </div>
<div class="form-group"> <div class="col-md-12 mt-3">
<label for="excerpt"> <div class="form-group">
{{__('Excerpt')}} <label for="excerpt">
</label> {{__('Excerpt')}}
<textarea name="excerpt" </label>
class="form-control @error('excerpt') is-invalid @enderror" <textarea name="excerpt"
placeholder="{{__('Excerpt')}}" class="form-control @error('excerpt') is-invalid @enderror"
id="excerpt" placeholder="{{__('Excerpt')}}"
rows="4">{{old('excerpt',$item->excerpt??null)}}</textarea> id="excerpt"
</div> rows="4">{{old('excerpt',$item->excerpt??null)}}</textarea>
</div> </div>
<div class="col-md-12 mt-3"> </div>
<div class="form-group"> <div class="col-md-12 mt-3">
<label for="description"> <div class="form-group">
{{__('Description Text')}} <label for="description">
</label> {{__('Description Text')}}
<textarea name="desc" class="form-control ckeditorx @error('description') is-invalid @enderror" </label>
placeholder="{{__('Description Text')}}" <textarea name="desc" class="form-control ckeditorx @error('description') is-invalid @enderror"
id="description" placeholder="{{__('Description Text')}}"
rows="8">{{old('description',$item->description??null)}}</textarea> id="description"
</div> rows="8">{{old('description',$item->description??null)}}</textarea>
</div> </div>
</div> </div>
</div>

@ -175,3 +175,7 @@
{{-- </div>--}} {{-- </div>--}}
{{--</div>--}} {{--</div>--}}
<hr>
<div class="mt-4">
@include('components.panel-attachs',['attachs' => $item->attachs])
</div>

@ -0,0 +1,28 @@
<h4>
{{__("Attachments")}}
<a href="{{route('admin.attachment.create')}}?" class="btn btn-light float-end mb-2">
<i class="ri-add-line"></i>
<i class="ri-attachment-line"></i>
</a>
</h4>
<div class="clearfix"></div>
<ul class="list-group">
@foreach($attachs as $attach)
<li class="list-group-item">
<a href="{{route('admin.attachment.deattach',$attach->slug)}}" class="btn btn-danger float-end btn-sm" data-bs-toggle="tooltip" data-bs-placement="auto" data-bs-custom-class="custom-tooltip"
data-bs-title="{{__("Deattach")}}">
<i class="ri-close-line"></i>
</a>
<div class="p-2">
<a href="{{$attach->url()}}">
{{$attach->file}}
</a>
[ {{formatFileSize($attach->size)}} ]
[ {{$attach->ext}} ]
</div>
</li>
@endforeach
</ul>

@ -113,6 +113,7 @@ Route::prefix(config('app.panel.prefix'))->name('admin.')->group(
Route::get('edit/{item}', [\App\Http\Controllers\Admin\AttachmentController::class, 'edit'])->name('edit'); Route::get('edit/{item}', [\App\Http\Controllers\Admin\AttachmentController::class, 'edit'])->name('edit');
Route::post('update/{item}', [\App\Http\Controllers\Admin\AttachmentController::class, 'update'])->name('update'); Route::post('update/{item}', [\App\Http\Controllers\Admin\AttachmentController::class, 'update'])->name('update');
Route::get('delete/{item}', [\App\Http\Controllers\Admin\AttachmentController::class, 'destroy'])->name('destroy'); Route::get('delete/{item}', [\App\Http\Controllers\Admin\AttachmentController::class, 'destroy'])->name('destroy');
Route::get('deattach/{item}', [\App\Http\Controllers\Admin\AttachmentController::class, 'deattach'])->name('deattach');
Route::post('bulk', [\App\Http\Controllers\Admin\AttachmentController::class, "bulk"])->name('bulk'); Route::post('bulk', [\App\Http\Controllers\Admin\AttachmentController::class, "bulk"])->name('bulk');
}); });
Route::prefix('clips')->name('clip.')->group( Route::prefix('clips')->name('clip.')->group(

Loading…
Cancel
Save