diff options
author | Ludovic Pouzenc <ludovic@pouzenc.fr> | 2018-07-05 00:25:51 +0200 |
---|---|---|
committer | Ludovic Pouzenc <ludovic@pouzenc.fr> | 2018-07-05 00:25:51 +0200 |
commit | ac54f5224d4470de9d8ae088e1338dea52668c9d (patch) | |
tree | 7f77b2a8176343e6632fbd99ff431c21974ef482 /final/app/include/ludo | |
parent | 9738017972a6d4fea655926525b3c67dd85740cf (diff) | |
download | 2007-AWOR-ac54f5224d4470de9d8ae088e1338dea52668c9d.tar.gz 2007-AWOR-ac54f5224d4470de9d8ae088e1338dea52668c9d.tar.bz2 2007-AWOR-ac54f5224d4470de9d8ae088e1338dea52668c9d.zip |
Renommage beta_accents -> final pour diffs
Diffstat (limited to 'final/app/include/ludo')
-rw-r--r-- | final/app/include/ludo/TODO_list.txt | 24 | ||||
-rw-r--r-- | final/app/include/ludo/auth.inc.php | 78 | ||||
-rw-r--r-- | final/app/include/ludo/config.inc.php | 74 | ||||
-rw-r--r-- | final/app/include/ludo/div_create_or_modif.php | 74 | ||||
-rw-r--r-- | final/app/include/ludo/fonctions.inc.php | 548 | ||||
-rw-r--r-- | final/app/include/ludo/html_elements.inc.php | 185 | ||||
-rw-r--r-- | final/app/include/ludo/mail_textarea.php | 45 | ||||
-rw-r--r-- | final/app/include/ludo/majDispo.php | 39 | ||||
-rw-r--r-- | final/app/include/ludo/redir.inc.php | 20 | ||||
-rw-r--r-- | final/app/include/ludo/session_verify.inc.php | 9 |
10 files changed, 1096 insertions, 0 deletions
diff --git a/final/app/include/ludo/TODO_list.txt b/final/app/include/ludo/TODO_list.txt new file mode 100644 index 0000000..724c46c --- /dev/null +++ b/final/app/include/ludo/TODO_list.txt @@ -0,0 +1,24 @@ +Accueil > _Listes_ (virer le lien) + +mysql_free_result après les requetes et mysql_close ? + +configuration de PHP dans un fichier INI : +array parse_ini_file ( string filename [, bool process_sections] ) + + +Vérifier que les redirections vers authentification et le retour fasse bien suivre les paramètres +--> bookmarque details_reunion?idR=1 + + +faire une fonction JS qui appelle une page php ou créer toute seule un cookie qui gère la préférence du css. + +Se préoccuper des accents et des encodages de pages ! + +Faire un pied de page avec nos noms, et les logos valide XHTML, CSS... + +TODO : un script php qui purge la base +-> export SQL ancienne base ? +-> suppression des réunions plus vielles que... +-> suppression des Personnes n'ayant jamais changé leur profil et n'ayant plus de réunion les concernant +-> suppression de tout les créneaux non référencés +-> suppression de toutes les listes privées obsoletes diff --git a/final/app/include/ludo/auth.inc.php b/final/app/include/ludo/auth.inc.php new file mode 100644 index 0000000..2491203 --- /dev/null +++ b/final/app/include/ludo/auth.inc.php @@ -0,0 +1,78 @@ +<?php +/* + * Collection de fonctions pour une authentification externe POP3 + */ + +// Constantes d'erreur +define("ERR_POP3_AUTH_BADSOCK", -1); +define("ERR_POP3_AUTH_SERVERNACK", -2); +define("ERR_POP3_AUTH_BADUSER", -3); +define("ERR_POP3_AUTH_BADPASS", -4); +define("ERR_BAD_PARAMS", -100); + +// Fonction d'authentification pop3 +function pop3_auth_simple($mail, $upw) +{ + if ( ($ret = ereg ( "(^.*)@([[:alnum:]]+\.[[:alnum:]]+)", $mail, $re_tokens ) ) ) + { + /* $re_tokens [] + * [0] : email complet + * [1] : nom_mail + * [2] : serveur_mail + */ + require_once('config.inc.php'); + $srv_conf = $CONFIG['AUTH']['POP']['SERVERS'][strtolower($re_tokens[2])]; + if ( is_array($srv_conf) ) + { + $server=$srv_conf['subdomain']; + $port=$srv_conf['port']; + if ( $srv_conf['username_is_full_mail'] ) + { $user = $mail; } else { $user = $re_tokens[1]; } + return pop3_auth ($server, $port, $user, $upw); + } + } + /* DEBUG + echo $mail . "\n" . $ret . "\n";; + print_r($re_tokens); + */ + return ERR_BAD_PARAMS; +} + +function pop3_auth ($server, $port, $user, $upw) +{ + //echo "DEBUG : fsockopen($server, $port, $errno, $errstr, 10);"; + $sock = @fsockopen($server, $port, $errno, $errstr, 10); + if ( $sock === false) + { + return ERR_POP3_AUTH_BADSOCK; + } + + //stream_set_timeout ( $sock, 1, 0 ); + + fputs($sock, "user $user\r\n"); + + if ( pop3_GetAndTestReply($sock) === false ) + { + return ERR_POP3_AUTH_BADUSER; + } + + fputs($sock, "pass $upw\r\n"); + + if ( pop3_GetAndTestReply($sock) === false ) + { + return ERR_POP3_AUTH_BADPASS; + } + + fputs($sock, "quit\r\n"); + + return 0; +} + +// Fonction interne testant les réponses du serveur POP3 +function pop3_GetAndTestReply($sock) +{ + $reply = fgets($sock, 128); + echo $reply . "\n"; + return ( substr($reply, 0, 4) == "+OK " ); +} +?>
\ No newline at end of file diff --git a/final/app/include/ludo/config.inc.php b/final/app/include/ludo/config.inc.php new file mode 100644 index 0000000..7f1d587 --- /dev/null +++ b/final/app/include/ludo/config.inc.php @@ -0,0 +1,74 @@ +<?php +$CONFIG = array +( + 'adminMail' => 'jmi@iut-blagnac.fr', + 'automatedMail' => 'no_reply@iut-blagnac.fr', + 'AUTH' => array + ( + 'POP' => array + ( + 'SERVERS' => array + ( + 'wanadoo.fr' => array + ( + 'subdomain' => 'pop.orange.fr', + 'port' => 110, + 'username_is_full_mail' => false + ), + 'orange.fr' => array + ( + 'subdomain' => 'pop.orange.fr', + 'port' => 110, + 'username_is_full_mail' => false + ) + ) + ), + 'bypass_if_local' => false + ), + 'CSS' => array + ( + 'CHOOSER_LIST' => array + ( + // 'nom à afficher' => 'nom_fichier_sans_extension' + 'standard' => 'ice', + 'Glace (ancien)' => 'ice_moche', + 'bleu' => 'style1' + ) + ), + 'MAIL' => array + ( + 'TEMPLATES' => array + ( + 'cree' => array + ( + 'caption' => 'Nouvelle Réunion', + 'tpl_file' => 'mail_cree.php' + ), + 'modif' => array + ( + 'caption' => 'Réunion modifiée', + 'tpl_file' => 'mail_modif.php' + ), + 'annul' => array + ( + 'caption' => 'Réunion annulée', + 'tpl_file' => 'mail_annul.php' + ), + 'fixee' => array + ( + 'caption' => 'Réunion fixée', + 'tpl_file' => 'mail_fixee.php' + ) + ) + ), + 'SUPERUSERS' => array ('jeremie.denoyer', 'lpouzenc'), + 'UPLOAD' => array + ( + 'accepted_files' => array + ( + 'jpg', 'jpeg', 'gif', 'png', 'svg', 'pdf', 'ps', 'txt', 'rtf', 'csv', 'doc', 'docx', 'ppt', 'xls', 'sxw','sxp','sxd', 'odt', 'odg', 'odp', 'avi', 'mpg', 'mpeg', 'rm', 'flv', 'mp3', 'mp4', 'ogg','htm','html','zip', 'rar', 'tar', 'gz', 'bz2', 'ace' + ), + 'relative_path' => 'final/upload_files/' + ) +); +?> diff --git a/final/app/include/ludo/div_create_or_modif.php b/final/app/include/ludo/div_create_or_modif.php new file mode 100644 index 0000000..34e81ca --- /dev/null +++ b/final/app/include/ludo/div_create_or_modif.php @@ -0,0 +1,74 @@ +<?php +require_once ('../tools.inc.php'); + +$isModif=false; +if ( isset ( $_GET['idR']) ) +{ + if ( ! isset($_GET['objetR']) || ! isset($_GET['lieuR']) || ! isset($_GET['ordreJourR']) || ! isset($_GET['remarquesR']) ) + { + $errmsg="Impossible de modifier la réunion : Paramètres incorrects\n"; + return; + } + $idR=htmlentities(stripslashes_if_needed($_GET['idR']), ENT_QUOTES); + $objetR=htmlentities(stripslashes_if_needed($_GET['objetR']), ENT_QUOTES); + $lieuR=htmlentities(stripslashes_if_needed($_GET['lieuR']), ENT_QUOTES); + $ordreJourR=htmlentities(stripslashes_if_needed($_GET['ordreJourR']), ENT_QUOTES); + $remarquesR=htmlentities(stripslashes_if_needed($_GET['remarquesR']), ENT_QUOTES); + + $isModif=true; +} +?> +<form action="" method="post"> + <input name="action" type="hidden" value="modif_detail_reunion" /> +<?php + echo ' <input name="idR" type="hidden" value="' . $idR . '" />' +?> + <table class="detail_reunion" summary="Détail de la réunion que vous avez sélectionnée"> + <thead> + <tr> + <th colspan="2"> + <?php if ($isModif) { echo 'Modification des détails de la réunion'; } else { echo 'Création d\'une réunion'; } ?> + </th> + </tr> + </thead> + <tbody> + <tr> + <td><strong>Objet :</strong></td> + <td> + <input name="objetR" type="text" size="40" <?php if ($isModif) { echo 'value="' . $objetR .'"'; } ?>></input> + </td> + </tr> + <tr> + <td><strong>Lieu :</strong></td> + <td> + <input name="lieuR" type="text" size="40" <?php if ($isModif) { echo 'value="' . $lieuR .'"'; } ?>></input> + </td> + </tr> + <tr> + <td><strong>Ordre du jour :</strong></td> + <td> + <textarea name="ordreJourR" cols="40" rows="3"><?php if ($isModif) { echo $ordreJourR; } ?></textarea> + </td> + </tr> + <tr> + <td><strong>Remarques :</strong></td> + <td> + <textarea name="remarquesR" cols="40" rows="3"><?php if ($isModif) { echo $remarquesR; } ?></textarea> + </td> + </tr> + <tr> + <td><strong>Etat :</strong></td> + <td> + <input name="isCancelled" type="checkbox">Annulée</input> + <input name="isHidden" type="checkbox" checked="checked">Disponibilités masquées</input> + </td> + </tr> + <tr> + <!--<td> </td>--> + <td colspan="2"> + <input name="Valider" type="submit" value="Valider"></input> + </td> + </tr> + </tbody> + </table> +</form>
\ No newline at end of file diff --git a/final/app/include/ludo/fonctions.inc.php b/final/app/include/ludo/fonctions.inc.php new file mode 100644 index 0000000..9124ac5 --- /dev/null +++ b/final/app/include/ludo/fonctions.inc.php @@ -0,0 +1,548 @@ +<?php +/* + * Fonctions de génération de message d'erreur pour utilisateur (et le debuggueur !) + */ +// Fonction retournant un message d'erreur correspondant à une erreur mysql +function mysql_generate_errmsg() +{ + if ( isset($_REQUEST['debug']) ) + { + return 'Erreur SQL numéro ' . mysql_errno() . ' : ' . mysql_error(); + }else{ + return 'Une erreur de base de données s\'est produite, veuillez réessayer ultérieurement.'; + } +} + +// Fonction retournant un message d'erreur correspondant à un numero d'erreur de pop3_auth(...) +function pop3_generate_errmsg($errno) +{ + require_once 'auth.inc.php'; + + if ( isset($_REQUEST['debug']) ) + { + $msg = 'Erreur authentification POP3 de code ' . $errno; + }else{ + switch ($errno) + { + case ERR_POP3_AUTH_BADUSER : + case ERR_POP3_AUTH_BADPASS : + $msg = 'Authentification rejetée : Vérifiez votre identifiant et saisissez votre mot de passe à nouveau'; + break; + case ERR_BAD_PARAMS : + $msg = 'Adresse email invalide, ou serveur mail non répertorié'; + break; + default : + $msg = 'Une erreur de communication avec le service d\'authentification s\'est produite,' . + 'veuillez réessayer ultérieurement.'; + break; + } + } + return $msg; +} + +/* + * Génération du code html d'une case du tableau croisé Créneau/Presonnes ayant comme personne $idP, + * comme créneau $idC. Si $idEditable est vrai je pourrai cliquer sur le bouton + * pour donner ma disponibilité. $estDispo peut-être 'oui', 'non', ou '' et signifie que la personne a déjà répondu 'oui', non' + * ou n'a pas encore répondu. + */ +// Génération d'une case +function generate_html_dispo_case($idR, $idP, $idC, $isEditable, $estDispo, $withTD=false, $class='') +{ + // Alignement html + require_once('html_elements.inc.php'); + if ( ! $isEditable ) + { + if ( $withTD ) { echo " <td $class>\n "; } + // Cas général, on n'est pas la personne concernée + if ( ! isset($estDispo) || $estDispo == '' ) + { // Dispo Inconnue (icone ?) + generate_html_dispo_inconnu($idP, $idC); + } + else + { + if ( $estDispo == 'oui' ) + { // Disponible + generate_html_dispo_oui($idP, $idC); + }else + { // Non Disponible + generate_html_dispo_non($idP, $idC); + } + } + } + else + { + if ( $withTD ) { echo " <td id=\"dispo_idC${idC}\" $class>\n "; } + // On est la personne concernée, on peut donc choisir le créneau + if ( ! isset($estDispo) || $estDispo == '' ) + { // Dispo Inconnue + generate_html_dispo_dire_oui($idR, $idC); + //~ echo ' '; + generate_html_dispo_dire_non($idR, $idC); + } + else + { + if ( $estDispo == 'oui' ) + { // Disponible + generate_html_dispo_oui($idP, $idC); + //~ echo ' '."\n "; + generate_html_dispo_dire_non($idR, $idC); + }else + { + // Non Disponible + generate_html_dispo_dire_oui($idR, $idC); + //~ echo ' '."\n "; + generate_html_dispo_non($idP, $idC); + } + } + } + if ( $withTD ) { echo " </td>\n"; } +} + +// Génération du tableau complet +// TODO : idée : class du tableau différnete quand annulée -> tableau grisé... + +function generate_html_array_personnes_crenaux($idR) +{ + $idP_Self=$_SESSION['session_idP']; + + // Connexion à la base et sélection de la database + require_once 'include/connect.inc.php'; + + // Récupération des paramètres de la réunion... + $montrerDispoR=$estAnnulee=$is_admin=$estFixee=false; + $idP_orga=null; + $query="SELECT r.montrerDispoR, r.estAnnulee, r.idP_Orga, r.idC_Fixe, r.idL FROM AWOR_Reunion r WHERE r.idR='$idR'"; + $result = @mysql_query($query); + if ( $result && ( mysql_num_rows($result) === 1 ) ) + { + list($montrerDispoR, $estAnnulee, $idP_orga, $idC_Fixe, $idL_interne) = mysql_fetch_row($result); + $is_admin = ( $idP_Self == $idP_orga ); + $montrerDispoR = ( ( $montrerDispoR === 'oui' ) || $is_admin ) ; + //echo "DEBUG : annulée $estAnnulee\n"; + $estAnnulee = ( $estAnnulee == 'oui' ); + $estFixee = ( $idC_Fixe != null); + } + else + { + return "Impossible d'afficher le tableau de la réunion : Erreur de base de donnée\n"; + } + // DEBUG : tests en forçant les variables + //$estAnnulee=true; + + //~ echo "DEBUG : \nmontrerDispoR==$montrerDispoR\nestAnnulee==$estAnnulee\nestFixee==$estFixee\nis_admin==$is_admin\n"; +?> +<form id="formmail" action="sendmail.php" method="post"> + <table class="details" summary="Disponibilité des personnes pour chaque créneau possible de la réunion"> + <thead> + <tr> +<?php + if ( $is_admin ) + { + echo ' <th>Mail</th>' . "\n"; + } + echo ' <th>' ."\n"; + if ( $is_admin ) + { + echo ' <a href="#poppersonne" onclick="loadid(\'poppersonne.php?idR=' . $idR; + echo '&idL=' . $idL_interne . '&idP_orga=' . $idP_orga . '\',\'poppersonne\',true);popon(\'poppersonne\');">' . "\n"; + echo ' <img src="images/addP.gif" alt="Ajouter une personne" title="Ajouter une personne" height="17" width="19" />' . "\n"; + echo ' </a> '; + } + echo 'Personnes' . "\n"; + echo ' </th>' . "\n"; + + // Remplissage des entêtes de colonnes (créneaux) + $query="SELECT idC, UNIX_TIMESTAMP(dateHeure), duree FROM AWOR_Creneau WHERE idR='$idR' ORDER BY dateHeure ASC;"; + $creneaux=array(); + $dispos=array(); + if ( $result = @mysql_query($query) ) + { + while ( list($idC, $date_deb, $duree) = mysql_fetch_row($result) ) + { + // Calcul des dates + //echo $date_deb . "\n"; + $date_fin = $date_deb + 60 * $duree; + if ( $idC != $idC_Fixe ) { echo ' <th>'; } else { echo ' <th class="selected">'; } + if ( $is_admin && ! $estFixee && ! $estAnnulee ) + { + echo '<a href="#popfixer" onclick="loadid(\'popfixer.php?idC=' . $idC; + echo '&idR=' . $idR . '\',\'popfixer\',true);popon(\'popfixer\');">'; + } + echo date('d/m/y', $date_deb) . '<br />' . date('H:i', $date_deb) . ' - ' . date('H:i', $date_fin); + if ( $is_admin && ! $estFixee && ! $estAnnulee ) { echo '</a>'; } + echo "</th>\n"; + + // Comptage des personnes disponibles et indisponibles + $creneaux[] = $idC; + $dispos[$idC]['nbDispo']=0; + $dispos[$idC]['nbNonDispo']=0; + $dispo_max_id=-1; + $dispo_max_val=0; + } + } + if ( $is_admin && ! $estFixee && ! $estAnnulee ) + { +?> + <th> + <a href="#popcreneau" onclick="loadid('popcreneau.php?idR=<?php echo $idR; ?>','popcreneau',true);popon('popcreneau');"> + <img src="./images/editCreneau2.gif" alt="Editer les creneaux" title="Editer les creneaux" height="21" width="22" /> + </a> + </th> +<?php + } + //print_r($creneaux); +?> + </tr> + </thead> + <tbody> +<?php + // Remplissage du tableau, ligne à ligne + // Requette écrivant les disponibilités dans un tableau associatif en une seule fois + if ( $montrerDispoR ) + { + $query='SELECT ch.idC, ch.idP, ch.estDispo FROM AWOR_Choisir ch, AWOR_Creneau c, AWOR_Personne p, AWOR_Appartenir a, AWOR_Reunion r WHERE ' + ."c.idR=$idR AND r.idR=$idR AND a.idL=r.idL AND p.idP=a.idP AND ch.idC = c.idC AND ch.idP = p.idP;"; + } + else + { + $query='SELECT ch.idC, ch.idP, ch.estDispo FROM AWOR_Choisir ch, AWOR_Creneau c WHERE ' + ."c.idR='$idR' AND ch.idC=c.idC AND ch.idP='$idP_Self';"; + } + //echo $query . "\n"; + if ( $result = @mysql_query($query) ) + { + while ( list($idC, $idP, $estDispo) = mysql_fetch_row($result) ) + { + //echo "idC == '$idC'\n"; + $dispos[$idC][$idP]=$estDispo; + if ( $estDispo=='non' ) { $dispos[$idC]['nbNonDispo']++; } + if ( $estDispo=='oui' ) + { + $dispos[$idC]['nbDispo']++; + if ( $dispos[$idC]['nbDispo'] > $dispo_max_val ) + { + $dispo_max_id=$idC; + $dispo_max_val=$dispos[$idC]['nbDispo']; + } + } + } + } + //print_r($dispos); + + + $query='SELECT p.idP, p.prenomP, p.nomP FROM AWOR_Personne p, AWOR_Appartenir a, AWOR_Reunion r WHERE ' + . "r.idR='$idR' AND a.idL=r.idL AND p.idP=a.idP ORDER BY p.nomP, p.prenomP;"; + + if ( $result = @mysql_query($query) ) + { + // On écrit ligne à ligne les personnes et les disponibilités + while ( $p = mysql_fetch_array($result) ) // Boucle sur chaque personne + { + echo " <tr>\n"; + // Colonne de checkbox pour envoi email si $is_admin == true + if ( $is_admin ) { echo ' <td><input name="mail_idP' . $p[0] . '" type="checkbox" checked="checked" /></td>' . "\n"; } + // Nom prénom + echo ' <td>' . htmlentities($p[1], ENT_QUOTES) . ' ' . htmlentities($p[2], ENT_QUOTES) . "</td>\n"; + // Disponibilités + foreach ( $creneaux as $c_id ) // Pour chaque créneau + { + if (isset($dispos[$c_id][$p[0]])) + { + $estDispo=$dispos[$c_id][$p[0]]; + } + else + { + $estDispo=''; + } + //echo "DEBUG : generate_html_dispo_case($p[0], $c_id, ( $p[0]==$idP_Self ), $estDispo);\n"; + if ( $c_id != $idC_Fixe ) { $class=''; } else { $class='class="selected"'; } + + generate_html_dispo_case($idR, $p[0], $c_id, ( ! $estFixee && ! $estAnnulee && ( $p[0]==$idP_Self ) ),$estDispo, true, $class); + } + // Colonne vide pour l'ajout de personnes + if ( $is_admin && ! $estFixee && ! $estAnnulee ) { echo " <td> </td>\n"; } + echo " </tr>\n"; + } + // Si $is_admin, on met une ligne avec bouton envoyer pour les mails et icône ajout de personnes + if ( $is_admin ) + { + echo " <tr>\n <td>\n"; + echo ' <input name="idR" value="' . $idR . '" type="hidden" />' . "\n"; +?> + <input value="Envoyer" type="submit" /> + </td> + <td> + <?php + echo '<a href="#poppersonne" onclick="loadid(\'poppersonne.php?idR=' . $idR; + echo '&idL=' . $idL_interne . '&idP_orga=' . $idP_orga . '\',\'poppersonne\',true);popon(\'poppersonne\');">' . "\n"; + ?> + <img src="images/addP.gif" alt="Ajouter une personne" title="Ajouter une personne" height="17" width="19" /> + </a> + </td> +<?php + foreach ( $creneaux as $c ) { echo " <td> </td>\n"; } + if ( $is_admin && ! $estFixee && ! $estAnnulee ) { echo " <td> </td>\n"; } + echo " </tr>\n"; + } + + // On inscrit les lignes de totaux si les disponibilités sont révélées + if ( $is_admin && ! $estFixee && ! $estAnnulee) + { + echo " <tr>\n"; + echo " <td> </td>\n"; + echo " <td>Personnes présentes</td>\n"; + foreach ( $creneaux as $c_id ) + { + if ( $c_id == $dispo_max_id ) + { + echo ' <td><em>' . $dispos[$c_id]['nbDispo'] . "</em></td>\n"; + } + else + { + echo ' <td>' . $dispos[$c_id]['nbDispo'] . "</td>\n"; + } + } + echo " <td> </td>\n"; + echo " </tr>\n"; + + echo " <tr>\n"; + echo " <td> </td>\n"; + echo " <td>Personnes absentes</td>\n"; + foreach ( $creneaux as $c_id ) + { + echo ' <td>' . $dispos[$c_id]['nbNonDispo'] . "</td>\n"; + } + echo " <td> </td>\n"; + echo " </tr>\n"; + } + } + echo " </tbody>\n"; + echo " </table>\n</form>\n"; +} + +function traiter_formulaire_fixer_creneau() +{ + if ( ! isset($_GET['idR']) || !isset($_GET['idC']) ) + { + $errmsg="Impossible de fixer la réunion : paramètres manquants ou erroné"; + return $errmsg; + } + $idR=addslashes($_GET['idR']); + $idC=addslashes($_GET['idC']); + + $query="UPDATE AWOR_Reunion SET idC_Fixe=$idC WHERE idR=$idR;"; + if ( ! mysql_query($query) || mysql_affected_rows() != 1 ) + { + $errmsg='Impossible de fixer la réunion : ' . mysql_generate_errmsg(); + return $errmsg; + } + return; +} + +function traiter_formulaire_creer_reunion() +{ + include_once('include/je.inc.php'); + $idP=$_SESSION['session_idP']; + + // Recherche d'une réunion vierge déjà existante + $query='SELECT idR FROM AWOR_Reunion WHERE idP_Orga=' . "('$idP') AND objetR='Renseignez';"; + if ( ( $result = mysql_query($query) ) && (mysql_num_rows($result) > 0) ) + { + list($idR)=mysql_fetch_array($result); + } + else + { + // Création de la Réunion sauf si une réunion vierge existe déjà + $query='INSERT INTO AWOR_Reunion(idP_Orga, objetR) VALUES' . "('$idP', 'Renseignez');"; + if ( ! $result = @mysql_query($query) || (mysql_affected_rows() != 1) ) + { + // Cas d'erreur + $errmsg ='Erreur lors de la création de la liste de participants : ' . mysql_generate_errmsg(); + return $errmsg; + } + $idR=mysql_insert_id(); + + // Création de la Liste des participants + if ( ! $idL=list_new("interne_idR_$idR","NULL",true) ) + { + $errmsg ='Erreur lors de la création de la liste de participants : Erreur de base de données'; + return $errmsg; + } + + $query="UPDATE AWOR_Reunion SET idL='$idL' WHERE idR='$idR'"; + if ( ! $result = @mysql_query($query) || (mysql_affected_rows() != 1) ) + { + // Cas d'erreur + $errmsg = 'Erreur lors de la création de la liste de participants : ' . mysql_generate_errmsg(); + return $errmsg; + } + } + + return (int) $idR; +} + +function traiter_formulaire_modif_detail_reunion() +{ + require_once('include/tools.inc.php'); + if ( ! isset($_REQUEST['idR']) || !isset($_POST['objetR']) || !isset($_POST['lieuR']) || !isset($_POST['ordreJourR']) || !isset($_POST['remarquesR']) ) + { + $errmsg = 'Impossible de modifier de détail de la réunion : Paramètres manquants'; + // DEBUG : + //echo "DEBUG : $query\n$errmsg\n"; + return $errmsg; + } + + $idR=addslashes_if_needed($_REQUEST['idR']); + $objetR=addslashes_if_needed($_POST['objetR']); + $lieuR=addslashes_if_needed($_POST['lieuR']); + $ordreJourR=addslashes_if_needed($_POST['ordreJourR']); + $remarquesR=addslashes_if_needed($_POST['remarquesR']); + $estAnnulee=( isset($_POST['isCancelled']) && ($_POST['isCancelled']==='on') )?'oui':'non'; + $montrerDispoR=( isset($_POST['isHidden']) && ($_POST['isHidden']==='on') )?'non':'oui'; + + $query="UPDATE AWOR_Reunion SET objetR='$objetR', lieuR='$lieuR', ordreJourR='$ordreJourR', " + ." remarquesR='$remarquesR', estAnnulee='$estAnnulee', montrerDispoR='$montrerDispoR' WHERE idR='$idR'"; + if ( ! $result = @mysql_query($query) || (mysql_affected_rows() != 1) ) + { + // Cas d'erreur + $errmsg = 'Erreur lors de la modification de la réunion : ' . mysql_generate_errmsg(); + // DEBUG : + //echo "DEBUG : $query\n$errmsg\n"; + return $errmsg; + } + // DEBUG : + //echo "DEBUG : $query\n$errmsg\n"; + return; +} + +function generate_html_reunion_detail2($idR) +{ + $query='SELECT r.objetR, r.ordreJourR, r.lieuR, r.remarquesR, r.montrerDispoR, r.estAnnulee, r.idP_Orga, r.idC_Fixe, p.nomP, p.prenomP' + . " FROM AWOR_Reunion r, AWOR_Personne p WHERE r.idR='$idR' AND p.idP=r.idP_Orga"; + $result = @mysql_query($query); + if ( ! $result || ( mysql_num_rows($result) !== 1 ) ) + { + $errmsg="Impossible de récuprérer les informations de la réunion : Erreur de base de données\n"; + return $errmsg; + } + + list($objetR, $ordreJourR, $lieuR, $remarquesR, $montrerDispoR, $estAnnulee, $idP_Orga, $idC_Fixe, $nomP, $prenomP) = mysql_fetch_row($result); + if ( $estAnnulee=='oui' ) { $etat = 'reunion_annulee'; } elseif ( $idC_Fixe!=null) { $etat ='reunion_fixee'; } else { $etat = 'reunion_en_cours'; } +?> + <table class="detail_reunion" summary="Détail de la réunion que vous avez sélectionnée"> + <thead> + <tr> + <th colspan="2"> + Détails de la réunion +<?php + //~ echo "DEBUG : SESSION['session_idP']==" . $_SESSION['session_idP'] . "\n" . "idP_Orga==" . $idP_Orga; + if ( isset($_SESSION['session_idP']) && ($_SESSION['session_idP'] == $idP_Orga ) ) + { + echo ' '; + echo '<a href="#popfixer" onclick="loadid(\'include/ludo/div_create_or_modif.php?idR='; + echo $idR . '&objetR=' . urlencode($objetR) . '&lieuR=' . urlencode($lieuR) . '&ordreJourR='; + echo urlencode($ordreJourR) . '&remarquesR=' . urlencode($remarquesR); + echo "','details_reunion',false)\">(Editer)</a>\n"; + } + $objetR=htmlentities($objetR, ENT_QUOTES); + $ordreJourR=htmlentities($ordreJourR, ENT_QUOTES); + $lieuR=htmlentities($lieuR, ENT_QUOTES); + $remarquesR=htmlentities($remarquesR, ENT_QUOTES); + $nomP=htmlentities($nomP, ENT_QUOTES); + $prenomP=htmlentities($prenomP, ENT_QUOTES); +?> + </th> + </tr> + </thead> + <tbody> + <tr> + <td><strong>Objet :</strong></td> + <td> + <?php echo $objetR . "\n"; ?> + </td> + </tr> + <tr> + <td><strong>Organisateur :</strong></td> + <td> + <?php echo "$prenomP $nomP\n"; ?> + </td> + </tr> + + <tr> + <td><strong>Lieu :</strong></td> + <td> + <?php echo $lieuR . "\n"; ?> + </td> + </tr> + <tr> + <td><strong>Ordre du jour :</strong></td> + <td> + <?php echo $ordreJourR . "\n"; ?> + </td> + </tr> + <tr> + <td><strong>Remarques :</strong></td> + <td> + <?php echo $remarquesR . "\n"; ?> + </td> + </tr> + <tr> + <td><strong>Etat :</strong></td> +<?php + echo ' <td class="' . $etat .'">' ."\n"; + switch($etat) + { + case 'reunion_fixee': + echo "Fixée\n"; + break; + case 'reunion_en_cours': + echo "En préparation\n"; + break; + case 'reunion_annulee': + echo "Annulée\n"; + break; + } + if ( $montrerDispoR === 'non' ) { echo ', disponibilités masquées'; } +?> + </td> + </tr> + </tbody> + </table> +<?php +} + +function html_generate_MySQLTableSuppr($table, $key_name, $columns='*', $where_clause='') +{ + require_once('include/ludo/html_elements.inc.php'); + require_once('include/connect.inc.php'); + + if ( $where_clause !== '' ) { $where_clause="WHERE $where_clause"; } + $query = "SELECT $columns FROM $table $where_clause;"; + //~ echo "DEBUG : $query\n"; + if ( ! $result = @mysql_query($query) ) + { + return "Erreur de génération de la table $table\n"; + } + else + { + $row = mysql_fetch_assoc($result); + // Affichage des entêtes du tableau et du pied de tableau + echo '<form action="" method="post">' . "\n" . '<table summary="Affichage des objets de la table ' . $table . ' pour la purger">' . "\n<thead>\n<tr>\n"; + echo '<td colspan="' . ( count($row) + 1 ) . "\">$table</td>\n</tr>\n<tr>\n"; + echo "<td></td><td>" . implode("</td>\n<td>",array_keys($row)) . "</td>\n"; + echo "</tr>\n</thead>\n<tfoot><tr>\n"; + echo '<td><input name="action" value="delete_from_' . $table . '" type="hidden" /><input value="Supprimer" type="submit" /></td>'; + for ( $i=0; $i < count($row); $i++ ) { echo "<td></td>"; } + echo "</tr>\n</tfoot>\n<tbody>\n"; + + $num=0; + do + { if ( isset($row[$key_name]) ) { $num=$row[$key_name]; } else { $num=''; } + echo "<tr>\n<td><input name=\"${key_name}_${num}\" type=\"checkbox\" /></td>\n<td>" . implode("</td>\n<td>",$row) . "</td>\n</tr>\n"; + } while ( $row = mysql_fetch_assoc($result) ); + echo "</tbody>\n</table>\n</form>\n"; + } +} + +?> diff --git a/final/app/include/ludo/html_elements.inc.php b/final/app/include/ludo/html_elements.inc.php new file mode 100644 index 0000000..35eaa68 --- /dev/null +++ b/final/app/include/ludo/html_elements.inc.php @@ -0,0 +1,185 @@ +<?php +/* + * Fonctions de génération de code HTML... + */ + function generate_html_doctype_and_head($title) +{ +echo '<?xml version="1.0" encoding="ISO-8859-1"?>'."\n" +?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="fr"> + <head> + <?php echo "<title>AWOR - $title</title>\n"; ?> + <meta name="keywords" content="AWOR, Application Web, Organisation, Réunion, Reunion" /> + <meta name="description" content="Application Web d'Organisation de Réunion (AWOR). Facilite la vie des organisateurs !" /> + <meta name="author" content="Jérémie Dénoyer, Ludovic Pouzenc, Andriana Semouchtchak, Julien Sérè" /> + <script type="text/javascript" src="script.js"></script> +<?php + //print_r($_COOKIE['aworcustom_css']); + if ( /*isset($_COOKIE['aworcustom_css'])*/ false ) + { + $cssfilemain = $_COOKIE['aworcustom_css']; + } + else + { + include 'config.inc.php'; + $cssfilemain=$CONFIG['CSS']['CHOOSER_LIST']['standard']; + } + echo ' <link href="css/' . $cssfilemain . '.css" rel="stylesheet" type="text/css" />' . "\n"; + echo ' <link href="css/' . $cssfilemain . '_nohelp.css" rel="stylesheet" type="text/css" title="nohelp" />' . "\n"; + + if ( isset($CONFIG['CSS']['CHOOSER_LIST']) ) + { + foreach ( $CONFIG['CSS']['CHOOSER_LIST'] as $cssname => $cssfile ) + { + if ( $cssfile != $cssfilemain ) + { + echo ' <link href="css/' . $cssfile . '.css" rel="alternate stylesheet" type="text/css" title="'.$cssname.'"/>' . "\n"; + echo ' <link href="css/' . $cssfile . '_nohelp.css" rel="alternate stylesheet" type="text/css" title="'.$cssname.'_nohelp"/>' . "\n"; + } + } + } +?> + <link href="css/print.css" rel="alternate stylesheet" type="text/css" title="print"/> + </head> +<?php +} + +function generate_html_divs_menu() +{ +include 'config.inc.php'; +?> +<div id="titre"><h2>AWOR</h2></div> +<div id="main_menu"> + <ul id="menu"> + <li><a href="index.php">Réunions</a></li> + <li><a href="listes.php">Listes</a></li> + <li><a href="profil.php">Mon profil</a></li> + <li><a href="ical.php">iCal</a></li> + <li><a href="apropos.php">A Propos</a></li> +<?php if ( isset($_SESSION['session_loginP']) && (is_integer(array_search($_SESSION['session_loginP'],$CONFIG['SUPERUSERS'],true))) ) + { echo ' <li><a href="admin.php">Administration</a></li>' . "\n"; } +?> + <li id="deconnection"><a href="deco.php">Déconnexion</a></li> + </ul> +</div> +<?php +} + +function generate_html_div_help($help_file='') +{ + //echo "DEBUG : function generate_html_div_help()\n"; + if ($help_file=='' ) { $help_file='help/' . basename($_SERVER['PHP_SELF']) . '.hlp'; } + //$help_file='modele_page.php.hlp'; + //echo "DEBUG : $help_file\n"; + if ( is_readable($help_file) ) + //if ( @fopen($help_file, 'r')!==false ) + { + echo '<div id="no_help">' . "\n<h2><a href=\"#css_standard\" onclick=\"setActiveStyleSheet('standard');\">?</a></h2>\n" . "</div>\n"; + echo '<div id="help">' . "\n"; + readfile($help_file); + echo "</div>\n"; + } +} + +function generate_html_div_errmsg($errmsg) +{ + echo '<div class="errmsg">' . "\n" . '<span class="errmsg">' . $errmsg . "</span>\n"; + require_once('config.inc.php'); + if ( isset( $CONFIG['adminMail'] ) && ( ! isset($_REQUEST['debug'] ) ) ) + { + echo '<span class="contactAdm">Si le problème persiste, vous pouvez contacter l\'administrateur par email à l\'adresse suivante : '; + echo '<a href="mailto:' . $CONFIG['adminMail'] . '">' . $CONFIG['adminMail'] . "</a></span>\n"; + } + echo "</div>\n"; +} + +function generate_html_div_css_chooser() +{ + @include 'include/ludo/config.inc.php'; + @include 'config.inc.php'; + + if ( ! is_array($CONFIG['CSS']['CHOOSER_LIST']) ) { return false; } + + if ( isset($_COOKIE['aworcustom_css'] ) ) { $css_selected=$_COOKIE['aworcustom_css']; }else{$css_selected='';}; + echo '<div class="css_chooser">' . "\n"; + //print_r($_COOKIE); + echo ' <select id="switcherCSS" onchange="switchCSS();">' . "\n"; + foreach ( $CONFIG['CSS']['CHOOSER_LIST'] as $file => $name ) + { + echo ' <option value="' . $file . '"'; + if ( $file == $css_selected ) { echo ' selected="selected"'; } + echo '>' . htmlentities($name, ENT_QUOTES) . '</option>' /*. "$DEBUG:file=$file, css_selected=$css_selected"*/ . "\n"; + } + echo ' </select>'. "\n"; + echo '</div>'. "\n"; +} + +function generate_html_div_footer() +{ +?> +<div id="footer"> + <ul> + <li class="left"> +<?php generate_html_div_css_chooser(); ?> + </li> + <li class="center"> + <a href="http://validator.w3.org/check/referer"> + <img src="./images/vxhtml.gif" alt="Validate" height="31" width="88" /> + </a> + <a href="http://jigsaw.w3.org/css-validator/check/referer"> + <img src="./images/vcss.gif" alt="Validate" height="31" width="88" /> + </a> + <a href="http://www.w3.org/WAI/WCAG1A-Conformance"> + <img src="./images/wai.gif" alt="W3C-WAI level A conformance icon" height="31" width="88" /> + </a> + </li> + <li class="right"> + <span class="discret">Application réalisée par Jérémie Dénoyer,<br /> Ludovic Pouzenc, Julien Séré et Andriana Semouchtchak</span> + </li> + </ul> +</div> +<?php +} + +function generate_html_div_deconnect() +{ + echo '<div class="deco"><a href="deco.php">Deconnexion</a></div>'."\n"; +} +function generate_html_div_back() +{ + echo '<div class="retour"><a href="index.php">Retour</a></div>'."\n"; +} + +function generate_html_dispo_inconnu($idP, $idC) +{ + echo '<img class="spacing" src="./images/question.gif" alt="Inconnu" height="15" width="15" />' . "\n"; +} + +function generate_html_dispo_oui($idP, $idC) +{ + echo '<img class="spacing" src="./images/ok.gif" alt="Disponible" height="16" width="16" />' . "\n"; +} + +function generate_html_dispo_non($idP, $idC) +{ + echo '<img class="spacing" src="./images/del.gif" alt="Non disponible" height="15" width="15" />' . "\n"; +} + +function generate_html_dispo_dire_oui($idR, $idC) +{ + //~ echo '<img src="./images/button_ok.png" alt="Dire que je suis disponible" height="25" width="25" />' . "\n"; + echo "<a href=\"#dispo_idC${idC}\" onclick=\"loadid('include/ludo/majDispo.php?idR=$idR&idC=$idC&estDispo=oui','dispo_idC${idC}',false);\">"; + echo '<img class="spacing" src="./images/button_ok.png" alt="Dire que je suis disponible" height="25" width="25" /></a>' . "\n"; +} + +function generate_html_dispo_dire_non($idR, $idC) +{ + echo "<a href=\"#dispo_idC${idC}\" onclick=\"loadid('include/ludo/majDispo.php?idR=$idR&idC=$idC&estDispo=non','dispo_idC${idC}',false);\">"; + echo '<img class="spacing" src="./images/button_del.png" alt="Dire que je suis pas disponible" height="25" width="25" /></a>' . "\n"; +} + +function generate_html_reunion_detail_button($idR) +{ + echo '<a href="details_reunion.php?idR=' . $idR . '"><img src="images/details.png" alt="Détails" width="20" height="20" /></a>'; +} diff --git a/final/app/include/ludo/mail_textarea.php b/final/app/include/ludo/mail_textarea.php new file mode 100644 index 0000000..6db990f --- /dev/null +++ b/final/app/include/ludo/mail_textarea.php @@ -0,0 +1,45 @@ +<?php +require_once('session_verify.inc.php'); +include('config.inc.php'); +require_once('../utils.inc.php'); +//~ require_once('/home/lud/shares/public_html/awor/appli_3_alpha/include/connect.inc.php'); + +//include('include/connect.inc.php'); + +if ( isset($_GET['model']) ) { $model=addslashes_if_needed($_GET['model']); } else { $model='empty'; } +?> + +<textarea name="msgText" cols="80" rows="15"> +<?php + if ( $model != 'empty') + { + include('../connect.inc.php'); + if ( ! isset($CONFIG['MAIL']['TEMPLATES'][$model]['tpl_file']) ) + { + echo 'Désolé, modèle indisponible...'; + } + else + { + // On récupère quelques information à propos de la réunion pour que les templates puissent être customisés + $objetR=$ordreJourR=$lieuR=$remarquesR=""; + if (isset( $_GET['idR']) ) + { + $idR=addslashes($_GET['idR']); + $result = mysql_query("SELECT objetR, ordreJourR, lieuR, remarquesR FROM AWOR_Reunion WHERE idR='$idR'"); + if (mysql_num_rows($result)===1) + { + list($objetR, $ordreJourR, $lieuR, $remarquesR) = mysql_fetch_array($result); + } + } + //echo 'DEBUG : ../../templates/' . $CONFIG['MAIL']['TEMPLATES'][$model]['tpl_file'] . "\n"; + if (!@include('../../templates/' . $CONFIG['MAIL']['TEMPLATES'][$model]['tpl_file']) ) + { + echo 'Désolé, impossible de charger le fichier modèle...'; + } + } + } + //print_r($_REQUEST); + //print_r($CONFIG); +?> +</textarea> + diff --git a/final/app/include/ludo/majDispo.php b/final/app/include/ludo/majDispo.php new file mode 100644 index 0000000..febd9c3 --- /dev/null +++ b/final/app/include/ludo/majDispo.php @@ -0,0 +1,39 @@ +<?php +require('../connect.inc.php'); +require('session_verify.inc.php'); +require('fonctions.inc.php'); + +// TODO : vérification que la réunion nous concerne bien ! + +if ( /*!isset($_GET['idR']) ||*/ !isset($_GET['idC']) || !isset($_GET['estDispo']) || !isset($_SESSION['session_idP']) ) +{ + $errmsg="Paramètres incorrects\n"; +} + +if ( isset( $errmsg ) ) +{ + // TODO +} +else +{ + $idR=addslashes($_GET['idR']); + $idC=addslashes($_GET['idC']); + $estDispo=addslashes($_GET['estDispo']); + $idP=$_SESSION['session_idP']; + + $query="UPDATE AWOR_Choisir SET estDispo = '$estDispo' WHERE idC='$idC' AND idP='$idP'"; + $result = @mysql_query($query); + if ( ! $result || ( mysql_affected_rows() !== 1 ) ) + { + $query="INSERT INTO AWOR_Choisir(idC,idP,estDispo) VALUES ('$idC', '$idP', '$estDispo')"; + //echo "DEBUG :$query"; + $result = mysql_query($query); + if ( ! $result || ( mysql_affected_rows() !== 1 ) ) + { + echo "Erreur BD\n"; + return; + } + } + generate_html_dispo_case($idR, $idP, $idC, true, $estDispo, false); +} +?>
\ No newline at end of file diff --git a/final/app/include/ludo/redir.inc.php b/final/app/include/ludo/redir.inc.php new file mode 100644 index 0000000..2edec6e --- /dev/null +++ b/final/app/include/ludo/redir.inc.php @@ -0,0 +1,20 @@ +<?php +function html_redir($dest) +{ + header("Location: $dest"); +require_once('html_elements.inc.php'); +generate_html_doctype_and_head("Redirection"); +?> +<body> + <h1>Redirection</h1> + <p>Si vous voyez cette page, merci de suivre le lien ci-dessous</p> +<?php + // Ne respecte pas le XHTML s'il y a des paramètres les & doivent être remplacée par & + echo '<p><a href="' . urlencode($dest) . '">' . htmlentities($dest, ENT_QUOTES) . '</a></p>' . "\n"; +?> +</body> +</html> +<?php + exit(); +} +?>
\ No newline at end of file diff --git a/final/app/include/ludo/session_verify.inc.php b/final/app/include/ludo/session_verify.inc.php new file mode 100644 index 0000000..f1cea8b --- /dev/null +++ b/final/app/include/ludo/session_verify.inc.php @@ -0,0 +1,9 @@ +<?php +session_start(); +if ( ! isset($_SESSION['session_loginP']) ) +{ + require('redir.inc.php'); + $dest='auth_dialog.php?retour=' . $_SERVER['PHP_SELF']; + html_redir($dest); +} +?>
\ No newline at end of file |