* @package AgileBill * @version 1.4.93 */ /** * Import Handler Module. */ class CORE_import { ### Validate the import file/upload. ### Generate the array to display the field options. function prepare_import($VAR, $construct) { global $_FILES, $C_debug, $smarty; if($VAR['filetype'] == 'upload') { if(isset($_FILES['file']) && $_FILES['file']['size'] > 0) { # added str_replace for spaces, because Linux really doesn't like them much. $this->filename = str_replace(" ","_",'import_'.$VAR['module'].'_'.$_FILES['file']['name']); $this->file = PATH_FILES . $this->filename; copy($_FILES['file']['tmp_name'], $this->file); } else { $C_debug->alert('Please go back and enter a file to upload!'); return false; } } elseif ($VAR['filetype'] == 'local') { @$this->filename = $VAR['file']; @$this->file = PATH_FILES.$VAR['file']; if(!is_file($this->file)) $C_debug->alert('The specified file does not exist!'); return false; } else { $C_debug->alert('Please go back and enter all required fields!'); return false; } # open the file for parsing $data = file_get_contents($this->file); $rows = explode("\r\n", $data); if($VAR['type'] == 'csv') $sp = ','; elseif($VAR['type'] == 'tab') $sp = ' '; else return false; # get the first row for the example data if(count($rows) == 0) { return false; } else { # set the columns and sample data smarty array: $columns = explode($sp, $rows[0]); $this->sbox = array('-- Use Constant Value --'); for($i=0;$isbox[] = "Field #$i: ".$columns[$i]; if($VAR['type'] && ereg("^\"",$smart[$i]['sample']) && ereg("\"$",$smart[$i]['sample'])) { $smart[$i]['sample'] = ereg_replace("^\"","",$smart[$i]['sample']); $smart[$i]['sample'] = ereg_replace("\"$","",$smart[$i]['sample']); } } # set the smarty vars: $smarty->assign('rows',count($rows)); $smarty->assign('columns',$smart); $smarty->assign('file', $this->filename); $smarty->assign('type', $VAR['type']); # set the available fields: $fields = explode(',', '--NONE--,'.$construct->method['import']); $smarty->assign('fields', $fields); $smarty->assign('fields_array',$this->build_fields($construct)); return true; } } function build_fields(&$construct) { $fields_array = explode(",",$construct->method['import']); $i = 0; foreach ($fields_array as $f) { $itbl[$i]['field'] = $f; $itbl[$i]['options'] = @$this->sbox; $itbl[$i]['type'] = ''; $itbl[$i]['custom'] = 0; $i++; } if(isset($construct->import_custom) && count($construct->import_custom)) { foreach ($construct->import_custom as $f) { $itbl[$i]['field'] = $f['name']; $itbl[$i]['options'] = $f['value']; $itbl[$i]['type'] = $f['type']; $itbl[$i]['custom'] = 1; $i++; } } return $itbl; } ### Perform the actual import function do_new_import(&$VAR, &$construct) { global $C_debug; $this->file = PATH_FILES.$VAR['file']; $data = file_get_contents($this->file); $rows = explode("\r\n", $data); # get the file type: if($VAR['type'] == 'csv') $sp = ','; elseif($VAR['type'] == 'tab') $sp = ' '; else return false; # get the first row for the example data if(count($rows) == 0) { return false; } else { # get the available fields: $fields = $this->build_fields($construct); # start the insert statement $db = &DB(); $q = "INSERT INTO ".AGILE_DB_PREFIX."$construct->table "; $sql = "SELECT * FROM ".AGILE_DB_PREFIX."$construct->table WHERE id = -1"; $rs = $db->Execute($sql); $bad = 0; # loop through the rows for($row=0; $row".print_r($columns,true).""; $record = array(); for($i=0;$i 0) { $record[$fields[$i]['field']] = @$columns[--$idx]; if($VAR['type'] && ereg("^\"",$record[$fields[$i]['field']]) && ereg("\"$",$record[$fields[$i]['field']])) { $record[$fields[$i]['field']] = ereg_replace("^\"","",$record[$fields[$i]['field']]); $record[$fields[$i]['field']] = ereg_replace("\"$","",$record[$fields[$i]['field']]); } } else { $record[$fields[$i]['field']] = @$VAR['import_constant'][$fields[$i]['field']]; } } $record['site_id'] = DEFAULT_SITE; if(empty($record['id'])) $record['id'] = $db->GenID(AGILE_DB_PREFIX . $construct->table . '_id'); $SQL = $db->GetInsertSQL($rs, $record); # echo $SQL."
"; /* call import_line_process */ if (is_callable(array($construct,'import_line_process'))) { $construct->import_line_process($db, $VAR, $fields, $record); } if($VAR['import_type'] == 'db') { # execute command $db->Execute($SQL); } else { # add to sql command for download @$SQL_DL .= $SQL . ";\r\n\r\n"; } } else { $bad++; } } if(@$VAR['import_type'] == 'dl') { header ("Content-Disposition: attachment; filename=$construct->table.sql" ); echo $SQL_DL; exit; } $C_debug->alert("Imported $row record(s) and $bad record(s) were skipped."); return true; } } ### Validate the fields. ### Perform the actual import function do_import($VAR, $construct) { global $C_debug; $this->file = PATH_FILES.$VAR['file']; $data = file_get_contents($this->file); $rows = explode("\r\n", $data); # get the file type: if($VAR['type'] == 'csv') $sp = ','; elseif($VAR['type'] == 'tab') $sp = ' '; else return false; # get the first row for the example data if(count($rows) == 0) { return false; } else { # get the available fields: $fields = explode(',', ','.$construct->method['import']); # start the insert statement $db = &DB(); $q = "INSERT INTO ".AGILE_DB_PREFIX."$construct->table "; $sql = "SELECT * FROM ".AGILE_DB_PREFIX."$construct->table WHERE id = -1"; $rs = $db->Execute($sql); # loop through the rows for($row=0; $rowalert("You have used the table $field more than once!"); return false; } # get the field data: if(!empty($field)) { # get the data: $data = $columns[$i]; if($VAR['type'] && ereg("^\"",$data) && ereg("\"$",$data)) { $data = ereg_replace("^\"","",$data); $data = ereg_replace("\"$","",$data); } # check for relational records: $record["$field"] = $data; } } $record['site_id'] = DEFAULT_SITE; if(empty($record['id'])) $record['id'] = $db->GenID(AGILE_DB_PREFIX . $construct->table . '_id'); $SQL = $db->GetInsertSQL($rs, $record); if($VAR['import_type'] == 'db') { # execute command $db->Execute($SQL); if($import_rs === false) { # error message } } else { # add to sql command for download @$SQL_DL .= $SQL . ";\r\n\r\n"; } } if($VAR['import_type'] == 'dl') { header ("Content-Disposition: attachment; filename=$construct->table.sql" ); echo $SQL_DL; exit; } $C_debug->alert("Imported $row record(s)."); return true; } } } ?>