{"id":114,"date":"2024-12-18T01:47:04","date_gmt":"2024-12-18T01:47:04","guid":{"rendered":"https:\/\/omahgoenoeng.my.id\/personal\/?p=114"},"modified":"2024-12-19T01:46:16","modified_gmt":"2024-12-19T01:46:16","slug":"attachment-repositori-di-slims-anda-terasa-berat-atau-lama","status":"publish","type":"post","link":"https:\/\/omahgoenoeng.my.id\/personal\/attachment-repositori-di-slims-anda-terasa-berat-atau-lama\/","title":{"rendered":"Unggah Lampiran \/ Attachment Repositori di SLiMS Anda Terasa Berat atau Lama? Berikut ini Caranya !"},"content":{"rendered":"<p>Bagi teman-teman pustakawan yang mengelola repository menggunakan aplikasi SLiMS dan file yang diunggah sudah mencapai ribuan. Apakah merasakan saat mengunggah file lampiran (attachment) di SLiMS tersebut semakin lama semakin berat?<\/p>\n<p>Berikut ada tips dari core developer SLiMS (mas Hendro Wicaksono) dan mas Jushadi Arman Saleh yang di share melalui WhatsApp Group (WAG) SLiMS agar jika file unggahan di SLiMS tidak terlalu berat jika file yang diunggah sudah ratusan atau bahkan ribuan.<\/p>\n<p>Caranya dengan membuat sub folder dan sub-sub folder dibawah folder repository di dalam SLiMS kalian. Misalnya, sub folder pertama berdasarkan tahun, sub folder berikutnya bulan, sub folder berikutnya\u00a0tanggal. Contohnya seperti ini :<br \/>\n&#8211; repository<br \/>\n&#8212; 2024<br \/>\n&#8212; Januari<br \/>\n&#8212;- 1<br \/>\n&#8212;- 2<br \/>\n&#8212;- 3<br \/>\ndst.<br \/>\n&#8212; Februari<br \/>\n&#8212;- 1<br \/>\n&#8212;- 2<br \/>\n&#8212;- 3<br \/>\ndst.<br \/>\n&#8212; Maret<br \/>\ndst.<br \/>\n&#8212; 2025<br \/>\n&#8212; Januari<br \/>\ndst.<\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"115\" data-permalink=\"https:\/\/omahgoenoeng.my.id\/personal\/attachment-repositori-di-slims-anda-terasa-berat-atau-lama\/repo-1\/\" data-orig-file=\"https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-1.jpg?fit=1600%2C900&amp;ssl=1\" data-orig-size=\"1600,900\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"repo 1\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-1.jpg?fit=300%2C169&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-1.jpg?fit=640%2C360&amp;ssl=1\" class=\"size-large wp-image-115 aligncenter\" src=\"https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-1.jpg?resize=640%2C360&#038;ssl=1\" alt=\"\" width=\"640\" height=\"360\" srcset=\"https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-1.jpg?resize=1024%2C576&amp;ssl=1 1024w, https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-1.jpg?resize=300%2C169&amp;ssl=1 300w, https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-1.jpg?resize=768%2C432&amp;ssl=1 768w, https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-1.jpg?resize=1536%2C864&amp;ssl=1 1536w, https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-1.jpg?resize=1280%2C720&amp;ssl=1 1280w, https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-1.jpg?w=1600&amp;ssl=1 1600w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><br \/>\nnanti saat mengupload file pada bagian repo directory, pilihlah sub subfolder sampai ke level paling kecil (tanggal). Jadi setiap berganti hari akan ganti folder\u00a0upload.<\/p>\n<p>Kenapa direkomendasikan cara diatas? Menurut mas Hendo, karena kalau menumpuk semua file pada satu direktori utama, jika file yang diupload sudah mencapai jumlah ratusan atau bahkan ribuan, akan membuat proses upload menjadi lebih lambat karena slims saat upload melakukan proses scanning ke direktori tsb untuk menghindari nama file yang sama. Ini sudah kejadian disuatu perpus perguruan tinggi yang menggunakan slims untuk repositori. Solusinya paling gampangnya yang sepertti yang saya sebut diatas.<\/p>\n<p>Pembuatan sub folder untuk repository tersebut ternyata juga ada didalam eprints. Namun di Eprints pembuatan sub folder sudah otomatis.<\/p>\n<p>Nah, bagaimana agar di SLiMS juga otomatis dalam pembuatan subfoldernya?<br \/>\nBerikut penjelasan tambahan dari mas Jushadi.<\/p>\n<p>Edit file index.php didalam folder \/admin\/modules\/bibliography\/(disini)<br \/>\n(pastikan sebelum diedit, file tersebut dibackup terlebih dahulu)<\/p>\n<p>Sisipkan code berikut (setelah teks \/\/ biblio file attachment):<\/p>\n<pre id=\"code-snippet-source-8\" class=\"code-snippet-source linkable-line-numbers\"><code class=\"language-php line-numbers\">&lt;?php\n\n\n\n\n\/\/ Pastikan REPOBS adalah path absolut\n$base_dir = realpath(REPOBS); \/\/ Konversi ke path absolut untuk keamanan\n\nif ($base_dir === false || !is_dir($base_dir)) {\n    die(__(&#039;Base repo directory not found or inaccessible&#039;)); \/\/ Pastikan path dasar valid\n}\n\n\/\/ Generate path untuk folder hari ini\n$date_dir = date(&#039;Y\/m\/d&#039;);\n$target_dir = $base_dir . &#039;\/&#039; . $date_dir;\n\n\/\/ Pastikan target tidak melibatkan path traversal\nif (strpos($target_dir, $base_dir) !== 0) {\n    die(__(&#039;Invalid directory path detected.&#039;));\n}\n\ntry {\n    \/\/ Periksa dan buat folder jika belum ada\n    if (is_dir($target_dir)) {\n        $folder_status = __(&#039;Folder already exists: &#039;) . htmlspecialchars($date_dir, ENT_QUOTES, &#039;UTF-8&#039;);\n    } else {\n        if (!mkdir($target_dir, 0755, true)) { \/\/ Gunakan izin 0755 untuk keamanan\n            throw new Exception(__(&#039;Failed to create folder: &#039;) . htmlspecialchars($date_dir, ENT_QUOTES, &#039;UTF-8&#039;));\n        }\n        $folder_status = __(&#039;Folder created: &#039;) . htmlspecialchars($date_dir, ENT_QUOTES, &#039;UTF-8&#039;);\n    }\n} catch (Exception $e) {\n    $folder_status = __(&#039;Error: &#039;) . htmlspecialchars($e-&gt;getMessage(), ENT_QUOTES, &#039;UTF-8&#039;);\n}\n\n\/\/ Output tombol HTML\n$str_input = &#039;&lt;div class=&quot;&#039; . $visibility . &#039; s-margin__bottom-1&quot;&gt;&#039;\n    . &#039;&lt;a class=&quot;s-btn btn btn-default notAJAX&quot; href=&quot;#&quot; onclick=&quot;alert(\\&#039;&#039; . addslashes($folder_status) . &#039;\\&#039;); return false;&quot; title=&quot;&#039; . __(&#039;Folder Attachments&#039;) . &#039;&quot;&gt;&#039;\n    . __(&#039;Add Today\\&#039;s Folder Attachment&#039;) . &#039;&lt;\/a&gt;&#039;\n    . &#039;&lt;\/div&gt;&#039;;\n\n$form-&gt;addAnything(__(&#039;Folder Attachment&#039;), $str_input);\n\n\n<\/code><\/pre>\n<p>Atau bisa juga file index.php diganti dengan code berikut :<\/p>\n<pre id=\"code-snippet-source-9\" class=\"code-snippet-source linkable-line-numbers\"><code class=\"language-php line-numbers\">&lt;?php\n\n\n\/**\n * Copyright (C) 2007,2008,2009,2010  Arie Nugraha (dicarve@yahoo.com)\n *\n * This program is free software; you can redistribute it and\/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation; either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n *\n *\/\n\n\/* Bibliography Management section *\/\n\n\/\/ key to authenticate\nif (!defined(&#039;INDEX_AUTH&#039;)) {\n    define(&#039;INDEX_AUTH&#039;, &#039;1&#039;);\n}\n\n#use SLiMS\\AdvancedLogging;\nuse SLiMS\\AlLibrarian;\nuse SLiMS\\Filesystems\\Storage;\nuse SLiMS\\Plugins;\n\n\/\/ key to get full database access\ndefine(&#039;DB_ACCESS&#039;, &#039;fa&#039;);\n\nif (!defined(&#039;SB&#039;)) {\n    \/\/ main system configuration\n    require &#039;..\/..\/..\/sysconfig.inc.php&#039;;\n    \/\/ start the session\n    require SB . &#039;admin\/default\/session.inc.php&#039;;\n}\n\/\/ IP based access limitation\nrequire LIB . &#039;ip_based_access.inc.php&#039;;\ndo_checkIP(&#039;smc&#039;);\ndo_checkIP(&#039;smc-bibliography&#039;);\n\nrequire SB . &#039;admin\/default\/session_check.inc.php&#039;;\nrequire SIMBIO . &#039;simbio_GUI\/table\/simbio_table.inc.php&#039;;\nrequire SIMBIO . &#039;simbio_GUI\/form_maker\/simbio_form_table_AJAX.inc.php&#039;;\nrequire SIMBIO . &#039;simbio_GUI\/paging\/simbio_paging.inc.php&#039;;\nrequire SIMBIO . &#039;simbio_DB\/datagrid\/simbio_dbgrid.inc.php&#039;;\nrequire SIMBIO . &#039;simbio_DB\/simbio_dbop.inc.php&#039;;\nrequire SIMBIO . &#039;simbio_FILE\/simbio_file_upload.inc.php&#039;;\nrequire MDLBS . &#039;system\/biblio_indexer.inc.php&#039;;\n\n\/\/ privileges checking\n$can_read = utility::havePrivilege(&#039;bibliography&#039;, &#039;r&#039;);\n$can_write = utility::havePrivilege(&#039;bibliography&#039;, &#039;w&#039;);\n\nif (!$can_read) {\n    die(&#039;&lt;div class=&quot;errorBox&quot;&gt;&#039; . __(&#039;You are not authorized to view this section&#039;) . &#039;&lt;\/div&gt;&#039;);\n}\n\n\/\/ execute registered hook\nPlugins::getInstance()-&gt;execute(Plugins::BIBLIOGRAPHY_INIT);\n\n\/\/ load settings\nutility::loadSettings($dbs);\n\n$in_pop_up = false;\n\/\/ check if we are inside pop-up window\nif (isset($_GET[&#039;inPopUp&#039;])) {\n    $in_pop_up = true;\n}\n\nif (!function_exists(&#039;getimagesizefromstring&#039;)) {\n    function getimagesizefromstring($string_data)\n    {\n        $uri = &#039;data:\/\/application\/octet-stream;base64,&#039; . base64_encode($string_data);\n        return getimagesize($uri);\n    }\n}\n\n\/\/ RDA Content, Media and Carrier\n$rda_cmc = array(&#039;content&#039; =&gt; &#039;Content Type&#039;, &#039;media&#039; =&gt; &#039;Media Type&#039;, &#039;carrier&#039; =&gt; &#039;Carrier Type&#039;);\n\n\/* REMOVE IMAGE *\/\nif (isset($_POST[&#039;removeImage&#039;]) &amp;&amp; isset($_POST[&#039;bimg&#039;]) &amp;&amp; isset($_POST[&#039;img&#039;])) {\n    \/\/ validate post image\n    $biblio_id = utility::filterData(&#039;bimg&#039;, &#039;post&#039;, true, true, true);\n    $image_name = utility::filterData(&#039;img&#039;, &#039;post&#039;, true, true, true);\n\n    $query_image = $dbs-&gt;query(&quot;SELECT biblio_id FROM biblio WHERE biblio_id=&#039;{$biblio_id}&#039; AND image=&#039;{$image_name}&#039;&quot;);\n    if ($query_image-&gt;num_rows &gt; 0) {\n        $_delete = $dbs-&gt;query(sprintf(&#039;UPDATE biblio SET image=NULL WHERE biblio_id=%d&#039;, $biblio_id));\n        $_delete2 = $dbs-&gt;query(sprintf(&#039;UPDATE search_biblio SET image=NULL WHERE biblio_id=%d&#039;, $biblio_id));\n        if ($_delete) {\n            $postImage = stripslashes($_POST[&#039;img&#039;]);\n            $postImage = str_replace(&#039;\/&#039;, &#039;&#039;, $postImage);\n            @unlink(sprintf(IMGBS . &#039;docs\/%s&#039;, $postImage));\n            utility::jsToastr(&#039;Bibliography&#039;, str_replace(&#039;{imageFilename}&#039;, $_POST[&#039;img&#039;], __(&#039;{imageFilename} successfully removed!&#039;)), &#039;success&#039;);\n            \/\/ exit(&#039;&lt;script type=&quot;text\/javascript&quot;&gt;$(\\&#039;#biblioImage, #imageFilename\\&#039;).remove();&lt;\/script&gt;&#039;);\n            exit(&#039;&lt;img src=&quot;..\/lib\/minigalnano\/createthumb.php?filename=images\/default\/image.png&amp;width=130&quot; class=&quot;img-fluid rounded&quot; alt=&quot;&quot;&gt;&#039;);\n        }\n    }\n    exit();\n}\n\/* RECORD OPERATION *\/\nif (isset($_POST[&#039;saveData&#039;]) AND $can_read AND $can_write) {\n    if (!simbio_form_maker::isTokenValid()) {\n        utility::jsToastr(&#039;Bibliography&#039;, __(&#039;Invalid form submission token!&#039;), &#039;error&#039;);\n        utility::writeLogs($dbs, &#039;staff&#039;, $_SESSION[&#039;uid&#039;], &#039;system&#039;, &#039;Invalid form submission token, might be a CSRF attack from &#039; . $_SERVER[&#039;REMOTE_ADDR&#039;]);\n        exit();\n    }\n    $title = trim(strip_tags($_POST[&#039;title&#039;]));\n    \/\/ check form validity\n    if (empty($title)) {\n        utility::jsToastr(&#039;Bibliography&#039;, __(&#039;Title can not be empty&#039;), &#039;error&#039;);\n        exit();\n    } else {\n        \/\/ include custom fields file\n        if (file_exists(MDLBS . &#039;bibliography\/custom_fields.inc.php&#039;)) {\n            include MDLBS . &#039;bibliography\/custom_fields.inc.php&#039;;\n        }\n\n        \/\/ create biblio_indexer class instance\n        $indexer = new biblio_indexer($dbs);\n\n        \/**\n         * Custom fields\n         *\/\n        if (isset($biblio_custom_fields)) {\n            if (is_array($biblio_custom_fields) &amp;&amp; $biblio_custom_fields) {\n                foreach ($biblio_custom_fields as $fid =&gt; $cfield) {\n                    \/\/ custom field data\n                    $cf_dbfield = $cfield[&#039;dbfield&#039;];\n                    if (isset($_POST[$cf_dbfield])) {\n                        if (is_array($_POST[$cf_dbfield])) {\n                            foreach ($_POST[$cf_dbfield] as $value) {\n                                $arr[$value] = $value;\n                            }\n                            $custom_data[$cf_dbfield] = serialize($arr);\n                        } else {\n                            $cf_val = $dbs-&gt;escape_string(strip_tags(trim($_POST[$cf_dbfield]), $sysconf[&#039;content&#039;][&#039;allowable_tags&#039;]));\n                            if ($cfield[&#039;type&#039;] == &#039;numeric&#039; &amp;&amp; (!is_numeric($cf_val) &amp;&amp; $cf_val != &#039;&#039;)) {\n                                utility::jsToastr(__(&#039;Bibliography&#039;), sprintf(__(&#039;Field %s only number for allowed&#039;), $cfield[&#039;label&#039;]), &#039;error&#039;);\n                                exit();\n                            } elseif ($cfield[&#039;type&#039;] == &#039;date&#039; &amp;&amp; $cf_val == &#039;&#039;) {\n                                utility::jsToastr(__(&#039;Bibliography&#039;), sprintf(__(&#039;Field %s is date format, empty not allowed&#039;), $cfield[&#039;label&#039;]), &#039;error&#039;);\n                                exit();\n                            }\n                            $custom_data[$cf_dbfield] = $cf_val;\n                        }\n                    } else {\n                        $custom_data[$cf_dbfield] = serialize(array());\n                    }\n                }\n            }\n        }\n\n        \/\/ Register advance custom field data\n        Plugins::getInstance()-&gt;execute(Plugins::BIBLIOGRAPHY_CUSTOM_FIELD_DATA, [&#039;custom_data&#039; =&gt; &amp;$custom_data]);\n\n        $data[&#039;title&#039;] = $dbs-&gt;escape_string($title);\n        \/* modified by hendro *\/\n        $data[&#039;sor&#039;] = trim($dbs-&gt;escape_string(strip_tags($_POST[&#039;sor&#039;])));\n        \/* end of modification *\/\n        $data[&#039;edition&#039;] = trim($dbs-&gt;escape_string(strip_tags($_POST[&#039;edition&#039;])));\n        $data[&#039;gmd_id&#039;] = $_POST[&#039;gmdID&#039;];\n        $data[&#039;isbn_issn&#039;] = trim($dbs-&gt;escape_string(strip_tags($_POST[&#039;isbn_issn&#039;])));\n\n        $class = str_ireplace(&#039;NEW:&#039;, &#039;&#039;, trim(strip_tags($_POST[&#039;class&#039;])));\n        $data[&#039;classification&#039;] = trim($dbs-&gt;escape_string(strip_tags($class)));\n        $data[&#039;uid&#039;] = $_SESSION[&#039;uid&#039;];\n\n        \/\/ check publisher\n        \/\/ echo stripos($_POST[&#039;publisherID&#039;], &#039;NEW:&#039;);\n        if (stripos($_POST[&#039;publisherID&#039;], &#039;NEW:&#039;) === 0) {\n            $new_publisher = str_ireplace(&#039;NEW:&#039;, &#039;&#039;, trim(strip_tags($_POST[&#039;publisherID&#039;])));\n            $new_id = utility::getID($dbs, &#039;mst_publisher&#039;, &#039;publisher_id&#039;, &#039;publisher_name&#039;, $new_publisher);\n            $data[&#039;publisher_id&#039;] = $new_id;\n        } else if (intval($_POST[&#039;publisherID&#039;]) &gt; 0) {\n            $data[&#039;publisher_id&#039;] = intval($_POST[&#039;publisherID&#039;]);\n        }\n\n        $data[&#039;publish_year&#039;] = trim($dbs-&gt;escape_string(strip_tags($_POST[&#039;year&#039;])));\n        $data[&#039;collation&#039;] = trim($dbs-&gt;escape_string(strip_tags($_POST[&#039;collation&#039;])));\n        $data[&#039;series_title&#039;] = trim($dbs-&gt;escape_string(strip_tags($_POST[&#039;seriesTitle&#039;])));\n        $data[&#039;call_number&#039;] = trim($dbs-&gt;escape_string(strip_tags($_POST[&#039;callNumber&#039;])));\n        $data[&#039;language_id&#039;] = trim($dbs-&gt;escape_string(strip_tags($_POST[&#039;languageID&#039;])));\n        \/\/ check place\n        if (stripos($_POST[&#039;placeID&#039;], &#039;NEW:&#039;) === 0) {\n            $new_place = str_ireplace(&#039;NEW:&#039;, &#039;&#039;, trim(strip_tags($_POST[&#039;placeID&#039;])));\n            $new_id = utility::getID($dbs, &#039;mst_place&#039;, &#039;place_id&#039;, &#039;place_name&#039;, $new_place);\n            $data[&#039;publish_place_id&#039;] = $new_id;\n        } else if (intval($_POST[&#039;placeID&#039;]) &gt; 0) {\n            $data[&#039;publish_place_id&#039;] = intval($_POST[&#039;placeID&#039;]);\n        }\n\n        $data[&#039;notes&#039;] = trim($dbs-&gt;escape_string(strip_tags($_POST[&#039;notes&#039;], &#039;&lt;br&gt;&lt;p&gt;&lt;div&gt;&lt;span&gt;&lt;i&gt;&lt;em&gt;&lt;strong&gt;&lt;b&gt;&lt;code&gt;s&#039;)));\n        $data[&#039;opac_hide&#039;] = ($_POST[&#039;opacHide&#039;] == &#039;0&#039;) ? &#039;literal{0}&#039; : &#039;1&#039;;\n        $data[&#039;promoted&#039;] = ($_POST[&#039;promote&#039;] == &#039;0&#039;) ? &#039;literal{0}&#039; : &#039;1&#039;;\n        \/\/ labels\n        $arr_label = array();\n        if (!empty($_POST[&#039;labels&#039;])) {\n            foreach ($_POST[&#039;labels&#039;] as $label) {\n                if (trim($label) != &#039;&#039;) {\n                    $arr_label[] = array($label, isset($_POST[&#039;label_urls&#039;][$label]) ? $_POST[&#039;label_urls&#039;][$label] : null);\n                }\n            }\n        }\n\n        $data[&#039;labels&#039;] = $arr_label ? serialize($arr_label) : &#039;literal{NULL}&#039;;\n        $data[&#039;frequency_id&#039;] = ($_POST[&#039;frequencyID&#039;] == &#039;0&#039;) ? &#039;literal{0}&#039; : (integer)$_POST[&#039;frequencyID&#039;];\n        $data[&#039;spec_detail_info&#039;] = trim($dbs-&gt;escape_string(strip_tags($_POST[&#039;specDetailInfo&#039;])));\n\n        \/\/ RDA Content, Media anda Carrier Type\n        foreach ($rda_cmc as $cmc =&gt; $cmc_name) {\n            if (isset($_POST[$cmc . &#039;TypeID&#039;]) &amp;&amp; $_POST[$cmc . &#039;TypeID&#039;] &lt;&gt; 0) {\n                $data[$cmc . &#039;_type_id&#039;] = filter_input(INPUT_POST, $cmc . &#039;TypeID&#039;, FILTER_SANITIZE_NUMBER_INT);\n            }\n        }\n\n        $data[&#039;input_date&#039;] = date(&#039;Y-m-d H:i:s&#039;);\n        $data[&#039;last_update&#039;] = date(&#039;Y-m-d H:i:s&#039;);\n\n        \/\/ image uploading\n        $images_disk = Storage::images();\n        if (!empty($_FILES[&#039;image&#039;]) AND $_FILES[&#039;image&#039;][&#039;size&#039;]) {\n            \/\/ Title\n            $img_title = $data[&#039;title&#039;].&#039;_&#039;.date(&quot;YmdHis&quot;);\n            if(strlen($data[&#039;title&#039;]) &gt; 70){\n                $img_title = substr($data[&#039;title&#039;], 0, 70).&#039;_&#039;.date(&quot;YmdHis&quot;);\n            }\n\n            \/\/ create upload object\n            $image_upload = $images_disk-&gt;upload(&#039;image&#039;, function($images) use($sysconf) {\n                \/\/ Extension check\n                $images-&gt;isExtensionAllowed($sysconf[&#039;allowed_images&#039;]);\n\n                \/\/ File size check\n                $images-&gt;isLimitExceeded($sysconf[&#039;max_image_upload&#039;]*1024);\n\n                \/\/ destroy it if failed\n                if (!empty($images-&gt;getError())) $images-&gt;destroyIfFailed();\n\n            })-&gt;as(&#039;docs\/&#039; . strtolower(&#039;cover_&#039;. preg_replace(&quot;\/[^a-zA-Z0-9]+\/&quot;, &quot;-&quot;, $img_title)));\n\n            \n            if ($image_upload-&gt;getUploadStatus()) {\n                $data[&#039;image&#039;] = $dbs-&gt;escape_string($image_upload-&gt;getUploadedFileName());\n                \/\/ write log\n                utility::writeLogs($dbs, &#039;staff&#039;, $_SESSION[&#039;uid&#039;], &#039;bibliography&#039;, $_SESSION[&#039;realname&#039;] . &#039; upload image file &#039; . $image_upload-&gt;getUploadedFileName());\n                utility::jsToastr(&#039;Bibliography&#039;, __(&#039;Image Uploaded Successfully&#039;), &#039;success&#039;);\n            } else {\n                \/\/ write log\n                $data[&#039;image&#039;] = NULL;\n                utility::writeLogs($dbs, &#039;staff&#039;, $_SESSION[&#039;uid&#039;], &#039;bibliography&#039;, &#039;ERROR : &#039; . $_SESSION[&#039;realname&#039;] . &#039; FAILED TO upload image file &#039; . $image_upload-&gt;getUploadedFileName() . &#039;, with error (&#039; . $image_upload-&gt;getError() . &#039;)&#039;);\n                utility::jsToastr(&#039;Bibliography&#039;, __(&#039;Image Uploaded Failed&#039;).&#039;&lt;br\/&gt;&#039;.$image_upload-&gt;getError(), &#039;error&#039;);\n            }\n        } else if (!empty($_POST[&#039;base64picstring&#039;])) {\n            list($filedata, $filedom) = explode(&#039;#image\/type#&#039;, $_POST[&#039;base64picstring&#039;]);\n            $filedata = base64_decode($filedata);\n            $fileinfo = getimagesizefromstring($filedata);\n            $valid = strlen($filedata) \/ 1024 &lt; $sysconf[&#039;max_image_upload&#039;];\n            $valid = (!$fileinfo || $valid === false) ? false : in_array($fileinfo[&#039;mime&#039;], $sysconf[&#039;allowed_images_mimetype&#039;]);\n            $new_filename = strtolower(&#039;cover_&#039;\n                . preg_replace(&quot;\/[^a-zA-Z0-9]+\/&quot;, &quot;_&quot;, substr($data[&#039;title&#039;], 0,70)) . &#039;-&#039; . date(&#039;this&#039;)\n                . &#039;.&#039; . $filedom);\n\n            if ($valid) {\n                @$images_disk-&gt;put(&#039;docs\/&#039; . $new_filename, $filedata);\n                \n                if ($images_disk-&gt;isExists(&#039;docs\/&#039; . $new_filename))\n                {\n                    $data[&#039;image&#039;] = $dbs-&gt;escape_string($new_filename);\n                    if (!defined(&#039;UPLOAD_SUCCESS&#039;)) define(&#039;UPLOAD_SUCCESS&#039;, 1);\n                    $upload_status = UPLOAD_SUCCESS;\n                }\n            }\n        }\n\n        \/\/ create sql op object\n        $sql_op = new simbio_dbop($dbs);\n        if (isset($_POST[&#039;updateRecordID&#039;])) {\n            if ($sysconf[&#039;log&#039;][&#039;biblio&#039;]) {\n                $_prevrawdata = api::biblio_load($dbs, $_POST[&#039;updateRecordID&#039;]);\n            }\n\n            \/\/ Remove previous popular biblio data from cache if opac use default template\n            if ($sysconf[&#039;template&#039;][&#039;theme&#039;] == &#039;default&#039; &amp;&amp; $_POST[&#039;opacHide&#039;] != $_POST[&#039;opacHideOrigin&#039;]) {\n                require SB . &#039;api\/v1\/helpers\/Cache.php&#039;;\n                Cache::destroy(&#039;biblio_popular&#039;);\n            }\n\n            \/* UPDATE RECORD MODE *\/\n            \/\/ remove input date\n            unset($data[&#039;input_date&#039;]);\n            unset($data[&#039;uid&#039;]);\n            \/\/ filter update record ID\n            $updateRecordID = (integer)$_POST[&#039;updateRecordID&#039;];\n            Plugins::getInstance()-&gt;execute(Plugins::BIBLIOGRAPHY_BEFORE_UPDATE, [&#039;data&#039; =&gt; array_merge($data, [&#039;biblio_id&#039; =&gt; $updateRecordID])]);\n            \/\/ update data\n            $update = $sql_op-&gt;update(&#039;biblio&#039;, $data, &#039;biblio_id=&#039; . $updateRecordID);\n            \/\/ send an alert\n            if ($update) {\n\n                \/\/ execute registered hook\n                Plugins::getInstance()-&gt;execute(Plugins::BIBLIOGRAPHY_AFTER_UPDATE, [&#039;data&#039; =&gt; array_merge($data, [&#039;biblio_id&#039; =&gt; $updateRecordID])]);\n\n                \/\/ update custom data\n                if (isset($custom_data)) {\n                    \/\/ check if custom data for this record exists\n                    $_sql_check_custom_q = sprintf(&#039;SELECT biblio_id FROM biblio_custom WHERE biblio_id=%d&#039;, $updateRecordID);\n                    $check_custom_q = $dbs-&gt;query($_sql_check_custom_q);\n                    if ($check_custom_q-&gt;num_rows) {\n                        $update2 = @$sql_op-&gt;update(&#039;biblio_custom&#039;, $custom_data, &#039;biblio_id=&#039; . $updateRecordID);\n                    } else {\n                        $custom_data[&#039;biblio_id&#039;] = $updateRecordID;\n                        @$sql_op-&gt;insert(&#039;biblio_custom&#039;, $custom_data);\n                    }\n                }\n                if ($sysconf[&#039;bibliography_update_notification&#039;]) {\n                    utility::jsToastr(&#039;Bibliography&#039;, __(&#039;Bibliography Data Successfully Updated&#039;), &#039;success&#039;);\n                }\n                \/\/ auto insert catalog to UCS if enabled\n                if ($sysconf[&#039;ucs&#039;][&#039;enable&#039;]) {\n                    echo &#039;&lt;script type=&quot;text\/javascript&quot;&gt;parent.ucsUpload(\\&#039;&#039; . MWB . &#039;bibliography\/ucs_upload.php\\&#039;, \\&#039;itemID[]=&#039; . $updateRecordID . &#039;\\&#039;, false);&lt;\/script&gt;&#039;;\n                }\n                \/\/ write log\n                utility::writeLogs($dbs, &#039;staff&#039;, $_SESSION[&#039;uid&#039;], &#039;bibliography&#039;, $_SESSION[&#039;realname&#039;] . &#039; update bibliographic data (&#039; . $data[&#039;title&#039;] . &#039;) with biblio_id (&#039; . $updateRecordID . &#039;)&#039;);\n\n                if ($sysconf[&#039;log&#039;][&#039;biblio&#039;]) {\n                    $_currrawdata = api::biblio_load($dbs, $updateRecordID);\n                    api::bibliolog_compare($dbs, $updateRecordID, $_SESSION[&#039;uid&#039;], $_SESSION[&#039;realname&#039;], $data[&#039;title&#039;], $_currrawdata, $_SESSION[&#039;_prevrawdata&#039;][$updateRecordID]);\n                    unset($_SESSION[&#039;_prevrawdata&#039;][$updateRecordID]);\n                }\n                if ($sysconf[&#039;index&#039;][&#039;engine&#039;][&#039;enable&#039;]) {\n                    api::update_to_index($_currrawdata);\n                }\n                \/\/ close window OR redirect main page\n                if ($in_pop_up) {\n                    $itemCollID = (integer)$_POST[&#039;itemCollID&#039;];\n                    echo &#039;&lt;script type=&quot;text\/javascript&quot;&gt;top.$(\\&#039;#mainContent\\&#039;).simbioAJAX(parent.jQuery.ajaxHistory[0].url, {method: \\&#039;post\\&#039;, addData: \\&#039;&#039; . ($itemCollID ? &#039;itemID=&#039; . $itemCollID . &#039;&amp;detail=true&#039; : &#039;&#039;) . &#039;\\&#039;});&lt;\/script&gt;&#039;;\n                    echo &#039;&lt;script type=&quot;text\/javascript&quot;&gt;top.closeHTMLpop();&lt;\/script&gt;&#039;;\n                } else {\n                    echo &#039;&lt;script type=&quot;text\/javascript&quot;&gt;top.$(\\&#039;#mainContent\\&#039;).simbioAJAX(parent.jQuery.ajaxHistory[0].url);&lt;\/script&gt;&#039;;\n                }\n                \/\/ update index\n                $indexer-&gt;updateIndex($updateRecordID);\n            } else {\n                utility::jsToastr(&#039;Bibliography&#039;, __(&#039;Bibliography Data FAILED to Updated. Please Contact System Administrator&#039;) . &quot;\\n&quot; . $sql_op-&gt;error, &#039;error&#039;);\n            }\n        } else {\n\n            \/\/ execute registered hook\n            Plugins::getInstance()-&gt;execute(Plugins::BIBLIOGRAPHY_BEFORE_SAVE, [&#039;data&#039; =&gt; $data]);\n\n            \/* INSERT RECORD MODE *\/\n            \/\/ insert the data\n            $insert = $sql_op-&gt;insert(&#039;biblio&#039;, $data);\n            if ($insert) {\n                \/\/ get auto id of this record\n                $last_biblio_id = $sql_op-&gt;insert_id;\n\n                \/\/ execute registered hook\n                $data[&#039;biblio_id&#039;] = $last_biblio_id;\n                Plugins::getInstance()-&gt;execute(Plugins::BIBLIOGRAPHY_AFTER_SAVE, [&#039;data&#039; =&gt; $data]);\n\n                \/\/ add authors\n                if ($_SESSION[&#039;biblioAuthor&#039;]) {\n                    foreach ($_SESSION[&#039;biblioAuthor&#039;] as $author) {\n                        $sql_op-&gt;insert(&#039;biblio_author&#039;, array(&#039;biblio_id&#039; =&gt; $last_biblio_id, &#039;author_id&#039; =&gt; $author[0], &#039;level&#039; =&gt; $author[1]));\n                    }\n                }\n                \/\/ add topics\n                if ($_SESSION[&#039;biblioTopic&#039;]) {\n                    foreach ($_SESSION[&#039;biblioTopic&#039;] as $topic) {\n                        $sql_op-&gt;insert(&#039;biblio_topic&#039;, array(&#039;biblio_id&#039; =&gt; $last_biblio_id, &#039;topic_id&#039; =&gt; $topic[0], &#039;level&#039; =&gt; $topic[1]));\n                    }\n                }\n                \/\/ add attachment\n                if ($_SESSION[&#039;biblioAttach&#039;]) {\n                    foreach ($_SESSION[&#039;biblioAttach&#039;] as $attachment) {\n                        $sql_op-&gt;insert(&#039;biblio_attachment&#039;, array(&#039;biblio_id&#039; =&gt; $last_biblio_id, &#039;file_id&#039; =&gt; $attachment[&#039;file_id&#039;], &#039;access_type&#039; =&gt; $attachment[&#039;access_type&#039;]));\n                    }\n                }\n                \/\/ biblio to biblio\n                if ($_SESSION[&#039;biblioToBiblio&#039;]) {\n                    foreach ($_SESSION[&#039;biblioToBiblio&#039;] as $rel_biblio_id) {\n                        $sql_op-&gt;insert(&#039;biblio_relation&#039;, array(&#039;biblio_id&#039; =&gt; $last_biblio_id, &#039;rel_biblio_id&#039; =&gt; $rel_biblio_id[0]));\n                    }\n                }\n                \/\/ insert custom data\n                if (isset($custom_data)) {\n                    $custom_data[&#039;biblio_id&#039;] = $last_biblio_id;\n                    @$sql_op-&gt;insert(&#039;biblio_custom&#039;, $custom_data);\n                }\n\n\n                utility::jsToastr(&#039;Bibliography&#039;, __(&#039;New Bibliography Data Successfully Saved&#039;), &#039;success&#039;);\n                \/\/ write log\n                utility::writeLogs($dbs, &#039;staff&#039;, $_SESSION[&#039;uid&#039;], &#039;bibliography&#039;, $_SESSION[&#039;realname&#039;] . &#039; insert bibliographic data (&#039; . $data[&#039;title&#039;] . &#039;) with biblio_id (&#039; . $last_biblio_id . &#039;)&#039;);\n                if ($sysconf[&#039;log&#039;][&#039;biblio&#039;]) {\n                    $_rawdata = api::biblio_load($dbs, $last_biblio_id);\n                    api::bibliolog_write($dbs, $last_biblio_id, $_SESSION[&#039;uid&#039;], $_SESSION[&#039;realname&#039;], $data[&#039;title&#039;], &#039;create&#039;, &#039;description&#039;, $_rawdata, &#039;New data. Bibliography.&#039;);\n                    api::bibliolog_compare($dbs, $last_biblio_id, $_SESSION[&#039;uid&#039;], $_SESSION[&#039;realname&#039;], $data[&#039;title&#039;], $_rawdata, NULL);\n                }\n                if ($sysconf[&#039;index&#039;][&#039;engine&#039;][&#039;enable&#039;]) {\n                    api::update_to_index($_rawdata);\n                }\n                \/\/ clear related sessions\n                $_SESSION[&#039;biblioAuthor&#039;] = array();\n                $_SESSION[&#039;biblioTopic&#039;] = array();\n                $_SESSION[&#039;biblioAttach&#039;] = array();\n                $_SESSION[&#039;biblioToBiblio&#039;] = array();\n\n                \/\/ make index\n                $indexer-&gt;makeIndex($last_biblio_id);\n                $indexer-&gt;makeIndexWord($last_biblio_id);\n\n                \/\/ auto insert catalog to UCS if enabled\n                if ($sysconf[&#039;ucs&#039;][&#039;enable&#039;] &amp;&amp; $sysconf[&#039;ucs&#039;][&#039;auto_insert&#039;]) {\n                    echo &#039;&lt;script type=&quot;text\/javascript&quot;&gt;parent.ucsUpload(\\&#039;&#039; . MWB . &#039;bibliography\/ucs_upload.php\\&#039;, \\&#039;itemID[]=&#039; . $last_biblio_id . &#039;\\&#039;);&lt;\/script&gt;&#039;;\n                }\n            } else {\n                utility::jsToastr(&#039;Bibliography&#039;, __(&#039;Bibliography Data FAILED to Save. Please Contact System Administrator&#039;) . &quot;\\n&quot; . $sql_op-&gt;error, &#039;error&#039;);\n            }\n        }\n\n        \/\/ item batch insert\n        if (trim($_POST[&#039;itemCodePattern&#039;]) != &#039;&#039; &amp;&amp; $_POST[&#039;totalItems&#039;] &gt; 0) {\n            $pattern = trim($_POST[&#039;itemCodePattern&#039;]);\n            $total = (integer)$_POST[&#039;totalItems&#039;];\n            $regex = &#039;\/0{3,}\/&#039;;\n\n            if ($total &gt; $sysconf[&#039;max_insert_batch&#039;]) {\n                utility::jsToastr(&#039;Bibliography&#039;, sprintf(__(&#039;Item Data FAILED to Save. Insert batch item maximum %s copies&#039;), $sysconf[&#039;max_insert_batch&#039;]), &#039;warning&#039;);\n                die();\n            }\n\n            \/\/ get zeros\n            preg_match($regex, $pattern, $result);\n            $zeros = strlen($result[0]);\n\n            \/\/ get chars\n            $chars = preg_split($regex, $pattern);\n\n            $chars_last = (isset($chars[1]) &amp;&amp; !empty(trim($chars[1]))) ? trim($chars[1]) : &#039;&#039;;\n\n            \/\/ get last number from database\n            $last_q = $dbs-&gt;query(&#039;SELECT item_code FROM item WHERE item_code REGEXP \\&#039;^&#039; . $chars[0] . &#039;[0-9]{3,}&#039; . $chars_last . &#039;$\\&#039; ORDER BY item_code DESC LIMIT 1&#039;);\n            if (!$dbs-&gt;errno &amp;&amp; $last_q-&gt;num_rows &gt; 0) {\n                $last_d = $last_q-&gt;fetch_row();\n                \/\/ get last  number\n                $ptn = &#039;\/&#039; . $chars[0] . &#039;|&#039; . $chars_last . &#039;$\/&#039;;\n                $last = preg_replace($ptn, &#039;&#039;, $last_d[0]);\n                $start = intval($last) + 1;\n            } else {\n                $start = 1;\n            }\n\n            $end = $start + $total;\n            for ($b = $start; $b &lt; $end; $b++) {\n                $len = strlen($b);\n                $itemcode = $chars[0];\n                if ($zeros &gt; 0) {\n                    $itemcode .= preg_replace(&#039;@0{&#039; . $len . &#039;}$@i&#039;, $b, $result[0]);\n                } else {\n                    $itemcode .= $b;\n                }\n                $itemcode .= $chars[1];\n\n                $item_insert_sql = sprintf(&quot;INSERT IGNORE INTO item (biblio_id, item_code, received_date, supplier_id, order_no, order_date, item_status_id, site, source, invoice, price, price_currency, invoice_date, call_number, coll_type_id, location_id, input_date, last_update, uid)\n        VALUES ( %d, &#039;%s&#039;, &#039;%s&#039;, &#039;%d&#039;, &#039;%s&#039;, &#039;%s&#039;, &#039;%s&#039;, &#039;%s&#039;, &#039;%s&#039;, &#039;%s&#039;, %d, &#039;%s&#039;, &#039;%s&#039;, &#039;%s&#039;, &#039;%s&#039;, &#039;%s&#039;, &#039;%s&#039;, &#039;%s&#039;, %d)&quot;,\n                    isset($updateRecordID) ? $updateRecordID : $last_biblio_id, $itemcode, $dbs-&gt;escape_string($_POST[&#039;recvDate&#039;]), intval($_POST[&#039;supplierID&#039;]), $dbs-&gt;escape_string($_POST[&#039;ordNo&#039;]), $dbs-&gt;escape_string($_POST[&#039;orDate&#039;]), $dbs-&gt;escape_string($_POST[&#039;itemStatusID&#039;]), $dbs-&gt;escape_string($_POST[&#039;itemSite&#039;]), intval($_POST[&#039;source&#039;]), $dbs-&gt;escape_string($_POST[&#039;invoice&#039;]), intval($_POST[&#039;price&#039;]), $dbs-&gt;escape_string($_POST[&#039;priceCurrency&#039;]), $dbs-&gt;escape_string($_POST[&#039;invcDate&#039;]), $data[&#039;call_number&#039;], intval($_POST[&#039;collTypeID&#039;]), $dbs-&gt;escape_string($_POST[&#039;locationID&#039;]), date(&#039;Y-m-d H:i:s&#039;), date(&#039;Y-m-d H:i:s&#039;), $_SESSION[&#039;uid&#039;]);\n                @$dbs-&gt;query($item_insert_sql);\n            }\n\n            \/\/ update items data into search_biblio\n            $indexer-&gt;updateItems((isset($updateRecordID) ? $updateRecordID : $last_biblio_id));\n        }\n\n        echo &#039;&lt;script type=&quot;text\/javascript&quot;&gt;parent.$(\\&#039;#mainContent\\&#039;).simbioAJAX(\\&#039;&#039; . MWB . &#039;bibliography\/index.php\\&#039;, {method: \\&#039;post\\&#039;, addData: \\&#039;itemID=&#039; . (isset($updateRecordID) ? $updateRecordID : $last_biblio_id) . &#039;&amp;detail=true\\&#039;});&lt;\/script&gt;&#039;;\n        exit();\n    }\n    exit();\n} else if (isset($_POST[&#039;itemID&#039;]) AND !empty($_POST[&#039;itemID&#039;]) AND isset($_POST[&#039;itemAction&#039;])) {\n    if (!($can_read AND $can_write)) {\n        die();\n    }\n    if (!simbio_form_maker::isTokenValid()) {\n        utility::jsToastr(&#039;Bibliography&#039;, __(&#039;Invalid form submission token!&#039;), &#039;error&#039;);\n        utility::writeLogs($dbs, &#039;staff&#039;, $_SESSION[&#039;uid&#039;], &#039;system&#039;, &#039;Invalid form submission token, might be a CSRF attack from &#039; . $_SERVER[&#039;REMOTE_ADDR&#039;]);\n        exit();\n    }\n\n    $indexer = new biblio_indexer($dbs);\n\n    \/* DATA DELETION PROCESS *\/\n    \/\/ create sql op object\n    $sql_op = new simbio_dbop($dbs);\n    $failed_array = array();\n    $error_num = 0;\n    $still_have_item = array();\n    if (!is_array($_POST[&#039;itemID&#039;])) {\n        \/\/ make an array\n        $_POST[&#039;itemID&#039;] = array((integer)$_POST[&#039;itemID&#039;]);\n    }\n    \/\/ loop array\n    $http_query = &#039;&#039;;\n    foreach ($_POST[&#039;itemID&#039;] as $itemID) {\n        $itemID = (integer)$itemID;\n        \/\/ check if this biblio data still have an item\n        $_sql_biblio_item_q = sprintf(&#039;SELECT b.title, COUNT(item_id) FROM biblio AS b\n      LEFT JOIN item AS i ON b.biblio_id=i.biblio_id\n      WHERE b.biblio_id=%d GROUP BY title&#039;, $itemID);\n        $biblio_item_q = $dbs-&gt;query($_sql_biblio_item_q);\n        $biblio_item_d = $biblio_item_q-&gt;fetch_row();\n        if ($biblio_item_d[1] &lt; 1) {\n\n            if ($sysconf[&#039;log&#039;][&#039;biblio&#039;]) {\n                $_rawdata = api::biblio_load($dbs, $itemID);\n                api::bibliolog_write($dbs, $itemID, $_SESSION[&#039;uid&#039;], $_SESSION[&#039;realname&#039;], $biblio_item_d[0], &#039;delete&#039;, &#039;description&#039;, $_rawdata, &#039;Data bibliografi dihapus.&#039;);\n            }\n\n            \/\/ execute registered hook\n            Plugins::getInstance()-&gt;execute(Plugins::BIBLIOGRAPHY_BEFORE_DELETE, [$itemID]);\n            \n            if (!$sql_op-&gt;delete(&#039;biblio&#039;, &quot;biblio_id=$itemID&quot;)) {\n                $error_num++;\n            } else {\n\n                \/\/ execute registered hook\n                Plugins::getInstance()-&gt;execute(Plugins::BIBLIOGRAPHY_AFTER_DELETE, [$itemID]);\n\n                \/\/ write log\n                utility::writeLogs($dbs, &#039;staff&#039;, $_SESSION[&#039;uid&#039;], &#039;bibliography&#039;, $_SESSION[&#039;realname&#039;] . &#039; DELETE bibliographic data (&#039; . $biblio_item_d[0] . &#039;) with biblio_id (&#039; . $itemID . &#039;)&#039;);\n                \/\/ delete related data\n                $sql_op-&gt;delete(&#039;biblio_topic&#039;, &quot;biblio_id=$itemID&quot;);\n                $sql_op-&gt;delete(&#039;biblio_author&#039;, &quot;biblio_id=$itemID&quot;);\n                $sql_op-&gt;delete(&#039;biblio_attachment&#039;, &quot;biblio_id=$itemID&quot;);\n                $sql_op-&gt;delete(&#039;biblio_relation&#039;, &quot;biblio_id=$itemID&quot;);\n\n                # delete from index\n                $indexer-&gt;deleteIndex($itemID);\n\n                \/\/ delete serial data\n                \/\/ check kardex if exist\n                $_sql_serial_kardex_q = sprintf(&#039;SELECT b.title, COUNT(kardex_id),s.serial_id FROM biblio AS b\n          LEFT JOIN `serial` AS s ON b.biblio_id=s.biblio_id\n          LEFT JOIN kardex AS k ON s.serial_id=k.serial_id\n          WHERE b.biblio_id=%d GROUP BY title&#039;, $itemID);\n                $serial_kardex_q = $dbs-&gt;query($_sql_serial_kardex_q);\n                if ($serial_kardex_q) {\n                    $serial_kardex_d = $serial_kardex_q-&gt;fetch_row();\n                    \/\/ delete kardex\n                    if ($serial_kardex_d[1] &gt; 1) {\n                        $sql_op-&gt;delete(&#039;kardex&#039;, &quot;serial_id=&quot; . $serial_kardex_d[2]);\n                    }\n                }\n                \/\/delete serial data\n                $sql_op-&gt;delete(&#039;serial&#039;, &quot;biblio_id=$itemID&quot;);\n\n                \/\/ add to http query for UCS delete\n                $http_query .= &quot;itemID[]=$itemID&amp;&quot;;\n            }\n        } else {\n            $still_have_item[] = substr($biblio_item_d[0], 0, 45) . &#039;... still have &#039; . $biblio_item_d[1] . &#039; copies&#039;;\n            $error_num++;\n        }\n    }\n\n    if ($still_have_item) {\n        $titles = &#039;&#039;;\n        foreach ($still_have_item as $title) {\n            $titles .= $title . &quot;\\n&quot;;\n        }\n        utility::jsToastr(&#039;Bibliography&#039;, __(&#039;Below data can not be deleted:&#039;) . &quot;\\n&quot; . $titles, &#039;error&#039;);\n        echo &#039;&lt;script type=&quot;text\/javascript&quot;&gt;parent.$(\\&#039;#mainContent\\&#039;).simbioAJAX(\\&#039;&#039; . $_SERVER[&#039;PHP_SELF&#039;] . &#039;\\&#039;, {addData: \\&#039;&#039; . $_POST[&#039;lastQueryStr&#039;] . &#039;\\&#039;});&lt;\/script&gt;&#039;;\n        exit();\n    }\n    \/\/ auto delete data on UCS if enabled\n    if ($http_query &amp;&amp; $sysconf[&#039;ucs&#039;][&#039;enable&#039;] &amp;&amp; $sysconf[&#039;ucs&#039;][&#039;auto_delete&#039;]) {\n        echo &#039;&lt;script type=&quot;text\/javascript&quot;&gt;parent.ucsUpdate(\\&#039;&#039; . MWB . &#039;bibliography\/ucs_update.php\\&#039;, \\&#039;nodeOperation=delete&amp;&#039; . $http_query . &#039;\\&#039;);&lt;\/script&gt;&#039;;\n    }\n    \/\/ error alerting\n    if ($error_num == 0) {\n        utility::jsToastr(&#039;Bibliography&#039;, __(&#039;All Data Successfully Deleted&#039;), &#039;success&#039;);\n        echo &#039;&lt;script type=&quot;text\/javascript&quot;&gt;parent.$(\\&#039;#mainContent\\&#039;).simbioAJAX(\\&#039;&#039; . $_SERVER[&#039;PHP_SELF&#039;] . &#039;\\&#039;, {addData: \\&#039;&#039; . $_POST[&#039;lastQueryStr&#039;] . &#039;\\&#039;});&lt;\/script&gt;&#039;;\n    } else {\n        utility::jsToastr(&#039;Bibliography&#039;, __(&#039;Some or All Data NOT deleted successfully!\\nPlease contact system administrator&#039;), &#039;warning&#039;);\n        echo &#039;&lt;script type=&quot;text\/javascript&quot;&gt;parent.$(\\&#039;#mainContent\\&#039;).simbioAJAX(\\&#039;&#039; . $_SERVER[&#039;PHP_SELF&#039;] . &#039;\\&#039;, {addData: \\&#039;&#039; . $_POST[&#039;lastQueryStr&#039;] . &#039;\\&#039;});&lt;\/script&gt;&#039;;\n    }\n    exit();\n}\n\/* RECORD OPERATION END *\/\n\nif (!$in_pop_up) {\n    \/* search form *\/\n    ?&gt;\n    &lt;div class=&quot;menuBox&quot;&gt;\n        &lt;div class=&quot;menuBoxInner biblioIcon&quot;&gt;\n            &lt;div class=&quot;per_title&quot;&gt;\n                &lt;h2&gt;&lt;?php echo __(&#039;Bibliographic&#039;); ?&gt;&lt;\/h2&gt;\n            &lt;\/div&gt;\n            &lt;div class=&quot;sub_section&quot;&gt;\n                &lt;div class=&quot;btn-group&quot;&gt;\n                    &lt;a href=&quot;&lt;?php echo MWB; ?&gt;bibliography\/index.php&quot;\n                       class=&quot;btn btn-default&quot;&gt;&lt;?php echo __(&#039;Bibliographic List&#039;); ?&gt;&lt;\/a&gt;\n                    &lt;a href=&quot;&lt;?php echo MWB; ?&gt;bibliography\/index.php?action=detail&quot;\n                       class=&quot;btn btn-default&quot;&gt;&lt;?php echo __(&#039;Add New Bibliography&#039;); ?&gt;&lt;\/a&gt;\n                &lt;\/div&gt;\n                &lt;form name=&quot;search&quot; action=&quot;&lt;?php echo MWB; ?&gt;bibliography\/index.php&quot; id=&quot;search&quot; method=&quot;get&quot;\n                      class=&quot;form-inline&quot;&gt;&lt;?php echo __(&#039;Search&#039;); ?&gt;\n                    &lt;input type=&quot;text&quot; name=&quot;keywords&quot; id=&quot;keywords&quot; class=&quot;form-control col-md-3&quot;\/&gt;\n                    &lt;select name=&quot;field&quot; class=&quot;form-control col-md-2&quot;&gt;\n                        &lt;option value=&quot;0&quot;&gt;&lt;?php echo __(&#039;All Fields&#039;); ?&gt;&lt;\/option&gt;\n                        &lt;option value=&quot;title&quot;&gt;&lt;?php echo __(&#039;Title\/Series Title&#039;); ?&gt; &lt;\/option&gt;\n                        &lt;option value=&quot;subject&quot;&gt;&lt;?php echo __(&#039;Topics&#039;); ?&gt;&lt;\/option&gt;\n                        &lt;option value=&quot;author&quot;&gt;&lt;?php echo __(&#039;Authors&#039;); ?&gt;&lt;\/option&gt;\n                        &lt;option value=&quot;isbn&quot;&gt;&lt;?php echo __(&#039;ISBN\/ISSN&#039;); ?&gt;&lt;\/option&gt;\n                        &lt;option value=&quot;publisher&quot;&gt;&lt;?php echo __(&#039;Publisher&#039;); ?&gt;&lt;\/option&gt;\n                    &lt;\/select&gt;\n                    &lt;input type=&quot;submit&quot; id=&quot;doSearch&quot; value=&quot;&lt;?php echo __(&#039;Search&#039;); ?&gt;&quot;\n                           class=&quot;s-btn btn btn-default&quot;\/&gt;\n                    &lt;div class=&quot;btn btn-info&quot; data-toggle=&quot;collapse&quot; data-target=&quot;#advancedFilter&quot;\n                         aria-expanded=&quot;false&quot;&gt;&lt;?php echo __(&#039;Advanced Filter&#039;); ?&gt;&lt;\/div&gt;\n                    &lt;div class=&quot;collapse&quot; id=&quot;advancedFilter&quot;\n                         style=&quot;padding-top:10px;width:100%; text-align:left !important;&quot;&gt;\n                        &lt;?php echo __(&#039;Hide in OPAC&#039;); ?&gt;&nbsp;\n                        &lt;select name=&quot;opac_hide&quot; class=&quot;form-control col-md-2&quot;&gt;\n                            &lt;option value=&quot;&quot;&gt;&lt;?php echo __(&#039;ALL&#039;); ?&gt;&lt;\/option&gt;\n                            &lt;option value=&quot;0&quot;&gt;&lt;?php echo __(&#039;Show&#039;); ?&gt; &lt;\/option&gt;\n                            &lt;option value=&quot;1&quot;&gt;&lt;?php echo __(&#039;Hide&#039;); ?&gt;&lt;\/option&gt;\n                        &lt;\/select&gt;\n                        &lt;?php echo __(&#039;Promote To Homepage&#039;); ?&gt;&nbsp;\n                        &lt;select name=&quot;promoted&quot; class=&quot;form-control col-md-2&quot;&gt;\n                            &lt;option value=&quot;&quot;&gt;&lt;?php echo __(&#039;ALL&#039;); ?&gt;&lt;\/option&gt;\n                            &lt;option value=&quot;0&quot;&gt;&lt;?php echo __(&#039;Don\\&#039;t Promote&#039;); ?&gt; &lt;\/option&gt;\n                            &lt;option value=&quot;1&quot;&gt;&lt;?php echo __(&#039;Promote&#039;); ?&gt;&lt;\/option&gt;\n                        &lt;\/select&gt;\n                    &lt;\/div&gt;\n                    &lt;?php\n                    \/\/ enable UCS?\n                    if ($sysconf[&#039;ucs&#039;][&#039;enable&#039;]) {\n                        ?&gt;\n                        &lt;a href=&quot;#&quot;\n                           onclick=&quot;ucsUpload(&#039;&lt;?php echo MWB; ?&gt;bibliography\/ucs_upload.php&#039;, serializeChbox(&#039;dataList&#039;))&quot;\n                           class=&quot;s-btn btn btn-default notAJAX&quot;&gt;&lt;?php echo __(&#039;Upload Selected Bibliographic data to Union Catalog Server*&#039;); ?&gt;&lt;\/a&gt;\n                        &lt;?php\n                    }\n                    ?&gt;\n                &lt;\/form&gt;\n            &lt;\/div&gt;\n        &lt;\/div&gt;\n    &lt;\/div&gt;\n    &lt;?php\n    \/* search form end *\/\n}\n\/* main content *\/\nif (isset($_GET[&#039;action&#039;]) &amp;&amp; $_GET[&#039;action&#039;] == &#039;history&#039;) {\n\n    $biblioID = utility::filterData(&#039;biblioID&#039;, &#039;get&#039;, true, true, true);\n    $table_spec = &#039;biblio_log AS bl&#039;;\n    $criteria = &#039;bl.biblio_id=&#039; . $biblioID;\n    \/\/ create datagrid\n    $datagrid = new simbio_datagrid();\n    $datagrid-&gt;setSQLColumn(&#039;bl.date AS \\&#039;&#039; . __(&#039;Date&#039;) . &#039;\\&#039;&#039;,\n        &#039;bl.realname AS \\&#039;&#039; . __(&#039;User Name&#039;) . &#039;\\&#039;&#039;,\n        &#039;bl.additional_information AS \\&#039;&#039; . __(&#039;Additional Information&#039;) . &#039;\\&#039;&#039;);\n    $datagrid-&gt;modifyColumnContent(2, &#039;callback{affectedDetail}&#039;);\n    $datagrid-&gt;setSQLorder(&#039;bl.biblio_log_id DESC&#039;);\n    $datagrid-&gt;sql_group_by = &#039;bl.date&#039;;\n    $datagrid-&gt;setSQLCriteria($criteria);\n    \/\/ set table and table header attributes\n    $datagrid-&gt;table_attr = &#039;id=&quot;dataList&quot; class=&quot;s-table table&quot;&#039;;\n    $datagrid-&gt;table_header_attr = &#039;class=&quot;dataListHeader&quot; style=&quot;font-weight: bold;&quot;&#039;;\n\n    function affectedDetail($obj_db, $array_data)\n    {\n        $_q = $obj_db-&gt;query(&quot;SELECT action,affectedrow,title,additional_information FROM biblio_log WHERE `date` LIKE &#039;&quot; . $array_data[0] . &quot;&#039;&quot;);\n        $str = &#039;&#039;;\n        $title = &#039;&#039;;\n        if ($_q-&gt;num_rows &gt; 0) {\n            while ($_data = $_q-&gt;fetch_assoc()) {\n                $title = $_data[&#039;title&#039;];\n                $str .= &#039; - &#039; . $_data[&#039;action&#039;] . &#039; &#039; . $_data[&#039;affectedrow&#039;] . &#039; : &lt;i&gt;&#039; . $_data[&#039;additional_information&#039;] . &#039;&lt;\/i&gt;&lt;br\/&gt;&#039;;\n            }\n        }\n        return $title . &#039;&lt;\/br&gt;&#039; . $str;\n    }\n\n    \/\/ put the result into variables\n    $datagrid_result = $datagrid-&gt;createDataGrid($dbs, $table_spec, 20, false);\n\n    $_q = $dbs-&gt;query(&quot;SELECT title FROM biblio WHERE biblio_id=&quot; . $biblioID);\n    if ($_q-&gt;num_rows &gt; 0) {\n        $_d = $_q-&gt;fetch_row();\n        echo &#039;&lt;div class=&quot;infoBox&quot;&gt;&#039; . __(&#039;Biblio Log&#039;) . &#039; : &lt;strong&gt;&#039; . $_d[0] . &#039;&lt;\/strong&gt;&lt;\/div&gt;&#039;;\n    }\n\n    echo $datagrid_result;\n} elseif (isset($_POST[&#039;detail&#039;]) OR (isset($_GET[&#039;action&#039;]) AND $_GET[&#039;action&#039;] == &#039;detail&#039;)) {\n    if ((isset($_GET[&#039;action&#039;])) AND ($_GET[&#039;action&#039;] == &#039;detail&#039;)) {\n        # ADV LOG SYSTEM - STIIL EXPERIMENTAL\n        $log = new AlLibrarian(&#039;1153&#039;, array(&quot;username&quot; =&gt; $_SESSION[&#039;uname&#039;], &quot;uid&quot; =&gt; $_SESSION[&#039;uid&#039;], &quot;realname&quot; =&gt; $_SESSION[&#039;realname&#039;]));\n    } elseif ((isset($_GET[&#039;itemID&#039;])) AND (isset($_GET[&#039;detail&#039;])) AND ($_GET[&#039;detail&#039;] == true)) {\n        $log = new AlLibrarian(&#039;1155&#039;, array(&quot;username&quot; =&gt; $_SESSION[&#039;uname&#039;], &quot;uid&quot; =&gt; $_SESSION[&#039;uid&#039;], &quot;realname&quot; =&gt; $_SESSION[&#039;realname&#039;], &quot;biblio_id&quot; =&gt; $_GET[&#039;itemID&#039;]));\n    }\n\n    if (!($can_read AND $can_write)) {\n\n        die(&#039;&lt;div class=&quot;errorBox&quot;&gt;&#039; . __(&#039;You are not authorized to view this section&#039;) . &#039;&lt;\/div&gt;&#039;);\n    }\n    \/* RECORD FORM *\/\n    \/\/ try query\n    $itemID = (integer)isset($_POST[&#039;itemID&#039;]) ? $_POST[&#039;itemID&#039;] : 0;\n    $_sql_rec_q = sprintf(&#039;SELECT b.*, p.publisher_name, pl.place_name FROM biblio AS b\n    LEFT JOIN mst_publisher AS p ON b.publisher_id=p.publisher_id\n    LEFT JOIN mst_place AS pl ON b.publish_place_id=pl.place_id\n    WHERE biblio_id=%d&#039;, $itemID);\n    $rec_q = $dbs-&gt;query($_sql_rec_q);\n    $rec_d = $rec_q-&gt;fetch_assoc();\n\n    \/\/ create new instance\n    $form = new simbio_form_table_AJAX(&#039;mainForm&#039;, $_SERVER[&#039;PHP_SELF&#039;] . &#039;?&#039; . $_SERVER[&#039;QUERY_STRING&#039;], &#039;post&#039;);\n    $form-&gt;submit_button_attr = &#039;name=&quot;saveData&quot; value=&quot;&#039; . __(&#039;Save&#039;) . &#039;&quot; class=&quot;s-btn btn btn-default&quot;&#039;;\n    \/\/ form table attributes\n    $form-&gt;table_attr = &#039;id=&quot;dataList&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&#039;;\n    $form-&gt;table_header_attr = &#039;class=&quot;alterCell&quot;&#039;;\n    $form-&gt;table_content_attr = &#039;class=&quot;alterCell2&quot;&#039;;\n\n    \/\/custom button\n    if (isset($itemID)) {\n        $form-&gt;addCustomBtn(&#039;history&#039;, __(&#039;Log&#039;), $_SERVER[&#039;PHP_SELF&#039;] . &#039;?action=history&amp;ajaxLoad=true&amp;biblioID=&#039; . $itemID, &#039; class=&quot;s-btn btn btn-success&quot;&#039;);\n    }\n\n    $visibility = &#039;makeVisible s-margin__bottom-1&#039;;\n    \/\/ edit mode flag set\n    if ($rec_q-&gt;num_rows &gt; 0) {\n        $form-&gt;edit_mode = true;\n        \/\/ record ID for delete process\n        if (!$in_pop_up) {\n            \/\/ form record id\n            $form-&gt;record_id = $itemID;\n        } else {\n            $form-&gt;addHidden(&#039;updateRecordID&#039;, $itemID);\n            if (isset($_POST[&#039;itemCollID&#039;])) {\n                $form-&gt;addHidden(&#039;itemCollID&#039;, $_POST[&#039;itemCollID&#039;]);\n            }\n            $form-&gt;back_button = false;\n        }\n        \/\/ form record title\n        $form-&gt;record_title = $rec_d[&#039;title&#039;];\n        \/\/ submit button attribute\n        $form-&gt;submit_button_attr = &#039;name=&quot;saveData&quot; value=&quot;&#039; . __(&#039;Update&#039;) . &#039;&quot; class=&quot;s-btn btn btn-primary&quot;&#039;;\n        \/\/ element visibility class toogle\n        $visibility = &#039;makeHidden s-margin__bottom-1&#039;;\n\n        \/\/ custom field data query\n        $_sql_rec_cust_q = sprintf(&#039;SELECT * FROM biblio_custom WHERE biblio_id=%d&#039;, $itemID);\n        $rec_cust_q = $dbs-&gt;query($_sql_rec_cust_q);\n        $rec_cust_d = $rec_cust_q-&gt;fetch_assoc();\n    } else {\n        $_SESSION[&#039;biblioToBiblio&#039;] = array();\n    }\n\n    \/\/ include custom fields file\n    if (file_exists(MDLBS . &#039;bibliography\/custom_fields.inc.php&#039;)) {\n        include MDLBS . &#039;bibliography\/custom_fields.inc.php&#039;;\n    }\n\n    \/* Form Element(s) *\/\n    \/\/ biblio title\n    $form-&gt;addTextField(&#039;textarea&#039;, &#039;title&#039;, __(&#039;Title&#039;) . &#039;*&#039;, $rec_d[&#039;title&#039;] ?? &#039;&#039;, &#039;rows=&quot;1&quot; class=&quot;form-control&quot;&#039;,\n        __(&#039;Main title of collection. Separate child title with colon and pararel title with equal (=) sign.&#039;));\n\n    \/\/ biblio authors\n    \/\/ $str_input = &#039;&lt;div class=&quot;&#039;.$visibility.&#039;&quot;&gt;&lt;a class=&quot;notAJAX button&quot; href=&quot;javascript: openHTMLpop(\\&#039;&#039;.MWB.&#039;bibliography\/pop_author.php?biblioID=&#039;.$rec_d[&#039;biblio_id&#039;].&#039;\\&#039;, 500, 200, \\&#039;&#039;.__(&#039;Authors\/Roles&#039;).&#039;\\&#039;)&quot;&gt;&#039;.__(&#039;Add Author(s)&#039;).&#039;&lt;\/a&gt;&lt;\/div&gt;&#039;;\n    $str_input = &#039;&lt;div class=&quot;&#039; . $visibility . &#039;&quot;&gt;&lt;a class=&quot;s-btn btn btn-default notAJAX openPopUp&quot; href=&quot;&#039; . MWB . &#039;bibliography\/pop_author.php?biblioID=&#039; . ($rec_d[&#039;biblio_id&#039;] ?? &#039;&#039;) . &#039;&quot; title=&quot;&#039; . __(&#039;Authors\/Roles&#039;) . &#039;&quot;&gt;&#039; . __(&#039;Add Author(s)&#039;) . &#039;&lt;\/a&gt;&lt;\/div&gt;&#039;;\n    $str_input .= &#039;&lt;iframe name=&quot;authorIframe&quot; id=&quot;authorIframe&quot; class=&quot;form-control&quot; style=&quot;width: 100%; height: 100px;&quot; src=&quot;&#039; . MWB . &#039;bibliography\/iframe_author.php?biblioID=&#039; . ($rec_d[&#039;biblio_id&#039;] ?? &#039;&#039;) . &#039;&amp;block=1&quot;&gt;&lt;\/iframe&gt;&#039;;\n    $form-&gt;addAnything(__(&#039;Author(s)&#039;), $str_input);\n\n    \/\/ modified by hendro wicaksono\n    \/\/ biblio sor statement of responsibility\n    $form-&gt;addTextField(&#039;text&#039;, &#039;sor&#039;, __(&#039;Statement of Responsibility&#039;), $rec_d[&#039;sor&#039;] ?? &#039;&#039;, &#039;class=&quot;form-control&quot; style=&quot;width: 50%;&quot;&#039;, __(&#039;Main source of information to show who has written, composed, illustrated, or in other ways contributed to the existence of the item.&#039;));\n    \/\/ end of modification\n\n    \/\/ biblio edition\n    $form-&gt;addTextField(&#039;text&#039;, &#039;edition&#039;, __(&#039;Edition&#039;), $rec_d[&#039;edition&#039;] ?? &#039;&#039;, &#039;class=&quot;form-control&quot; style=&quot;width: 50%;&quot;&#039;, __(&#039;A version of publication having substantial changes or additions.&#039;));\n    \/\/ biblio specific detail info\/area\n    $form-&gt;addTextField(&#039;textarea&#039;, &#039;specDetailInfo&#039;, __(&#039;Specific Detail Info&#039;), $rec_d[&#039;spec_detail_info&#039;] ?? &#039;&#039;, &#039;rows=&quot;2&quot; class=&quot;form-control&#039;, __(&#039;explain more details about an item e.g. scale within a map, running time in a movie dvd.&#039;));\n    \/\/ biblio item batch add (by.ido alit)\n    $pattern_options = array(\n        \/\/ default value\n        array($sysconf[&#039;batch_item_code_pattern&#039;], $sysconf[&#039;batch_item_code_pattern&#039;])\n    );\n    \/\/ get pattern from database\n    $pattern_q = $dbs-&gt;query(&#039;SELECT setting_value FROM setting WHERE setting_name = \\&#039;batch_item_code_pattern\\&#039;&#039;);\n    if (!$dbs-&gt;errno) {\n        \/\/ empty pattern\n        $pattern_options = array(array(&#039;&#039;, &#039;-- &#039; . __(&#039;Choose pattern&#039;) . &#039; --&#039;));\n        $pattern_d = $pattern_q-&gt;fetch_row();\n        $val = @unserialize($pattern_d[0]);\n        if (!empty($val)) {\n            foreach ($val as $v) {\n                $pattern_options[] = array($v, $v);\n            }\n        }\n    }\n\n    \/\/ Modified by Eddy Subratha\n    \/\/ To avoid a miss processing after a pattern created, I think we should hide the Item Code Manager below\n    \/\/ $str_input .= &#039;&lt;a href=&quot;&#039;.MWB.&#039;master_file\/item_code_pattern.php&quot; height=&quot;420px&quot; class=&quot;s-btn btn btn-default notAJAX openPopUp notIframe&quot; title=&quot;&#039;.__(&#039;Item code pattern manager&#039;).&#039;&quot;&gt;&#039;.__(&#039;View available pattern&#039;).&#039;&lt;\/a&gt;&#039;;\n    $str_input = &#039;&lt;div class=&quot;form-inline&quot;&gt;&#039;;\n    $str_input .= simbio_form_element::selectList(&#039;itemCodePattern&#039;, $pattern_options, &#039;&#039;, &#039;class=&quot;form-control col&quot;&#039;) . &#039;&nbsp;&#039;;\n    $str_input .= &#039;&lt;input type=&quot;text&quot; class=&quot;form-control col-4 noAutoFocus&quot; name=&quot;totalItems&quot; placeholder=&quot;&#039; . __(&#039;Total item(s)&#039;) . &#039;&quot; \/&gt;&nbsp;&#039;;\n    $str_input .= &#039;&lt;div class=&quot;&#039; . $visibility . &#039;&quot;&gt;\n  &lt;div class=&quot;bnt btn-group&quot;&gt;&lt;div class=&quot;btn btn-info&quot; data-toggle=&quot;collapse&quot; data-target=&quot;#batchItemDetail&quot; aria-expanded=&quot;false&quot; aria-controls=&quot;batchItemDetail&quot;&gt;&#039; . __(&#039;Options&#039;) . &#039;&lt;\/div&gt;&#039;;\n    $str_input .= &#039;&lt;a href=&quot;&#039; . MWB . &#039;bibliography\/pop_pattern.php&quot; height=&quot;420px&quot; class=&quot;s-btn btn btn-default notAJAX openPopUp notIframe&quot;  title=&quot;&#039; . __(&#039;Add new pattern&#039;) . &#039;&quot;&gt;&#039; . __(&#039;Add New Pattern&#039;) . &#039;&lt;\/a&gt;&lt;\/div&gt;&lt;\/div&gt;&#039;;\n    $str_input .= &#039;&lt;div class=&quot;collapse&quot; id=&quot;batchItemDetail&quot; style=&quot;padding:10px;width:100%; text-align:left !important;&quot;&gt;&#039;;\n\n    \/\/ location\n    $location_q = $dbs-&gt;query(&quot;SELECT location_id, location_name FROM mst_location&quot;);\n    $location_options = array(array(&#039;&#039;, &#039;-- &#039; . __(&#039;Location&#039;) . &#039; --&#039;));\n    while ($location_d = $location_q-&gt;fetch_row()) {\n        $location_options[] = array($location_d[0], $location_d[1]);\n    }\n    $str_input .= &#039;&lt;div class=&quot;form-group divRow p-1&quot;&gt;&lt;div class=&quot;col-3&quot;&gt;&#039; . __(&#039;Location&#039;) . &#039;&lt;\/div&gt;&#039;;\n    $str_input .= simbio_form_element::selectList(&#039;locationID&#039;, $location_options, &#039;&#039;, &#039;class=&quot;form-control col-4&quot;&#039;) . &#039;&lt;\/div&gt;&#039;;\n\n    \/\/ item site\n    $str_input .= &#039;&lt;div class=&quot;form-group divRow p-1&quot;&gt;&lt;div class=&quot;col-3&quot;&gt;&#039; . __(&#039;Shelf Location&#039;) . &#039;&lt;\/div&gt;&#039;;\n    $str_input .= simbio_form_element::textField(&#039;text&#039;, &#039;itemSite&#039;, &#039;&#039;, &#039;class=&quot;form-control col-4&quot;&#039;) . &#039;&lt;\/div&gt;&#039;;\n\n    \/\/ collection type\n    $coll_type_q = $dbs-&gt;query(&quot;SELECT coll_type_id, coll_type_name FROM mst_coll_type&quot;);\n    $coll_type_options = array(array(&#039;&#039;, &#039;--&#039; . __(&#039;Collection Type&#039;) . &#039;--&#039;));\n    while ($coll_type_d = $coll_type_q-&gt;fetch_row()) {\n        $coll_type_options[] = array($coll_type_d[0], $coll_type_d[1]);\n    }\n    $str_input .= &#039;&lt;div class=&quot;form-group divRow p-1&quot;&gt;&lt;div class=&quot;col-3&quot;&gt;&#039; . __(&#039;Collection Type&#039;) . &#039;&lt;\/div&gt;&#039;;\n    $str_input .= simbio_form_element::selectList(&#039;collTypeID&#039;, $coll_type_options, &#039;&#039;, &#039;class=&quot;form-control col-4&quot;&#039;) . &#039;&lt;\/div&gt; &#039;;\n\n    \/\/ item status\n    $item_status_q = $dbs-&gt;query(&quot;SELECT item_status_id, item_status_name FROM mst_item_status&quot;);\n    $item_status_options[] = array(&#039;0&#039;, __(&#039;Available&#039;));\n    while ($item_status_d = $item_status_q-&gt;fetch_row()) {\n        $item_status_options[] = array($item_status_d[0], $item_status_d[1]);\n    }\n    $str_input .= &#039;&lt;div class=&quot;form-group divRow p-1&quot;&gt;&lt;div class=&quot;col-3&quot;&gt;&#039; . __(&#039;Item Status&#039;) . &#039;&lt;\/div&gt;&#039;;\n    $str_input .= simbio_form_element::selectList(&#039;itemStatusID&#039;, $item_status_options, &#039;&#039;, &#039;class=&quot;form-control col-4&quot;&#039;) . &#039;&lt;\/div&gt; &#039;;\n\n    \/\/ item source\n    $source_options[] = array(&#039;1&#039;, __(&#039;Buy&#039;));\n    $source_options[] = array(&#039;2&#039;, __(&#039;Prize\/Grant&#039;));\n    $str_input .= &#039;&lt;div class=&quot;form-group divRow p-1&quot;&gt;&lt;div class=&quot;col-3&quot;&gt;&#039; . __(&#039;Source&#039;) . &#039;&lt;\/div&gt;&#039;;\n    $str_input .= simbio_form_element::selectList(&#039;source&#039;, $source_options, &#039;&#039;, &#039;class=&quot;form-control col-4&quot;&#039;) . &#039;&lt;\/div&gt; &#039;;\n\n    \/\/order date\n    $str_input .= &#039;&lt;div class=&quot;form-group divRow p-1&quot;&gt;&lt;div class=&quot;col-3&quot;&gt;&#039; . __(&#039;Order Date&#039;) . &#039;&lt;\/div&gt;&#039;;\n    $str_input .= simbio_form_element::dateField(&#039;orDate&#039;, date(&#039;Y-m-d&#039;), &#039;class=&quot;form-control&quot;&#039;) . &#039;&lt;\/div&gt;&#039;;\n\n    \/\/receiving date\n    $str_input .= &#039;&lt;div class=&quot;form-group divRow p-1&quot;&gt;&lt;div class=&quot;col-3&quot;&gt;&#039; . __(&#039;Receiving Date&#039;) . &#039;&lt;\/div&gt;&#039;;\n    $str_input .= simbio_form_element::dateField(&#039;recvDate&#039;, date(&#039;Y-m-d&#039;), &#039; class=&quot;form-control col-12&quot;&#039;) . &#039;&lt;\/div&gt;&#039;;\n\n    \/\/ order number\n    $str_input .= &#039;&lt;div class=&quot;form-group divRow p-1&quot;&gt;&lt;div class=&quot;col-3&quot;&gt;&#039; . __(&#039;Order Number&#039;) . &#039;&lt;\/div&gt;&#039;;\n    $str_input .= simbio_form_element::textField(&#039;text&#039;, &#039;ordNo&#039;, &#039;&#039;, &#039;class=&quot;form-control&quot;&#039;) . &#039;&lt;\/div&gt;&#039;;\n\n    \/\/ invoice\n    $str_input .= &#039;&lt;div class=&quot;form-group divRow p-1&quot;&gt;&lt;div class=&quot;col-3&quot;&gt;&#039; . __(&#039;Invoice&#039;) . &#039;&lt;\/div&gt;&#039;;\n    $str_input .= simbio_form_element::textField(&#039;text&#039;, &#039;invoice&#039;, &#039;&#039;, &#039;class=&quot;form-control col-4&quot;&#039;) . &#039;&lt;\/div&gt;&#039;;\n\n    \/\/ invoice date\n    $str_input .= &#039;&lt;div class=&quot;form-group divRow p-1&quot;&gt;&lt;div class=&quot;col-3&quot;&gt;&#039; . __(&#039;Invoice Date&#039;) . &#039;&lt;\/div&gt;&#039;;\n    $str_input .= simbio_form_element::dateField(&#039;invcDate&#039;, date(&#039;Y-m-d&#039;), &#039; class=&quot;form-control col-12&quot;&#039;) . &#039;&lt;\/div&gt;&#039;;\n\n    \/\/ supplier\n    $supplier_q = $dbs-&gt;query(&quot;SELECT supplier_id, supplier_name FROM mst_supplier&quot;);\n    $supplier_options[] = array(&#039;0&#039;, __(&#039;Not Applicable&#039;));\n    while ($supplier_d = $supplier_q-&gt;fetch_row()) {\n        $supplier_options[] = array($supplier_d[0], $supplier_d[1]);\n    }\n    $str_input .= &#039;&lt;div class=&quot;form-group divRow p-1&quot;&gt;&lt;div class=&quot;col-3&quot;&gt;&#039; . __(&#039;Supplier&#039;) . &#039;&lt;\/div&gt;&#039;;\n    $str_input .= simbio_form_element::selectList(&#039;supplierID&#039;, $supplier_options, &#039;&#039;, &#039;class=&quot;form-control col-4&quot;&#039;) . &#039;&lt;\/div&gt; &#039;;\n\n    \/\/price\n    $str_input .= &#039;&lt;div class=&quot;form-group divRow p-1&quot;&gt;&lt;div class=&quot;col-3&quot;&gt;&#039; . __(&#039;Price&#039;) . &#039;&lt;\/div&gt;&#039;;\n    $str_input .= simbio_form_element::textField(&#039;text&#039;, &#039;price&#039;, &#039;0&#039;, &#039;class=&quot;form-control col-3&quot;&#039;);\n    $str_input .= simbio_form_element::selectList(&#039;priceCurrency&#039;, $sysconf[&#039;currencies&#039;], &#039;&#039;, &#039;class=&quot;form-control col-2&quot;&#039;) . &#039;&lt;\/div&gt; &#039;;\n\n    $str_input .= &#039;&lt;\/div&gt;&#039;;\n    $form-&gt;addAnything(__(&#039;Item(s) code batch generator&#039;), $str_input);\n    \/\/ biblio item add\n    if (!$in_pop_up AND $form-&gt;edit_mode) {\n        \/\/ $str_input = &#039;&lt;div class=&quot;makeHidden s-margin__bottom-1&quot;&gt;&lt;a class=&quot;notAJAX button&quot; href=&quot;javascript: openHTMLpop(\\&#039;&#039;.MWB.&#039;bibliography\/pop_item.php?inPopUp=true&amp;action=detail&amp;biblioID=&#039;.$rec_d[&#039;biblio_id&#039;].&#039;\\&#039;, 650, 400, \\&#039;&#039;.__(&#039;Items\/Copies&#039;).&#039;\\&#039;)&quot;&gt;&#039;.__(&#039;Add New Items&#039;).&#039;&lt;\/a&gt;&lt;\/div&gt;&#039;;\n        $str_input = &#039;&lt;div class=&quot;makeHidden s-margin__bottom-1&quot;&gt;&lt;a class=&quot;s-btn btn btn-default notAJAX openPopUp&quot; href=&quot;&#039; . MWB . &#039;bibliography\/pop_item.php?inPopUp=true&amp;action=detail&amp;biblioID=&#039; . $rec_d[&#039;biblio_id&#039;] . &#039;&quot; title=&quot;&#039; . __(&#039;Items\/Copies&#039;) . &#039;&quot; width=&quot;780&quot; height=&quot;500&quot;&gt;&#039; . __(&#039;Add New Items&#039;) . &#039;&lt;\/a&gt;&lt;\/div&gt;&#039;;\n        $str_input .= &#039;&lt;iframe name=&quot;itemIframe&quot; id=&quot;itemIframe&quot; class=&quot;form-control&quot; style=&quot;width: 100%; height: 100px;&quot; src=&quot;&#039; . MWB . &#039;bibliography\/iframe_item_list.php?biblioID=&#039; . $rec_d[&#039;biblio_id&#039;] . &#039;&amp;block=1&quot;&gt;&lt;\/iframe&gt;&#039; . &quot;\\n&quot;;\n        $form-&gt;addAnything(__(&#039;Item(s) Data&#039;), $str_input);\n    }\n    \/\/ biblio gmd\n    \/\/ get gmd data related to this record from database\n    $gmd_q = $dbs-&gt;query(&#039;SELECT gmd_id, gmd_name FROM mst_gmd&#039;);\n    $gmd_options = array();\n    while ($gmd_d = $gmd_q-&gt;fetch_row()) {\n        $gmd_options[] = array($gmd_d[0], $gmd_d[1]);\n    }\n    $form-&gt;addSelectList(&#039;gmdID&#039;, __(&#039;GMD&#039;), $gmd_options, $rec_d[&#039;gmd_id&#039;] ?? &#039;&#039;, &#039;class=&quot;select2&quot;&#039;, __(&#039;General material designation. The physical form of publication.&#039;));\n\n    \/\/ biblio RDA content, media, carrier type\n    foreach ($rda_cmc as $cmc =&gt; $cmc_name) {\n        $cmc_options = array();\n        $cmc_q = $dbs-&gt;query(&#039;SELECT id, &#039; . $cmc . &#039;_type FROM mst_&#039; . $cmc . &#039;_type&#039;);\n        $cmc_options = array();\n        $cmc_options[] = array(0, __(&#039;Not set&#039;));\n        while (isset($cmc_q-&gt;num_rows) &amp;&amp; $cmc_q-&gt;num_rows &gt; 0 &amp;&amp; $cmc_d = $cmc_q-&gt;fetch_row()) {\n            $cmc_options[] = array($cmc_d[0], $cmc_d[1]);\n        }\n        if (isset($rec_d[$cmc . &#039;_type_id&#039;])) {\n            $form-&gt;addSelectList($cmc . &#039;TypeID&#039;, __($cmc_name), $cmc_options, $rec_d[$cmc . &#039;_type_id&#039;] ?? &#039;&#039;, &#039;class=&quot;select2&quot;&#039;, __(&#039;RDA &#039; . $cmc_name . &#039; designation.&#039;));\n        } else {\n            $form-&gt;addSelectList($cmc . &#039;TypeID&#039;, __($cmc_name), $cmc_options, &#039;&#039;, &#039;class=&quot;select2&quot;&#039;, __(&#039;RDA &#039; . $cmc_name . &#039; designation.&#039;));\n        }\n    }\n\n\n    \/\/ biblio publish frequencies\n    \/\/ get frequency data related to this record from database\n    $freq_q = $dbs-&gt;query(&#039;SELECT frequency_id, frequency FROM mst_frequency&#039;);\n    $freq_options[] = array(&#039;0&#039;, __(&#039;Not Applicable&#039;));\n    while ($freq_d = $freq_q-&gt;fetch_row()) {\n        $freq_options[] = array($freq_d[0], $freq_d[1]);\n    }\n    $str_input = &#039;&lt;div class=&quot;form-inline&quot;&gt;&#039;;\n    $str_input .= simbio_form_element::selectList(&#039;frequencyID&#039;, $freq_options, $rec_d[&#039;frequency_id&#039;] ?? &#039;&#039;, &#039;class=&quot;select2 col-3&quot;&#039;);\n    $str_input .= &#039;&lt;div class=&quot;col&quot;&gt;&#039; . __(&#039;Use this for Serial publication&#039;) . &#039;&lt;\/div&gt;&#039;;\n    $str_input .= &#039;&lt;\/div&gt;&#039;;\n    $form-&gt;addAnything(__(&#039;Frequency&#039;), $str_input);\n    \/\/ biblio ISBN\/ISSN\n    $form-&gt;addTextField(&#039;text&#039;, &#039;isbn_issn&#039;, __(&#039;ISBN\/ISSN&#039;), $rec_d[&#039;isbn_issn&#039;] ?? &#039;&#039;, &#039;class=&quot;form-control&quot; style=&quot;width: 40%;&quot;&#039;, __(&#039;Unique publishing number for each title of publication.&#039;));\n    \/\/ biblio publisher\n    $publ_options[] = array(&#039;NONE&#039;, &#039;&#039;);\n    if (isset($rec_d[&#039;publisher_id&#039;])) {\n        $publ_q = $dbs-&gt;query(sprintf(&#039;SELECT publisher_id, publisher_name FROM mst_publisher WHERE publisher_id=%d&#039;, $rec_d[&#039;publisher_id&#039;] ?? &#039;&#039;));\n        while ($publ_d = $publ_q-&gt;fetch_row()) {\n            $publ_options[] = array($publ_d[0], $publ_d[1]);\n        }\n    }\n    $form-&gt;addSelectList(&#039;publisherID&#039;, __(&#039;Publisher&#039;), $publ_options, $rec_d[&#039;publisher_id&#039;] ?? &#039;&#039;, &#039;class=&quot;select2&quot; data-src=&quot;&#039; . SWB . &#039;admin\/AJAX_lookup_handler.php?format=json&amp;allowNew=true&quot; data-src-table=&quot;mst_publisher&quot; data-src-cols=&quot;publisher_id:publisher_name&quot;&#039;);\n    \/\/ biblio publish year\n    $form-&gt;addTextField(&#039;text&#039;, &#039;year&#039;, __(&#039;Publishing Year&#039;), $rec_d[&#039;publish_year&#039;] ?? &#039;&#039;, &#039;class=&quot;form-control&quot; style=&quot;width: 40%;&quot;&#039;, __(&#039;Year of publication&#039;));\n    \/\/ biblio publish place\n    $plc_options[] = array(&#039;NONE&#039;, &#039;&#039;);\n    if (isset($rec_d[&#039;publish_place_id&#039;])) {\n        $plc_q = $dbs-&gt;query(sprintf(&#039;SELECT place_id, place_name FROM mst_place WHERE place_id=%d&#039;, $rec_d[&#039;publish_place_id&#039;] ?? &#039;&#039;));\n        while ($plc_d = $plc_q-&gt;fetch_row()) {\n            $plc_options[] = array($plc_d[0], $plc_d[1]);\n        }\n    }\n    $form-&gt;addSelectList(&#039;placeID&#039;, __(&#039;Publishing Place&#039;), $plc_options, $rec_d[&#039;publish_place_id&#039;] ?? &#039;&#039;, &#039;class=&quot;select2&quot; data-src=&quot;&#039; . SWB . &#039;admin\/AJAX_lookup_handler.php?format=json&amp;allowNew=true&quot; data-src-table=&quot;mst_place&quot; data-src-cols=&quot;place_id:place_name&quot;&#039;);\n    \/\/ biblio collation\n    $form-&gt;addTextField(&#039;text&#039;, &#039;collation&#039;, __(&#039;Collation&#039;), $rec_d[&#039;collation&#039;] ?? &#039;&#039;, &#039;class=&quot;form-control&quot; style=&quot;width: 40%;&quot;&#039;, __(&#039;Physical description of a publication e.g. publication length, width, page numbers, etc.&#039;));\n    \/\/ biblio series title\n    $form-&gt;addTextField(&#039;textarea&#039;, &#039;seriesTitle&#039;, __(&#039;Series Title&#039;), $rec_d[&#039;series_title&#039;] ?? &#039;&#039;, &#039;rows=&quot;1&quot; class=&quot;form-control&#039;);\n    \/\/ biblio classification\n    $cls_options[] = array(&#039;NONE&#039;, &#039;&#039;);\n    if (isset($rec_d[&#039;classification&#039;])) {\n        $cls_options[] = array($rec_d[&#039;classification&#039;], $rec_d[&#039;classification&#039;]);\n    }\n    $form-&gt;addSelectList(&#039;class&#039;, __(&#039;Classification&#039;), $cls_options, $rec_d[&#039;classification&#039;] ?? &#039;&#039;, &#039;class=&quot;select2&quot; data-src=&quot;&#039; . SWB . &#039;admin\/AJAX_lookup_handler.php?format=json&amp;allowNew=true&quot; data-src-table=&quot;mst_topic&quot; data-src-cols=&quot;classification:classification:topic&quot;&#039;);\n    \/\/ biblio call_number\n    $form-&gt;addTextField(&#039;text&#039;, &#039;callNumber&#039;, __(&#039;Call Number&#039;), $rec_d[&#039;call_number&#039;] ?? &#039;&#039;, &#039;class=&quot;form-control&quot; style=&quot;width: 40%;&quot;&#039;, __(&#039;Sets of ID that put in the book spine.&#039;));\n    \/\/ biblio topics\n    \/\/ $str_input = &#039;&lt;div class=&quot;&#039;.$visibility.&#039;&quot;&gt;&lt;a class=&quot;notAJAX button&quot; href=&quot;javascript: openHTMLpop(\\&#039;&#039;.MWB.&#039;bibliography\/pop_topic.php?biblioID=&#039;.$rec_d[&#039;biblio_id&#039;].&#039;\\&#039;, 500, 200, \\&#039;&#039;.__(&#039;Subjects\/Topics&#039;).&#039;\\&#039;)&quot;&gt;&#039;.__(&#039;Add Subject(s)&#039;).&#039;&lt;\/a&gt;&lt;\/div&gt;&#039;;\n    $str_input = &#039;&lt;div class=&quot;&#039; . $visibility . &#039; s-margin__bottom-1&quot;&gt;&lt;a class=&quot;s-btn btn btn-default notAJAX openPopUp&quot; href=&quot;&#039; . MWB . &#039;bibliography\/pop_topic.php?biblioID=&#039; . ($rec_d[&#039;biblio_id&#039;] ?? &#039;&#039;) . &#039;&quot; title=&quot;&#039; . __(&#039;Subjects\/Topics&#039;) . &#039;&quot;&gt;&#039; . __(&#039;Add Subject(s)&#039;) . &#039;&lt;\/a&gt;&lt;\/div&gt;&#039;;\n    $str_input .= &#039;&lt;iframe name=&quot;topicIframe&quot; id=&quot;topicIframe&quot; class=&quot;form-control&quot; style=&quot;width: 100%; height: 100px;&quot; src=&quot;&#039; . MWB . &#039;bibliography\/iframe_topic.php?biblioID=&#039; . ($rec_d[&#039;biblio_id&#039;] ?? &#039;&#039;) . &#039;&amp;block=1&quot;&gt;&lt;\/iframe&gt;&#039;;\n    $form-&gt;addAnything(__(&#039;Subject(s)&#039;), $str_input);\n    \/\/ biblio language\n    \/\/ get language data related to this record from database\n    $lang_q = $dbs-&gt;query(&quot;SELECT language_id, language_name FROM mst_language&quot;);\n    $lang_options = array();\n    while ($lang_d = $lang_q-&gt;fetch_row()) {\n        $lang_options[] = array($lang_d[0], $lang_d[1]);\n    }\n    $form-&gt;addSelectList(&#039;languageID&#039;, __(&#039;Language&#039;), $lang_options, $rec_d[&#039;language_id&#039;] ?? &#039;&#039;, &#039;class=&quot;select2&quot;&#039;, __(&#039;Language use by publication.&#039;));\n    \/\/ biblio note\n    $form-&gt;addTextField(&#039;textarea&#039;, &#039;notes&#039;, __(&#039;Abstract\/Notes&#039;), $rec_d[&#039;notes&#039;] ?? &#039;&#039;, &#039;class=&quot;form-control&quot; style=&quot;width: 100%;&quot; rows=&quot;3&quot;&#039;, __(&#039;Insert here any abstract or notes from the publication.&#039;));\n    \/\/ biblio cover image\n    $str_input = &#039;&lt;div class=&quot;row&quot;&gt;&#039;;\n    $str_input .= &#039;&lt;div class=&quot;col-2&quot;&gt;&#039;;\n    $str_input .= &#039;&lt;div id=&quot;imageFilename&quot; class=&quot;s-margin__bottom-1&quot;&gt;&#039;;\n    $upper_dir = &#039;&#039;;\n    if ($in_pop_up) {\n        $upper_dir = &#039;..\/..\/&#039;;\n    }\n    $imageDisk = Storage::images();\n    if (isset($rec_d[&#039;image&#039;]) &amp;&amp; $imageDisk-&gt;isExists(&#039;docs\/&#039; . $rec_d[&#039;image&#039;])) {\n        $url = $upper_dir . &#039;..\/lib\/minigalnano\/createthumb.php?filename=images\/docs\/&#039;.urlencode($rec_d[&#039;image&#039;] ?? &#039;&#039;);\n        $str_input .= &#039;&lt;a href=&quot;&#039; . $url . &#039;&amp;width=220&quot; class=&quot;openPopUp notAJAX&quot; title=&quot;&#039; . __(&#039;Click to enlarge preview&#039;) . &#039;&quot;&gt;&#039;;\n        $str_input .= &#039;&lt;img src=&quot;&#039; . $url .&#039;&amp;width=130&quot; class=&quot;img-fluid rounded&quot; alt=&quot;Image cover&quot;&gt;&#039;;\n        $str_input .= &#039;&lt;\/a&gt;&#039;;\n        $str_input .= &#039;&lt;a href=&quot;&#039; . MWB . &#039;bibliography\/index.php&quot; postdata=&quot;removeImage=true&amp;bimg=&#039; . $itemID . &#039;&amp;img=&#039; . ($rec_d[&#039;image&#039;] ?? &#039;&#039;) . &#039;&quot; loadcontainer=&quot;imageFilename&quot; class=&quot;s-margin__bottom-1 mt-1 s-btn btn btn-danger btn-block makeHidden removeImage&quot;&gt;&#039; . __(&#039;Remove Image&#039;) . &#039;&lt;\/a&gt;&#039;;\n    } else {\n        $str_input .= &#039;&lt;img src=&quot;&#039; . $upper_dir . &#039;..\/lib\/minigalnano\/createthumb.php?filename=images\/default\/image.png&amp;width=130&quot; class=&quot;img-fluid rounded&quot; alt=&quot;Image cover&quot;&gt;&#039;;\n    }\n    $str_input .= &#039;&lt;\/div&gt;&#039;;\n    $str_input .= &#039;&lt;\/div&gt;&#039;;\n    $str_input .= &#039;&lt;div class=&quot;custom-file col-7&quot;&gt;&#039;;\n    $str_input .= simbio_form_element::textField(&#039;file&#039;, &#039;image&#039;, &#039;&#039;, &#039;class=&quot;custom-file-input&quot; id=&quot;customFile&quot;&#039;);\n    $str_input .= &#039;&lt;label class=&quot;custom-file-label&quot; for=&quot;customFile&quot;&gt;&#039; . __(&#039;Choose file&#039;) . &#039;&lt;\/label&gt;&#039;;\n    $str_input .= &#039;&lt;div style=&quot;padding: 10px;margin-left: -25px;&quot;&gt;&#039;;\n    $str_input .= &#039;&lt;div&gt;&#039; . __(&#039;Or download from url&#039;) . &#039;&lt;\/div&gt;&#039;;\n    $str_input .= &#039;&lt;div class=&quot;form-inline&quot;&gt;\n                  &lt;input type=&quot;text&quot; id=&quot;getUrl&quot; class=&quot;form-control&quot; style=&quot;width:190px&quot; placeholder=&quot;Paste url address here&quot;&gt;\n                  &lt;div class=&quot;input-group-append&quot;&gt;\n                  &lt;button class=&quot;btn btn-default&quot; type=&quot;button&quot; id=&quot;getImage&quot;&gt;&#039; . __(&#039;Download&#039;) . &#039; &lt;i class=&quot;fa fa-spin fa-cog hidden&quot; id=&quot;imgLoader&quot;&gt;&lt;\/i&gt;&lt;\/button&gt;\n                  &lt;button class=&quot;btn btn-default openPopUp notAJAX ml-2&quot; type=&quot;button&quot; id=&quot;showEngine&quot; onclick=&quot;toggle_search($(\\&#039;#title\\&#039;).val());&quot;&gt;&#039; . __(&#039;Trying search in DuckduckGo&#039;) . &#039;&lt;\/button&gt;\n                  &lt;\/div&gt;\n                  &lt;\/div&gt;&#039;;\n    $str_input .= &#039;&lt;\/div&gt;&#039;;\n    $str_input .= &#039;&lt;\/div&gt;&#039;;\n    $str_input .= &#039; &lt;div class=&quot;mt-2 ml-2&quot;&gt;Maximum &#039; . $sysconf[&#039;max_image_upload&#039;] . &#039; KB&lt;\/div&gt;&#039;;\n    $str_input .= &#039;&lt;\/div&gt;&#039;;\n    $str_input .= &#039;&lt;textarea id=&quot;base64picstring&quot; name=&quot;base64picstring&quot; style=&quot;display: none;&quot;&gt;&lt;\/textarea&gt;&#039;;\n    $str_input .= &#039;&lt;\/div&gt;&lt;\/div&gt;&lt;\/div&gt;&#039;;\n\n    \/\/for scanner\n    if ($sysconf[&#039;scanner&#039;] !== false) {\n        $str_input .= &#039;&lt;p&gt;&#039; . __(&#039;or scan a cover&#039;) . &#039;&lt;\/p&gt;&#039;;\n        \/\/ $str_input .= &#039;&lt;textarea id=&quot;base64picstring&quot; name=&quot;base64picstring&quot; style=&quot;display: none;&quot;&gt;&lt;\/textarea&gt;&#039;;\n\n        if ($sysconf[&#039;scanner&#039;] == &#039;html5&#039;) {\n            $str_input .= &#039;&lt;input type=&quot;button&quot; value=&quot;&#039; . __(&#039;Show scan dialog&#039;) . &#039;&quot; class=&quot;button btn btn-default openPopUp&quot; onclick=&quot;toggle_dialog();&quot; \/&gt;&#039;;\n            $str_input .= &#039;&lt;input type=&quot;button&quot; value=&quot;&#039; . __(&#039;Reset&#039;) . &#039;&quot; class=&quot;button btn btn-danger openPopUp ml-1&quot; onclick=&quot;scan_reset();&quot; \/&gt;&#039;;\n            $str_input .= &#039;&lt;div id=&quot;scan_overlay&quot; style=&quot;display: none; position: absolute; left: 0; top: 0; width: 100%; height: 100%; z-index: 1000; background: rgba(192, 194, 201, 0.5);&quot;&gt;&#039;;\n            $str_input .= &#039;&lt;div id=&quot;scan_dialog&quot; title=&quot;&#039; . __(&#039;Scan a cover&#039;) . &#039;&quot;&gt;&#039;;\n            $str_input .= &#039;&lt;div id=&quot;scan_options_std&quot; style=&quot;margin: 5px;&quot;&gt;&lt;label&gt;&#039; . __(&#039;Format:&#039;) . &#039; &lt;select id=&quot;scan_type&quot; onchange=&quot;scan_type();&quot;&gt;&#039;;\n            $str_input .= &#039;&lt;option value=&quot;png&quot;&gt;PNG&lt;\/option&gt;&lt;option value=&quot;jpg&quot;&gt;JPEG&lt;\/option&gt;&lt;\/select&gt;&lt;\/label&gt; &#039;;\n            $str_input .= &#039;&lt;input type=&quot;button&quot; id=&quot;btn_getscan&quot; class=&quot;button btn&quot; onclick=&quot;scan()&quot; value=&quot;&#039; . __(&#039;Scan&#039;) . &#039;&quot; \/&gt;&#039;;\n            $str_input .= &#039;&lt;i style=&quot;margin-left: 10px; cursor: pointer; cursor: hand;&quot; title=&quot;&#039; . __(&#039;Click to show or hide options&#039;) . &#039;&quot; onclick=&quot;toggle_options()&quot; class=&quot;fa fa-gear fa-2x&quot;&gt;&lt;\/i&gt;&lt;\/div&gt;&#039;;\n            $str_input .= &#039;&lt;div id=&quot;scan_options&quot; class=&quot;makeHidden s-margin__bottom-1&quot; style=&quot;margin: 5px;&quot;&gt;&#039;;\n            $str_input .= &#039;&lt;p style=&quot;padding: 3px 0;&quot;&gt;&lt;label&gt;&#039; . __(&#039;History index:&#039;) . &#039; &lt;input type=&quot;text&quot; id=&quot;scan_history&quot; value=&quot;1&quot; style=&quot;width: 60px;&quot; \/&gt;&lt;\/label&gt; &lt;input type=&quot;button&quot; id=&quot;btn_getrecall&quot; class=&quot;button btn&quot; onclick=&quot;scan_recall&quot; value=&quot;&#039; . __(&#039;Recall&#039;) . &#039;&quot; \/&gt;&lt;\/p&gt;&#039;;\n            $str_input .= &#039;&lt;p style=&quot;padding: 3px 0;&quot;&gt;&lt;label&gt;&#039; . __(&#039;Host:&#039;) . &#039; &lt;input type=&quot;text&quot; id=&quot;scan_host&quot; value=&quot;localhost&quot; \/&gt;&lt;\/label&gt; | &lt;label&gt;Port: &lt;input type=&quot;text&quot; id=&quot;scan_port&quot; patter=&quot;\\d*&quot; maxlength=&quot;6&quot; size=&quot;6&quot; style=&quot;width: 60px;&quot; value=&quot;8811&quot; \/&gt;&lt;\/label&gt; &lt;input type=&quot;button&quot; id=&quot;btn_getmachine&quot; class=&quot;button btn&quot; onclick=&quot;scan_init()&quot; value=&quot;&#039; . __(&#039;Get machine&#039;) . &#039;&quot; \/&gt;&lt;\/p&gt;&#039;;\n            $str_input .= &#039;&lt;p style=&quot;padding: 3px 0;&quot;&gt;&lt;label&gt;&#039; . __(&#039;Scanner:&#039;) . &#039; &lt;select id=&quot;scan_machine&quot; readonly&gt;&lt;option&gt;&#039; . __(&#039;Default&#039;) . &#039;&lt;\/option&gt;&lt;\/select&gt;&lt;\/label&gt;&lt;\/p&gt;&#039;;\n            $str_input .= &#039;&lt;p style=&quot;padding: 3px 0;&quot;&gt;&#039; . __(&#039;Resolution&#039;) . &#039;, &lt;label&gt;&#039; . __(&#039;Horizontal:&#039;) . &#039; &lt;input type=&quot;text&quot; id=&quot;scan_res_x&quot; value=&quot;300&quot; pattern=&quot;\\d*&quot; maxlength=&quot;3&quot; size=&quot;3&quot; style=&quot;width: 60px;&quot; \/&gt;dpi&lt;\/label&gt; - &lt;label&gt;&#039; . __(&#039;Vertical:&#039;) . &#039; &lt;input type=&quot;text&quot; id=&quot;scan_res_y&quot; value=&quot;300&quot; pattern=&quot;\\d*&quot; maxlength=&quot;3&quot; size=&quot;3&quot; style=&quot;width: 60px;&quot; \/&gt;dpi&lt;\/label&gt;&lt;\/p&gt;&#039;;\n            $str_input .= &#039;&lt;p style=&quot;padding: 3px 0;&quot;&gt;&#039; . __(&#039;Capture&#039;) . &#039;, &lt;label&gt;&#039; . __(&#039;Width:&#039;) . &#039; &lt;input type=&quot;text&quot; id=&quot;scan_capture_w&quot; value=&quot;2550&quot; pattern=&quot;\\d*&quot; maxlength=&quot;4&quot; size=&quot;4&quot; style=&quot;width: 60px;&quot; \/&gt;px&lt;\/label&gt; - &lt;label&gt;&#039; . __(&#039;Height:&#039;) . &#039; &lt;input type=&quot;text&quot; id=&quot;scan_capture_h&quot; value=&quot;3507&quot; pattern=&quot;\\d*&quot; maxlength=&quot;4&quot; size=&quot;4&quot; style=&quot;width: 60px;&quot; \/&gt;px&lt;\/label&gt;&lt;\/p&gt;&#039;;\n            $str_input .= &#039;&lt;p&gt;&#039; . __(&#039;Result&#039;) . &#039;, &lt;label&gt;&#039; . __(&#039;Max Width:&#039;) . &#039; &lt;input type=&quot;text&quot; id=&quot;scan_max_w&quot; value=&quot;360&quot; pattern=&quot;\\d*&quot; maxlength=&quot;3&quot; size=&quot;3&quot; style=&quot;width: 60px;&quot; \/&gt;px&lt;\/label&gt; - &lt;label&gt;&#039; . __(&#039;Max Height:&#039;) . &#039; &lt;input type=&quot;text&quot; id=&quot;scan_max_h&quot; value=&quot;480&quot; pattern=&quot;\\d*&quot; maxlength=&quot;3&quot; size=&quot;3&quot; style=&quot;width: 60px;&quot; \/&gt;px&lt;\/label&gt;&lt;\/p&gt;&lt;\/div&gt;&#039;;\n            $str_input .= &#039;&lt;div id=&quot;scan_container&quot; style=&quot;margin: 5px;&quot;&gt;&lt;div style=&quot;height: 550px; width: 390px; overflow: auto; float: left;&quot;&gt;&lt;p&gt;&#039; . __(&#039;Scan result&#039;) . &#039;&lt;\/p&gt;&lt;img id=&quot;my_imgdata&quot; style=&quot;margin: auto;&quot; \/&gt;&lt;\/div&gt;&#039;;\n            $str_input .= &#039;&lt;div style=&quot;padding-left: 10px; height: 550; width: 400px; overflow: auto; float: left;&quot;&gt;&lt;p&gt;&#039; . __(&#039;Preview&#039;) . &#039; &lt;input type=&quot;button&quot; class=&quot;button btn&quot; value=&quot;&#039; . __(&#039;Rotate Left&#039;) . &#039;&quot; onclick=&quot;scan_rotate(\\&#039;left\\&#039;)&quot; \/&gt; &lt;input type=&quot;button&quot; class=&quot;button btn&quot; value=&quot;&#039; . __(&#039;Rotate Right&#039;) . &#039;&quot; onclick=&quot;scan_rotate(\\&#039;right\\&#039;)&quot; \/&gt;&lt;\/p&gt;&lt;canvas id=&quot;my_selected&quot; style=&quot;border: 1px solid #CCC; margin: auto;&quot;&gt;&lt;\/canvas&gt;&lt;\/div&gt;&lt;\/div&gt;&lt;\/div&gt;&lt;\/div&gt;&#039;;\n        }\n    }\n\n    $form-&gt;addAnything(__(&#039;Image&#039;), $str_input);\n\n    \/\/ biblio file attachment\n    \n    \/\/\/\/\/\/\/\/\/\/TAMBAHAN UNTUK MEMBUAT FOLDER REPOSITORI\/\/\/\/\/\/\/\/\/\/\n    \/\/ Pastikan REPOBS adalah path absolut\n$base_dir = realpath(REPOBS); \/\/ Konversi ke path absolut untuk keamanan\n\nif ($base_dir === false || !is_dir($base_dir)) {\n    die(__(&#039;Base repo directory not found or inaccessible&#039;)); \/\/ Pastikan path dasar valid\n}\n\n\/\/ Generate path untuk folder hari ini\n$date_dir = date(&#039;Y\/m\/d&#039;);\n$target_dir = $base_dir . &#039;\/&#039; . $date_dir;\n\n\/\/ Pastikan target tidak melibatkan path traversal\nif (strpos($target_dir, $base_dir) !== 0) {\n    die(__(&#039;Invalid directory path detected.&#039;));\n}\n\ntry {\n    \/\/ Periksa dan buat folder jika belum ada\n    if (is_dir($target_dir)) {\n        $folder_status = __(&#039;Folder already exists: &#039;) . htmlspecialchars($date_dir, ENT_QUOTES, &#039;UTF-8&#039;);\n    } else {\n        if (!mkdir($target_dir, 0755, true)) { \/\/ Gunakan izin 0755 untuk keamanan\n            throw new Exception(__(&#039;Failed to create folder: &#039;) . htmlspecialchars($date_dir, ENT_QUOTES, &#039;UTF-8&#039;));\n        }\n        $folder_status = __(&#039;Folder created: &#039;) . htmlspecialchars($date_dir, ENT_QUOTES, &#039;UTF-8&#039;);\n    }\n} catch (Exception $e) {\n    $folder_status = __(&#039;Error: &#039;) . htmlspecialchars($e-&gt;getMessage(), ENT_QUOTES, &#039;UTF-8&#039;);\n}\n\n\/\/ Output tombol HTML\n$str_input = &#039;&lt;div class=&quot;&#039; . $visibility . &#039; s-margin__bottom-1&quot;&gt;&#039;\n    . &#039;&lt;a class=&quot;s-btn btn btn-default notAJAX&quot; href=&quot;#&quot; onclick=&quot;alert(\\&#039;&#039; . addslashes($folder_status) . &#039;\\&#039;); return false;&quot; title=&quot;&#039; . __(&#039;Folder Attachments&#039;) . &#039;&quot;&gt;&#039;\n    . __(&#039;Add Today\\&#039;s Folder Attachment&#039;) . &#039;&lt;\/a&gt;&#039;\n    . &#039;&lt;\/div&gt;&#039;;\n\n$form-&gt;addAnything(__(&#039;Folder Attachment&#039;), $str_input);\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/AKHIR TAMBAHAN UNTUK MEMBUAT FOLDER REPOSITORI\/\/\/\/\/\/\/\/\/\/\/\n    \n    \n    \/\/ $str_input = &#039;&lt;div class=&quot;&#039;.$visibility.&#039;&quot;&gt;&lt;a class=&quot;notAJAX button&quot; href=&quot;javascript: openHTMLpop(\\&#039;&#039;.MWB.&#039;bibliography\/pop_attach.php?biblioID=&#039;.$rec_d[&#039;biblio_id&#039;].&#039;\\&#039;, 600, 300, \\&#039;&#039;.__(&#039;File Attachments&#039;).&#039;\\&#039;)&quot;&gt;&#039;.__(&#039;Add Attachment&#039;).&#039;&lt;\/a&gt;&lt;\/div&gt;&#039;;\n    $str_input = &#039;&lt;div class=&quot;&#039; . $visibility . &#039; s-margin__bottom-1&quot;&gt;&lt;a class=&quot;s-btn btn btn-default notAJAX openPopUp&quot; href=&quot;&#039; . MWB . &#039;bibliography\/pop_attach.php?biblioID=&#039; . ($rec_d[&#039;biblio_id&#039;] ?? &#039;&#039;) . &#039;&quot; width=&quot;780&quot; height=&quot;500&quot; title=&quot;&#039; . __(&#039;File Attachments&#039;) . &#039;&quot;&gt;&#039; . __(&#039;Add Attachment&#039;) . &#039;&lt;\/a&gt;&lt;\/div&gt;&#039;;\n    $str_input .= &#039;&lt;iframe name=&quot;attachIframe&quot; id=&quot;attachIframe&quot; class=&quot;form-control&quot; style=&quot;width: 100%; height: 100px;&quot; src=&quot;&#039; . MWB . &#039;bibliography\/iframe_attach.php?biblioID=&#039; . ($rec_d[&#039;biblio_id&#039;] ?? &#039;&#039;) . &#039;&amp;block=1&quot;&gt;&lt;\/iframe&gt;&#039;;\n    $form-&gt;addAnything(__(&#039;File Attachment&#039;), $str_input);\n    \n    \n\n    \/\/ biblio relation\n    $str_input = &#039;&lt;div class=&quot;&#039; . $visibility . &#039; s-margin__bottom-1&quot;&gt;&lt;a class=&quot;s-btn btn btn-default notAJAX openPopUp&quot; href=&quot;&#039; . MWB . &#039;bibliography\/pop_biblio_rel.php?biblioID=&#039; . ($rec_d[&#039;biblio_id&#039;] ?? &#039;&#039;) . &#039;&quot; title=&quot;&#039; . __(&#039;Biblio Relation&#039;) . &#039;&quot;&gt;&#039; . __(&#039;Add Relation&#039;) . &#039;&lt;\/a&gt;&lt;\/div&gt;&#039;;\n    $str_input .= &#039;&lt;iframe name=&quot;biblioIframe&quot; id=&quot;biblioIframe&quot; class=&quot;form-control&quot; style=&quot;width: 100%; height: 100px;&quot; src=&quot;&#039; . MWB . &#039;bibliography\/iframe_biblio_rel.php?biblioID=&#039; . ($rec_d[&#039;biblio_id&#039;] ?? &#039;&#039;) . &#039;&amp;block=1&quot;&gt;&lt;\/iframe&gt;&#039;;\n    $form-&gt;addAnything(__(&#039;Related Biblio Data&#039;), $str_input);\n\n    \/**\n     * Custom fields\n     *\/\n    if (isset($biblio_custom_fields)) {\n        if (is_array($biblio_custom_fields) &amp;&amp; $biblio_custom_fields) {\n            foreach ($biblio_custom_fields as $fid =&gt; $cfield) {\n\n                \/\/ custom field properties\n                $cf_dbfield = $cfield[&#039;dbfield&#039;];\n                $cf_label = $cfield[&#039;label&#039;];\n                $cf_default = $cfield[&#039;default&#039;];\n                $cf_class = $cfield[&#039;class&#039;] ?? &#039;&#039;;\n                $cf_note = $cfield[&#039;note&#039;] ?? &#039;&#039;;\n                $cf_data = (isset($cfield[&#039;data&#039;]) &amp;&amp; $cfield[&#039;data&#039;]) ? unserialize($cfield[&#039;data&#039;]) : array();\n\n                \/\/ get data field record\n                if (isset($rec_cust_d[$cf_dbfield]) &amp;&amp; @unserialize($rec_cust_d[$cf_dbfield]) !== false) {\n                    $rec_cust_d[$cf_dbfield] = unserialize($rec_cust_d[$cf_dbfield]);\n                }\n\n                \/\/ custom field processing\n                if (in_array($cfield[&#039;type&#039;], array(&#039;text&#039;, &#039;longtext&#039;, &#039;numeric&#039;))) {\n                    $cf_max = isset($cfield[&#039;max&#039;]) ? $cfield[&#039;max&#039;] : &#039;200&#039;;\n                    $cf_width = isset($cfield[&#039;width&#039;]) ? $cfield[&#039;width&#039;] : &#039;50&#039;;\n                    $form-&gt;addTextField(($cfield[&#039;type&#039;] == &#039;longtext&#039;) ? &#039;textarea&#039; : &#039;text&#039;, $cf_dbfield, $cf_label, $rec_cust_d[$cf_dbfield] ?? $cf_default, &#039; class=&quot;form-control &#039; . $cf_class . &#039;&quot; style=&quot;width: &#039; . $cf_width . &#039;%;&quot; maxlength=&quot;&#039; . $cf_max . &#039;&quot;&#039;, $cf_note);\n                } else if ($cfield[&#039;type&#039;] == &#039;dropdown&#039;) {\n                    $form-&gt;addSelectList($cf_dbfield, $cf_label, $cf_data, $rec_cust_d[$cf_dbfield] ?? $cf_default, &#039; class=&quot;form-control &#039; . $cf_class . &#039;&quot;&#039;);\n                } else if ($cfield[&#039;type&#039;] == &#039;checklist&#039;) {\n                    $form-&gt;addCheckBox($cf_dbfield, $cf_label, $cf_data, $rec_cust_d[$cf_dbfield] ?? $cf_default, &#039; class=&quot;form-control &#039; . $cf_class . &#039;&quot;&#039;);\n                } else if ($cfield[&#039;type&#039;] == &#039;choice&#039;) {\n                    $form-&gt;addRadio($cf_dbfield, $cf_label, $cf_data, $rec_cust_d[$cf_dbfield] ?? $cf_default, &#039; class=&quot;form-control &#039; . $cf_class . &#039;&quot;&#039;);\n                } else if ($cfield[&#039;type&#039;] == &#039;date&#039;) {\n                    $form-&gt;addDateField($cf_dbfield, $cf_label, $rec_cust_d[$cf_dbfield] ?? NULL, &#039; class=&quot;form-control &#039; . $cf_class . &#039;&quot;&#039;);\n                }\n                unset($cf_data);\n            }\n        }\n    }\n    \n    \/\/ get advance custom field based on plugin\n    $js = &#039;&#039;;\n    Plugins::getInstance()-&gt;execute(Plugins::BIBLIOGRAPHY_CUSTOM_FIELD_FORM, [&#039;form&#039; =&gt; $form, &#039;js&#039; =&gt; &amp;$js]);\n\n    \/\/ biblio hide from opac\n    $hide_options[] = array(&#039;0&#039;, __(&#039;Show&#039;));\n    $hide_options[] = array(&#039;1&#039;, __(&#039;Hide&#039;));\n    $form-&gt;addHidden(&#039;opacHideOrigin&#039;, $rec_d[&#039;opac_hide&#039;]??0);\n    $form-&gt;addRadio(&#039;opacHide&#039;, __(&#039;Hide in OPAC&#039;), $hide_options, isset($rec_d[&#039;opac_hide&#039;]) &amp;&amp; $rec_d[&#039;opac_hide&#039;] ? &#039;1&#039; : &#039;0&#039;);\n    \/\/ biblio promote to front page\n    $promote_options[] = array(&#039;0&#039;, __(&#039;Don\\&#039;t Promote&#039;));\n    $promote_options[] = array(&#039;1&#039;, __(&#039;Promote&#039;));\n    $form-&gt;addRadio(&#039;promote&#039;, __(&#039;Promote To Homepage&#039;), $promote_options, isset($rec_d[&#039;promoted&#039;]) &amp;&amp; $rec_d[&#039;promoted&#039;] ? &#039;1&#039; : &#039;0&#039;);\n    \/\/ biblio labels\n    $arr_labels = !empty($rec_d[&#039;labels&#039;]) ? unserialize($rec_d[&#039;labels&#039;]) : array();\n    if ($arr_labels) {\n        foreach ($arr_labels as $label) {\n            $arr_labels[$label[0]] = $label[1];\n        }\n    }\n    $str_input = &#039;&#039;;\n    \/\/ get label data from database\n    \/\/ Modified by Eddy Subratha\n    $label_q = $dbs-&gt;query(&quot;SELECT * FROM mst_label LIMIT 20&quot;);\n    while ($label_d = $label_q-&gt;fetch_assoc()) {\n        $checked = isset($arr_labels[$label_d[&#039;label_name&#039;]]) ? &#039; checked&#039; : &#039;&#039;;\n        $url = isset($arr_labels[$label_d[&#039;label_name&#039;]]) ? $arr_labels[$label_d[&#039;label_name&#039;]] : &#039;&#039;;\n        $str_input .= &#039;\n      &lt;div class=&quot;input-group s-labels__group noAutoFocus&quot;&gt;\n        &lt;div class=&quot;input-group-prepend&quot;&gt;\n          &lt;span class=&quot;input-group-text&quot; style=&quot;width:150px&quot;&gt;\n            &lt;input type=&quot;checkbox&quot; name=&quot;labels[]&quot; value=&quot;&#039; . $label_d[&#039;label_name&#039;] . &#039;&quot;&#039; . $checked . &#039; aria-label=&quot;Labels&quot;&gt;&nbsp;&#039; . $label_d[&#039;label_desc&#039;] . &#039;\n          &lt;\/span&gt;\n          &lt;span class=&quot;input-group-text s-labels__icon&quot;&gt;\n            &lt;img src=&quot;..\/lib\/minigalnano\/createthumb.php?filename=&#039; . IMG . &#039;\/labels\/&#039; . urlencode($label_d[&#039;label_image&#039;]) . &#039;&amp;width=24&quot; class=&quot;&#039; . $label_d[&#039;label_name&#039;] . &#039;&quot; id=&quot;&#039; . $label_d[&#039;label_name&#039;] . &#039;&quot; alt=&quot;&#039; . $label_d[&#039;label_name&#039;] . &#039;&quot;\/&gt;\n          &lt;\/span&gt;\n        &lt;\/div&gt;\n        &lt;input type=&quot;text&quot; value=&quot;&#039; . $url . &#039;&quot; placeholder=&quot;Enter a website link\/URL to make this label clickable&quot; title=&quot;Enter a website link\/URL to make this label clickable&quot; name=&quot;label_urls[&#039; . $label_d[&#039;label_name&#039;] . &#039;]&quot; id=&quot;label_urls[&#039; . $label_d[&#039;label_name&#039;] . &#039;]&quot; class=&quot;form-control&quot; aria-label=&quot;Url for current label&quot; style=&quot;border-left:none;&quot;&gt;\n        &lt;\/div&gt;&#039;;\n    }\n    $form-&gt;addAnything(&#039;Label&#039;, $str_input);\n    \/\/ $form-&gt;addCheckBox(&#039;labels&#039;, &#039;Label&#039;, $label_options, explode(&#039; &#039;, $rec_d[&#039;labels&#039;]));\n\n    \/\/ edit mode messagge\n    if ($form-&gt;edit_mode) {\n        echo &#039;&lt;div class=&quot;s-alert infoBox&quot;&gt;&#039;\n            . __(&#039;You are going to edit biblio data&#039;) . &#039; : &lt;b&gt;&#039; . $rec_d[&#039;title&#039;] . &#039;&lt;\/b&gt;  &lt;br \/&gt;&#039; . __(&#039;Last Updated&#039;) . &#039;&nbsp;&#039; . date(&#039;d F Y h:i:s&#039;, strtotime($rec_d[&#039;last_update&#039;])); \/\/mfc\n        if (isset($rec_d[&#039;image&#039;])) {\n            if (file_exists(IMGBS . &#039;docs\/&#039; . $rec_d[&#039;image&#039;])) {\n                $upper_dir = &#039;&#039;;\n                if ($in_pop_up) {\n                    $upper_dir = &#039;..\/..\/&#039;;\n                }\n                \/\/ Modified by Eddy Subratha\n                \/\/ We removed image near the upload form\n                \/\/ echo &#039;&lt;div id=&quot;biblioImage&quot; class=&quot;s-biblio__cover&quot;&gt;&lt;img src=&quot;&#039;.$upper_dir.&#039;..\/lib\/minigalnano\/createthumb.php?`filename`=..\/..\/images\/docs\/&#039;.urlencode($rec_d[&#039;image&#039;]).&#039;&amp;width=53&quot; \/&gt;&lt;\/div&gt;&#039;;\n            }\n        }\n        echo &#039;&lt;\/div&gt;&#039; . &quot;\\n&quot;;\n    }\n    \/\/ print out the form object\n    echo $form-&gt;printOut();\n    \/\/ javascript\n    ?&gt;\n    &lt;script type=&quot;text\/javascript&quot;&gt;\n        $(document).ready(function () {\n            \/\/ popup pattern\n            $(&#039;#class&#039;).change(function () {\n                $(&#039;#callNumber&#039;).val($(this).val().replace(&#039;NEW:&#039;, &#039;&#039;));\n            });\n\n            $(&#039;.removeImage&#039;).click(function (e) {\n                if (confirm(&#039;Are you sure you want to permanently remove this image?&#039;)) {\n                    return true;\n                } else {\n                    return false;\n                }\n            });\n\n            $(document).on(&#039;change&#039;, &#039;.custom-file-input&#039;, function () {\n                \/\/ $(&#039;#imageFilename img&#039;).attr(&#039;src&#039;,document.getElementById(&quot;image&quot;).files[0].name);\n                var input = document.querySelector(&quot;#image&quot;);\n                var fReader = new FileReader();\n                fReader.readAsDataURL(input.files[0]);\n                fReader.onloadend = function (event) {\n                    var img = document.querySelector(&quot;#imageFilename img&quot;);\n                    img.src = event.target.result;\n                }\n                let fileName = $(this).val().replace(\/\\\\\/g, &#039;\/&#039;).replace(\/.*\\\/\/, &#039;&#039;);\n                $(this).parent(&#039;.custom-file&#039;).find(&#039;.custom-file-label&#039;).text(fileName);\n            });\n\n            $(&#039;#getImage&#039;).click(function () {\n                $.post(&quot;&lt;?php echo MWB ?&gt;bibliography\/scrape_image.php&quot;, {imageURL: $(&#039;#getUrl&#039;).val()})\n                    .done(function (data) {\n                        if (data.status == &#039;VALID&#039;) {\n                            $(&#039;#base64picstring&#039;).val(data.image);\n                            $(&#039;#imageFilename img&#039;).attr(&#039;src&#039;, data.message);\n                        } else {\n                            $(&#039;#base64picstring, #getUrl&#039;).val(&#039;&#039;);\n                            parent.toastr.error(&quot;&lt;?php echo __(&#039;Current url is not valid or your internet is down.&#039;) ?&gt;&quot;, &quot;Bibliography Image&quot;, {\n                                &quot;closeButton&quot;: true,\n                                &quot;debug&quot;: false,\n                                &quot;newestOnTop&quot;: false,\n                                &quot;progressBar&quot;: false,\n                                &quot;positionClass&quot;: &quot;toast-top-right&quot;,\n                                &quot;preventDuplicates&quot;: false,\n                                &quot;onclick&quot;: null,\n                                &quot;showDuration&quot;: 300,\n                                &quot;hideDuration&quot;: 1000,\n                                &quot;timeOut&quot;: 5000,\n                                &quot;extendedTimeOut&quot;: 1000,\n                                &quot;showEasing&quot;: &quot;swing&quot;,\n                                &quot;hideEasing&quot;: &quot;linear&quot;,\n                                &quot;showMethod&quot;: &quot;fadeIn&quot;,\n                                &quot;hideMethod&quot;: &quot;fadeOut&quot;\n                            })\n                        }\n                    });\n            });\n\n            &lt;?php\n            if (isset($js) &amp;&amp; !empty($js))\n            {\n                echo $js;\n            }\n            ?&gt;\n        });\n    &lt;\/script&gt;\n    &lt;?php\n} else {\n    # ADV LOG SYSTEM - STIIL EXPERIMENTAL\n    $log = new AlLibrarian(&#039;1151&#039;, array(&quot;username&quot; =&gt; $_SESSION[&#039;uname&#039;], &quot;uid&quot; =&gt; $_SESSION[&#039;uid&#039;], &quot;realname&quot; =&gt; $_SESSION[&#039;realname&#039;]));\n\n    require SIMBIO . &#039;simbio_UTILS\/simbio_tokenizecql.inc.php&#039;;\n    require MDLBS . &#039;bibliography\/biblio_utils.inc.php&#039;;\n    require LIB . &#039;biblio_list_model.inc.php&#039;;\n\n    \/\/ number of records to show in list\n    $biblio_result_num = ($sysconf[&#039;biblio_result_num&#039;] &gt; 100) ? 100 : $sysconf[&#039;biblio_result_num&#039;];\n\n    \/\/ create datagrid\n    $datagrid = new simbio_datagrid();\n\n    \/\/ index choice\n    if ($sysconf[&#039;index&#039;][&#039;type&#039;] == &#039;index&#039; || $sysconf[&#039;index&#039;][&#039;type&#039;] == &#039;sphinx&#039;) {\n        if ($sysconf[&#039;index&#039;][&#039;type&#039;] == &#039;sphinx&#039;) {\n            require LIB . &#039;sphinx\/sphinxapi.php&#039;;\n            require LIB . &#039;biblio_list_sphinx.inc.php&#039;;\n        } else {\n            require LIB . &#039;biblio_list_index.inc.php&#039;;\n        }\n\n        \/\/ table spec\n        $table_spec = &#039;search_biblio AS `index` LEFT JOIN item ON `index`.biblio_id=item.biblio_id&#039;;\n        $str_criteria = &#039;index.biblio_id IS NOT NULL&#039;;\n        if ($can_read AND $can_write) {\n            $datagrid-&gt;setSQLColumn(&#039;index.biblio_id&#039;, &#039;index.title AS \\&#039;&#039; . __(&#039;Title&#039;) . &#039;\\&#039;&#039;, &#039;index.labels&#039;, &#039;index.image&#039;,\n                &#039;index.author&#039;,\n                &#039;index.isbn_issn AS \\&#039;&#039; . __(&#039;ISBN\/ISSN&#039;) . &#039;\\&#039;&#039;,\n                &#039;IF(COUNT(item.item_id)&gt;0, COUNT(item.item_id), \\&#039;&lt;strong style=&quot;color: #f00;&quot;&gt;&#039; . __(&#039;None&#039;) . &#039;&lt;\/strong&gt;\\&#039;) AS \\&#039;&#039; . __(&#039;Copies&#039;) . &#039;\\&#039;&#039;,\n                &#039;index.last_update AS \\&#039;&#039; . __(&#039;Last Update&#039;) . &#039;\\&#039;&#039;);\n            $datagrid-&gt;modifyColumnContent(1, &#039;callback{showTitleAuthors}&#039;);\n        } else {\n            $datagrid-&gt;setSQLColumn(&#039;index.title AS \\&#039;&#039; . __(&#039;Title&#039;) . &#039;\\&#039;&#039;, &#039;index.author&#039;, &#039;index.labels&#039;, &#039;index.image&#039;,\n                &#039;index.isbn_issn AS \\&#039;&#039; . __(&#039;ISBN\/ISSN&#039;) . &#039;\\&#039;&#039;,\n                &#039;IF(COUNT(item.item_id)&gt;0, COUNT(item.item_id), \\&#039;&lt;strong style=&quot;color: #f00;&quot;&gt;&#039; . __(&#039;None&#039;) . &#039;&lt;\/strong&gt;\\&#039;) AS \\&#039;&#039; . __(&#039;Copies&#039;) . &#039;\\&#039;&#039;,\n                &#039;index.last_update AS \\&#039;&#039; . __(&#039;Last Update&#039;) . &#039;\\&#039;&#039;);\n            $datagrid-&gt;modifyColumnContent(1, &#039;callback{showTitleAuthors}&#039;);\n        }\n        $datagrid-&gt;invisible_fields = array(1, 2, 3);\n        $datagrid-&gt;setSQLorder(&#039;index.last_update DESC&#039;);\n\n        \/\/ set group by\n        $datagrid-&gt;sql_group_by = &#039;index.biblio_id&#039;;\n\n    } else {\n        require LIB . &#039;biblio_list.inc.php&#039;;\n\n        \/\/ table spec\n        $table_spec = &#039;biblio LEFT JOIN item ON biblio.biblio_id=item.biblio_id&#039;;\n        $str_criteria = &#039;biblio.biblio_id IS NOT NULL&#039;;\n        if ($can_read AND $can_write) {\n            $datagrid-&gt;setSQLColumn(&#039;biblio.biblio_id&#039;, &#039;biblio.biblio_id AS bid&#039;,\n                &#039;biblio.title AS \\&#039;&#039; . __(&#039;Title&#039;) . &#039;\\&#039;&#039;,\n                &#039;biblio.isbn_issn AS \\&#039;&#039; . __(&#039;ISBN\/ISSN&#039;) . &#039;\\&#039;&#039;,\n                &#039;IF(COUNT(item.item_id)&gt;0, COUNT(item.item_id), \\&#039;&lt;strong style=&quot;color: #f00;&quot;&gt;&#039; . __(&#039;None&#039;) . &#039;&lt;\/strong&gt;\\&#039;) AS \\&#039;&#039; . __(&#039;Copies&#039;) . &#039;\\&#039;&#039;,\n                &#039;biblio.last_update AS \\&#039;&#039; . __(&#039;Last Update&#039;) . &#039;\\&#039;&#039;);\n            $datagrid-&gt;modifyColumnContent(2, &#039;callback{showTitleAuthors}&#039;);\n        } else {\n            $datagrid-&gt;setSQLColumn(&#039;biblio.biblio_id AS bid&#039;, &#039;biblio.title AS \\&#039;&#039; . __(&#039;Title&#039;) . &#039;\\&#039;&#039;,\n                &#039;biblio.isbn_issn AS \\&#039;&#039; . __(&#039;ISBN\/ISSN&#039;) . &#039;\\&#039;&#039;,\n                &#039;IF(COUNT(item.item_id)&gt;0, COUNT(item.item_id), \\&#039;&lt;strong style=&quot;color: #f00;&quot;&gt;&#039; . __(&#039;None&#039;) . &#039;&lt;\/strong&gt;\\&#039;) AS \\&#039;&#039; . __(&#039;Copies&#039;) . &#039;\\&#039;&#039;,\n                &#039;biblio.last_update AS \\&#039;&#039; . __(&#039;Last Update&#039;) . &#039;\\&#039;&#039;);\n            \/\/ modify column value\n            $datagrid-&gt;modifyColumnContent(1, &#039;callback{showTitleAuthors}&#039;);\n        }\n        $datagrid-&gt;invisible_fields = array(0);\n        $datagrid-&gt;setSQLorder(&#039;biblio.last_update DESC&#039;);\n\n        \/\/ set group by\n        $datagrid-&gt;sql_group_by = &#039;biblio.biblio_id&#039;;\n    }\n\n    $stopwords = &quot;@\\sAnd\\s|\\sOr\\s|\\sNot\\s|\\sThe\\s|\\sDan\\s|\\sAtau\\s|\\sAn\\s|\\sA\\s@i&quot;;\n\n    \/\/ is there any search\n    if (isset($_GET[&#039;keywords&#039;]) AND $_GET[&#039;keywords&#039;]) {\n        $keywords = $dbs-&gt;escape_string(trim($_GET[&#039;keywords&#039;]));\n        $keywords = preg_replace($stopwords, &#039; &#039;, $keywords);\n        $searchable_fields = array(&#039;title&#039;, &#039;author&#039;, &#039;subject&#039;, &#039;isbn&#039;, &#039;publisher&#039;);\n        if ($_GET[&#039;field&#039;] != &#039;0&#039; AND in_array($_GET[&#039;field&#039;], $searchable_fields)) {\n            $field = $_GET[&#039;field&#039;];\n            $search_str = $field . &#039;=&#039; . $keywords;\n        } else {\n            $search_str = &#039;&#039;;\n            foreach ($searchable_fields as $search_field) {\n                $search_str .= $search_field . &#039;=&#039; . $keywords . &#039; OR &#039;;\n            }\n            $search_str = substr_replace($search_str, &#039;&#039;, -4);\n        }\n        $biblio_list = new biblio_list($dbs, $biblio_result_num);\n        $criteria = $biblio_list-&gt;setSQLcriteria($search_str);\n        $str_criteria .= &#039; AND (&#039; . $criteria[&#039;sql_criteria&#039;] . &#039;)&#039;;\n    }\n\n    if (isset($_GET[&#039;opac_hide&#039;]) &amp;&amp; $_GET[&#039;opac_hide&#039;] != &#039;&#039;) {\n        $opac_hide = $dbs-&gt;escape_string($_GET[&#039;opac_hide&#039;]);\n        $str_criteria .= &#039; AND opac_hide =&#039; . $opac_hide;\n    }\n\n    if (isset($_GET[&#039;promoted&#039;]) &amp;&amp; $_GET[&#039;promoted&#039;] != &#039;&#039;) {\n        $promoted = $dbs-&gt;escape_string($_GET[&#039;promoted&#039;]);\n        $str_criteria .= &#039; AND promoted =&#039; . $promoted;\n    }\n    \/\/debug\n    \/\/echo $str_criteria;\n\n    $datagrid-&gt;setSQLcriteria($str_criteria);\n\n    \/\/ set table and table header attributes\n    $datagrid-&gt;table_attr = &#039;id=&quot;dataList&quot; class=&quot;s-table table&quot;&#039;;\n    $datagrid-&gt;table_header_attr = &#039;class=&quot;dataListHeader&quot; style=&quot;font-weight: bold;&quot;&#039;;\n    \/\/ set delete proccess URL\n    $datagrid-&gt;chbox_form_URL = $_SERVER[&#039;PHP_SELF&#039;];\n    $datagrid-&gt;debug = true;\n\n    \/\/ put the result into variables\n    $datagrid_result = $datagrid-&gt;createDataGrid($dbs, $table_spec, $biblio_result_num, ($can_read AND $can_write));\n    if (isset($_GET[&#039;keywords&#039;]) AND $_GET[&#039;keywords&#039;]) {\n        $msg = str_replace(&#039;{result-&gt;num_rows}&#039;, $datagrid-&gt;num_rows, __(&#039;Found &lt;strong&gt;{result-&gt;num_rows}&lt;\/strong&gt; from your keywords&#039;)); \/\/mfc\n        echo &#039;&lt;div class=&quot;infoBox&quot;&gt;&#039; . $msg . &#039; : &quot;&#039; . htmlentities($_GET[&#039;keywords&#039;]) . &#039;&quot;&lt;div&gt;&#039; . __(&#039;Query took&#039;) . &#039; &lt;b&gt;&#039; . $datagrid-&gt;query_time . &#039;&lt;\/b&gt; &#039; . __(&#039;second(s) to complete&#039;) . &#039;&lt;\/div&gt;&lt;\/div&gt;&#039;; \/\/mfc\n    }\n\n    echo $datagrid_result;\n}\n\/* main content end *\/\n<\/code><\/pre>\n<p>Atau dapat didownload <strong><a href=\"https:\/\/drive.google.com\/file\/d\/1iUbGr4mCpIDP8yNpHdVTA22zUSs7VoLY\/view?usp=sharing\" target=\"_blank\" rel=\"noopener\">disini<\/a><\/strong>!<\/p>\n<p>&nbsp;<\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"118\" data-permalink=\"https:\/\/omahgoenoeng.my.id\/personal\/attachment-repositori-di-slims-anda-terasa-berat-atau-lama\/repo-2\/\" data-orig-file=\"https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-2.jpg?fit=1280%2C720&amp;ssl=1\" data-orig-size=\"1280,720\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"repo 2\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-2.jpg?fit=300%2C169&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-2.jpg?fit=640%2C360&amp;ssl=1\" class=\"size-large wp-image-118 aligncenter\" src=\"https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-2.jpg?resize=640%2C360&#038;ssl=1\" alt=\"\" width=\"640\" height=\"360\" srcset=\"https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-2.jpg?resize=1024%2C576&amp;ssl=1 1024w, https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-2.jpg?resize=300%2C169&amp;ssl=1 300w, https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-2.jpg?resize=768%2C432&amp;ssl=1 768w, https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-2.jpg?w=1280&amp;ssl=1 1280w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<p>Nanti hasilnya akan menjadi seperti berikut ini :<\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"116\" data-permalink=\"https:\/\/omahgoenoeng.my.id\/personal\/attachment-repositori-di-slims-anda-terasa-berat-atau-lama\/repo-3\/\" data-orig-file=\"https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-3.jpg?fit=1280%2C720&amp;ssl=1\" data-orig-size=\"1280,720\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"repo 3\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-3.jpg?fit=300%2C169&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-3.jpg?fit=640%2C360&amp;ssl=1\" class=\"size-large wp-image-116 aligncenter\" src=\"https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-3.jpg?resize=640%2C360&#038;ssl=1\" alt=\"\" width=\"640\" height=\"360\" srcset=\"https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-3.jpg?resize=1024%2C576&amp;ssl=1 1024w, https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-3.jpg?resize=300%2C169&amp;ssl=1 300w, https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-3.jpg?resize=768%2C432&amp;ssl=1 768w, https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-3.jpg?w=1280&amp;ssl=1 1280w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"117\" data-permalink=\"https:\/\/omahgoenoeng.my.id\/personal\/attachment-repositori-di-slims-anda-terasa-berat-atau-lama\/repo-4\/\" data-orig-file=\"https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-4.jpg?fit=1280%2C720&amp;ssl=1\" data-orig-size=\"1280,720\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"repo 4\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-4.jpg?fit=300%2C169&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-4.jpg?fit=640%2C360&amp;ssl=1\" class=\"size-large wp-image-117 aligncenter\" src=\"https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-4.jpg?resize=640%2C360&#038;ssl=1\" alt=\"\" width=\"640\" height=\"360\" srcset=\"https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-4.jpg?resize=1024%2C576&amp;ssl=1 1024w, https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-4.jpg?resize=300%2C169&amp;ssl=1 300w, https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-4.jpg?resize=768%2C432&amp;ssl=1 768w, https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-4.jpg?w=1280&amp;ssl=1 1280w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<p>Perlu diketahui, script ini hanya berlaku untuk SLiMS Bulian 9.6.1, untuk SLiMS versi sebelumnya belum ada.<br \/>\nNamun tenang saja, menurut Mas Hendro nantinya di SLiMS versi terbaru (eleven) sudah ada.<\/p>\n<p>Mari kita tunggu SLiMS eleven.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bagi teman-teman pustakawan yang mengelola repository menggunakan aplikasi SLiMS dan file yang diunggah sudah mencapai ribuan. Apakah merasakan saat mengunggah file lampiran (attachment) di SLiMS tersebut semakin lama semakin berat? Berikut ada tips dari core developer SLiMS (mas Hendro Wicaksono) dan mas Jushadi Arman Saleh yang di share melalui WhatsApp Group (WAG) SLiMS agar jika [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":116,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[52],"tags":[56,54,55,30,35,53],"class_list":["post-114","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-trick-dan-plugin","tag-coding","tag-plugin","tag-repositori","tag-slims","tag-tips","tag-trick"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Unggah Lampiran \/ Attachment Repositori di SLiMS Anda Terasa Berat atau Lama? Berikut ini Caranya ! - Omah Goenoeng<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/omahgoenoeng.my.id\/personal\/attachment-repositori-di-slims-anda-terasa-berat-atau-lama\/\" \/>\n<meta property=\"og:locale\" content=\"id_ID\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Unggah Lampiran \/ Attachment Repositori di SLiMS Anda Terasa Berat atau Lama? Berikut ini Caranya ! - Omah Goenoeng\" \/>\n<meta property=\"og:description\" content=\"Bagi teman-teman pustakawan yang mengelola repository menggunakan aplikasi SLiMS dan file yang diunggah sudah mencapai ribuan. Apakah merasakan saat mengunggah file lampiran (attachment) di SLiMS tersebut semakin lama semakin berat? Berikut ada tips dari core developer SLiMS (mas Hendro Wicaksono) dan mas Jushadi Arman Saleh yang di share melalui WhatsApp Group (WAG) SLiMS agar jika [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/omahgoenoeng.my.id\/personal\/attachment-repositori-di-slims-anda-terasa-berat-atau-lama\/\" \/>\n<meta property=\"og:site_name\" content=\"Omah Goenoeng\" \/>\n<meta property=\"article:published_time\" content=\"2024-12-18T01:47:04+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-12-19T01:46:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-3.jpg?fit=1280%2C720&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"720\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Ditulis oleh\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimasi waktu membaca\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 menit\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/omahgoenoeng.my.id\/personal\/attachment-repositori-di-slims-anda-terasa-berat-atau-lama\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/omahgoenoeng.my.id\/personal\/attachment-repositori-di-slims-anda-terasa-berat-atau-lama\/\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\/\/omahgoenoeng.my.id\/personal\/#\/schema\/person\/0cee6ec89a4bef240727dbeb35d80057\"},\"headline\":\"Unggah Lampiran \/ Attachment Repositori di SLiMS Anda Terasa Berat atau Lama? Berikut ini Caranya !\",\"datePublished\":\"2024-12-18T01:47:04+00:00\",\"dateModified\":\"2024-12-19T01:46:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/omahgoenoeng.my.id\/personal\/attachment-repositori-di-slims-anda-terasa-berat-atau-lama\/\"},\"wordCount\":367,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/omahgoenoeng.my.id\/personal\/#\/schema\/person\/0cee6ec89a4bef240727dbeb35d80057\"},\"image\":{\"@id\":\"https:\/\/omahgoenoeng.my.id\/personal\/attachment-repositori-di-slims-anda-terasa-berat-atau-lama\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-3.jpg?fit=1280%2C720&ssl=1\",\"keywords\":[\"Coding\",\"Plugin\",\"Repositori\",\"SLiMS\",\"Tips\",\"Trick\"],\"articleSection\":[\"Tips, Trick dan Plugin\"],\"inLanguage\":\"id\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/omahgoenoeng.my.id\/personal\/attachment-repositori-di-slims-anda-terasa-berat-atau-lama\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/omahgoenoeng.my.id\/personal\/attachment-repositori-di-slims-anda-terasa-berat-atau-lama\/\",\"url\":\"https:\/\/omahgoenoeng.my.id\/personal\/attachment-repositori-di-slims-anda-terasa-berat-atau-lama\/\",\"name\":\"Unggah Lampiran \/ Attachment Repositori di SLiMS Anda Terasa Berat atau Lama? Berikut ini Caranya ! - Omah Goenoeng\",\"isPartOf\":{\"@id\":\"https:\/\/omahgoenoeng.my.id\/personal\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/omahgoenoeng.my.id\/personal\/attachment-repositori-di-slims-anda-terasa-berat-atau-lama\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/omahgoenoeng.my.id\/personal\/attachment-repositori-di-slims-anda-terasa-berat-atau-lama\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-3.jpg?fit=1280%2C720&ssl=1\",\"datePublished\":\"2024-12-18T01:47:04+00:00\",\"dateModified\":\"2024-12-19T01:46:16+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/omahgoenoeng.my.id\/personal\/attachment-repositori-di-slims-anda-terasa-berat-atau-lama\/#breadcrumb\"},\"inLanguage\":\"id\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/omahgoenoeng.my.id\/personal\/attachment-repositori-di-slims-anda-terasa-berat-atau-lama\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"id\",\"@id\":\"https:\/\/omahgoenoeng.my.id\/personal\/attachment-repositori-di-slims-anda-terasa-berat-atau-lama\/#primaryimage\",\"url\":\"https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-3.jpg?fit=1280%2C720&ssl=1\",\"contentUrl\":\"https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-3.jpg?fit=1280%2C720&ssl=1\",\"width\":1280,\"height\":720},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/omahgoenoeng.my.id\/personal\/attachment-repositori-di-slims-anda-terasa-berat-atau-lama\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Beranda\",\"item\":\"https:\/\/omahgoenoeng.my.id\/personal\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Unggah Lampiran \/ Attachment Repositori di SLiMS Anda Terasa Berat atau Lama? Berikut ini Caranya !\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/omahgoenoeng.my.id\/personal\/#website\",\"url\":\"https:\/\/omahgoenoeng.my.id\/personal\/\",\"name\":\"Omah Goenoeng\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/omahgoenoeng.my.id\/personal\/#\/schema\/person\/0cee6ec89a4bef240727dbeb35d80057\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/omahgoenoeng.my.id\/personal\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"id\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/omahgoenoeng.my.id\/personal\/#\/schema\/person\/0cee6ec89a4bef240727dbeb35d80057\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"id\",\"@id\":\"https:\/\/omahgoenoeng.my.id\/personal\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/logooo-2.png?fit=2382%2C1064&ssl=1\",\"contentUrl\":\"https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/logooo-2.png?fit=2382%2C1064&ssl=1\",\"width\":2382,\"height\":1064,\"caption\":\"admin\"},\"logo\":{\"@id\":\"https:\/\/omahgoenoeng.my.id\/personal\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:\/\/omahgoenoeng.my.id\/personal\"],\"url\":\"https:\/\/omahgoenoeng.my.id\/personal\/author\/admin_goenoeng\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Unggah Lampiran \/ Attachment Repositori di SLiMS Anda Terasa Berat atau Lama? Berikut ini Caranya ! - Omah Goenoeng","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/omahgoenoeng.my.id\/personal\/attachment-repositori-di-slims-anda-terasa-berat-atau-lama\/","og_locale":"id_ID","og_type":"article","og_title":"Unggah Lampiran \/ Attachment Repositori di SLiMS Anda Terasa Berat atau Lama? Berikut ini Caranya ! - Omah Goenoeng","og_description":"Bagi teman-teman pustakawan yang mengelola repository menggunakan aplikasi SLiMS dan file yang diunggah sudah mencapai ribuan. Apakah merasakan saat mengunggah file lampiran (attachment) di SLiMS tersebut semakin lama semakin berat? Berikut ada tips dari core developer SLiMS (mas Hendro Wicaksono) dan mas Jushadi Arman Saleh yang di share melalui WhatsApp Group (WAG) SLiMS agar jika [&hellip;]","og_url":"https:\/\/omahgoenoeng.my.id\/personal\/attachment-repositori-di-slims-anda-terasa-berat-atau-lama\/","og_site_name":"Omah Goenoeng","article_published_time":"2024-12-18T01:47:04+00:00","article_modified_time":"2024-12-19T01:46:16+00:00","og_image":[{"width":1280,"height":720,"url":"https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-3.jpg?fit=1280%2C720&ssl=1","type":"image\/jpeg"}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"Ditulis oleh":"admin","Estimasi waktu membaca":"2 menit"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/omahgoenoeng.my.id\/personal\/attachment-repositori-di-slims-anda-terasa-berat-atau-lama\/#article","isPartOf":{"@id":"https:\/\/omahgoenoeng.my.id\/personal\/attachment-repositori-di-slims-anda-terasa-berat-atau-lama\/"},"author":{"name":"admin","@id":"https:\/\/omahgoenoeng.my.id\/personal\/#\/schema\/person\/0cee6ec89a4bef240727dbeb35d80057"},"headline":"Unggah Lampiran \/ Attachment Repositori di SLiMS Anda Terasa Berat atau Lama? Berikut ini Caranya !","datePublished":"2024-12-18T01:47:04+00:00","dateModified":"2024-12-19T01:46:16+00:00","mainEntityOfPage":{"@id":"https:\/\/omahgoenoeng.my.id\/personal\/attachment-repositori-di-slims-anda-terasa-berat-atau-lama\/"},"wordCount":367,"commentCount":0,"publisher":{"@id":"https:\/\/omahgoenoeng.my.id\/personal\/#\/schema\/person\/0cee6ec89a4bef240727dbeb35d80057"},"image":{"@id":"https:\/\/omahgoenoeng.my.id\/personal\/attachment-repositori-di-slims-anda-terasa-berat-atau-lama\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-3.jpg?fit=1280%2C720&ssl=1","keywords":["Coding","Plugin","Repositori","SLiMS","Tips","Trick"],"articleSection":["Tips, Trick dan Plugin"],"inLanguage":"id","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/omahgoenoeng.my.id\/personal\/attachment-repositori-di-slims-anda-terasa-berat-atau-lama\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/omahgoenoeng.my.id\/personal\/attachment-repositori-di-slims-anda-terasa-berat-atau-lama\/","url":"https:\/\/omahgoenoeng.my.id\/personal\/attachment-repositori-di-slims-anda-terasa-berat-atau-lama\/","name":"Unggah Lampiran \/ Attachment Repositori di SLiMS Anda Terasa Berat atau Lama? Berikut ini Caranya ! - Omah Goenoeng","isPartOf":{"@id":"https:\/\/omahgoenoeng.my.id\/personal\/#website"},"primaryImageOfPage":{"@id":"https:\/\/omahgoenoeng.my.id\/personal\/attachment-repositori-di-slims-anda-terasa-berat-atau-lama\/#primaryimage"},"image":{"@id":"https:\/\/omahgoenoeng.my.id\/personal\/attachment-repositori-di-slims-anda-terasa-berat-atau-lama\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-3.jpg?fit=1280%2C720&ssl=1","datePublished":"2024-12-18T01:47:04+00:00","dateModified":"2024-12-19T01:46:16+00:00","breadcrumb":{"@id":"https:\/\/omahgoenoeng.my.id\/personal\/attachment-repositori-di-slims-anda-terasa-berat-atau-lama\/#breadcrumb"},"inLanguage":"id","potentialAction":[{"@type":"ReadAction","target":["https:\/\/omahgoenoeng.my.id\/personal\/attachment-repositori-di-slims-anda-terasa-berat-atau-lama\/"]}]},{"@type":"ImageObject","inLanguage":"id","@id":"https:\/\/omahgoenoeng.my.id\/personal\/attachment-repositori-di-slims-anda-terasa-berat-atau-lama\/#primaryimage","url":"https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-3.jpg?fit=1280%2C720&ssl=1","contentUrl":"https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-3.jpg?fit=1280%2C720&ssl=1","width":1280,"height":720},{"@type":"BreadcrumbList","@id":"https:\/\/omahgoenoeng.my.id\/personal\/attachment-repositori-di-slims-anda-terasa-berat-atau-lama\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Beranda","item":"https:\/\/omahgoenoeng.my.id\/personal\/"},{"@type":"ListItem","position":2,"name":"Unggah Lampiran \/ Attachment Repositori di SLiMS Anda Terasa Berat atau Lama? Berikut ini Caranya !"}]},{"@type":"WebSite","@id":"https:\/\/omahgoenoeng.my.id\/personal\/#website","url":"https:\/\/omahgoenoeng.my.id\/personal\/","name":"Omah Goenoeng","description":"","publisher":{"@id":"https:\/\/omahgoenoeng.my.id\/personal\/#\/schema\/person\/0cee6ec89a4bef240727dbeb35d80057"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/omahgoenoeng.my.id\/personal\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"id"},{"@type":["Person","Organization"],"@id":"https:\/\/omahgoenoeng.my.id\/personal\/#\/schema\/person\/0cee6ec89a4bef240727dbeb35d80057","name":"admin","image":{"@type":"ImageObject","inLanguage":"id","@id":"https:\/\/omahgoenoeng.my.id\/personal\/#\/schema\/person\/image\/","url":"https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/logooo-2.png?fit=2382%2C1064&ssl=1","contentUrl":"https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/logooo-2.png?fit=2382%2C1064&ssl=1","width":2382,"height":1064,"caption":"admin"},"logo":{"@id":"https:\/\/omahgoenoeng.my.id\/personal\/#\/schema\/person\/image\/"},"sameAs":["https:\/\/omahgoenoeng.my.id\/personal"],"url":"https:\/\/omahgoenoeng.my.id\/personal\/author\/admin_goenoeng\/"}]}},"jetpack_featured_media_url":"https:\/\/i0.wp.com\/omahgoenoeng.my.id\/personal\/wp-content\/uploads\/2024\/12\/repo-3.jpg?fit=1280%2C720&ssl=1","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/omahgoenoeng.my.id\/personal\/wp-json\/wp\/v2\/posts\/114","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/omahgoenoeng.my.id\/personal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/omahgoenoeng.my.id\/personal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/omahgoenoeng.my.id\/personal\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/omahgoenoeng.my.id\/personal\/wp-json\/wp\/v2\/comments?post=114"}],"version-history":[{"count":11,"href":"https:\/\/omahgoenoeng.my.id\/personal\/wp-json\/wp\/v2\/posts\/114\/revisions"}],"predecessor-version":[{"id":145,"href":"https:\/\/omahgoenoeng.my.id\/personal\/wp-json\/wp\/v2\/posts\/114\/revisions\/145"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/omahgoenoeng.my.id\/personal\/wp-json\/wp\/v2\/media\/116"}],"wp:attachment":[{"href":"https:\/\/omahgoenoeng.my.id\/personal\/wp-json\/wp\/v2\/media?parent=114"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/omahgoenoeng.my.id\/personal\/wp-json\/wp\/v2\/categories?post=114"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/omahgoenoeng.my.id\/personal\/wp-json\/wp\/v2\/tags?post=114"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}