Documents:Cahier De Texte Details Modifications V.4.4.4 Std

Un article de Wiki ESCO-Portail.

Modifications apportées à la version 4.4.4.0 standard du Cahier de Texte de Caen


Pour profiter de l'évolution de l'application Cahier de Texte CAEN, il a été décidé de repartir de la toute dernière version du Cahier de Texte : la 4.4.4.0 Standard, version originale de l'auteur (datée du 22 octobre 2009).

Elle est disponible ici : [1].

De plus, la problématique de la gestion des groupes, qui était encore plus importantes pour les collèges, devait être résolue. En effet, les professeurs ayant des groupes d'élèves sur plusieurs classes (non complètes) ne pouvait pas avoir un seul cahier de texte par groupe pour leur matière. La solution pour laquelle nous avons opté est la gestion des groupes exactement comme des classes.

Cela a nécessité des modifications de la vue "élève" du cahier de texte, qui devait agréger les informations de sa classe mais aussi de ses groupes (donc de plusieurs classes, ce qui n'était pas prévu initialement dans l'application).

L'évolution de la version 4.4.4.0 a concerné les points suivants :

  • Re-Cassifier l'application (L'académie de Montpellier nous avait fournie la première version cassifiée)

--TERMINE--

  • Réintégrer le mode multi-établissements avec une base de données par établissement (fourni également par Montpellier)

--TERMINE--

  • Ajouter le mécanisme de Single Sign-Out CAS

--TERMINE--

  • Réintégrer les modifications concernant le stockage des fichiers en dehors du répertoire www.

--TERMINE--

  • Réintégrer le module d'importation des données depuis l'annuaire ENT.

--TERMINE--

  • Réintégrer la modification de l'accès à l'administration (basée sur un groupe de l'annuaire ENT)

--TERMINE--

  • Réintégrer la modification de l'accès par les parents (avec choix d'une classe parmi les classes de leurs élèves)

--TERMINE--

  • Intégration de la gestion des groupes comme des classes

--TERMINE--

  • Gestion des enseignants intervenants sur plusieurs établissements

--TERMINE--

  • Corriger quelques problèmes d'accents

--TERMINE--


Sommaire

Creation d'un fichier de configuration général

Un fichier de configuration général a été créé : config/config.inc.php

