diff --git a/htdocs/core/modules/modProduct.class.php b/htdocs/core/modules/modProduct.class.php index 79541c10105..5f44b843e1f 100644 --- a/htdocs/core/modules/modProduct.class.php +++ b/htdocs/core/modules/modProduct.class.php @@ -308,7 +308,6 @@ class modProduct extends DolibarrModules if (is_object($mysoc) && $mysoc->useNPR()) $this->import_fields_array[$r]=array_merge($this->import_fields_array[$r],array('sp.recuperableonly'=>'NPR')); if (is_object($mysoc) && $mysoc->useLocalTax(1)) $this->import_fields_array[$r]=array_merge($this->import_fields_array[$r],array('sp.localtax1_tx'=>'LT1', 'sp.localtax1_type'=>'LT1Type')); if (is_object($mysoc) && $mysoc->useLocalTax(2)) $this->import_fields_array[$r]=array_merge($this->import_fields_array[$r],array('sp.localtax2_tx'=>'LT2', 'sp.localtax2_type'=>'LT2Type')); - $this->import_convertvalue_array[$r]=array( 'sp.fk_soc'=>array('rule'=>'fetchidfromref','classfile'=>'/societe/class/societe.class.php','class'=>'Societe','method'=>'fetch','element'=>'ThirdParty'), 'sp.fk_product'=>array('rule'=>'fetchidfromref','classfile'=>'/product/class/product.class.php','class'=>'Product','method'=>'fetch','element'=>'Product') @@ -352,30 +351,19 @@ class modProduct extends DolibarrModules if (! empty($conf->global->MAIN_MULTILANGS)) { $r++; - /* FIXME Must be a dedicated import profil. Not working yet - $this->import_code[$r]=$this->rights_class.'_multiprice'; - $this->import_label[$r]="ProductTranslations"; + $this->import_code[$r]=$this->rights_class.'_languages'; + $this->import_label[$r]="ProductsOrServicesTranslations"; $this->import_icon[$r]=$this->picto; $this->import_entities_array[$r]=array(); // We define here only fields that use another icon that the one defined into import_icon - $this->import_tables_array[$r]['l']=MAIN_DB_PREFIX.'product_lang'; + $this->import_tables_array[$r]=array('l'=>MAIN_DB_PREFIX.'product_lang'); // multiline translation, one line per translation - $this->import_fields_array[$r]['l.lang']='Language'; - $this->import_fields_array[$r]['l.label']='TranslatedLabel'; - $this->import_fields_array[$r]['l.description']='TranslatedDescription'; - $this->import_fields_array[$r]['l.note']='TranslatedNote'; - $this->import_examplevalues_array[$r]['l.lang']='en_US'; - */ - // single line translation, one column per translation - /* - foreach($langs as $l) { - $this->import_tables_array[$r][$l] = MAIN_DB_PREFIX.'product_lang'; - $this->import_fields_array[$r][$l.'.label']=$l.'_label'; - $this->import_fields_array[$r][$l.'.description']=$l.'_description'; - $this->import_fields_array[$r][$l.'.note']=$l.'_note'; - $this->import_fieldshidden_array[$r][$l.'.lang']="'$l'"; - $this->import_fieldshidden_array[$r][$l.'.fk_product']='lastrowid-'.MAIN_DB_PREFIX.'product'; - } - */ + $this->import_fields_array[$r]=array('l.fk_product'=>'Ref', 'l.lang'=>'Language', 'l.label'=>'TranslatedLabel', 'l.description'=>'TranslatedDescription'); + //$this->import_fields_array[$r]['l.note']='TranslatedNote'; + $this->import_convertvalue_array[$r]=array( + 'l.fk_product'=>array('rule'=>'fetchidfromref','classfile'=>'/product/class/product.class.php','class'=>'Product','method'=>'fetch','element'=>'Product') + ); + $this->import_examplevalues_array[$r]=array('l.fk_product'=>'MyProductRef','l.lang'=>'en_US','l.label'=>'Label in en_US','l.description'=>'Desc in en_US'); + $this->import_updatekeys_array[$r]=array('l.fk_product'=>'Ref','l.lang'=>'Language'); } } diff --git a/htdocs/core/modules/modService.class.php b/htdocs/core/modules/modService.class.php index 961b031e232..eed1008ca34 100644 --- a/htdocs/core/modules/modService.class.php +++ b/htdocs/core/modules/modService.class.php @@ -133,8 +133,8 @@ class modService extends DolibarrModules // Menus //------- $this->menu = 1; // This module add menu entries. They are coded into menu manager. - - + + // Exports //-------- $r=0; @@ -315,6 +315,24 @@ class modService extends DolibarrModules 'pr.tva_tx'=>'19.6', 'pr.date_price'=>'2013-04-10'); } + + if (! empty($conf->global->MAIN_MULTILANGS)) + { + $r++; + $this->import_code[$r]=$this->rights_class.'_languages'; + $this->import_label[$r]="ProductsOrServicesTranslations"; + $this->import_icon[$r]=$this->picto; + $this->import_entities_array[$r]=array(); // We define here only fields that use another icon that the one defined into import_icon + $this->import_tables_array[$r]=array('l'=>MAIN_DB_PREFIX.'product_lang'); + // multiline translation, one line per translation + $this->import_fields_array[$r]=array('l.fk_product'=>'Ref', 'l.lang'=>'Language', 'l.label'=>'TranslatedLabel', 'l.description'=>'TranslatedDescription'); + //$this->import_fields_array[$r]['l.note']='TranslatedNote'; + $this->import_convertvalue_array[$r]=array( + 'l.fk_product'=>array('rule'=>'fetchidfromref','classfile'=>'/product/class/product.class.php','class'=>'Product','method'=>'fetch','element'=>'Product') + ); + $this->import_examplevalues_array[$r]=array('l.fk_product'=>'MyProductRef','l.lang'=>'en_US','l.label'=>'Label in en_US','l.description'=>'Desc in en_US'); + $this->import_updatekeys_array[$r]=array('l.fk_product'=>'Ref','l.lang'=>'Language'); + } } } diff --git a/htdocs/imports/import.php b/htdocs/imports/import.php index 0847f1c4262..1549e7124e0 100644 --- a/htdocs/imports/import.php +++ b/htdocs/imports/import.php @@ -225,7 +225,7 @@ if ($step == 3 && $datatoimport) $param='&datatoimport='.$datatoimport.'&format='.$format; if ($excludefirstline) $param.='&excludefirstline='.$excludefirstline; if ($endatlinenb) $param.='&endatlinenb='.$endatlinenb; - + $file = $conf->import->dir_temp . '/' . GETPOST('urlfile'); // Do not use urldecode here ($_GET and $_REQUEST are already decoded by PHP). $ret=dol_delete_file($file); if ($ret) setEventMessages($langs->trans("FileWasRemoved", GETPOST('urlfile')), null, 'mesgs'); @@ -362,7 +362,7 @@ if ($step == 1 || ! $datatoimport) print ''; $titleofmodule=$objimport->array_import_module[$key]->getName(); // Special cas for import common to module/services - if (in_array($objimport->array_import_code[$key], array('produit_supplierprices','produit_multiprice'))) $titleofmodule=$langs->trans("ProductOrService"); + if (in_array($objimport->array_import_code[$key], array('produit_supplierprices','produit_multiprice','produit_languages'))) $titleofmodule=$langs->trans("ProductOrService"); print $titleofmodule; print ''; //print $value; @@ -415,7 +415,7 @@ if ($step == 2 && $datatoimport) print ''; $titleofmodule=$objimport->array_import_module[0]->getName(); // Special cas for import common to module/services - if (in_array($objimport->array_import_code[0], array('produit_supplierprices','produit_multiprice'))) $titleofmodule=$langs->trans("ProductOrService"); + if (in_array($objimport->array_import_code[0], array('produit_supplierprices','produit_multiprice','produit_languages'))) $titleofmodule=$langs->trans("ProductOrService"); print $titleofmodule; print ''; @@ -429,9 +429,9 @@ if ($step == 2 && $datatoimport) print ''; print '
'; - + dol_fiche_end(); - + print '
'; print ''; @@ -450,7 +450,7 @@ if ($step == 2 && $datatoimport) $liste=$objmodelimport->liste_modeles($db); foreach($liste as $key) { - + print ''; print ''.img_picto_common($key,$objmodelimport->getPictoForKey($key)).''; $text=$objmodelimport->getDriverDescForKey($key); @@ -495,7 +495,7 @@ if ($step == 3 && $datatoimport) print '
'; print '
'; - + print ''; // Module @@ -503,7 +503,7 @@ if ($step == 3 && $datatoimport) print ''; @@ -516,11 +516,11 @@ if ($step == 3 && $datatoimport) print '
'; $titleofmodule=$objimport->array_import_module[0]->getName(); // Special cas for import common to module/services - if (in_array($objimport->array_import_code[0], array('produit_supplierprices','produit_multiprice'))) $titleofmodule=$langs->trans("ProductOrService"); + if (in_array($objimport->array_import_code[0], array('produit_supplierprices','produit_multiprice','produit_languages'))) $titleofmodule=$langs->trans("ProductOrService"); print $titleofmodule; print '
'; print '
'; - + print '
'; - + print ''.$langs->trans("InformationOnSourceFile").''; - + print '
'; print '
'; print ''; @@ -537,15 +537,15 @@ if ($step == 3 && $datatoimport) print '
'; print '
'; - + dol_fiche_end(); print '
'; - + print ''; print ''; print ''; - + print ''; print ''; print ''; @@ -553,7 +553,7 @@ if ($step == 3 && $datatoimport) print ''; print ''; print ''; - + print ''; $filetoimport=''; @@ -613,7 +613,7 @@ if ($step == 3 && $datatoimport) $modulepart='import'; $urlsource=$_SERVER["PHP_SELF"].'?step='.$step.$param.'&filetoimport='.urlencode($filetoimport); $relativepath=$file; - + print ''; print ''; print ''; @@ -772,9 +772,9 @@ if ($step == 4 && $datatoimport) print '
'.img_mime($file).''; @@ -665,9 +665,9 @@ if ($step == 4 && $datatoimport) header("Location: ".$_SERVER["PHP_SELF"].'?step=3'.$param.'&filetoimport='.urlencode($relativepath)); exit; } - + } - + if (GETPOST('update')) { $array_match_file_to_database=array(); } @@ -759,7 +759,7 @@ if ($step == 4 && $datatoimport) print ''; $titleofmodule=$objimport->array_import_module[0]->getName(); // Special cas for import common to module/services - if (in_array($objimport->array_import_code[0], array('produit_supplierprices','produit_multiprice'))) $titleofmodule=$langs->trans("ProductOrService"); + if (in_array($objimport->array_import_code[0], array('produit_supplierprices','produit_multiprice','produit_languages'))) $titleofmodule=$langs->trans("ProductOrService"); print $titleofmodule; print '
'; print ''; - + print '
'; - + print ''.$langs->trans("InformationOnSourceFile").''; print '
'; print '
'; @@ -820,9 +820,9 @@ if ($step == 4 && $datatoimport) print ''; print '
'; - + dol_fiche_end(); - + print '
'."\n"; @@ -873,7 +873,7 @@ if ($step == 4 && $datatoimport) $lefti=1; foreach ($array_match_file_to_database as $key => $val) { - + show_elem($fieldssource,$key,$val,$var); // key is field number in source file //print '> '.$lefti.'-'.$key.'-'.$val; $listofkeys[$key]=1; @@ -890,7 +890,7 @@ if ($step == 4 && $datatoimport) $num=count($fieldssource); while ($lefti <= $num) { - + $newkey=getnewkey($fieldssource,$listofkeys); show_elem($fieldssource,$newkey,'',$var); // key start after field number in source file //print '> '.$lefti.'-'.$newkey; @@ -913,7 +913,7 @@ if ($step == 4 && $datatoimport) print ''; foreach($fieldstarget as $code=>$label) { - + print ''; $i++; @@ -1148,7 +1148,7 @@ if ($step == 4 && $datatoimport) $var=false; while ($i < $num) { - + $obj = $db->fetch_object($resql); print ''; @@ -1248,9 +1248,9 @@ if ($step == 5 && $datatoimport) print '
'; print $obj->label; @@ -1213,16 +1213,16 @@ if ($step == 5 && $datatoimport) if ($excludefirstline) $param.='&excludefirstline='.$excludefirstline; if ($endatlinenb) $param.='&endatlinenb='.$endatlinenb; if (!empty($updatekeys)) $param.='&updatekeys[]='.implode('&updatekeys[]=', $updatekeys); - + llxHeader('',$langs->trans("NewImport"),'EN:Module_Imports_En|FR:Module_Imports|ES:Módulo_Importaciones'); $head = import_prepare_head($param,5); - + print ''; print ''; // step 5 print ''; // step 5 - + dol_fiche_head($head, 'step5', $langs->trans("NewImport"), -1); print '
'; @@ -1235,7 +1235,7 @@ if ($step == 5 && $datatoimport) print '
'; $titleofmodule=$objimport->array_import_module[0]->getName(); // Special cas for import common to module/services - if (in_array($objimport->array_import_code[0], array('produit_supplierprices','produit_multiprice'))) $titleofmodule=$langs->trans("ProductOrService"); + if (in_array($objimport->array_import_code[0], array('produit_supplierprices','produit_multiprice','produit_languages'))) $titleofmodule=$langs->trans("ProductOrService"); print $titleofmodule; print '
'; print ''; - + print '
'; - + print ''.$langs->trans("InformationOnSourceFile").''; print '
'; print '
'; @@ -1274,7 +1274,7 @@ if ($step == 5 && $datatoimport) print htmlentities($enclosure); print ''; } - + // File to import print ''.$langs->trans("FileToImport").''; print ''; @@ -1326,7 +1326,7 @@ if ($step == 5 && $datatoimport) if($action=='launchsimu') { if (count($updatekeys)) { - print $form->multiselectarray('updatekeysbis', $objimport->array_import_updatekeys[0], $updatekeys, 0, 0, '', 1, '', 'disabled'); + print $form->multiselectarray('updatekeysbis', $objimport->array_import_updatekeys[0], $updatekeys, 0, 0, '', 1, '80%', 'disabled'); } else { @@ -1351,16 +1351,16 @@ if ($step == 5 && $datatoimport) print_r($objimport->array_import_updatekeys); echo '';*/ print ''; - + print ''; print '
'; - + print '
'; print ''.$langs->trans("InformationOnTargetTables").''; print '
'; print '
'; - + print ''; //print ''; @@ -1426,7 +1426,7 @@ if ($step == 5 && $datatoimport) print '
'.$langs->trans("InformationOnTargetTables").'
'; print '
'; - + dol_fiche_end(); @@ -1488,10 +1488,10 @@ if ($step == 5 && $datatoimport) } if ($excludefirstline && ($sourcelinenb < $excludefirstline)) continue; if ($endatlinenb && ($sourcelinenb > $endatlinenb)) continue; - + // Run import $result=$obj->import_insert($arrayrecord,$array_match_file_to_database,$objimport,count($fieldssource),$importid,$updatekeys); - + if (count($obj->errors)) $arrayoferrors[$sourcelinenb]=$obj->errors; if (count($obj->warnings)) $arrayofwarnings[$sourcelinenb]=$obj->warnings; if (! count($obj->errors) && ! count($obj->warnings)) $nbok++; @@ -1505,7 +1505,7 @@ if ($step == 5 && $datatoimport) } $error=0; - + // Run the sql after import if defined //var_dump($objimport->array_import_run_sql_after[0]); if (! empty($objimport->array_import_run_sql_after[0]) && is_array($objimport->array_import_run_sql_after[0])) @@ -1515,14 +1515,14 @@ if ($step == 5 && $datatoimport) { $i++; $resqlafterimport=$db->query($sqlafterimport); - if (! $resqlafterimport) + if (! $resqlafterimport) { $arrayoferrors['none'][]=array('lib'=>$langs->trans("Error running final request: ".$sqlafterimport)); $error++; } } } - + $db->rollback(); // We force rollback because this was just a simulation. // Show OK @@ -1613,7 +1613,7 @@ if ($step == 5 && $datatoimport) print ''.$langs->trans("RunImportFile").''; } print ''; - + } print '
'; @@ -1668,8 +1668,10 @@ if ($step == 6 && $datatoimport) $head = import_prepare_head($param,6); - dol_fiche_head($head, 'step6', $langs->trans("NewImport")); + dol_fiche_head($head, 'step6', $langs->trans("NewImport"), -1); + print '
'; + print '
'; print ''; @@ -1678,7 +1680,7 @@ if ($step == 6 && $datatoimport) print ''; @@ -1690,10 +1692,13 @@ if ($step == 6 && $datatoimport) print ''; print '
'; $titleofmodule=$objimport->array_import_module[0]->getName(); // Special cas for import common to module/services - if (in_array($objimport->array_import_code[0], array('produit_supplierprices','produit_multiprice'))) $titleofmodule=$langs->trans("ProductOrService"); + if (in_array($objimport->array_import_code[0], array('produit_supplierprices','produit_multiprice','produit_languages'))) $titleofmodule=$langs->trans("ProductOrService"); print $titleofmodule; print '
'; - + print '
'; + print '
'; - - print ''.$langs->trans("InformationOnSourceFile").'
'; + + print ''.$langs->trans("InformationOnSourceFile").''; + print '
'; + print '
'; print ''; //print ''; @@ -1714,7 +1719,7 @@ if ($step == 6 && $datatoimport) print htmlentities($enclosure); print ''; } - + // File to import print ''; print ''; - + print '
'.$langs->trans("InformationOnSourceFile").'
'.$langs->trans("FileToImport").''; @@ -1745,12 +1750,15 @@ if ($step == 6 && $datatoimport) print ''; print ''; print '
'; + print '
'; print '
'; - print ''.$langs->trans("InformationOnTargetTables").'
'; + print ''.$langs->trans("InformationOnTargetTables").''; + print '
'; + print '
'; print ''; //print ''; @@ -1812,6 +1820,7 @@ if ($step == 6 && $datatoimport) print ''; print '
'.$langs->trans("InformationOnTargetTables").'
'; + print '
'; // Launch import $arrayoferrors=array(); @@ -1852,7 +1861,7 @@ if ($step == 6 && $datatoimport) // Run import $result=$obj->import_insert($arrayrecord,$array_match_file_to_database,$objimport,count($fieldssource),$importid,$updatekeys); - + if (count($obj->errors)) $arrayoferrors[$sourcelinenb]=$obj->errors; if (count($obj->warnings)) $arrayofwarnings[$sourcelinenb]=$obj->warnings; if (! count($obj->errors) && ! count($obj->warnings)) $nbok++; @@ -1866,10 +1875,10 @@ if ($step == 6 && $datatoimport) } if (count($arrayoferrors) > 0) $db->rollback(); // We force rollback because this was errors. - else + else { $error=0; - + // Run the sql after import if defined //var_dump($objimport->array_import_run_sql_after[0]); if (! empty($objimport->array_import_run_sql_after[0]) && is_array($objimport->array_import_run_sql_after[0])) @@ -1879,18 +1888,18 @@ if ($step == 6 && $datatoimport) { $i++; $resqlafterimport=$db->query($sqlafterimport); - if (! $resqlafterimport) + if (! $resqlafterimport) { $arrayoferrors['none'][]=array('lib'=>$langs->trans("Error running final request: ".$sqlafterimport)); $error++; } } } - + if (! $error) $db->commit(); // We can commit if no errors. else $db->rollback(); } - + dol_fiche_end(); @@ -1930,7 +1939,7 @@ function show_elem($fieldssource,$pos,$key,$var,$nostyle='') global $langs,$bc; $height='24'; - + print "\n\n\n"; print '
'."\n"; diff --git a/htdocs/langs/en_US/products.lang b/htdocs/langs/en_US/products.lang index 294611612b2..67c7fa81da0 100644 --- a/htdocs/langs/en_US/products.lang +++ b/htdocs/langs/en_US/products.lang @@ -271,6 +271,7 @@ WarningSelectOneDocument=Please select at least one document DefaultUnitToShow=Unit NbOfQtyInProposals=Qty in proposals ClinkOnALinkOfColumn=Click on a link of column %s to get a detailed view... +ProductsOrServicesTranslations=Products or services translation TranslatedLabel=Translated label TranslatedDescription=Translated description TranslatedNote=Translated notes