[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3master/usr/lib/cgi-binse/ -> gep.cgi (source)

   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  }


Generated: Tue Mar 17 22:47:18 2015 Cross-referenced by PHPXref 0.7.1