Import des lecteurs


(ajoute ou modifie les lecteurs présents dans le fichier)
(supprime les lecteurs non présents dans le fichier et qui n'ont pas de prêts en cours)

Import des prêts


Vous devez avoir importé les exemplaires et les lecteurs avant cette étape.
"; } function import_lecteurs($type_import){ global $dbh; global $text,$n,$t_xml; global $deflt2docs_location; //La structure du fichier xml doit être la suivante : /* 10/01/2007 103 CDI LYC. MENDES FRANCE 00001987 SOULIER ALAIN SOULIER ALAIN C.D.I. CDI LYC. MENDES FRANCE : Professeur ... */ //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 :
"; print_r($_FILES)."

"; exit; } $fichier = @fopen( "./temp/".basename($_FILES['import_lec']['tmp_name']), "r" ); if ($fichier) { print "

"; print "Téléchargement du fichier effectué.


"; if ($type_import == 'maj_complete') { Print "Suppression des groupes et lecteurs sans prêts.

"; //Vide la table empr_groupe pmb_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 = pmb_mysql_query($req_select_verif_pret,$dbh); while (($verif_pret = pmb_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.
"; $nb_ok=0; $tab_err=array(); //definition header et footer $header = ""; $footer = ""; while (!feof($fichier)) { $buffer=""; $deb=FALSE; $i=0; while($i<200 && !feof($fichier)) { $line= fgets($fichier, 4096); if( (strpos($line,"")!==FALSE) { $deb=FALSE; $i++; } } if($buffer) { $buffer=$header.$buffer.$footer; //print "
";print htmlentities($buffer,ENT_QUOTES,$charset);print "
"; //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]."
"; //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=pmb_mysql_query($q,$dbh); $x=pmb_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=pmb_mysql_query($qda,$dbh); if(pmb_mysql_num_rows($rda)) { $da=pmb_mysql_result($rda,0,0); }else { $da=365; } $qd="select date_add('".$e_data['date_adhesion']."', INTERVAL ".$da." DAY) "; $rd=pmb_mysql_query($qd,$dbh); if(pmb_mysql_num_rows($rd)) { $de=pmb_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=pmb_mysql_query($qg,$dbh); if(pmb_mysql_num_rows($rg)) { $g_id=pmb_mysql_result($rg,0,0); } else { $qg="insert into groupe set libelle_groupe='".addslashes($t_xml[$i]['INM:SERVICE'][0])."' "; pmb_mysql_query($qg,$dbh); $g_id=pmb_mysql_insert_id($dbh); } $qeg = "insert into empr_groupe (empr_id,groupe_id) values ($e_id,$g_id) "; pmb_mysql_query($qeg,$dbh); //champ perso service $qn="select idchamp from empr_custom where name='service' "; $rn=pmb_mysql_query($qn,$dbh); if (pmb_mysql_num_rows($rn)) { $idc=pmb_mysql_result($rn,0,0); $requete="select max(empr_custom_list_value*1) from empr_custom_lists where empr_custom_champ=$idc "; $resultat=pmb_mysql_query($requete,$dbh); $max=@pmb_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=pmb_mysql_query($requete,$dbh); if (pmb_mysql_num_rows($resultat)) { $value=pmb_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])."')"; pmb_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)"; pmb_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 "

"; print "Nombre de lecteurs importés : ".$nb_ok."
"; print "Nombre d'erreurs de traitement : ".count($tab_err)."

"; if(count($tab_err)) { for ($i=0;$i"; } print "

"; } } else { print "Le fichier n'a pu être lu ."; } } function import_prets() { global $dbh; global $text,$n,$t_xml; //La structure du fichier xml doit être la suivante : /* 42 CDI LYC. MENDES FRANCE 015246 CAREMANTRANT Stephanie 00001812 08/10/2004 14 22/10/2004 En prêt mardi 25 novembre 2008 jeudi 16 octobre 2008 ... ... */ //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 :
"; print_r($_FILES)."

"; exit; } $fichier = @fopen( "./temp/".basename($_FILES['import_lec']['tmp_name']), "r" ); if ($fichier) { print "

"; print "Téléchargement du fichier effectué.


