chore: change show content recap UI

chore: change show content recap classification UI

feat: add grouping by classification
This commit is contained in:
myuqinurrohman 2025-04-17 14:43:27 +07:00
parent 4206ae896c
commit 0994e1717a
16 changed files with 341 additions and 123 deletions

View File

@ -11,9 +11,10 @@
class ContentRecapController extends Controller
{
public function index(){
public function index(Request $request){
return view('dashboard.content-recaps.index', [
'title' => 'Rekap Konten'
'title' => 'Rekap Konten',
'classification' => $request->input('classification', null)
]);
}
@ -28,15 +29,19 @@ public function store(ContentRecapRequest $request){
$validatedData = $request->validated();
$validatedData['enhancer_id'] = Auth::id();
if($request->has('image')){
if($request->has('image') && filled($validatedData['image'])){
$validatedData['image'] = store_file($validatedData['image'], '/uploads/content-recaps', 'public')['randomFileName'];
}else{
$validatedData['image'] = null;
}
$createdContentRecap = ContentRecap::create($validatedData);
if($createdContentRecap){
return redirect()->back()->with('success-status', 'Berhasil menambahkan rekap konten.');
}else{
try{
$createdContentRecap = ContentRecap::create($validatedData);
return redirect()->route('dashboard.content.recaps.index')->with('success-status', 'Berhasil menambahkan rekap konten.')
->with('new_data', encrypt_id($createdContentRecap->id));
}catch(\Exception $e){
return redirect()->back()->with('failed-status', 'Gagal menambahkan rekap konten.');
}
}
@ -56,18 +61,17 @@ public function update(ContentRecapRequest $request, $id){
$validatedData['enhancer_id'] = Auth::id();
$contentRecap = ContentRecap::findOrFail(decrypt_id($id));
if($request->has('image')){
if($request->has('image') && filled($validatedData['image'])){
delete_file('app/public/uploads/content-recaps/'.$contentRecap->image);
$validatedData['image'] = store_file($validatedData['image'], '/uploads/content-recaps', 'public')['randomFileName'];
}else{
$validatedData['image'] = $contentRecap->image;
}
$updatedContentRecap = $contentRecap->update($validatedData);
if($updatedContentRecap){
return redirect()->back()->with('success-status', 'Berhasil mengubah rekap konten.');
}else{
try{
$contentRecap->update($validatedData);
return redirect()->route('dashboard.content.recaps.show', ['id' => encrypt_id($contentRecap->id)])->with('success-status', 'Berhasil mengubah rekap konten.');
}catch(\Exception $e){
return redirect()->back()->with('failed-status', 'Gagal mengubah rekap konten.');
}
@ -85,7 +89,6 @@ public function show($id){
public function destroy($id){
try {
$contentRecap = ContentRecap::findOrFail(decrypt_id($id));
$contentRecap->delete();
return response()->json(['message' => 'Berhasil menghapus rekap konten.']);

View File

@ -516,8 +516,6 @@ public function airingProofTheme(Request $request){
public function contentRecapClassification(Request $request){
if ($request->ajax()) {
$data = ContentRecapClassification::all();
return DataTables::of($data)
@ -563,7 +561,7 @@ public function contentRecapClassification(Request $request){
return $dropdown;
})
->rawColumns(['action'])
->rawColumns(['content_recaps', 'action'])
->make(true);
}
@ -2097,7 +2095,14 @@ class="text-dark"
public function contentRecap(Request $request){
if ($request->ajax()) {
$data = ContentRecap::all();
$classificationParam = $request->input('classification', null);
if(filled($classificationParam)){
$data = ContentRecap::where('classification_id', decrypt_id($classificationParam))->get();
}else{
$data = ContentRecap::all();
}
return DataTables::of($data)
->addIndexColumn()

View File

@ -23,12 +23,13 @@ public function authorize(): bool
public function rules(): array
{
$rules = [
'title' => ['required'],
'content_theme' => ['required'],
'posted_date' => ['required', 'date'],
'channel'=> ['required', 'in:website,tiktok,youtube,instagram,facebook,twitter,cetak'],
'channel'=> ['required', 'in:website,tiktok,youtube,instagram,facebook,twitter,cetak', 'not_in:placeholder'],
'link' => ['required', 'url'],
'classification_id' => ['required', 'exists:content_recap_classifications,id'],
'social_media' => ['required'],
'classification_id' => ['required', 'exists:content_recap_classifications,id', 'not_in:placeholder'],
'social_media' => ['required', 'not_in:placeholder'],
'description' => ['nullable'],
];
if($this->isMethod('post')){
@ -40,14 +41,23 @@ public function rules(): array
return $rules;
}
protected function prepareForValidation()
{
$this->merge([
'image' => filled($this->image) ? $this->image : null,
'description' => filled($this->description) ? $this->description : null,
]);
}
public function messages()
{
return [
'title.required' => 'Judul wajib diisi.',
'content_theme.required' => 'Tema konten wajib diisi.',
'content_theme.max' => 'Tema konten tidak boleh lebih dari 200 karakter.',
'posted_date.required' => 'Tanggal posting wajib diisi.',
'posted_date.date' => 'Tanggal posting harus berupa format tanggal yang valid.',
'channel.required' => 'Channel wajib dipilih.',
'channel.in' => 'Channel harus salah satu dari: website, tiktok, youtube, instagram, facebook, twitter, atau cetak.',
'channel.required' => 'Kanal wajib dipilih.',
'channel.in' => 'Kanal harus salah satu dari: website, tiktok, youtube, instagram, facebook, twitter, atau cetak.',
'link.required' => 'Link wajib diisi.',
'link.url' => 'Link harus berupa URL yang valid.',
'classification_id.required' => 'Klasifikasi wajib dipilih.',
@ -57,6 +67,7 @@ public function messages()
'image.image' => 'File yang diunggah harus berupa gambar.',
'image.mimes' => 'Format gambar harus PNG, JPG, atau JPEG.',
'image.max' => 'Ukuran gambar maksimal 2MB.',
'description.nullable' => 'Deskripsi bersifat opsional.',
];
}

View File

@ -11,13 +11,14 @@ class ContentRecap extends Model
protected $table = 'content_recaps';
protected $fillable = [
'title',
'content_theme',
'posted_date',
'channel',
'link',
'classification_id',
'social_media',
'image',
'description',
'enhancer_id',
];

View File

@ -21,4 +21,8 @@ class ContentRecapClassification extends Model
public function contentRecaps(){
return $this->hasMany(ContentRecap::class, 'classification_id', 'id');
}
public function enhancer(){
return $this->belongsTo(User::class, 'enhancer_id', 'id');
}
}

View File

@ -13,7 +13,7 @@ public function up(): void
{
Schema::create('content_recaps', function (Blueprint $table) {
$table->id();
$table->text('title');
$table->text('content_theme');
$table->date('posted_date');
$table->enum('channel', ['website', 'tiktok', 'youtube', 'instagram', 'facebook', 'twitter', 'cetak']);
$table->string('link');

View File

@ -19,7 +19,7 @@ public function run(): void
foreach($legacyContentRecaps as $legacyContentRecap){
ContentRecap::create([
'id' => $legacyContentRecap->id,
'title' => $legacyContentRecap->title,
'content_theme' => $legacyContentRecap->title,
'posted_date' => $legacyContentRecap->posting_date == '0000-00-00' ? now() : $legacyContentRecap->posting_date,
'channel' => $legacyContentRecap->channel,
'link' => $legacyContentRecap->link,

View File

@ -167,3 +167,7 @@ .file-not-filled{
border: 1px solid red !important;
background-color: red !important;
}
.link-show{
width: 68% !important;
}

View File

@ -21,7 +21,10 @@
<div class="card card-bordered card-preview">
<div class="card-inner">
<div class="card-head">
<h5 class="card-title">{{$title}}</h5>
<div class="nk-block-head">
<h5 class="title">Buat Klasifikasi Rekap Konten Baru</h5>
<p>Masukkan informasi yang diperlukan untuk membuat klasifikasi rekap konten.</p>
</div>
</div>
<form action="{{route('dashboard.content.recap.classifications.store')}}" method="post" id="myForm">
@csrf
@ -30,7 +33,7 @@
<div class="form-group">
<label class="form-label" for="name">Nama<span class="required-input">*</span></label>
<div class="form-control-wrap">
<input type="text" class="form-control @error('name') border-danger @enderror" id="name" name="name" placeholder="Masukan nama tema" value="{{old('name')}}">
<input type="text" class="form-control" id="name" name="name" placeholder="Contoh: Penghargaan, Ogan Lopian" value="{{old('name')}}">
</div>
@error('name')
<span class="validation-error">{{$message}}</span>
@ -41,7 +44,7 @@
<div class="form-group">
<label class="form-label" for="year">Tahun<span class="required-input">*</span></label>
<div class="form-control-wrap">
<input type="text" class="form-control @error('year') border-danger @enderror" id="year" year="year" placeholder="Masukan year tema" value="{{old('year')}}">
<input type="text" class="form-control @error('year') border-danger @enderror" id="year" year="year" placeholder="Contoh: 2024, 2025" value="{{old('year')}}">
</div>
@error('year')
<span class="validation-error">{{$message}}</span>
@ -55,6 +58,9 @@
<textarea class="tinymce-basic form-control" name="description">{!!old('description')!!}</textarea>
</div>
</div>
@error('description')
<span class="validation-error">{{$message}}</span>
@enderror
</div>
<div class="col-12">
<hr>

View File

@ -10,7 +10,10 @@
<div class="card card-bordered card-preview">
<div class="card-inner">
<div class="card-head">
<h5 class="card-title">{{$title}}</h5>
<div class="nk-block-head">
<h5 class="title">Ubah Klasifikasi Rekap Konten</h5>
<p>Perbarui informasi klasifikasi rekap konten ini.</p>
</div>
</div>
<form action="{{route('dashboard.content.recap.classifications.update', ['id' => encrypt_id($contentRecapClassification->id)])}}" method="post" id="myForm">
@csrf
@ -20,7 +23,7 @@
<div class="form-group">
<label class="form-label" for="name">Nama<span class="required-input">*</span></label>
<div class="form-control-wrap">
<input type="text" class="form-control @error('name') border-danger @enderror" id="name" name="name" placeholder="Masukan nama tema" value="{{$contentRecapClassification->name}}">
<input type="text" class="form-control @error('name') border-danger @enderror" id="name" name="name" placeholder="Contoh: Penghargaan, Ogan Lopian" value="{{$contentRecapClassification->name}}">
</div>
@error('name')
<span class="validation-error">{{$message}}</span>
@ -31,7 +34,7 @@
<div class="form-group">
<label class="form-label" for="year">Tahun<span class="required-input">*</span></label>
<div class="form-control-wrap">
<input type="text" class="form-control @error('year') border-danger @enderror" id="year" name="year" placeholder="Masukan tahun tema" value="{{$contentRecapClassification->year}}">
<input type="text" class="form-control @error('year') border-danger @enderror" id="year" name="year" placeholder="Contoh: 2024, 2025" value="{{$contentRecapClassification->year}}">
</div>
@error('year')
<span class="validation-error">{{$message}}</span>
@ -45,6 +48,9 @@
<textarea class="tinymce-basic form-control" name="description">{!!$contentRecapClassification->description!!}</textarea>
</div>
</div>
@error('description')
<span class="validation-error">{{$message}}</span>
@enderror
</div>
<div class="col-12">
<hr>

View File

@ -6,13 +6,32 @@
<div class="container-fluid">
<div class="nk-content-inner">
<div class="nk-content-body">
<div class="nk-block-head nk-block-head-sm">
<div class="nk-block-between g-3">
<div class="nk-block-head-content">
<h3 class="nk-block-title page-title">Detail Klasifikasi Rekap Konten</h3>
<div class="nk-block-des text-soft">
<ul class="list-inline">
<li>Detail klasifikasi rekap konten dapat dilihat di sini.</li>
</ul>
</div>
</div>
<div class="nk-block-head-content">
<a href="{{route('dashboard.content.recap.classifications.index')}}" class="btn btn-icon btn-outline-light bg-white d-inline-flex d-sm-none"><em class="icon ni ni-arrow-left"></em></a>
<a href="{{route('dashboard.content.recap.classifications.index')}}" class="btn btn-outline-light bg-white d-none d-sm-inline-flex"><em class="icon ni ni-arrow-left"></em><span>Kembali</span></a>
</div>
</div>
</div><!-- .nk-block-head -->
<div class="nk-block nk-block-lg">
<div class="card">
<div class="card-aside-wrap">
<div class="card-content">
<ul class="nav nav-tabs nav-tabs-mb-icon nav-tabs-card">
<li class="nav-item">
<a class="nav-link text-primary" href="#"><em class="icon ni ni-info"></em><span>Detail Klasifikasi Rekap Konten</span></a>
<a class="nav-link text-primary" href="javascript:void(0);"><em class="icon ni ni-info"></em><span>Detail Informasi</span></a>
</li>
<li class="nav-item nav-item-trigger d-xxl-none">
<a href="{{route('dashboard.content.recap.classifications.edit', ['id' => encrypt_id($contentRecapClassification->id), 'show' => true])}}" class="btn btn-icon btn-trigger"><em class="icon ni ni-edit"></em></a>
</li>
</ul><!-- .nav-tabs -->
<div class="card-inner">
@ -28,6 +47,12 @@
<span class="profile-ud-value">{{$contentRecapClassification->name}}</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Tahun</span>
<span class="profile-ud-value">{{$contentRecapClassification->year}}</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Rekap Konten</span>
@ -46,6 +71,12 @@
<span class="profile-ud-value">{{idn_date($contentRecapClassification->created_at, 'l, d F Y')}}</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Dibuat Oleh</span>
<span class="profile-ud-value">{{$contentRecapClassification->enhancer->name}}</span>
</div>
</div>
</div><!-- .profile-ud-list -->
</div><!-- .nk-block -->
{{-- <div class="nk-divider divider md"></div> --}}
@ -56,16 +87,11 @@
<div class="bq-note">
<div class="bq-note-item">
<div class="bq-note-text">
{!! filled($contentRecapClassification->description) ? $contentRecapClassification->description : '-' !!}
{!!$contentRecapClassification->description ?? '-' !!}
</div>
</div><!-- .bq-note-item -->
</div><!-- .bq-note -->
</div><!-- .nk-block -->
<hr>
<div class="nk-block d-flex justify-content-end">
<a href="{{route('dashboard.content.recap.classifications.index')}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
<a href="{{route('dashboard.content.recap.classifications.edit', ['id' => encrypt_id($contentRecapClassification->id), 'show' => true])}}" class="btn btn-warning"><span>Ubah</span></a>
</div><!-- .nk-block -->
</div><!-- .card-inner -->
</div><!-- .card-content -->
</div><!-- .card-aside-wrap -->

View File

@ -10,18 +10,21 @@
<div class="card card-bordered card-preview">
<div class="card-inner">
<div class="card-head">
<h5 class="card-title">{{$title}}</h5>
<div class="nk-block-head">
<h5 class="title">Buat Rekap Konten Baru</h5>
<p>Masukkan informasi yang diperlukan untuk membuat rekap konten.</p>
</div>
</div>
<form action="{{route('dashboard.content.recaps.store')}}" method="post" enctype="multipart/form-data" id="myForm">
@csrf
<div class="row g-4">
<div class="col-lg-6">
<div class="form-group">
<label class="form-label" for="title">Judul<span class="required-input">*</span></label>
<label class="form-label" for="content_theme">Tema Konten<span class="required-input">*</span></label>
<div class="form-control-wrap">
<input type="text" class="form-control @error('title') border-danger @enderror" id="title" name="title" placeholder="Masukan judul" value="{{old('title')}}">
<input type="text" class="form-control" id="content_theme" name="content_theme" placeholder="Contoh: Reels Kerjasama DPMPTSP" value="{{old('content_theme')}}">
</div>
@error('title')
@error('content_theme')
<span class="validation-error">{{$message}}</span>
@enderror
</div>
@ -30,7 +33,7 @@
<div class="form-group">
<label class="form-label" for="link">Link<span class="required-input">*</span></label>
<div class="form-control-wrap">
<input type="text" class="form-control @error('link') border-danger @enderror" id="contentRecapLink" name="link" placeholder="Masukan link" value="{{old('link')}}">
<input type="text" class="form-control" id="contentRecapLink" name="link" placeholder="Contoh: https://instagram.com/abc" value="{{old('link')}}">
<small id="contentRecapLinkFeedback" class="d-none"></small>
</div>
@error('link')
@ -43,11 +46,15 @@
<label class="form-label">Klasifikasi<span class="required-input">*</span></label>
<div class="form-control-wrap">
<select class="form-select js-select2" name="classification_id" id="classification" data-search="on">
<option value="placeholder" selected disabled>Pilih Klasifikasi</option>
@foreach ($classifications as $classification)
<option value="{{$classification->id}}" {{ old('classification_id') == $classification->id ? 'selected' : '' }}>{{$classification->name}}</option>
@endforeach
</select>
</div>
@error('classification_id')
<span class="validation-error">{{$message}}</span>
@enderror
</div>
</div>
<div class="col-lg-6">
@ -55,18 +62,22 @@
<label class="form-label">Media Sosial<span class="required-input">*</span></label>
<div class="form-control-wrap">
<select class="form-select js-select2" name="social_media" id="social_media" data-search="on">
<option value="placeholder" selected disabled>Pilih Media Sosial</option>
<option value="PPID Diskominfo Purwakarta" {{ old('social_media') == 'PPID Diskominfo Purwakarta' ? 'selected' : '' }}>PPID Diskominfo Purwakarta</option>
<option value="Diskominfo Purwakarta" {{ old('social_media') == 'Diskominfo Purwakarta' ? 'selected' : '' }}>Diskominfo Purwakarta</option>
<option value="Purwakarta Saber Hoaks" {{ old('social_media') == 'Purwakarta Saber Hoaks' ? 'selected' : '' }}>Purwakarta Saber Hoaks</option>
</select>
</div>
@error('social_media')
<span class="validation-error">{{$message}}</span>
@enderror
</div>
</div>
<div class="col-lg-6">
<div class="form-group">
<label class="form-label" for="posted_date">Tanggal Posting<span class="required-input">*</span></label>
<div class="form-control-wrap">
<input type="date" class="form-control @error('posted_date') border-danger @enderror" id="posted_date" name="posted_date" placeholder="Masukan Tanggal Posting" value="{{old('posted_date')}}">
<input type="date" class="form-control" id="posted_date" name="posted_date" placeholder="Masukan Tanggal Posting" value="{{old('posted_date')}}">
</div>
@error('posted_date')
<span class="validation-error">{{$message}}</span>
@ -78,6 +89,7 @@
<label class="form-label">Kanal<span class="required-input">*</span></label>
<div class="form-control-wrap">
<select class="form-select js-select2" name="channel" data-search="on">
<option value="placeholder" selected disabled>Pilih Kanal</option>
<option value="website" {{old('channel') == 'website' ? 'selected' : ''}}>Website</option>
<option value="tiktok" {{old('channel') == 'tiktok' ? 'selected' : ''}}>Tiktok</option>
<option value="youtube" {{old('channel') == 'youtube' ? 'selected' : ''}}>YouTube</option>
@ -87,15 +99,18 @@
<option value="cetak" {{old('channel') == 'cetak' ? 'selected' : ''}}>Cetak</option>
</select>
</div>
@error('channel')
<span class="validation-error">{{$message}}</span>
@enderror
</div>
</div>
<div class="col-lg-6">
<div class="form-group">
<label class="form-label" for="image">Gambar<span class="required-input">*</span></label>
<label class="form-label" for="image">Gambar</label>
<div class="form-control-wrap">
<div class="form-file">
<input type="file" accept="image/*" class="form-file-input" id="image" name="image">
<label class="form-file-label" for="image">Gambar berupa screenshoot</label>
<label class="form-file-label" for="image">Unggah gambar konten (misalnya screenshot)</label>
</div>
</div>
@error('image')
@ -103,6 +118,17 @@
@enderror
</div>
</div>
<div class="col-lg-12">
<div class="form-group">
<label class="form-label" for="description">Deskripsi</label>
@error('description')
<span class="validation-error">{{$message}}</span>
@enderror
<div class="form-control-wrap">
<textarea class="tinymce-basic form-control" name="description">{!!old('description')!!}</textarea>
</div>
</div>
</div>
<div class="col-12">
<hr>
<div class="form-group d-flex justify-content-end">

View File

@ -10,22 +10,22 @@
<div class="card card-bordered card-preview">
<div class="card-inner">
<div class="card-head">
<h5 class="card-title">{{$title}}</h5>
<div class="nk-block-head">
<h5 class="title">Ubah Rekap Konten</h5>
<p>Perbarui informasi rekap konten ini.</p>
</div>
</div>
@foreach ($errors->all() as $item)
{{$item}}
@endforeach
<form action="{{route('dashboard.content.recaps.update', ['id' => encrypt_id($contentRecap->id)])}}" method="post" enctype="multipart/form-data" id="myForm">
@csrf
@method('put')
<div class="row g-4">
<div class="col-lg-6">
<div class="form-group">
<label class="form-label" for="title">Judul<span class="required-input">*</span></label>
<label class="form-label" for="content_theme">Tema Konten<span class="required-input">*</span></label>
<div class="form-control-wrap">
<input type="text" class="form-control @error('title') border-danger @enderror" id="title" name="title" placeholder="Masukan judul" value="{{$contentRecap->title}}">
<input type="text" class="form-control @error('content_theme') border-danger @enderror" id="content_theme" name="content_theme" placeholder="Contoh: Reels Kerjasama DPMPTSP" value="{{$contentRecap->content_theme}}">
</div>
@error('title')
@error('content_theme')
<span class="validation-error">{{$message}}</span>
@enderror
</div>
@ -34,7 +34,7 @@
<div class="form-group">
<label class="form-label" for="link">Link<span class="required-input">*</span></label>
<div class="form-control-wrap">
<input type="text" class="form-control @error('link') border-danger @enderror" id="link" name="link" placeholder="Masukan link" value="{{$contentRecap->link}}">
<input type="text" class="form-control @error('link') border-danger @enderror" id="link" name="link" placeholder="Contoh: https://instagram.com/abc" value="{{$contentRecap->link}}">
</div>
@error('link')
<span class="validation-error">{{$message}}</span>
@ -94,11 +94,21 @@
</div>
<div class="col-lg-6">
<div class="form-group">
<label class="form-label" for="image">Gambar<span class="required-input">*</span></label>
<label class="form-label" for="image">Gambar @if (filled($contentRecap->image))
<span>
<a href="javascript:void(0);" data-bs-toggle="modal" data-bs-target="#modalDefault">
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-eye">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
<path d="M21 12c-2.4 4 -5.4 6 -9 6c-3.6 0 -6.6 -2 -9 -6c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6" />
</svg>
</a>
</span>
@endif</label>
<div class="form-control-wrap">
<div class="form-file">
<input type="file" accept="image/*" class="form-file-input" id="image" name="image">
<label class="form-file-label" for="image">Gambar berupa screenshoot</label>
<label class="form-file-label" for="image">{{!filled($contentRecap->image) ? 'Tidak ada gambar' : $contentRecap->image}}</label>
</div>
</div>
@error('image')
@ -106,15 +116,45 @@
@enderror
</div>
</div>
<div class="col-lg-12">
<div class="form-group">
<label class="form-label" for="description">Deskripsi</label>
@error('description')
<span class="validation-error">{{$message}}</span>
@enderror
<div class="form-control-wrap">
<textarea class="tinymce-basic form-control" name="description">{!!$contentRecap->description!!}</textarea>
</div>
</div>
</div>
<div class="col-12">
<hr>
<div class="form-group d-flex justify-content-end">
@if (request()->query('show'))
<a href="{{route('dashboard.content.recaps.show', ['id' => encrypt_id($contentRecap->id)])}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
@else
<a href="{{route('dashboard.content.recaps.index')}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
@endif
<button type="button" class="btn btn-md btn-primary" id="submitButton">Simpan</button>
</div>
</div>
</div>
</form>
<div class="modal fade" tabindex="-1" id="modalDefault">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Preview Gambar</h5>
<a href="#" class="close" data-bs-dismiss="modal" aria-label="Close">
<em class="icon ni ni-cross"></em>
</a>
</div>
<div class="modal-body">
<img src="{{asset(display_image($contentRecap->image, 'news'))}}" alt="">
</div>
</div>
</div>
</div>
</div>
</div>
</div>

View File

@ -43,7 +43,7 @@
<thead>
<tr>
<th style="width: 10% !important;">No</th>
<th>Judul</th>
<th>Tema Konten</th>
<th>Kanal</th>
<th>Social Media</th>
<th>Tanggal Posting</th>

View File

@ -6,68 +6,131 @@
<div class="container-fluid">
<div class="nk-content-inner">
<div class="nk-content-body">
<div class="nk-block nk-block-lg">
<div class="card card-bordered card-preview">
<div class="card-inner">
<div class="card-head">
<h5 class="card-title">{{$title}}</h5>
<div class="nk-block-head nk-block-head-sm">
<div class="nk-block-between g-3">
<div class="nk-block-head-content">
<h3 class="nk-block-title page-title">Detail Rekap Konten</h3>
<div class="nk-block-des text-soft">
<ul class="list-inline">
<li>Detail rekap konten dapat dilihat di sini.</li>
</ul>
</div>
@foreach ($errors->all() as $item)
{{$item}}
@endforeach
<form action="#" method="post" enctype="multipart/form-data">
@csrf
<div class="row g-4">
<div class="col-lg-6">
<div class="form-group">
<label class="form-label" for="title">Judul</label>
<div class="form-control-wrap">
<input type="text" class="form-control @error('title') border-danger @enderror" id="title" name="title" placeholder="Masukan judul" value="{{$contentRecap->title}}" readonly>
</div>
</div>
</div>
<div class="col-lg-6">
<div class="form-group">
<label class="form-label" for="link">Link</label>
<div class="form-control-wrap">
<input type="text" class="form-control @error('link') border-danger @enderror" id="link" name="link" placeholder="Masukan link" value="{{$contentRecap->link}}" readonly>
</div>
</div>
</div>
<div class="col-lg-6">
<div class="form-group">
<label class="form-label" for="classification">Klasifikasi</label>
<div class="form-control-wrap">
<input type="text" class="form-control @error('classification') border-danger @enderror" id="classification" name="classification" placeholder="Masukan Klasifikasi" value="{{$contentRecap->classification}}" readonly>
</div>
</div>
</div>
<div class="col-lg-6">
<div class="form-group">
<label class="form-label" for="posted_date">Tanggal Posting</label>
<div class="form-control-wrap">
<input type="text" class="form-control @error('posted_date') border-danger @enderror" id="posted_date" name="posted_date" value="{{idn_date($contentRecap->posted_date, 'd F Y')}}" readonly>
</div>
</div>
</div>
<div class="col-lg-6">
<div class="form-group">
<label class="form-label" for="channel">Kanal</label>
<div class="form-control-wrap">
<input type="text" class="form-control @error('channel') border-danger @enderror" id="channel" name="channel" value="{{ucfirst($contentRecap->channel)}}" readonly>
</div>
</div>
</div>
<div class="col-12">
<hr>
<div class="form-group d-flex justify-content-end">
<a href="{{route('dashboard.content.recaps.index')}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
<a href="{{route('dashboard.content.recaps.edit', ['id' => encrypt_id($contentRecap->id)])}}" class="btn btn-warning"><span>Ubah</span></a>
</div>
</div>
</div>
</form>
</div>
<div class="nk-block-head-content">
<a href="{{route('dashboard.content.recaps.index')}}" class="btn btn-outline-light bg-white d-none d-sm-inline-flex"><em class="icon ni ni-arrow-left"></em><span>Kembali</span></a>
<a href="{{route('dashboard.content.recaps.index')}}" class="btn btn-icon btn-outline-light bg-white d-inline-flex d-sm-none"><em class="icon ni ni-arrow-left"></em></a>
</div>
</div>
</div><!-- .nk-block-head -->
<div class="nk-block nk-block-lg">
<div class="card">
<div class="card-aside-wrap">
<div class="card-content">
<ul class="nav nav-tabs nav-tabs-mb-icon nav-tabs-card">
<li class="nav-item">
<a class="nav-link text-primary" href="javascript:void(0);"><em class="icon ni ni-info"></em><span>Detail Informasi</span></a>
</li>
<li class="nav-item nav-item-trigger d-xxl-none">
<a href="{{route('dashboard.content.recaps.edit', ['id' => encrypt_id($contentRecap->id), 'show' => true])}}" class="btn btn-icon btn-trigger"><em class="icon ni ni-edit"></em></a>
</li>
</ul><!-- .nav-tabs -->
<div class="card-inner">
<div class="nk-block">
{{-- <div class="nk-block-head">
<h5 class="title">Personal Information</h5>
<p>Basic info, like your name and address, that you use on Nio Platform.</p>
</div> --}}
<div class="profile-ud-list">
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Tema Konten</span>
<span class="profile-ud-value">{{$contentRecap->content_theme}}</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Kanal</span>
<span class="profile-ud-value">{{ucfirst($contentRecap->channel)}}</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Media Sosial</span>
<span class="profile-ud-value">{{ucfirst($contentRecap->social_media)}}</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Tanggal Posting</span>
<span class="profile-ud-value">{{idn_date($contentRecap->posted_date, 'l, d F Y')}}</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Klasifikasi</span>
<span class="profile-ud-value">{{$contentRecap->classification->name}}</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Link</span>
<span class="profile-ud-value link-show">
@if (filled($contentRecap->link))
<a href="{{$contentRecap->link}}" target="__blank">{{$contentRecap->link}}</a>
@else
{{'-'}}
@endif
</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Dibuat Pada</span>
<span class="profile-ud-value">{{idn_date($contentRecap->created_at, 'l, d F Y')}}</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Oleh</span>
<span class="profile-ud-value">{{$contentRecap->enhancer->name}}</span>
</div>
</div>
</div><!-- .profile-ud-list -->
</div><!-- .nk-block -->
{{-- <div class="nk-divider divider md"></div> --}}
<div class="nk-block">
{{-- <div class="nk-block-head nk-block-head-sm nk-block-between">
<h5 class="title">Admin Note</h5>
</div><!-- .nk-block-head --> --}}
<div id="accordion" class="accordion">
<div class="accordion-item" style="background-color: #F5F6FA;">
<a href="#" class="accordion-head collapsed" data-bs-toggle="collapse" data-bs-target="#news">
<h6 class="title"><svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-photo" style="margin-bottom: 0.2rem"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M15 8h.01" /><path d="M3 6a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v12a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3v-12z" /><path d="M3 16l5 -5c.928 -.893 2.072 -.893 3 0l5 5" /><path d="M14 14l1 -1c.928 -.893 2.072 -.893 3 0l3 3" /></svg> Gambar</h6>
<span class="accordion-icon"></span>
</a>
<div class="accordion-body collapse" id="news" data-bs-parent="#accordion">
<div class="accordion-inner">
{!! display_file('news', $contentRecap->image) !!}
</div>
</div>
</div>
</div>
</div><!-- .nk-block -->
<div class="nk-block">
<div class="nk-block-head nk-block-head-sm nk-block-between">
<span class="profile-ud-label">Deskripsi</span>
</div><!-- .nk-block-head -->
<div class="bq-note">
<div class="bq-note-item">
<div class="bq-note-text {{!filled($contentRecap->description) ? 'text-center' : ''}}">
{!! $contentRecap->description ?? '<i>Tidak ada</i>' !!}
</div>
</div><!-- .bq-note-item -->
</div><!-- .bq-note -->
</div><!-- .nk-block -->
</div><!-- .card-inner -->
</div><!-- .card-content -->
</div><!-- .card-aside-wrap -->
</div>
</div>
</div>
@ -75,4 +138,4 @@
</div>
</div>
<!-- content @e -->
@include('partials.dashboard.footer', ['rich_editor' => true])
@include('partials.dashboard.footer', ['rich_editor' => false])

View File

@ -339,6 +339,23 @@
{ data: 'created_at', name: 'created_at', visible: false },
{ data: 'id', name: 'id', orderable: true, searchable: false, visible: false },
],
columnDefs: [
{ targets: 0, width: '2%' }, // Index
{ targets: 1, width: '20%' }, // Name
{ targets: 2, width: '5%' }, // Content Recaps
{ targets: 3, width: '7%' }, // Created Date
{ targets: 4, width: '2%', className: 'text-center' }, // Action button
{
targets: [1, 2], // Title & Link
createdCell: function(td) {
$(td).css({
'white-space': 'normal',
'word-break': 'break-word',
});
}
}
],
language: datatableLanguage,
// responsive: true,
autoWidth: false,
@ -962,10 +979,16 @@
$('#contentRecapsTable').DataTable({
processing: true,
serverSide: true,
ajax: '{{ route('dashboard.content.recaps.data') }}',
ajax: {
url: '{{ route('dashboard.content.recaps.data') }}',
type: 'GET',
data: function(d) {
d.classification = '{{ $classification }}';
}
},
columns: [
{ data: 'DT_RowIndex', name: 'DT_RowIndex', orderable: false, searchable: false },
{ data: 'title', name: 'title' },
{ data: 'content_theme', name: 'content_theme' },
{ data: 'channel', name: 'channel' },
{ data: 'social_media', name: 'social_media' },
{ data: 'posted_date', name: 'posted_date' },