# Website Prodi — PHP Native

Website Program Studi dengan PHP Native (tanpa framework), pola MVC sederhana, PDO + MySQL.

> **Paket ini versi "flat"** — dikhususkan untuk dipasang langsung ke
> document root subdomain yang **sudah ada** di cPanel (lihat
> `PANDUAN-SUBDOMAIN-EXISTING.md`). Semua file termasuk `app/` dan
> `config/` ditaruh langsung di document root, dilindungi `.htaccess`.

## Struktur folder

```
(document root subdomain)
├── index.php                ← front controller / entry point
├── .htaccess                 (rewrite semua request ke index.php)
├── assets/                    (css, js, gambar statis)
├── uploads/                    (file upload: logo, foto dosen, gambar berita, dst)
├── app/                         (dilindungi .htaccess Deny from all)
│   ├── Controllers/          (1 class per modul, menangani request)
│   ├── Models/                (1 class per tabel, query lewat PDO)
│   ├── Views/                 (file .php berisi HTML per halaman)
│   │   ├── layouts/           (admin.php, auth.php, public.php)
│   │   ├── admin/              (halaman-halaman admin panel)
│   │   └── public/             (halaman-halaman publik)
│   ├── Core/                  (Router, Controller dasar, Database/PDO)
│   ├── Middleware/            (AuthMiddleware — cek login & role)
│   ├── Helpers/                (fungsi bantu global)
│   └── bootstrap.php          (autoloader native, tanpa Composer)
├── config/                       (dilindungi .htaccess Deny from all)
│   ├── config.php             (baca .env, kembalikan array konfigurasi)
│   └── routes.php             (daftar semua route aplikasi)
├── database/                     (dilindungi .htaccess Deny from all)
│   └── skema-database-prodi.sql
├── storage/logs/                 (dilindungi .htaccess Deny from all)
└── .env.example
```

## Cara instalasi

> **Deploy ke subdomain cPanel yang sudah ada?** Ikuti
> `PANDUAN-SUBDOMAIN-EXISTING.md` — sudah lengkap langkah demi langkah.

Untuk development lokal:

1. **Import database**
   ```
   mysql -u root -p < database/skema-database-prodi.sql
   ```

2. **Salin file environment**
   ```
   cp .env.example .env
   ```
   Sesuaikan `DB_HOST`, `DB_NAME`, `DB_USER`, `DB_PASS` dengan kredensial MySQL kamu.

3. **Jalankan lewat PHP built-in server** (folder project ini langsung
   jadi document root, karena strukturnya sudah rata):
   ```
   php -S localhost:8000
   ```

4. **Buat akun admin pertama**
   Seed SQL sudah menyertakan 1 akun admin, tapi hash password di dalamnya
   hanya contoh. Jalankan sekali via PHP untuk membuat hash yang valid:
   ```php
   php -r "echo password_hash('admin123', PASSWORD_DEFAULT);"
   ```
   Lalu update kolom `password` pada tabel `users` dengan hasilnya, atau
   buat lewat halaman "Manajemen Pengguna" setelah login pertama secara manual di database.

5. **Pastikan folder `uploads/` bisa ditulis** oleh web server
   (untuk upload logo, foto dosen, gambar berita, dokumen, galeri).

## Catatan implementasi

- **Routing**: semua route didaftarkan di `config/routes.php`, diproses oleh
  `App\Core\Router`. Format: `[METHOD, PATH, 'Controller@method', middleware?]`.
- **Autoload**: tanpa Composer — `app/bootstrap.php` memetakan namespace
  `App\Xxx` langsung ke file `app/Xxx.php`.
- **Autentikasi**: sesi PHP native (`$_SESSION`), middleware `auth` mengecek
  login, `auth:admin` membatasi khusus role Admin (misalnya Manajemen Pengguna).
- **Upload file**: penanganan upload (`move_uploaded_file`) belum diimplementasikan
  penuh di controller contoh — tambahkan validasi tipe/ukuran file sebelum
  dipakai di production.
- **Modul Berita** sudah diimplementasikan lengkap (CRUD + Kelola Kategori via AJAX)
  sebagai contoh pola yang bisa diikuti untuk modul lain.
- Modul lain (Fasilitas, Pejabat, Widget, Galeri) baru berisi tampilan daftar —
  lengkapi form tambah/edit dengan pola yang sama seperti `BeritaController`
  dan `DosenController`.
