'.__('You are not authorized to view this section').''); } if ($sysconf['index']['type'] == 'index') { require MDLBS.'system/biblio_indexer.inc.php'; // create biblio_indexer class instance $indexer = new biblio_indexer($dbs); } // max chars in line for file operations $max_chars = 1024*100; if (isset($_POST['doImport'])) { // check for form validity if (!$_FILES['importFile']['name']) { utility::jsAlert(__('Please select the file to import!')); exit(); } else if (empty($_POST['fieldSep']) OR empty($_POST['fieldEnc'])) { utility::jsAlert(__('Required fields (*) must be filled correctly!')); exit(); } else { $start_time = time(); // set PHP time limit set_time_limit(0); // set ob implicit flush ob_implicit_flush(); // create upload object $upload = new simbio_file_upload(); // get system temporary directory location $temp_dir = sys_get_temp_dir(); $uploaded_file = $temp_dir.DIRECTORY_SEPARATOR.$_FILES['importFile']['name']; unlink($uploaded_file); // set max size $max_size = $sysconf['max_upload']*1024; $upload->setAllowableFormat(array('.csv')); $upload->setMaxSize($max_size); $upload->setUploadDir($temp_dir); $upload_status = $upload->doUpload('importFile'); if ($upload_status != UPLOAD_SUCCESS) { utility::jsAlert(__('Upload failed! File type not allowed or the size is more than').($sysconf['max_upload']/1024).' MB'); //mfc exit(); } // uploaded file path $uploaded_file = $temp_dir.DIRECTORY_SEPARATOR.$_FILES['importFile']['name']; $row_count = 0; // check for import setting $record_num = intval($_POST['recordNum']); $field_enc = trim($_POST['fieldEnc']); $field_sep = trim($_POST['fieldSep']); $record_offset = intval($_POST['recordOffset']); $record_offset = $record_offset-1; // get current datetime $curr_datetime = date('Y-m-d H:i:s'); $curr_datetime = '\''.$curr_datetime.'\''; // foreign key id cache $gmd_id_cache = array(); $publ_id_cache = array(); $lang_id_cache = array(); $place_id_cache = array(); $author_id_cache = array(); $subject_id_cache = array(); // read file line by line $inserted_row = 0; $file = fopen($uploaded_file, 'r'); while (!feof($file)) { // record count if ($record_num > 0 AND $row_count == $record_num) { break; } // go to offset if ($row_count < $record_offset) { // pass and continue to next loop $field = fgetcsv($file, 1024, $field_sep, $field_enc); $row_count++; continue; } else { // get an array of field $field = fgetcsv($file, $max_chars, $field_sep, $field_enc); if ($field) { // strip escape chars from all fields foreach ($field as $idx => $value) { $field[$idx] = str_replace('\\', '', trim($value)); $field[$idx] = $dbs->escape_string($field[$idx]); } // strip leading field encloser if any $title = preg_replace('@^\\\s*'.$field_enc.'@i', '', $field[0]); $title = '\''.$title.'\''; $gmd_id = utility::getID($dbs, 'mst_gmd', 'gmd_id', 'gmd_name', $field[1], $gmd_id_cache); $edition = $field[2]?'\''.$field[2].'\'':'NULL'; $isbn_issn = $field[3]?'\''.$field[3].'\'':'NULL'; $publisher_id = utility::getID($dbs, 'mst_publisher', 'publisher_id', 'publisher_name', $field[4], $publ_id_cache); $publish_year = $field[5]?'\''.$field[5].'\'':'NULL'; $collation = $field[6]?'\''.$field[6].'\'':'NULL'; $series_title = $field[7]?'\''.$field[7].'\'':'NULL'; $call_number = $field[8]?'\''.$field[8].'\'':'NULL'; $language_id = utility::getID($dbs, 'mst_language', 'language_id', 'language_name', $field[9], $lang_id_cache); $language_id = '\''.$language_id.'\''; $publish_place_id = utility::getID($dbs, 'mst_place', 'place_id', 'place_name', $field[10], $place_id_cache); $classification = $field[11]?'\''.$field[11].'\'':'NULL';; $notes = $field[12]?'\''.$field[12].'\'':'NULL';; $image = $field[13]?'\''.$field[13].'\'':'NULL'; $sor = $field[14]?'\''.$field[14].'\'':'NULL'; // $authors = preg_replace('@\\\s*'.$field_enc.'$@i', '', $field[15]); $authors = trim($field[15]); $subjects = trim($field[16]); $items = trim($field[17]); // sql insert string $sql_str = "INSERT IGNORE INTO biblio (title, gmd_id, edition, isbn_issn, publisher_id, publish_year, collation, series_title, call_number, language_id, publish_place_id, classification, notes, image, sor, input_date, last_update) VALUES ($title, $gmd_id, $edition, $isbn_issn, $publisher_id, $publish_year, $collation, $series_title, $call_number, $language_id, $publish_place_id, $classification, $notes, $image, $sor, $curr_datetime, $curr_datetime)"; // send query $dbs->query($sql_str); $biblio_id = $dbs->insert_id; if (!$dbs->error) { $inserted_row++; // set authors if (!empty($authors)) { $biblio_author_sql = 'INSERT IGNORE INTO biblio_author (biblio_id, author_id, level) VALUES '; $authors = explode('><', $authors); foreach ($authors as $author) { $author = trim(str_replace(array('>', '<'), '', $author)); $author_id = utility::getID($dbs, 'mst_author', 'author_id', 'author_name', $author, $author_id_cache); $biblio_author_sql .= " ($biblio_id, $author_id, 2),"; } // remove last comma $biblio_author_sql = substr_replace($biblio_author_sql, '', -1); // execute query $dbs->query($biblio_author_sql); // echo $dbs->error; } // set topic if (!empty($subjects)) { $biblio_subject_sql = 'INSERT IGNORE INTO biblio_topic (biblio_id, topic_id, level) VALUES '; $subjects = explode('><', $subjects); foreach ($subjects as $subject) { $subject = trim(str_replace(array('>', '<'), '', $subject)); $subject_id = utility::getID($dbs, 'mst_topic', 'topic_id', 'topic', $subject, $subject_id_cache); $biblio_subject_sql .= " ($biblio_id, $subject_id, 2),"; } // remove last comma $biblio_subject_sql = substr_replace($biblio_subject_sql, '', -1); // execute query $dbs->query($biblio_subject_sql); // echo $dbs->error; } // items if (!empty($items)) { $item_sql = 'INSERT IGNORE INTO item (biblio_id, item_code) VALUES '; $item_array = explode('><', $items); foreach ($item_array as $item) { $item = trim(str_replace(array('>', '<'), '', $item)); $item_sql .= " ($biblio_id, '$item'),"; } // remove last comma $item_sql = substr_replace($item_sql, '', -1); // execute query $dbs->query($item_sql); } } // create biblio index if ($sysconf['index']['type'] == 'index') { $indexer->makeIndex($biblio_id); } } $row_count++; } } // close file handle fclose($file); $end_time = time(); $import_time_sec = $end_time-$start_time; utility::writeLogs($dbs, 'staff', $_SESSION['uid'], 'bibliography', 'Importing '.$inserted_row.' bibliographic records from file : '.$_FILES['importFile']['name']); echo ''; exit(); } } ?> submit_button_attr = 'name="doImport" value="'.__('Import Now').'" class="btn btn-default"'; // form table attributes $form->table_attr = 'align="center" id="dataList" cellpadding="5" cellspacing="0"'; $form->table_header_attr = 'class="alterCell" style="font-weight: bold;"'; $form->table_content_attr = 'class="alterCell2"'; /* Form Element(s) */ // csv files $str_input = simbio_form_element::textField('file', 'importFile'); $str_input .= ' Maximum '.$sysconf['max_upload'].' KB'; $form->addAnything(__('File To Import'), $str_input); // field separator $form->addTextField('text', 'fieldSep', __('Field Separator').'*', ''.htmlentities(',').'', 'style="width: 10%;" maxlength="3"'); // field enclosed $form->addTextField('text', 'fieldEnc', __('Field Enclosed With').'*', ''.htmlentities('"').'', 'style="width: 10%;"'); // number of records to import $form->addTextField('text', 'recordNum', __('Number of Records To Export (0 for all records)'), '0', 'style="width: 10%;"'); // records offset $form->addTextField('text', 'recordOffset', __('Start From Record'), '1', 'style="width: 10%;"'); // output the form echo $form->printOut();