[Scodoc-devel] [SVN] Scolar : [1231] - Ajout exemple publication bulletins en PHP ( contribution de Y.

eviennet at lipn.univ-paris13.fr eviennet at lipn.univ-paris13.fr
Mer 5 Juin 09:28:44 CEST 2013


Une pièce jointe HTML a été nettoyée...
URL: <https://www-rt.iutv.univ-paris13.fr/pipermail/scodoc-devel/attachments/20130605/4a6e896a/attachment-0001.html>
-------------- section suivante --------------
Added: trunk/misc/PublicationBulletins/ExemplePHP/index.php
===================================================================
--- trunk/misc/PublicationBulletins/ExemplePHP/index.php	                        (rev 0)
+++ trunk/misc/PublicationBulletins/ExemplePHP/index.php	2013-06-05 07:28:43 UTC (rev 1231)
@@ -0,0 +1,310 @@
+<?php
+
+// Code contribué par Yann Leboulanger (Université Paris 10), Juin 2013
+// 
+// Exemple publication des bulletins de notes vers les étudiants
+//  L'étudiant est authenfié via le CAS 
+// Le bulletin est récupéré en format XML en interrogeant ScoDoc
+// 
+// Il faut créer un utilisateur ScoDoc n'ayant que des droits de lecture.
+//
+// A adapter à vos besoins locaux.
+
+include_once 'CAS.php';
+
+phpCAS::setDebug();
+phpCAS::client(CAS_VERSION_2_0,'URL_DU_CAS',443,'');
+phpCAS::setNoCasServerValidation();
+phpCAS::forceAuthentication();
+
+$nip = phpCAS::getUser();
+
+// Login information of a scodoc user that can access notes
+$sco_user = '';
+$sco_pw = '';
+$sco_url = ''; // https://notes.u-univ.fr/scodoc/
+
+$user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) Gecko/20061010 Firefox/2.0';
+
+
+function http_build_headers( $headers ) {
+
+       $headers_brut = '';
+
+       foreach( $headers as $nom => $valeur ) {
+               $headers_brut .= $nom . ': ' . $valeur . "\r\n";
+       }
+
+       return $headers_brut;
+}
+
+function get_EtudInfos_page($nip, $dept)
+{
+    $donnees = array(
+        'code_nip' => $nip,
+        '__ac_name' => $sco_user,
+        '__ac_password' => $sco_pw );
+
+    // Création du contenu brut de la requête
+    $contenu = http_build_query( $donnees );
+
+    // Définition des headers
+    $headers = http_build_headers( array(
+    'Content-Type' => 'application/x-www-form-urlencoded',
+    'Content-Length' => strlen( $contenu) ) );
+
+     // Définition du contexte
+     $options = array( 'http' => array( 'user_agent' => $user_agent,
+     'method' => 'POST',
+     'content' => $contenu,
+     'header' => $headers ) );
+
+    // Création du contexte
+    $contexte = stream_context_create($options);
+
+    // Envoi du formulaire POST
+    $retour = file_get_contents( $sco_url . $dept . '/Scolarite/Notes/XMLgetEtudInfos', false, $contexte );
+
+    return ($retour);
+}
+
+function get_bulletinetud_page($nip, $sem, $dept) {
+    $donnees = array(
+        'format' => 'xml',
+        'code_nip' => $nip,
+        'formsemestre_id' => $sem,
+        'version' => 'selectedevals',
+        '__ac_name' => $sco_user,
+        '__ac_password' => $sco_pw );
+
+    // Création du contenu brut de la requête
+    $contenu = http_build_query( $donnees );
+
+    // Définition des headers
+    $headers = http_build_headers( array(
+    'Content-Type' => 'application/x-www-form-urlencoded',
+    'Content-Length' => strlen( $contenu) ) );
+
+     // Définition du contexte
+     $options = array( 'http' => array( 'user_agent' => $user_agent,
+     'method' => 'POST',
+     'content' => $contenu,
+     'header' => $headers ) );
+
+    // Création du contexte
+    $contexte = stream_context_create($options);
+
+    // Envoi du formulaire POST
+    $retour = file_get_contents( $sco_url . $dept . '/Scolarite/Notes/formsemestre_bulletinetud', false, $contexte );
+
+    return ($retour);
+}
+
+function get_semestre_info($sem, $dept)
+{
+    $donnees = array(
+        'formsemestre_id' => $sem,
+        '__ac_name' => $sco_user,
+        '__ac_password' => $sco_pw );
+
+    // Création du contenu brut de la requête
+    $contenu = http_build_query( $donnees );
+
+    // Définition des headers
+    $headers = http_build_headers( array(
+    'Content-Type' => 'application/x-www-form-urlencoded',
+    'Content-Length' => strlen( $contenu) ) );
+
+     // Définition du contexte
+     $options = array( 'http' => array( 'user_agent' => $user_agent,
+     'method' => 'POST',
+     'content' => $contenu,
+     'header' => $headers ) );
+
+    // Création du contexte
+    $contexte = stream_context_create($options);
+
+    // Envoi du formulaire POST
+    $retour = file_get_contents( $sco_url . $dept . '/Scolarite/Notes/XMLgetFormsemestres', false, $contexte );
+
+    return ($retour);
+}
+
+function get_all_semestres($xml_data)
+{
+    $data = array();
+    $xml = simplexml_load_string($xml_data);
+    foreach ($xml->insemestre as $s) {
+        $sem = (array) $s['formsemestre_id'];
+        $data[] = $sem[0];
+    }
+    return $data;
+}
+
+function get_current_semestre($xml_data)
+{
+    $xml = simplexml_load_string($xml_data);
+    foreach ($xml->insemestre as $s) {
+        if ($s['current'] == 1)
+            $sem = (array) $s['formsemestre_id'];
+            return ($sem[0]);
+    }
+}
+
+function print_semestres_list($sems, $dept, $sem)
+{
+    echo 'Semestre : <select name="sem">';
+    for ($i=0; $i < count($sems); $i++) {
+        $s = $sems[$i];
+        $retour = get_semestre_info($s, $dept);
+    	$xml = simplexml_load_string($retour);
+        echo '<option value="' . $s . '"';
+        if ($s == $sem) {
+            echo ' selected';
+        }
+        echo '>' . $xml->formsemestre['titre_num'] . '</option>
+';
+    }
+    echo '</select>
+<input type="submit" value="Valider">
+</form>';
+}
+
+function print_semestre($xml_data, $sem, $dept, $show_moy=False)
+{
+    $xml = simplexml_load_string($xml_data);
+    echo '<h2>' . $xml->etudiant['sexe'] . ' ' . $xml->etudiant['prenom'] . ' ' . $xml->etudiant['nom'] . '</h2>';
+    echo '<br/>
+';
+    $retour = get_semestre_info($sem, $dept);
+    $xml2 = simplexml_load_string($retour);
+    echo $xml2->formsemestre['titre_num'];
+    echo '
+<br/>
+<br/>
+';
+    echo '<table class="notes_bulletin" style="background-color: background-color: rgb(255,255,240);">
+<tr>
+  <td class="note_bold">UE</td>
+  <td class="note_bold">Module</td>
+  <td class="note_bold">Evaluation</td>
+  <td class="note_bold">Note/20</td>
+  <td class="note_bold">Coef</td>
+</tr>
+';
+    if ($show_moy) {
+        echo '<tr class="gt_hl notes_bulletin_row_gen" ><td  class="titre" colspan="3" >Moyenne générale:</td><td  class="note">' . $xml->note['value'] . '</td><td  class="coef"></td></tr>';
+    }
+    foreach ($xml->ue as $ue) {
+        $coef = 0;
+        foreach ($ue->module as $mod) {
+            $coef += $mod['coefficient'];
+        }
+        echo '<tr class="notes_bulletin_row_ue">
+  <td class="note_bold"><span onclick="toggle_vis_ue(this);" class="toggle_ue"><img src="imgs/minus_img.png" alt="-" title="" height="13" width="13" border="0" /></span>' . $ue['acronyme'] . '</td>
+  <td></td>
+  <td></td>
+';
+
+        if ($show_moy) {
+            echo '  <td>' . $ue->note['value'] . '</td>
+';
+        }
+        else {
+            echo '  <td></td>
+';
+        }
+
+echo '  <td>' . $coef . '</td>
+</tr>';
+        foreach ($ue->module as $mod) {
+            echo '<tr class="notes_bulletin_row_mod">
+  <td></td>
+  <td>' . $mod['code'] . '</td>
+  <td></td>
+';
+
+            if ($show_moy) {
+                echo '  <td>' . $mod->note['value'] . '</td>
+';
+            }
+            else {
+                echo '  <td></td>
+';
+            }
+
+            echo '  <td>' . $mod['coefficient'] . '</td>
+</tr>';
+       
+            if (!$show_moy) {
+                foreach ($mod->evaluation as $eval) {
+                    echo '<tr class="notes_bulletin_row_eval">
+  <td></td>
+  <td></td>
+  <td class="bull_nom_eval">' . $eval['description'] . '</td>
+  <td class="note">' . $eval->note['value'] . '</td>
+  <td></td>
+</tr>';
+                } 
+            }
+        }
+    }
+    echo '</table>
+<br/>
+';
+    if ($show_moy) {
+        echo $xml->situation;
+    }
+}
+
+function get_dept($nip)
+{
+    $dept = file_get_contents( $sco_url . 'get_etud_dept?code_nip=' . $nip);
+    return ($dept);
+}
+
+
+
+echo '<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>Bulletin de notes</title>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<link href="css/scodoc.css" rel="stylesheet" type="text/css" />
+<script language="javascript" type="text/javascript" src="js/bulletin.js"></script>
+</head>
+<body>
+';
+
+echo '<form action="index.php" method="post">';
+
+$dept = get_dept($nip);
+if ($dept) {
+    $retour = get_EtudInfos_page($nip, $dept);
+    $sems = get_all_semestres($retour);
+    $sem_current = get_current_semestre($retour);
+    if (isset($_POST["sem"])) {
+        $sem = $_POST["sem"];
+    }
+    else {
+        $sem = $sem_current;
+    }
+    print_semestres_list($sems, $dept, $sem);
+    $retour = get_bulletinetud_page($nip, $sem, $dept);
+    if ($sem == $sem_current) {
+        print_semestre($retour, $sem, $dept, False);
+    }
+    else {
+        print_semestre($retour, $sem, $dept, True);
+    }
+    $erreur=0;    // Tout est OK
+}
+else {
+    echo "Numéro étudiant inconnu : " . $nip . ". Contactez votre Chef de département.";
+}
+
+echo '</form>';
+
+echo '</body>
+</html>';
+?>

Added: trunk/misc/PublicationBulletins/README.txt
===================================================================
--- trunk/misc/PublicationBulletins/README.txt	                        (rev 0)
+++ trunk/misc/PublicationBulletins/README.txt	2013-06-05 07:28:43 UTC (rev 1231)
@@ -0,0 +1,2 @@
+
+Exemples de code pour publier les bulletins de notes des étudiants


Plus d'informations sur la liste de diffusion Scodoc-devel