"; print "Traitement du fichier en cours.
"; $nb_ok=0; $tab_err=array(); //definition header et footer $header = ""; $footer = ""; while (!feof($fichier)) { $buffer=""; $deb=FALSE; $i=0; while($i<200 && !feof($fichier)) { $line= fgets($fichier, 4096); if( (strpos($line,"")!==FALSE) { $deb=FALSE; $i++; } } if($buffer) { $buffer=$header.$buffer.$footer; //print "
";print htmlentities($buffer,ENT_QUOTES,$charset);print "
"; //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 un cb exemplaire,un cb lecteur, une date de pret, une date de retour prévu et pas de date de retour $t_xml[$i]['INM:CODE-BARRE-OBJET'][0]=trim($t_xml[$i]['INM:CODE-BARRE-OBJET'][0]); $t_xml[$i]['INM:CODE-EMPRUNTEUR'][0]=trim($t_xml[$i]['INM:CODE-EMPRUNTEUR'][0]); $t_xml[$i]['INM:DATE-DU-PRET'][0]=trim($t_xml[$i]['INM:DATE-DU-PRET'][0]); $t_xml[$i]['INM:RETOUR-PREVU-LE'][0]=trim($t_xml[$i]['INM:RETOUR-PREVU-LE'][0]); $t_xml[$i]['INM:DATE-DE-RETOUR'][0]=trim($t_xml[$i]['INM:DATE-DE-RETOUR'][0]); if( (!$t_xml[$i]['INM:DATE-DE-RETOUR'][0]) && ($t_xml[$i]['INM:CODE-BARRE-OBJET'][0]!='') && ($t_xml[$i]['INM:CODE-EMPRUNTEUR'][0]!='') && ($t_xml[$i]['INM:DATE-DU-PRET'][0]!='') && ($t_xml[$i]['INM:RETOUR-PREVU-LE'][0]!='') ) { //print "Enregistrement n° ".$t_xml[$i]['INM:NUMERO-DE-PRET'][0]."
"; //id exemplaire $expl_id=0; $q="select expl_id from exemplaires where expl_cb='".$t_xml[$i]['INM:CODE-BARRE-OBJET'][0]."' "; $r=pmb_mysql_query($q,$dbh); if(pmb_mysql_num_rows($r)) { $expl_id=pmb_mysql_result($r,0,0); } else { $tab_err[]=$t_xml[$i]['INM:NUMERO-DE-PRET'][0]; continue; } //id lecteur $empr_id=0; $q="select id_empr from empr where empr_cb='".$t_xml[$i]['INM:CODE-EMPRUNTEUR'][0]."' "; $r=pmb_mysql_query($q,$dbh); if(pmb_mysql_num_rows($r)) { $empr_id=pmb_mysql_result($r,0,0); } else { $tab_err[]=$t_xml[$i]['INM:NUMERO-DE-PRET'][0]; continue; } //date pret $date_pret=substr($t_xml[$i]['INM:DATE-DU-PRET'][0],6,4).'-'.substr($t_xml[$i]['INM:DATE-DU-PRET'][0],3,2).'-'.substr($t_xml[$i]['INM:DATE-DU-PRET'][0],0,2); //date retour $date_retour=substr($t_xml[$i]['INM:RETOUR-PREVU-LE'][0],6,4).'-'.substr($t_xml[$i]['INM:RETOUR-PREVU-LE'][0],3,2).'-'.substr($t_xml[$i]['INM:RETOUR-PREVU-LE'][0],0,2); // insert pret $q = "INSERT INTO pret SET pret_idempr = '".$empr_id."', pret_idexpl = '".$expl_id."', pret_date = '".$date_pret."', "; $q.= "pret_retour = '".$date_retour."', retour_initial = '".$date_retour."' "; pmb_mysql_query($q,$dbh); } else { $tab_err[]=$t_xml[$i]['INM:NUMERO-DE-PRET'][0]; } } } } fclose($fichier); unlink("./temp/".basename($_FILES['import_lec']['tmp_name'])); print "Traitement du fichier terminé."; print "

"; print "Nombre de lecteurs importés : ".$nb_ok."
"; print "Nombre d'erreurs de traitement : ".count($tab_err)."

"; if(count($tab_err)) { for ($i=0;$i"; } print "

"; } } else { print "Le fichier n'a pu être lu ."; } } //Méthodes du parser function debutBalise($parser, $tag, $att) { return; } function finBalise($parser, $tag) { global $text, $t_xml, $n; if ($text==='')return; switch($tag) { case 'INM:ID': case 'INM:NUMERO-DE-PRET' : $n=$n+1; $t_xml[$n]=array(); $t_xml[$n][$tag][]=$text; break; default : if ($n) $t_xml[$n][$tag][]=$text; break; } $text = ''; return; } function texte($parser, $data) { global $text; if (trim($data)) $text.= $data; return; } switch($action) { case 1: import_lecteurs($type_import); break; case 2: import_prets(); break; default: show_import_choix_fichier(); break; } ?>