Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 32 additions & 46 deletions app/Http/Controllers/FrontEnd/PageController.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,22 +34,27 @@
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;
use App\Models\Event;
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');

Expand All @@ -65,7 +70,7 @@ public function index()
]);
}

public function beritaDesa()
public function beritaDesa(): View
{
if ($this->isDatabaseGabungan()) {
$apiServer = $this->settings['api_server_database_gabungan'] ?? '';
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -141,23 +140,23 @@ 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';

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;
Expand All @@ -166,20 +165,20 @@ 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);

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) {
Expand Down Expand Up @@ -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();
Expand All @@ -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,
Expand All @@ -262,25 +251,16 @@ 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');

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();
Expand Down Expand Up @@ -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;
Expand All @@ -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([
Expand All @@ -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';

Expand All @@ -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')) {
Expand All @@ -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;
}
}
25 changes: 25 additions & 0 deletions app/Http/Requests/KirimBalasanRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class KirimBalasanRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}

public function rules(): array
{
return [
'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',
'comment_id' => 'required|exists:das_artikel_comment,id',
];
}
}
24 changes: 24 additions & 0 deletions app/Http/Requests/KirimKomentarRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class KirimKomentarRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}

public function rules(): array
{
return [
'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',
];
}
}
1 change: 1 addition & 0 deletions app/Repositories/PotensiApiRepository.php
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down
2 changes: 1 addition & 1 deletion routes/web.php
Original file line number Diff line number Diff line change
Expand Up @@ -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');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,11 @@ function renderPotensi(items) {
'<div id="caption">' + (potensi.nama_potensi || '') + '</div>' +
'</div>' +
'<div class="attachment-pushed">' +
'<h4 class="attachment-heading"><a href="{{ url("/potensi") }}/' + (potensi.tipe ? potensi.tipe.slug : '') + '/' + (potensi.slug || '') + '"><i class="fa fa-industry" aria-hidden="true"></i> ' + (potensi.nama_potensi || '') + '</a></h4>' +
'<h4 class="attachment-heading"><a href="{{ url("/potensi") }}/' + (potensi.tipe ? potensi.tipe.slug : '') + '/' + (item.id || '') + '"><i class="fa fa-industry" aria-hidden="true"></i> ' + (potensi.nama_potensi || '') + '</a></h4>' +
'<div class="attachment-text">' +
(potensi.deskripsi ? (potensi.deskripsi.length > 300 ? potensi.deskripsi.substring(0, 300) + ' ...' : potensi.deskripsi) : '') +
'<div class="pull-right button-group" style="position:relative; bottom:0px; margin-bottom: 0px;">' +
'<a href="{{ url("/potensi") }}/' + (potensi.tipe ? potensi.tipe.slug : '') + '/' + (potensi.slug || '') + '" class="btn btn-xs btn-primary"><i class="fa fa-angle-double-right"></i> Baca Selengkapnya</a>' +
'<a href="{{ url("/potensi") }}/' + (potensi.tipe ? potensi.tipe.slug : '') + '/' + (item.id || '') + '" class="btn btn-xs btn-primary"><i class="fa fa-angle-double-right"></i> Baca Selengkapnya</a>' +
'</div>' +
'</div>' +
'</div>' +
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
Loading