Merge branch 'main' into master

This commit is contained in:
Fadias Nur Ahmadi 2024-09-03 18:40:00 +07:00 committed by GitHub
commit ca815737f0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 238 additions and 76 deletions

View File

@ -0,0 +1,16 @@
<?php
namespace App\Exceptions;
use Exception as BaseException; // Alias the base Exception class
class CustomException extends BaseException
{
/**
* Report the exception.
*/
public function report(): void
{
// Custom reporting logic here
}
}

View File

@ -3,7 +3,10 @@
namespace App\Http\Controllers;
use App\Models\DataKursus; // Pastikan model diimport
use Illuminate\Auth\Events\Validated;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use PhpParser\Node\Stmt\TryCatch;
class AdminDataKursusController extends Controller
{
@ -22,10 +25,84 @@ public function create()
public function store(Request $request)
{
$request->validate(
[]
);
try {
$validator = Validator::make($request->all(), [
'nama_kursus' => 'required',
'img' => 'required|file|mimes:jpeg,png,jpg|max:2048',
'deskripsi' => 'required',
'paket' => 'required',
'metode' => 'required',
'fasilitas' => 'required',
'lokasi' => 'required',
'latitude' => 'required|numeric|between:-90,90',
'longitude' => 'required|numeric|between:-180,180',
'img_konten.*' => 'file|mimes:jpeg,png,jpg|max:2048',
]);
// if ($validator->fails()) {
// return redirect()->back()->withInput()->withErrors($validator);
// }
$imgPath = $request->file('img')->store('images', 'public');
$imgKontenPaths = [];
if ($request->hasFile('img_konten')) {
foreach ($request->file('img_konten') as $file) {
$imgKontenPaths[] = $file->store('images', 'public');
}
}
// Simpan data ke dalam database
$result = DataKursus::create([
'nama_kursus' => $request->nama_kursus,
'img' => $imgPath,
'deskripsi' => $request->deskripsi,
'paket' => $request->paket,
'metode' => $request->metode,
'fasilitas' => $request->fasilitas,
'lokasi' => $request->lokasi,
'latitude' => $request->latitude,
'longitude' => $request->longitude,
'img_konten' => json_encode($imgKontenPaths),
]);
return redirect('/admin/data-kursus');
} catch (\Exception $e) {
dd($e->getMessage());
}
}
public function w(Request $request)
{
// $validator = Validator::make($request->all(), [
// 'nama' => 'required',
// 'img' => 'required',
// 'deskripsi' => 'required',
// 'paket' => 'required',
// 'metode' => 'required',
// 'fasilitas' => 'required',
// 'lokasi' => 'required',
// 'latitude' => 'required',
// 'longtitude' => 'required',
// 'img_konten' => 'required',
// ]);
// DataKursus::create([
// "nama_kursus" => $request->nama,
// "img" => $request->img,
// "deskripsi" => $request->diskripsi,
// "paket" => $request->paket,
// "metode" => $request->metode,
// "fasilitas" => $request->fasilitas,
// "lokasi" => $request->lokasi,
// "latitude" => $request->latitude,
// "longtitude" => $request->longtitude,
// "img_konten" => $request->img_konten,
// ]);
// if ($validator->fails()) return redirect()->back()->withInput()->withErrors($validator);
}
public function destroy(string $id)
{
@ -35,5 +112,4 @@ public function destroy(string $id)
}
return redirect()->route('admin.dataKursus')->with('success', 'Data berhasil dihapus.');
}
}

View File

@ -9,9 +9,20 @@ class DataKursus extends Model
{
use HasFactory;
// Tabel yang digunakan oleh model ini
protected $table = 'data_kursus';
// Jika Anda menggunakan timestamp di tabel
protected $fillable = [
'nama_kursus',
'img',
'deskripsi',
'paket',
'metode',
'fasilitas',
'lokasi',
'latitude',
'longitude', // Pastikan nama kolom sesuai dengan migrasi
'img_konten'
];
public $timestamps = true;
}

View File

@ -20,6 +20,7 @@ public function up()
$table->string('metode');
$table->text('fasilitas');
$table->string('lokasi');
$table->decimal('latitude', 10, 7);
$table->decimal('longtitude', 10, 7);
$table->json('img_konten')->nullable();

2
package-lock.json generated
View File

