# Nexus Scholar - Developer Documentation

Dokumentasi ini ditujukan bagi Web Developer atau System Administrator yang akan memantain, mengembangkan, atau men-deploy Platform Jurnal Ilmiah (Nexus Scholar) berbasis PHP Native.

---

## 1. Overview Aplikasi
Nexus Scholar adalah platform ekosistem jurnal ilmiah akademik interaktif (modern academic publishing platform). Sistem ini tidak hanya menangani manuskrip dari submission hingga publication, melainkan menghadirkan "Academic Social Ecosystem" berkat fitur profil, matchmaking, komunitas, dan simulasi AI reviewer (melalui Google Gemini). 

Desain dirancang monolitik, tanpa node.js/NPM, agar kompatibel penuh direntangkan di atas arsitektur Shared Hosting (cPanel).

## 2. Stack Teknologi
*   **Backend Runtime**: PHP Native (8.1+)
*   **Database**: MySQL (MariaDB) via PHP PDO
*   **Frontend UI/UX**: HTML5, Vanilla JavaScript, Tailwind CSS (via CDN), Alpine.js (via CDN)
*   **Data Vidualization**: Chart.js (via CDN)
*   **Architecture Pattern**: Simplified MVC (Model-View-Controller)
*   **Background Jobs**: cPanel Cronjobs (memanggil script PHP)
*   **AI Engine**: Google Gemini API via cURL PHP (REST)

## 3. Modul Aplikasi
Sistem dibagi menjadi 12 modul logika:
1.  **Auth & Role Management**: Manajemen otentikasi (Native Sessions) dan hak akses (RBAC).
2.  **Journal Management**: Pembuatan pengaturan Jurnal oleh Editor.
3.  **Submission System**: Unggah manuskrip (PDF/Word), metadata abstrak, keywords.
4.  **AI Reviewer Simulation**: Prapemrosesan skor plagiasi atau struktur memakai LLM (Gemini).
5.  **Editorial Workflow**: Manajemen kepususan (Accept/Reject/Revision).
6.  **Reviewer Ecosystem**: Asignment reviewer ke dalam draft, proses feedback.
7.  **Publication System**: Kurasi isu rilis, penetapan DOI.
8.  **Interactive Article**: Tampilan baca langsung per artikel publik.
9.  **Author Analytics**: Kalkulasi metrik pembaca (views/downloads).
10. **Research Profile**: Identitas akademis user dan sinkronisasi artikel.
11. **Matchmaking**: Kolaborasi peneliti berbasis skill tagging.
12. **Research Community**: Forum internal antar user, resources, posting diskursus.

## 4. Role dan Permission
Sistem mendeteksi array klaim pengguna pada tabel `users`:
*   `super_admin`: Berkuasa atas segala jurnal, server config, manage user massal.
*   `editor`: Manajemen Submission (assign review, ubah status) untuk jurnal yang ditugaskan.
*   `reviewer`: Bisa mengakses PDF submission yang di-assign padanya dan submit form perbaikan.
*   `author`: Base user yang bisa melakukan submit artikel, tracking, community post, dan analytics portofolionya. Pendaftar umum default-nya adalah Author.

## 5. Database Overview
Database menggunakan engine `InnoDB` MySQL agar integritas rujukan kunci utama-asing (Foreign Key Constraints) dengan `ON DELETE CASCADE` berjalan lancar. Relasi master ada pada tabel `users`. Entitas artikel berjalan melintasi timeline: `submissions` -> `review_assignments` -> `published_articles`.

