[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3master/usr/lib/cgi-binse/ -> gep2.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(1001);
  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    # Écriture des fichiers dans /tmp
  52    # ===============================
  53    foreach $fichier (keys(%formatTxt)) {
  54      # Vérification du passage d'un fichier
  55      # ------------------------------------
  56      $nom = param("$fichier");
  57      if ($nom eq '') {
  58        print STDOUT "Pas de fichier fourni pour ",
  59      "<span class=\"filename\">$fichier</span> !<br>\n" if ($debug > 1);
  60        $atLeastOneNotOk = 1;
  61      } else {
  62        $fileHandle = upload("$fichier");
  63        open ( FICHTMP ,">/tmp/ApacheCgi.temp");
  64        while (<$fileHandle>) {
  65      print FICHTMP;
  66        }
  67        close FICHTMP;
  68        # Appel de la fonction d'ecriture du fichier vérifié et nettoyé (utf8)
  69        # --------------------------------------------------------------------
  70        $res = txtVerif($fichier);
  71        $atLeastOneNotOk = 1 if $res;
  72        print "Format du fichier <span class=\"filename\">$fichier</span> erroné<br>\n" if $res;
  73        unless ($res) {
  74       $ok{$fichier} = 1;
  75       $atLeastOneOk = 1;
  76        }
  77      }
  78    }
  79  
  80    # Rapport concernant la validité des fichiers
  81    # ===========================================
  82    unless ($atLeastOneOk) {
  83      print "<strong>Aucun fichier valide n'a été fourni !</strong>\n";
  84      pdp(STDOUT);
  85      exit 0;
  86    }
  87  
  88    if ($debug > 1 && $atLeastOneOk) {
  89      print
  90        "<h2>Fichiers fournis et valides</h2>\n",
  91        "<ul style=\"color: green\">\n";
  92      foreach $fichier (keys(%formatTxt)) {
  93        print "<li><span class=\"filename\" style=\"color: #404044\">$fichier</span></li>\n" if $ok{$fichier};
  94      }
  95      print "</ul>\n";
  96    }
  97    if ($debug > 1 && $atLeastOneNotOk) {
  98      print
  99        "<h2>Fichiers non fournis ou invalides</h2>\n",
 100        "<ul style=\"color: red\">\n";
 101      foreach $fichier (keys(%formatTxt)) {
 102        print
 103      "<li><span class=\"filename\" style=\"color: #404044\">",
 104      "$fichier</span></li>\n" unless $ok{$fichier};
 105      }
 106      print "</ul>\n";
 107    }
 108  
 109    # Suppression des pages html résultats antérieures
 110    # ------------------------------------------------
 111    unlink <$documentRoot/$webDir/result*>
 112      or warn "Le serveur Web n'a pas les droits suffisants",
 113        "sur le répertoire '$documentRoot/$webDir/result*'.";
 114  
 115    # Écriture du fichier html provisoire de résultat final
 116    # -----------------------------------------------------
 117    open (RES, ">$documentRoot/$webDir/result.$pid.html")
 118      or die "Le serveur Web n'a pas les droits suffisants sur le répertoire '$documentRoot/$webDir/result*'.";
 119    &entete(RES);
 120    print RES
 121      p('<span style="text-align: center; font-weight: bold">Traitement en cours...</span>');
 122    &pdp(RES);
 123    close RES;
 124  
 125    print "<h2>Création des entrées <span class=\"abbrev\">ldap</span> suivantes</h2>\n" if $debug;
 126    if ($ok{'f_ele'} or $ok{'f_wind'}) {
 127      print
 128        "<strong>Comptes utilisateur :</strong>\n",
 129        "<ul style=\"color: green\">\n" if $debug;
 130      if ($ok{'f_ele'}) {
 131        print "<li><span class=\"filename\" style=\"color: #404044\">Élèves</span></li>\n" if $debug;
 132        $createEleves = 1;
 133      }
 134      if ($ok{'f_wind'}) {
 135        print "<li><span class=\"filename\" style=\"color: #404044\">Profs</span></li>\n" if $debug;
 136        $createProfs = 1;
 137      }
 138      print "</ul>\n";
 139    }
 140    if ($ok{'f_div'} or $ok{'f_ele'} or $ok{'f_men'}) {
 141      print
 142        "<strong>Groupes :</strong>\n",
 143        "<ul style=\"color: green\">\n" if $debug;
 144      if ($ok{'f_div'} or $ok{'f_ele'}) {
 145        print "<li><span class=\"filename\" style=\"color: #404044\">Classes</span></li>\n" if $debug;
 146        print "<li><span class=\"filename\" style=\"color: #404044\">Équipes</span></li>\n" if $debug;
 147        $createClasses = 1; $createEquipes = 1;
 148      }
 149      if ($ok{'f_men'}) {
 150        print
 151      "<li><span class=\"filename\" style=\"color: #404044\">Cours</span></li>\n",
 152      "<li><span class=\"filename\" style=\"color: #404044\">Matières</span></li>\n" if $debug;
 153        $createCours = 1; $createMatieres = 1;
 154      }
 155      print "</ul>\n";
 156    }
 157  
 158    if ($atLeastOneNotOk) {
 159      print "<h2>Problèmes liés à l'absence ou à l'invalidité de certains fichiers</h2>\n" if $debug;
 160      if (! $ok{'f_ele'} or ! $ok{'f_wind'}) {
 161        print
 162      "<strong>Pas de création des comptes utilisateur :</strong>\n",
 163      "<ul style=\"color: red\">\n" if $debug;
 164        print "<li><span class=\"filename\" style=\"color: #404044\">Élèves</span></li>\n"
 165      if (! $ok{'f_ele'} and  $debug);
 166        print "<li><span class=\"filename\" style=\"color: #404044\">Profs</span></li>\n"
 167      if (! $ok{'f_wind'} and $debug);
 168        print "</ul>\n";
 169      }
 170      if (! $ok{'f_div'} or ! $ok{'f_ele'} or ! $ok{'f_men'}) {
 171        print
 172      "<strong>Pas de création des groupes :</strong>\n",
 173      "<ul style=\"color: red\">\n" if $debug;
 174        print "<li><span class=\"filename\" style=\"color: #404044\">Classes</span></li>\n",
 175      "<li><span class=\"filename\" style=\"color: #404044\">Équipes</span></li>\n"
 176        if (! $ok{'f_div'} and ! $ok{'f_ele'} and $debug);
 177        print
 178      "<li><span class=\"filename\" style=\"color: #404044\">Cours</span></li>\n",
 179      "<li><span class=\"filename\" style=\"color: #404044\">Matières</span></li>\n"
 180        if (! $ok{'f_men'} and $debug);
 181        print "</ul>\n";
 182      }
 183      if ((! $ok{'f_div'} and ($createClasses or $createEquipes)))
 184  #    or (! $ok{'f_tmt'} and $createMatieres)
 185  #    or (! $ok{'f_gro'} and $createCours))
 186        {
 187      print
 188        "<strong>Pas de description disponible pour les groupes ",
 189        "(utilisation du mnémonique) :</strong>\n",
 190        "<ul style=\"color: red\">\n" if $debug;
 191      if (! $ok{'f_div'}) {
 192        print "<li><span class=\"filename\" style=\"color: #404044\">Classes</span></li>\n"
 193          if ($createClasses and $debug);
 194        print "<li><span class=\"filename\" style=\"color: #404044\">Équipes</span></li>\n"
 195          if ($createEquipes and $debug);
 196      }
 197      print
 198        "<li><span class=\"filename\" style=\"color: #404044\">Matières</span></li>\n",
 199        " (limitation due à l'importation texte)."
 200          if ($createMatieres and $debug);
 201      print
 202        "<li><span class=\"filename\" style=\"color: #404044\">Cours</span></li>\n",
 203        " (limitation due à l'importation texte)."
 204          if ($createCours and $debug);
 205      print "</ul>\n";
 206        }
 207      if (($createCours and ! $ok{'f_ele'}) or ($createClasses and ! $ok{'f_ele'})) {
 208        print
 209      "<strong>Pas de membres pour les groupes :</strong>\n",
 210      "<ul style=\"color: red\">\n" if $debug;
 211        print
 212      "<li><span class=\"filename\" style=\"color: #404044\">Cours</span></li>\n"
 213        if ($createCours and $ok{'f_ele'} and $debug);
 214        print
 215      "<li><span class=\"filename\" style=\"color: #404044\">Équipes</span></li>\n"
 216        if ($createEquipes and ! $ok{'f_wind'} and $debug);
 217        print "</ul>\n";
 218      }
 219    }
 220  
 221    print
 222      "<div style=\"font-size: large; text-align: left; padding: 1em;",
 223      " background-color: lightgrey\">Le traitement pouvant être particulièrement long,",
 224      " il va maintenant continuer en tâche de fond.<br>\n",
 225      'Le rapport final d\'importation sera accessible à l\'adresse :<br>',
 226      "<div style=\"text-align: center; font-family: monospace\">",
 227      "<a href=\"$hostname/$webDir/result.$pid.html\">",
 228      "$hostname/$webDir/result.$pid.html</a></div>\n",
 229      "Une fois le traitement terminé, utilisez l'annuaire pour vérifier la validité des résultats.",
 230      "</div>\n";
 231  
 232    &pdp(STDOUT);
 233  
 234    unlink('/tmp/EnCours.temp');
 235  
 236  }
 237  
 238  sub traitement_fond {
 239  
 240    # Attente de fin du traitement préparatoire
 241    sleep(3);
 242    $inc=0;
 243    while (1) {
 244      sleep 1;
 245      $inc++;
 246      if ($inc == 30) {
 247        # Fermeture des entrées/sorties standard
 248        close(STDIN); close(STDOUT);
 249        open RES, ">$documentRoot/$webDir/result.$$.html";
 250        &entete(RES);
 251        print RES
 252      "<strong>Le traitement préparatoire des fichiers texte semble avoir été interrompu.<br>",
 253      "Le traitement des fichiers prêts va tout de même se poursuivre.<br>",
 254      "ATTENTION : votre importation risque de ne pas être complète...<br></strong>";
 255        last;
 256      }
 257      if (! -f '/tmp/EnCours.temp') {
 258        # Fermeture des entrées/sorties standard
 259        close(STDIN); close(STDOUT);
 260        open RES, ">$documentRoot/$webDir/result.$$.html";
 261        &entete(RES);
 262        print RES
 263      "<strong>Le traitement préparatoire s'est terminé avec succès.</strong><br>";
 264        last;
 265      }
 266    }
 267  
 268    open INT, '</tmp/gepInterface.temp';
 269    $ligne = <INT>;
 270    ($prefix, $annuelle) = split /:/, $ligne;
 271    close INT;
 272    $prefix = '' unless $prefix;
 273  
 274    annuelle() if ($annuelle);
 275  
 276    # Création des entrées
 277    # ====================
 278  
 279    # Initialisation des variables
 280    # ----------------------------
 281    # Uid de départ
 282    $uidNumber = getFirstFreeUid(1001);
 283    # Gid de départ
 284    $gidNumber = getFirstFreeGid(2000);
 285    # Gid des utilisateurs LCS/SE3
 286    $gid = $defaultgid;
 287    unless
 288      (-f '/tmp/f_ele.temp'
 289       or -f '/tmp/f_wind.temp'
 290       or -f '/tmp/f_men.temp'
 291       or -f '/tmp/f_div.temp') {
 292        exit 0;
 293      }
 294    # Connexion LDAP
 295    # ==============
 296    $lcs_ldap = Net::LDAP->new("$slapdIp");
 297    $lcs_ldap->bind(
 298              dn       => $adminDn,
 299              password => $adminPw,
 300              version  => '3'
 301             );
 302  
 303    # Profs
 304    # -----
 305    if (-f '/tmp/f_wind.temp') {
 306      print RES "<h2>Création des comptes 'Profs'</h2>\n<table>\n";
 307      open PROFS, '</tmp/f_wind.temp';
 308      while (<PROFS>) {
 309        chomp($ligne = $_);
 310        ($numind, $nom, $prenom, $date, $sexe)  = (split /\|/, $ligne);
 311        $uniqueNumber = $numind;
 312        $res = processGepUser( $uniqueNumber, $nom, $prenom, $date, $sexe, 'undef' );
 313        print RES $res if ($res =~ /Cr/ or ($debug > 1 and $res !~ /Cr/));
 314        unless ($res =~ /conflits/) {
 315      # Ajoût de l'uid au groupe Profs
 316      $res = $lcs_ldap->search(base     => "$profsDn",
 317                   scope    => 'base',
 318                   filter   => "memberUid=$uid");
 319      unless (($res->entries)[0]) {
 320        $res = $lcs_ldap->modify( $profsDn,
 321                      add => { 'memberUid' => $uid } );
 322      warn $res->error if $res->code;
 323      }
 324        }
 325      }
 326      print RES "</table>\n";
 327      close PROFS;
 328    }
 329  
 330    # Classes
 331    # -------
 332    if (-f '/tmp/f_div.temp') {
 333      print RES "<h2>Création des groupes 'Classe' et 'Equipe'</h2>\n<table>\n";
 334      open DIV, '</tmp/f_div.temp';
 335      while (<DIV>) {
 336        chomp($ligne = $_);
 337        ($divcod, $divlib, $profUniqueNumber) = (split/\|/, $ligne);
 338        $divcod =~ s/\s/_/;
 339        $divlib = normalize($divlib,4);
 340        $libelle{$divcod} = $divlib;
 341        $res = $lcs_ldap->search(base     => "$peopleDn",
 342                     scope    => 'one',
 343                     filter   => "employeeNumber=$profUniqueNumber");
 344        $profPrincUid = '';
 345        if (($res->entries)[0]) {
 346      $profPrincUid = (($res->entries)[0])->get_value('uid');
 347        }
 348        # Recherche de l'existence de la classe
 349        $res = $lcs_ldap->search(base     => "cn=Classe_$prefix$divcod,$groupsDn",
 350                     scope    => 'base',
 351                     filter   => "cn=*");
 352        if (($res->entries)[0]) {
 353      if (! (($res->entries)[0])->get_value('description') and $divlib) {
 354        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;
 355        $res2 = $lcs_ldap->modify( "cn=Classe_$prefix$divcod,$groupsDn",
 356                       add => { description => $divlib } );
 357        warn $res2->error if $res2->code;
 358      }
 359        } else {
 360      $gidNumber = getFirstFreeGid($gidNumber);
 361      @classEntry = (
 362                 'cn',          "Classe_$prefix$divcod",
 363                 'objectClass', 'top',
 364                 'objectClass', 'posixGroup',
 365                 'gidNumber',   $gidNumber,
 366                );
 367      push @classEntry, ('description', $divlib) if $divlib;
 368      $res = $lcs_ldap->add( "cn=Classe_$prefix$divcod,$groupsDn",
 369                     attrs => \@classEntry );
 370      warn $res->error if $res->code;
 371      print RES "<tr><td><strong><tt>$divcod</tt> :</strong></td><td>Création du groupe 'Classe' <em>$divlib</em></td></tr>\n" if $debug;
 372        }
 373        # Recherche de l'existence de l'équipe
 374        $res = $lcs_ldap->search(base     => "cn=Equipe_$prefix$divcod,$groupsDn",
 375                     scope    => 'base',
 376                     filter   => "cn=*");
 377        if (($res->entries)[0]) {
 378      if (! (($res->entries)[0])->get_value('description') and $divlib) {
 379        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;
 380        $res2 = $lcs_ldap->modify( "cn=Equipe_$prefix$divcod,$groupsDn",
 381                       add => { description => $divlib } );
 382        warn $res2->error if $res2->code;
 383      }
 384      if (! (($res->entries)[0])->get_value('owner') and $profPrincUid) {
 385        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;
 386        $res2 = $lcs_ldap->modify( "cn=Equipe_$prefix$divcod,$groupsDn",
 387                       add => { owner => "uid=$profPrincUid,$peopleDn" } );
 388        warn $res2->error if $res2->code;
 389      }
 390      next;
 391        } else {
 392      $gidNumber = getFirstFreeGid($gidNumber);
 393      @equipeEntry = (
 394                 'cn',          "Equipe_$prefix$divcod",
 395                 'objectClass', 'top',
 396                 'objectClass', 'posixGroup',
 397                 'gidNumber',   $gidNumber,
 398                );
 399  
 400      push @equipeEntry, ('description', $divlib) if $divlib;
 401      #push @equipeEntry, ('owner', "uid=$profPrincUid,$peopleDn") if $profPrincUid;
 402      $res = $lcs_ldap->add( "cn=Equipe_$prefix$divcod,$groupsDn",
 403                     attrs => \@equipeEntry );
 404      warn $res->error if $res->code;
 405      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;
 406        }
 407      }
 408      print RES "</table>\n";
 409    }
 410  
 411    # Eleves
 412    # -----
 413    if (-f '/tmp/f_ele.temp') {
 414      print RES "<h2>Création des comptes 'Eleves'";
 415      print RES " <span style=\"font-size: small\">(et des groupes 'Classes' et 'Equipes' associés)</span>"
 416        unless (-f '/tmp/f_div.temp');
 417      print RES "</h2>\n<table>\n";
 418      open ELEVES, '</tmp/f_ele.temp';
 419      while (<ELEVES>) {
 420        chomp($ligne = $_);
 421        ($uniqueNumber, $nom, $prenom, $date, $sexe, $divcod)  = (split /\|/, $ligne);
 422        $divcod =~ s/\s/_/g;
 423        next if $divcod eq '';
 424        unless (-f '/tmp/f_div.temp') {
 425      # Création des classes
 426      $res = $lcs_ldap->search(base     => "cn=Classe_$prefix$divcod,$groupsDn",
 427                   scope    => 'base',
 428                   filter   => "cn=*");
 429      unless (($res->entries)[0]) {
 430        $gidNumber = getFirstFreeGid($gidNumber);
 431        @classEntry = (
 432               'cn',          "Classe_$prefix$divcod",
 433               'objectClass', 'top',
 434               'objectClass', 'posixGroup',
 435               'gidNumber',   $gidNumber,
 436              );
 437        $res = $lcs_ldap->add( "cn=Classe_$prefix$divcod,$groupsDn",
 438                   attrs => \@classEntry );
 439        warn $res->error if $res->code;
 440      }
 441      # Création des Équipes
 442      $res = $lcs_ldap->search(base     => "cn=Equipe_$prefix$divcod,$groupsDn",
 443                   scope    => 'base',
 444                   filter   => "cn=*");
 445      unless (($res->entries)[0]) {
 446        @equipeEntry = (
 447               'cn',          "Equipe_$prefix$divcod",
 448               'objectClass', 'top',
 449               'objectClass', 'PosixGroup', );
 450  #             'objectClass', 'groupOfNames', );
 451  #leb             'member',      '' );
 452        $res = $lcs_ldap->add( "cn=Equipe_$prefix$divcod,$groupsDn",
 453                   attrs => \@equipeEntry );
 454        warn $res->error if $res->code;
 455      }
 456        }
 457         $res = processGepUser($uniqueNumber, $nom, $prenom, $date, $sexe, 'undef');
 458        print RES $res if ($res =~ /Cr/ or ($debug > 1 and $res !~ /Cr/));
 459        unless ($res =~ /conflits/) {
 460      # Ajoût de l'uid au groupe Eleves
 461      $res = $lcs_ldap->search(base     => "$elevesDn",
 462                   scope    => 'base',
 463                   filter   => "memberUid=$uid");
 464      unless (($res->entries)[0]) {
 465        $res = $lcs_ldap->modify(
 466                     $elevesDn,
 467                     add => { 'memberUid' => $uid }
 468                    );
 469        warn $res->error if $res->code;
 470      }
 471      # Remplissage des classes
 472      $res = $lcs_ldap->search(base     => "cn=Classe_$prefix$divcod,$groupsDn",
 473                   scope    => 'base',
 474                   filter   => "memberUid=$uid");
 475      unless (($res->entries)[0]) {
 476        $res = $lcs_ldap->modify(
 477                     "cn=Classe_$prefix$divcod,$groupsDn",
 478                     add => { 'memberUid' => $uid }
 479                    );
 480        warn $res->error if $res->code;
 481      }
 482        }
 483      }
 484      print RES "</table>";
 485      close ELEVES;
 486    }
 487  
 488    # Analyse du fichier F_MEN
 489    # ------------------------
 490    if (-f '/tmp/f_men.temp') {
 491      open F_MEN, "</tmp/f_men.temp";
 492      print RES "<h2>Création des groupes 'Cours' et 'Matiere'</h2>\n<table>\n";
 493      while (<F_MEN>) {
 494        chomp ($ligne = $_);
 495        ($matimn, $elstco, $uniqueNumber) = (split/\|/, $ligne);
 496        $matimn =~ s/\s/_/g;
 497        $elstco =~ s/\s/_/g;
 498        # Génération du nom du cours (mnémoniqueMatière_codeGroupe)
 499        $cours = $matimn . '_' . $elstco;
 500        if ($uniqueNumber) {
 501      $res = $lcs_ldap->search(base     => "$peopleDn",
 502                   scope    => 'one',
 503                   filter   => "employeeNumber=$uniqueNumber");
 504      if (($res->entries)[0]) {
 505        $profUid = (($res->entries)[0])->get_value('uid');
 506      }  else {
 507        $profUid = '';
 508      }
 509        } else {
 510      $profUid = '';
 511        }
 512        $description = $matimn;
 513        if ($libelle{$elstco}) {
 514      $description .= " / " . $libelle{$elstco};
 515        } else {
 516      $description .= " / " . $elstco;
 517        }
 518        $res = $lcs_ldap->search(base     => "cn=Cours_$prefix$cours,$groupsDn",
 519                     scope    => 'base',
 520                     filter   => "objectClass=*");
 521        if (($res->entries)[0]) {
 522      # Mise à jour le cas échéant de la description
 523      if (($res->entries)[0]->get_value('description') =~ /$elstco/ and $description !~ /$elstco/) {
 524        $res2 = $lcs_ldap->modify( "cn=Cours_$prefix$cours,$groupsDn",
 525                       replace => { description => $description } );
 526        warn $res2->error if $res2->code;
 527        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;
 528      }
 529        } else {
 530      $gidNumber = getFirstFreeGid($gidNumber);
 531      @coursEntry = (
 532                 'cn',          "Cours_$prefix$cours",
 533                 'objectClass', 'top',
 534                 'objectClass', 'posixGroup',
 535                 'gidNumber',   $gidNumber,
 536                 'description', $description,
 537                );
 538      push @coursEntry, ('memberUid', $profUid) if $profUid;
 539      $res = $lcs_ldap->add( "cn=Cours_$prefix$cours,$groupsDn",
 540                     attrs => \@coursEntry );
 541      warn $res->error if $res->code;
 542      print RES "<tr><td>Cours <strong>$cours</strong> : </td><td>Création du groupe 'Cours'</td></tr>\n" if $debug;
 543        }
 544        # Ajout du prof le cas échéant
 545        if ($profUid) {
 546      $res = $lcs_ldap->search(base     => "cn=Cours_$prefix$cours,$groupsDn",
 547                   scope    => 'base',
 548                   filter   => "memberUid=$profUid");
 549      if (! ($res->entries)[0]) {
 550        $res = $lcs_ldap->modify( "cn=Cours_$prefix$cours,$groupsDn",
 551                      add => { memberUid => $profUid } );
 552        warn $res->error if $res->code;
 553      }
 554        }
 555        # Ajout des autres membres du cours
 556  #leb      $res = $lcs_ldap->search(base     => "cn=Classe_$prefix$elstco,$groupsDn",
 557  #leb                   scope    => 'base',
 558  #leb                   filter   => "cn=*");
 559  #leb      if ($member{$elstco}) {
 560  #leb    # Cas d'un groupe
 561  #leb    chop($members = $member{$elstco});
 562  #leb     foreach $member (split / /, $members) {
 563  #leb      $res = $lcs_ldap->search(base     => "cn=Cours_$prefix$cours,$groupsDn",
 564  #leb                   scope    => 'base',
 565  #leb                   filter   => "memberUid=$member");
 566  #leb      if (! ($res->entries)[0]) {
 567  #leb        $res = $lcs_ldap->modify( "cn=Cours_$prefix$cours,$groupsDn",
 568  #leb                      add => { memberUid => $member } );
 569  #leb        warn $res->error if $res->code;
 570  #leb      }
 571  #leb      print RES "<tr><td>Cours <strong>$cours</strong> : </td><td>Ajoût des élèves du groupe</td></tr>\n" if $debug > 1;
 572  #leb    }
 573  #leb      } else {
 574  #leb    # cas d'une classe. C'EST TOUJOURS LE CAS D'UNE CLASSE !
 575       $res = $lcs_ldap->search(base     => "cn=Classe_$prefix$elstco,$groupsDn",
 576                    scope    => 'base',
 577                    filter   => "objectClass=posixGroup"); #leb à la place de : filter   => "objectClass=*");
 578      if (($res->entries)[0]) {
 579        @members = ($res->entries)[0]->get_value('memberUid');
 580        foreach $member (@members) {
 581          $res = $lcs_ldap->search(base     => "cn=Cours_$prefix$cours,$groupsDn",
 582                       scope    => 'base',
 583                       filter   => "memberUid=$member");
 584          if (! ($res->entries)[0]) {
 585            $res = $lcs_ldap->modify( "cn=Cours_$prefix$cours,$groupsDn",
 586                      add => { memberUid => $member } );
 587            warn $res->error if $res->code;
 588          }
 589        }
 590      }
 591  #leb      }
 592  
 593        if ($profUid) {
 594      # Remplissage de l'équipe pédagogique de la classe
 595      $res = $lcs_ldap->search(base     => "cn=Equipe_$prefix$elstco,$groupsDn",
 596                   scope    => 'base',
 597                   filter   => "objectClass=posixGroup");
 598          #         filter   => "objectClass=*");
 599      if (($res->entries)[0]) {
 600        $res = $lcs_ldap->search(base     => "cn=Equipe_$prefix$elstco,$groupsDn",
 601                     scope    => 'base',
 602                     filter   => "memberUid=$profUid");
 603          #           filter   => "member=uid=$profUid,$peopleDn");
 604        unless (($res->entries)[0]) {
 605          $res = $lcs_ldap->modify( "cn=Equipe_$prefix$elstco,$groupsDn",
 606                        add => { memberUid => $profUid } );
 607              #          add => { member => "uid=$profUid,$peopleDn" } );
 608          warn $res->error if $res->code;
 609        }
 610      }
 611       # Remplissage et/ou création du GroupOfNames Matiere
 612       # Si la matière n'existe pas encore
 613       $res = $lcs_ldap->search(base     => "cn=Matiere_$prefix$matimn,$groupsDn",
 614                    scope    => 'base',
 615                    filter   => "objectClass=posixGroup");
 616           #         filter   => "objectClass=*");
 617       if (! ($res->entries)[0]) {
 618        $gidNumber = getFirstFreeGid($gidNumber);
 619         @matiereEntry = (
 620                  'cn',          "Matiere_$prefix$matimn",
 621                  'objectClass', 'top',
 622                     'objectClass', 'posixGroup',
 623                     'gidNumber',   $gidNumber);
 624  #                       'objectClass', 'groupOfNames' );
 625  #leb                'member',   '', );
 626         $res = $lcs_ldap->add( "cn=Matiere_$prefix$matimn,$groupsDn",
 627                    attrs => \@matiereEntry );
 628       }
 629       # Avec ses membres
 630       $res = $lcs_ldap->search(base     => "cn=Matiere_$prefix$elstco,$groupsDn",
 631                    scope    => 'base',
 632                   filter   => "memberUid=$profUid");
 633          #         filter   => "member=uid=$profUid,$peopleDn");
 634       unless (($res->entries)[0]) {
 635        $res = $lcs_ldap->modify( "cn=Matiere_$prefix$matimn,$groupsDn",
 636                       add => { memberUid => $profUid } );
 637           #            add => { member => "uid=$profUid,$peopleDn" } );
 638       }
 639        }
 640      }
 641      print RES "</table>\n";
 642      close F_MEN;
 643    }
 644  
 645    unlink </tmp/*.temp>;
 646    $lcs_ldap->unbind;
 647    &pdp(RES);
 648    close RES;
 649  
 650    system ("/usr/bin/lynx --dump $documentRoot/$webDir/result.$$.html | mail $melsavadmin -s 'Importation Texte'");
 651  
 652  }


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