From 06d815919d4fcae073ac815743270e44fd00ef37 Mon Sep 17 00:00:00 2001 From: Ahmad Afandi Date: Tue, 1 Sep 2026 14:07:19 +0700 Subject: [PATCH] perbaikan potensi --- .../Controllers/FrontEnd/PageController.php | 78 ++++++++----------- app/Http/Requests/KirimBalasanRequest.php | 25 ++++++ app/Http/Requests/KirimKomentarRequest.php | 24 ++++++ app/Repositories/PotensiApiRepository.php | 1 + routes/web.php | 2 +- .../views/pages/potensi/index.blade.php | 4 +- .../views/pages/potensi/show.blade.php | 4 +- 7 files changed, 87 insertions(+), 51 deletions(-) create mode 100644 app/Http/Requests/KirimBalasanRequest.php create mode 100644 app/Http/Requests/KirimKomentarRequest.php diff --git a/app/Http/Controllers/FrontEnd/PageController.php b/app/Http/Controllers/FrontEnd/PageController.php index ac9d8eb89a..b665d330a2 100644 --- a/app/Http/Controllers/FrontEnd/PageController.php +++ b/app/Http/Controllers/FrontEnd/PageController.php @@ -34,6 +34,8 @@ use App\Enums\SurveiEnum; use App\Facades\Counter; use App\Http\Controllers\FrontEndController; +use App\Http\Requests\KirimBalasanRequest; +use App\Http\Requests\KirimKomentarRequest; use App\Http\Requests\SurveiRequest; use App\Models\Artikel; use App\Models\Comment; @@ -41,15 +43,18 @@ use App\Models\Kategori; use App\Models\Survei; use App\Services\DesaService; +use Illuminate\Http\JsonResponse; +use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\Session; +use Illuminate\View\View; use Jenssegers\Agent\Agent; class PageController extends FrontEndController { protected $data = []; - public function index() + public function index(): View { Counter::count('beranda'); @@ -65,7 +70,7 @@ public function index() ]); } - public function beritaDesa() + public function beritaDesa(): View { if ($this->isDatabaseGabungan()) { $apiServer = $this->settings['api_server_database_gabungan'] ?? ''; @@ -94,13 +99,7 @@ public function beritaDesa() ]); } - private function getFeeds() - { - $feeds = (new DesaService())->getFeeds(); - return $feeds ?? null; - } - - public function filterFeeds(Request $request) + public function filterFeeds(Request $request): JsonResponse { $this->data = $this->getFeeds(); $feeds = collect($this->data); @@ -141,7 +140,7 @@ public function filterFeeds(Request $request) return response()->json(compact('html')); } - public function PotensiByKategory($slug) + public function PotensiByKategory(string $slug): View { $page_title = 'Potensi'; $page_description = 'Potensi-Potensi'; @@ -149,15 +148,15 @@ public function PotensiByKategory($slug) return view('pages.potensi.index', compact(['page_title', 'page_description', 'slug'])); } - public function PotensiShow($kategori, $slug) + public function PotensiShow(string $kategori, string $id): View { $page_title = 'Potensi'; $page_description = 'Potensi-Potensi Kecamatan'; - return view('pages.potensi.show', compact(['page_title', 'page_description', 'slug'])); + return view('pages.potensi.show', compact(['page_title', 'page_description', 'id'])); } - public function DesaShow($slug) + public function DesaShow(string $slug): View { $desa = (new DesaService)->dataDesa($slug); $page_title = 'Desa '.$desa->nama; @@ -166,12 +165,12 @@ public function DesaShow($slug) return view('pages.desa.desa_show', compact('page_title', 'page_description', 'desa')); } - public function refresh_captcha() + public function refresh_captcha(): JsonResponse { return response()->json(['captcha' => captcha_img('mini')]); } - public function kategoriBerita($slug) + public function kategoriBerita(string $slug): View { $kategori = Kategori::where('slug', $slug)->firstOrFail(); $artikel = Artikel::whereRelation('kategori', 'slug', $slug)->paginate(9); @@ -179,7 +178,7 @@ public function kategoriBerita($slug) return view('pages.berita.kategori', compact('artikel', 'kategori')); } - public function detailBerita($slug, Request $request) + public function detailBerita(string $slug, Request $request): View { // Temukan artikel berdasarkan slug $artikel = Artikel::with(['kategori', 'comments' => function ($query) use ($request) { @@ -214,18 +213,8 @@ public function detailBerita($slug, Request $request) return view('pages.berita.detail', compact('page_title', 'page_description', 'page_image', 'artikel', 'comments')); } - public function kirimKomentar(Request $request) + public function kirimKomentar(KirimKomentarRequest $request): RedirectResponse { - - // Validasi input - $validated = $request->validate([ - 'nama' => 'required|string|max:255', - 'email' => 'required|email|max:255', - 'body' => 'required|string', - 'das_artikel_id' => 'required|exists:das_artikel,id', - 'captcha_main' => 'required|captcha', - ]); - try { // Mendeteksi IP address $ipAddress = $request->ip(); @@ -241,11 +230,11 @@ public function kirimKomentar(Request $request) // Simpan komentar baru $comment = Comment::create([ - 'nama' => $validated['nama'], - 'email' => $validated['email'], - 'body' => $validated['body'], + 'nama' => $request->nama, + 'email' => $request->email, + 'body' => $request->body, 'status' => 'disable', // Set status default ke 'disable' untuk moderasi - 'das_artikel_id' => $validated['das_artikel_id'], + 'das_artikel_id' => $request->das_artikel_id, 'comment_id' => $request->input('comment_id', null), // Jika ini adalah balasan 'ip_address' => $ipAddress, 'device' => $deviceInfo, @@ -262,7 +251,7 @@ public function kirimKomentar(Request $request) } } - public function modalKirimBalasan(Request $request) + public function modalKirimBalasan(Request $request): View { $commentId = $request->input('comment_id'); $artikelId = $request->input('artikel_id'); @@ -270,17 +259,8 @@ public function modalKirimBalasan(Request $request) return view('pages.berita.comment', compact('commentId', 'artikelId')); } - public function kirimBalasan(Request $request) + public function kirimBalasan(KirimBalasanRequest $request): RedirectResponse { - $request->validate([ - 'nama' => 'required|string|max:255', - 'email' => 'required|email|max:255', - 'body' => 'required|string', - 'captcha_main' => 'required|captcha', - 'das_artikel_id' => 'required|exists:das_artikel,id', // Pastikan artikel terkait ada - 'comment_id' => 'required|exists:das_artikel_comment,id', // Pastikan comment_id ada - ]); - try { // Mendeteksi IP address $ipAddress = $request->ip(); @@ -314,7 +294,7 @@ public function kirimBalasan(Request $request) } } - public function eventDetail($slug) + public function eventDetail(string $slug): View { $event = Event::slug($slug)->firstOrFail(); $page_title = $event->event_name; @@ -323,7 +303,7 @@ public function eventDetail($slug) return view('pages.event.event_detail', compact('page_title', 'page_description', 'event')); } - public function kategori($slug) + public function kategori(string $slug): View { return view('pages.berita.kategori', [ 'apiBaseKategori' => url($this->urlApi.'/kategori?'.http_build_query([ @@ -341,7 +321,7 @@ public function kategori($slug) } // fitur survey indeks kepuasan pengguna terhadap penyajian informasi yang tersedia di website - public function survei() + public function survei(): View { $page_title = 'Index Kepuasan Masyarakat'; @@ -360,7 +340,7 @@ public function survei() return view('pages.ikm.index', compact('page_title', 'results')); } - public function surveiSubmit(SurveiRequest $request) + public function surveiSubmit(SurveiRequest $request): RedirectResponse { // Cek ulang session untuk keamanan if (Session::has('survey_submitted')) { @@ -381,4 +361,10 @@ public function surveiSubmit(SurveiRequest $request) return redirect()->back()->with('success', 'Terima kasih atas tanggapan Anda!'); } + + private function getFeeds(): ?array + { + $feeds = (new DesaService())->getFeeds(); + return $feeds ?? null; + } } diff --git a/app/Http/Requests/KirimBalasanRequest.php b/app/Http/Requests/KirimBalasanRequest.php new file mode 100644 index 0000000000..3222c562f5 --- /dev/null +++ b/app/Http/Requests/KirimBalasanRequest.php @@ -0,0 +1,25 @@ + 'required|string|max:255', + 'email' => 'required|email|max:255', + 'body' => 'required|string', + 'captcha_main' => 'required|captcha', + 'das_artikel_id' => 'required|exists:das_artikel,id', + 'comment_id' => 'required|exists:das_artikel_comment,id', + ]; + } +} diff --git a/app/Http/Requests/KirimKomentarRequest.php b/app/Http/Requests/KirimKomentarRequest.php new file mode 100644 index 0000000000..15a12539f2 --- /dev/null +++ b/app/Http/Requests/KirimKomentarRequest.php @@ -0,0 +1,24 @@ + 'required|string|max:255', + 'email' => 'required|email|max:255', + 'body' => 'required|string', + 'das_artikel_id' => 'required|exists:das_artikel,id', + 'captcha_main' => 'required|captcha', + ]; + } +} diff --git a/app/Repositories/PotensiApiRepository.php b/app/Repositories/PotensiApiRepository.php index f159cabf64..21557cd6a1 100644 --- a/app/Repositories/PotensiApiRepository.php +++ b/app/Repositories/PotensiApiRepository.php @@ -20,6 +20,7 @@ public function __construct(Potensi $model) AllowedFilter::exact('kategori_id'), AllowedFilter::exact('id'), AllowedFilter::exact('tipe.id'), + AllowedFilter::exact('tipe.slug'), ]; $this->allowedSorts = [ 'id', diff --git a/routes/web.php b/routes/web.php index 0d00b9ed4c..4d8f7d0fb1 100644 --- a/routes/web.php +++ b/routes/web.php @@ -235,7 +235,7 @@ Route::group(['prefix' => 'potensi'], function () { Route::permanentRedirect('/', '/'); Route::get('{slug}', 'PageController@PotensiByKategory')->name('potensi.kategori'); - Route::get('{kategori}/{slug}', 'PageController@PotensiShow')->name('potensi.kategori.show'); + Route::get('{kategori}/{id}', 'PageController@PotensiShow')->name('potensi.kategori.show'); }); Route::any('refresh-captcha', 'PageController@refresh_captcha')->name('refresh-captcha'); diff --git a/themes/opendk/default/resources/views/pages/potensi/index.blade.php b/themes/opendk/default/resources/views/pages/potensi/index.blade.php index 8b4762071a..27cdc7c582 100644 --- a/themes/opendk/default/resources/views/pages/potensi/index.blade.php +++ b/themes/opendk/default/resources/views/pages/potensi/index.blade.php @@ -44,11 +44,11 @@ function renderPotensi(items) { '
' + (potensi.nama_potensi || '') + '
' + '' + '
' + - '

' + (potensi.nama_potensi || '') + '

' + + '

' + (potensi.nama_potensi || '') + '

' + '
' + (potensi.deskripsi ? (potensi.deskripsi.length > 300 ? potensi.deskripsi.substring(0, 300) + ' ...' : potensi.deskripsi) : '') + '' + '
' + '
' + diff --git a/themes/opendk/default/resources/views/pages/potensi/show.blade.php b/themes/opendk/default/resources/views/pages/potensi/show.blade.php index 617ef1a1b4..f1497170dd 100644 --- a/themes/opendk/default/resources/views/pages/potensi/show.blade.php +++ b/themes/opendk/default/resources/views/pages/potensi/show.blade.php @@ -23,9 +23,9 @@ $(function(){ // Function to load potensi detail from API function loadPotensiDetail() { - // Make API call to get potensi by slug + // Make API call to get potensi by id $.ajax({ - url: '{!! $urlApi !!}/potensi?filter[slug]={!! $slug !!}', + url: '{!! $urlApi !!}/potensi?filter[id]={!! $id !!}', method: 'GET', success: function(response) { if (response.data && response.data.length > 0) {