## 6. Folder Structure
```text
/nexus_scholar_php
├── app/
│   ├── core/         (Base Controller, Base Model, Base Router, Auth Helper)
│   ├── controllers/  (Logic kelas penganan request)
│   ├── models/       (Eksekutor query PDO spesifik per tabel)
│   ├── views/        (Layout HTML gabungan dengan PHP data injection)
│   └── routes.php    (Daftar endpoint sistem)
├── config/
│   └── env.php       (Variabel konfidensial koneksi MySQL, API Keys)
├── cron/             (File yang dijalankan Cronjob background perodic)
├── database/         (Cadangan SQL struktur tabel & dummy)
├── docs/             (Dokumentasi)
├── public/           (Document Root: Assets CSS/JS, .htaccess, entry_point list)
│   └── index.php     (Satu-satunya gerbang HTTP Request)
└── storage/          (Penyimpanan PDF artikel dan log sistem)
```

## 7. Routing System
Semua permintaan difilter ke file `public/index.php`. 
Lalu `app/routes.php` bertanggung jawab memecah URI segments (contoh `domain.com/community/post/5`) dan mengeksekusi controller yang bersangkutan (`CommunityController->post(5)`). Pola routing dirancang lugas via kondisional if-elseif array.

## 8. Controller Pattern
*   Setiap file `X_Controller.php` mem-pass data array assosiatif `$data` ke fungsi view.
*   Seluruh otorisasi (role-check) maupun sanitasi form (POST data) dipusatkan di sini sebelum menyentuh file model.
*   Flash messages / redirect flow diset pada siklus akhir method.

## 9. Model PDO Pattern
*   Bebas SQL Injection: Model *strictly* menggunakan instansiasi `Database->query()`, `Database->bind()`, dan mengeksekusi fetch/row.
*   Tidak ada *raw concatenation variables* dalam sintaks SQL (contoh `WHERE id = $id`). Semuanya menggunakan placeholder `:id`.

## 10. View Pattern
*   Direktori views dipisah per entitas (misal: `/views/communities/...`).
*   Seluruh sub-view menggunakan struktur `ob_start()` yang ditangkap `$content` variabel untuk di-render dari struktur pembungkus statis `views/layouts/main.php` (berisi `<head>` tag dan sidebar).
*   Gunakan `htmlspecialchars()` saat melakukan *echoing* `$data` yang asalnya input dari user.

## 11. Workflow Submission -> Publication
*   **Create**: Author -> `submissions` table (status `submitted`).
*   **Pemeriksaan**: Editor -> ubah parameter di row submission (status `in_review`).
*   **Putusan**: Editor klik Accept -> Baris submission finalisasi (status `accepted`).
*   **Publishing**: Editor mentransfer entitas "Accepted Submission" ke salinan tabel `published_articles`, dan artikel live ke seluruh audiens internet.

## 12. AI Reviewer Simulation Workflow
*   User (Editor) meminta prescreen ke endpoint tertentu yg men-set Flag (memasukkan ke antrean table task queue).
*   Cronjob memilah task ini, di-fire via cURL `POST` header + prompt text ke `https://generativelanguage.googleapis.com/...` memakai env API Key.
*   Teks result (Insight) disimpan ke DB di bawah entitas manuskrip untuk dievaluasi oleh Editor sebagai "opini robot cerdas".

## 13. Analytics Workflow
*   Front-end PDF / Abstract Viewer dieksekusi -> Ajax/PHP script memicu hit counter.
*   Table record mencatat ID Artikel, `action_type` ('view' atau 'download'), dan IP user / session identifier untuk meredam gandaan stat sejenak.
*   Query `GROUP BY Date/Month` me-return JSON struktur lalu dirender di visual `Canvas` ChartJS di Dashboard pribadi Author pengunggah.

## 14. Reviewer Reputation Workflow
*   Setiap `review_assignments` memuat *datetime* kesepakatan dan batas *due date*.
*   Saat Reviewer submit form feedback tepat waktu, Service menghitung agregat skor kepatuhan (poin +10) yang diakulumasikan ke tabel profil pengguna.
*   Badges (lencana) dikalkulasi real-time saat View merender data reputasi.

