[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 #!/usr/bin/perl -w 2 3 use Se; 4 5 # Algorythme global 6 # ================= 7 if (!defined ($pid = fork)) { 8 die "Impossible de « forker » : $!\n"; 9 } elsif (! $pid) { 10 &traitement_fond; 11 exit(0); 12 } else { 13 &traitement; 14 exit(0); 15 } 16 17 sub traitement { 18 19 open ENCOURS, '>/tmp/EnCours.temp'; 20 print ENCOURS '1'; 21 close ENCOURS; 22 23 # Initialisation des variables 24 # ---------------------------- 25 # Uid de départ 26 $uidNumber = getFirstFreeUid(1000); 27 # Gid de départ 28 $gidNumber = getFirstFreeGid(2000); 29 30 &entete(STDOUT); 31 32 if (isAdmin() ne 'Y') { 33 print 34 "<p><strong>Erreur :</strong> vous n'avez pas les droits nécessaires", 35 " pour effectuer l'importation !</p>"; 36 &pdp(STDOUT); 37 exit(0); 38 } 39 40 # Récupération, Capitalisation et modification du préfixe 41 $prefix = param('prefix') or $prefix = ''; 42 $prefix =~ tr/a-z/A-Z/; 43 $prefix .= '_' unless ($prefix eq ''); 44 # Récupération de la valeur du flag ANNUELLE 45 $annuelle = param('annuelle'); 46 47 open INT, '>/tmp/gepInterface.temp' or warn 'Impossible d\'écrire dans /tmp !'; 48 print INT "$prefix:$annuelle"; 49 close INT; 50 51 # Lecture du fichier optionnel f_uid 52 $fichier = "f_uid"; 53 $nom = param("$fichier"); 54 if ($nom eq '') { 55 $FileUID = 0; 56 } else { 57 $FileUID = 1; 58 $fileHandle = upload("$fichier"); 59 open ( FICHTMP ,">/tmp/f_uid.temp"); 60 while (<$fileHandle>) { 61 chomp; 62 s/#.*//; # suppression des commentaires 63 s/\s+//; # suppression des blancs 64 next unless length; 65 if ( m/^(P?\d+)\|(.+)$/ ) { 66 print FICHTMP $1 . '|' . $2 . "\n"; 67 $Admin_UID{ $1 } = $2; 68 } 69 } 70 close FICHTMP; 71 } 72 73 # Écriture des fichiers dans /tmp 74 # =============================== 75 foreach $fichier (keys(%format)) { 76 # Vérification du passage d'un fichier 77 # ------------------------------------ 78 $nom = param("$fichier"); 79 if ($nom eq '') { 80 print STDOUT "Pas de fichier fourni pour ", 81 "<span class=\"filename\">$fichier</span> !<br>\n" if ($debug > 1); 82 $atLeastOneNotOk = 1; 83 } else { 84 $fileHandle = upload("$fichier"); 85 # Suppression des retours chariot 86 @gep = <$fileHandle>; 87 $gep = join "", @gep; 88 # Écriture du résultat dans un fichier texte temporaire 89 open ( FICHTMP ,">/tmp/ApacheCgi.temp"); 90 print FICHTMP $gep; 91 close FICHTMP; 92 # Appel de la fonction d'ecriture du fichier vérifié et nettoyé (utf8) 93 # -------------------------------------------------------------------- 94 $res = dbf2txt($fichier); 95 $atLeastOneNotOk = 1 if $res; 96 if ($debug > 1 && $res) { 97 $res =~ /^(\d+),(\d+),(\d+),(\d+)$/; 98 print 99 "Fichier <span class=\"filename\">$fichier</span> erroné :\n", 100 "<ul>\n", 101 "<li>Taille de l'entête : $1</li>\n", 102 "<li>Longueur d'un enregistrement : $2</li>\n", 103 "<li>Valeurs attendues : $3, $4</li>\n", 104 "</ul>\n"; 105 } 106 unless ($res) { 107 $ok{$fichier} = 1; 108 $atLeastOneOk = 1; 109 } 110 } 111 } 112 113 # Rapport concernant la validité des fichiers 114 # =========================================== 115 unless ($atLeastOneOk) { 116 print "<strong>Aucun fichier valide n'a été fourni !</strong>\n"; 117 pdp(STDOUT); 118 exit 0; 119 } 120 121 if ($debug > 1 && $atLeastOneOk) { 122 print 123 "<h2>Fichiers fournis et valides</h2>\n", 124 "<ul style=\"color: green\">\n"; 125 foreach $fichier (keys(%format)) { 126 print "<li><span class=\"filename\" style=\"color: #404044\">$fichier</span></li>\n" if $ok{$fichier}; 127 } 128 print "<li><span class=\"filename\" style=\"color: #404044\">f_uid</span> (" . keys( %Admin_UID ) . " uid lus)</li>\n" if $FileUID; 129 print "</ul>\n"; 130 } 131 if ($debug > 1 && $atLeastOneNotOk) { 132 print 133 "<h2>Fichiers non fournis ou invalides</h2>\n", 134 "<ul style=\"color: red\">\n"; 135 foreach $fichier (keys(%format)) { 136 print 137 "<li><span class=\"filename\" style=\"color: #404044\">", 138 "$fichier</span></li>\n" unless $ok{$fichier}; 139 } 140 print 141 "<li><span class=\"filename\" style=\"color: #404044\">", 142 "f_uid</span> (" . keys( %Admin_UID ) . " uid lus)</li>\n" unless $FileUID; 143 print "</ul>\n"; 144 } 145 146 print "<hr>\n" if ($debug > 1); 147 148 unless ($ok{'f_div'} or $ok{'f_ele'} or $ok{'f_men'} or $ok{'f_wind'} or $ok{'a_ind'}) { 149 print 150 "<strong>Aucun des fichiers fournis ne permet de créer ", 151 "une entrée <span class=\"abbrev\">ldap</span> !</strong>\n"; 152 pdp(STDOUT); 153 exit 0; 154 } 155 156 # Suppression des pages html résultats antérieures 157 # ------------------------------------------------ 158 if (-e "$documentRoot/$webDir/result*") { 159 unlink <$documentRoot/$webDir/result*> 160 or warn "Le serveur Web n'a pas les droits suffisants", 161 " sur le répertoire '$documentRoot/$webDir/result*'."; 162 } 163 164 # Écriture du fichier html provisoire de résultat final 165 # ----------------------------------------------------- 166 open (RES, ">$documentRoot/$webDir/result.$pid.html") 167 or die "Le serveur Web n'a pas les droits suffisants sur le répertoire '$documentRoot/$webDir/result*'."; 168 &entete(RES); 169 print RES 170 p('<span style="text-align: center; font-weight: bold">Traitement en cours...</span>'); 171 &pdp(RES); 172 close RES; 173 174 print "<h2>Création des entrées <span class=\"abbrev\">ldap</span> suivantes</h2>\n" if $debug; 175 if ($ok{'f_ele'} or $ok{'f_wind'} or $ok{'a_ind'}) { 176 print 177 "<strong>Comptes utilisateur :</strong>\n", 178 "<ul style=\"color: green\">\n" if $debug; 179 if ($ok{'f_ele'}) { 180 print "<li><span class=\"filename\" style=\"color: #404044\">Élèves</span></li>\n" if $debug; 181 $createEleves = 1; 182 } 183 if ($ok{'f_wind'}) { 184 print "<li><span class=\"filename\" style=\"color: #404044\">Profs</span></li>\n" if $debug; 185 $createProfs = 1; 186 } 187 if ($ok{'a_ind'}) { 188 print "<li><span class=\"filename\" style=\"color: #404044\">Administratifs</span></li>\n" if $debug; 189 } 190 print "</ul>\n"; 191 } 192 if ($ok{'f_div'} or $ok{'f_ele'} or $ok{'f_men'}) { 193 print 194 "<strong>Groupes :</strong>\n", 195 "<ul style=\"color: green\">\n" if $debug; 196 if ($ok{'f_div'} or $ok{'f_ele'}) { 197 print "<li><span class=\"filename\" style=\"color: #404044\">Classes</span></li>\n" if $debug; 198 print "<li><span class=\"filename\" style=\"color: #404044\">Équipes</span></li>\n" if $debug; 199 $createClasses = 1; $createEquipes = 1; 200 } 201 if ($ok{'f_men'}) { 202 print 203 "<li><span class=\"filename\" style=\"color: #404044\">Cours</span></li>\n", 204 "<li><span class=\"filename\" style=\"color: #404044\">Matières</span></li>\n" if $debug; 205 $createCours = 1; $createMatieres = 1; 206 } 207 print "</ul>\n"; 208 } 209 210 if ($atLeastOneNotOk) { 211 print "<h2>Problèmes liés à l'absence ou à l'invalidité de certains fichiers</h2>\n" if $debug; 212 if (! $ok{'f_ele'} or ! $ok{'f_wind'} or ! $ok{'a_ind'}) { 213 print 214 "<strong>Pas de création des comptes utilisateur :</strong>\n", 215 "<ul style=\"color: red\">\n" if $debug; 216 print "<li><span class=\"filename\" style=\"color: #404044\">Élèves</span></li>\n" 217 if (! $ok{'f_ele'} and $debug); 218 print "<li><span class=\"filename\" style=\"color: #404044\">Profs</span></li>\n" 219 if (! $ok{'f_wind'} and $debug); 220 print "<li><span class=\"filename\" style=\"color: #404044\">Administratifs</span></li>\n" 221 if (! $ok{'a_ind'} and $debug); 222 print "</ul>\n"; 223 } 224 if (! $ok{'f_div'} or ! $ok{'f_ele'} or ! $ok{'f_men'}) { 225 print 226 "<strong>Pas de création des groupes :</strong>\n", 227 "<ul style=\"color: red\">\n" if $debug; 228 print "<li><span class=\"filename\" style=\"color: #404044\">Classes</span></li>\n", 229 "<li><span class=\"filename\" style=\"color: #404044\">Équipes</span></li>\n" 230 if (! $ok{'f_div'} and ! $ok{'f_ele'} and $debug); 231 print 232 "<li><span class=\"filename\" style=\"color: #404044\">Cours</span></li>\n", 233 "<li><span class=\"filename\" style=\"color: #404044\">Matières</span></li>\n" 234 if (! $ok{'f_men'} and $debug); 235 print "</ul>\n"; 236 } 237 if ((! $ok{'f_div'} and ($createClasses or $createEquipes)) 238 or (! $ok{'f_tmt'} and $createMatieres) 239 or (! $ok{'f_gro'} and $createCours)) 240 { 241 print 242 "<strong>Pas de description disponible pour les groupes ", 243 "(utilisation du mnémonique) :</strong>\n", 244 "<ul style=\"color: red\">\n" if $debug; 245 if (! $ok{'f_div'}) { 246 print "<li><span class=\"filename\" style=\"color: #404044\">Classes</span></li>\n" 247 if ($createClasses and $debug); 248 print "<li><span class=\"filename\" style=\"color: #404044\">Équipes</span></li>\n" 249 if ($createEquipes and $debug); 250 } 251 print 252 "<li><span class=\"filename\" style=\"color: #404044\">Matières</span></li>\n" 253 if (! $ok{'f_tmt'} and $createMatieres and $debug); 254 print 255 "<li><span class=\"filename\" style=\"color: #404044\">Cours (en groupe)</span></li>\n" 256 if (! $ok{'f_gro'} and $createCours and $debug); 257 print "</ul>\n"; 258 } 259 if (($createCours and (! $ok{'f_eag'} or ! $ok{'f_ele'})) or ($createClasses and ! $ok{'f_ele'})) { 260 print 261 "<strong>Pas de membres pour les groupes :</strong>\n", 262 "<ul style=\"color: red\">\n" if $debug; 263 print 264 "<li><span class=\"filename\" style=\"color: #404044\">Cours ", 265 "(en classe complète)</span></li>\n" 266 if ($createCours and ! $ok{'f_eag'} and $ok{'f_ele'} and $debug); 267 print 268 "<li><span class=\"filename\" style=\"color: #404044\">Cours ", 269 "(en groupe)</span></li>\n" 270 if ($createCours and $ok{'f_eag'} and ! $ok{'f_ele'} and $debug); 271 print 272 "<li><span class=\"filename\" style=\"color: #404044\">Cours</span></li>\n" 273 if ($createCours and ! $ok{'f_eag'} and ! $ok{'f_ele'} and $debug); 274 print 275 "<li><span class=\"filename\" style=\"color: #404044\">Classes</span></li>\n" 276 if ($createClasses and ! $ok{'f_ele'} and ! $ok{'f_eag'} and $debug); 277 print 278 "<li><span class=\"filename\" style=\"color: #404044\">Équipes</span></li>\n" 279 if ($createEquipes and ! $ok{'f_wind'} and $debug); 280 print "</ul>\n"; 281 } 282 } 283 284 print 285 "<div style=\"font-size: large; text-align: left; padding: 1em;", 286 " background-color: lightgrey\">Le traitement pouvant être particulièrement long,", 287 " il va maintenant continuer en tâche de fond.<br>\n", 288 'Le rapport final d\'importation sera accessible à l\'adresse :<br>', 289 "<div style=\"text-align: center; font-family: monospace\">", 290 "<a href=\"$hostname/$webDir/result.$pid.html\">", 291 "$hostname/$webDir/result.$pid.html</a></div>\n", 292 "Une fois le traitement terminé, utilisez l'annuaire pour vérifier la validité des résultats.", 293 "</div>\n"; 294 295 &pdp(STDOUT); 296 297 unlink('/tmp/EnCours.temp'); 298 299 } 300 301 sub traitement_fond { 302 303 # Attente de fin du traitement préparatoire 304 sleep(3); 305 $inc=0; 306 while (1) { 307 sleep 1; 308 $inc++; 309 if ($inc == 30) { 310 # Fermeture des entrées/sorties standard 311 close(STDIN); close(STDOUT); 312 open RES, ">$documentRoot/$webDir/result.$$.html"; 313 &entete(RES); 314 print RES 315 "<strong>Le traitement préparatoire des fichiers GEP semble avoir été interrompu.<br>", 316 "Le traitement des fichiers prêts va tout de même se poursuivre.<br>", 317 "ATTENTION : votre importation risque de ne pas être complète...<br></strong>"; 318 last; 319 } 320 if (! -f '/tmp/EnCours.temp') { 321 # Fermeture des entrées/sorties standard 322 close(STDIN); close(STDOUT); 323 open RES, ">$documentRoot/$webDir/result.$$.html"; 324 &entete(RES); 325 print RES 326 "<strong>Le traitement préparatoire s'est terminé avec succès.</strong><br>"; 327 last; 328 } 329 } 330 331 open INT, '</tmp/gepInterface.temp'; 332 $ligne = <INT>; 333 ($prefix, $annuelle) = split /:/, $ligne; 334 close INT; 335 $prefix = '' unless $prefix; 336 337 annuelle() if ($annuelle); 338 339 # Création des entrées 340 # ==================== 341 342 # Initialisation des variables 343 # ---------------------------- 344 # Uid de départ 345 $uidNumber = getFirstFreeUid(1000); 346 # Gid de départ 347 $gidNumber = getFirstFreeGid(2000); 348 # Gid des utilisateurs LCS 349 $gid = $defaultgid; 350 351 unless 352 (-f '/tmp/f_ele.temp' 353 or -f '/tmp/f_wind.temp' 354 or -f '/tmp/a_ind.temp' 355 or -f '/tmp/f_men.temp' 356 or -f '/tmp/f_div.temp') { 357 exit 0; 358 } 359 360 # Connexion LDAP 361 # ============== 362 $lcs_ldap = Net::LDAP->new("$slapdIp"); 363 $lcs_ldap->bind( 364 dn => $adminDn, 365 password => $adminPw, 366 version => '3' 367 ); 368 369 # lecture de f_uid.temp 370 if (-f '/tmp/f_uid.temp') { 371 print RES "<h2>Lecture des identifiants 'uid' prédéfinis des utilisateurs </h2>\n<table>\n"; 372 open UID, '</tmp/f_uid.temp'; 373 while (<UID>) { 374 chomp; 375 s/#.*//; # suppression des commentaires 376 s/\s+//; # suppression des blancs 377 next unless length; 378 if ( m/^(P?\d+)\|(.+)$/ ) { 379 $Admin_UID{ $1 } = $2; 380 } 381 } 382 print RES "<tr><td>" . keys( %Admin_UID ) . " uid lus</td></tr>\n"; 383 print RES "</table>\n"; 384 close UID; 385 } 386 387 # Profs 388 # ----- 389 if (-f '/tmp/f_wind.temp') { 390 print RES "<h2>Création des comptes 'Profs'</h2>\n<table>\n"; 391 open PROFS, '</tmp/f_wind.temp'; 392 while (<PROFS>) { 393 chomp($ligne = $_); 394 ($numind, $nom, $prenom, $date, $sexe) = (split /\|/, $ligne); 395 $uniqueNumber = 'P' . $numind; 396 $res = processGepUser( $uniqueNumber, $nom, $prenom, $date, $sexe, 'undef' ); 397 print RES $res if ($res =~ /Cr/ or ($debug > 1 and $res !~ /Cr/)); 398 unless ($res =~ /conflits/) { 399 # Ajoût de l'uid au groupe Profs 400 $res = $lcs_ldap->search(base => "$profsDn", 401 scope => 'base', 402 filter => "memberUid=$uid"); 403 unless (($res->entries)[0]) { 404 $res = $lcs_ldap->modify( $profsDn, 405 add => { 'memberUid' => $uid } ); 406 warn $res->error if $res->code; 407 } 408 } 409 } 410 print RES "</table>\n"; 411 close PROFS; 412 } 413 414 # Administratifs 415 # -------------- 416 if (-f '/tmp/a_ind.temp') { 417 print RES "<h2>Création des comptes 'Administratifs'</h2>\n<table>\n"; 418 open ADMINS, '</tmp/a_ind.temp'; 419 while (<ADMINS>) { 420 chomp($ligne = $_); 421 ($numind, $nom, $prenom, $date, $sexe) = (split /\|/, $ligne); 422 $uniqueNumber = 'A' . $numind; 423 $res = processGepUser( $uniqueNumber, $nom, $prenom, $date, $sexe, 'undef' ); 424 print RES $res if ($res =~ /Cr/ or ($debug > 1 and $res !~ /Cr/)); 425 unless ($res =~ /conflits/) { 426 # Ajoût de l'uid au groupe Administratifs 427 $res = $lcs_ldap->search(base => "cn=Administratifs,$groupsDn", 428 scope => 'base', 429 filter => "memberUid=$uid"); 430 unless (($res->entries)[0]) { 431 $res = $lcs_ldap->modify( "cn=Administratifs,$groupsDn", 432 add => { 'memberUid' => $uid } ); 433 warn $res->error if $res->code; 434 } 435 } 436 } 437 print RES "</table>\n"; 438 close ADMINS; 439 } 440 441 # Classes 442 # ------- 443 if (-f '/tmp/f_div.temp') { 444 print RES "<h2>Création des groupes 'Classe' et 'Equipe'</h2>\n<table>\n"; 445 open DIV, '</tmp/f_div.temp'; 446 while (<DIV>) { 447 chomp($ligne = $_); 448 ($divcod, $divlib, $profUniqueNumber) = (split/\|/, $ligne); 449 $profUniqueNumber = 'P' . $profUniqueNumber; 450 $divcod =~ s/\s/_/; 451 $divlib = normalize($divlib,4); 452 $libelle{$divcod} = $divlib; 453 $res = $lcs_ldap->search(base => "$peopleDn", 454 scope => 'one', 455 filter => "employeeNumber=$profUniqueNumber"); 456 $profPrincUid = ''; 457 if (($res->entries)[0]) { 458 $profPrincUid = (($res->entries)[0])->get_value('uid'); 459 } 460 # Recherche de l'existence de la classe 461 $res = $lcs_ldap->search(base => "cn=Classe_$prefix$divcod,$groupsDn", 462 scope => 'base', 463 filter => "cn=*"); 464 if (($res->entries)[0]) { 465 if (! (($res->entries)[0])->get_value('description') and $divlib) { 466 print RES "<tr><td><strong><tt>$divcod</tt> :</strong></td><td>Mise à jour de la description du groupe 'Classe' : <em>$divlib</em></td></tr>\n" if $debug > 1; 467 $res2 = $lcs_ldap->modify( "cn=Classe_$prefix$divcod,$groupsDn", 468 add => { description => $divlib } ); 469 warn $res2->error if $res2->code; 470 } 471 } else { 472 $gidNumber = getFirstFreeGid($gidNumber); 473 @classEntry = ( 474 'cn', "Classe_$prefix$divcod", 475 'objectClass', 'top', 476 'objectClass', 'posixGroup', 477 'gidNumber', $gidNumber, 478 ); 479 push @classEntry, ('description', $divlib) if $divlib; 480 $res = $lcs_ldap->add( "cn=Classe_$prefix$divcod,$groupsDn", 481 attrs => \@classEntry ); 482 warn $res->error if $res->code; 483 print RES "<tr><td><strong><tt>$divcod</tt> :</strong></td><td>Création du groupe 'Classe' <em>$divlib</em></td></tr>\n" if $debug; 484 } 485 # Recherche de l'existence de l'équipe 486 $res = $lcs_ldap->search(base => "cn=Equipe_$prefix$divcod,$groupsDn", 487 scope => 'base', 488 filter => "cn=*"); 489 if (($res->entries)[0]) { 490 if (! (($res->entries)[0])->get_value('description') and $divlib) { 491 print RES "<tr><td><strong><tt>$divcod</tt> :</strong></td><td>Mise à jour de la description du groupe 'Equipe' : <em>$divlib</em></td></tr>\n" if $debug > 1; 492 $res2 = $lcs_ldap->modify( "cn=Equipe_$prefix$divcod,$groupsDn", 493 add => { description => $divlib } ); 494 warn $res2->error if $res2->code; 495 } 496 if (! (($res->entries)[0])->get_value('owner') and $profPrincUid) { 497 print RES "<tr><td><strong><tt>$divcod</tt> :</strong></td><td>Mise à jour du propriétaire du groupe 'Equipe' : <em>$divlib</em></td></tr>\n" if $debug > 1; 498 $res2 = $lcs_ldap->modify( "cn=Equipe_$prefix$divcod,$groupsDn", 499 add => { owner => "uid=$profPrincUid,$peopleDn" } ); 500 warn $res2->error if $res2->code; 501 } 502 next; 503 } else { 504 @equipeEntry = ( 505 'cn', "Equipe_$prefix$divcod", 506 'objectClass', 'top', 507 'objectClass', 'groupOfNames', 508 'member', '' 509 ); 510 push @equipeEntry, ('description', $divlib) if $divlib; 511 push @equipeEntry, ('owner', "uid=$profPrincUid,$peopleDn") if $profPrincUid; 512 $res = $lcs_ldap->add( "cn=Equipe_$prefix$divcod,$groupsDn", 513 attrs => \@equipeEntry ); 514 warn $res->error if $res->code; 515 print RES "<tr><td><strong><tt>$divcod</tt> :</strong></td><td>Création du groupe 'Equipe' <em>$divlib</em></td></tr>\n" if $debug > 1; 516 } 517 } 518 print RES "</table>\n"; 519 } 520 521 # Eleves 522 # ----- 523 if (-f '/tmp/f_ele.temp') { 524 print RES "<h2>Création des comptes 'Eleves'"; 525 print RES " <span style=\"font-size: small\">(et des groupes 'Classes' et 'Equipes' associés)</span>" 526 unless (-f '/tmp/f_div.temp'); 527 print RES "</h2>\n<table>\n"; 528 open ELEVES, '</tmp/f_ele.temp'; 529 while (<ELEVES>) { 530 chomp($ligne = $_); 531 ($uniqueNumber, $nom, $prenom, $date, $sexe, $divcod) = (split /\|/, $ligne); 532 $divcod =~ s/\s/_/g; 533 next if $divcod eq ''; 534 unless (-f '/tmp/f_div.temp') { 535 # Création des classes 536 $res = $lcs_ldap->search(base => "cn=Classe_$prefix$divcod,$groupsDn", 537 scope => 'base', 538 filter => "cn=*"); 539 unless (($res->entries)[0]) { 540 $gidNumber = getFirstFreeGid($gidNumber); 541 @classEntry = ( 542 'cn', "Classe_$prefix$divcod", 543 'objectClass', 'top', 544 'objectClass', 'posixGroup', 545 'gidNumber', $gidNumber, 546 ); 547 $res = $lcs_ldap->add( "cn=Classe_$prefix$divcod,$groupsDn", 548 attrs => \@classEntry ); 549 warn $res->error if $res->code; 550 } 551 # Création des Équipes 552 $res = $lcs_ldap->search(base => "cn=Equipe_$prefix$divcod,$groupsDn", 553 scope => 'base', 554 filter => "cn=*"); 555 unless (($res->entries)[0]) { 556 @equipeEntry = ( 557 'cn', "Equipe_$prefix$divcod", 558 'objectClass', 'top', 559 'objectClass', 'groupOfNames', 560 'member', '' 561 ); 562 $res = $lcs_ldap->add( "cn=Equipe_$prefix$divcod,$groupsDn", 563 attrs => \@equipeEntry ); 564 warn $res->error if $res->code; 565 } 566 } 567 $res = processGepUser($uniqueNumber, $nom, $prenom, $date, $sexe, 'undef'); 568 print RES $res if ($res =~ /Cr/ or ($debug > 1 and $res !~ /Cr/)); 569 unless ($res =~ /conflits/) { 570 # Ajoût de l'uid au groupe Eleves 571 $res = $lcs_ldap->search(base => "$elevesDn", 572 scope => 'base', 573 filter => "memberUid=$uid"); 574 unless (($res->entries)[0]) { 575 $res = $lcs_ldap->modify( 576 $elevesDn, 577 add => { 'memberUid' => $uid } 578 ); 579 warn $res->error if $res->code; 580 } 581 # Remplissage des classes 582 $res = $lcs_ldap->search(base => "cn=Classe_$prefix$divcod,$groupsDn", 583 scope => 'base', 584 filter => "memberUid=$uid"); 585 unless (($res->entries)[0]) { 586 $res = $lcs_ldap->modify( 587 "cn=Classe_$prefix$divcod,$groupsDn", 588 add => { 'memberUid' => $uid } 589 ); 590 warn $res->error if $res->code; 591 } 592 } 593 } 594 print RES "</table>"; 595 close ELEVES; 596 } 597 598 # Analyse du fichier F_TMT.DBF 599 # ---------------------------- 600 if (-f '/tmp/f_tmt.temp') { 601 print RES "<h2>Analyse du fichier de matières</h2>\n<table>\n" if $debug > 1; 602 open F_TMT, "</tmp/f_tmt.temp"; 603 while (<F_TMT>) { 604 chomp ($ligne = $_); 605 ($matimn, $matill) = (split/\|/, $ligne); 606 $matimn =~ s/\s/_/g; 607 if ($matill) { 608 $matill = normalize($matill,0); 609 # Alimentation du tableau %libelle 610 $libelle{$matimn} = $matill; 611 print RES "<tr><td>Matière <tt><strong>$matimn</strong></tt> :</td><td>Libellé : <em>$libelle{$matimn}</em></td></tr>\n" if $debug > 1; 612 } 613 } 614 close F_TMT; 615 print RES "</table>\n" if $debug > 1; 616 } 617 618 # Analyse du fichier F_GRO.DBF 619 # ---------------------------- 620 if (-f '/tmp/f_gro.temp') { 621 print RES "<h2>Analyse du fichier de groupes</h2>\n<table>\n" if $debug > 1; 622 open F_GRO, "</tmp/f_gro.temp"; 623 while (<F_GRO>) { 624 chomp ($ligne = $_); 625 ($grocod, $grolib) = (split/\|/, $ligne); 626 $grocod =~ s/\s/_/g; 627 if ($grolib) { 628 $grolib = normalize($grolib,0); 629 # Alimentation du tableau %libelle 630 $libelle{$grocod} = $grolib; 631 print RES "<tr><td>Groupe <tt><strong>$grocod</strong></tt> :</td><td>Libellé : <em>$libelle{$grocod}</em></td></tr>\n" if $debug > 1; 632 } 633 } 634 close F_GRO; 635 print RES "</table>\n" if $debug > 1; 636 } 637 638 # Analyse du fichier F_EAG.DBF 639 # ---------------------------- 640 if (-f '/tmp/f_eag.temp') { 641 print RES "<h2>Analyse du fichier des élèves par groupe</h2>\n<table>\n" if $debug > 1; 642 open F_EAG, "</tmp/f_eag.temp"; 643 while (<F_EAG>) { 644 chomp ($ligne = $_); 645 ($uniqueNumber, $grocod) = (split/\|/, $ligne); 646 $grocod =~ s/\s/_/g; 647 # Alimentation du tableau %member associant un code classe 648 # ou groupe avec une liste d'uid (login) d'élèves 649 $res = $lcs_ldap->search(base => "$peopleDn", 650 scope => 'one', 651 filter => "employeeNumber=$uniqueNumber"); 652 if (($res->entries)[0]) { 653 $uid = (($res->entries)[0])->get_value('uid'); 654 $member{$grocod} .= "$uid "; 655 print RES "<tr><td>Élève <tt><strong>$uid</strong></tt> :</td><td>Groupe : <em><tt>$grocod</tt></em></td></tr>\n" if $debug > 1; } 656 } 657 close F_EAG; 658 print RES "</table>\n" if $debug > 1; 659 } 660 661 # Analyse du fichier F_MEN 662 # ------------------------ 663 if (-f '/tmp/f_men.temp') { 664 open F_MEN, "</tmp/f_men.temp"; 665 print RES "<h2>Création des groupes 'Cours' et 'Matiere'</h2>\n<table>\n"; 666 while (<F_MEN>) { 667 chomp ($ligne = $_); 668 ($matimn, $elstco, $uniqueNumber) = (split/\|/, $ligne); 669 $matimn =~ s/\s/_/g; 670 $elstco =~ s/\s/_/g; 671 # Génération du nom du cours (mnémoniqueMatière_codeGroupe) 672 $cours = $matimn . '_' . $elstco; 673 if ($uniqueNumber) { 674 $uniqueNumber = 'P' . $uniqueNumber; 675 $res = $lcs_ldap->search(base => "$peopleDn", 676 scope => 'one', 677 filter => "employeeNumber=$uniqueNumber"); 678 if (($res->entries)[0]) { 679 $profUid = (($res->entries)[0])->get_value('uid'); 680 } else { 681 $profUid = ''; 682 } 683 } else { 684 $profUid = ''; 685 } 686 if ($libelle{$matimn}) { 687 $description = $libelle{$matimn}; 688 } else { 689 $description = $matimn; 690 } 691 if ($libelle{$elstco}) { 692 $description .= " / " . $libelle{$elstco}; 693 } else { 694 $description .= " / " . $elstco; 695 } 696 $res = $lcs_ldap->search(base => "cn=Cours_$prefix$cours,$groupsDn", 697 scope => 'base', 698 filter => "objectClass=*"); 699 if (($res->entries)[0]) { 700 # Mise à jour le cas échéant de la description 701 if ((($res->entries)[0]->get_value('description') =~ /$matimn/ 702 and $description !~ /$matimn/) 703 or (($res->entries)[0]->get_value('description') =~ /$elstco/ 704 and $description !~ /$elstco/)) { 705 $res2 = $lcs_ldap->modify( "cn=Cours_$prefix$cours,$groupsDn", 706 replace => { description => $description } ); 707 warn $res2->error if $res2->code; 708 print RES "<tr><td>Cours <span class=\"abbrev\">gep</span> <strong>$cours</strong> : </td><td>Mise à jour de la description du groupe 'Cours'</td></tr>\n" if $debug > 1; 709 } 710 } else { 711 $gidNumber = getFirstFreeGid($gidNumber); 712 @coursEntry = ( 713 'cn', "Cours_$prefix$cours", 714 'objectClass', 'top', 715 'objectClass', 'posixGroup', 716 'gidNumber', $gidNumber, 717 'description', $description, 718 ); 719 push @coursEntry, ('memberUid', $profUid) if $profUid; 720 $res = $lcs_ldap->add( "cn=Cours_$prefix$cours,$groupsDn", 721 attrs => \@coursEntry ); 722 warn $res->error if $res->code; 723 print RES "<tr><td>Cours <span class=\"abbrev\">gep</span> <strong>$cours</strong> : </td><td>Création du groupe 'Cours'</td></tr>\n" if $debug; 724 } 725 # Ajout du prof le cas échéant 726 if ($profUid) { 727 $res = $lcs_ldap->search(base => "cn=Cours_$prefix$cours,$groupsDn", 728 scope => 'base', 729 filter => "memberUid=$profUid"); 730 if (! ($res->entries)[0]) { 731 $res = $lcs_ldap->modify( "cn=Cours_$prefix$cours,$groupsDn", 732 add => { memberUid => $profUid } ); 733 warn $res->error if $res->code; 734 } 735 } 736 # Ajout des autres membres du cours 737 $res = $lcs_ldap->search(base => "cn=Classe_$prefix$elstco,$groupsDn", 738 scope => 'base', 739 filter => "cn=*"); 740 if ($member{$elstco}) { 741 # Cas d'un groupe 742 chop($members = $member{$elstco}); 743 foreach $member (split / /, $members) { 744 $res = $lcs_ldap->search(base => "cn=Cours_$prefix$cours,$groupsDn", 745 scope => 'base', 746 filter => "memberUid=$member"); 747 if (! ($res->entries)[0]) { 748 $res = $lcs_ldap->modify( "cn=Cours_$prefix$cours,$groupsDn", 749 add => { memberUid => $member } ); 750 warn $res->error if $res->code; 751 } 752 print RES "<tr><td>Cours <span class=\"abbrev\">gep</span> <strong>$cours</strong> : </td><td>Ajoût des élèves du groupe</td></tr>\n" if $debug > 1; 753 } 754 } else { 755 # cas d'une classe 756 $res = $lcs_ldap->search(base => "cn=Classe_$prefix$elstco,$groupsDn", 757 scope => 'base', 758 filter => "objectClass=*"); 759 if (($res->entries)[0]) { 760 @members = ($res->entries)[0]->get_value('memberUid'); 761 foreach $member (@members) { 762 $res = $lcs_ldap->search(base => "cn=Cours_$prefix$cours,$groupsDn", 763 scope => 'base', 764 filter => "memberUid=$member"); 765 if (! ($res->entries)[0]) { 766 $res = $lcs_ldap->modify( "cn=Cours_$prefix$cours,$groupsDn", 767 add => { memberUid => $member } ); 768 warn $res->error if $res->code; 769 } 770 } 771 } 772 } 773 774 if ($profUid) { 775 # Remplissage de l'équipe pédagogique de la classe 776 $res = $lcs_ldap->search(base => "cn=Equipe_$prefix$elstco,$groupsDn", 777 scope => 'base', 778 filter => "objectClass=*"); 779 if (($res->entries)[0]) { 780 $res = $lcs_ldap->search(base => "cn=Equipe_$prefix$elstco,$groupsDn", 781 scope => 'base', 782 filter => "member=uid=$profUid,$peopleDn"); 783 unless (($res->entries)[0]) { 784 $res = $lcs_ldap->modify( "cn=Equipe_$prefix$elstco,$groupsDn", 785 add => { member => "uid=$profUid,$peopleDn" } ); 786 warn $res->error if $res->code; 787 } 788 } 789 # Remplissage et/ou création du GroupOfNames Matiere 790 # Si la matière n'existe pas encore 791 $res = $lcs_ldap->search(base => "cn=Matiere_$prefix$matimn,$groupsDn", 792 scope => 'base', 793 filter => "objectClass=*"); 794 if (! ($res->entries)[0]) { 795 @matiereEntry = ( 796 'cn', "Matiere_$prefix$matimn", 797 'objectClass', 'top', 798 'objectClass', 'groupOfNames', 799 'member', '', 800 ); 801 push @matiereEntry, ('description', $libelle{$matimn}) if $libelle{$matimn}; 802 $res = $lcs_ldap->add( "cn=Matiere_$prefix$matimn,$groupsDn", 803 attrs => \@matiereEntry ); 804 } elsif (! ($res->entries)[0]->get_value('description') and $libelle{$matimn}) { 805 # Maj Libellé Matière 806 $res = $lcs_ldap->modify( "cn=Matiere_$prefix$matimn,$groupsDn", 807 add => { description => $libelle{$matimn} } ); 808 warn $res->error if $res->code; 809 } 810 # Avec ses membres 811 $res = $lcs_ldap->search(base => "cn=Matiere_$prefix$elstco,$groupsDn", 812 scope => 'base', 813 filter => "member=uid=$profUid,$peopleDn"); 814 unless (($res->entries)[0]) { 815 $res = $lcs_ldap->modify( "cn=Matiere_$prefix$matimn,$groupsDn", 816 add => { member => "uid=$profUid,$peopleDn" } ); 817 } 818 } 819 } 820 print RES "</table>\n"; 821 close F_MEN; 822 } 823 824 unlink </tmp/*.temp>; 825 $lcs_ldap->unbind; 826 &pdp(RES); 827 close RES; 828 829 system ("/usr/bin/lynx --dump $documentRoot/$webDir/result.$$.html | mail $melsavadmin -s 'Importation GEP'"); 830 831 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Tue Mar 17 22:47:18 2015 | Cross-referenced by PHPXref 0.7.1 |