Document Library
Modul: documents. Register dokumen yang dimiliki sebuah project, ditampilkan sebagai pohon folder dengan grid dokumen. File yang diunggah dan dipublikasikan mendarat di sini, pengguna mengunduh dari sini, dan dari sini sebuah dokumen bisa dikirim lewat email atau dimasukkan ke routing.
Cara halaman ini diverifikasi
Ditulis dari master pada 2026-09-06 dan dibandingkan dengan big five di hari yang sama. Bagian layar ditulis ulang pada 2026-09-07 dengan layar dibuka di inact-ktp.eris.place (snapshot produksi KTP, project VDRL, user Pangesti Risang Ardyanseto).
Apa itu
Document Library punya tiga lapis:
| Lapis | Tabel | Berisi |
|---|---|---|
| Folder | ts_doc_library | library_id, library_code, library_desc, library_parent, contract_ref. Pohon yang dikunci library_parent. ts_map_doc_lib_project menyatakan folder mana milik project mana. |
| Dokumen | ts_documents, ditempatkan oleh ts_map_documents_library | Baris register (nomor, revisi, judul, originator, kode issued, tanggal, hasil) dan penempatan foldernya (doc_no, library_code, stat_id). Satu dokumen bisa ada di beberapa folder. |
| File | ts_file_explorer, ditautkan oleh ts_map_doc_file | File fisik (exp_file_name, ukuran, tipe, originator, folder, tanggal unggah, has_downloaded, is_exists) dan tautan ke dokumen. |
Tiga tabel yang sama inilah yang ditulis Upload saat mendaftarkan PDF dan yang ditulis Sign Off saat memublikasikan salinan _R yang sudah direview. Document Library adalah pembaca data itu, plus jalur masuk manual.
Layarnya

Halamannya documents.php dengan template documents_browse.htm, tersusun tiga bagian:
- Pohon folder di kiri (
cmd=groupby, dibangundocuments_groupby.inc.phpdarits_doc_libraryyang di-join ke folder project). Akarnya adalah project; project VDRL di KTP punya Administration, Project Plan & Control, Deliverables dan Final Doc di bawahnya, dengan jumlah dokumen per folder. Memilih folder memfilter grid padamap.library_code. - Grid, satu baris per dokumen dengan revisi terakhirnya, di folder yang dipilih. Setiap baris punya
+yang membuka sub-grid revisi (cmd=subgrid): kolom yang sama untuk setiap revisi nomor dokumen itu, jadi4_R,4,3_Rdan3ada di bawah satu baris. - Detail of Document, panel yang terlipat di tepi kanan. Dibuka dengan panahnya dan diisi oleh klik pada sebuah baris (
cmd=docdetail,document_details.php): file dengan ukuran dan link download, Result Code, Uploaded By, Library Code, dan kolom audit.


Kolom
Kolom grid berasal dari get_doc_column() di documents.inc.php, dan setiap fork memperluas daftar itu. Master menampilkan ID, Doc Type, Document Number, Title, Rev, Rev Date, VDR Rev, Issued Status, Attachments, Incoming Transmittal, Submission Date, Due Date, Sign Off Date, Returned Date, Expiration Date, Outgoing Transmittal, Return Code, Next Expected Submission, Project Code, Area, Well Site, Originator (Company dan Person), Discipline, Document Type, Document Category, System Code, Drawing Category, Contract / PO Number, Document Classification, Function Code, Author, Document Index, Remarks, MDR / Non-MDR dan Rev. Date. Sel Attachments adalah link yang mendaftar file-nya.
Toolbar
Lima tombol ditambahkan documents_header.inc.php sesuai privilege documents user; sisanya tetap di template.
| Tombol | Privilege | Yang dilakukan |
|---|---|---|
| New | add | form Add Document (act=add): baris register, penempatan folder, pemetaan sistem (ts_map_doc_system). Dengan auto numbering menyala, form menawarkan nomor yang dibuat otomatis |
| Edit | edit | act=edit menulis ulang baris register dan membuat ulang penempatan folder dan pemetaan sistem |
| Delete | delete | act=deletedata menghapus baris register, tautan filenya, penempatan folder dan pemetaan sistem |
| Upload | add | dialog Upload Document: melampirkan file ke dokumen terpilih lewat pengunggah multi-file (document_multiupload_upload.php). Ini upload milik library sendiri; upload MDR yang memulai routing ada di Master Doc. Register |
| Copy | add | form Add yang terisi dari dokumen terpilih |
| Refresh, Search, Sort | siapa pun | muat ulang; dialog Search Data (basic dan advanced, seperti di MDR); dialog sort pada kolom grid |
| Export CSV, Export Excel | siapa pun | cmd=exportCSV, exportXLS, grid dengan filter saat ini |
| siapa pun | form kustomisasi report Documents Library (cmd=print_costume) | |
| Ungroup, Regroup By | siapa pun | cmd=regroup: mengelompokkan grid per kolom, dengan kolom sort dan urutan |
| Download | siapa pun | batch download: file dokumen terpilih sebagai satu zip (cmd=batchdownload) |
| Send | siapa pun | di menu baris: dialog kirim lewat email, lihat di bawah |




