[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3master/var/www/se3/echanges/ -> distribution.php (source)

   1  <?php
   2  
   3  
   4      /** 
   5  
   6      * Deploie des devoirs ou documents aux utilisateur
   7      
   8      * @Version $Id: distribution.php 8601 2015-03-16 20:17:16Z plouf $
   9      * @Projet LCS-SE3
  10     
  11      * @Auteurs Jean Gourdin
  12     
  13      * @Licence Distribue selon les termes de la licence GPL
  14      
  15          */
  16  
  17      /**
  18  
  19      * file: distribution.php
  20      * @Repertoire: echanges/
  21  
  22      */
  23  
  24  
  25  require("entete.inc.php");
  26  require ("ldap.inc.php");
  27  require ("fonc_outils.inc.php");
  28  
  29  require_once  ("lang.inc.php");
  30  bindtextdomain('se3-echange',"/var/www/se3/locale");
  31  textdomain ('se3-echange');
  32  
  33  // recuperer les parametres passes par POST
  34  foreach ($_POST as $cle=>$val) {
  35      $$cle = $val;
  36  }
  37  
  38  // Aide en ligne pour un devoir
  39  if ($devoir) {
  40      //aide
  41      $_SESSION["pageaide"]="L%27interface_prof#Ressources_et_partages";
  42  }
  43  
  44  $login=isauth();
  45  $id_prof=$login;
  46  $now =date("Y-m-d");
  47  $table="devoirs";
  48  $fichiers= array();
  49  
  50  
  51  echo "<body >
  52  <h1>".gettext("Distribution de document(s)")." <font size=-2>(<em>".gettext("par")." $login,".gettext(" le ").affiche_date($now)."</em>)</font></h1>
  53  <hr>\n";
  54  
  55  // nombre de documents : $nombre=$_POST['nombre'];
  56  // recup type de la distrib : $type=$_POST['type'];
  57  // recup type des liste de classes ou d'eleves --> cf chaque cas
  58  // $classes=$_POST['classes'];   OU   $liste_classe=$_POST['liste_classe'];
  59  
  60  //Suppression des espaces dans l'identifiant
  61  //(utilise par la suite pour la creation du dossier):
  62  //$id_devoir=preg_replace("/ /","_","$id_devoir");
  63  $id_devoir=strtr(preg_replace("/�/","AE",preg_replace("/�/","ae",preg_replace("/�/","OE",preg_replace("/�/","oe","$id_devoir"))))," '���������������������զ����ݾ�������������������������������","__AAAAAAACEEEEIIIINOOOOOSUUUUYYZaaaaaaceeeeiiiinoooooosuuuuyyz");
  64  
  65  
  66  // VERIFICATION
  67  // verifier si l'id_devoir d'un devoir non archive est deja attribue
  68  if ($devoir) {
  69   // verification de l'id_devoir
  70    $req =" SELECT id_devoir FROM $table WHERE BINARY id_devoir='$id_devoir' ";
  71    // echo $req;
  72    $res=mysql_query($req);
  73    $nb=mysql_num_rows($res);
  74    if ($nb >0) {
  75       die ("<h4>".gettext("L'identifiant du devoir a d&#233;j&#224; &#233;t&#233; utilis&#233; !")."<br>".gettext("Veuillez en choisir un autre.")."</h4>\n");
  76    }
  77   }
  78  
  79  if ($devoir) {
  80    // traitement de la date de retour
  81    $date_retour= "$jour_retour/$mois_retour/$an_retour";
  82    echo "<h3>".gettext("Distribution du devoir")." <em>$id_devoir</em> (".gettext("pour le")." $date_retour)</h3>\n";
  83    }
  84  else
  85    echo "<h3>".gettext("Distribution ").($nombre==1?gettext("du fichier"):gettext("des fichiers"))."</h3>\n";
  86  
  87  // stockage des fichiers uploades  dans /tmp avant distribution
  88  for ($i=1; $i<= $nombre; $i++) {
  89    $ff="fich$i";
  90      // === DEBUG ==
  91      // echo "fichier $_FILES[$ff]['name'] <br>";
  92      // print_r($_FILES);
  93      $destination="/tmp/".$_FILES[$ff]['name'];
  94    if (move_uploaded_file($_FILES[$ff]['tmp_name'], $destination)) {
  95        if ($f = @fopen( $destination, "r")) {
  96              $taille=$_FILES[$ff]['size'];
  97            //== DEBUG ==
  98    
  99              // echo "ouverture du fichier $ff de taille $taille";
 100              $contenu=fread($f, $taille);
 101              $donnees=addslashes($contenu);
 102              $nom = $_FILES[$ff]['name'] ;
 103              //$chemin="/tmp/$nom";
 104              system("mkdir -p /tmp/$login");
 105              $chemin="/tmp/$login/$nom";
 106  
 107              $f1 = fopen($chemin,"w");
 108              if ($f1)
 109                    echo "<lI>$nom</li>";
 110              fputs($f1, $contenu);
 111              fclose($f1);
 112              $fichiers[] = $nom;
 113       }
 114    }    
 115   else
 116     echo "<li>".gettext("pas de fichier n�")." $i ".gettext("choisi (ou fichier vide ..)")."</li>";
 117  }
 118  // VERIFICATION : si aucun fichier n'a ete choisi, s'arreter avec message
 119  $nb_fichiers=sizeof($fichiers);
 120  if ($nb_fichiers==0)
 121    die (gettext("Echec de la distribution, recommencez .."));
 122  
 123  // declarations globales
 124  $tab_eleves=array();      // tableau associatif : nom-classe/groupe --> liste des eleves
 125  $liste_eleves = "";
 126  
 127  if ($type==1) {
 128  /* traitement de la distribution type I : distribution par classes
 129    *****************************************************************/
 130   if (! empty($liste_classe)) {
 131    $liste_classe=trim($liste_classe);
 132    $liste_classe=preg_replace("/#$/","",$liste_classe);
 133    $classes=preg_split("/#/",$liste_classe);
 134   }
 135   $n=sizeof($classes);  // nombre de classes+groupes
 136   // creation de la liste des classes
 137   for ($i=0; $i<$n; $i++) {
 138      $filtres[$i]="cn=$classes[$i]";       // echo "Classes : $classes[$i]<br>";
 139   }
 140  
 141  echo "<h3>".gettext("Aux &#233;l&#232;ves des classes (ou groupes)")."</h3>\n";
 142  // boucle sur les classes
 143  for ($g=0; $g <$n ; $g++) {
 144  
 145    $classe=$classes[$g];       // ATTENTION ! nom de la gieme classe OU nom GROUPE
 146    $equipe="Equipe_".preg_replace("/Classe_/","",$classe); // Modif delineau (il y a surement mieux � faire)
 147    $liste_eleves_classe = "";  // liste des eleves par classe/groupe
 148    $eleves=array();            // tableau indice des eleves de la classe/groupe
 149    $uids = search_uids ($filtres[$g]);
 150    //  $eleves = search_people_groups ($uids,"","group");
 151    $membres = search_people_groups ($uids,"","group");
 152  
 153  
 154    // recherche des vrais eleves, fitrer les profs ..
 155    for ($p=0; $p < sizeof($membres); $p++) {
 156      $id_eleve = $membres[$p]["uid"];
 157      // est-ce un vrai eleve ? eliminons les profs faisant partie du groupe !!
 158      if (est_prof($id_eleve)) continue;
 159      $eleves[]=$membres[$p];        // $eleves tableau indice : num-eleve --> [iud,sexe,fullname]
 160      $liste_eleves .= "$id_eleve#";
 161      $liste_eleves_classe .= "$id_eleve#";
 162    }
 163    // distribution et affichage des resultats
 164    $tab_eleves[$classe]=$liste_eleves_classe ;         // <----  tableau des eleves a transformer en liste
 165    $nb_eleves=sizeof($eleves);
 166    echo "$classe  <font size=-1>[$nb_eleves ".($nb_eleves==1?gettext("&#233;l&#232;ve"):gettext("&#233;l&#232;ves"))."]</font><br>\n";
 167  
 168    for ($p=0; $p < $nb_eleves; $p++) {  // boucle sur les vrais eleves
 169      $id_eleve = $eleves[$p]["uid"];
 170      $param=params_eleve($id_eleve);
 171  
 172      // creation rep pour devoir et copies fichiers (inversion si n�cessaire)
 173      $rep= "/var/se3/Classes/".$param[classe]."/".inverse_login($id_eleve);    echo $rep."<br>";
 174      $cr=1;
 175      if (($devoir) and ("$id_devoir"!="")){
 176        $rep .= "/$id_devoir";
 177        //$ch ="/usr/bin/sudo /usr/share/se3/scripts/creer_rep_distrib.sh $login $id_eleve $rep";
 178        $ch ="/usr/bin/sudo /usr/share/se3/scripts/creer_rep_distrib.sh $login $id_eleve \"$rep\"";
 179        $cr= exec($ch) ;
 180      }
 181      if ($cr) {
 182        /// Le repertoire du devoir $rep a ete cree, boucle sur tous les fichiers a distribuer
 183        // $CR1 produit des cr1, pour verifier que tous les fichiers ont ete  distribuies
 184        $CR1=1;
 185        for ($i=0; $i< $nb_fichiers; $i++) {
 186          //$ch1 ="/usr/bin/sudo /usr/share/se3/scripts/copie_fich_distrib.sh $login $id_eleve $rep \"$fichiers[$i]\" ";
 187          $ch1 ="/usr/bin/sudo /usr/share/se3/scripts/copie_fich_distrib.sh $login $id_eleve \"$rep\" \"$fichiers[$i]\" $equipe "; // Modif delineau
 188          $cr1= exec($ch1) ;
 189          // on range $cr1 dans un tableau
 190          $tab_cr1[$i]=$cr1;
 191          $CR1 *= $cr1;
 192        }
 193         if ($CR1) {
 194           $im=($eleves[$p]["sexe"]=="F"?"<img src=\"../annu/images/gender_girl.gif\" width=14 height=14 hspace=3 border=0>":
 195           "<img src=\"../annu/images/gender_boy.gif\" width=14 height=14 hspace=3 border=0>");
 196           echo $im.$eleves[$p]["fullname"]."<br>\n";
 197         }
 198         else {
 199           // preciser les fichiers non distribues ??
 200           echo " ---> ".gettext("&#233;chec de la distribution pour ").$eleves[$p]["fullname"]."<br>\n";
 201         }
 202        }
 203         else {
 204         // verifier que le rep. existe deja, pour le meme devoir
 205         // cas (rare ?) d'eleves presents dans plusieurs groupes !
 206         // echo "<h4>Echec de la creation du repertoire $rep</h4>";
 207          echo "   ---> ".gettext("distribution d&#233;j&#224; effectu&#233;e pour ").$eleves[$p]["fullname"]."<br>\n";
 208        }
 209    }  // fin for $p
 210    echo "<p>";
 211  }  // fin for $g
 212  
 213  }  // FIN envoi de type I
 214  else {
 215  
 216  /* traitement de la distribution type II : choix d'eleves seulement
 217   * ici les profs ont deja ete filtres
 218   *******************************************************************/
 219  // groupes d'eleves par classes :  $liste_classe=$_POST['liste_classe'];
 220  // liste des classes : $liste_classe
 221    $classes=preg_split("/#/",$liste_classe);
 222    $n=sizeof($classes);
 223    echo "<h3>".gettext("Aux &#233;l&#232;ves s&#233;lectionn&#233;s dans les classes (ou groupes) :")." </h3>\n";
 224  
 225  // $liste_eleves="";
 226  
 227   for ($g=0; $g<$n; $g++) {
 228   // boucle sur toutes les classes
 229    $classe=$classes[$g];           // nom de la gieme classe/groupe
 230    $equipe="Equipe_".preg_replace("/Classe_/","",$classe); // Modif delineau (il y a surement mieux � faire)
 231    $liste_eleves_classe = "";  // liste des eleves par classe/groupe
 232    $libelle_eleves="eleves".$g;
 233  
 234    $eleves=$_POST[$libelle_eleves];
 235    $nb_eleves=sizeof($eleves);
 236  
 237    echo "$classe  <font size='-1'>[".($nb_eleves==0?gettext("aucun &#233;l&#232;ve"):($nb_eleves==1?"$nb_eleves ".gettext("&#233;l&#232;ve"):"$nb_eleves ".gettext("&#233;l&#232;ves")))."]</font><br>\n";
 238  
 239    for ($p=0; $p < $nb_eleves; $p++) {    // dans le cas II, il s'agit toujours de vrais eleves dans ce groupe !!
 240      $id_eleve =  $eleves[$p];
 241      $param=params_eleve($id_eleve);
 242  
 243      $liste_eleves .= "$id_eleve#";
 244      $liste_eleves_classe .= "$id_eleve#";
 245  
 246      // creation rep pour devoir et copies fichiers
 247      $rep= "/var/se3/Classes/".$param[classe]."/".inverse_login($id_eleve);
 248      $cr=1;
 249      if (($devoir) and ("$id_devoir"!="")){
 250        $rep .= "/$id_devoir";
 251        //$ch ="/usr/bin/sudo /usr/share/se3/scripts/creer_rep_distrib.sh $login $id_eleve $rep";
 252        $ch ="/usr/bin/sudo /usr/share/se3/scripts/creer_rep_distrib.sh $login $id_eleve \"$rep\"";
 253        $cr= exec($ch) ;
 254      }
 255      if ($cr) {
 256         $CR1=1;
 257         for ($i=0; $i< $nb_fichiers; $i++) {
 258           // boucle sur tous les fichiers a distribuer
 259           //$ch1 ="/usr/bin/sudo /usr/share/se3/scripts/copie_fich_distrib.sh $login $id_eleve $rep \"$fichiers[$i]\" ";
 260           $ch1 ="/usr/bin/sudo /usr/share/se3/scripts/copie_fich_distrib.sh $login $id_eleve \"$rep\" \"$fichiers[$i]\" $equipe "; // Modif delineau
 261           $cr1= exec($ch1) ;
 262           // on range $cr1 dans un tableau
 263           $tab_cr1[$i]=$cr1;
 264           $CR1 *= $cr1;
 265        }
 266       if ($CR1) {
 267           $im=($param["sexe"]=="F"?"<img src=\"../annu/images/gender_girl.gif\" width=14 height=14 hspace=3 border=0>":
 268           "<img src=\"../annu/images/gender_boy.gif\" width=14 height=14 hspace=3 border=0>");
 269           echo $im.$param["nom"]."<br>\n";
 270        }
 271         else {
 272           echo " ---> ".gettext("&#233;chec de la distribution pour ").$param["nom"]."<br>\n";
 273        }
 274       }
 275      else {
 276      echo "   ---> ".gettext("distribution d&#233;j&#224; effectu&#233;e pour ").$param["nom"]."<br>\n";
 277      // echo "<h4>Echec de la cr&#233;ation du r&#233;pertoire $rep</h4>";
 278      }
 279     }  // fin for $p
 280     echo "<p>";
 281     $tab_eleves[$classe]=$liste_eleves_classe ;         // <----  tableau des eleves a transformer en liste
 282    }  // fin for $g
 283  }   // FIN envoi de type II
 284  
 285  //Nettoyage apres la fin des envois:
 286  //for ($i=1; $i<= $nombre; $i++) {
 287  for ($i=0; $i< $nombre; $i++) {
 288    if(file_exists("/tmp/$login/$fichiers[$i]")){
 289      //echo "<p>unlink(\"/tmp/$login/$fichiers[$i]\")</p>";
 290      unlink("/tmp/$login/$fichiers[$i]");
 291    }
 292  }
 293  
 294  /* Traitement des envois de DEVOIRS
 295   **********************************/
 296  if ("$id_devoir"!="") {
 297    if (trim($nom_devoir) =="" )  $nom_devoir="devoir";          // nom du devoir a rendre
 298    echo "<p>".gettext("Afin de pouvoir ramasser leur devoir, ces &#233;l&#232;ves devront l'enregistrer :")."<br>";
 299    echo gettext("- dans un fichier nomm&#233; <strong>")." $nom_devoir</strong> <br>";
 300    echo gettext("- en utilisant une casse quelconque")."<br>";
 301    echo gettext("- le nom &#233;tant muni de l'extension usuelle li&#233;e au type du fichier")."<p>\n";
 302  }
 303  //if ($devoir and $cr and $cr1) {
 304  if ($devoir) {
 305    $date_retour=$an_retour."-".$mois_retour."-".$jour_retour;   // date de retour
 306    $liste_eleves=tab_liste($tab_eleves);                        // calcul de la liste classes-eleves
 307    // construction de la requete d'enregistrement du devoir
 308    $req_devoir="INSERT INTO $table ";
 309    $req_devoir .=" (id_prof,id_devoir,nom_devoir,date_distrib,date_recup,description,liste_distrib) ";
 310    $req_devoir .=" VALUES ('$id_prof','$id_devoir','$nom_devoir','$now','$date_retour','$description','$liste_eleves') ";
 311    $ok = mysql_query($req_devoir);
 312   }
 313  // else
 314  // echo "Echec de distribution du devoir $devoir";
 315  include ("pdp.inc.php");
 316  ?>
 317  


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