function import_lecteurs($type_import) { global $dbh; global $text, $n, $t_xml; global $deflt2docs_location; //La structure du fichier xml doit être la suivante : /* <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <inm:Results productTitle="Superdoc Premium" productVersion="9.00" xmlns:inm="http://www.inmagic.com/webpublisher/query"> <inm:Recordset setCount="3"> <inm:Record setEntry="0"> <inm:Date-de-creation>10/01/2007</inm:Date-de-creation> <inm:ID>103</inm:ID> <inm:Centre>CDI LYC. MENDES FRANCE</inm:Centre> <inm:Numero-Emprunteur>00001987</inm:Numero-Emprunteur> <inm:Nom>SOULIER</inm:Nom> <inm:Prenom>ALAIN</inm:Prenom> <inm:Nom-Prenom>SOULIER ALAIN</inm:Nom-Prenom> <inm:Civilite /> <inm:Service>C.D.I.</inm:Service> <inm:Telephone /> <inm:Fax /> <inm:Mel /> <inm:Adresse /> <inm:Code-Postal /> <inm:Ville /> <inm:Pays /> <inm:Notes /> <inm:Exclusion-du-pret /> <inm:Groupe /> <inm:Droits /> <inm:DateFinDroits /> <inm:DroitEmprunteur>CDI LYC. MENDES FRANCE : Professeur</inm:DroitEmprunteur> </inm:Record>... */ //Upload du fichier if (!$_FILES['import_lec']['tmp_name']) { print "Cliquez sur Précédent et choisissez un fichier"; exit; } elseif (!move_uploaded_file($_FILES['import_lec']['tmp_name'], "./temp/" . basename($_FILES['import_lec']['tmp_name']))) { print "Le fichier n'a pas pu être téléchargé. Voici plus d'informations :<br />"; print_r($_FILES) . "<p>"; exit; } $fichier = @fopen("./temp/" . basename($_FILES['import_lec']['tmp_name']), "r"); if ($fichier) { print "<br /><br />"; print "Téléchargement du fichier effectué.<br /><hr />"; if ($type_import == 'maj_complete') { print "Suppression des groupes et lecteurs sans prêts.<br /><br />"; //Vide la table empr_groupe mysql_query("DELETE FROM empr_groupe", $dbh); //Supprime les lecteurs qui n'ont pas de prêts en cours $req_select_verif_pret = "SELECT id_empr FROM empr left join pret on id_empr=pret_idempr WHERE pret_idempr is null "; $select_verif_pret = mysql_query($req_select_verif_pret, $dbh); while ($verif_pret = mysql_fetch_array($select_verif_pret)) { //pour tous les lecteurs qui n'ont pas de pret en cours emprunteur::del_empr($verif_pret["id_empr"]); } } print "Traitement du fichier en cours.<br />"; $nb_ok = 0; $tab_err = array(); //definition header et footer $header = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><inm:results>"; $footer = "</inm:results>"; while (!feof($fichier)) { $buffer = ""; $deb = FALSE; $i = 0; while ($i < 200 && !feof($fichier)) { $line = fgets($fichier, 4096); if (strpos($line, "<inm:Recordset") === FALSE && strpos($line, "<inm:Record") !== FALSE) { $deb = TRUE; } if ($deb) { $buffer .= trim($line); } if (strpos($line, "</inm:Record>") !== FALSE) { $deb = FALSE; $i++; } } if ($buffer) { $buffer = $header . $buffer . $footer; //print "<hr />";print htmlentities($buffer,ENT_QUOTES,$charset);print "<br />"; //parse buffer $text = ''; $t_xml = array(); $n = 0; $encoding = "UTF-8"; $parser = xml_parser_create($encoding); xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, $encoding); xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, true); xml_set_element_handler($parser, "debutBalise", "finBalise"); xml_set_character_data_handler($parser, "texte"); if (!xml_parse($parser, $buffer, TRUE)) { die(sprintf("erreur XML %s à la ligne: %d", xml_error_string(xml_get_error_code($parser)), xml_get_current_line_number($parser))); } xml_parser_free($parser); //traitement des enregistrements for ($i = 1; $i <= count($t_xml); $i++) { //il faut au minimum un nom ou un prénom $t_xml[$i]['INM:NOM'][0] = trim($t_xml[$i]['INM:NOM'][0]); $t_xml[$i]['INM:PRENOM'][0] = trim($t_xml[$i]['INM:PRENOM'][0]); if ($t_xml[$i]['INM:NOM'][0] != '' || $t_xml[$i]['INM:PRENOM'][0] != '') { $e_data = array(); //print "Enregistrement n° ".$t_xml[$i]['INM:ID'][0]."<br />"; //localisation $e_data['location'] = $deflt2docs_location; //nom + prenom if ($t_xml[$i]['INM:NOM'][0] != '') { $e_data['nom'] = $t_xml[$i]['INM:NOM'][0]; $e_data['prenom'] = $t_xml[$i]['INM:PRENOM'][0]; } else { $e_data['nom'] = $t_xml[$i]['INM:NOM'][0]; $e_data['prenom'] = ''; } //cb emprunteur $t_xml[$i]['INM:NUMERO-EMPRUNTEUR'][0] = trim($t_xml[$i]['INM:NUMERO-EMPRUNTEUR'][0]); if ($t_xml[$i]['INM:NUMERO-EMPRUNTEUR'][0] != '') { $e_data['cb'] = trim($t_xml[$i]['INM:NUMERO-EMPRUNTEUR'][0]); } else { $q = "select (count(*)+1) from empr"; $r = mysql_query($q, $dbh); $x = mysql_result($r, 0, 0); $e_data['cb'] = 'PMB_' . $x; } //civilité $t_xml[$i]['INM:CIVILITE'][0] = substr(strtolower(trim($t_xml[$i]['INM:CIVILITE'][0])), 0, 2); switch ($t_xml[$i]['INM:CIVILITE'][0]) { case 'm.': case 'mr': case 'mo': $e_data['sexe'] = 1; break; case 'ma': case 'me': case 'ml': $e_data['sexe'] = 2; break; default: $e_data['sexe'] = 0; break; } //tel $e_data['tel1'] = trim($t_xml[$i]['INM:TELEPHONE'][0]); //mail $e_data['mail'] = trim($t_xml[$i]['INM:MEL'][0]); //adresse $e_data['adr1'] = trim($t_xml[$i]['INM:ADRESSE'][0]); //cp $e_data['cp'] = trim($t_xml[$i]['INM:CP'][0]); //ville $e_data['ville'] = trim($t_xml[$i]['INM:VILLE'][0]); //pays $e_data['pays'] = trim($t_xml[$i]['INM:PAYS'][0]); //notes $e_data['msg'] = trim($t_xml[$i]['INM:NOTES'][0]); //categorie $t_xml[$i]['INM:DROITEMPRUNTEUR'][0] = strtolower($t_xml[$i]['INM:DROITEMPRUNTEUR'][0]); $t_xml[$i]['INM:DROITEMPRUNTEUR'][0] = convert_diacrit($t_xml[$i]['INM:DROITEMPRUNTEUR'][0]); if (strpos($t_xml[$i]['INM:DROITEMPRUNTEUR'][0], "eleve") !== FALSE) { $e_data['categ'] = 1; } elseif (strpos($t_xml[$i]['INM:DROITEMPRUNTEUR'][0], "professeur") !== FALSE) { $e_data['categ'] = 2; } else { $e_data['categ'] = 3; } //code statistique $e_data['codestat'] = 1; //statut if (strtolower(trim($t_xml[$i]['INM:EXCLUSION-DU-PRET'][0])) == 'yes') { $e_data['statut'] = 2; } else { $e_data['statut'] = 1; } //date creation lecteur $t_xml[$i]['INM:DATE-DE-CREATION'][0] = trim($t_xml[$i]['INM:DATE-DE-CREATION'][0]); $e_data['date_creation'] = substr($t_xml[$i]['INM:DATE-DE-CREATION'][0], 6, 4) . '-' . substr($t_xml[$i]['INM:DATE-DE-CREATION'][0], 3, 2) . '-' . substr($t_xml[$i]['INM:DATE-DE-CREATION'][0], 0, 2); //date adhesion $e_data['date_adhesion'] = today(); //date fin adhesion $qda = "select duree_adhesion from empr_categ where id_categ_empr='" . $e_data['categ'] . "' "; $rda = mysql_query($qda, $dbh); if (mysql_num_rows($rda)) { $da = mysql_result($rda, 0, 0); } else { $da = 365; } $qd = "select date_add('" . $e_data['date_adhesion'] . "', INTERVAL " . $da . " DAY) "; $rd = mysql_query($qd, $dbh); if (mysql_num_rows($rd)) { $de = mysql_result($rd, 0, 0); } $e_data['date_expiration'] = $de; //login $e_data['login'] = emprunteur::do_login($e_data['nom'], $e_data['prenom']); //import lecteur $e = new emprunteur(); $e_id = 0; $e_id = $e->import($e_data); if ($e_id) { $nb_ok++; //groupe et champ perso service $t_xml[$i]['INM:SERVICE'][0] = trim($t_xml[$i]['INM:SERVICE'][0]); if ($t_xml[$i]['INM:SERVICE'][0]) { //groupe $qg = "select groupe_id from groupe where libelle_groupe='" . addslashes($t_xml[$i]['INM:SERVICE'][0]) . "' limit 1 "; $rg = mysql_query($qg, $dbh); if (mysql_num_rows($rg)) { $g_id = mysql_result($rg, 0, 0); } else { $qg = "insert into groupe set libelle_groupe='" . addslashes($t_xml[$i]['INM:SERVICE'][0]) . "' "; mysql_query($qg, $dbh); $g_id = mysql_insert_id($dbh); } $qeg = "insert into empr_groupe (empr_id,groupe_id) values ({$e_id},{$g_id}) "; mysql_query($qeg, $dbh); //champ perso service $qn = "select idchamp from empr_custom where name='service' "; $rn = mysql_query($qn, $dbh); if (mysql_num_rows($rn)) { $idc = mysql_result($rn, 0, 0); $requete = "select max(empr_custom_list_value*1) from empr_custom_lists where empr_custom_champ={$idc} "; $resultat = mysql_query($requete, $dbh); $max = @mysql_result($resultat, 0, 0); $n = $max + 1; $requete = "select empr_custom_list_value from empr_custom_lists where empr_custom_list_lib='" . addslashes($t_xml[$i]['INM:SERVICE'][0]) . "' and empr_custom_champ={$idc} "; $resultat = mysql_query($requete, $dbh); if (mysql_num_rows($resultat)) { $value = mysql_result($resultat, 0, 0); } else { $requete = "insert into empr_custom_lists (empr_custom_champ,empr_custom_list_value,empr_custom_list_lib) values({$idc},{$n},'" . addslashes($t_xml[$i]['INM:SERVICE'][0]) . "')"; mysql_query($requete, $dbh); $value = $n; $n++; } $requete = "insert into empr_custom_values (empr_custom_champ,empr_custom_origine,empr_custom_integer) values({$idc},{$e_id},{$value})"; mysql_query($requete, $dbh); } } } else { $tab_err[] = $t_xml[$i]['INM:ID'][0]; } } else { $tab_err[] = $t_xml[$i]['INM:ID'][0]; } } } } fclose($fichier); unlink("./temp/" . basename($_FILES['import_lec']['tmp_name'])); print "Traitement du fichier terminé."; print "<br /><hr />"; print "Nombre de lecteurs importés : " . $nb_ok . "<br />"; print "Nombre d'erreurs de traitement : " . count($tab_err) . "<br /><hr />"; if (count($tab_err)) { for ($i = 0; $i < count($tab_err); $i++) { print "Erreur à l'enregistrement n° " . $tab_err[$i] . "<br />"; } print "<hr /><br />"; } } else { print "Le fichier n'a pu être lu ."; } }