@ -1,5 +1,5 @@
{
"name": "salma",
"name": "SIG-Salma",
"lockfileVersion": 3,
"requires": true,
"packages": {

View File

@ -4,6 +4,9 @@
<div class="py-10">
<div class="relative overflow-x-auto shadow-md sm:rounded-lg">
<div class="flex justify-end items-center pb-4">
<a class="bg-[#4F7F81] py-2 px-4 rounded-xl text-white font-bold" href="{{ route ('admin.create') }}">Tambah Data</a>
</div>
<table class="w-full text-sm text-left rtl:text-right text-gray-500">
<thead class="text-xs text-gray-700 uppercase bg-gray-50">
<tr>
@ -41,7 +44,9 @@ class="font-medium text-white hover:underline py-2 px-4 bg-[#4F7F81] rounded-xl"
class="font-medium text-white hover:underline py-2 px-4 bg-[#4F7F81] rounded-xl">
Hapus
</a>
<form id="delete-form-{{ $course->id }}" action="{{ route('delete', ['id' => $course->id]) }}" method="POST" style="display: none;">
<form id="delete-form-{{ $course->id }}"
action="{{ route('delete', ['id' => $course->id]) }}" method="POST"
style="display: none;">
@csrf
@method('DELETE')
</form>

View File

@ -3,87 +3,115 @@
<div class="container">
<div class="py-10">
<form action="#" method="POST" enctype="multipart/form-data">
<div class="pb-4 flex">
<a class="px-4 flex text-white text-lg justify-center items-center py-2 rounded-xl bg-[#4F7F81]"
href="{{ route('admin.dataKursus') }}"><svg class="w-5 h-5 text-white " aria-hidden="true"
xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 14 10">
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M13 5H1m0 0 4 4M1 5l4-4" />
</svg></a>
</div>
<form action="{{ route('kursus.store') }}" method="POST" enctype="multipart/form-data">
@csrf
<div class="grid gap-6 mb-6 md:grid-cols-2">
<!-- Nama Kursus -->
<div>
<label for="nama_kursus" class="block mb-2 text-sm font-medium text-gray-900 dark:text-white">Nama Kursus</label>
<label for="nama_kursus" class="block mb-2 text-sm font-medium text-gray-900">Nama Kursus</label>
<input type="text" id="nama_kursus" name="nama_kursus"
class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"
placeholder="Nama Kursus" required />
class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5"
placeholder="Kampung Inggris LC - Language Center" required />
</div>
<!-- Gambar -->
<!-- File Upload -->
<div>
<label for="img" class="block mb-2 text-sm font-medium text-gray-900 dark:text-white">Gambar</label>
<input type="file" id="img" name="img"
class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"
required />
<label for="file_input" class="block mb-2 text-sm font-medium text-gray-900">Upload File</label>
<input
class="block w-full text-sm text-gray-900 border border-gray-300 rounded-lg cursor-pointer bg-gray-50"
id="file_input" type="file" name="img">
</div>
<!-- Deskripsi -->
<div>
<label for="deskripsi" class="block mb-2 text-sm font-medium text-gray-900 dark:text-white">Deskripsi</label>
<textarea id="deskripsi" name="deskripsi"
class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"
placeholder="Deskripsi" required></textarea>
<label for="deskripsi" class="block mb-2 text-sm font-medium text-gray-900">Deskripsi</label>
<input type="text" id="deskripsi" name="deskripsi"
class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5"
placeholder="KAMPUNG INGGRIS LC LANGUAGE CENTER Adalah . . . ." required />
</div>
<!-- Paket -->
<!-- Multiple File Upload -->
<div>
<label for="paket" class="block mb-2 text-sm font-medium text-gray-900 dark:text-white">Paket</label>
<input type="text" id="paket" name="paket"
class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"
placeholder="Paket" required />
</div>
<!-- Metode -->
<div>
<label for="metode" class="block mb-2 text-sm font-medium text-gray-900 dark:text-white">Metode</label>
<input type="text" id="metode" name="metode"
class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"
placeholder="Metode" required />
</div>
<!-- Fasilitas -->
<div>
<label for="fasilitas" class="block mb-2 text-sm font-medium text-gray-900 dark:text-white">Fasilitas</label>
<textarea id="fasilitas" name="fasilitas"
class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"
placeholder="Fasilitas" required></textarea>
</div>
<!-- Lokasi -->
<div>
<label for="lokasi" class="block mb-2 text-sm font-medium text-gray-900 dark:text-white">Lokasi</label>
<input type="text" id="lokasi" name="lokasi"
class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"
placeholder="Lokasi" required />
<label for="multiple_files" class="block mb-2 text-sm font-medium text-gray-900">Upload Multiple Files</label>
<input
class="block w-full text-sm text-gray-900 border border-gray-300 rounded-lg cursor-pointer bg-gray-50"
id="multiple_files" type="file" name="img_konten[]" multiple>
</div>
<!-- Latitude -->
<div>
<label for="latitude" class="block mb-2 text-sm font-medium text-gray-900 dark:text-white">Latitude</label>
<label for="latitude" class="block mb-2 text-sm font-medium text-gray-900">Latitude</label>
<input type="text" id="latitude" name="latitude"
class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"
class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5"
placeholder="Latitude" required />
</div>
<!-- Longitude -->
<div>
<label for="longitude" class="block mb-2 text-sm font-medium text-gray-900 dark:text-white">Longitude</label>
<label for="longitude" class="block mb-2 text-sm font-medium text-gray-900">longitude</label>
<input type="text" id="longitude" name="longitude"
class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"
placeholder="Longitude" required />
</div>
class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5"
placeholder="longitude"/>
</div>
<!-- Paket -->
<div>
<label for="paket" class="block mb-2 text-sm font-medium text-gray-900">Paket</label>
<input id="paket" name="paket" type="hidden" />
<trix-editor input="paket"
class="block p-2.5 w-full text-sm text-gray-900 bg-gray-50 rounded-lg border border-gray-300 focus:ring-blue-500 focus:border-blue-500"
placeholder="Write your thoughts here..."></trix-editor>
</div>
<!-- Metode -->
<div>
<label for="metode" class="block mb-2 text-sm font-medium text-gray-900">Metode</label>
<input id="metode" name="metode" type="hidden" />
<trix-editor input="metode"
class="block p-2.5 w-full text-sm text-gray-900 bg-gray-50 rounded-lg border border-gray-300 focus:ring-blue-500 focus:border-blue-500"
placeholder="Write your thoughts here..."></trix-editor>
</div>
<!-- Fasilitas -->
<div>
<label for="fasilitas" class="block mb-2 text-sm font-medium text-gray-900">Fasilitas</label>
<input id="fasilitas" name="fasilitas" type="hidden" />
<trix-editor input="fasilitas"
class="block p-2.5 w-full text-sm text-gray-900 bg-gray-50 rounded-lg border border-gray-300 focus:ring-blue-500 focus:border-blue-500"
placeholder="Write your thoughts here..."></trix-editor>
</div>
<!-- Lokasi -->
<div>
<label for="lokasi" class="block mb-2 text-sm font-medium text-gray-900">Lokasi</label>
<input id="lokasi" name="lokasi" type="hidden" />
<trix-editor input="lokasi"
class="block p-2.5 w-full text-sm text-gray-900 bg-gray-50 rounded-lg border border-gray-300 focus:ring-blue-500 focus:border-blue-500"
placeholder="Write your thoughts here..."></trix-editor>
</div>
</div>
<button type="submit"
class="text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm w-full sm:w-auto px-5 py-2.5 text-center dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800">Submit</button>
class="text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm w-full sm:w-auto px-5 py-2.5 text-center">Submit</button>
</form>
</div>
</div>
@push('script')
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/trix/1.3.1/trix.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/trix/1.3.1/trix.min.js"></script>
@endpush
</x-adminlayout>

View File

@ -1,6 +1,15 @@
<!DOCTYPE html>
<html lang="en">
<head>
@include('components.navbarAdmin')
@include('partials.head')
@include('partials.font')
</head>
<body>
{{ $slot }}
</body>
</html>

View File

@ -1,8 +1,16 @@
<!DOCTYPE html>
<html lang="en">
<head>
@include('components.navbar')
@include('partials.head')
@include('partials.font')
</head>
<body>
{{ $slot }}
</body>
@include('components.footer')
</html>

View File

@ -3,3 +3,5 @@
@vite('resources/css/app.css')
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://unpkg.com/leaflet/dist/leaflet.css" />
@stack('script')

View File

@ -6,13 +6,18 @@
use App\Http\Controllers\LoginController;
use App\Http\Controllers\PengunjungController;
// ADMIN
Route::get('/admin/dashboard', [AdminDashboardController::class, 'index'])->name('admin.home');
Route::get('/admin/data-kursus', [AdminDataKursusController::class, 'dataKursus'])->name('admin.dataKursus');
Route::get('/admin/tambahdata', [AdminDataKursusController::class, 'create'])->name('admin.tambahDataKursus');
Route::post('/admin/store', [AdminDataKursusController::class, 'store'])->name('kursus.store');
Route::get('/admin/createData', [AdminDataKursusController::class, 'create'])->name('admin.create');
Route::delete('/admin/delete/{id}', [AdminDataKursusController::class, 'destroy'])->name('delete');
Route::get('/admin/courses', [AdminDataKursusController::class, 'index']);
// LOGIN
Route::get('/login', [LoginController::class, 'index'])->name('login');
Route::get('/', [PengunjungController::class, 'home'])->name('home');
@ -21,3 +26,4 @@
Route::get('/peta', [PengunjungController::class, 'maps'])->name('user.peta');
Route::get('/kursus/{id}/detail', [PengunjungController::class, 'detail'])->name('kursus.detail');