displayDescription($description); /** * */ // set_time_limit(3600); // if (isset($_POST['choice-import']) and $_POST['choice-import'] != "---") { $obj = $_POST['choice-import']; } elseif(isset($_GET['obj'])) { $obj = $_GET['obj']; } else { $obj = ""; } // if ($obj != "") { if (file_exists("../sql/".$f->phptype."/".$obj.".import.inc.php")) { include("../sql/".$f->phptype."/".$obj.".import.inc.php"); } elseif (file_exists("../sql/".$f->phptype."/".$obj.".import.inc")) { include("../sql/".$f->phptype."/".$obj.".import.inc"); } else { // $class = "error"; $message = _("L'objet est invalide."); $f->displayMessage($class, $message); // $obj = ""; } } // $error = false; /** * On liste les tables dans lesquelles l'import est possible */ $dir = getcwd(); $dir = substr($dir, 0, strlen($dir) - 4)."/sql/".$f->phptype."/"; $dossier = opendir($dir); $tab = array(); while ($entree = readdir($dossier)) { if (strstr($entree, "import")) { // Si l'extention du fichier $entree est .inc.php if (strpos($entree, ".inc.php")) $filext = 15; // Sinon on considere qu'elle est -> .inc (compatibilite) else $filext = 11; array_push($tab, array('file' => substr($entree, 0, strlen($entree) - $filext))); } } closedir($dossier); asort($tab); /** * */ // (defined("PATH_OPENMAIRIE") ? "" : define("PATH_OPENMAIRIE", "")); require_once PATH_OPENMAIRIE."formulairedyn.class.php"; /** * Formulaire de choix de la table dans laquelle realiser l'import */ // echo "\n
\n"; echo "
\n"; // echo "
\n"; // echo "\t"; echo _("Choix de la table d'import :"); echo "\n"; // $champs = array("choice-import"); // $form = new formulaire(NULL, 0, 0, $champs); // $form->setLib("choice-import", _("Table")); $form->setType("choice-import", "select"); $contenu = array( 0 => array(""), 1 => array("---"), ); foreach ($tab as $elem) { array_push($contenu[0], $elem['file']); array_push($contenu[1], $elem['file']); } $form->setSelect("choice-import", $contenu); if ($obj != "") { $form->setVal("choice-import", $obj); } // $form->entete(); $form->setOnchange("choice-import", "submit()"); $form->afficher($champs, 0, false, false); $form->enpied(); // echo "
\n"; echo "
\n"; echo "
\n"; /** * Formulaire d'import du fichier CSV */ if ($obj != "") { // echo "\n
\n"; echo "
\n"; // echo "
\n"; // echo "\t"; echo _("Import du fichier CSV :"); echo "\n"; /** * */ // if (isset($_POST['submit-csv-import'])) { /** * Validation du formulaire */ // if (isset($_POST['fic1']) && strpos($_POST['fic1'], "/") !== false) { // $error = true; $class = "error"; $message = _("Le fichier n'est pas correct."); $f->displayMessage($class, $message); } elseif (isset($_POST['fic1']) && $_POST['fic1'] == "") { // $error = true; $class = "error"; $message = _("Vous n'avez pas selectionne de fichier a importer."); $f->displayMessage($class, $message); } elseif (isset($_POST['fic1']) && !file_exists($f->getPathFolderTrs().$_POST['fic1'])) { // $error = true; $class = "error"; $message = _("Le fichier n'existe pas."); $f->displayMessage($class, $message); } // /** * Traitement de l'import */ // Si il n'y a pas d'erreur a la validation du formulaire if ($error == false) { // Composition du path vers le fichier $path = $f->getPathFolderTrs().$_POST['fic1']; // On ouvre le fichier en lecture $fichier = fopen($path, "r"); // Initialisation des variables $cpt = array("total" => 0, "rejet" => 0, "insert" => 0, "firstline" => 0, "empty" => 0); $rejet = ""; // On desactive l'auto-commit $f->db->autoCommit(false); // Boucle sur chaque ligne du fichier while (!feof($fichier)) { // Incrementation du compteur de lignes $cpt['total']++; // $firstline = ($cpt['total'] == 1 && $ligne1 == 1 ? true : false); if ($firstline == true) { $cpt['firstline']++; } // $correct = true; // $contenu = fgetcsv($fichier, 4096, $_POST['separateur']); // if (sizeof($contenu) > 1 && $contenu[0] != "") { // enregistrement vide (RC à la fin) // if ($firstline == false) { // foreach (array_keys($zone) as $champ) { // if ($zone[$champ] == "") { // valeur par defaut // $valF[$champ] = ""; // eviter le not null value // if (!isset($defaut[$champ])) { $defaut[$champ] = ""; } $valF[$champ] = $defaut[$champ]; } else { $valF[$champ] = $contenu[$zone[$champ]]; } // if (!isset($obligatoire[$champ])) { $obligatoire[$champ] = 0; } // if ($obligatoire[$champ] == 1 && $valF[$champ] == "") { // $correct = false; $cpt["rejet"]++; // Logger $f->addToLog("scr/import.php: REJET - "._("champ obligatoire vide")." - ".$cpt['total']." - ".$champ." ".$valF[$champ]." vide", EXTRA_VERBOSE_MODE); // Raison du rejet a ajouter dans le fichier rejet $msg = _("champ obligatoire vide")." : ".$champ." = ".$valF[$champ]; } // if (!isset($exist[$champ])) { $exist[$champ] = 0; } if ($exist[$champ] == 1) { // $sql = $sql_exist[$champ].$valF[$champ]; if (strrpos($sql_exist[$champ], "'") === strlen($sql_exist[$champ])-strlen("'")) { $sql .= "'"; } // $temp1 = $f->db->getOne($sql); // Logger $f->addToLog("scr/import.php: db->getone(\"".$sql."\");", VERBOSE_MODE); // $f->isDatabaseError($temp1); // if (!isset($temp1)) { // $correct = false; $cpt["rejet"]++; // Logger $f->addToLog("scr/import.php: REJET - "._("cle secondaire inexistante")." - ".$cpt['total']." - ".$champ." ".$valF[$champ]." inexistant", EXTRA_VERBOSE_MODE); // Raison du rejet a ajouter dans le fichier rejet $msg = _("cle secondaire inexistante")." : ".$champ." = ".$valF[$champ]; } } } // XXX Inutile //// On affiche un point toutes les dix lignes pour que l'utilisateur //// voit de l'animation //if ($cpt['total'] % 10 == 0) { // echo "."; //} // Insertion de la ligne dans la base de donnees if ($verrou == 1 && $correct == true) { // if ($id != "") { $valF[$id] = $f->db->nextId($table); } // $res= $f->db->autoExecute($table, $valF, DB_AUTOQUERY_INSERT); $cpt["insert"]++; // Logger $f->addToLog("scr/import.php: INSERT - ".$cpt['total']." - ".print_r($valF, true), EXTRA_VERBOSE_MODE); // $f->isDatabaseError($res); } } // Si il y a une erreur sur la ligne alors on constitue un fichier // de rejet que l'utilisateur corrigera if ($correct == false || $firstline == true) { // On initialise la ligne $ligne = ""; // On recompose la ligne avec les separateurs foreach ($contenu as $elem){ $ligne .= $elem.$_POST['separateur']; } // On ajoute une colonne erreur sur la premiere ligne if ($firstline == true) { $ligne .= "rejet"; } else { $ligne .= $msg; } // Suppression du dernier separateur //$ligne=substr($ligne,0,strlen($ligne)-1); // un ; en trop // Ajout du caractere de fin de ligne $rejet .= $ligne."\n"; } } else { $cpt["empty"]++; } } // Commit de la transaction $f->db->commit(); // Fermeture du fichier fclose($fichier); // $class = "ok"; $message = _("Resultat de l'import :")." "; $message .= $cpt["total"]." "._("ligne(s) dans le fichier")."
"; $message .= $cpt["empty"]." "._("ligne(s) vide(s)")."
"; $message .= $cpt["firstline"]." "._("ligne(s) d'entete")."
"; $message .= $cpt["insert"]." "._("ligne(s) importee(s)")."
"; $message .= $cpt["rejet"]." "._("ligne(s) rejetee(s)"); // if ($fic_rejet == 1 && $cpt["rejet"] != 0) { // $fichier = "import_".$obj."_".date("Ymd_Gis")."_rejet.txt"; $rejet=substr($rejet,0,strlen($rejet)-1); // un \n en trop $f->tmp ("../tmp/".$fichier, $rejet, false); // $class = "error"; $message .= " => "._("Fichier rejet").""; } $f->displayMessage($class, $message); } } // $champs = array("fic1", "separateur"); // $form = new formulaire(NULL, 0, 0, $champs); // $form->setLib("fic1", _("Fichier")); $form->setType("fic1", "upload"); $form->setTaille("fic1", 30); $form->setMax("fic1", 30); //if (isset($_POST['fic1'])) { // $form->setVal("fic1", $_POST['fic1']); //} // $form->setLib("separateur", _("Separateur")); $form->setType("separateur", "select"); $contenu = array( 0 => array(";", ",", ), 1 => array("; "._("(point-virgule)"), ", "._("(virgule)")), ); $form->setSelect("separateur", $contenu); //if (isset($_POST['separateur'])) { // $form->setVal("separateur", $_POST['separateur']); //} // $form->entete(); $form->afficher($champs, 0, false, false); $form->enpied(); // echo "\n\n"; echo "
\n"; echo "\n"; echo ""._("Retour")."\n"; echo "
\n"; echo "\n"; // echo "
\n"; echo "
\n"; echo "
\n"; } ?>