security_check(); if ($resultat_session == 'c') { header("Location: ../utilisateurs/mon_compte.php?change_mdp=yes"); die(); } else if ($resultat_session == '0') { header("Location: ../logout.php?auto=1"); die(); } // INSERT INTO `droits` VALUES ('/eleves/import_communes.php', 'V', 'F', 'F', 'V', 'F', 'F', 'F', 'F', 'Import des communes de naissance', ''); if (!checkAccess()) { header("Location: ../logout.php?auto=1"); die(); } $ele_lieu_naissance=getSettingValue("ele_lieu_naissance") ? getSettingValue("ele_lieu_naissance") : "n"; /* function extr_valeur($lig) { unset($tabtmp); $tabtmp=explode(">",my_ereg_replace("<",">",$lig)); return trim($tabtmp[2]); } function ouinon($nombre) { if($nombre==1) {return "O";}elseif($nombre==0) {return "N";}else {return "";} } function sexeMF($nombre) { //if($nombre==2) {return "F";}else {return "M";} if($nombre==2) {return "F";}elseif($nombre==1) {return "M";}else {return "";} } */ function affiche_debug($texte) { // Passer à 1 la variable pour générer l'affichage des infos de debug... $debug=0; if($debug==1) { echo "".$texte.""; flush(); } } // Initialisation du répertoire actuel de sauvegarde $dirname = getSettingValue("backup_directory"); function info_debug($texte) { global $step; global $dirname; $debug=0; if($debug==1) { //$fich_debug=fopen("/tmp/debug_maj_import2.txt","a+"); $fich_debug=fopen("../backup/".$dirname."/debug_import_communes.txt","a+"); fwrite($fich_debug,"$step;$texte;".time()."\n"); fclose($fich_debug); } } $csv_communes_complet=isset($_POST['csv_communes_complet']) ? $_POST['csv_communes_complet'] : (isset($_GET['csv_communes_complet']) ? $_GET['csv_communes_complet'] : NULL); // Etape... $step=isset($_POST['step']) ? $_POST['step'] : (isset($_GET['step']) ? $_GET['step'] : NULL); $parcours_diff=isset($_POST['parcours_diff']) ? $_POST['parcours_diff'] : NULL; $nb_parcours=isset($_POST['nb_parcours']) ? $_POST['nb_parcours'] : NULL; $stop=isset($_POST['stop']) ? $_POST['stop'] : (isset($_GET['stop']) ? $_GET['stop'] :'n'); //$style_specifique="responsables/maj_import2"; $gepiSchoolRne=getSettingValue("gepiSchoolRne") ? getSettingValue("gepiSchoolRne") : ""; $mysql_collate=getSettingValue("mysql_collate") ? getSettingValue("mysql_collate") : ""; $chaine_mysql_collate=""; if($mysql_collate!="") {$chaine_mysql_collate="COLLATE $mysql_collate";} //**************** EN-TETE ***************** $titre_page = "Import des communes de naissance"; require_once("../lib/header.inc.php"); //**************** FIN EN-TETE ***************** //debug_var(); echo "
";
echo "
Retour";
//echo "
NOTES
Le fichier CSV attendu doit avoir le format suivant :
n_com;dep;nom_commune
où n_com est le CODE_COMMUNE_INSEE, dep est le numéro de DEPARTEMENT et nom_commune, le nom de la commune.
Exemple : 27056;27;Bernay
Pour la France, vous pouvez télécharger un fichier ici : http://www.sylogix.org/attachments/download/1132/communes1209.csv.zip
Notez que l'import du fichier d'un bloc peut ensabler votre serveur.
Le scinder en plusieurs petits fichiers peut être utile.
L'upload du fichier a échoué.
\n"; echo "Les variables du php.ini peuvent peut-être expliquer le problème:
\n";
echo "post_max_size=$post_max_size
\n";
echo "upload_max_filesize=$upload_max_filesize
\n";
echo "
Le fichier aurait été uploadé... mais ne serait pas présent/conservé.
\n"; echo "Les variables du php.ini peuvent peut-être expliquer le problème:
\n";
echo "post_max_size=$post_max_size
\n";
echo "upload_max_filesize=$upload_max_filesize
\n";
echo "et le volume de ".$csv_file['name']." serait
\n";
echo "\$csv_file['size']=".volume_human($csv_file['size'])."
\n";
echo "
Le fichier a été uploadé.
\n"; // On va uploader le fichier CSV dans le tempdir de l'utilisateur (administrateur, ou scolarité pour les màj Sconet) $tempdir=get_user_temp_directory(); if(!$tempdir) { echo "Il semble que le dossier temporaire de l'utilisateur ".$_SESSION['login']." ne soit pas défini!?
\n"; // Il ne faut pas aller plus loin... // SITUATION A GERER } /* echo "\$csv_file['tmp_name']=".$csv_file['tmp_name']."Les variables du php.ini peuvent peut-être expliquer le problème:
\n";
echo "post_max_size=$post_max_size
\n";
echo "upload_max_filesize=$upload_max_filesize
\n";
echo "\$csv_file['size']=".volume_human($csv_file['size'])."
\n";
echo "
Erreur : ".$archive->errorInfo(true)."
\n"; require("../lib/footer.inc.php"); die(); } if(sizeof($list_file_zip)!=1) { echo "Erreur : L'archive contient plus d'un fichier.
\n"; require("../lib/footer.inc.php"); die(); } /* echo "\$list_file_zip[0]['filename']=".$list_file_zip[0]['filename']."
\n";
echo "\$list_file_zip[0]['size']=".$list_file_zip[0]['size']."
\n";
echo "\$list_file_zip[0]['compressed_size']=".$list_file_zip[0]['compressed_size']."
\$unzipped_max_filesize=".$unzipped_max_filesize."
\n"; if(($list_file_zip[0]['size']>$unzipped_max_filesize)&&($unzipped_max_filesize>0)) { echo "Erreur : La taille du fichier extrait (".$list_file_zip[0]['size']." octets) dépasse la limite paramétrée ($unzipped_max_filesize octets).
\n"; require("../lib/footer.inc.php"); die(); } $res_extract=$archive->extract(PCLZIP_OPT_PATH, "../temp/".$tempdir); if ($res_extract != 0) { echo "Le fichier uploadé a été dézippé.
\n"; $fichier_extrait=$res_extract[0]['filename']; //echo "Fichier extrait: ".$fichier_extrait."Echec de l'extraction de l'archive ZIP.
\n"; require("../lib/footer.inc.php"); die(); } } else { $res_copy=copy("$source_file" , "$dest_file"); } } else { $res_copy=copy("$source_file" , "$dest_file"); } //fin ajout prise en compte des fichiers ZIP //=============================================================== if(!$res_copy) { echo "La copie du fichier vers le dossier temporaire a échoué.
Vérifiez que l'utilisateur ou le groupe apache ou www-data a accès au dossier temp/$tempdir
La copie du fichier vers le dossier temporaire a réussi.
\n"; echo "Insertion des communes : "; $cpt=0; $fich=fopen($dest_file,"r"); while(!feof($fich)) { if($cpt>0) { echo ", "; } $ligne=trim(fgets($fich,4096)); //echo "
Ligne $i: $ligne
\n";
unset($tab);
$tab=explode(";",$ligne);
if((mb_strtolower($tab[0])!="n_com")&&(mb_strtoupper($tab[0])!="CODE_COMMUNE_INSEE")&&(isset($tab[2]))) {
$code_commune_insee=$tab[0];
$departement=$tab[1];
$commune=$tab[2];
//$sql="SELECT 1=1 FROM communes WHERE code_commune_insee='".mysqli_real_escape_string($GLOBALS['mysqli'], $code_commune_insee)."' AND departement='".mysqli_real_escape_string($GLOBALS['mysqli'], $departement)."' AND commune='".mysqli_real_escape_string($GLOBALS['mysqli'], $commune)."';";
$sql="SELECT 1=1 FROM communes WHERE code_commune_insee='".mysqli_real_escape_string($GLOBALS['mysqli'], $code_commune_insee)."';";
//echo "$sql
\n";
$test=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($test)>0) {
echo "".$commune;
if($departement!="") {
echo " ($departement)";
}
echo "";
}
else {
$sql="INSERT INTO communes SET code_commune_insee='".mysqli_real_escape_string($GLOBALS['mysqli'], $code_commune_insee)."', departement='".mysqli_real_escape_string($GLOBALS['mysqli'], $departement)."', commune='".mysqli_real_escape_string($GLOBALS['mysqli'], $commune)."';";
//echo "$sql
\n";
$insert=mysqli_query($GLOBALS["mysqli"], $sql);
if($insert) {
echo "".$commune;
if($departement!="") {
echo " ($departement)";
}
echo "";
}
else {
echo "".$commune;
if($departement!="") {
echo " ($departement)";
}
echo "";
}
}
$cpt++;
flush();
}
}
echo "
Terminé.
"; /* $sql="TRUNCATE TABLE tempo2;"; $res0=mysqli_query($GLOBALS["mysqli"], $sql); $sql="SELECT e.* FROM eleves e LEFT JOIN communes c ON c.code_commune_insee=e.lieu_naissance where c.code_commune_insee is NULL;"; $res=mysqli_query($GLOBALS["mysqli"], $sql); while($lig=mysqli_fetch_object($res)) { if($lig->lieu_naissance!='') { $sql="INSERT INTO tempo2 SET col1='$lig->login', col2='$lig->lieu_naissance';"; $res2=mysqli_query($GLOBALS["mysqli"], $sql); } } echo "\n"; //echo "Suite"; echo "Suite"; */ } } } require("../lib/footer.inc.php"); die(); } if(isset($step)) { if(($step==0)|| ($step==1)|| ($step==2) ) { echo "".$nb_lieu_nais_non_renseignes." lieu de naissance n'est pas renseigné : \n"; $lig=mysqli_fetch_object($res); echo casse_mot($lig->nom)." ".casse_mot($lig->prenom,'majf2'); echo "
\n"; } elseif($nb_lieu_nais_non_renseignes>1) { echo "".$nb_lieu_nais_non_renseignes." lieux de naissance ne sont pas renseignés : \n";
$cpt=0;
while($lig=mysqli_fetch_object($res)) {
if($cpt>0) {echo ", ";}
echo casse_mot($lig->nom)." ".casse_mot($lig->prenom,'majf2');
// Pour des tests... echo " (UPDATE eleves SET lieu_naissance='' WHERE login='$lig->login';)
";
$cpt++;
}
echo "
Effectuez une mise à jour depuis Sconet pour renseigner les code_commune_insee des lieux de naissance des élèves.
\n"; } echo "Tous les lieux de naissances saisis pour les élèves ont leur correspondant dans la table 'communes'.
\n"; require("../lib/footer.inc.php"); die(); } $sql="TRUNCATE TABLE tempo2;"; $res0=mysqli_query($GLOBALS["mysqli"], $sql); $retour_commune_manquante=""; $retour_commune_etrangere=""; $cpt=0; $cpt2=0; while($lig=mysqli_fetch_object($res)) { if($lig->lieu_naissance!='') { if(strstr($lig->lieu_naissance,'@')) { if($cpt2>0) {$retour_commune_etrangere.="Les lieux de naissance sont manquants pour "; echo $retour_commune_manquante; echo "
\n"; } else { echo "Tous les lieux de naissance dans une commune française sont renseignés.
\n"; } if($retour_commune_etrangere!='') { echo "Les lieux de naissance dans des communes étrangères sont :
\n"; echo ""; echo $retour_commune_etrangere; echo "
\n"; echo "Si ces lieux sont correctement renseignés, vous n'avez rien à faire.
Sinon... il faut attendre qu'une page soit développée pour remplir les lieux de naissance à l'étranger en dehors de la méthode 'Import Sconet'.
Vous allez importer les correspondances code_commune_insee/nom de commune depuis un fichier CSV.
Ce fichier est volumineux (la France compte quelques communes;o).
Il serait dommage de faire enfler inutilement votre base en la remplissant avec toutes les communes de France.
Cette page va donc parcourir le fichier, remplir une table temporaire et n'en retenir finalement que les communes correspondant à vos élèves.
Le fichier à fournir ci-dessous peut être téléchargé ici : http://www.sylogix.org/attachments/download/1132/communes1209.csv.zip
A FAIRE: proposer d'importer une bonne fois pour toutes les communes.
Signaler la taille de la table obtenue.
NOTES : La prise en compte, pour les lieux de naissance, des communes importées dépend du paramétrage dans la page de Configuration générale de 'ele_lieu_naissance'.
";
echo "Le paramétrage est actuellement ele_lieu_naissance=".getSettingValue('ele_lieu_naissance')."";
echo "
Il semble que le dossier temporaire de l'utilisateur ".$_SESSION['login']." ne soit pas défini!?
\n"; // Il ne faut pas aller plus loin... // SITUATION A GERER } $post_max_size=ini_get('post_max_size'); $upload_max_filesize=ini_get('upload_max_filesize'); $max_execution_time=ini_get('max_execution_time'); $memory_limit=ini_get('memory_limit'); $nblig=isset($_POST['nblig']) ? $_POST['nblig'] : (isset($_GET['nblig']) ? $_GET['nblig'] : 500); //if(!isset($_POST['step'])) { switch($step) { case 0: // Affichage des informations élèves echo "L'upload du fichier a échoué.
\n"; echo "Les variables du php.ini peuvent peut-être expliquer le problème:
\n";
echo "post_max_size=$post_max_size
\n";
echo "upload_max_filesize=$upload_max_filesize
\n";
echo "
Le fichier aurait été uploadé... mais ne serait pas présent/conservé.
\n"; echo "Les variables du php.ini peuvent peut-être expliquer le problème:
\n";
echo "post_max_size=$post_max_size
\n";
echo "upload_max_filesize=$upload_max_filesize
\n";
echo "et le volume de ".$csv_file['name']." serait
\n";
echo "\$csv_file['size']=".volume_human($csv_file['size'])."
\n";
echo "
Le fichier a été uploadé.
\n"; /* echo "\$csv_file['tmp_name']=".$csv_file['tmp_name']."Les variables du php.ini peuvent peut-être expliquer le problème:
\n";
echo "post_max_size=$post_max_size
\n";
echo "upload_max_filesize=$upload_max_filesize
\n";
echo "\$csv_file['size']=".volume_human($csv_file['size'])."
\n";
echo "
Erreur : ".$archive->errorInfo(true)."
\n"; require("../lib/footer.inc.php"); die(); } if(sizeof($list_file_zip)!=1) { echo "Erreur : L'archive contient plus d'un fichier.
\n"; require("../lib/footer.inc.php"); die(); } /* echo "\$list_file_zip[0]['filename']=".$list_file_zip[0]['filename']."
\n";
echo "\$list_file_zip[0]['size']=".$list_file_zip[0]['size']."
\n";
echo "\$list_file_zip[0]['compressed_size']=".$list_file_zip[0]['compressed_size']."
\$unzipped_max_filesize=".$unzipped_max_filesize."
\n"; if(($list_file_zip[0]['size']>$unzipped_max_filesize)&&($unzipped_max_filesize>0)) { echo "Erreur : La taille du fichier extrait (".$list_file_zip[0]['size']." octets) dépasse la limite paramétrée ($unzipped_max_filesize octets).
\n"; require("../lib/footer.inc.php"); die(); } $res_extract=$archive->extract(PCLZIP_OPT_PATH, "../temp/".$tempdir); if ($res_extract != 0) { echo "Le fichier uploadé a été dézippé.
\n"; $fichier_extrait=$res_extract[0]['filename']; //echo "Fichier extrait: ".$fichier_extrait."Echec de l'extraction de l'archive ZIP.
\n"; require("../lib/footer.inc.php"); die(); } } else { $res_copy=copy("$source_file" , "$dest_file"); } } else { $res_copy=copy("$source_file" , "$dest_file"); } //fin ajout prise en compte des fichiers ZIP //=============================================================== if(!$res_copy) { echo "La copie du fichier vers le dossier temporaire a échoué.
Vérifiez que l'utilisateur ou le groupe apache ou www-data a accès au dossier temp/$tempdir
La copie du fichier vers le dossier temporaire a réussi.
\n"; $sql="TRUNCATE TABLE tempo2;"; $res0=mysqli_query($GLOBALS["mysqli"], $sql); $sql="SELECT e.* FROM eleves e LEFT JOIN communes c ON c.code_commune_insee=e.lieu_naissance where c.code_commune_insee is NULL;"; $res=mysqli_query($GLOBALS["mysqli"], $sql); while($lig=mysqli_fetch_object($res)) { if($lig->lieu_naissance!='') { $sql="INSERT INTO tempo2 SET col1='$lig->login', col2='$lig->lieu_naissance';"; $res2=mysqli_query($GLOBALS["mysqli"], $sql); } } echo "\n"; //echo "Suite"; echo "Suite"; require("../lib/footer.inc.php"); die(); } } break; case 1: echo "Tranche $compteur/$nb_tranches :"; $src_file="../temp/".$tempdir."/communes.csv"; $dest_file="../temp/".$tempdir."/_communes.csv"; @unlink($dest_file); if(!rename($src_file,$dest_file)) { echo "
Erreur lors du traitement initial (renommage) du fichier communes.csv en _communes.csv
\n"; require("../lib/footer.inc.php"); die(); } echo " Lecture de $nblig lignes.\n"; $tab_ele=array(); $tab_lieu=array(); $sql="SELECT * FROM tempo2;"; $res=mysqli_query($GLOBALS["mysqli"], $sql); $cpt=0; while($lig=mysqli_fetch_object($res)) { $tab_ele[$cpt]=$lig->col1; $tab_lieu[$cpt]=$lig->col2; $cpt++; } $fin_fichier='n'; $temoin_trouve=0; // On ne va lire/traiter que les 100 premières lignes du fichier // Le fichier en compte 38894... ça fait 389 passages si une commune recherchée est à la fin... $fich=fopen($dest_file,"r"); for($i=0;$i<$nblig;$i++) { if(feof($fich)) { $fin_fichier='y'; break; } $ligne=trim(fgets($fich,4096)); //echo "Ligne $i: $ligne
\n";
unset($tab);
$tab=explode(";",$ligne);
$code_commune_insee=$tab[0];
if(in_array($code_commune_insee,$tab_lieu)) {
// Effectuer le traitement
$delais=3000;
$departement=$tab[1];
$commune=$tab[2];
if($temoin_trouve==0) {echo "
";}
echo "Lieu de naissance trouvé : $code_commune_insee -> $commune
\n";
$sql="INSERT INTO communes SET code_commune_insee='$code_commune_insee', departement='$departement', commune='".addslashes($commune)."';";
//echo "$sql
\n";
$insert=mysqli_query($GLOBALS["mysqli"], $sql);
$sql="DELETE FROM tempo2 WHERE col2='$code_commune_insee';";
//echo "$sql
\n";
$del=mysqli_query($GLOBALS["mysqli"], $sql);
$temoin_trouve++;
}
}
$sql="SELECT 1=1 FROM tempo2;";
$res=mysqli_query($GLOBALS["mysqli"], $sql);
$nb_eleves_a_traiter=mysqli_num_rows($res);
if($fin_fichier=='y') {
fclose($fich);
if($nb_eleves_a_traiter==0) {
echo "
Tous les lieux de naissance ont été trouvés.
\n"; unlink($dest_file); } else { if($nb_eleves_a_traiter==1) { echo "Un lieu de naissance n'a pas été trouvé et le fichier communes.csv a été entièrement parcouru : \n"; } else { echo "
Le lieu de naissance n'a pas été trouvé pour $nb_eleves_a_traiter élèves et le fichier communes.csv a été entièrement parcouru (???) : "; } // A FAIRE: Lister les élèves $sql="SELECT e.login,e.nom,e.prenom,e.lieu_naissance, t.col2 FROM tempo2 t, eleves e WHERE e.login=t.col1 ORDER BY e.nom, e.prenom;"; $res=mysqli_query($GLOBALS["mysqli"], $sql); $cpt=0; if(mysqli_num_rows($res)==0) { echo "Aucun élève trouvé"; echo ".
\n"; } else { echo "| Élève | \n"; echo "Lieu | \n"; echo "
|---|---|
| ".casse_mot($lig->nom)." ".casse_mot($lig->prenom,'majf2')." | \n"; echo "$lig->col2 | \n"; echo "
NOTE : Les élèves nés dans une commune étrangère peuvent apparaître comme non trouvés dans le fichier de communes.
Si les informations entre parenthèses sont correctes, il n'y a pas lieu de s'alarmer.
Tous les lieux de naissance ont été trouvés.
\n"; unlink($dest_file); } else { if($nb_eleves_a_traiter==1) { echo "Un lieu de naissance doit encore être recherché.
\n"; } else { echo "Les lieux de naissance doivent encore être recherchés pour $nb_eleves_a_traiter élèves.
\n"; } // Si on n'a pas trouvé tous les lieux de naissance manquants: Générer le code javascript pour relancer la boucle $compteur++; echo "\n"; //echo "Suite"; echo "Suite"; } } break; } } echo "