Différences

Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.

Lien vers cette vue

util:emploi_du_temps_profs [2017/07/22 11:53] (Version actuelle)
Ligne 1: Ligne 1:
 +~~NOCACHE~~
 +
 +<php>
 +//<?
 +
 +// http://www.dansemusique.net/doku.php?id=util:emploi_du_temps_profs
 +
 +///////////////////////////////////////////////////////////////////////////////////////////////////
 +// Afficher les erreurs à l'écran
 +ini_set('display_errors', 1);
 +// Enregistrer les erreurs dans un fichier de log
 +ini_set('log_errors', 1);
 +// Nom du fichier qui enregistre les logs (attention aux droits à l'écriture)
 +ini_set('error_log', dirname(__file__) . '/log_error_php.txt');
 +// Afficher les erreurs et les avertissements
 +error_reporting(E_ALL);
 +///////////////////////////////////////////////////////////////////////////////////////////////////
 +
 +define('XML_FILEPATH', './statique/adherents/public/');
 +// define('XML_FILENAME', '2011-2012_adherents.xml');
 +// define('XML_FILENAME', '2012-2013_adherents.xml');
 +// define('XML_FILENAME', '2013-2014_adherents.xml');
 +define('XML_FILENAME', '2014-2015_adherents.xml');
 +
 +
 +
 +include_once(dirname(__FILE__) . '/../../statique/util/lib-xml-xsl/lib-xml-xsl.inc.php');  // procXSLstr_dom
 +// include_once(dirname(__FILE__) . '/../../statique/util/dyna/uniq_adherents_xslt.php');   
 +include_once(dirname(__FILE__) . '/../../statique/util/dyna/req_arr_adherents_xslt.php');  // xsl_str__liste_prof() - xsl_str__liste_attribute(...) - xsl_str__liste_element(...)
 +include_once(dirname(__FILE__) . '/../../statique/util/dyna/abstract_adherents_xslt.php'); // xsl_str__abstract()
 +
 +// call it by http://www.dansemusique.net/doku.php?id=util:emploi_du_temps_profs
 +
 +
 +
 +///////////////////////////////////////////////////////////////////////////////////////////////////
 +//fn:codepoints-to-string((int,int,...))    Creates a string from a sequence of the Unicode Standard code points
 +//Example: codepoints-to-string((84, 104, 233, 114, 232, 115, 101))
 +//Result: 'Thérèse'
 +//
 +//fn:string-to-codepoints(string)    Returns the sequence of the Unicode standard code points from a string
 +//Example: string-to-codepoints("Thérèse")
 +//Result: (84, 104, 233, 114, 232, 115, 101)
 +//        (84, 104, 233, 114, 232, 115, 101)
 +//
 +//fn:codepoint-equal(comp1,comp2)    Returns true if the value of comp1 is equal to the value of comp2,
 +//                                   according to the Unicode code point collation
 +//                                   (http://www.w3.org/2005/02/xpath-functions/collation/codepoint),
 +//                                   otherwise it returns false
 +//! retruns (84, 104, 233, 114, 232, 115, 101)
 +function utf8_to_unicode_codepoints($text)
 +{
 +     // Le wiki est en UTF8
 +     $converted_string = iconv("UTF-8", "iso8859-15", $text); // UCS-4BE UTF-16BE or UCS-2BE
 +     $arr_conv_str = unpack('C*', $converted_string); // array unpack ( string $format , string $data ) 'C'
 +     return '(' . implode(', ', $arr_conv_str) . ')';
 +}
 +//
 +// echo '<pre>' . PHP_EOL;
 +// echo utf8_to_unicode_codepoints("Thérèse");
 +// echo '</pre>' . PHP_EOL;
 +///////////////////////////////////////////////////////////////////////////////////////////////////
 +
 +
 +
 +///////////////////////////////////////////////////////////////////////////////////////////////////
 +//!
 +//! add_to_emploi_du_temps(&$horaire, $annee, $id_adh, $prenom, $nom, $formule, $type, $musique, $niveau, $date, $heure, $duree, $salle)
 +//!
 +//! on ne peut pas mettre   <xsl:disable-output-escaping= "yes" />
 +//!
 +function  xsl_str__emploi_du_temps($professeur)
 +{
 +$xsl_str = <<<'EOT'
 +<?xml version="1.0" encoding="ISO-8859-1"?>
 +<!DOCTYPE xsl:stylesheet SYSTEM "http://www.dansemusique.net/statique/util/lib-xml-xsl/xml-html.dtd">
 +
 +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 +<xsl:output method="text"
 +            indent="no"
 +            encoding="ISO-8859-1"
 +            omit-xml-declaration = "yes" />
 +
 +<xsl:preserve-space elements="no" /> 
 +
 +<xsl:template match="/">
 +
 +<xsl:for-each select="adherents/adherent[valide='y']">
 +
 +     <xsl:sort select="concat(@nom, @prenom)"
 +                order='ascending'
 +                data-type='text' />
 +
 +        <!-- id_adh doit &ecirc;tre renseign&eacute; -->
 +        <xsl:for-each select="current()[@id_adh!='']">
 +            <!-- Sauvegarde de la variable id_adh de l'adh&eacute;rent -->
 +            <xsl:variable name="id_adh"><xsl:value-of select="@id_adh" /></xsl:variable>
 +            <xsl:variable name="prenom"><xsl:value-of select="@prenom" /></xsl:variable>
 +            <xsl:variable name="nom"><xsl:value-of select="@nom" /></xsl:variable>
 +                <xsl:for-each select="activites/activite">
 +                    <xsl:variable name="professeur"><xsl:value-of select="@professeur" /></xsl:variable>
 +                    <xsl:for-each select="current()[$professeur='%%professeur%%']">
 +                        <xsl:variable name="formule"><xsl:value-of select="@formule" /></xsl:variable>
 +                        <xsl:variable name="type"><xsl:value-of select="@type" /></xsl:variable>
 +                        <xsl:variable name="musique"><xsl:value-of select="@musique" /></xsl:variable>
 +                        <xsl:variable name="niveau"><xsl:value-of select="@niveau" /></xsl:variable>
 +                            <xsl:for-each select="creneau">
 +                                <!-- add_to_emploi_du_temps(&$horaire, $annee, $id_adh, $prenom, $nom, $formule, $type, $musique, $niveau, $date, $heure, $duree, $salle); -->
 +                                <![CDATA[   $log .= add_to_emploi_du_temps($horaire, $annee, "]]>
 +                                <xsl:copy-of select="$id_adh" /><![CDATA[", "]]>
 +                                <xsl:copy-of select="$prenom" /><![CDATA[", "]]>
 +                                <xsl:copy-of select="$nom" /><![CDATA[", "]]>
 +                                <xsl:value-of select="$formule" /><![CDATA[", "]]>
 +                                <xsl:value-of select="$type" /><![CDATA[", "]]>
 +                                <xsl:value-of select="$musique" /><![CDATA[", "]]>
 +                                <xsl:value-of select="$niveau" /><![CDATA[", "]]>
 +                                <xsl:value-of select="@date" /><![CDATA[", "]]>
 +                                <xsl:value-of select="@heure" /><![CDATA[", "]]>
 +                                <xsl:value-of select="@duree" /><![CDATA[", "]]>
 +                                <xsl:value-of select="@salle" /><![CDATA[");
 +    ]]>
 +                            </xsl:for-each>
 +                </xsl:for-each>
 +            </xsl:for-each>
 +        </xsl:for-each>
 +       
 +</xsl:for-each>
 +</xsl:template>
 +
 +</xsl:stylesheet>
 +EOT;
 +// for-each ...  disable-output-escaping="yes"
 +// concat('G', &quot;&amp;&quot;, 'amp;eacute;rard')
 +// 'G&#xE9;rard'
 +// contains(name(@professeur),'é')
 +// <![CDATA[   echo(']]><xsl:copy-of select="$professeur" /><![CDATA[');]]> -> G&eacute;rard
 +//
 +//            <![CDATA[   echo(']]><xsl:copy-of select="$professeur" /><![CDATA[') . '<br />' . PHP_EOL;]]>
 +//            <![CDATA[   echo(']]><xsl:value-of select="activites/activite/@professeur" /><![CDATA[') . '<br />' . PHP_EOL;]]>
 +// G&eacute;rard<br />
 +// G&eacute;rard<br />
 +// G&eacute;rard<br />
 +//             <xsl:variable name="prof"><xsl:value-of select="activites/activite/@professeur" /></xsl:variable>
 +
 +
 +
 + // $professeur = html_entity_decode($professeur, ENT_COMPAT | ENT_QUOTES, 'ISO-8859-1');
 + // $professeur = htmlentities($professeur, ENT_COMPAT | ENT_QUOTES, 'ISO-8859-1');
 + // $professeur = htmlentities($professeur, ENT_COMPAT | ENT_QUOTES, 'ISO-8859-1');
 + // $professeur = htmlentities($professeur, ENT_COMPAT | ENT_QUOTES, 'ISO-8859-1');
 +
 +    return str_replace('%%professeur%%', $professeur, $xsl_str);
 +}
 +
 + 
 +function add_to_emploi_du_temps(&$horaire, $annee, $id_adh, $prenom, $nom, $formule, $type, $musique, $niveau, $date, $heure, $duree, $salle)
 +{
 +    if (   isset($horaire)
 +        && isset($id_adh)
 +        && isset($prenom)
 +        && isset($nom)
 +        && isset($formule)
 +        && isset($type)
 +        && isset($musique)
 +        && isset($niveau)
 +        && isset($date)
 +        && isset($heure)
 +        && isset($duree)
 +        && isset($salle) )
 +    {
 +        if (   (strlen($id_adh) > 0) // !empty()
 +            && (strlen($date) > 0)
 +            && (strlen($heure) > 0) )
 +            {
 +                $creneau = $heure;
 +                ///////////////////////////////////////////////////////////////////////////////////
 +                // PRÉCONDITIONS SYNTAXIQUES
 +                // "mardi", "20:15-21:15", "60"
 +                $pattern = '/^.*(\d\d:\d\d-\d\d:\d\d).*$/i';
 +                //
 +                if (preg_match($pattern, $creneau) != 1)
 +                   return 'ERREUR  : PR&Eacute;CONDITIONS SYNTAXIQUES du CR&Eacute;NEAU INCORRECTE « ' . $creneau . ' » <br />' . PHP_EOL;
 +                ///////////////////////////////////////////////////////////////////////////////////
 +                $heure = heure_depuis_creneau($creneau);
 +                $duree = duree_depuis_creneau($creneau);
 +                $date = ucfirst( strtolower($date) ); // $jour
 +                //
 +                ///////////////////////////////////////////////////////////////////////////////////
 +                // PRÉCONDITIONS SYNTAXIQUES
 +                // "mardi", "20:15-21:15", "60"
 +                ///////////////////////////////////////////////////////////////////////////////////
 +                //
 + // si c'est un cours alors on ne met que le nom de l'élève
 +                if (strcmp($type, 'Cours') == 0)
 + {
 + // si l'année et le id_adh sont disponible, on les met pour qu'ils constituent un lien hypertexte.
 + if (strlen($annee) > 0)
 +      $label = $annee . ' ' . $id_adh . ' ' . $prenom . ' ' . $nom;
 +                    else $label = $prenom . ' ' . $nom;
 + }
 +                else $label = $type . ' ' . $niveau . '<br />' . $prenom . ' ' . $nom;
 +                /*
 +                // S'il n'y a pas déjà un libellé
 +                if (!isset($horaire[$date][$heure])) // ['label']
 +                    $horaire[$date][$heure]    = array('duree' => $duree, 'label' => $label);
 +                */
 +               
 +               //DBG echo 'AJOUTE_CRENEAU_EMPLOI_DU_TEMPS : ' . $heure . ' ' . $duree . 'min (' . $date . ') '  . '<br />' . PHP_EOL;
 +               return ajoute_creneau_emploi_du_temps($horaire, $date, $heure, $duree, $label);
 +            }
 +            else
 +            {
 +                return 'ERREUR  : Champs vides « ' . $id_adh . ' » « ' . $date . ' » « ' . $heure . ' »<br />' . PHP_EOL;
 +            }
 +    }
 +    else
 +    {
 +        return 'ERREUR  : Champs inexistants « ' . $id_adh . ' » « ' . $date . ' » « ' . $heure . ' »<br />' . PHP_EOL;
 +    }
 +   
 +    return 'ERREUR  : Fin de fonction atteinte&nbsp;!<br />' . PHP_EOL;
 +}
 +
 +
 +include_once(dirname(__FILE__) . '/../../statique/util/emploi-du-temps.php'); // emploi_du_temps()
 +
 +
 +//!
 +function affiche_emploi_du_temps_prof($xml_filepath, $xml_filename, $professeur)
 +{
 +    // string urlencode ( string $str )
 +    $xmldom = loadXML_dom($xml_filepath . $xml_filename, 'adherents');
 +
 +    $annee  = '';
 +   
 +    if (preg_match('/^(?P<annee1>\d{4})-(?P<annee2>\d{4})_/', $xml_filename, $matches))
 +        $annee  = $matches['annee1'] . '-' . $matches['annee2'];
 +
 +    // echo '<pre>' . PHP_EOL;
 +    // print_r($annee);
 +    // echo '</pre>' . PHP_EOL;
 +
 +    $commande = procXSLstr_dom($xmldom, xsl_str__emploi_du_temps($professeur));
 +
 +    // echo($commande); // . '<br />' . PHP_EOL;
 +
 +    $horaire = array();
 +    $log = '';
 +    eval($commande);
 +    echo '<p style="font-family: Courier New,Courier,Lucida Sans Typewriter,Lucida Typewriter,monospace;font-size: 12px; font-style: normal; font-variant: normal; font-weight: bold; line-height: 14px;">' . $log . '</p>';
 +
 +    // echo($commande); // . '<br />' . PHP_EOL;
 +
 +    //
 +   // Pour trouver la min hour from et la max hour upto + 1 : On balaye horaire
 +   $hmin = 24;
 +   $hmax =  0;
 +   get_hmin_hmax_from($horaire, $hmin, $hmax);
 +   cree_creneaux_vides_emploi_du_temps($horaire, '&nbsp;', $hmin, $hmax, 7, 5);  // 7 = samedi aussi         //    $libellé : '&nbsp;' -> '/'
 +   emploi_du_temps($horaire, $hmin, $hmax, 7, 5); // 10 -> 5
 +}
 +
 +
 +
 +
 +// Récupération de l'année (xml) choisie
 +$annee_xml      = isset($_POST['bouton_emploi_du_temps']) && isset($_POST['annee'])      ? $_POST['annee']      : XML_FILENAME; // Année choisie
 +// Récupération du professeur choisi
 +$professeur = isset($_POST['bouton_emploi_du_temps']) && isset($_POST['professeur']) ? htmlentities($_POST['professeur'], ENT_COMPAT | ENT_QUOTES, 'UTF-8') : ''; // Professeur choisi
 +
 +/*
 +echo '<pre>' . PHP_EOL;
 +print_r($_POST);
 +echo '</pre>' . PHP_EOL;
 +
 +Array
 +(
 +    [annee] => 2016-2017_adherents_musique.xml
 +    [professeur] => Anne-Marie
 +    [bouton_emploi_du_temps] => Générer l'emploi du temps
 +)
 +*/
 +
 +
 +// Récupération de la liste des professeurs
 +$xmldom = loadXML_dom(XML_FILEPATH . $annee_xml, 'adherents');
 +$arr_prof = array_unique(explode(',', procXSLstr_dom($xmldom, xsl_str__liste_attribute('/adherents/adherent/activites/activite', 'professeur', SORT_NUMERIC)) ));
 +sort($arr_prof, SORT_STRING);
 +array_shift($arr_prof);
 +
 +$liste_prof = '';
 +foreach ($arr_prof as $prof)
 +   $liste_prof .= '<option value="' . $prof . '"' . ((strcmp($professeur, $prof) == 0) ? ' selected' : '') . '>'  . $prof . '</option>' . PHP_EOL;
 +
 +$arr_annee = array('2011-2012_adherents.xml',
 +                   '2012-2013_adherents.xml',
 +                   '2013-2014_adherents.xml',
 +                   '2014-2015_adherents.xml',
 +                   '2015-2016_adherents.xml',
 +                   '2016-2017_adherents_musique.xml',
 +                   '2016-2017_adherents_danse.xml'
 +                   );
 +   
 +$arr_replace = array(
 +                   '.xml' => '',
 +                   'adherents' => '',
 +                   '_' => '',
 +                   );
 +   
 +$liste_annee_xml = '';
 +foreach ($arr_annee as $an_xml)
 +   $liste_annee_xml .= '<option value="' . $an_xml . '"' . ((strcmp($annee_xml, $an_xml) == 0) ? ' selected' : '') . '>'  . str_replace(array_keys($arr_replace), $arr_replace, $an_xml) . '</option>' . PHP_EOL;
 +
 +
 +echo <<<EOT
 +<p>
 +   <form name="form_emploi_du_temps" method="POST" action="{$_SERVER['REQUEST_URI']}" enctype="multipart/form-data" style="text-align:left;">
 +      <select name="annee">
 +        {$liste_annee_xml}
 +      </select>
 +      &nbsp;
 +      <select name="professeur">
 +        {$liste_prof}
 +      </select>
 +      &nbsp;
 +      <input type="submit" value="G&eacute;n&eacute;rer l'emploi du temps" name="bouton_emploi_du_temps" size="20" />
 +   </form>
 +</p>
 +EOT;
 +
 +/*
 +echo '<pre>' . PHP_EOL;
 +echo $annee_xml . PHP_EOL;
 +echo $professeur . PHP_EOL;
 +print_r($liste_prof);
 +echo '</pre>' . PHP_EOL;
 + */
 +
 +if (!empty($professeur))
 +   affiche_emploi_du_temps_prof(XML_FILEPATH, $annee_xml, $professeur);
 +
 +</php>
 +
  
    Driven by DokuWiki Recent changes RSS feed        
 
 
Nous vous rappelons que vous disposez d'un droit d'accès, de modification, de rectification et de suppression des données qui vous concernent. Pour exercer ce droit, adressez-vous au webmaster .