Skip to content

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

PathBerisi
main.phpSatu-satunya titik masuk UI. Memuat bootstrap, lalu men-dispatch berdasarkan page= dan cmd=.
setting.php, connect.php, db_config.php, globals.phpBootstrap: .env, array $_DB, koneksi PDO, tabel config, sesi. globals.php adalah kode turunan Joomla yang mengemulasi register_globals.
_menu.phpMembangun 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

  1. Setiap request UI masuk ke main.php. Ia me-require setting.php, yang memuat .env (symfony/dotenv), membangun $_DB di connect.php, membuka koneksi PDO lewat InactPDO::connect(), membungkusnya sebagai $pdo = new PDOLogActivity(), memuat inweb_config ke $rconfig dan global $inweb_*, dan memulai sesi. main.php lalu mengeset $INWEB_CONFIG = getInwebConfigList().
  2. page=member mengirim request ke modules/member/member.php, yang menangani login, logout, dashboard, unduhan, dan dispatch modul.
  3. Modul dipilih dari cid. Tautan sidebar adalah main.php?page=member&cid=<md5 dari modules_code>. getModuleList() di reference_function.inc.php mengindeks baris ts_modules dengan md5 itu, dan class Base (src/basic/Base.php) menyelesaikan modul yang dipilih, layar sub-referensinya (modref=) dan, untuk report, report_code-nya. Hanya modul terpasang yang pengguna punya privilege view-nya yang bisa dicapai.
  4. Folder modul mengambil alih. modules/<code>/<code>.php adalah controller-nya. Ia mendefinisikan template, memeriksa privilege, dan meng-include handler yang cocok dengan request.
  5. 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:

FilePeran
<code>.phpController: definisi template, pemeriksaan privilege, dispatch pada cmd= dan act=.
<code>_header.inc.phpTombol toolbar, masing-masing di balik pemeriksaan havePrivilegesResource().
<code>_handler_form.phpHandler GET yang dikunci cmd=: form, dialog, ekspor, cetak.
<code>_handler_post.phpHandler POST yang dikunci act=: add, edit, delete, submit.
<code>.inc.phpHelper query yang dipakai handler. Sering kode tertua di folder.
<code>_groupby.inc.php, <code>_subgrid.inc.phpXML pohon dan sub-grid.
<code>_handler_print_browse.inc.phpMode cetak, dicapai dengan print= dari menu Reporting.
<code>_multiupload_form.php, <code>_multiupload_upload.phpPengunggah multi-file.
<code>_sendmail_*.phpDialog kirim lewat email.
<code>.class.phpBila ada, class yang mengimplementasikan RoutingProcurementInterface untuk persetujuan.
*_041214.php, *.bakBackup 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

FileIsinya
libraries/tracking_function.inc.phpYang besar: privilege (havePrivilegesResource()), folder library, orang dan project, helper referensi DMS.
libraries/reference_function.inc.phpgetInwebConfigList(), 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.phpHelper procurement, penomoran dokumen, pemilihan print flavour, PDF PO.
libraries/InactPDO.php, PDOLogActivity.phpLapisan PDO, lihat Portabilitas database.
libraries/inweb.lib.phpHelper legacy, termasuk iw_mysql_query(), yang melempar exception begitu masuk di empat dari lima fork.
src/basic/Base.phpMODULE_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.phpHelper 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.
  • cid adalah 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\Html di inweb_config memilih class src/<flavour>/ mana yang merender dokumen cetak. Default-nya Resindo.
  • 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.