## 15. Research Profile & Matchmaking Workflow
*   Profile Author mengandung text tag keahlian akademik (skill\_tags).
*   User lain bisa memasukkan form input query algoritma matchmaking.
*   PHP PDO mem-build clause pencarian `LIKE %query%` ke field skills tabel Users profiles; mereturn persentase bobot relasi untuk ditunjukkan kepada user sebagai "The Best Fit Co-Author Candidate".

## 16. Community Workflow
*   Tabel independen yang dipisah menjadi Komunitas (Group), Community Posts, dan Community Comments.
*   Modul terpisah untuk diskusi grup yang informal, berbagi resources link (tabel `community_resources`) dan agenda kalender event meet (`community_events`).

## 17. Cara Instalasi Lokal
1.  Git clone / Extrak file ke directory `htdocs/nexus_scholar` (XAMPP).
2.  Import `database/modul1_to_12.sql` di phpMyAdmin (localhost).
3.  Copy file `config/env.example.php` (apabila ada) menjadi `config/env.php`.
4.  Lengkapi DB_HOST, DB_USER, DLL.
5.  Akses project di browser lokal via URL ke folder `/public` (misal `http://localhost/nexus_scholar_php/public/`). *(Btw direkomendasikan konfigurasi Apache VirtualHost dengan DocumentRoot merujuk langsung ke `/public` agar URL rapi).*

## 18. Cara Deployment Shared Hosting
*Silakan merujuk mendetail di [deployment_cpanel.md](deployment_cpanel.md).*
Prinsip utama: pindahkan sisi dalam `public/` ke `public_html/`, dan tempatkan direktori konfigurasi/koding inti (app) di sisi luar /home/ directori root untuk alasan security.

## 19. Cara Setup Cron Job
cPanel > Menu Advanced > Cron Jobs.
Tulis routing eksekusi `php` menuju path `/home/youruser/domain/cron/blabla.php` menurut jadwal menit (untuk AI queue) atau jadwal harian (untuk skoring batch processing).

## 20. Cara Backup
*   **Assets & App Storage**: Compress folder `public_html` dan `storage/uploads` menjadi file zip mingguan via cPanel File Manager.
*   **Database**: Lakukan Data Export di phpMyAdmin dengan output gzip `.sql.gz`.

## 21. Troubleshooting
*   **Blank White Page**: Nyalakan log sementara `error_reporting(E_ALL)` & `ini_set('display_errors', 1)` di file `index.php` atau main Bootstrap pada dev-mode. Seringkali akibat memori syntax error atau masalah include relative-path `require_once()`.
*   **Route Not Found / Error 404 pada Page**: Cek ekstensi apache module `$mod_rewrite` atau periksa `AllowOverride All` (konfigurasi httpd.conf Apache) apakah tidak menyala sehingga `.htaccess` file pada `public/` terabaikan.
*   **DB Connection Error**: Cek kredensial di  `env.php` dan matikan `mysql_strict_mode` apabila memproses logic group bypass/nulls error tak dikenal.

## 22. Roadmap Pengembangan Lanjutan
Potensi arsitektur masa depan yang dapat disisipkan:
1.  **Payment Gateway (Midtrans/Stripe)**: Modul untuk biaya Artikel *Article Processing Charge (APC)* open access.
2.  **OJS (Open Journal Systems) API Importer**: Script sinkronisasi migrasi XML data dari server OJS lama Universitas menuju Nexus Scholar.
3.  **PDF Watermarking Service**: Engine fpdf lanjutan untuk menaruh stamp metadata Copyright otomatis di PDF manuskrip pasca publikasi.
4.  **Integration ORCID & CrossRef**: Auto minting DOI Prefix dari REST API XML Crossref deposit pasca klik rilis *Publish*.
5.  **Multi-Journal Tenant / SasS Mode**: Memperluas table schema dengan `tenant_id` supaya framework menampung ribuan domain jurnal terpisah dengan database sentral tunggal.

---
*End of Documentation*
