* */ $_ENV['log'] = ""; $_ENV['error'] = 0; // Functions function Scan($folder, $available_space, $docserver,$docserver_name,$tab_maarch_value,$subdocserver, $docserver_mini_path,$wbai,$init_file) { //Browse each file and folder in the import folder. $current_transfert_size = 0; $ClassScan= dir($folder); $pass=true; while(($filescan=$ClassScan->read())!=false) { if (($init_files == 0) && ($pass==true)) { $foldername = mkdir($docserver.str_pad($init_file,4,"0",STR_PAD_LEFT).$_ENV['slh'],0777); $pass = false; $nb_files = 0; } if (strstr($nb_files, "000")==true) { $init_file++; $foldername = mkdir($docserver.str_pad($init_file,4,"0",STR_PAD_LEFT).$_ENV['slh'],0777 ); $nb_files = 0; } $current_init_folder = str_pad($init_file,4,"0",STR_PAD_LEFT).$_ENV['slh']; if($filescan=='.'||$filescan=='..' ||$filescan=='backup' ||$filescan=='failed') { continue; } else { $file_extension = ExtractFileExt($folder.$filescan); if (strtoupper($file_extension) == "XML") { if (SearchImageOfXml(strtr(strtoupper($File.path) , ".XML", ".PDF") == false) && SearchImageOfXml(strtr(strtoupper($File.path) , ".XML", ".TIF") == false) && SearchImageOfXml(strtr(strtoupper($File.path) , ".XML", ".TIFF") == false) && SearchImageOfXml(strtr(strtoupper($File.path) , ".XML", ".ZIP") == false) && SearchImageOfXml(strtr(strtoupper($File.path) , ".XML", ".DAT") == false)) { $_ENV['log'] .="<".date("d-m-Y")." - ".date("H:i:s").">****Error**** Image not found!! : ".$File.Path."\r\n"; $_ENV['log'] .="<".date("d-m-Y")." - ".date("H:i:s")."> ERRNO : 5.\r\n"; } } else { $_ENV['log'] .="<".date("d-m-Y")." - ".date("H:i:s")."> Scan in progress on : ".$folder.$filescan."\r\n"; $temp_filesize = (filesize($folder.$filescan)); $_ENV['current_transfert_size'] = $_ENV['$current_transfert_size'] + $temp_filesize; Checking_available_space($available_space, $current_transfert_size); $file_path = buildDirectory($docserver.$current_init_folder,$filescan, $folder, $nb_files); $sql_query_builded .= BuildSqlQuery ($folder.$filescan,$docserver_name,$file_path,$tab_maarch_value,$subdocserver.str_pad($init_file,4,"0",STR_PAD_LEFT)."\\", $docserver_mini_path, $wbai); $nb_files++; $total_nbfile = $total_nbfile + 1 ; } } } $_ENV['log'] .="<".date("d-m-Y")." - ".date("H:i:s")."> Number of imported files : ".$total_nbfile."\r\n"; return $sql_query_builded; } function GetWorkBatchAutoImport() { $req_cwbai = "select PARAM_VALUE_INT from PARAMETERS where ID = 'work_batch_autoimport_id'"; $req = mysql_query($req_cwbai); while($req_result=mysql_fetch_array($req)) { $work_batch_autoimport = $req_result[0] +1; } return $work_batch_autoimport; } function CreateLockFile($directory, $errorInfo,$wbai) { //Create a log file in the application folder $lock_file = $_ENV['aid']."autoimport.lck"; //echo "DIRECTORY".$directory; if (file_exists($lock_file)) { unlink ($lock_file); } $lock_file_opened = fopen($lock_file, "a"); fwrite($lock_file_opened, $errorInfo); fclose($lock_file_opened); echo "\r\nMoving imported files in subfoler : ".$directory."failed".$_ENV['slh'].$wbai."\r\n"; if (!is_dir($directory.$_ENV['slh']."failed".$_ENV['slh'])) { mkdir ($directory.$_ENV['slh']."failed".$_ENV['slh'], 0777); } if (!is_dir($directory.$_ENV['slh']."failed".$_ENV['slh'].$wbai.$_ENV['slh'])) { mkdir ($directory.$_ENV['slh']."failed".$_ENV['slh'].$wbai.$_ENV['slh'], 0777); } $ClassScan= dir($directory); while(($filescan=$ClassScan->read())!=false) { if($filescan=='.'||$filescan=='..' ||$filescan=='backup' ||$filescan=='failed') { continue; } else { if (!copy($directory.$filescan, $directory."failed".$_ENV['slh'].$wbai.$_ENV['slh'].$filescan)) { echo "Unable to move file. AutoImport has been stopped!\r\n"; $_ENV['log'] .="<".date("d-m-Y")." - ".date("H:i:s")."> ERRNO : 6.\r\n"; $log=$_ENV['log']; exit(); } else { unlink ($directory.$filescan); } } } } function MoveImportedFiles($directory,$wbai) { $ClassScan= dir($directory); if (!is_dir($directory.$_ENV['slh']."backup".$_ENV['slh'])) { mkdir ($directory.$_ENV['slh']."backup".$_ENV['slh'], 0777); } if (!is_dir($directory.$_ENV['slh']."backup".$_ENV['slh'].$wbai.$_ENV['slh'])) { mkdir ($directory.$_ENV['slh']."backup".$_ENV['slh'].$wbai.$_ENV['slh'], 0777); } $_ENV['log'] .="<".date("d-m-Y")." - ".date("H:i:s")."> Moving imported files in subfoler : ".$directory."backup".$_ENV['slh'].$wbai."\r\n"; while(($filescan=$ClassScan->read())!=false) { if($filescan=='.'||$filescan=='..' ||$filescan=='backup' ||$filescan=='failed') { continue; } else { if (!copy($directory.$filescan, $directory."backup".$_ENV['slh'].$wbai.$_ENV['slh'].$filescan)) { $_ENV['log'] .="<".date("d-m-Y")." - ".date("H:i:s")."> ****Error**** Move failed.\r\n"; $_ENV['log'] .="<".date("d-m-Y")." - ".date("H:i:s")."> ERRNO : 7.\r\n"; $log=$_ENV['log']; $auto_import_directory = $_ENV['aid']; Function_log($log, $auto_import_directory); CreateLockFile($_ENV['sid'], "1",$wbai); exit(); } unlink ($directory.$filescan); } } } function GetDocSeverLocation($docserver_name) //Return physical location of the docserver { $req_gdsl = "SELECT PATH_TEMPLATE from docservers where DOCSERVER_ID='".$docserver_name."'"; $req = mysql_query($req_gdsl); while($req_result=mysql_fetch_array($req)) { $docserver_location = $req_result[0]; } return $docserver_location; } function UpdateWorkingBatchAutoImport($work_batch_autoimport) { $req_uwbai = "update PARAMETERS set PARAM_VALUE_INT = '".$work_batch_autoimport."' where ID = 'work_batch_autoimport_id'"; $req = mysql_query($req_uwbai); } function SearchImageOfXml($directory) //Allows to know if there is an image associate with the current xml { if (dir($directory) <> "") { return true; } else { return false; } } function ExtractFileExt($sFullPath) { //Return the file's extention $sName = $sFullPath; if (strpos($sName, ".")==0) { $ExtractFileExt = ""; } else { $ExtractFileExt = explode (".", $sName); } return $ExtractFileExt[1]; } function ExtractFileName($sFullPath) { //Return only name of the file if ((strpos($sFullPath, $_ENV['slh'] == 0 ) || (substr($sFullPath, -1) == $_ENV['slh']))) { $ExtractFileName = ""; exit(); } $test = substr($sFullPath, strpos($sFullPath, $_ENV['slh']) +1); } function DocServerSize_init($docserver_id) { //Return the actual size of the DocServer $req = "SELECT SIZE_LIMIT, ACTUAL_SIZE FROM docservers WHERE DOCSERVER_ID = '".$docserver_id."'"; $docserversize_req = mysql_query($req); while ($result = mysql_fetch_array($docserversize_req)) { $actual_docserver_size = $result[1]; $available_space = $result[0] - $result[1]; } return $available_space; } function DocServerSize_update ($docserver_id, $the_size) { //Uptdate the actual size of the DocServer $req1 = "Select ACTUAL_SIZE FROM docservers WHERE DOCSERVER_ID='".$docserver_id."'"; $docserverupdate_value = mysql_query($req1); while ($result= mysql_fetch_array($docserverupdate_value)) { $actual_size = $result[0]; $size = ($actual_size + $the_size); $req2 = "update docservers SET ACTUAL_SIZE = '".$size."' WHERE DOCSERVER_ID = '".$docserver_id."'"; $docserverupdate_req = mysql_query($req2); } } function Checking_available_space($available_space, $Actual_transfer_size) { if (($available_space - $Actual_transfer_size) > 0) { //echo "\nThe free space available in the docserver is sufficient to continue..."; } else { echo "\nThe free space available in the docserver is not sufficient to continue..."; $_ENV['log'] .="<".date("d-m-Y")." - ".date("H:i:s")."> *****ERROR***** The free space available in the docserver is not sufficient to continue. End of application.\r\n"; $_ENV['log'] .="<".date("d-m-Y")." - ".date("H:i:s")."Available space in bytes : ".$available_space."\r\n"; $_ENV['log'] .="<".date("d-m-Y")." - ".date("H:i:s")."Data size : ".$Actual_transfer_size."\r\n"; $_ENV['log'] .="<".date("d-m-Y")." - ".date("H:i:s")."> ERRNO : 2.\r\n"; $log=$_ENV['log']; $auto_import_directory = $_ENV['aid']; Function_log($log, $auto_import_directory); CreateLockFile($_ENV['sid'], "1",$wbai); exit(); } } function buildDirectory($docserver, $Filename, $FilePath,$nbfiles) { //Copy the file in the DocServer if (file_exists($docserver)) { $docname = str_pad($nbfiles, 4, "0", STR_PAD_LEFT); if ($FilePath <> "" && $Filename <> "") { $extTab = explode(".",$Filename); if (!copy($FilePath.$Filename, $docserver.$docname.".".strtoupper($extTab[1]))) { $_ENV['log'] .="<".date("d-m-Y")." - ".date("H:i:s")."> *****ERROR***** Copy failed. Application stopped.\r\n"; $_ENV['log'] .="<".date("d-m-Y")." - ".date("H:i:s")."> ERRNO : 3.\r\n"; $log=$_ENV['log']; $auto_import_directory = $_ENV['aid']; CreateLockFile($_ENV['sid'], "1",$wbai); Function_log($log, $auto_import_directory); exit(); } $_ENV['log'] .="<".date("d-m-Y")." - ".date("H:i:s")."> New file created : ".$docserver.$fodername.$docname.".".strtoupper($extTab[1])."\r\n"; return $docserver.$fodername.$docname.".".strtoupper($extTab[1]); } } } function Function_log($eventInfo, $auto_import_directory) { //Create a log file in the application folder $log_file = $auto_import_directory."log.txt"; if (file_exists($log_file)) { unlink ($log_file); } $log_file_opened = fopen($log_file, "a"); fwrite($log_file_opened, $eventInfo); fclose($log_file_opened); } function Error($Filename, $FilePath) { // If the application found an error, it stop process. echo "Error level 1."; $_ENV['log'] .="<".date("d-m-Y")." - ".date("H:i:s")."> Error level 1\r\n"; } function WriteInSqlFile($sql_import_file,$query, $auto_import_directory) { //Write the SQL query in a csv file $sql_import_file_opened = fopen($auto_import_directory.$sql_import_file, "a"); fwrite($sql_import_file_opened, $query); fclose($sql_import_file_opened); } function BuildSqlQuery($file_path,$docserver_name,$file_destination,$tab_maarch_value,$subdocserver,$docserver, $wbai) { //Create the CSV $only_file_path = explode(".",$file_path); $ext = strtr(ExtractFileExt($file_path), ExtractFileExt($file_path), "XML"); $xml_file = ($only_file_path[0].".".$ext); $xml_file_loaded = simplexml_load_file($xml_file); $tab_maarch_value_bis = $tab_maarch_value; $j=0; $insert_line_value = ""; $insert_line_value .= "AUTOIMPORT"; $insert_line_value .= ";".date("Y-m-d")." ".date("H:i"); $insert_line_value .= ";".$docserver_name; $insert_line_value .= ";".str_replace($_ENV['slh'], "#", $subdocserver); $insert_line_value .= ";".str_replace($docserver.$subdocserver, "",$file_destination); $insert_line_value .= ";".ExtractFileName($file_path); $insert_line_value .= ";".md5_file($file_path); $insert_line_value .= ";".filesize($file_path); $insert_line_value .= ";".ExtractFileExt($file_path); $insert_line_value .= ";".$wbai; //write the xml value in the good sql file to import for ($j = 1; $j < sizeof($tab_maarch_value); $j++) { $var = 0; $xml_value_content[$j] = utf8_encode($xml_file_loaded -> $tab_maarch_value[$j]); $insert_line_value .= ";".utf8_decode($xml_value_content[$j]); } $insert_line_value .= "\r\n"; return $insert_line_value; } if($argc != 2 ) { echo "You must specify the configuration file."; exit; } else { $conf = $argv[1]; if(!file_exists($conf)) { echo "The read of the configuration file has been stopped by Maarch Auto Import (Xml Error)."; exit; } // Loading of the xml config file. $_ENV['log'] .= "<".date("d-m-Y")." - ".date("H:i:s")."> Loading xml config file : ".$conf."\r\n"; $xmlconfig = simplexml_load_file($conf); foreach($xmlconfig->CONFIG as $CONFIG) { $mapping_file = $CONFIG->MAPPING_FILE; $scan_import_directory = $CONFIG->SCAN_IMPORT_DIRECTORY; $_ENV['sid']= $scan_import_directory; $location_server = $CONFIG->LOCATION; $data_base = $CONFIG -> DATABASE; $user_name = $CONFIG -> USER_NAME; $password = $CONFIG->PASSWORD; $docserver_name = $CONFIG->DOCSERVER_NAME; $date_format = $CONFIG->DATE_FORMAT; $date_time_format = $CONFIG -> DATE_TIME_FORMAT; $sql_import_file_name = $CONFIG -> SQL_IMPORT_FILE_NAME; $auto_import_directory = $CONFIG -> AUTO_IMPORT_DIRECTORY; $slh = $CONFIG -> UNIX_SYSTEM; $_ENV['aid'] = $auto_import_directory; $tab_table_maarch[1] = $CONFIG -> TABLE_NAME; } if ($slh == '') { echo "You need to specify your Os system in the configuration file. AutoImport has been locked!"; CreateLockFile($_ENV['sid'], "1", $wbai); } if ($slh == "true") { $_ENV['slh'] = "/"; $_ENV['osname'] = "UNIX"; } else { $_ENV['slh'] = "\\"; $_ENV['osname'] = "WINDOWS"; } if(file_exists($auto_import_directory."autoimport.lck")) { echo "An error has been found while the last batch. AutoImport stopped!\r\n Please check you configuration file\r\n You have to delete the lock file in AutoImport folder to restart this application"; exit; } $lock_file = $_ENV['aid']."autoimport.lck"; $lock_file_opened = fopen($lock_file, "a"); fwrite($lock_file_opened, $errorInfo); fclose($lock_file_opened); //definition of the connection $UID = $user_name; $PWD =$password; $SERVER = $location_server; $DATABASE = $data_base; //Open the connection $connect=mysql_connect($SERVER, $UID, $PWD); $selectdb=mysql_select_db($DATABASE); //Return location of docserver $docserver = GetDocSeverLocation($docserver_name); //Caculing the work batch autoimport number $wbai = GetWorkBatchAutoImport(); $wbai = str_pad($wbai,8,"0", STR_PAD_LEFT); $_ENV['log'] .= "<".date("d-m-Y")." - ".date("H:i:s")."> AutoImport WorkBatch is : ".$wbai. "\r\n"; //Updating the work batch autoimport number UpdateWorkingBatchAutoImport($wbai); //Calcul of the init size avaible on docserver $available_space = DocServerSize_init($docserver_name); $_ENV['log'] .= "<".date("d-m-Y")." - ".date("H:i:s")."> Target OS : ".$_ENV['osname']."\r\n"; //Loading the mapping xml file $_ENV['log'] .= "<".date("d-m-Y")." - ".date("H:i:s")."> Loading mapping xml file\r\n"; $xmlmapping = simplexml_load_file($mapping_file); $i_map = 1; foreach($xmlmapping->MAPPING_FILE as $MAPPING_FILE) { foreach($MAPPING_FILE->ELEMENT as $ELEMENT) { $tab_maarch_field[$i_map] = $ELEMENT->COLUMN; $tab_maarch_value[$i_map] = $ELEMENT->VALUE; $i_map++; } } //Scan the import directory $init_path = $_ENV['slh']; $folder = ($scan_import_directory); $folder2 = ($docserver); $_ENV['log'] .= "<".date("d-m-Y")." - ".date("H:i:s")."> Find current directory and file of the docserver\r\n"; //creation of the current directory of the docserver to use $nbfile = 0; $nbfolder = 0; $init_file = 0; $subdocserver = date("Y").$_ENV['slh'].date("m").$_ENV['slh'].$wbai.$_ENV['slh']; //echo $subdocserver; $init_directory = $docserver.$subdocserver; //if (!is_dir($docserver)) //{ //mkdir ($docserver, 0777); //} if (!is_dir($docserver.date("Y").$_ENV['slh'])) { echo $docserver.date("Y").$_ENV['slh']; mkdir ($docserver.date("Y").$_ENV['slh'], 0777); } if (!is_dir($docserver.date("Y").$_ENV['slh'].date("m").$_ENV['slh'])) { mkdir ($docserver.date("Y").$_ENV['slh'].date("m").$_ENV['slh'], 0777); } if (!is_dir($docserver.date("Y").$_ENV['slh'].date("m").$_ENV['slh'].$wbai.$_ENV['slh'])) { mkdir ($docserver.date("Y").$_ENV['slh'].date("m").$_ENV['slh'].$wbai.$_ENV['slh'], 0777); } //echo $docserver.date("Y").$_ENV['slh'].date("m").$_ENV['slh'].$wbai.$_ENV['slh']; $_ENV['log'] .="<".date("d-m-Y")." - ".date("H:i:s")."> Scanning import folder\r\n"; $_ENV['log'] .="<".date("d-m-Y")." - ".date("H:i:s")."> Current target docserver location for import : " .$init_directory."\r\n"; $request = Scan($folder, $available_space, $init_directory,$docserver_name,$tab_maarch_value,$subdocserver,$docserver,$wbai,$init_file); $the_size = $_ENV['current_transfert_size']; DocserverSize_update($docserver_name, $the_size); //Create the file with the SQL query for ($z=1; $z==1; $z++) { $tab_sql_file[$z] = "sql_import_file_".$tab_table_maarch[$z].".sql"; //delete existant import sql file if (file_exists($auto_import_directory.$tab_sql_file[$z])) { unlink ($auto_import_directory.$tab_sql_file[$z]); } $_ENV['log'] .= "<".date("d-m-Y")." - ".date("H:i:s")."> Creation of SQL command file in : ".$tab_sql_file[$z]."\r\n"; WriteInSqlFile($tab_sql_file[$z], $request, $auto_import_directory); } $maarch_field = "TYPIST, CREATION_DATE, DOCSERVER_ID, PATH, FILENAME, OFFSET_DOC, FINGERPRINT, FILESIZE, FORMAT,WORK_BATCH"; if (sizeof($tab_maarch_field) <> 0) { $maarch_field .= ","; } for ( $j=1 ; $j<=sizeof($tab_maarch_field) ; $j++) { $maarch_field .= " ".$tab_maarch_field[$j].","; } $maarch_field = substr($maarch_field, 0, -1); for ($z=1; $z==1; $z++) { $tab_sql_file[$z] = str_replace($_ENV['slh'],$_ENV['slh'].$_ENV['slh'],$tab_sql_file[$z]); $req = "LOAD DATA LOCAL INFILE '".str_replace($_ENV['slh'],$_ENV['slh'].$_ENV['slh'],$auto_import_directory).$tab_sql_file[$z]."' INTO TABLE ".$tab_table_maarch[$z]." FIELDS TERMINATED BY ';' LINES TERMINATED BY '\\n' (".$maarch_field.");"; $_ENV['log'] .= "<".date("d-m-Y")." - ".date("H:i:s")."> ".$req."\r\n"; //Execute the SQL query. $req_execute = mysql_query($req); if (!$req_execute) { echo "\nMySql Error!: ".mysql_error(); $_ENV['log'] .="<".date("d-m-Y")." - ".date("H:i:s")."> *****ERROR***** Maarch Auto Import cannot execute query on database.\r\n"; $_ENV['log'] .="<".date("d-m-Y")." - ".date("H:i:s")."> ERRNO : 4.\r\n"; $log=$_ENV['log']; $auto_import_directory = $_ENV['aid']; Function_log($log, $auto_import_directory); CreateLockFile($scan_import_directory, "1",$wbai); exit(); } } $_ENV['log'] .= "<".date("d-m-Y")." - ".date("H:i:s")."> Import files moved to :\r\n"; MoveImportedFiles($folder,$wbai); $_ENV['log'] .= "<".date("d-m-Y")." - ".date("H:i:s")."> End of application\r\n"; $log = $_ENV['log']; Function_log($log, $auto_import_directory); if (file_exists($lock_file)) { unlink ($lock_file); } } ?>