Import des lecteurs
";
}
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;
}
?>