From 3d4afa7e1133d159cff639f678d207737efdc4f1 Mon Sep 17 00:00:00 2001 From: myuqinurrohman Date: Wed, 16 Apr 2025 09:00:51 +0700 Subject: [PATCH] chore: change show UI --- app/Exports/NewsExport.php | 33 +++++--- .../Dashboard/DatatableController.php | 3 + .../Controllers/Dashboard/NewsController.php | 29 ++++++- public/assets/dashboard/js/custom.js | 1 + .../dashboard/content-recaps/create.blade.php | 4 +- .../dashboard/content-recaps/edit.blade.php | 4 +- .../views/dashboard/news/create.blade.php | 19 ++++- resources/views/dashboard/news/edit.blade.php | 43 +++++++++- .../views/dashboard/news/index.blade.php | 12 ++- resources/views/dashboard/news/show.blade.php | 79 +++++++++++-------- .../views/partials/app/datatable.blade.php | 23 +++--- routes/web.php | 1 + 12 files changed, 179 insertions(+), 72 deletions(-) diff --git a/app/Exports/NewsExport.php b/app/Exports/NewsExport.php index 99b9cb7..1c24cd7 100644 --- a/app/Exports/NewsExport.php +++ b/app/Exports/NewsExport.php @@ -17,6 +17,7 @@ class NewsExport implements FromCollection, WithHeadings, WithStyles, WithMappin * @return \Illuminate\Support\Collection */ + protected $no = 1; protected $category; protected $year; protected $month; @@ -31,7 +32,7 @@ public function __construct($category, $year, $month, $date) } public function collection() { - $query = News::query()->select(['id', 'title', 'category', 'created_at']); + $query = News::query(); if($this->category !== 'all'){ if($this->category === 'news'){ @@ -61,18 +62,22 @@ public function collection() public function map($news): array { return [ - $news->id, + $this->no++, $news->title, + $news->link ?? 'Tidak ada', + $news->tag ?? 'Tidak ada', $news->category === '0' ? 'Berita' : 'Pengumuman', - Carbon::parse($news->created_at)->locale('id')->translatedFormat('l, d F Y') + $news->views == '0'? '0' : $news->views, + Carbon::parse($news->created_at)->locale('id')->translatedFormat('l, d F Y'), + $news->author->name, ]; } public function headings(): array { return [ - ['Data Berita', '', '', ''], - ['NO', 'Judul', 'Kategori', 'Dibuat Pada'] + ['Data Berita', '', '', '', '', '', '', ''], + ['NO', 'Judul', 'Link', 'Tag', 'Kategori', 'Dilihat', 'Dibuat Pada', 'Dibuat Oleh'] ]; } @@ -81,16 +86,20 @@ public function styles(Worksheet $sheet) $sheet->mergeCells('A1:D1'); // A1 sampai D1 digabung // Set alignment untuk pusat horizontal dan vertikal - $sheet->getStyle('A1:D1')->getAlignment()->setHorizontal('center'); - $sheet->getStyle('A1:D1')->getAlignment()->setVertical('center'); + $sheet->getStyle('A1:H1')->getAlignment()->setHorizontal('center'); + $sheet->getStyle('A1:H1')->getAlignment()->setVertical('center'); - $sheet->getColumnDimension('A')->setWidth(7); // Set column A width + $sheet->getColumnDimension('A')->setAutoSize(true); $sheet->getColumnDimension('B')->setAutoSize(true); - $sheet->getColumnDimension('C')->setWidth(15); // Set column C width - $sheet->getColumnDimension('D')->setWidth(25); // Set column D width + $sheet->getColumnDimension('C')->setAutoSize(true); + $sheet->getColumnDimension('D')->setAutoSize(true); + $sheet->getColumnDimension('E')->setAutoSize(true); + $sheet->getColumnDimension('F')->setAutoSize(true); + $sheet->getColumnDimension('G')->setAutoSize(true); + $sheet->getColumnDimension('H')->setAutoSize(true); // Menambahkan gaya lain jika diperlukan - $sheet->getStyle('A1:D1')->getFont()->setBold(true); - $sheet->getStyle('A1:D1')->getFont()->setSize(14); + $sheet->getStyle('A1:H1')->getFont()->setBold(true); + $sheet->getStyle('A1:H1')->getFont()->setSize(14); } } diff --git a/app/Http/Controllers/Dashboard/DatatableController.php b/app/Http/Controllers/Dashboard/DatatableController.php index caacbe8..ab4f79f 100644 --- a/app/Http/Controllers/Dashboard/DatatableController.php +++ b/app/Http/Controllers/Dashboard/DatatableController.php @@ -574,6 +574,9 @@ public function news(Request $request){ return 'Pengumuman'; } }) + ->addColumn('posted_at', function ($data) { + return idn_date($data->created_at, 'd F Y'); + }) ->addColumn('action', function ($data) { $showUrl = route('dashboard.news.show', ['id' => encrypt_id($data->id)]); diff --git a/app/Http/Controllers/Dashboard/NewsController.php b/app/Http/Controllers/Dashboard/NewsController.php index edcbaa0..7e2482a 100644 --- a/app/Http/Controllers/Dashboard/NewsController.php +++ b/app/Http/Controllers/Dashboard/NewsController.php @@ -16,7 +16,7 @@ class NewsController extends Controller { public function index(Request $request){ return view('dashboard.news.index', [ - 'title' => 'Berita', + 'title' => 'Data Berita', 'category' => $request->input('category', null), 'year' => $request->input('year', null), 'month' => $request->input('month', null), @@ -27,7 +27,7 @@ public function index(Request $request){ public function create(){ return view('dashboard.news.create', [ - 'title' => 'Tambah Berita' + 'title' => 'Buat Berita Baru' ]); } @@ -36,6 +36,12 @@ public function store(NewsRequest $request){ $validatedData['slug'] = Str::slug($validatedData['title']); $validatedData['author_id'] = Auth::id(); + $isNewsExists = News::where('slug', $validatedData['slug'])->first(); + + if($isNewsExists){ + return redirect()->back()->with('failed-status', 'Maaf, berita dengan judul tersebut sudah pernah ditambahkan.'); + } + if($request->has('image')){ $validatedData['image'] = store_file($validatedData['image'], '/uploads/news', 'public')['randomFileName']; } @@ -74,6 +80,12 @@ public function update(NewsRequest $request, $id){ $validatedData['slug'] = Str::slug($validatedData['title']); $validatedData['author_id'] = Auth::id(); + $isNewsExists = News::where('slug', $validatedData['slug'])->first(); + + if($isNewsExists && $isNewsExists->id !== $news->id){ + return redirect()->back()->with('failed-status', 'Maaf, berita dengan judul tersebut sudah pernah ditambahkan.'); + } + $news = News::findOrFail(decrypt_id($id)); $updatedNews = $news->update($validatedData); @@ -96,7 +108,9 @@ public function show($id){ public function destroy($id){ try { $news = News::findOrFail(decrypt_id($id)); - delete_file('app/public/uploads/news/'.$news->image); + $news->update([ + 'slug' => $news->slug.'-deleted-'. now()->timestamp + ]); $news->delete(); @@ -136,4 +150,13 @@ public function printData($slug){ return $pdf->stream('berita-'.$news->slug.'.pdf'); } + + public function checkLink(Request $request) + { + $linkExists = News::where('link', $request->link)->exists(); + + return response()->json([ + 'exists' => $linkExists + ]); + } } diff --git a/public/assets/dashboard/js/custom.js b/public/assets/dashboard/js/custom.js index 4fada11..431cb0e 100644 --- a/public/assets/dashboard/js/custom.js +++ b/public/assets/dashboard/js/custom.js @@ -80,6 +80,7 @@ $(document).ready(function () { } // Panggil fungsi untuk masing-masing input + setupLinkChecker('#newsLink', '#newsLinkFeedback', '/dashboard/news/check-link'); setupLinkChecker('#mediaMonitoringLink', '#mediaMonitoringLinkFeedback', '/dashboard/media-monitorings/check-link'); setupLinkChecker('#reportLink', '#reportLinkFeedback', '/dashboard/reports/check-link'); setupLinkChecker('#contentRecapLink', '#contentRecapLinkFeedback', '/dashboard/content-recaps/check-link'); diff --git a/resources/views/dashboard/content-recaps/create.blade.php b/resources/views/dashboard/content-recaps/create.blade.php index 13952b1..bbae5e6 100644 --- a/resources/views/dashboard/content-recaps/create.blade.php +++ b/resources/views/dashboard/content-recaps/create.blade.php @@ -91,14 +91,14 @@
- +
- @error('posted_date') + @error('image') {{$message}} @enderror
diff --git a/resources/views/dashboard/content-recaps/edit.blade.php b/resources/views/dashboard/content-recaps/edit.blade.php index 170cf8d..08e6cbd 100644 --- a/resources/views/dashboard/content-recaps/edit.blade.php +++ b/resources/views/dashboard/content-recaps/edit.blade.php @@ -94,14 +94,14 @@
- +
- @error('posted_date') + @error('image') {{$message}} @enderror
diff --git a/resources/views/dashboard/news/create.blade.php b/resources/views/dashboard/news/create.blade.php index 0edebcf..738b010 100644 --- a/resources/views/dashboard/news/create.blade.php +++ b/resources/views/dashboard/news/create.blade.php @@ -10,7 +10,10 @@
-
{{$title}}
+
+
Buat Berita Baru
+

Masukkan informasi untuk membuat berita/pengumuman baru.

+
@csrf @@ -30,7 +33,8 @@
- + +
@error('link') {{$message}} @@ -46,6 +50,9 @@
+ @error('category') + {{$message}} + @enderror
@@ -63,7 +70,10 @@
- +
+ + +
@error('image') {{$message}} @@ -73,6 +83,9 @@
+ @error('content') + {{$message}} + @enderror
diff --git a/resources/views/dashboard/news/edit.blade.php b/resources/views/dashboard/news/edit.blade.php index 4620abe..a35a821 100644 --- a/resources/views/dashboard/news/edit.blade.php +++ b/resources/views/dashboard/news/edit.blade.php @@ -10,7 +10,10 @@
-
{{$title}}
+
+
Ubah Berita
+

Perbarui informasi berita atau pengumuman yang telah dipublikasikan.

+
@csrf @@ -47,6 +50,9 @@
+ @error('category') + {{$message}} + @enderror
@@ -62,9 +68,22 @@
- +
- +
+ + +
@error('image') {{$message}} @@ -74,6 +93,9 @@
+ @error('content') + {{$message}} + @enderror
@@ -92,6 +114,21 @@
+
diff --git a/resources/views/dashboard/news/index.blade.php b/resources/views/dashboard/news/index.blade.php index 6e59b34..4f72631 100644 --- a/resources/views/dashboard/news/index.blade.php +++ b/resources/views/dashboard/news/index.blade.php @@ -17,12 +17,19 @@
  • -
    + @if (filled(value: $category) ||filled($year) || filled($month) || filled($date)) + + + + + + @endif +
  • -
    +
  • @@ -45,6 +52,7 @@ Link Kategori Tag + Dibuat diff --git a/resources/views/dashboard/news/show.blade.php b/resources/views/dashboard/news/show.blade.php index 0b68e45..46d18ae 100644 --- a/resources/views/dashboard/news/show.blade.php +++ b/resources/views/dashboard/news/show.blade.php @@ -6,13 +6,29 @@
    +
    +
    +
    +

    Detail Berita

    +
    +
      +
    • Detail berita dapat dilihat di sini.
    • +
    +
    +
    +
    + Kembali + +
    +
    +
    @@ -54,21 +70,15 @@
    - Gambar - - @if (filled($news->image)) - Lihat gambar - @else - Tidak ada gambar - @endif - + Tag + {{$news->tag}}
    Dilihat - {{$news->viewers ?? '-'}} + {{$news->views}}
    @@ -78,9 +88,33 @@ {{idn_date($news->created_at, 'l, d F Y')}}
    +
    +
    + Dibuat Oleh + {{$news->author->name}} +
    +
    {{--
    --}} +
    + {{--
    +
    Admin Note
    +
    --}} +
    +
    + +
    +
    + {!! display_file('news', $news->image) !!} +
    +
    +
    +
    +
    Konten @@ -93,35 +127,10 @@
    -
    -
    - Kembali - @if (!filled($news->deleted_at)) - Ubah - @endif -
-
diff --git a/resources/views/partials/app/datatable.blade.php b/resources/views/partials/app/datatable.blade.php index aeb4fc9..228d433 100644 --- a/resources/views/partials/app/datatable.blade.php +++ b/resources/views/partials/app/datatable.blade.php @@ -332,23 +332,26 @@ { data: 'link', name: 'link' }, { data: 'category', name: 'category' }, { data: 'tag', name: 'tag' }, + { data: 'posted_at', name: 'posted_at' }, { data: 'action', name: 'action', orderable: false, searchable: false }, { data: 'created_at', name: 'created_at', visible: false }, { data: 'id', name: 'id', orderable: true, searchable: false, visible: false }, ], columnDefs: [ - { targets: 0, width: 'auto' }, - // { targets: 2, width: '10%' }, - { targets: 3, width: '10%' }, - { targets: 4, width: '12%' }, - { targets: 5, width: '7%' }, + { targets: 0, width: '5%' }, // Index + { targets: 1, width: '25%' }, // Title + { targets: 2, width: '15%' }, // Link + { targets: 3, width: '7%' }, // Category + { targets: 4, width: '10%' }, // Tag + { targets: 5, width: '7%' }, // Dibuat + { targets: 6, width: '2%', className: 'text-center' }, // Action button + { - targets: [1,2], - createdCell: function(td, cellData, rowData, row, col) { + targets: [1, 2], // Title & Link + createdCell: function(td) { $(td).css({ - 'word-wrap': 'break-word', 'white-space': 'normal', - 'overflow-wrap': 'break-word' + 'word-break': 'break-word', }); } } @@ -356,7 +359,7 @@ language: datatableLanguage, // responsive: true, autoWidth: false, - order: [[6, 'desc']], + order: [[7, 'desc']], pagingType: "simple", lengthMenu: [[10, 25, 50, 100, -1], ['Tampilkan 10 data', 'Tampilkan 25 data', 'Tampilkan 50 data', 'Tampilkan 100 data', 'Tampilkan semua']], scrollX: true diff --git a/routes/web.php b/routes/web.php index e2f1385..31a76bc 100644 --- a/routes/web.php +++ b/routes/web.php @@ -176,6 +176,7 @@ Route::get('/', 'index')->name('index'); Route::get('/{id}/show', 'show')->name('show'); Route::get('/create', 'create')->name('create'); + Route::post('/check-link', 'checkLink')->name('check.link'); Route::post('/', 'store')->name('store'); Route::get('/{id}/edit', 'edit')->name('edit'); Route::put('/{id}', 'update')->name('update');