Tur codebase
Apa ada di mana di sebuah repository INACT, dan bagaimana sebuah klik menjadi query. Ditulis untuk repository master; setiap fork punya tata letak yang sama.
Cara halaman ini diverifikasi
Ditulis dari master pada 2026-09-06. Hitungan direktori dari hari itu.
Tata letak top-level
| Path | Berisi |
|---|---|
main.php | Satu-satunya titik masuk UI. Memuat bootstrap, lalu men-dispatch berdasarkan page= dan cmd=. |
setting.php, connect.php, db_config.php, globals.php | Bootstrap: .env, array $_DB, koneksi PDO, tabel config, sesi. globals.php adalah kode turunan Joomla yang mengemulasi register_globals. |
_menu.php | Membangun sidebar dari registri modul, report dan dashboard. |
modules/ | 54 folder, satu per modul. Aplikasinya sendiri. |
templates/tracking_v2/ | 839 template HTML dan JavaScript di bawah js/. Satu folder untuk seluruh aplikasi. |
libraries/ | PHP bersama: library fungsi, lapisan PDO, mesin template, dan kode pihak ketiga yang di-vendor (Zend, FPDF, TCPDF, html2pdf, jpgraph, PhpMailer). |
src/ | Kode PSR-4: basic/ (class Base dengan config registri modul, helper untuk Color, DateTime, Html, Number, Path) dan flavour custom/, resindo/, minerba/. |
models/ | Model gaya ActiveRecord di atas illuminate/database, kebanyakan procurement: spb, rfq, purchase_order, mrr, expediting, routing, vendor. |
contracts/ | Interface: routing_procurement.interfaces.php dan abstrak email. |
db/ | phinx: 431 migrasi, 52 seed, template migrasi. |
cron/ | Job terjadwal, lihat Cron job. |
dashlets/ | Folder widget mandiri, lihat Dashboard. |
includes/ | Aset front-end: javascripts/tracking/ dengan kode dhtmlx, PDF viewer (pdfviewer, pdfviewer_mozilla, pdfviewern, inactviewer), kalender dan jQuery; pdfjs/; style/; richhtml5/. Skrip API PDF viewer di bawah javascripts/tracking/pdfviewer/web/api/ mengerjakan pekerjaan server, misalnya auto-publish setelah persetujuan. |
download/ | Pengiriman file: download.php, watermark.php, downloadattachment.php. |
rest/ | Lapisan REST berbasis Slim yang dipakai front-end mobile dan touch: rout.php, checkLogin.php, restIpad.php, touch.php. |
touch/ | Front-end touch. |
registration/ | Wizard setup pertama: company, departemen, penomoran, rekening bank, privilege. |
docUpload/, docTemp/ | File yang diunggah dan file sementara. Dikonfigurasi oleh fileupload dan filetemp di inweb_config. |
image/, minify/, plugins/ | Gambar statis, minifier, query profiler. |
ioncube/ | Wizard loader ionCube untuk deployment ter-encode. Tidak dipakai di checkout plain. |
deploy/, .github/workflows/ | Deploy GitHub Actions, lihat Environment dan deploy. Tidak pernah disinkronkan ke twin terenkripsi. |
vendor/ | Composer. |
Dari klik ke query
- Setiap request UI masuk ke
main.php. Ia me-requiresetting.php, yang memuat.env(symfony/dotenv), membangun$_DBdiconnect.php, membuka koneksi PDO lewatInactPDO::connect(), membungkusnya sebagai$pdo = new PDOLogActivity(), memuatinweb_configke$rconfigdan global$inweb_*, dan memulai sesi.main.phplalu mengeset$INWEB_CONFIG = getInwebConfigList(). page=membermengirim request kemodules/member/member.php, yang menangani login, logout, dashboard, unduhan, dan dispatch modul.- Modul dipilih dari
cid. Tautan sidebar adalahmain.php?page=member&cid=<md5 dari modules_code>.getModuleList()direference_function.inc.phpmengindeks barists_modulesdengan md5 itu, dan classBase(src/basic/Base.php) menyelesaikan modul yang dipilih, layar sub-referensinya (modref=) dan, untuk report,report_code-nya. Hanya modul terpasang yang pengguna punya privilegeview-nya yang bisa dicapai. - Folder modul mengambil alih.
modules/<code>/<code>.phpadalah controller-nya. Ia mendefinisikan template, memeriksa privilege, dan meng-include handler yang cocok dengan request. - Grid dimuat dua kali. Halaman merender template dengan dhtmlxGrid kosong; grid lalu meminta URL yang sama dengan
&xml=1, dan modul menjawab dengan baris XML. Grid kosong pada halaman yang tampil berarti request XML-nya gagal.
Bentuk sebuah modul
Hampir setiap folder modul mengikuti satu pola. Pelajari sekali:
| File | Peran |
|---|---|
<code>.php | Controller: definisi template, pemeriksaan privilege, dispatch pada cmd= dan act=. |
<code>_header.inc.php | Tombol toolbar, masing-masing di balik pemeriksaan havePrivilegesResource(). |
<code>_handler_form.php | Handler GET yang dikunci cmd=: form, dialog, ekspor, cetak. |
<code>_handler_post.php | Handler POST yang dikunci act=: add, edit, delete, submit. |
<code>.inc.php | Helper query yang dipakai handler. Sering kode tertua di folder. |
<code>_groupby.inc.php, <code>_subgrid.inc.php | XML pohon dan sub-grid. |
<code>_handler_print_browse.inc.php | Mode cetak, dicapai dengan print= dari menu Reporting. |
<code>_multiupload_form.php, <code>_multiupload_upload.php | Pengunggah multi-file. |
<code>_sendmail_*.php | Dialog kirim lewat email. |
<code>.class.php | Bila ada, class yang mengimplementasikan RoutingProcurementInterface untuk persetujuan. |
*_041214.php, *.bak | Backup bertanggal. Tidak dirutekan. Abaikan. |
Template adalah templates/tracking_v2/<code>_browse.htm, <code>_form.htm, <code>_search.htm dan seterusnya, dirender oleh Inweb_Template (libraries/inweb/Inweb/Template.php): $tpl->Define(), $tpl->Assign(), $tpl->Parse(). Variabel template ditulis {name} dan blok dinamis didefinisikan dengan DefineDynamic().
Library yang paling sering kamu baca
| File | Isinya |
|---|---|
libraries/tracking_function.inc.php | Yang besar: privilege (havePrivilegesResource()), folder library, orang dan project, helper referensi DMS. |
libraries/reference_function.inc.php | getInwebConfigList(), daftar modul dan report, daftar action indicated, getMdrMatrixTypeList(), helper operator-role. |
libraries/additional_global_variables.inc.php | $INACT_CONFIG, $ACTION_CODE_FOR_ROUTING, $LIST_ORGANIZATION, $PAGE_TYPE_ONLOADED_AS, $KEYCONFIG_*. Konstanta yang membentuk perilaku. |
libraries/procure_function.inc.php, numbering_function.inc.php, print_template_function.inc.php, purchase_order_pdf.inc.php | Helper procurement, penomoran dokumen, pemilihan print flavour, PDF PO. |
libraries/InactPDO.php, PDOLogActivity.php | Lapisan PDO, lihat Portabilitas database. |
libraries/inweb.lib.php | Helper legacy, termasuk iw_mysql_query(), yang melempar exception begitu masuk di empat dari lima fork. |
src/basic/Base.php | MODULE_REFERENCE_TABLE_CONFIG: tabel, kolom dan label mana yang diikat setiap layar referensi generik. Tambah layar referensi dengan menambah entri di sini. |
modules/routing/routing.inc.php | Helper routing, class Transmittal ada di sebelahnya, RoutingProcurementUc.class.php juga. |
Hal yang mengejutkan pembaca baru
- Emulasi
register_globals.$_GET['doc_no']juga$doc_no. Banyak handler membaca variabel telanjangnya.br_form_vars('name')adalah accessor penyaring yang dipakai kode lebih baru. cidadalah md5. Grep kode modulnya, bukan hash-nya.- Dua lapisan akses data hidup berdampingan.
iw_mysql_query()/mysqli_*legacy dan$pdo. Di tempat helper legacy melempar exception, layar apa pun yang mencapainya mati. Halaman modul mencantumkan jalur mana saja itu. - Komentar dalam Bahasa Indonesia umum di kode lama (
// buat rout return status menjadi N). Layak dibaca; sering menjelaskan aturan klien. - Kode mati dibiarkan di tempat: blok yang dikomentari, penjaga
if (false), file backup bertanggal. Fungsi yang ada bukan bukti fitur bekerja. Periksa jalur aktifnya. - Flavour.
Feature\PrintDoc\Htmldiinweb_configmemilih classsrc/<flavour>/mana yang merender dokumen cetak. Default-nyaResindo. - Seed adalah data referensi.
db/seeds/adalah asal entri menu, key config, kode action dan baris report. Saat sebuah fork "punya fitur yang tidak dimiliki master", mulai dengan diff seed-nya.