# Workspace Organizer — Petunjuk Instalasi

Aplikasi manajemen kerja berbasis PHP + PostgreSQL. Semua file berada dalam **satu folder** tanpa subfolder, siap di-copy ke server.

---

## 0. Yang Anda Butuhkan

| Kebutuhan | Keterangan |
|---|---|
| PHP | Versi **8.0 atau lebih baru** |
| Ekstensi PHP | `pdo_pgsql`, `pgsql`, `fileinfo`, `openssl`, `mbstring` |
| Database | **PostgreSQL 12+** (diuji pada PostgreSQL 16) |
| Web server | Apache atau Nginx (atau PHP built-in server untuk uji coba) |
| Database sudah dibuat | Nama DB, user, password sudah tersedia |

> Database yang dikonfigurasi: **`wasiator_misc003`**, user **`wasiator_user003`**.
> Pastikan database kosong ini sudah dibuat dan user-nya punya hak penuh (CREATE TABLE, INSERT, dll).

---

## LANGKAH 1 — Salin Semua File ke Server

Copy **seluruh isi folder** ini ke satu folder di server web Anda, misalnya:

```
/var/www/html/workspace/        (Apache)
/usr/share/nginx/html/workspace/ (Nginx)
public_html/workspace/           (shared hosting / cPanel)
```

Jangan membuat subfolder. Semua 60 file `.php`, `.css`, `.js` harus berada sejajar di satu folder yang sama.

---

## LANGKAH 2 — Periksa Koneksi Database (file `dbtop.php`)

Buka `dbtop.php`. Pastikan 4 baris ini sesuai dengan database Anda:

```php
$host     = 'localhost';
$dbname   = 'wasiator_misc003';
$user     = 'wasiator_user003';
$password = 'Tump4s1@n';
```

Jika kredensial Anda berbeda, ubah baris di atas lalu simpan. **Tidak perlu mengubah file lain.**

> Tips uji cepat dari terminal:
> ```
> php -r "new PDO('pgsql:host=localhost;dbname=wasiator_misc003','wasiator_user003','Tump4s1@n'); echo 'KONEKSI OK\n';"
> ```

---

## LANGKAH 3 — Jalankan Installer (membuat tabel + akun superuser)

Buka di browser:

```
http://<alamat-server-anda>/workspace/install.php?fresh=1
```

Contoh:
```
http://localhost/workspace/install.php?fresh=1
```

Parameter `?fresh=1` akan:
1. Menghapus tabel lama (jika ada) — **aman untuk instalasi pertama**
2. Membuat **28 tabel** dalam urutan dependensi yang benar
3. Mengisi **±41 baris konfigurasi** (config, SLA default, SMTP, dll)
4. Membuat **akun superuser**

Anda akan melihat daftar centang hijau. Baris terakhir harus berbunyi:

> ✅ **All operations committed successfully.**

> ⚠️ **PERHATIAN:** Gunakan `?fresh=1` HANYA pada instalasi pertama atau saat sengaja ingin me-reset total. Pada server yang sudah berisi data, cukup buka `install.php` **tanpa** `?fresh=1` (installer bersifat idempoten — tidak akan menimpa data yang ada).

---

## LANGKAH 4 — LOGIN dengan Akun Superuser

Buka:

```
http://<alamat-server-anda>/workspace/login.php
```

Masuk dengan kredensial bawaan berikut:

```
╔══════════════════════════════════════╗
║   USERNAME : superadmin               ║
║   PASSWORD : Admin@123                ║
╚══════════════════════════════════════╝
```

> Anda juga bisa login memakai email: `superadmin@workspace.local`

---

## LANGKAH 5 — WAJIB: Ganti Password Superuser

Segera setelah login pertama:

1. Klik menu kiri **⚙️ Akun Saya → 🔒 Ganti Password**
   (atau buka `change_password.php`)
2. Masukkan password lama `Admin@123` dan password baru yang kuat
   (minimal 8 karakter, ada huruf besar + angka)

---

## LANGKAH 6 — WAJIB: Hapus / Amankan `install.php`

Setelah instalasi sukses, **hapus file `install.php` dari server**, atau pindahkan ke luar folder web. Ini mencegah orang lain menjalankan ulang installer.

```
rm install.php
```

---

## LANGKAH 7 — Siapkan Folder Upload (untuk lampiran Issue & Workflow)

1. Buat folder bernama `uploads` di dalam folder aplikasi:
   ```
   mkdir uploads
   chmod 775 uploads
   ```
   (Pada beberapa server, sistem akan otomatis membuatnya saat upload pertama. Tetapi membuat manual lebih aman.)

2. **Amankan folder upload**: rename file `uploads_htaccess.txt` (sudah disertakan) menjadi `.htaccess`, lalu pindahkan ke dalam folder `uploads`:
   ```
   mv uploads_htaccess.txt uploads/.htaccess
   ```
   Ini mencegah file lampiran diakses langsung lewat URL — semua lampiran hanya bisa dibuka lewat `attachment.php` yang memeriksa hak akses.

   > Untuk Nginx, tambahkan di server block:
   > ```
   > location /workspace/uploads/ { deny all; return 403; }
   > ```

---

## (OPSIONAL) LANGKAH 8 — Aktifkan Laporan Terjadwal via Email

Hanya jika Anda ingin laporan otomatis dikirim via email.

