From 492f26f04bd0386cd1b586e50622c86eed70d76f Mon Sep 17 00:00:00 2001
From: Laurent Destailleur <eldy@users.sourceforge.net>
Date: Thu, 1 Oct 2009 21:31:55 +0000
Subject: [PATCH] Work on import module

---
 htdocs/imports/import.php       | 142 +++++++++++++++++++++++++++-----
 htdocs/langs/en_US/exports.lang |   2 +
 htdocs/langs/fr_FR/exports.lang |   4 +-
 3 files changed, 126 insertions(+), 22 deletions(-)

diff --git a/htdocs/imports/import.php b/htdocs/imports/import.php
index 22886a0a4b3..cf7d4ac68de 100644
--- a/htdocs/imports/import.php
+++ b/htdocs/imports/import.php
@@ -236,10 +236,62 @@ if ($step == 4 && $action == 'select_model')
 	}
 }
 
+if ($action == 'saveorder')
+{
+	// Enregistrement de la position des champs
+	dol_syslog("boxorder=".$_GET['boxorder']." datatoimport=".$_GET["datatoimport"], LOG_DEBUG);
+	$part=split(':',$_GET['boxorder']);
+	$colonne=$part[0];
+	$list=$part[1];
+	dol_syslog('column='.$colonne.' list='.$list);
+
+	// Init targets fields array
+	$fieldstarget=$objimport->array_import_fields[0];
+
+	// Reinit match arrays. We redefine array_match_file_to_database
+	$serialized_array_match_file_to_database='';
+	$array_match_file_to_database=array();
+	$fieldsarray=split(',',$list);
+	$pos=0;
+	foreach($fieldsarray as $fieldnb)	// For each elem in list. fieldnb start from 1 to ...
+	{
+		// Get name of database fields at position $pos and put it into $namefield
+		$posbis=0;$namefield='';
+		foreach($fieldstarget as $key => $val)	// key:   val:
+		{
+			//dol_syslog('AjaxImport key='.$key.' val='.$val);
+			if ($posbis < $pos)
+			{
+				$posbis++;
+				continue;
+			}
+			// We found the key of targets that is at position pos
+			$namefield=$key;
+			//dol_syslog('AjaxImport Field name found for file field nb '.$fieldnb.'='.$namefield);
+
+			break;
+		}
+
+		if ($fieldnb && $namefield)
+		{
+			$array_match_file_to_database[$fieldnb]=$namefield;
+			if ($serialized_array_match_file_to_database) $serialized_array_match_file_to_database.=',';
+			$serialized_array_match_file_to_database.=($fieldnb.'='.$namefield);
+		}
+
+		$pos++;
+	}
+
+	// We save new matching in session
+	$_SESSION["dol_array_match_file_to_database"]=$serialized_array_match_file_to_database;
+	dol_syslog('dol_array_match_file_to_database='.$serialized_array_match_file_to_database);
+}
+
+
 
 
 /*
- * Affichage Pages des Etapes
+ * View
  */
 
 
@@ -662,6 +714,7 @@ if ($step == 4 && $datatoimport)
 	print '<tr valign="top"><td width="50%">';
 
 	$fieldsplaced=array();
+	$valforsourcefieldnb=array();
 	foreach($array_match_file_to_database as $key => $val)
 	{
 		$listofkeys[$key]=1;
@@ -680,10 +733,12 @@ if ($step == 4 && $datatoimport)
 		//print '> '.$lefti.'-'.$key.'-'.$val;
 		$listofkeys[$key]=1;
 		$fieldsplaced[$key]=1;
+		$valforsourcefieldnb[$lefti]=$key;
 		$lefti++;
 
 		if ($lefti > sizeof($fieldstarget)) break;	// Other fields are in the not imported area
 	}
+	//var_dump($valforsourcefieldnb);
 
 	// Complete source fields from sizeof($fieldssource)+1 to sizeof($fieldstarget)
 	$more=1;
@@ -698,7 +753,6 @@ if ($step == 4 && $datatoimport)
 		$more++;
 	}
 
-
 	print "</div>\n";
 	print "<!-- End box container -->\n";
 
@@ -708,6 +762,7 @@ if ($step == 4 && $datatoimport)
 	// List of targets fields
 	$i = 0;
 	$var=true;
