# Portal Fakultas — CMS Native PHP (MVC)

Landing page & fondasi CMS untuk website Fakultas, dibangun dengan PHP native
(tanpa framework pihak ketiga) menggunakan konsep MVC, MySQL/MariaDB.

**Tahap ini:** landing page publik (sesuai referensi desain) + struktur dasar MVC,
routing, koneksi database, dan model untuk: identitas kampus, menu dinamis, berita,
agenda, widget sidebar, dan footer dinamis.

Modul admin (panel login, CRUD berita/menu/agenda/galeri/fasilitas/halaman statis,
TinyMCE) akan dibangun pada tahap berikutnya di atas fondasi ini.

## Struktur Folder

```
fakultas-cms/
├── app/
│   ├── Core/            Router, Controller & Model dasar, Database (PDO)
│   ├── Controllers/     HomeController, dst.
│   ├── Models/          IdentitasModel, MenuModel, BeritaModel, AgendaModel, ...
│   └── Views/
│       ├── layouts/     header.php, footer.php (dipakai semua halaman)
│       ├── partials/    (untuk komponen kecil, disiapkan untuk tahap berikutnya)
│       ├── home/        index.php (landing page)
│       └── errors/      404.php, 500.php
├── config/
│   ├── config.php       APP_URL, APP_ENV, timezone
│   └── database.php     kredensial MySQL
├── database/
│   ├── schema.sql        skema lengkap (semua modul, termasuk yang belum diaktifkan)
│   ├── seed.sql          data contoh agar landing page langsung terisi
│   └── seed_admin.php    membuat akun admin pertama (password di-hash bcrypt)
├── public/               <-- DOCUMENT ROOT server diarahkan ke sini
│   ├── index.php         front controller
│   ├── .htaccess         rewrite semua request ke index.php
│   └── assets/           css, js, img
└── .htaccess              redirect root ke /public (untuk shared hosting)
```

## Cara Deploy ke cPanel (demo.fmipaunsoed.id)

Document root subdomain Anda sudah di `public_html/demo.fmipaunsoed.id/`.
Upload **seluruh isi** folder `fakultas-cms` (bukan foldernya, tapi ISI-nya:
`app/`, `config/`, `database/`, `public/`, `.htaccess`) langsung ke situ, sehingga
strukturnya jadi:

```
public_html/demo.fmipaunsoed.id/
├── .htaccess          <-- otomatis redirect ke public/
├── app/                <-- diblokir akses langsung via .htaccess
├── config/             <-- diblokir akses langsung via .htaccess
├── database/           <-- diblokir akses langsung via .htaccess
└── public/              <-- ini yang benar-benar tampil ke pengunjung
```

**Langkah-langkah:**

1. **Upload**
   - cPanel → **File Manager** → masuk ke `public_html/demo.fmipaunsoed.id/`
   - Upload `fakultas-cms.zip`, klik kanan → **Extract**
   - Pindahkan isi folder `fakultas-cms/` hasil ekstrak ke satu level di atas
     (langsung ke `public_html/demo.fmipaunsoed.id/`), lalu hapus folder
     `fakultas-cms` yang kosong. (Atau lebih mudah: extract dulu di komputer,
     lalu upload isinya satu per satu via FTP/File Manager.)

2. **Buat & Import Database**
   - cPanel → **MySQL® Database Wizard** → buat database (misal `fmipaunso_fakultas`)
     dan user, catat username & password-nya
   - cPanel → **phpMyAdmin** → pilih database tsb → tab **Import** →
     upload `database/schema.sql`, lalu ulangi untuk `database/seed.sql`

3. **Sesuaikan kredensial** di `config/database.php`:
   ```php
   'database' => 'fmipaunso_fakultas',   // sesuai nama asli dari cPanel
   'username' => 'fmipaunso_dbuser',
   'password' => 'password_anda',
   ```

4. **Buat akun admin** (karena kemungkinan tidak ada akses SSH):
   - Di File Manager, **copy** (bukan pindahkan) file `database/seed_admin.php`
     ke dalam folder `public/`
   - Buka `https://demo.fmipaunsoed.id/seed_admin.php` di browser — sekali saja
   - **Segera hapus** file `public/seed_admin.php` setelah berhasil (file asli
     di `database/` tetap aman karena sudah diblokir `.htaccess`)