1. **Konfigurasi SMTP** lewat database (atau biarkan kosong untuk memakai fungsi `mail()` bawaan PHP):
   ```sql
   UPDATE app_config SET cfg_value='smtp.gmail.com'    WHERE cfg_key='mail.smtp_host';
   UPDATE app_config SET cfg_value='587'               WHERE cfg_key='mail.smtp_port';
   UPDATE app_config SET cfg_value='tls'               WHERE cfg_key='mail.smtp_secure';
   UPDATE app_config SET cfg_value='akun@gmail.com'    WHERE cfg_key='mail.smtp_user';
   UPDATE app_config SET cfg_value='app_password_anda' WHERE cfg_key='mail.smtp_pass';
   UPDATE app_config SET cfg_value='no-reply@domain.com' WHERE cfg_key='mail.from_address';
   ```

2. **Pasang cron** agar laporan terjadwal berjalan (setiap 15 menit):
   ```
   crontab -e
   ```
   tambahkan baris:
   ```
   */15 * * * * /usr/bin/php /path/lengkap/ke/workspace/cron_run_reports.php >/dev/null 2>&1
   ```

3. Buat jadwal laporan lewat menu **📊 Laporan → 📨 Jadwal Laporan** di aplikasi.

---

## Ringkasan Cepat (TL;DR)

```
1. Copy semua file  →  /var/www/html/workspace/
2. Cek dbtop.php    →  kredensial PostgreSQL benar
3. Buka browser     →  install.php?fresh=1   (tunggu "All operations committed")
4. Buka login.php   →  superadmin / Admin@123
5. Ganti password   →  change_password.php
6. Hapus            →  install.php
7. Buat folder      →  uploads/  + .htaccess (dari uploads_htaccess.txt)
```

---

## Struktur Menu Setelah Login

```
📁 Workspace          Dashboard, Tasks, Agenda, Meetings, Issue Tracker, Workflow, Resources
📊 Laporan            14 Laporan (Task/Agenda/Meeting/Issue/Workflow/User) + Jadwal Laporan
🛠️ Administrasi       Users, Sites, Workgroups, User↔Workgroup, Audit Log
⚙️ Akun Saya          Profile, Ganti Password, Delegasi
```

## Alur Pemakaian Pertama (disarankan)

1. **Administrasi → Sites**: buat minimal 1 site (lokasi/unit kerja)
2. **Administrasi → Workgroups**: buat workgroup di bawah site, tunjuk seorang manager
3. **Administrasi → Users**: buat akun pengguna (role: admin/manager/user/guest)
4. **Administrasi → User ↔ Workgroup**: masukkan pengguna ke workgroup
5. Mulai buat **Task, Agenda, Meeting, Issue, Workflow**
6. Lihat hasil di **Dashboard** dan **Laporan**

---

## Catatan Penting tentang Zona Waktu

Aplikasi memakai zona waktu **Asia/Jakarta** (lihat `config.php`, konstanta `DEFAULT_TIMEZONE`). Saat koneksi, `dbtop.php` otomatis menyetel zona waktu sesi PostgreSQL agar sama dengan PHP, sehingga `NOW()` dan kolom waktu konsisten. Jika server Anda di zona waktu lain, ubah `DEFAULT_TIMEZONE` di `config.php` saja.

---

## Pemecahan Masalah

| Gejala | Solusi |
|---|---|
| "Connection failed" di install.php | Cek kredensial di `dbtop.php`; pastikan PostgreSQL berjalan & ekstensi `pdo_pgsql` aktif |
| Tabel sudah ada / ingin reset | Buka `install.php?fresh=1` (menghapus semua data lalu buat ulang) |
| Lampiran tidak bisa di-upload | Pastikan folder `uploads/` ada dan writable (`chmod 775`) |
| Lampiran bisa dibuka tanpa login | Pastikan `.htaccess` sudah ada di folder `uploads/` |
| Lupa password superadmin | Reset via SQL: lihat perintah di bawah |
| Waktu tampil meleset beberapa jam | Cek `DEFAULT_TIMEZONE` di `config.php` |

### Reset Password Superadmin via SQL (jika lupa)

Jalankan di PHP (mis. via `php -a` atau script sementara):
```php
require 'dbtop.php';
$hash = password_hash('PasswordBaruAnda', PASSWORD_BCRYPT, ['cost'=>11]);
$pdo->prepare("UPDATE app_user SET password_hash=? WHERE username='superadmin'")->execute([$hash]);
echo "Password direset.\n";
```

---

## Daftar 60 File

**Inti / sistem (9):** dbtop.php, config.php, helpers.php, auth.php, install.php, header.php, footer.php, style.css, app.js

**Autentikasi (4):** login.php, logout.php, profile.php, change_password.php

**Foundation/Admin (9):** dashboard.php, users.php, user_form.php, sites.php, site_form.php, workgroups.php, workgroup_form.php, assignments.php, audit_log.php

**Task (3):** tasks.php, task_form.php, task_view.php

**Agenda + Resource (5):** agenda.php, agenda_form.php, agenda_view.php, resources.php, resource_form.php

**Meeting (3):** meetings.php, meeting_form.php, meeting_view.php

**Issue (3):** issues.php, issue_form.php, issue_view.php

**Workflow (3):** workflows.php, workflow_form.php, workflow_view.php

**Lampiran (1):** attachment.php

**Laporan (18):** reports.php, report_filter_form.php, report_runner.php, report_schedules.php, cron_run_reports.php, dan 14 file report_rpt_*.php

**Delegasi (1):** delegations.php

**Keamanan upload (1):** uploads_htaccess.txt (rename → uploads/.htaccess)

---

*Selesai. Selamat menggunakan Workspace Organizer.*