+	$mandatoryfieldshavesource=true;
 	print '<table width="100%" class="nobordernopadding">';
 	foreach($fieldstarget as $code=>$label)
 	{
@@ -724,9 +779,18 @@ if ($step == 4 && $datatoimport)
 
 		print '<td nowrap="nowrap" style="font-weight: normal">=>'.img_object('',$entityicon).' '.$langs->trans($entitylang).'</td>';
 		print '<td style="font-weight: normal">';
-		$text=$langs->trans($label);
-		if (eregi('\*$',$label)) $text='<b>'.$text.'</b>';
+		$newlabel=eregi_replace('\*$','',$label);
+		$text=$langs->trans($newlabel);
+		$more='';
+		if (eregi('\*$',$label))
+		{
+			$text='<b>'.$text.'*</b>';
+			$more=((! empty($valforsourcefieldnb[$i]) && $valforsourcefieldnb[$i] <= sizeof($fieldssource)) ? '' : img_warning($langs->trans("FieldNeedSource")));
+			if ($mandatoryfieldshavesource) $mandatoryfieldshavesource=(! empty($valforsourcefieldnb[$i]) && ($valforsourcefieldnb[$i] <= sizeof($fieldssource)));
+			//print 'xx'.($i).'-'.$valforsourcefieldnb[$i].'-'.$mandatoryfieldshavesource;
+		}
 		$htmltext=$langs->trans("Table").": ".$tablename."<br>".$langs->trans("Field").': '.$code;
+		$text.=$more;
 		print $html->textwithpicto($text,$htmltext);
 		print '</td>';
 
@@ -742,7 +806,7 @@ if ($step == 4 && $datatoimport)
 
 	print '<tr valign="top"><td width="50%">';
 
-	print "\n<!-- Box forget container -->\n";
+	print "\n<!-- Box ignore container -->\n";
 	print '<div id="right">'."\n";
 
 	$nbofnotimportedfields=0;
@@ -767,7 +831,7 @@ if ($step == 4 && $datatoimport)
 	$nbofnotimportedfields++;
 
 	print "</div>\n";
-	print "<!-- End box container -->\n";
+	print "<!-- End box ignore container -->\n";
 
 	print '</td>';
 	print '<td width="50%">';
@@ -784,7 +848,6 @@ if ($step == 4 && $datatoimport)
 
 	print '</div>';
 
-
 	if ($conf->use_javascript_ajax)
 	{
 		print "\n";
@@ -795,13 +858,16 @@ if ($step == 4 && $datatoimport)
 	    print 'var boxorder = \'A:\' + left_list;'."\n";
 	    //print 'var boxorder = \'A:\' + left_list + \'-B:\' + right_list;'."\n";
 	    //alert( \'boxorder=\' + boxorder )."\n";
-	    print 'var userid = \''.$user->id.'\';'."\n";
-	    print 'var url = "ajaximport.php";'."\n";
+	    //print 'var userid = \''.$user->id.'\';'."\n";
+	    //print 'var url = "ajaximport.php";'."\n";
 	    print 'var datatoimport = "'.$datatoimport.'";'."\n";
-	    print 'o_options = new Object();'."\n";
-	    print 'o_options = {asynchronous:true,method: \'get\',parameters: \'step=4&boxorder=\' + boxorder + \'&userid=\' + userid + \'&datatoimport=\' + datatoimport};'."\n";
-	    print 'var myAjax = new Ajax.Request(url, o_options);'."\n";
-	    //print 'document.
+	    print 'var newlocation= \''.$_SERVER["PHP_SELF"].'?step=4&action=saveorder&boxorder=\' + boxorder + \'&datatoimport=\' + datatoimport;'."\n";
+	    //print 'alert(newlocation);';
+	    //print 'o_options = new Object();'."\n";
+	    //print 'o_options = {asynchronous:false,method: \'get\',parameters: \'step=4&boxorder=\' + boxorder + \'&userid=\' + userid + \'&datatoimport=\' + datatoimport};'."\n";
+	    //print 'var myAjax = new Ajax.Request(url, o_options);'."\n";
+	    // Now reload page
+	    print 'window.location.href=newlocation';
 	    print '}'."\n";
 	  	print "\n";
 
@@ -837,7 +903,14 @@ if ($step == 4 && $datatoimport)
 
 	if (sizeof($array_match_file_to_database))
 	{
-		print '<a class="butAction" href="import.php?step=5&format='.$format.'&datatoimport='.$datatoimport.'&filetoimport='.urlencode($filetoimport).'">'.$langs->trans("NextStep").'</a>';
+		if ($mandatoryfieldshavesource)
+		{
+			print '<a class="butAction" href="import.php?step=5&format='.$format.'&datatoimport='.$datatoimport.'&filetoimport='.urlencode($filetoimport).'">'.$langs->trans("NextStep").'</a>';
+		}
+		else
+		{
+			print '<a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->trans("SomeMandatoryFieldHaveNoSource")).'">'.$langs->trans("NextStep").'</a>';
+		}
 	}
 
 	print '</div>';
@@ -908,7 +981,21 @@ if ($step == 5 && $datatoimport)
 {
 	if (empty($dontimportfirstline)) $dontimportfirstline=0;
 
-	asort($array_match_file_to_database);
+	// Load source fields in input file
+	$fieldssource=array(
+		1=>array('name'=>'aa','example1'=>'val1','example2'=>'val2'),
+		2=>array('name'=>'bb','example1'=>'valb1','example2'=>'valb2'),
+		3=>array('name'=>'cc','example1'=>'valc1','example2'=>'valc2'),
+/*		4=>array('name'=>'dd','example1'=>'valc1','example2'=>'valc2'),
+		5=>array('name'=>'ee','example1'=>'valc1','example2'=>'valc2'),
+		6=>array('name'=>'ff','example1'=>'valc1','example2'=>'valc2'),
+		7=>array('name'=>'gg','example1'=>'valc1','example2'=>'valc2'),
+		8=>array('name'=>'hh','example1'=>'valc1','example2'=>'valc2'),
+		9=>array('name'=>'ii','example1'=>'valc1','example2'=>'valc2'),
+*/	);
+
+	ksort($array_match_file_to_database);
+	//var_dump($array_match_file_to_database);
 
 	$param='&format='.$format.'&datatoimport='.$datatoimport.'&filetoimport='.urlencode($filetoimport);
 
@@ -994,20 +1081,33 @@ if ($step == 5 && $datatoimport)
 	print '<tr><td>';
 	print $langs->trans("TablesTarget");
 	print '</td><td>';
-	$listtables='';
-	print $listables?$listables:$langs->trans("Error");
+	$listtables=array();
+	foreach($array_match_file_to_database as $code=>$label)
+	{
+		//var_dump($fieldssource);
+		if ($code > sizeof($fieldssource)) continue;
+		//print $code.'-'.$label;
+		$alias=eregi_replace('\..*$','',$label);
+		$listtables[$alias]=$objimport->array_import_tables[0][$alias];
+	}
+	print sizeof($listtables)?(join(',',$listtables)):$langs->trans("Error");
 	print '</td></tr>';
 
 	// Fields imported
 	print '<tr><td>';
 	print $langs->trans("FieldsTarget").'</td><td>';
-	$listfields='';
+	$listfields=array();
+	$i=0;
 	foreach($array_match_file_to_database as $code=>$label)
 	{
-		$listfields.=($listfields?',':'');
-		$listfields.=$langs->trans($objimport->array_import_fields[0][$code]);
+		$i++;
+		//var_dump($fieldssource);
+		if ($code > sizeof($fieldssource)) continue;
+		//print $code.'-'.$label;
+		$alias=eregi_replace('\..*$','',$label);
+		$listfields[$i]=$label;
 	}
-	print $listfields?$listfields:$langs->trans("Error");
+	print sizeof($listfields)?(join(',',$listfields)):$langs->trans("Error");
 	print '</td></tr>';
 
 	print '</table>';
diff --git a/htdocs/langs/en_US/exports.lang b/htdocs/langs/en_US/exports.lang
index 5ccf7f948ff..87745f496f5 100644
--- a/htdocs/langs/en_US/exports.lang
+++ b/htdocs/langs/en_US/exports.lang
@@ -76,3 +76,5 @@ DoNotImportFirstLine=Do not import first line of source file
 NbOfSourceLines=Number of lines in source file
 NowClickToTestTheImport=Check import parameters you have defined. If they are correct, click on button "<b>%s</b>" to launch a simulation of import process (no data will be changed in your database, it's only a simulation for the moment)...
 RunSimulateImportFile=Launch the import simulation 
+FieldNeedSource=This fiels in database require a data from source file
+SomeMandatoryFieldHaveNoSource=Some mandatory fields have no source from data file
\ No newline at end of file
diff --git a/htdocs/langs/fr_FR/exports.lang b/htdocs/langs/fr_FR/exports.lang
index 9d3b440267c..80085bb531b 100644
--- a/htdocs/langs/fr_FR/exports.lang
+++ b/htdocs/langs/fr_FR/exports.lang
@@ -75,4 +75,6 @@ FieldsTarget=Champs cibles
 DoNotImportFirstLine=Ne pas importer la première ligne du fichier source
 NbOfSourceLines=Nombre de lignes du fichier source
 NowClickToTestTheImport=Vérifiez les paramètres d'import que vous avez défini. S'ils vous conviennent, cliquez sur le bouton "<b>%s</b>" pour lancer une simulation d'import (aucune donnée ne sera modifié, il s'agit dans un premier temps d'une simple simulation)...
-RunSimulateImportFile=Lancer la simulation d'import 
\ No newline at end of file
+RunSimulateImportFile=Lancer la simulation d'import
+FieldNeedSource=Ce champ en base requiert obligatoirement une donnée source
+SomeMandatoryFieldHaveNoSource=Certains champs obligatoires n'ont pas de champ source issus du fichier
\ No newline at end of file
-- 
GitLab