feat: content recap
This commit is contained in:
parent
5d28f9c982
commit
61f3f862c5
@ -1,6 +1,7 @@
|
||||
<?php
|
||||
|
||||
use App\Settings\AppSettings;
|
||||
use Carbon\Carbon;
|
||||
use Hashids\Hashids;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\File;
|
||||
@ -106,3 +107,10 @@ function decrypt_id($hash)
|
||||
return $result ? $result[0] : null;
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('idn_date')) {
|
||||
function idn_date($tanggal, $format = 'd F Y')
|
||||
{
|
||||
return Carbon::parse($tanggal)->locale('id')->translatedFormat($format);
|
||||
}
|
||||
}
|
||||
|
||||
82
app/Http/Controllers/Dashboard/ContentRecapController.php
Normal file
82
app/Http/Controllers/Dashboard/ContentRecapController.php
Normal file
@ -0,0 +1,82 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Dashboard;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\ContentRecapRequest;
|
||||
use App\Models\ContentRecap;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class ContentRecapController extends Controller
|
||||
{
|
||||
public function index(){
|
||||
return view('dashboard.content-recaps.index', [
|
||||
'title' => 'Rekap Konten'
|
||||
]);
|
||||
}
|
||||
|
||||
public function create(){
|
||||
return view('dashboard.content-recaps.create', [
|
||||
'title' => 'Tambah Rekap Konten'
|
||||
]);
|
||||
}
|
||||
|
||||
public function store(ContentRecapRequest $request){
|
||||
$validatedData = $request->validated();
|
||||
$validatedData['enhancer_id'] = Auth::id();
|
||||
|
||||
$createdContentRecap = ContentRecap::create($validatedData);
|
||||
|
||||
if($createdContentRecap){
|
||||
return redirect()->back()->with('success-status', 'Berhasil menambahkan rekap konten.');
|
||||
}else{
|
||||
return redirect()->back()->with('failed-status', 'Gagal menambahkan rekap konten.');
|
||||
}
|
||||
}
|
||||
|
||||
public function edit($id){
|
||||
$contentRecap = ContentRecap::findOrFail(decrypt_id($id));
|
||||
|
||||
return view('dashboard.content-recaps.edit', [
|
||||
'title' => 'Ubah Rekap Konten',
|
||||
'contentRecap' => $contentRecap
|
||||
]);
|
||||
}
|
||||
|
||||
public function update(ContentRecapRequest $request, $id){
|
||||
$validatedData = $request->validated();
|
||||
$validatedData['enhancer_id'] = Auth::id();
|
||||
|
||||
$contentRecap = ContentRecap::findOrFail(decrypt_id($id));
|
||||
$updatedContentRecap = $contentRecap->update($validatedData);
|
||||
|
||||
if($updatedContentRecap){
|
||||
return redirect()->back()->with('success-status', 'Berhasil mengubah rekap konten.');
|
||||
}else{
|
||||
return redirect()->back()->with('failed-status', 'Gagal mengubah rekap konten.');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function show($id){
|
||||
$contentRecap = ContentRecap::findOrFail(decrypt_id($id));
|
||||
|
||||
return view('dashboard.content-recaps.show', [
|
||||
'title' => 'Detail Rekap Konten',
|
||||
'contentRecap' => $contentRecap
|
||||
]);
|
||||
}
|
||||
|
||||
public function destroy($id){
|
||||
try {
|
||||
$contentRecap = ContentRecap::findOrFail(decrypt_id($id));
|
||||
|
||||
$contentRecap->delete();
|
||||
|
||||
return response()->json(['message' => 'Berhasil menghapus rekap konten.']);
|
||||
} catch (\Exception $e) {
|
||||
return response()->json(['message' => 'Gagal menghapus rekap konten.'], 500);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -5,6 +5,7 @@
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\AiringProofTheme;
|
||||
use App\Models\Classification;
|
||||
use App\Models\ContentRecap;
|
||||
use App\Models\GovernmentAgency;
|
||||
use App\Models\News;
|
||||
use App\Models\SubClassification;
|
||||
@ -12,6 +13,7 @@
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use SebastianBergmann\Type\TrueType;
|
||||
use Yajra\DataTables\DataTables;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class DatatableController extends Controller
|
||||
{
|
||||
@ -293,4 +295,57 @@ public function airingProofTheme(Request $request){
|
||||
return response()->json(['error' => 'Unauthorized'], 401);
|
||||
|
||||
}
|
||||
|
||||
public function contentRecap(Request $request){
|
||||
if ($request->ajax()) {
|
||||
|
||||
$data = ContentRecap::all();
|
||||
|
||||
return DataTables::of($data)
|
||||
->addIndexColumn()
|
||||
->addColumn('channel', function ($data){
|
||||
return Str::ucfirst($data->channel);
|
||||
})
|
||||
->addColumn('posted_date', function ($data){
|
||||
return idn_date($data->posted_date, 'd F Y');
|
||||
})
|
||||
->addColumn('link', function ($data){
|
||||
return '<a href="'.$data->link.'" target="_blank">'.$data->link.'</a>';
|
||||
})
|
||||
->addColumn('action', function ($data) {
|
||||
$showUrl = route('dashboard.content.recaps.show', ['id' => encrypt_id($data->id)]);
|
||||
|
||||
$editUrl = route('dashboard.content.recaps.edit', ['id' => encrypt_id($data->id)]);
|
||||
|
||||
$deleteUrl = route('dashboard.content.recaps.destroy', ['id' => encrypt_id($data->id)]);
|
||||
|
||||
$dropdown = '<div class="dropdown" style="display:flex; justify-content:center;">
|
||||
<a class="dropdown-toggle btn btn-icon btn-light" data-bs-toggle="dropdown"><em class="icon ni ni-more-v"></em></a>
|
||||
<div class="dropdown-menu dropdown-menu-end">
|
||||
<ul class="link-list-opt">
|
||||
<li><a href="'.$showUrl.'"><em class="icon ni ni-eye"></em><span>Detail</span></a></li>';
|
||||
|
||||
if (is_role([1])) {
|
||||
$dropdown .= '<li><a href="'.$editUrl.'"><em class="icon ni ni-edit"></em><span>Ubah</span></a></li>';
|
||||
}
|
||||
|
||||
if (is_role([1])) {
|
||||
$dropdown .= '<li><a href="javascript:void(0);" onclick="deleteItem(\''.$deleteUrl.'\', \'Apakah Anda yakin ingin menghapus rekap konten '.$data->title.'? Item ini akan dihapus secara permanen!\')"><em class="icon ni ni-trash"></em><span>Hapus</span></a></li>';
|
||||
|
||||
}
|
||||
|
||||
$dropdown .= '</ul>
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
return $dropdown;
|
||||
})
|
||||
|
||||
->rawColumns(['link', 'action'])
|
||||
->make(true);
|
||||
}
|
||||
|
||||
return response()->json(['error' => 'Unauthorized'], 401);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
48
app/Http/Requests/ContentRecapRequest.php
Normal file
48
app/Http/Requests/ContentRecapRequest.php
Normal file
@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class ContentRecapRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*/
|
||||
public function authorize(): bool
|
||||
{
|
||||
return Auth::check() && is_role(['1','2']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
|
||||
*/
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
'title' => ['required'],
|
||||
'posted_date' => ['required', 'date'],
|
||||
'channel'=> ['required', 'in:website,tiktok,youtube,instagram,facebook,twitter,cetak'],
|
||||
'link' => ['required', 'url'],
|
||||
'classification' => ['required'],
|
||||
];
|
||||
}
|
||||
|
||||
public function messages()
|
||||
{
|
||||
return [
|
||||
'title.required' => 'Judul wajib diisi.',
|
||||
'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.',
|
||||
'link.required' => 'Link wajib diisi.',
|
||||
'link.url' => 'Link harus berupa URL yang valid.',
|
||||
'classification.required' => 'Klasifikasi wajib diisi.',
|
||||
];
|
||||
}
|
||||
|
||||
}
|
||||
24
app/Models/ContentRecap.php
Normal file
24
app/Models/ContentRecap.php
Normal file
@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class ContentRecap extends Model
|
||||
{
|
||||
protected $table = 'content_recaps';
|
||||
|
||||
protected $fillable = [
|
||||
'title',
|
||||
'posted_date',
|
||||
'channel',
|
||||
'link',
|
||||
'classification',
|
||||
'enhancer_id',
|
||||
];
|
||||
|
||||
public function enhancer()
|
||||
{
|
||||
return $this->belongsTo(User::class, 'enhancer_id', 'id');
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('content_recaps', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('title');
|
||||
$table->date('posted_date');
|
||||
$table->enum('channel', ['website', 'tiktok', 'youtube', 'instagram', 'facebook', 'twitter', 'cetak']);
|
||||
$table->string('link');
|
||||
$table->string('classification');
|
||||
$table->unsignedBigInteger('enhancer_id');
|
||||
$table->foreign('enhancer_id')->references('id')->on('users');
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('content_recaps');
|
||||
}
|
||||
};
|
||||
17
database/seeders/ContentRecapSeeder.php
Normal file
17
database/seeders/ContentRecapSeeder.php
Normal file
@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class ContentRecapSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
98
resources/views/dashboard/content-recaps/create.blade.php
Normal file
98
resources/views/dashboard/content-recaps/create.blade.php
Normal file
@ -0,0 +1,98 @@
|
||||
@include('partials.dashboard.head')
|
||||
@include('partials.dashboard.sidebar', ['page' => 'content_recaps'])
|
||||
@include('partials.dashboard.header')
|
||||
<!-- content @s -->
|
||||
<div class="nk-content ">
|
||||
<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>
|
||||
@foreach ($errors->all() as $item)
|
||||
{{$item}}
|
||||
@endforeach
|
||||
<form action="{{route('dashboard.content.recaps.store')}}" 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<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')}}">
|
||||
</div>
|
||||
@error('title')
|
||||
<span class="validation-error">{{$message}}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<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="{{old('link')}}">
|
||||
</div>
|
||||
@error('link')
|
||||
<span class="validation-error">{{$message}}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="classification">Klasifikasi<span class="required-input">*</span></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="{{old('classification')}}">
|
||||
</div>
|
||||
@error('classification')
|
||||
<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')}}">
|
||||
</div>
|
||||
@error('posted_date')
|
||||
<span class="validation-error">{{$message}}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="form-group">
|
||||
<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="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>
|
||||
<option value="instagram" {{old('channel') == 'instagram' ? 'selected' : ''}}>Instagram</option>
|
||||
<option value="facebook" {{old('channel') == 'facebook' ? 'selected' : ''}}>Facebook</option>
|
||||
<option value="twitter" {{old('channel') == 'twitter' ? 'selected' : ''}}>Twitter</option>
|
||||
<option value="cetak" {{old('channel') == 'cetak' ? 'selected' : ''}}>Cetak</option>
|
||||
</select>
|
||||
</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>
|
||||
<button type="submit" class="btn btn-md btn-primary">Tambahkan</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- content @e -->
|
||||
@include('partials.dashboard.footer', ['rich_editor' => true])
|
||||
99
resources/views/dashboard/content-recaps/edit.blade.php
Normal file
99
resources/views/dashboard/content-recaps/edit.blade.php
Normal file
@ -0,0 +1,99 @@
|
||||
@include('partials.dashboard.head')
|
||||
@include('partials.dashboard.sidebar', ['page' => 'content_recaps'])
|
||||
@include('partials.dashboard.header')
|
||||
<!-- content @s -->
|
||||
<div class="nk-content ">
|
||||
<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>
|
||||
@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">
|
||||
@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>
|
||||
<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}}">
|
||||
</div>
|
||||
@error('title')
|
||||
<span class="validation-error">{{$message}}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<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}}">
|
||||
</div>
|
||||
@error('link')
|
||||
<span class="validation-error">{{$message}}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="classification">Klasifikasi<span class="required-input">*</span></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}}">
|
||||
</div>
|
||||
@error('classification')
|
||||
<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="{{$contentRecap->posted_date}}">
|
||||
</div>
|
||||
@error('posted_date')
|
||||
<span class="validation-error">{{$message}}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="form-group">
|
||||
<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="website" {{$contentRecap->channel == 'website' ? 'selected' : ''}}>Website</option>
|
||||
<option value="tiktok" {{$contentRecap->channel == 'tiktok' ? 'selected' : ''}}>Tiktok</option>
|
||||
<option value="youtube" {{$contentRecap->channel == 'youtube' ? 'selected' : ''}}>YouTube</option>
|
||||
<option value="instagram" {{$contentRecap->channel == 'instagram' ? 'selected' : ''}}>Instagram</option>
|
||||
<option value="facebook" {{$contentRecap->channel == 'facebook' ? 'selected' : ''}}>Facebook</option>
|
||||
<option value="twitter" {{$contentRecap->channel == 'twitter' ? 'selected' : ''}}>Twitter</option>
|
||||
<option value="cetak" {{$contentRecap->channel == 'cetak' ? 'selected' : ''}}>Cetak</option>
|
||||
</select>
|
||||
</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>
|
||||
<button type="submit" class="btn btn-md btn-primary">Simpan</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- content @e -->
|
||||
@include('partials.dashboard.footer', ['rich_editor' => true])
|
||||
64
resources/views/dashboard/content-recaps/index.blade.php
Normal file
64
resources/views/dashboard/content-recaps/index.blade.php
Normal file
@ -0,0 +1,64 @@
|
||||
@include('partials.dashboard.head')
|
||||
@include('partials.dashboard.sidebar', ['page' => 'content_recaps'])
|
||||
@include('partials.dashboard.header')
|
||||
<!-- content @s -->
|
||||
<div class="nk-content ">
|
||||
<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">
|
||||
<div class="nk-block-head-content">
|
||||
<h3 class="nk-block-title page-title">{{$title}}</h3>
|
||||
</div><!-- .nk-block-head-content -->
|
||||
<div class="nk-block-head-content">
|
||||
<div class="toggle-wrap nk-block-tools-toggle">
|
||||
<a href="#" class="btn btn-icon btn-trigger toggle-expand me-n1" data-target="pageMenu"><em class="icon ni ni-more-v"></em></a>
|
||||
<div class="toggle-expand-content" data-content="pageMenu">
|
||||
<ul class="nk-block-tools g-3">
|
||||
{{-- <li>
|
||||
<div class="drodown">
|
||||
<a href="#" class="dropdown-toggle btn btn-white btn-dim btn-outline-light" data-bs-toggle="dropdown"><em class="d-none d-sm-inline icon ni ni-calender-date"></em><span><span class="d-none d-md-inline">Last</span> 30 Days</span><em class="dd-indc icon ni ni-chevron-right"></em></a>
|
||||
<div class="dropdown-menu dropdown-menu-end">
|
||||
<ul class="link-list-opt no-bdr">
|
||||
<li><a href="#"><span>Last 30 Days</span></a></li>
|
||||
<li><a href="#"><span>Last 6 Months</span></a></li>
|
||||
<li><a href="#"><span>Last 1 Years</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</li> --}}
|
||||
<li class="nk-block-tools-opt"><a href="{{route('dashboard.content.recaps.create')}}" class="btn btn-primary"><em class="icon ni ni-plus"></em><span>Tambah</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- .nk-block-head-content -->
|
||||
</div><!-- .nk-block-between -->
|
||||
</div><!-- .nk-block-head -->
|
||||
<div class="nk-block nk-block-lg">
|
||||
<div class="card card-bordered card-preview">
|
||||
<div class="card-inner">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped table-bordered nowrap" id="contentRecapsTable" border="1">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 10% !important;">No</th>
|
||||
<th>Judul</th>
|
||||
<th>Kanal</th>
|
||||
<th>Tanggal Posting</th>
|
||||
<th>Klasifikasi</th>
|
||||
<th>Link</th>
|
||||
<th style="width: 10% !important;"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- content @e -->
|
||||
@include('partials.dashboard.footer' ,['datatable' => 'content_recap'])
|
||||
78
resources/views/dashboard/content-recaps/show.blade.php
Normal file
78
resources/views/dashboard/content-recaps/show.blade.php
Normal file
@ -0,0 +1,78 @@
|
||||
@include('partials.dashboard.head')
|
||||
@include('partials.dashboard.sidebar', ['page' => 'content_recaps'])
|
||||
@include('partials.dashboard.header')
|
||||
<!-- content @s -->
|
||||
<div class="nk-content ">
|
||||
<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>
|
||||
@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>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- content @e -->
|
||||
@include('partials.dashboard.footer', ['rich_editor' => true])
|
||||
@ -137,3 +137,29 @@
|
||||
});
|
||||
</script>
|
||||
@endif
|
||||
|
||||
@if ($datatable === 'content_recap')
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('#contentRecapsTable').DataTable({
|
||||
processing: true,
|
||||
serverSide: true,
|
||||
ajax: '{{ route('dashboard.content.recaps.data') }}',
|
||||
columns: [
|
||||
{ data: 'DT_RowIndex', name: 'DT_RowIndex', orderable: false, searchable: false },
|
||||
{ data: 'title', name: 'title' },
|
||||
{ data: 'channel', name: 'channel' },
|
||||
{ data: 'posted_date', name: 'posted_date' },
|
||||
{ data: 'classification', name: 'classification' },
|
||||
{ data: 'link', name: 'link' },
|
||||
{ data: 'action', name: 'action', orderable: false, searchable: false },
|
||||
{ data: 'id', name: 'id', orderable: true, searchable: false, visible: false },
|
||||
],
|
||||
language: datatableLanguage,
|
||||
autoWidth: false,
|
||||
order: [[1, 'desc']],
|
||||
lengthMenu: [[10, 25, 50, 100, -1], ['Tampilkan 10 data', 'Tampilkan 25 data', 'Tampilkan 50 data', 'Tampilkan 100 data', 'Tampilkan semua']]
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endif
|
||||
|
||||
@ -139,7 +139,7 @@
|
||||
<h6 class="overline-title text-primary-alt">Monitoring</h6>
|
||||
</li><!-- .nk-menu-item -->
|
||||
<li class="nk-menu-item">
|
||||
<a href="javascript:void(0);" class="nk-menu-link">
|
||||
<a href="{{route('dashboard.content.recaps.index')}}" class="nk-menu-link {{$page === 'content_recaps' ? 'active-page' : ''}}">
|
||||
<span class="nk-menu-icon"><em class="icon ni ni-list-check"></em></span>
|
||||
<span class="nk-menu-text">Rekap Konten</span>
|
||||
</a>
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
use App\Http\Controllers\AuthController;
|
||||
use App\Http\Controllers\Dashboard\AiringProofThemeController;
|
||||
use App\Http\Controllers\Dashboard\ClassificationController;
|
||||
use App\Http\Controllers\Dashboard\ContentRecapController;
|
||||
use App\Http\Controllers\Dashboard\DatatableController;
|
||||
use App\Http\Controllers\Dashboard\GovernmentAgencyController;
|
||||
use App\Http\Controllers\Dashboard\NewsController;
|
||||
@ -111,5 +112,19 @@
|
||||
Route::put('/', 'update')->name('update');
|
||||
});
|
||||
});
|
||||
|
||||
Route::prefix('content-recaps')->name('content.recaps.')->group(function(){
|
||||
Route::controller(ContentRecapController::class)->group(function(){
|
||||
Route::get('/', 'index')->name('index');
|
||||
Route::get('/create', 'create')->name('create');
|
||||
Route::post('/', 'store')->name('store');
|
||||
Route::get('/{id}/show', 'show')->name('show');
|
||||
Route::get('/{id}/edit', 'edit')->name('edit');
|
||||
Route::put('/{id}', 'update')->name('update');
|
||||
Route::delete('/{id}', 'destroy')->name('destroy');
|
||||
});
|
||||
|
||||
Route::get('/data', [DatatableController::class, 'contentRecap'])->name('data');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Loading…
Reference in New Issue
Block a user