Il permet d'activer et de configurer l'authentification CAS et le mode multi-etablisement (et aussi d'activer le mode Debug si besoin).

<?php
<?php
///////////////////////////////////////////////////////////////////////////////////////////////
//                                                                                           //            
// Fichier de configuration 'technique' de l'application                                     //
// (Ces parametres ne sont pas stockes en BD car, lorsque l'application est                  //
// configuree en mode multi-etablissements, on doit les connaitre bien avant de savoir       //
// a quel base on va acceder)                                                                //
//                                                                                           //
// by RECIA                                                                                  //
///////////////////////////////////////////////////////////////////////////////////////////////
// Ne pas modifier les quelques lignes qui suivent, la configuration est apres...            //
///////////////////////////////////////////////////////////////////////////////////////////////
$CONFIG = array();
$CONFIG['common']            = array();
$CONFIG['plugin_cas']        = array();
$CONFIG['plugin_multi-etab'] = array();
$CONFIG['plugin_ent']        = array();
/////////////////////////////////////////////////////////////////////////////////////////////////
// La configuration commence ici :
///////////////////////////////////////////////////////////////////////////////////////////////
 
//////////////////////////////////////////////////////////////
//                                                          //
// Configuration Generale                                   //
//                                                          //
//////////////////////////////////////////////////////////////
 
// Url depuis laquelle le site est accessible (obligatoire !)
// (avec le "/" final !)
$CONFIG['common']['urlsite'] = 'http://localhost/cahier_de_texte/';
 
// Repertoire ou est situee l'application cahier de texte
// (sans le "/" final)
$CONFIG['common']['dirroot'] = '/var/www/cahier_de_texte';
 
# Repertoire de stockage des fichiers
# (Fichiers joints pour cours et devoirs, Fichiers joints pour messages informatifs,
# Fichiers zip resultant de l'exportation en CSV des cahiers de textes)
# (sans le "/" final)
$CONFIG['common']['datadir'] = "/home/cahierdetexte";
 
// Url d'acces au service web LATEX
// L'url doit etre parametree egalement dans le fichier :
// enseignant/xinha/plugins/EditLatex/popups/serveur_latex.js
$CONFIG['common']['urllatex'] = "http://serveur.recia.fr/latex?";
 
 
//////////////////////////////////////////////////////////////
//                                                          //
// Plugin d'Authentification CAS                            //
//                                                          //
// Permet a l'application cahier de texte de déleguer       //
// l'authentification a un serveur cas et donc de           //
// s'integrer facilement dans un portail d'applications     //
//////////////////////////////////////////////////////////////
 
// Activation ou non du plugin CAS (1 ou 0)
$CONFIG['plugin_cas']['actif'] = 1;
 
// Adresse du serveur CAS
$CONFIG['plugin_cas']['host'] = 'localhost';
//$CONFIG['plugin_cas']['host'] = 'serveur.recia.fr';
 
// Port du serveur CAS
$CONFIG['plugin_cas']['port'] = '8443';
//$CONFIG['plugin_cas']['port'] = '443';
 
// Version du protocol CAS
$CONFIG['plugin_cas']['version'] = 'SAML_VERSION_1_1';
 
// Repertoire de l'application CAS sur le serveur (url web) (exemple : mettre 'cas' pour https://monserveur/cas)
$CONFIG['plugin_cas']['cas_dir'] = 'cas';
 
// Chemin d'acces a la librairie PHPCAS (a partir de la racine de l'application web cahier de texte) (exemple 'CAS/' si CAS est dans le dossier de l'application cahier de texte)
$CONFIG['plugin_cas']['phpcas_dir'] = 'plugins/cas/phpcas/';
 
 
 
// Mapping des donnees du ticket CAS pour l'application
 
// Champ du ticket contenant le(s) RNE de(s) (l')etablissement(s) de la personne
$CONFIG['plugin_cas']['rne']        =  'RNE';
 
// Champ du ticket contenant l'identifiant UID de la personne
$CONFIG['plugin_cas']['uid']        =  'uid';
 
// Champ du ticket contenant le nom d'affichage de la personne
$CONFIG['plugin_cas']['identite']   =  'displayName';
 
// Champ du ticket contenant l'email de la personne
$CONFIG['plugin_cas']['email']      =  'mail';
 
// Champ du ticket contenant la (les) classe(s) d'un prof
$CONFIG['plugin_cas']['ensClasses'] =  'ensClasses';
 
// Champ du ticket contenant la (les) classe(s) d'un prof
$CONFIG['plugin_cas']['eleveClasses'] =  'eleveClasses';
 
// Champ du ticket contenant la (les) classe(s) d'un prof
$CONFIG['plugin_cas']['ensGroupes'] =  'ensGroupes';
 
// Champ du ticket contenant la (les) classe(s) d'un prof
$CONFIG['plugin_cas']['eleveGroupes'] =  'eleveGroupes';
 
// Champ du ticket contenant le profil de la personne
$CONFIG['plugin_cas']['profils']    =  'profils';
 
//////////////////////////////////////////////////////////////
//                                                          //
// Plugin Multi-Etablissements                              //
//                                                          //
// Permet a l'application cahier de texte de gerer          //
// plusieurs etablissements                                 //
//////////////////////////////////////////////////////////////
 
// Activation ou non du plugin multi-etablissements
$CONFIG['plugin_multi-etab']['actif'] = 1;
 
// Prefixe utilise pour les bases de donnees des etablissements (par defaut "cdt_")
$CONFIG['plugin_multi-etab']['prefixe_bases'] = "cdt_";
 
//////////////////////////////////////////////////////////////
//                                                          //
// Plugin ENT                                               //
//                                                          //
// Permet a l'application cahier de texte de s'integrer     //
// dans un ENT (ESCO-PORTAIL)                               //
//////////////////////////////////////////////////////////////
 
// Activation ou non du plugin ENT
$CONFIG['plugin_ent']['actif'] = 1;
 
//////////////////////////////////////////////////////////////
//                                                          //
// Divers                                                   //
//                                                          //
//////////////////////////////////////////////////////////////
 
// Activation du debug dans log apache
// Niveaux de debug 1=Debug simple, 2=Authentification, 3=Tout
// (Chaque niveau inclu le niveau inferieur)
$CONFIG['debug_mode'] = 3;
 
 
///////////////////////////////////////////////////////////////
// Ne pas modifier                                           //
///////////////////////////////////////////////////////////////
$CONFIG['common']['datadir'] = $CONFIG['common']['datadir']."/".$_SESSION['user']['etab_rne']."/";
$CONFIG['plugin_cas']['phpcas_dir'] = $CONFIG['common']['dirroot']."/".$CONFIG['plugin_cas']['phpcas_dir'];
 
?>
 
?>

Modification du stockage des fichiers envoyés

Les fichiers envoyés sont maintenant stockés en dehors de l'arborescence WEB. Le répertoire destination est paramétrable dans le fichier de configuration général de l'application cité au chapitre précédent.

Documents envoyés pour les Cours et le travail à faire

L'application permet d'envoyer des documents joints au descriptions des sceances de cours et du travail à faire, ainsi qu'aux messages d'informations aux élèves. Ces documents étaient stockés dans l'arborescence de l'application :

  • /var/www/cahier_de_texte/fichiers_joints
  • /var/www/cahier_de_texte/fichiers_joints_message

Cela n'était pas souhaitable pour des raisons de sécurité. Nous avons donc effectué les modifications nécessaires pour les stocker dans une autre arborescence :

  • /home/cahierdetexte/fichiers_joints
  • /home/cahierdetexte/fichiers_joints_message

L'utilisateur www-data doit posséder les droits d'écriture dans ces répertoire pour que cela fonctionne.


====> config.inc.php (Configuration générale de l'application ajoutée par RECIA)

Le chemin vers lequel les fichiers doivent être stockés a été externalisé, afin qu'il soit paramétrable (modification à un seul endroit). La variable contenant le chemin est :

$CONFIG['common']['datadir']

Ce chemin est paramétré à /home/cahierdetexte.


====> custom/download_fichier_joint.php (ajouté par RECIA)

Ce fichier a été créé pour pallier le problème de l'accès aux fichiers joints, qui ne sont donc plus dans l'arborescence web (/var/www/), donc qui ne sont plus exposés directement par le serveur web. Ce script php permet donc d'ouvrir le fichier et de l'envoyer sur le flux de sortie. (l'utilisateur se voit donc proposer le téléchargement du fichier).


====> consulter.php ==> consultation du cahier de texte (élèves/profs/direction...)

  • Changement du lien vers les fichiers joints associés aux messages diffusés

(2 occurrences)

// Modif RECIA pour fichiers joints
// echo '<a href="./fichiers_joints_message/'.$row_Rs_fichiers_joints_form['nom_fichier'].'"/>'.$nom_f.'</a><br />';
echo '<a href="./custom/download_fichier_joint.php?filetodl='.$row_Rs_fichiers_joints_form['ID_mesfich'].'&type=FJM"/>'.$nom_f.'</a><br />';
  • Changement du lien vers les fichiers joints pour cours et travail à faire

(2 occurrences)

// Modif RECIA : fichiers joints cours/tp
//<a href="fichiers_joints/<?php echo $row_RsFichiers['nom_fichier'];  ? >"> <?php echo $nom_f;  ? ></a><br />
echo '<a href="./custom/download_fichier_joint.php?filetodl='.$row_RsFichiers['ID_fichiers'].'&type=FJ"/>'.$nom_f.'</a><br />';


====> enseignant/ecrire.php

Changement des liens pour le téléchargement des fichiers joints :

<a href="../fichiers_joints/...">

par

<a href="../custom/download_fichier_joint.php?filetodl=<?php echo $row_RsFichiers['ID_fichiers']."&type=FJ";  ?> " target="_blank">


====> enseignant/ajax_ecrire_realise.php OK


====> inc/vue_du_jour_sceance.inc.php

Changement des liens pour le téléchargement des fichiers joints :

<a href="../fichiers_joints/...">

par

<a href="../custom/download_fichier_joint.php?filetodl=<?php echo $row_RsFichiers['ID_fichiers']."&type=FJ";  ?> " target="_blank">


====> inc/vue_du_jour_travail.inc.php

Changement des liens pour le téléchargement des fichiers joints :

<a href="../fichiers_joints/...">

par

<a href="../custom/download_fichier_joint.php?filetodl=<?php echo $row_Rs_fichiers_joints_form['ID_fichiers']."&type=FJ";  ?> " target="_blank">


====> lire.php => Consultation du cahier de texte pour l'impression

Changement des liens pour le téléchargement des fichiers joints :

<a href="../fichiers_joints/...">

par

<a href="../custom/download_fichier_joint.php?filetodl=<?php echo $row_Rs_fichiers_joints_form['ID_fichiers']."&type=FJ";  ?> " target="_blank">

====> lire_pdf.php => Consultation du cahier de texte en PDF

 

====> enseignant/liste_documents.php => Lister les fichiers envoyés par l'enseignant

Changement du lien pour le téléchargement des fichiers joints : (utilisation du script php de téléchargement)

<a href="../custom/download_fichier_joint.php?filetodl=<?php echo $row_RsListe['ID_fichiers']."&type=FJ";  ?> " target="_blank">

====> enseignant/liste_documents_maj.php => Mettre a jour le fichier joint correspondant

// Modif RECIA
//$dossier_destination =  getcwd(); 
$dossier_destination = $CONFIG['common']['datadir']."fichiers_joints/";
//$dossier_destination = str_replace('enseignant','',$dossier_destination).'fichiers_joints/';

====> enseignant/liste_documents_supprime.php => Traitement de l'action suppression sur la liste des fichiers envoyés par l'enseignant

Changement au niveau de l'emplacement du fichier à supprimer.

if ((isset($_POST['ID_fichiers'])) && ($_POST['ID_fichiers'] != "")) {
 
   $idfich = $_POST['ID_fichiers'];
 
   // Si ce fichier est utilisé par ailleurs, ne pas le supprimer physiquement
   mysql_select_db($database_conn_cahier_de_texte, $conn_cahier_de_texte);
 
   // Modif RECIA
   //$ch_select="/%\_".$_POST['nom_f'];
   $ch_select="%_".$_POST['nom_f'];
 
   $query_Recordset3 = sprintf("SELECT * FROM cdt_fichiers_joints WHERE cdt_fichiers_joints.nom_fichier like '%s' 
      AND cdt_fichiers_joints.ID_fichiers=%d ",$ch_select, $idfich);
 
   $Recordset3 = mysql_query($query_Recordset3, $conn_cahier_de_texte) or die(mysql_error());
   $row_Recordset3 = mysql_fetch_assoc($Recordset3);
   $totalRows_Recordset3 = mysql_num_rows($Recordset3);
 
   if ($totalRows_Recordset3==1){
      // MODIF RECIA : Changement emplacement fichiers joints
      // $fichier = '../fichiers_joints/'.$row_Recordset3['nom_fichier'];
      $fichier = $CONFIG['common']['datadir'].'fichiers_joints/'.$row_Recordset3['nom_fichier'];
      unlink($fichier);
   }
mysql_free_result($Recordset3);
...

Documents envoyés pour les messages diffusés

===> Fichier enseignant/message_ajout.php et vie_scolaire/message_ajout.php

  • Utilisation de la variable $CONFIG['common']['datadir'] pour indiquer le nouveau chemin pour la sauvegarde des fichiers.

Modification à effectuer pour les 2 zones d'envoi de fichier.

// MODIF RECIA : Changement emplacement fichiers joints pour les messages
$dossier_destination = $config['datadir']."fichiers_joints_message/";
// $dossier_destination = getcwd().'/../fichiers_joints_message/';
  • Changement du lien de téléchargement des fichiers joints dans le récapitulatif des messages en bas de page.
// MODIF RECIA : Changement lien fichiers joints pour les messages
echo '<a href="../custom/download_fichier_joint.php?filetodl='.$row_Rs_fichiers_joints_form['ID_mesfich'].'&type=FJM"/>'.$nom_f.'</a><br />';
//echo '<a href="../fichiers_joints_message/'.$row_Rs_fichiers_joints_form['nom_fichier'].'"/>'.$nom_f.'</a><br />';
  • Affichage du champ "identite" pour le prof ayant envoyé le fichier, plutôt que le champ "nom_prof" (car avec CAS, "nom_prof" contient l'uid)
<td class="tab_detail">
<?php
    // Modif RECIA : affichage du nom au lieu de l'ID si mode CAS
    if ($CONFIG['plugin_cas']['actif'] == 0) {
        echo $row_Rsmessage['nom_prof'];
    }
    else if ($CONFIG['plugin_cas']['actif'] == 1) {
        echo $row_Rsmessage['identite'];
    }
?></td>


===> Fichier vie_scolaire/message_ajout_profs.php

  • Utilisation de la variable $CONFIG['common']['datadir'] pour indiquer le nouveau chemin pour la sauvegarde des fichiers.

Modification à effectuer pour les 2 zones d'envoi de fichier.

// Modif RECIA : changement emplacement fichiers joints
//$dossier_destination = getcwd().'/../fichiers_joints_message/';
$dossier_destination = $CONFIG['common']['datadir']."fichiers_joints_message/";
  • Changement du lien de téléchargement des fichiers joints dans le récapitulatif des messages en bas de page.
// Modif RECIA : Changement lien fichier joint
//echo '<a href="../fichiers_joints_message/'.$row_Rs_fichiers_joints_form['nom_fichier'].'"/>'.$nom_f.'</a><br />';
echo '<a href="../custom/download_fichier_joint.php?filetodl='.$row_Rs_fichiers_joints_form['ID_mesfich'].'&type=FJM"/>'.$nom_f.'</a><br />';
  • Affichage du champ "identite" pour le prof ayant envoyé le fichier, plutôt que le champ "nom_prof" (car avec CAS, "nom_prof" contient l'uid)
<td class="tab_detail">
<?php
    // Modif RECIA : affichage du nom au lieu de l'ID si mode CAS
    if ($CONFIG['plugin_cas']['actif'] == 0) {
        echo $row_Rsmessage['nom_prof'];
    }
    else if ($CONFIG['plugin_cas']['actif'] == 1) {
        echo $row_Rsmessage['identite'];
    }
?></td>

===> Fichier enseignant/message_modif.php

  • Modification de la fonction javascript exécutant la suppression
// Modif RECIA : l'id message à supprimer etait écrit par php, ce qui n'a pas le comportement souhaite
// quand il y a plusieurs pieces jointes, c'est toujours la premiere qui etait supprimee.'
// + Correction du bug de retour lors de la suppression d'un fichier en mode message pour les profs'
function confirmation(id_fichier)
{  
  //if (confirm("Voulez-vous réellement supprimer la piece jointe "+sup_nom_fich+" ?")) { // Clic sur OK
  //  MM_goToURL('window','message_modif.php?ID_message=< ?php echo $_GET['ID_message']; ?>
  //  &classe_ID=< ?php echo $_GET['classe_ID']?>&groupe_ID=< ?php echo $_GET['groupe_ID']?>&ID_mesfich=
  //  < ?php echo $row_Rs_fichiers_joints_form['ID_mesfich'];?>&nom_fichier=
  //  < ?php echo $row_Rs_fichiers_joints_form['nom_fichier'] ;?>&sup=1');
  //}
  if (confirm("Voulez-vous réellement supprimer cette piece jointe ?")) { // Clic sur OK
    MM_goToURL('window','message_modif.php?ID_message=<?php
    echo $_GET['ID_message']; ?>&classe_ID=<?php echo $_GET['classe_ID']?>&groupe_ID=<?php
    echo $_GET['groupe_ID']?>&ID_mesfich='+id_fichier+'&sup=1<?php if(isset($_GET['dest_profs'])) { echo "&dest_profs=0"; } ?>');
  }
}
  • Modification de l'appel a la fonction javascript 'confirmation

Passage en paramètre de l'id du fichier a supprimer au lieu du nom du fichier :

<?php
// Modif RECIA : passage en parametre de l'id du fichier a la fonction confirmation a la place du nom de fichier
// <img src="../images/ed_delete.gif" ID="ed_delete" alt="Supprimer" title="Supprimer" width="11" height="11" border="0"
//onClick= "return confirmation('<?php echo $nom_f;? >')">
?>
<img src="../images/ed_delete.gif" ID="ed_delete" alt="Supprimer" title="Supprimer" width="11" height="11" border="0"
onClick= "return confirmation('<?php echo $row_Rs_fichiers_joints_form['ID_mesfich'];?>')">
  • Changement de la méthode pour supprimer un fichier joint à un message :

On utilise l'identifiant du fichier pour rechercher son nom dans la base, et on supprime le fichier associé (En tenant compte que l'emplacement des fichiers joints a aussi été modifié : $CONFIG['common']['datadir']."fichiers_joints_message/)

if (isset($_GET['sup'])&&($_GET['sup']==1)){
    // Modif RECIA
    if (!isset($_GET['ID_mesfich'])) {
        die("Operation non permise");
    }
    // On recupere le nom du fichier dans la base de donnees pour des raisons de securite
    $select_nom_fichier = "SELECT nom_fichier FROM cdt_message_fichiers WHERE ID_mesfich=".$_GET['ID_mesfich'];
    mysql_select_db($database_conn_cahier_de_texte, $conn_cahier_de_texte);
    $res = mysql_query($select_nom_fichier, $conn_cahier_de_texte) or die("Operation non permise");
    $row = mysql_fetch_array($res);
    $totalRows = mysql_num_rows($res);
    if ($totalRows > 0) {
        // Fichier trouve
        $nom_seul = $row[0];
 
        //on efface de la table fichiers_joints
        $deleteSQL = "DELETE FROM cdt_message_fichiers WHERE cdt_message_fichiers.ID_mesfich=".$_GET['ID_mesfich'];
        mysql_select_db($database_conn_cahier_de_texte, $conn_cahier_de_texte);
        $Result1 = mysql_query($deleteSQL, $conn_cahier_de_texte) or die(mysql_error());
 
 
        // MODIF RECIA : Changement emplacement fichiers joints messages
        $fichier = $CONFIG['common']['datadir']."fichiers_joints_message/$nom_seul";
        //$fichier = '../fichiers_joints_message/'.$_GET['nom_fichier'];
        unlink($fichier);
    }
    else{
        die('Impossible de supprimer le fichier');
    }
};
  • Utilisation de la variable $CONFIG['common']['datadir'] pour indiquer le nouveau chemin pour la sauvegarde des fichiers.

Modification à effectuer pour les 2 zones d'envoi de fichier.

// MODIF RECIA : emplacement fichiers joints
$dossier_destination = $CONFIG['common']['datadir']."fichiers_joints_message/";
  • Changement du lien de téléchargement des fichiers joints dans le récapitulatif des messages en bas de page.
// MODIF RECIA : Changement lien fichiers joints pour les messages
echo '<a href="../custom/download_fichier_joint.php?filetodl='.$row_Rs_fichiers_joints_form['ID_mesfich'].'&type=FJM"/>'.$nom_f.'</a>';
//echo '<a href="../fichiers_joints_message/'.$row_Rs_fichiers_joints_form['nom_fichier'].'"/>'.$nom_f.'</a>';


===> Fichier enseignant/message_supprime.php

  • Utilisation de la variable $CONFIG['common']['datadir'] pour indiquer le nouveau chemin pour la suppression des fichiers.
// MODIF RECIA : Changement emplacement fichiers joints messages
//$fichier = '../fichiers_joints_message/'.$row_Recordset3['nom_fichier'];
$fichier = $CONFIG['common']['datadir']."fichiers_joints_message/".$row_Recordset3['nom_fichier'];
unlink($fichier);


===> Fichier vie_scolaire/message_supprime.php

Utilisation de la variable $config['datadir'] pour indiquer le chemin pour la suppression des fichiers.


===> Fichier vie_scolaire/message_modif.php

Utilisation de la variable $config['datadir'] pour indiquer le chemin pour la sauvegarde des fichiers.

===> Fichier enseignant/agenda_supprime.php

===> Fichier enseignant/ecrire.php

  • Changement du lien pour les fichiers joints des messages provenant des profs principaux / vie scolaire et direction

(3 liens à modifier)

// Modif RECIA pour fichiers joints
// echo '<a href="../fichiers_joints_message/'.$row_Rs_fichiers_joints_form['nom_fichier'].'"/>'.$nom_f.'</a><br />';
echo '<a href="../custom/download_fichier_joint.php?filetodl='.$row_Rs_fichiers_joints_form['ID_mesfich'].'&type=FJM"/>'.$nom_f.'</a><br />';

===> Fichier planning.php

  • Changement du lien pour les fichiers joints des messages provenant des profs principaux / vie scolaire et direction

Fichiers issus de l'exportation de la BD par l'enseignant (sql)

====> Fichier enseignant/exportationCSV.php

  • Correction du nommage du fichier zip créé (car avec authentification CAS, nom_prof en session contient l'uid du prof, qui n'est pas parlant pour l'utilisateur)
  • changement de l'emplacement de stockage des fichiers créés par l'exportation.
  • changement de l'emplacement dans lequel prendre les fichiers joints pour créer le zip.
// MODIF RECIA : Changement du nom du fichier CSV (remplacement de l'uid par le nom prenom)
//$prof_name = mef(str_replace(".", "",$_SESSION['nom_prof']));
$prof_name = mef(str_replace(" ", "_",$_SESSION['identite']));
 
// MODIF RECIA : Changement du repertoire des fichiers CSV exportes
//$rep = "../exportation"; // répertoire où placer les fichiers
$rep = $CONFIG['common']['datadir']."exportation_csv/"; // repertoire ou placer les fichiers
 
// MODIF RECIA : Changement du repertoire des fichiers joints
//$rep_j = "../fichiers_joints"; // répertoire où se trouvent les fichiers joints
$rep_j = $CONFIG['common']['datadir']."fichiers_joints/";
  • Stockage en session du nom de fichier trouvé, qui sera proposé au téléchargement (pour éviter les problèmes de sécurité).
// MODIF RECIA : Stockage dans la session du nom du zip et de son chemin
$_SESSION['ziptodl'] = $rep."/".$file_name;
$_SESSION['ziptodl_filename'] = $file_name;
// MODIF RECIA : href=.... pour pointer sur download_zip.php
echo "
<script language=\"javascript\">
document.getElementById(\"zipDIV\").innerHTML=\"Nouveau fichier généré le $form_date :\";
document.getElementById(\"zipA\").href=\"../custom/download_zip.php\";
document.getElementById(\"zipA\").innerHTML=\"$file_name\";
document.getElementById(\"zipA\").style.color=\"#f00\";
document.forms[0].elements[3].value=\"$file_name\";
</script>";


Utilisation de la variable $CONFIG['common']['datadir'] pour indiquer le chemin d'accès aux fichiers joints pour créer le zip du cahier de texte.

Fichiers issus de l'exportation de la BD par le responsable d'établissement (sql)

====> Fichier direction/sauvegarde2.php

  • Changement de l'emplacement temporaire où est stocké le dump avant d'être proposé au téléchargement, pour rester cohérent.

(stockage dans $CONFIG['common']['datadir'])

<?php 
include "../authentification/authcheck.php" ;
if ($_SESSION['droits']<>4) { header("Location: ../index.php");};
require_once('../Connections/conn_cahier_de_texte.php');
 
function dumpMySQL($serveur, $login, $password, $base, $mode) 
{
   // Modif Recia : inclusion de la configuration
   require("../config/config.inc.php");
 
   $connexion = mysql_connect($serveur, $login, $password); 
   mysql_select_db($base, $connexion); 
 
   $entete = "-- ----------------------\n"; 
   $entete .= "-- dump de la base ".$base." au ".date("d-M-Y")."\n"; 
   $entete .= "-- ----------------------\n\n\n"; 
   $creations = ""; 
   $insertions = "\n\n"; 
 
   $listeTables = mysql_query("show tables", $connexion); 
   while($table = mysql_fetch_array($listeTables)) 
   { 
      // si l'utilisateur a demandé la structure ou la totale 
      if($mode == 1 || $mode == 3) 
      { 
         $creations .= "-- -----------------------------\n"; 
         $creations .= "-- creation de la table ".$table[0]."\n"; 
         $creations .= "-- -----------------------------\n"; 
         $listeCreationsTables = mysql_query("show create table ".$table[0], $connexion); 
         while($creationTable = mysql_fetch_array($listeCreationsTables)) 
         { 
           $creations .= $creationTable[1].";\n\n"; 
         } 
      } 
      // si l'utilisateur a demandé les données ou la totale 
      if($mode > 1) 
      { 
         $donnees = mysql_query("SELECT * FROM ".$table[0]); 
         $insertions .= "-- -----------------------------\n"; 
         $insertions .= "-- insertions dans la table ".$table[0]."\n"; 
         $insertions .= "-- -----------------------------\n"; 
         while($nuplet = mysql_fetch_array($donnees)) 
         { 
            $insertions .= "INSERT INTO ".$table[0]." VALUES("; 
            for($i=0; $i < mysql_num_fields($donnees); $i++) 
            { 
              if($i != 0) 
                 $insertions .=  ", "; 
              if(mysql_field_type($donnees, $i) == "string" || mysql_field_type($donnees, $i) == "blob") 
                 $insertions .=  "'"; 
              $insertions .= addslashes($nuplet[$i]); 
              if(mysql_field_type($donnees, $i) == "string" || mysql_field_type($donnees, $i) == "blob") 
                $insertions .=  "'"; 
            } 
            $insertions .=  ");\n"; 
         } 
         $insertions .= "\n"; 
      } 
   } 
 
   mysql_close($connexion); 
 
   // Modif RECIA :
   // Stockage temporaire du fichier dans le dossier 'datadir' et ajout de l'uid au nom du fichier,
   // au cas ou plusieurs profs sauvegardent en même temps.
   // $fichierDump = fopen("../fichiers_joints/cahier_de_texte.sql", "wb");
   $fichierDump = fopen($CONFIG['common']['datadir']."cahier_de_texte_".$_SESSION['nom_prof'].".sql", "wb");
   fwrite($fichierDump, $entete); 
   fwrite($fichierDump, $creations); 
   fwrite($fichierDump, $insertions); 
   fclose($fichierDump);  
 
} 
 
 
dumpMySQL($hostname_conn_cahier_de_texte, $username_conn_cahier_de_texte,  $password_conn_cahier_de_texte, $database_conn_cahier_de_texte, 3);
 
// Modif RECIA :
// Changement de l'emplacement du fichier a telecharger
// $Fichier_a_telecharger= '../fichiers_joints/cahier_de_texte.sql';
$Fichier_a_telecharger = $CONFIG['common']['datadir']."cahier_de_texte_".$_SESSION['nom_prof'].".sql";
switch(strrchr(basename($Fichier_a_telecharger), ".")) {
case ".sql": $type = "Document texte"; break;
case ".gz": $type = "application/x-gzip"; break;
case ".tgz": $type = "application/x-gzip"; break;
case ".zip": $type = "application/zip"; break;
case ".pdf": $type = "application/pdf"; break;
case ".png": $type = "image/png"; break;
case ".gif": $type = "image/gif"; break;
case ".jpg": $type = "image/jpeg"; break;
case ".txt": $type = "text/plain"; break;
case ".htm": $type = "text/html"; break;
case ".html": $type = "text/html"; break;
default: $type = "application/octet-stream"; break;
 
}
 
// Modif RECIA :
// Modification du nom du fichier pour qu'il soit toujours "cahier_de_texte.sql"
header("Content-disposition: attachment; filename=cahier_de_texte.sql");
header("Content-Type: application/force-download"); 
header("Content-Transfer-Encoding: $type\n"); // Surtout ne pas enlever le \n
header("Content-Length: ".filesize($Fichier_a_telecharger)); 
header("Pragma: no-cache"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public"); 
header("Expires: 0"); 
readfile($Fichier_a_telecharger); 
 
// Modif RECIA : pour la suppression du fichier
// unlink('../fichiers_joints/cahier_de_texte.sql');
unlink($CONFIG['common']['datadir']."cahier_de_texte_".$_SESSION['nom_prof'].".sql");
 
$updateGoTo = "publication.php";
  if (isset($_SERVER['QUERY_STRING'])) {
    $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?";
    $updateGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $updateGoTo));
?>

Impact sur l'exportation PDF des CDT par le responsable d'établissement

L'impact concerne les liens proposant le téléchargement des fichiers joints :

====> Fichier direction/classe_pdf.php

  • inclusion de la vérification de l'authentification
// Modif RECIA
//session_start();
include "../authentification/authcheck.php" ;
  • Changement des liens pour les fichiers joints cours et travail à faire (4 occurences)
// Modif RECIA : lien complet fichier joint
//$c1l2.="<a href=\"../fichiers_joints/".$row_RsFichiers['nom_fichier']."\">".$nom_f."</a><br>";
$c1l2.="<a href=\"".$CONFIG['common']['urlsite']."custom/download_fichier_joint.php?
filetodl=".$row_RsFichiers['ID_fichiers']."&type=FJ\">".$nom_f."</a><br>";

====> Fichier direction/classe_html.php

// Modif RECIA
//session_start();
include "../authentification/authcheck.php" ;
  • Changement des liens pour les fichiers joints cours et travail à faire (4 occurences)
// Modif RECIA : lien complet fichier joint
//$c1l2.="<a href=\"../fichiers_joints/".$row_RsFichiers['nom_fichier']."\">".$nom_f."</a><br>";
$c1l2.="<a href=\"".$CONFIG['common']['urlsite']."custom/download_fichier_joint.php?
filetodl=".$row_RsFichiers['ID_fichiers']."&type=FJ\">".$nom_f."</a><br>";



Impact sur l'exportation PDF du CDT par l'élève

L'impact concerne les liens proposant le téléchargement des fichiers joints :

====> Fichier lire_pdf.php

  • inclusion de la configuration générale
// Modif RECIA
session_start();
require('config/config.inc.php');
  • Changement des liens pour les fichiers joints cours et travail à faire (4 occurences)
// Modif RECIA : lien complet fichier joint
//$c1l2.="<a href=\"../fichiers_joints/".$row_RsFichiers['nom_fichier']."\">".$nom_f."</a><br>";
$c1l2.="<a href=\"".$CONFIG['common']['urlsite']."custom/download_fichier_joint.php?
filetodl=".$row_RsFichiers['ID_fichiers']."&type=FJ\">".$nom_f."</a><br>";

Désactivations de fonctionnalités

Désactivation de l'accès à un ancien CDT

===> Fichier archive/archive_menu.php

<?php
    // Modif RECIA : Desactivation de la fonctionnalite
    echo "<p align=\"center\"> Cette fonctionnalit&eacute; n'est pas disponible<br>".
         "<a href=\"../enseignant/enseignant.php\">Menu Enseignant</a></p>";
    die();
?>

===> Fichier enseignant/enseignant.php Suppression du lien dans le menu.

Désactivation du changement de mot de passe

===> Fichier direction/pass_modif.php

// Modif RECIA : Desactivation de la fonctionnalite si mode cas
if ($CONFIG['plugin_cas']['actif'] == 1) {
    echo "<p align=\"center\"> Cette fonctionnalit&eacute; n'est pas disponible<br>".
     "<a href=\"./direction.php\">Menu reponsable d'&eacute;tablissement</a></p>";
    die();
}

===> Fichier vie_scolaire/pass_modif.php

// Modif RECIA : Desactivation de la fonctionnalite si mode cas
if ($CONFIG['plugin_cas']['actif'] == 1) {
    echo "<p align=\"center\"> Cette fonctionnalit&eacute; n'est pas disponible<br>".
     "<a href=\"./vie_scolaire.php\">Menu vie scolaire</a></p>";
    die();
}

Idem pour l'enseignant dans la page de ses paramètres.

Masquage des liens des fonctionnalités désactivées

===> Fichier direction/direction.php

  • Changement de mot de passe
  • Me déconnecter

===> Fichier vie_scolaire/vie_scolaire.php

  • Changement de mot de passe
  • Me déconnecter

===> Fichier enseignant/enseignant.php

  • Me déconnecter

Plugin Authentification CAS

La Cassification de l'application devant permettre aussi la gestion du Global Logout de CAS, il a été nécessaire d'implémenter une gestion des sessions applicatives en base de données (pour permettre techniquement à CAS de pouvoir détruire les sessions applicatives basées sur des tickets cas expirés).

L'utilisation de CAS peut être activée ou désactivée, dans le fichier de configuration config/config.inc.php.

Redirection vers CAS et pré-traitements sur les infos de l'utilisateur

La page principale index.php a été modifiée pour supporter l'authentification CAS.

  • Si l'utilisateur arrive sans authentification CAS valide, il est dirigé vers la page d'authentification CAS,
  • Sinon, l'application profite de l'authentification CAS, l'utilisateur
// Mecanisme d'authentification CAS
require_once("./plugins/cas/cas.inc.php");

Le fichier permettant l'authentification CAS en elle-même est authentification/cas.inc.php

Il permet d'effectuer des pré-traitements sur les informations de l'utilisateurs (classes et groupes), et notamment de ne monter en session que les classes et groupes qui sont déjà connus par l'application afin d'éviter les problèmes d'incohérence.


Préparation de l'utilisateur avant navigation

Le fichier authentification/auth.php permet de stocker en session les informations nécessaires à la navigation de l'utilisateur sur l'application.

Dans le cas de l'authentification CAS, ce fichier devra remplir les rôles suivants :

  • stocker en session les informations de l'utilisateur essentielles à l'application,
  • affecter les bons droits à l'utilisateur en fonction de son profil (dans l'annuaire ENT),
  • l'orienter vers la bonne page en fonction de ses droits

Le fichier a donc été adapté pour que le fonctionnement soit différent si le plugin d'authentification CAS est activé ou désactivé.

S'il est activé :

  • On attribue à l'utilisateur des droits en fonction de son profil,
  • Si c'est un élève, on l'oriente sur le cahier de texte de sa classe (récupérée dans l'annuaire ENT)
  • Si c'est un parant, on lui laisse choisir parmi les classes de ses élèves
  • Si c'est un professeur, ou un personnel de direction ou vie scolaire, on crée son compte s'il n'existe pas (idem pour ses classes associées), et on l'oriente sur le bon tableau de bord. (prof / direction / ou vie scolaire)

S'il n'est pas activé, on suit le fonctionnement normal de l'application (récupération des droits de l'utilisateur en base, et orientation sur le bon tableau de bord).


Contrôle de la navigation

authentification/authcheck.php est le fichier appelé à chaque changement de page pendant la navigation. Il est chargé de vérifier que l'utilisateur est toujours bien connecté à l'application (session encore valide, contrôle du timeout), et que des règles de sécurité n'ont pas été outre-passées.

La seule modification effectuée sur ce fichier concerne l'inclusion du fichier de configuration générale ajouté par RECIA.

En effet, comme ce fichier.php est appelé par toutes les pages de l'application, on peut ainsi disposer a chaque instant de la configuration.

Toutefois, comme le fichier authcheck.php est appelée depuis différents niveaux d'arborescences, il a été nécessaire d'ajouter un morceau de code permettant de déterminer le chemin pour accéder à ce fichier configuration quel que soit l'endroit de référence.


====> Fichier authentification/authcheck.php :

<?php
session_start();
 
// Modif RECIA
// Comme le fichier AuthCheck est appelé depuis toutes les pages, depuis des chemins differents
// On cherche a retrouver son chemin vers la racine, pour inclure la configuration generale
 
$chaine_chemin = "";
// On compte le nombre de slash dans le chemin du script actuel sans tenir compte du premier
$nombre_slash = substr_count ($_SERVER['PHP_SELF'], "/") - 1;
// Si on est deja à la racine, on retourne une chaine vide
while ($nombre_slash > 1) {
    $chaine_chemin = $chaine_chemin."../";
    $nombre_slash--;
}
require($chaine_chemin.'config/config.inc.php');
 
if(!isset($_SESSION['last_access']) || !isset($_SESSION['ipaddr']) || !isset($_SESSION['nom_prof']))
{
    error_log("[CDT] DEBUG : Une des variables de session n'a pas ete trouvee - redirection");
    // Modif RECIA
    //header("Location: ../index.php");
    header("Location: ".$chaine_chemin."index.php");
    die();
}
// le $session_timeout est désormais fixé dans les paramètres généraux
// voir menu administrateur
// mais si pas defini avant mise à jour alors :
if(!isset($_SESSION['session_timeout'])){$_SESSION['session_timeout']=3600;};
 
if(time()-$_SESSION['last_access']>$_SESSION['session_timeout'])
{
    unset($_SESSION['last_access']);
    unset($_SESSION['user']);
    unset($_SESSION['ipaddr']);
    // Modif RECIA
    header("Location: ".$chaine_chemin."index.php");
    die();
}
if($_SERVER['REMOTE_ADDR']!=$_SESSION['ipaddr'])
{
    unset($_SESSION['last_access']);
    unset($_SESSION['user']);
    unset($_SESSION['ipaddr']);
    // Modif RECIA
    header("Location: $chaine_chemin/index.php");
    die();
}
$_SESSION['last_access']=time();
 
if ($CONFIG['debug_mode'] == 1) { error_log("[CDT] DEBUG : controle auth ok"); }
 
?>

Masquage des liens de deconnexion

En mode CAS, l'application étant utilisée à travers le portail, l'utilisateur ne peut pas se déconnecter simplement de l'application. Les liens de déconnexion sont donc masqués. La deuxième option serait de laisser les liens apparents, mais de déconnecter l'utilisateur de CAS, ce qui ne parait pas souhaitable dans notre cas.

====> Fichier enseignant/enseignant.php :

<?php
    // Modif RECIA : ne pas afficher le lien de deconnexion en mode CAS
    if ($CONFIG['plugin_cas']['actif'] == 0) {
        echo "<p align=\"left\" class=\"Style74\"><a href=\"../index.php\">Me d&eacute;connecter</a></p>";
    }
?>

Désactivation du changement de mot de passe et de nom (uid)

En mode CAS, l'utilisateur ne doit pas pouvoir changer son mot de passe dans l'application, puisque l'authentification est gérée uniquement par CAS.

Single Sign-Out

Le Single Sign-Out est géré de manière très simple par le fichier plugins/cas/cas.inc.php. C'est la ligne suivante qui se charge de tout le mécanisme :

// Gestion du global logout cas
phpCAS::handleLogoutRequests(false);

Le fonctionnement de handleLogoutRequest() est expliqué sur la page : handleLogoutRequest

Plugin Multi-Etablissements

Le mode multi-établissement permet d'utiliser l'application Cahier de Texte pour gérer plusieurs établissements. Chaque établissement utilisera une base de données spécifique.

Gestion de la connexion à la BD d'un établissement

La méthode utilisée (venant de la version de Montpellier) consiste à fabriquer dynamiquement le nom de la base à utiliser lorsqu'un utilisateur se connecte, en utilisant ses informations (L'établissement auquel il est rattaché, qui a été précédemment stockée en session).

Le fichier Connections/conn_cahier_de_texte.php a été modifié suivant ce mode de fonctionnement :


Impact sur la page d'accueil de l'application

On test simplement si l'application est en mode multi-établissements. Si c'est le cas, on effectue un test pour voir si le plugin CAS est activé.

A l'heure actuelle, le plugin CAS ne peut pas être activé seul.


Plugin ENT

Le plugin ENT permet l'intégration de l'application dans un Portail ENT. Il a été réalisé par le GIP Recia, et est adapté à l'ENT Esco-Portail, mais est paramétrable.

Module Administration de l'application

La page administration/index.php a été modifiée afin de supprimer le lien de création d'un nouvel établissement puisque celle-ci
ne se fera plus vial'application. 

Modifications techniques intrusives

enseignant/enseignant.php : Inclusion dans le menu de l'enseignant d'un fichier contrôlant l'affichage ou non d'un lien "Administrer" permettant d'accéder à l'administration de l'application. (Ce fichier n'est appelé que si le plugin ENT est déclaré comme ACTIF dans la configuration générale de l'application).

<?php // Ajout RECIA pour plugin ENT, module access_administrateur et module acces_enseignant_multi_rne
        include ("../config/config.inc.php");
        if ($CONFIG['plugin_ent']['actif'] == 1) {
            include($CONFIG['common']['dirroot']."/plugins/ent/m_acces_administrateurs/lien_administrateur.inc.php");
            include($CONFIG['common']['dirroot']."/plugins/ent/m_acces_enseignant_multi_rne/lien_choix_etablissement.inc.php");
        }
 
    ?>

Fichiers du plugin

  • plugins/ent/m_acces_administrateurs/lien_administrateur.inc.php : fichier contrôlant l'affichage ou non d'un lien "Administrer" permettant d'accéder à l'administration de l'application. C'est la fonction peut_passer_admin() (CF. 3ème point) qui test si l'utilisateur est autorisé à passer administrateur.
  • plugins/ent/m_acces_administrateurs/verif_droits_admin_pour_etab.php : page appelée par le lien "administrer", chargée d'attribuer provisoirement les droits d'administrateur à l'utilisateur connecté, après avoir vérifié qu'il est autorisé à les posséder. Les anciens droits de l'utilisateur sont stockés en session pour lui redonner lorsqu'il aura terminé d'utiliser les fonctions d'administration.
  • plugins/ent/commun_lib/ldap/fonctions_traitements_ldap.php : La fonction peut_passer_admin(), qui attend un UID et un RNE, est chargée de tester si l'utilisateur correspondant à l'UID à les droits nécessaires pour accéder à l'administration de l'application pour l'établissement indiqué par le RNE. Cette fonction vérifie simplement que l'utilisateur est bien membre du groupe "esco:admin:CAHIER_TEXTE_CAEN:local:<Nom_lycee_college>_<RNE>". Si c'est le cas, elle renvoie "true", sinon "false".
A TESTER EN MODE SANS PLUGIN
enseignant/index.php : contenait simplement un include du fichier authcheck.php. Ajout d'une redirection sur l'index du niveau supérieur,
quipermet de rediriger l'utilisateur sur sa bonne page d'accueil. (Ce fichier empêche aussi l'utilisateur de lister le répertoire).
  • administration/custom/retour_anciens_droits.php : Ce script enlève les droits d'administration à l'utilisateur. Il récupère les anciens
droits stockés en session. <== PLUS UTILISE CAR DES QUE L'UTILISATEUR SORT DE L'ADMINISTRATION, SES DROITS SONT RECALCULES A PARTIR DU TICKET CAS.
(Penser donc à enlever le stockage en session des anciens_droits qui ne sert plus ! Pas encore fait !)

Module Import depuis l'annuaire ENT

Le module d'import via l'annuaire ENT a été totalement réécrit de manière à offrir beaucoup plus de souplesse à l'administrateur. Il peut maintenant être utilisé en cours d'année, puisque chaque action peut être cochée ou décochée.

Fichiers du module

  • plugins/ent/m_import_ldap/config_m_import_ldap.inc.php : Ficher de configuration du module.
  • plugins/ent/m_import_ldap/index.php : Ficher d'accueil du module
  • plugins/ent/m_import_ldap/m_import_ldap_etape_1_1.php : listing des comptes obsoletes
  • plugins/ent/m_import_ldap/m_import_ldap_etape_1_1_action.php : réalisation de l'action de suppression
  • plugins/ent/m_import_ldap/m_import_ldap_etape_1_2.php : listing des comptes non connus et à mettre à jourd
  • plugins/ent/m_import_ldap/m_import_ldap_etape_1_2_action.php : réalisation de l'action d'ajout
  • plugins/ent/m_import_ldap/m_import_ldap_etape_2_1.php : listing des classes et groupes à importer
  • plugins/ent/m_import_ldap/m_import_ldap_etape_2_1_action.php : réalisation de l'action d'ajout
  • plugins/ent/m_import_ldap/m_import_ldap_etape_end.php : fin de l'import
  • plugins/ent/m_import_ldap/m_import_ldap_fonctions.js : fonctions javascript utilisées pour les cases à cocher.

Module Accès enseignant affectés à plusieurs établissements

Ce module permet aux enseignants affectés à plusieurs établissements de choisir à leur connexion l'établissement pour lequel ils veulent consulter un cahier de texte.

Un bouton de changement d'établissement est aussi disponible à tout instant.

Module Accès par les parents

Ce module permet d'afficher aux parents les classes de leur élèves sur leur page d'accueil. Ainsi, les parents choisissent la classe pour laquelle ils veulent consulter le cahier de texte.

Fichiers du module

  • plugins/ent/m_acces_parents/choisir_classe_etab.php : page permettant aux parents de choisir une classe parmi les classes de leurs élèves.


Procédure d'installation de la version CDT-Recia 1.1 (4.4.4.0 Modifiée)

Forçage du serveur apache en ISO

Sous linux, Apache étant a présent souvent en UTF-8 par défaut, une directive a été ajoutée dans le fichier de configuration d'apache situé dans : /etc/apache2/sites-available/ afin de forcer le serveur à envoyer l'information concernant le jeu de caractères (ISO).

<Directory /var/www/cahier_de_texte/>
    AddDefaultCharset iso-8859-1
</Directory>

Remplacement de la page contribution.php

(pour ne pas afficher la licence chocolatware)

A faire

Externaliser les "wrappers" des attributs CAS dans des fonctions (dans le répertoire plugin/cas) pour que d'autres académies puisse facilement l'adapter à leur annuaire sans modifier le fichier auth.php

pages développeurs
pages "communauté ESCO"