# myPortfolio MBIP

Sistem pengurusan myPortfolio staf MBIP menggunakan PHP native modular, Bootstrap 5 dan MSSQL melalui `sqlsrv`.

## Analisis Dokumen Rujukan

Fail rujukan: `D:\myPortfolio\myPortfolio Amarul Complete.docx`

Struktur rasmi yang dikenal pasti:

1. Muka hadapan `myPortfolio`
2. Maklumat pegawai
3. Diluluskan oleh
4. Jadual pengemaskinian
5. Kandungan
6. `1. Carta Organisasi` - MBIP dan Unit/Seksyen
7. `2. Carta Fungsi`
8. `3. Aktiviti-Aktiviti Bagi Fungsi`
9. `4. Deskripsi Tugas`
10. `5. Proses Kerja`
11. Blok aktiviti berulang: `AKTIVITI n`, proses kerja, carta alir, senarai semak
12. `6. Senarai Undang-Undang, Peraturan dan Punca Kuasa`
13. `7. Senarai Borang`
14. `8. Senarai Jawatankuasa Yang Dianggotai`

Template seksyen disimpan dalam `t_seksyen_template` supaya developer/admin boleh tambah seksyen tanpa ubah banyak kod.

## Keperluan Server

- Apache / Laragon
- PHP 8.1+
- Extension PHP `sqlsrv`
- Microsoft SQL Server
- Composer untuk fungsi jana Word/PDF
- PHPWord dan Dompdf melalui Composer

## Setup

1. Letakkan projek di:

   ```text
   C:\laragon\www\myPortfolio
   ```

2. Salin konfigurasi lokal:

   ```text
   inc\config.local.example.php -> inc\config.local.php
   ```

3. Kemaskini `inc/config.local.php`:

   ```php
   'db' => [
       'server' => 'localhost',
       'database' => 'myPortfolioMBIP',
       'username' => 'sa',
       'password' => 'password',
   ],
   ```

4. Jalankan SQL mengikut turutan:

   ```text
   sql\001_create_tables.sql
   sql\002_seed_roles.sql
   ```

5. Pasang dependency dokumen:

   ```bash
   composer install
   ```

6. Akses sistem:

   ```text
   http://localhost/myPortfolio/public
   ```

## Konfigurasi SSO myID@MBIP

Sistem tidak menyimpan password. Login membaca identity daripada SSO/header/session.

Header yang disokong:

- `HTTP_X_MYID_NO_PEKERJA`
- `HTTP_X_MYID_NAMA`
- `HTTP_X_MYID_EMAIL`
- `HTTP_X_MYID_JAWATAN`
- `HTTP_X_MYID_GRED`
- `HTTP_X_MYID_JABATAN`
- `HTTP_X_MYID_BAHAGIAN`
- `HTTP_X_MYID_UNIT`
- `HTTP_X_MYID_PERANAN`

Jika nama header sebenar myID@MBIP berbeza, kemaskini `app/Services/SsoService.php`.

Untuk produksi:

```php
'app' => [
    'dev_login' => false,
    'sso_login_url' => 'https://sso.mbip.gov.my/...',
    'sso_logout_url' => 'https://sso.mbip.gov.my/logout',
],
```

## Modul

- Dashboard staf dan pengarah
- Maklumat staf
- Seksyen myPortfolio dinamik
- Proses kerja dan langkah proses
- Jana carta alir automatik Mermaid
- Preview carta alir live
- Hantar semakan
- Mula semakan, lulus, tolak dengan catatan wajib
- Audit trail
- Jana Word `.docx`
- Jana PDF `.pdf`
- Muat turun dokumen dengan semakan akses

## Workflow Status

```text
DRAF -> DIHANTAR -> DALAM SEMAKAN -> LULUS
                         |
                         -> DITOLAK -> DIHANTAR semula
```

Rekod `LULUS` dikunci daripada kemaskini biasa. Dokumen Word/PDF hanya boleh dijana selepas status `LULUS`.

## Nota Jana Dokumen

Generator menggunakan:

- `phpoffice/phpword` untuk Word
- `dompdf/dompdf` untuk PDF

Jika butang jana dokumen memaparkan ralat library belum dipasang, jalankan:

```bash
composer install
```

Carta alir dalam sistem dipaparkan menggunakan Mermaid.js. Untuk Word/PDF, sistem menghasilkan SVG carta alir ringkas daripada langkah proses supaya boleh dimasukkan ke dokumen.

## Keselamatan

- Semua halaman dalaman memerlukan session login.
- Role-based access untuk `STAF`, `PENGARAH`, `ADMIN`.
- Staf hanya boleh akses portfolio sendiri.
- Pengarah boleh semak staf di bawah pengarah yang sama atau jabatan sama.
- Semua query menggunakan `sqlsrv_query` dengan parameter.
- Borang penting menggunakan CSRF token.
- Tindakan penting direkod dalam `t_audit_log`.
