# UPGRADE v5 — Fakultas Sains UNCP

Iterasi kelima website Fakultas Sains UNCP. **Wajib dijalankan setelah v2, v3, dan v4.**

---

## 🚀 Cara Deploy

### 1. Backup database & file lama
```bash
mysqldump -u root fsains_uncp > backup_sebelum_v5.sql
# Backup folder fakultas_sains/
```

### 2. Extract `fakultas_sains_v5.zip` ke `C:/xampp/htdocs/fakultas_sains/` (timpa file lama)

### 3. Jalankan upgrade database
Buka **phpMyAdmin** → pilih DB `fsains_uncp` → tab **SQL** → paste isi `database_upgrade_v5.sql` → klik **Go**.

> ✅ Akan ditambahkan: tabel `dosen`, `dosen_pendidikan`, `berita_dosen`, kolom `link_type` & `page_id` di `menus`, kolom `icon` di `quick_services` (kalau belum ada), menu Dosen di navbar, 3 dosen contoh.

### 4. Pastikan folder upload writable
```bash
# Linux/Mac
chmod 755 upload/dosen/ upload/cv/

# XAMPP Windows: biasanya sudah writable
```

Kalau folder belum ada, akan otomatis dibuat saat upload pertama.

---

## 🐛 Bug yang Diperbaiki di v5

| # | Bug | Lokasi | Fix |
|---|-----|--------|-----|
| 1 | Icon picker tidak ada di "Kelola Informasi Akademik" | `admin/add-quick.php`, `admin/edit-quick.php` | Pasang `iconPickerWidget()`, otomatis sort_order MAX+1 |
| 2 | Submenu tidak bisa diedit | `admin/menus.php` (hanya tampilkan `parent_id IS NULL`) | Rewrite untuk tampilkan parent + sub nested dengan icon tipe |
| 3 | `bind_param("sssi")` untuk 5 variabel di update card | `admin/edit-quick.php` | Diperbaiki jadi `"sssii"` |
| 4 | Menu baru tidak otomatis buat halaman | `admin/add-menu.php` (URL manual) | Page builder dengan 4 tipe (lihat di bawah) |

---

## ✨ Fitur Baru di v5

### 1. 📚 Page Builder untuk Menu

Saat tambah/edit menu navbar, Anda sekarang bisa pilih **4 tipe tujuan**:

- **🪄 Buat Halaman Baru** — tulis judul + isi langsung di sini, otomatis tersimpan di tabel `pages` dan menu link ke `pages/page.php?slug=xxx`. Tidak perlu coding!
- **📄 Halaman yang Sudah Ada** — pilih dari dropdown halaman yang sudah dibuat
- **🔗 URL Eksternal** — link ke website lain (https://...)
- **🧊 Modul Sistem** — built-in seperti Berita, Dosen, Prodi, Kontak

### 2. 👨‍🏫 Biodata Dosen (model DIKE UGM)

Modul lengkap dengan:

**Tabel dosen** menyimpan:
- Foto profil (otomatis di-crop kotak 600×600)
- Nama lengkap dengan gelar depan & belakang
- NIP / NIKA / NIDN, email
- Jabatan fungsional (Asisten Ahli / Lektor / Lektor Kepala / Guru Besar / Tenaga Pengajar)
- Jabatan struktural (Dekan / Kaprodi / dll)
- Program studi, Laboratorium (FK)
- Gugus riset, minat penelitian, bio
- 6 link publikasi: Google Scholar, Scopus, SINTA, ORCID, PDDikti, ResearchGate
- Upload CV PDF (link "Unduh CV" di halaman publik)

**Tabel dosen_pendidikan** (1-to-many):
- Jenjang (S1/S2/S3/Profesi/Diploma/Spesialis)
- Departemen, universitas, negara, tahun mulai-selesai
- Judul thesis/disertasi (opsional)

**Halaman admin:**
- `admin/dosen.php` — listing dengan search (nama/NIP/email) + filter prodi
- `admin/dosen-edit.php` — form dengan 6 section (Identitas, Jabatan, Riset, Pendidikan, Publikasi, Pengaturan), pendidikan dapat dinamis tambah/hapus baris

**Halaman publik:**
- `pages/daftar-dosen.php` — grid responsive dengan search + filter prodi
- `pages/dosen.php?slug=xxx` — detail dengan style mirip UGM:
  - Foto bulat besar, tabel info NIP/Email/Jabatan
  - Section Riset (gugus + lab + minat)
  - Tabel pendidikan rapi
  - 6 tombol publikasi berwarna (Scholar biru, Scopus oranye, SINTA kuning, ORCID hijau, PDDikti biru tua, ResearchGate teal)
  - Tombol "Unduh CV" merah
  - **Artikel terkait** (auto-tag berita yang mention nama dosen + tag manual)
  - Daftar navigasi dosen lainnya
  - **Schema.org JSON-LD `Person` markup** → rich snippet di Google

### 3. 🏷️ Tag Dosen ke Berita

Saat tambah/edit berita di `admin/add.php` & `admin/edit.php`, ada checkbox multi-select dosen. Berita yang ditag akan otomatis muncul di section "Artikel" pada halaman profil dosen.

### 4. 📊 Statistik Widget Homepage

Box angka real-time dari DB tampil di antara Quick Info dan Headline Berita:
- 🧑‍💼 Jumlah dosen aktif
- 🎓 Jumlah mahasiswa (set manual di Pengaturan Web → Statistik Beranda; 0 = sembunyikan)
- 📚 Jumlah program studi
- 🧪 Jumlah laboratorium aktif

Animasi counter (angka naik dari 0) saat scroll ke widget.

### 5. 🔎 Pencarian Global

Tombol search bulat di pojok kanan navbar → buka overlay full-screen.
- Shortcut keyboard: **Ctrl/Cmd + K** untuk buka, **Esc** untuk tutup
- Hasil dikelompokkan: Dosen, Berita, Halaman
- Min. 2 karakter

### 6. 🖼️ Image Auto-Resize untuk Foto Dosen

Foto dosen yang diupload otomatis:
- Di-crop kotak dari tengah (untuk konsistensi grid)
- Di-resize ke 600×600 px
- Format JPG/PNG/WebP dengan kompresi 85%
- Maks 8MB

CV PDF otomatis di-validasi:
- Real MIME type check (bukan dari ekstensi/nama file)
- Maks 10MB
- Hanya `application/pdf` real

---

## 📁 File Baru di v5

**Database:**
- `database_upgrade_v5.sql` — schema migration

**Admin (super admin only):**
- `admin/dosen.php` — listing dosen
- `admin/dosen-edit.php` — form add/edit dosen (kombinasi insert + update)
- `admin/dosen-delete.php` — handler hapus

**Public:**
- `pages/daftar-dosen.php` — public listing
- `pages/dosen.php?slug=xxx` — public detail (Schema.org)
- `pages/search.php` — global search

**Upload folder:**
- `upload/dosen/` — foto dosen (.htaccess deny PHP)
- `upload/cv/` — CV PDF (.htaccess deny PHP)

## 📁 File Dimodifikasi di v5

- `admin/add-quick.php` — pakai icon picker + ob_start pattern + auto sort_order
- `admin/edit-quick.php` — pakai icon picker + fix bind_param `"sssii"`
- `admin/menus.php` — tampilkan parent + submenu nested dengan icon tipe
- `admin/edit-menu.php` — full page builder (3 tipe link)
- `admin/add-menu.php` — full page builder (4 tipe link termasuk "Buat Halaman Baru")
- `admin/add.php` & `admin/edit.php` — multi-select tag dosen ke berita
- `admin/settings.php` — group "Statistik Beranda" untuk `stat_mahasiswa`
- `admin/includes/admin_layout.php` — entry sidebar untuk Biodata Dosen
- `includes/image_helper.php` — tambah `uploadFotoSquare()` & `uploadPDF()`
- `includes/header.php` — tombol search + overlay full-screen + Ctrl+K shortcut
- `pages/home.php` — statistik widget animated counter

---

## 🎯 Cara Pakai Setelah Deploy

### Tambah dosen pertama
1. Login super admin
2. Sidebar → **Biodata Dosen**
3. Klik **Tambah Dosen Baru**
4. Isi form 6 section (foto auto-crop, pendidikan bisa tambah baris)
5. Save → muncul di halaman publik `pages/daftar-dosen.php`

### Buat menu baru dengan halaman baru sekaligus
1. Sidebar → **Kelola Menu Nav**
2. **Tambah Menu Baru**
3. Pilih tipe **🪄 Buat Halaman Baru**
4. Tulis nama menu, judul halaman, isi pakai TinyMCE
5. Save → menu + halaman dibuat bersamaan, URL `pages/page.php?slug=xxx`

### Tag dosen ke berita
1. Sidebar → **Kelola Berita** → tambah/edit
2. Scroll ke bawah, section **Tag Dosen Terkait**
3. Centang nama dosen (multi-select)
4. Save → berita otomatis muncul di profil dosen tsb

### Set jumlah mahasiswa untuk widget statistik
1. Sidebar → **Pengaturan Web**
2. Section **Statistik Beranda** → isi `stat_mahasiswa` (angka)
3. Save → tampil di homepage; isi 0 untuk sembunyikan card mahasiswa

---

## ⚠️ Catatan Penting

1. **Data dummy dosen** — 3 dosen contoh akan ditambah saat run SQL. Hapus/edit sesuai kebutuhan.
2. **Folder upload** — kalau permission error saat upload foto/CV, set folder writable: `chmod 755 upload/dosen upload/cv` (atau via FileZilla Properties → Permissions = 755).
3. **Menu Dosen** — otomatis ditambah ke navbar saat SQL dijalankan (sebagai menu utama). Edit posisi/parent via Kelola Menu Nav.
4. **Backward compatibility** — semua fitur lama (v2-v4) tetap berfungsi normal. Database migration aman (pakai `ADD COLUMN IF NOT EXISTS` pattern dengan `INFORMATION_SCHEMA` check).

---

## 🔮 Roadmap Saran untuk v6+

Berdasarkan opini profesional, fitur yang bisa ditambah berikutnya (jika diinginkan):

1. **Generate PDF biodata** dosen (tombol "Cetak Biodata" → PDF formal dari profil)
2. **Form pengaduan/saran mahasiswa** (anonim/named) → admin sebagai ticket
3. **News view tracking** + "berita populer" widget
4. **Soft delete** dengan trash recovery 30 hari
5. **2FA OTP email** untuk super admin
6. **Backup automation** via cron
7. **Newsletter** mailing list integration
8. **Accessibility audit** (a11y, ARIA, keyboard nav)

Cukup minta jika ingin saya bangun salah satunya.

---

**Versi:** v5.0
**Tanggal:** 2026-05-30
**Compatibility:** PHP 7.4+, MySQL 5.7+, XAMPP/LAMP/LEMP