5. **Set PHP Version**
   - cPanel → **MultiPHP Manager** → pilih domain `demo.fmipaunsoed.id` →
     set ke **PHP 8.0 atau lebih baru**

6. **Cek situs**
   - Buka `https://demo.fmipaunsoed.id` — landing page harus tampil dengan
     data dari `seed.sql`
   - Jika muncul error, cek dulu (mode `development` masih aktif jadi error
     akan tampil jelas)

7. **Amankan untuk produksi**
   - Setelah semua berjalan lancar, ubah di `config/config.php`:
     ```php
     define('APP_ENV', 'production');
     ```
   - Ini mematikan tampilan error detail ke publik.

## Cara Menjalankan (Lokal — untuk pengembangan)

1. **Siapkan database**
   ```bash
   mysql -u root -p < database/schema.sql
   mysql -u root -p fakultas_cms < database/seed.sql
   php database/seed_admin.php   # membuat akun admin: admin / admin123
   ```

2. **Sesuaikan kredensial** di `config/database.php` jika perlu.

3. **Set APP_URL** di `config/config.php` sesuai alamat akses Anda, contoh:
   - Menggunakan PHP built-in server: `http://localhost:8000`
   - Di XAMPP/Laragon dalam subfolder: `http://localhost/fakultas-cms/public`

4. **Jalankan server**
   - Cara cepat (PHP built-in server), arahkan ke folder `public`:
     ```bash
     cd public
     php -S localhost:8000
     ```
   - Atau taruh folder `fakultas-cms` di `htdocs`/`www` XAMPP/Laragon, lalu set
     **Document Root** Apache/Nginx ke folder `public` (disarankan untuk produksi),
     atau gunakan `.htaccess` di root bila document root tidak bisa diubah.

5. Buka browser ke `APP_URL` yang sudah diset — landing page akan tampil dengan
   data dari `seed.sql` (nama fakultas, menu + submenu, berita, agenda, footer).

## Catatan Desain

- Palet warna near-black/navy dengan aksen biru, tipografi serif (Cormorant
  Garamond) untuk nama fakultas dan sans-serif (Inter) untuk isi — mengikuti
  referensi desain yang dilampirkan.
- Foto hero & foto profil masih placeholder gradient (karena belum ada aset
  gambar). Tinggal unggah foto asli lewat `identitas_kampus.hero_image`,
  `identitas_kampus.logo`, atau folder `public/assets/img/`.
- Widget kalender agenda dihitung otomatis dari tabel `agenda` (tidak perlu
  library eksternal).

## Semua Fitur yang Diminta — Status

| # | Fitur                                              | Status di tahap ini |
|---|-----------------------------------------------------|----------------------|
| 1 | Navbar dinamis + submenu                             | ✅ Struktur DB & render selesai (tabel `menus`) |
| 2 | Halaman statis (Sambutan Dekan, Visi Misi, dll)      | ⏳ Tabel `halaman_statis` sudah ada, controller/CRUD tahap berikutnya |
| 3 | Modul Berita (TinyMCE)                               | ⏳ Tabel & model `berita` sudah ada, editor TinyMCE dipasang di panel admin (tahap berikutnya) |
| 4 | Sidebar widget gambar/teks/tautan                    | ✅ Model & render selesai (tabel `widgets`) |
| 5 | Footer dinamis                                       | ✅ Model & render selesai (tabel `footer_columns`, `footer_links`) |
| 6 | Modul Agenda, Galeri Foto, Galeri Video, Fasilitas   | ⏳ Skema tabel sudah lengkap; controller & tampilan detail tahap berikutnya (Agenda sudah dipakai di widget kalender) |
| 7 | Framework native, konsep MVC                          | ✅ Router, Controller, Model dasar (PDO) selesai |
| 8 | Modul Identitas Kampus                                | ✅ Model & render selesai (tabel `identitas_kampus`) |

## Langkah Berikutnya (usulan)

1. Panel admin (login + dashboard) di atas `admin_users`.
2. CRUD Menu (drag-and-drop urutan) di panel admin.
3. Modul Berita dengan editor TinyMCE + upload thumbnail.
4. Modul Halaman Statis (editor sama seperti Berita).
5. Modul Agenda, Galeri Foto/Video, Fasilitas (CRUD + tampilan publik).
6. Manajemen Widget & Footer dari panel admin (drag order, aktif/nonaktif).
