Skip to content

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:

LapisTabelBerisi
Folderts_doc_librarylibrary_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.
Dokuments_documents, ditempatkan oleh ts_map_documents_libraryBaris 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.
Filets_file_explorer, ditautkan oleh ts_map_doc_fileFile 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

Documents Library pada snapshot KTP: pohon folder, toolbar, grid folder yang dipilih dan panel Detail of Document yang terlipat di kanan
Documents Library pada snapshot KTP: pohon folder, toolbar, grid folder yang dipilih dan panel Detail of Document yang terlipat di kanan · click to enlarge

Halamannya documents.php dengan template documents_browse.htm, tersusun tiga bagian:

  1. Pohon folder di kiri (cmd=groupby, dibangun documents_groupby.inc.php dari ts_doc_library yang 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 pada map.library_code.
  2. 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, jadi 4_R, 4, 3_R dan 3 ada di bawah satu baris.
  3. 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.
Sub-grid revisi di bawah satu dokumen: revisi 4_R, 4, 3_R dan 3 dengan transmittal dan tanggalnya
Sub-grid revisi di bawah satu dokumen: revisi 4_R, 4, 3_R dan 3 dengan transmittal dan tanggalnya · click to enlarge
Detail of Document setelah klik pada baris: file, return code, siapa yang meng-upload dan foldernya
Detail of Document setelah klik pada baris: file, return code, siapa yang meng-upload dan foldernya · click to enlarge

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.

TombolPrivilegeYang dilakukan
Newaddform Add Document (act=add): baris register, penempatan folder, pemetaan sistem (ts_map_doc_system). Dengan auto numbering menyala, form menawarkan nomor yang dibuat otomatis
Editeditact=edit menulis ulang baris register dan membuat ulang penempatan folder dan pemetaan sistem
Deletedeleteact=deletedata menghapus baris register, tautan filenya, penempatan folder dan pemetaan sistem
Uploadadddialog 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
Copyaddform Add yang terisi dari dokumen terpilih
Refresh, Search, Sortsiapa punmuat ulang; dialog Search Data (basic dan advanced, seperti di MDR); dialog sort pada kolom grid
Export CSV, Export Excelsiapa puncmd=exportCSV, exportXLS, grid dengan filter saat ini
Printsiapa punform kustomisasi report Documents Library (cmd=print_costume)
Ungroup, Regroup Bysiapa puncmd=regroup: mengelompokkan grid per kolom, dengan kolom sort dan urutan
Downloadsiapa punbatch download: file dokumen terpilih sebagai satu zip (cmd=batchdownload)
Sendsiapa pundi menu baris: dialog kirim lewat email, lihat di bawah
Add Document: nomor, revisi, lampiran, tanggal dan nomor transmittal di kiri; judul, issued status, return code, next expected submission, area, discipline dan document type di kanan
Add Document: nomor, revisi, lampiran, tanggal dan nomor transmittal di kiri; judul, issued status, return code, next expected submission, area, discipline dan document type di kanan · click to enlarge
Upload Document: file untuk dokumen terpilih, lalu Start upload
Upload Document: file untuk dokumen terpilih, lalu Start upload · click to enlarge
Search Data: pencarian basic pada nomor dan judul, atau tab advanced dengan field, operator dan nilai
Search Data: pencarian basic pada nomor dan judul, atau tab advanced dengan field, operator dan nilai · click to enlarge
Regroup Data: kolom pengelompokan, kolom sort dan urutannya
Regroup Data: kolom pengelompokan, kolom sort dan urutannya · click to enlarge

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.php membangun $filterFolderAccess sehingga pohon dan grid hanya menampilkan folder itu. Tanpa baris berarti tanpa batasan.
  • library_folder_access_default (config, default 1): 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:

ModeFlagYang dibawa email
Attachmentenable_doclib_sendby_attachmentfilenya sendiri
Linkenable_doclib_sendby_linkURL 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:

PerintahReport
print_costumedaftar "Documents Library" yang bisa dikustomisasi, yang juga menjadi report DMS di menu Reporting
print_docstatusstatus dokumen
print_revstatusstatus revisi
print_outstandingdokumen yang belum selesai
print_outstandpublishyang belum dipublikasikan
print_ifcupdatespembaruan IFC
print_vendordocprogress, print_vendoroverdueprogres dan keterlambatan dokumen vendor
printgridgrid 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:

TabelBerisi
ts_doc_auto_numbering_settingsper project dan klasifikasi: settings_data (strukturnya), pemisah, jumlah digit kenaikan, awal urutan
ts_doc_auto_numbering_rootindeks library mana yang menjadi akar penomoran project
ts_doc_auto_numbering_counterpenghitung terakhir per struktur penomoran

Cara bagian-bagiannya bekerja:

  1. 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 flag enable_*-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.
  2. 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.
  3. 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=checkLastAutoNumberingCounter memberi urutan berikutnya untuk struktur itu. Saat simpan, getAutoDocNumberingRoot membuat subfolder bernama klasifikasi di bawah root internal (sekali saja) dan menaruh dokumen di sana, lalu act=saveAutoNumberingStruct menaikkan penghitung; kalau bentrok jawabannya exists dan 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

TabelOperasiOleh
ts_documentsinsert / update / deleteNew, Copy, Edit, Delete, Unpublish
ts_map_documents_libraryinsert / deleteNew, Edit, Delete, pindah folder (act=selectLibIdx)
ts_map_doc_systeminsert / deleteNew, Edit, Delete
ts_file_explorer, ts_map_doc_fileinsertUpload
ts_map_email_sender, ts_map_email_content, ts_map_email_more_attachinsert / update / deletedialog Send
ts_doc_auto_numbering_counterinsert / updateauto numbering saat simpan
ts_doc_library, ts_doc_library_priv, ts_map_doc_lib_projectselectpohon dan akses
ts_downloadfile_linkupdatepencatatan 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_priv untuk resource group-nya sebelum membaca kode.
  • Sisa Zend ACL. documents_privilege.inc.php (Zend_Acl di atas iw_mysql_query) dikomentari di documents.php, tetapi member_archive.inc.php dan member_archive_search.inc.php masih meng-include-nya. Layar arsip itu akan fatal di fork tempat helper legacy melempar exception.
  • Penghapusan tidak transaksional. act=deletedata menjalankan beberapa statement berurutan.
  • documents.inc.php masih memanggil iw_mysql_query() di helper lamanya (pencarian folder berdasarkan kode). Layar apa pun yang mencapai helper itu mati di empat dari lima fork. Utamakan versi $pdo di sebelahnya.
  • Master dan Jadestone tidak menyimpan klasifikasi dokumen bernomor otomatis. Saat Auto Numbering aktif, form menonaktifkan val_doc_class dan mengirim klasifikasi terpilih sebagai val_classification, yang tidak pernah dibaca document_handler_post.php, sehingga doc_classification tetap 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.

InstancePerbedaan
MedcoPunya fitur Archive: archivetree_submit_act dan archive_form_close_act di template, dan tipe action privilege archive.
TimasTidak 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.
JOTREUnpublish dan jalur kirim-tautan legacy bekerja, karena iw_mysql_query() masih berjalan di sana.
JadestoneSama dengan master di setiap hal yang diperiksa.
Prima EnergyPenomoran 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.