Aksi per baris di menu baris: Routing detail (cmd=routdetail), Route this document (cmd=routing_this_doc, membuka form routing untuk dokumen library yang tidak lewat MDR), View attachments (cmd=viewattach), dan report cetak yang tercantum di bawah. Menu itu juga menawarkan Unpublish.
Akses folder
Dua mekanisme membatasi folder mana yang dilihat pengguna:
ts_doc_library_priv:resource_group_id×library_id. Saat resource group pengguna punya baris di sini,documents.phpmembangun$filterFolderAccesssehingga pohon dan grid hanya menampilkan folder itu. Tanpa baris berarti tanpa batasan.library_folder_access_default(config, default1): saat folder dibuat, baris akses ditambahkan otomatis untuk resource group project, supaya folder baru tidak tak terlihat karena kecelakaan. Lihat inweb_config.
ts_library_index_access (person_id × library_index_id × project_id) adalah tabel ketiga, per orang, yang dipakai layar arsip dan indeks di bawah member/.
Unduh dan watermark
Setiap tautan file adalah main.php?page=member&cmd=download&tp=pdf&md=document&fl=<file>&docno=<doc>. member.php menyerahkannya ke download/watermark.php. Kalau setting watermark project aktif (watermark_active) dan tipenya PDF, file dicap lewat libraries/fpdf/inact_watermarking_pdf.php sebelum dialirkan; kalau tidak, dialirkan apa adanya. Unduhan vendor lewat tautan bersama dicatat ke ts_downloadfile_link.
Ini watermark unduhan, dikonfigurasi di DMS Reference. Bukan flag enable_watermark, yang dulu milik pencapan SPRD / VOID saat upload yang sudah dihapus.
Kirim lewat email
Tombol Send membuka documents_send_docemail.php. Pengguna memilih penerima dari kontak project (ts_map_email_sender, dengan tipe penerima to / cc), menulis subjek dan isi (ts_map_email_content), dan bisa menambah dokumen lain sebagai lampiran (ts_map_email_more_attach). Dua mode pengiriman, masing-masing di balik flag config:
| Mode | Flag | Yang dibawa email |
|---|---|---|
| Attachment | enable_doclib_sendby_attachment | filenya sendiri |
| Link | enable_doclib_sendby_link | URL unduhan langsung yang dibangun getPdfLink(), tautan cmd=download yang sama seperti di atas |
Dialog dan handler-nya memakai $pdo dan mengirim lewat mail() PHP di documents_send_attachment.inc.php dan documents_send_docprjcontact.php, bukan lewat antrean ts_email yang dipakai notifikasi routing.
Jalur tautan yang lama mati di empat fork
act=sendemail di document_handler_post.php adalah aksi legacy "kirim tautan unduhan". Ia menulis ts_download_link (id acak, email penerima yang di-hash, kedaluwarsa dalam jam) dan mengirim tautannya. Ia memakai iw_mysql_query(), yang melempar exception di master, Jadestone, Medco dan Timas, jadi hanya JOTRE yang masih bisa menjalankannya. Dialog Send tidak memakainya.
Unpublish
Unpublish di menu konteks mem-POST act=unpublish. Ia dimaksudkan untuk menarik kembali dokumen yang dipublikasikan routing: mengeset ts_documents.docstat_id=2, ts_map_documents_library.stat_id=2, dan mengosongkan rout_ispublished di ts_map_routing_file.
Mati di master, Jadestone, Medco dan Timas
Seluruh bloknya memakai iw_mysql_query() dan mysqli_*. Mengklik Unpublish di fork-fork itu berakhir dengan fatal error. Ia bekerja hanya di JOTRE, tempat helper legacy masih berjalan. Diperiksa 2026-09-06.
Report cetak
cmd=print_<name> merender template report di atas filter saat ini. Masing-masing punya documents_print_<name>.inc.php sendiri:
| Perintah | Report |
|---|---|
print_costume | daftar "Documents Library" yang bisa dikustomisasi, yang juga menjadi report DMS di menu Reporting |
print_docstatus | status dokumen |
print_revstatus | status revisi |
print_outstanding | dokumen yang belum selesai |
print_outstandpublish | yang belum dipublikasikan |
print_ifcupdates | pembaruan IFC |
print_vendordocprogress, print_vendoroverdue | progres dan keterlambatan dokumen vendor |
printgrid | grid sebagaimana ditampilkan |
documents_print_cpeccproc.inc.php dan documents_print_subdocprogress.inc.php ada tetapi tidak punya rute cmd= di master.
Retensi
Dengan enable_doclib_retention = 1 grid dan report print-all mendapat kolom Expiration Date (ts_documents.doc_expired_date). Setting per project ada di ts_doc_retention_settings: siapa yang diberi tahu (resource, penulis, originator, email tambahan), kapan, dan template email mana. Cron inact_doclib_retention.php membaca setting itu dan dokumen yang punya tanggal kedaluwarsa lalu mengantrekan pemberitahuannya. Lihat Cron job.
Penomoran dokumen otomatis
Dengan enable_auto_doc_numbering = 1 form dokumen baru bisa membuat nomor dokumen. Tiga tabel, ditambahkan ke master November 2024 dan di-port ke Prima Energy September 2026:
| Tabel | Berisi |
|---|---|
ts_doc_auto_numbering_settings | per project dan klasifikasi: settings_data (strukturnya), pemisah, jumlah digit kenaikan, awal urutan |
ts_doc_auto_numbering_root | indeks library mana yang menjadi akar penomoran project |
ts_doc_auto_numbering_counter | penghitung terakhir per struktur penomoran |
Cara bagian-bagiannya bekerja:
- Settings > DMS > Auto Doc Numbering (
dms_reference/auto_doc_numbering.php) menyimpan satu aturan per klasifikasi dokumen di project: daftar prefix berurutan, pemisah (hyphen atau underscore), jumlah digit, dan awal urutan. Prefix-nya Project Code, Classification, Company, teks bebas, serta Area Code, Discipline, Document Type dan Document Category kalau flagenable_*-nya menyala. Company memakai nama pendek owner project, fallback ke company project. Baris aturan dibuat saat admin menyimpan; project baru belum punya sampai saat itu. - Library Index Reference > Select Root Internal Doc menandai satu folder project sebagai root internal (
ts_doc_auto_numbering_root) dan menampilkan badge INTERNAL di folder itu. Folder root project sendiri ditolak. - Document Library > New > Auto Numbering mengunci Document Number, hanya menampilkan klasifikasi yang punya aturan, dan menyusun nomor dari referensi yang dipilih, misalnya
AAL04-TST-ENG-001.cmd=checkLastAutoNumberingCountermemberi urutan berikutnya untuk struktur itu. Saat simpan,getAutoDocNumberingRootmembuat subfolder bernama klasifikasi di bawah root internal (sekali saja) dan menaruh dokumen di sana, laluact=saveAutoNumberingStructmenaikkan penghitung; kalau bentrok jawabannyaexistsdan form membuat nomor baru.
Versi asli Tomori (INA12-54) juga menawarkan Well Site, Division, Element dan Sub Category; master dan fork-nya tidak.
Tabel database yang terpengaruh
| Tabel | Operasi | Oleh |
|---|---|---|
ts_documents | insert / update / delete | New, Copy, Edit, Delete, Unpublish |
ts_map_documents_library | insert / delete | New, Edit, Delete, pindah folder (act=selectLibIdx) |
ts_map_doc_system | insert / delete | New, Edit, Delete |
ts_file_explorer, ts_map_doc_file | insert | Upload |
ts_map_email_sender, ts_map_email_content, ts_map_email_more_attach | insert / update / delete | dialog Send |
ts_doc_auto_numbering_counter | insert / update | auto numbering saat simpan |
ts_doc_library, ts_doc_library_priv, ts_map_doc_lib_project | select | pohon dan akses |
ts_downloadfile_link | update | pencatatan unduhan vendor |
Hal yang perlu diwaspadai
- Dua upload dengan nama yang sama. Upload milik library melampirkan file ke dokumen yang sudah terdaftar. Upload Documents Master mendaftarkan dan me-routing. Developer baru sering tertukar.
- Dokumen yang tidak terlihat biasanya soal privilege folder. Periksa
ts_doc_library_privuntuk resource group-nya sebelum membaca kode. - Sisa Zend ACL.
documents_privilege.inc.php(Zend_Acl di atasiw_mysql_query) dikomentari didocuments.php, tetapimember_archive.inc.phpdanmember_archive_search.inc.phpmasih meng-include-nya. Layar arsip itu akan fatal di fork tempat helper legacy melempar exception. - Penghapusan tidak transaksional.
act=deletedatamenjalankan beberapa statement berurutan. documents.inc.phpmasih memanggiliw_mysql_query()di helper lamanya (pencarian folder berdasarkan kode). Layar apa pun yang mencapai helper itu mati di empat dari lima fork. Utamakan versi$pdodi sebelahnya.- Master dan Jadestone tidak menyimpan klasifikasi dokumen bernomor otomatis. Saat Auto Numbering aktif, form menonaktifkan
val_doc_classdan mengirim klasifikasi terpilih sebagaival_classification, yang tidak pernah dibacadocument_handler_post.php, sehinggadoc_classificationtetap kosong. Prima Energy me-resolve id ke kodenya dan menyimpannya (INA30-2); fork lain masih punya celah ini.
Perbedaan antar instance
Diperiksa pada 2026-09-06.
| Instance | Perbedaan |
|---|---|
| Medco | Punya fitur Archive: archivetree_submit_act dan archive_form_close_act di template, dan tipe action privilege archive. |
| Timas | Tidak ada kolom retensi di template, tidak ada enable_doclib_retention, tidak ada penomoran dokumen otomatis, tidak ada library_folder_access_default. Grid lebih lama: tidak ada export_excel.php dan tidak ada config kolom json/. File kirim-email-nya berbeda dari master. |
| JOTRE | Unpublish dan jalur kirim-tautan legacy bekerja, karena iw_mysql_query() masih berjalan di sana. |
| Jadestone | Sama dengan master di setiap hal yang diperiksa. |
| Prima Energy | Penomoran dokumen otomatis sejak 2026-09-13 (INA30-2, di development dan staging; main pada rilis berikutnya), di-port dari master. enable_auto_doc_numbering di-seed 0 oleh migrasi 20260913030000, jadi fitur tetap mati setelah deploy; klasifikasi yang dipilih disimpan ke doc_classification. Tidak ada Well Site. Diperiksa di browser pada vhost lokal. |
Terkait
- Upload: mendaftarkan PDF dan mengarsipkannya ke Deliverables.
- Sign Off: memublikasikan salinan yang sudah direview ke library.
- Auto Folder Creation: pohon folder per project yang dibangun langkah publish.
- Reporting: report Documents Library.