# Modul 3: Submission System

## 1. User Flow Author
1. **Mulai Submission**: Author login, masuk ke Dashboard, klik "My Submissions", lalu klik "New Submission".
2. **Pilih Jurnal**: Author memilih jurnal target dari dropdown (hanya jurnal yang *active*).
3. **Isi Metadata**: Author mengisi Title, Abstract, dan Keywords.
4. **Data Authors**: Author menambahkan daftar penulis pendukung (Co-Authors), afiliasi, dan menentukan siapa Corresponding Author-nya.
5. **Upload File**: Author mengunggah Main Article (PDF/DOCX) dan optional file tambahan (Supplementary files seperti dataset).
6. **Simpan / Submit**: 
   - Klik "Save as Draft" jika belum selesai. Status = `draft`.
   - Klik "Submit" jika sudah final. Status berubah menjadi `submitted`.
7. **Tracking Status**: Author dapat memantau status artikel di tabel halaman "My Submissions".

## 2. SQL CREATE TABLE
Mencakup tabel `submissions`, `submission_authors`, dan `submission_files`. (Disimpan di `database/modul3_submission.sql`).

## 3. Model PHP
- `Submission.php`: Operasi CRUD tabel `submissions` PDO.
- `SubmissionAuthor.php`: Menyimpan data multiple author per submission.
- `SubmissionFile.php`: Menyimpan referensi path file ke dalam DB.

## 4. Controller PHP
`SubmissionController.php` mengatur alur logika dari upload, validasi form, pengaturan author, hingga transisi status (misal submit dari draft). Controller ini akan mengecek kepemilikan author agar user lain tidak bisa mengedit draft milik orang lain.

## 5. Route
```php
$router->get('/submissions', 'SubmissionController', 'index');
$router->get('/submissions/create', 'SubmissionController', 'create');
$router->post('/submissions/store', 'SubmissionController', 'store');
$router->get('/submissions/edit/{id}', 'SubmissionController', 'edit');
$router->post('/submissions/update/{id}', 'SubmissionController', 'update');
$router->post('/submissions/submit/{id}', 'SubmissionController', 'submit'); // final submit action
$router->get('/submissions/show/{id}', 'SubmissionController', 'show');
```

## 6. View PHP
- `app/views/submissions/index.php`
- `app/views/submissions/create.php`
- `app/views/submissions/edit.php`
- `app/views/submissions/show.php`

## 7. File Upload Strategy
- **Lokasi Penyimpanan**: `storage/uploads/submissions/{submission_id}/{jenis_file}/` (Disimpan di luar folder public jika mungkin, tapi untuk shared hosting kita asumsikan di dalam project dengan `.htaccess` deny).
- **Proses Berurutan**:
  1. Author membuat draft artikel dulu (mendapat submission ID).
  2. Author menambahkan file (menggunakan Submission ID untuk merapikan structure folder).

## 8. Validasi File
Divalidasi menggunakan helper `upload_file()` yang mengecek ukuran (Max 10MB) dan `mime_types` yang diizinkan (hanya `application/pdf`, `application/msword`, `application/vnd.openxmlformats-officedocument.wordprocessingml.document`).

## 9. Status Tracking
Menggunakan Enum DB: `'draft', 'submitted', 'under_initial_check', 'under_review', 'revision_required', 'accepted', 'rejected', 'published'`. Di halaman show, author akan melihat badgenya.

## 10. Testing Scenario
1. Login sebagai `author`. Buat Submission baru dengan Title "Uji Coba" dan pilih suatu Jurnal -> Simpan sebagai Draft.
2. Edit submission tersebut, coba uplaod file berjenis `.exe` atau script PHP `.php`. Sistem harus menolak upload tersebut.
3. Edit dengan mengupload PDF resmi. File harus masuk ke folder storage.
4. Klik tombol "Submit final". Status berubah menjadi `submitted`. Setelah status menjadi status akhir, author tidak bolah lagi bisa mengakses halaman `edit`.
