diff options
Diffstat (limited to 'appli_3_alpha_old')
52 files changed, 2453 insertions, 0 deletions
diff --git a/appli_3_alpha_old/TODO_list.txt~ b/appli_3_alpha_old/TODO_list.txt~ new file mode 100644 index 0000000..b1d8546 --- /dev/null +++ b/appli_3_alpha_old/TODO_list.txt~ @@ -0,0 +1,20 @@ +mysql_free_result après les requetes et myslq_close ? + + +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 ! + +Fermture des liens SQL ???? + + +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/appli_3_alpha_old/auth_dialog.php b/appli_3_alpha_old/auth_dialog.php new file mode 100644 index 0000000..b55e0f0 --- /dev/null +++ b/appli_3_alpha_old/auth_dialog.php @@ -0,0 +1,113 @@ +<?php + // Récupération des paramètres + if ( isset($_GET['retour']) && $_GET['retour']!='' ) + { $retour=addslashes( $_GET['retour'] ); } else { $retour='index.php'; } + + // Si le formulaire à été envoyé, on le traite ici + if ( isset($_POST['envoi']) && $_POST['envoi'] === '1' ) + { + if ( ! ( isset($_POST['loginP']) && isset($_POST['pass']) ) ) + { + $errmsg = 'Paramètres incorrects'; + } + else + { + $loginP=addslashes( $_POST['loginP'] ); + + + include 'include/ludo/auth.inc.php'; + + // Code vérifiant que la personne qui tente de se connecter est bien référencée dans notre base + include 'include/ludo/fonctions.inc.php'; + // Connexion à la base et sélection de la database + include 'include/connect.inc.php'; + include 'include/ludo/config.inc.php'; + + // Requete SQL + $query = "SELECT idP, loginP, nomP, prenomP, methodeAuth FROM Personne WHERE loginP='$loginP';"; + if ( ! $result = @mysql_query($query) ) + { + // Cas d'erreur + $errmsg =mysql_generate_errmsg(); + } + else + { + // Initialisation par défaut + $methodeAuth=''; + // Chargement des préférences d'authentification de l'utilisateur + if ( mysql_num_rows($result) === 1) + { + list($idP, $loginP, $nomP, $prenomP, $methodeAuth) = mysql_fetch_row($result); + } + // Si le script est lancé en local, on saute l'authentification + if ( ($CONFIG['AUTH']['bypass_if_local'] === true ) + && ( ($_SERVER['REMOTE_ADDR'] == 'localhost') || ($_SERVER['REMOTE_ADDR'] == '127.0.0.1') ) ) + { + $methodeAuth='bypass'; + } + + $auth_is_ok=false; + switch ( $methodeAuth ) + { + case 'webetud': + // TODO + break; + // Vous pouvez ajouter d'autres mode d'authentification ici ! + case 'bypass': + $auth_is_ok=true; + break; + default: + // Tentative d'authentification POP + if ( ($errno = pop3_auth_simple($loginP, addslashes($_POST['pass']) ) ) != 0 ) + { + // Authentification échouée + $errmsg=pop3_generate_errmsg($errno); + } + else + { + $auth_is_ok=true; + } + break; + } + if ( $auth_is_ok === true ) + { + // Authentification réussie + session_start(); + $_SESSION['loginP']=$loginP; + if ( isset($nomP) ) $_SESSION['nomP']=$nomP; + if ( isset($prenomP) ) $_SESSION['prenomP']=$prenomP; + $_SESSION['idP']=$idP; + require('include/ludo/redir.inc.php'); + html_redir($retour); + } + } + } + } +require_once('include/ludo/html_elements.inc.php'); +generate_html_doctype_and_head("Identification"); +?> +<body onload="javascript:document.forms['auth'].elements['loginP'].focus()"> + <h1>Application Web d'Organisation de Réunion</h1> + <h2>Veuillez vous identifier</h2> + <?php echo '<form id="auth" method="post" action="' . $_SERVER['PHP_SELF'] . '">' . "\n"; ?> + <input type="hidden" name="envoi" value="1" /> + <?php echo '<input type="hidden" name="retour" value="' . $retour . '" />' . "\n" ; ?> + <div class="aligned"> + <div> + <span class="label">Votre identifiant :</span> + <span class="field"><input name="loginP" type="text" size="20" tabindex="1" /></span> + </div> + <div> + <span class="label">Votre mot de passe :</span> + <span class="field"><input name="pass" type="password" size="20" tabindex="2" /></span> + </div> + <div> + <span class="label"><input type="reset" value="Vider" /></span> + <span class="field"><input type="submit" value="Valider" /></span> + </div> + </div> +<?php if ( isset ($debug) ) { echo ' <input type="hidden" name="debug" value="true" />' . "\n"; } ?> + </form> +<?php if ( isset ($errmsg) ) { generate_html_div_errmsg($errmsg); } ?> +</body> +</html> diff --git a/appli_3_alpha_old/css/default.css b/appli_3_alpha_old/css/default.css new file mode 100644 index 0000000..59b853a --- /dev/null +++ b/appli_3_alpha_old/css/default.css @@ -0,0 +1,240 @@ +
+img { border : none ; }
+body {
+ color: #000000;
+ background-color:#F5F5DC;
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ padding:0px;
+ margin:0px;
+ min-width:750px; /*Pour eviter le chevauchement pour FireFox, ne change rien pour IE (qui gere pas trop mal sans ca) */
+}
+table {
+ border-spacing:0px;
+ margin: auto;
+ padding: 0px;
+ width:98%;
+ text-align:center;
+ border: thin solid #E0E0E0;
+ border-collapse:collapse; /* Imite le cellspacing=0 et fonctionne sous IE */
+ background-color:#F7F7F7;
+}
+th {
+ border-right:none;
+ font-weight: bold;
+ color: #FFFFFF;
+ background-color: #551A8B;
+}
+td {
+ border-bottom-width: thin;
+ border-bottom-style: solid;
+ border-bottom-color: #E0E0E0;
+}
+th a:link, th a:visited {
+ font-size: x-small;
+ color: #FFFFFF;
+}
+h1 {
+ font-weight: bold;
+ color: #9999FF;
+ text-align: center;
+}
+h2 {
+ color: #5C5CFF;
+ margin: 0px;
+}
+select { width:auto; }
+/***** Titre *****/
+#titre h2 {
+ color: #551A8B;
+ margin-left:50px;
+ height:50px;
+ width:200px;
+ background-image:url(default_img/titre.png);
+ background-position:left;
+ background-repeat:no-repeat;
+ color:#FFFFFF;
+ font-size:0px;
+}
+#titre {
+ height:50px;
+ clear:left;
+ background-color:#FFFFFF;
+ background-image:url(../images/logo.png);
+ background-position:left;
+ background-repeat:no-repeat;
+}
+
+/*****************/
+/***** Menu *****/
+#menu {
+ padding:0px;
+ margin:0px;
+ width:100%;
+ height:20px;
+ background-color:#551A8B;
+}
+#menu a {
+ text-decoration:none;
+ display:block;
+ font-weight:bold;
+ text-align:center;
+ color:#FFFFFF;
+}
+#menu a:hover {
+ color:#000000;
+ background-color:#FFFFFF;
+}
+/* Pour IE5/MAC \*/#menu a{float:none;}/**/
+#menu li {
+ list-style: none;
+ float:left;
+ padding:0;
+ margin:0;
+ width:120px;
+ white-space:nowrap;/*Evite l'étalement sur deux ligne*/
+ vertical-align:middle;
+}
+#menu #deconnection {
+ float:right;
+}
+
+#main_menu {
+
+}
+/*********************/
+/***** Sous Menu *****/
+#sous_menu {
+ clear:left;
+ padding-top:5px;
+ padding-bottom:3px;
+ padding-left:15px;
+ border-bottom:1px solid #000000;
+ background-color:#8470FF;
+}
+/* -------------- Arbre -------------------*/
+p.arbre {
+ font-size: small;
+ color: #FFFFFF;
+ text-align: left;
+ margin-top: 0px;
+ margin-right: 0px;
+ margin-bottom: 0px;
+ margin-left: 0px;
+}
+p.arbre a:link, p.arbre a:visited {color:#FFFFFF; }
+
+/*******************/
+/***** Contenu *****/
+#contenu {
+ padding-top:10px;
+ padding-bottom:20px;
+ padding-left:5px;
+ padding-right:22%;/*225px;*/ /*200 + 5*2 + 2*2 + (pour ie 5*2) */
+}
+#help {
+ text-align:justify;
+ color:#000000;
+ float:right;
+ margin:5px;
+ padding:5px;
+ border:thin solid #000000;
+ background-color:#F7F7F7;
+ font-size:small;
+ width:18%;
+}
+#help h2
+{
+ text-align:center;
+ font-size:medium;
+ color:#FFFFFF;
+ background-color:#551A8B;
+ margin-top:0;
+ margin-bottom:10px;
+}
+ +#no_help h2 +{
+ display:none; +}
+.popup , .popup_creneau , .popup_personne , .popup_commentaire , .popup_fichier , .popup_new {
+ display: none;
+ position: absolute;
+ left:50%;
+ top:50%;
+ border: 3px solid #000000;
+ background-color: #8470FF;
+ z-index: 500;
+ font-size: 80%;
+ text-align:center;
+}
+.popup {
+ width: 20em;
+ height: 8em;
+ margin-top: -4em ;/*moitié de height */
+ margin-left: -10em ;/*moitié de width */
+}
+
+.popup_creneau {
+ width: 45em;
+ height: 22em;
+ margin-top: -11em ;/*moitié de height */
+ margin-left: -22.5em ;/*moitié de width */
+}
+.popup_personne {
+ width: 45em;
+ height: 25em;
+ margin-top: -12.5em ;/*moitié de height */
+ margin-left: -22.5em ;/*moitié de width */
+}
+.popup_commentaire {
+ width: 30em;
+ height: 8em;
+ margin-top: -4em ;/*moitié de height */
+ margin-left: -15em ;/*moitié de width */
+}
+
+.popup_fichier {
+ width: 30em;
+ height: 8em;
+ margin-top: -4em ;/*moitié de height */
+ margin-left: -15em ;/*moitié de width */
+}
+
+.popup_new {
+ width: 30em;
+ height: 8em;
+ margin-top: -4em ;/*moitié de height */
+ margin-left: -15em ;/*moitié de width */
+}
+
+.popup h2 , .popup_creneau h2 , .popup_personne h2 , .popup_commentaire h2 , .popup_fichier h2 , .popup_new h2
+{
+ background:#551A8B;
+ color:#FFFFFF;
+ font-size:small;
+ border-bottom:inherit;
+}
+
+div.popup_contenu
+{
+ margin-top:1em;
+ vertical-align:middle;
+}
+
+.popup input , .popup_creneau input , .popup_personne input , .popup_commentaire input , .popup_fichier input , .popup_new input
+{
+ cursor:pointer;
+}
+
+#masque
+{
+ width:100%;
+ height:100%;
+ display: none;
+ position: absolute;
+ left:0px;
+ top:0px;
+ background-image:url(../images/masque.png);
+ background-repeat:repeat;
+ z-index: 499;
+}
\ No newline at end of file diff --git a/appli_3_alpha_old/css/default_img/README.txt b/appli_3_alpha_old/css/default_img/README.txt new file mode 100644 index 0000000..fec6abf --- /dev/null +++ b/appli_3_alpha_old/css/default_img/README.txt @@ -0,0 +1 @@ +C'est ici qu'on stockera les images propre au style default.css diff --git a/appli_3_alpha_old/css/default_img/README.txt~ b/appli_3_alpha_old/css/default_img/README.txt~ new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/appli_3_alpha_old/css/default_img/README.txt~ diff --git a/appli_3_alpha_old/css/default_img/titre.png b/appli_3_alpha_old/css/default_img/titre.png Binary files differnew file mode 100644 index 0000000..d8d9ce6 --- /dev/null +++ b/appli_3_alpha_old/css/default_img/titre.png diff --git a/appli_3_alpha_old/deco.php b/appli_3_alpha_old/deco.php new file mode 100644 index 0000000..f137336 --- /dev/null +++ b/appli_3_alpha_old/deco.php @@ -0,0 +1,36 @@ +<?php +session_start(); + +// Si vous voulez détruire complètement la session, effacez également le cookie de session. +// Note : cela détruira la session et pas seulement les données de session ! +if (isset($_COOKIE[session_name()])) { +setcookie(session_name(), '', time()-42000, '/'); +} + +require_once('include/ludo/html_elements.inc.php'); +generate_html_doctype_and_head("Déconnexion"); +?> +<body> + <h1>Deconnexion</h1> + <div> + <?php + if ( isset($_SESSION['loginP']) ) + { + // Détruit toutes les variables de session + $_SESSION = array(); + + // On a déjà détruit le cookie qui permet la ré-emission par le client du sessionid + + // Finalement, on détruit la session. + session_destroy(); + echo 'Vous avez bien été déconnecté' . "\n"; + } + else + { + echo 'Deconnexion impossible : aucune session en cours' . "\n"; + } + ?> + </div> +<?php generate_html_div_back(); ?> +</body> +</html>
\ No newline at end of file diff --git a/appli_3_alpha_old/details_reunion.php b/appli_3_alpha_old/details_reunion.php new file mode 100644 index 0000000..599c918 --- /dev/null +++ b/appli_3_alpha_old/details_reunion.php @@ -0,0 +1,107 @@ +<?php +require('include/ludo/session_verify.inc.php'); +require_once('include/connect.inc.php'); +require_once('include/ludo/html_elements.inc.php'); +require_once('include/ludo/fonctions.inc.php'); + + +require_once('include/je.inc.php'); +require_once('include/ju.inc.php'); + + +if ( isset($_REQUEST['action']) ) +{ + /* + switch ($_REQUEST['action']) + { + 'reunion_modif': + + break; + + default: + echo "type de formulaire non enregistré :!!!\n\n"; + } + */ + $nom_func = 'traiter_formulaire_' . $_REQUEST['action']; + $nom_func(); +} + +generate_html_doctype_and_head("Modèle"); + +echo "<body>\n"; + +generate_html_divs_menu(); +?> + <div id="sous_menu"> + <p class="arbre"> + > <a href="index.php">Accueil</a> + > <a href="index.php">Réunions</a> + > Détails d'une réunion + </p> + </div> +<?php + // Connexion à la base et sélection de la database + require_once 'include/connect.inc.php'; + + if ( ! isset($_GET['idR'] ) || ! is_numeric($_GET['idR']) || ! isset($_SESSION['idP'])) + { + $errmsg='Erreur de génération de la page : paramètres erronés ou manquant'; + } + else + { + $idR=addslashes($_GET['idR']); + $idP=$_SESSION['idP']; + + // Vérification que la réunion nous concerne bien + $query="SELECT * FROM Appartenir a WHERE a.idL=$idR, a.idP=$idP;"; + if ( ( $result = @mysql_query($query) ) && ( mysql_num_rows($result) === 1 ) ) + { + $errmsg='Vous n\'avez pas le droit de consulter cette page : cette réunion n\'existe pas ou ne vous concerne pas !'; + } + } + + if ( isset($errmsg) ) + { + generate_html_div_errmsg($errmsg); + echo '</body></html>'; + exit(); + } + + + generate_html_div_help('help/details_reunion_admin.php.hlp'); + echo '<div id="contenu">' . "\n"; + generate_html_reunion_detail($idR); + echo "<br />\n"; + generate_html_array_personnes_crenaux($idR, $idP); + echo "<br />\n"; + generate_html_reunion_fichiers($idR); +?>
+</div> +<div id="popcommentaire" class="popup_commentaire"> +<h2>Editer votre commentaire</h2> +<div class="popup_contenu"> +<form id="formcommentaire" method="get" action="details_reunion_admin.php"> +Commentaire : <input name="txtCommentaire" type="text" id="txtCommentaire" /> +<br/><br/> +<input type="submit" name="Submit" value="Enregistrer" /><input type="button" name="fermer" value="Fermer" alt="commentaire" /> +</form> +</div> +</div> + +<div id="popfichier" class="popup_fichier"> +<h2>Ajouter un fichier</h2> +<div class="popup_contenu"> +<form id="formfichier" method="get" action="details_reunion_admin.php"> +Fichier : <input name="fichier" type="file" id="fichier"/> +<br/><br/> +<input type="submit" name="Submit" value="Valider" /><input type="button" value="fermer" onclick="popoff('popfichier');"/> +</form> +</div> +</div> + +<div class="popup" id="popfixer"></div> +<div class="popup_creneau" id="popcreneau"></div> +<div id="poppersonne" class="popup_personne"></div> +<div id="masque"></div> +</body>
+</html>
diff --git a/appli_3_alpha_old/help/details_reunion.php.hlp b/appli_3_alpha_old/help/details_reunion.php.hlp new file mode 100644 index 0000000..5434937 --- /dev/null +++ b/appli_3_alpha_old/help/details_reunion.php.hlp @@ -0,0 +1,4 @@ +Cette page vous permet de visualiser les détails d'une réunion. <br /> +Vous pouvez modifier votre disponibilité en fonction des créneaux prévu par le createur de la réunion.<br /> +Il est possible à tout instant de se déconnecter en cliquant sur le bouton Déconnexion situé en haut à droite de l'écran.<br /> +Astuce : grâce à AWOR, vous pouvez transferer vos réunions sur votre agenda personnel. diff --git a/appli_3_alpha_old/help/details_reunion_admin.php.hlp b/appli_3_alpha_old/help/details_reunion_admin.php.hlp new file mode 100644 index 0000000..4d8733f --- /dev/null +++ b/appli_3_alpha_old/help/details_reunion_admin.php.hlp @@ -0,0 +1,17 @@ +Cette page vous permet de visualiser les détails d'une réunion.<br /> +<br /> +Vous pouvez modifier votre disponibilité en fonction des créneaux prévu par le createur de la réunion.<br /> +<br /> +Il est possible à tout instant de se déconnecter en cliquant sur le bouton Déconnexion situé en haut à droite de l'écran.<br /> +<br /> +Ajouter ou Supprimer un créneau<br /> +en appuyant sur le bouton <a href="#" onclick="loadid('popcreneau.php?idR=2','popcreneau',true);popon('popcreneau');"><img src="./images/editCreneau2.gif" alt="Ajouter une personne" title="Ajouter un creneau" width="22" height="21" /></a><br /> +<br /> +Fixer un Créneau, en cliquant dessus et confirmer l'action (aucune modification ne sera possible après)<br /> +<br /> +Ajouter ou Supprimer un +participant en appuyant sur le bouton <a href="#poppersonne" onclick="loadid('poppersonne.php?idR=2','poppersonne',true);popon('poppersonne');"><img src="images/addP.gif" alt="Ajouter une personne" title="Ajouter une personne" width="19" height="17"/></a><br /> +<br /> +Ajouter +<br /> +Astuce : grâce à AWOR, vous pouvez transferer vos réunions sur votre agenda personnel.
\ No newline at end of file diff --git a/appli_3_alpha_old/help/index.php.hlp b/appli_3_alpha_old/help/index.php.hlp new file mode 100644 index 0000000..be1ef30 --- /dev/null +++ b/appli_3_alpha_old/help/index.php.hlp @@ -0,0 +1,7 @@ +Cette page vous permet de visualiser les réunions qui vous concernent.<br /> +Les éléments requièrant votre attention sont en rouge.<br /> +Cliquer sur l'icone à droite pour afficher les détails d'une réunion.<br /> + +Il est possible à tout instant de se déconnecter en cliquant sur le bouton Déconnexion situé en haut à droite de l'écran. +<br /> +Astuce : grâce à AWOR, vous pouvez transferer vos réunions sur votre agenda personnel. diff --git a/appli_3_alpha_old/help/listes.php.hlp b/appli_3_alpha_old/help/listes.php.hlp new file mode 100644 index 0000000..c619e70 --- /dev/null +++ b/appli_3_alpha_old/help/listes.php.hlp @@ -0,0 +1 @@ +Cette page vous permet de gérer les différentes listes de contacts. diff --git a/appli_3_alpha_old/help/modele_page.php.hlp b/appli_3_alpha_old/help/modele_page.php.hlp new file mode 100644 index 0000000..75a26d5 --- /dev/null +++ b/appli_3_alpha_old/help/modele_page.php.hlp @@ -0,0 +1,17 @@ + Cette page vous permet de visualiser les détails d'une réunion.<br /> + <br /> + Vous pouvez modifier votre disponibilité en fonction des créneaux prévu par le createur de la réunion.<br /> + <br /> + Il est possible à tout instant de se déconnecter en cliquant sur le bouton Déconnexion situé en haut à droite de l'écran.<br /> + <br /> + Ajouter ou Supprimer un créneau<br /> + en appuyant sur le bouton <a href="#" onclick="loadpop('popcreneau.php?idR=2','popcreneau');popon('popcreneau');"><img src="./images/editCreneau2.gif" alt="Ajouter une personne" title="Ajouter un creneau" width="22" height="21" /></a><br /> + <br /> + Fixer un Créneau, en cliquant dessus et confirmer l'action (aucune modification ne sera possible après)<br /> + <br /> + Ajouter ou Supprimer un + participant en appuyant sur le bouton <a href="#" onclick="popon('poppersonne');"><img src="images/addP.gif" alt="Ajouter une personne" title="Ajouter une personne" width="19" height="17"/></a><br /> + <br /> + Ajouter + <br /> + Astuce : grâce à AWOR, vous pouvez transferer vos réunions sur votre agenda personnel.
\ No newline at end of file diff --git a/appli_3_alpha_old/help/profil.php.hlp b/appli_3_alpha_old/help/profil.php.hlp new file mode 100644 index 0000000..9328ff5 --- /dev/null +++ b/appli_3_alpha_old/help/profil.php.hlp @@ -0,0 +1,2 @@ +Vous pouvez renseigner votre nom et prénom. <br/> +Vous avez la possibilité de changer votre méthode de d'identification. <br/> diff --git a/appli_3_alpha_old/help/sendmail.php.hlp b/appli_3_alpha_old/help/sendmail.php.hlp new file mode 100644 index 0000000..4a31a5b --- /dev/null +++ b/appli_3_alpha_old/help/sendmail.php.hlp @@ -0,0 +1,2 @@ +Ce formulaire vous permet d'envoyer un courriel de notification aux personnes sélectionnées.<br/> +Vous pouvez charger un des modèles disponibles pour gagner du temps. diff --git a/appli_3_alpha_old/help/sendmail.php.hlp~ b/appli_3_alpha_old/help/sendmail.php.hlp~ new file mode 100644 index 0000000..9328ff5 --- /dev/null +++ b/appli_3_alpha_old/help/sendmail.php.hlp~ @@ -0,0 +1,2 @@ +Vous pouvez renseigner votre nom et prénom. <br/> +Vous avez la possibilité de changer votre méthode de d'identification. <br/> diff --git a/appli_3_alpha_old/ical.php b/appli_3_alpha_old/ical.php new file mode 100644 index 0000000..a5f0488 --- /dev/null +++ b/appli_3_alpha_old/ical.php @@ -0,0 +1,30 @@ +<?php +require_once('include/ludo/session_verify.inc.php'); +require_once('include/ical.inc.php'); +
+$res=ERR_ICAL_NO_DATA;
+if ( isset($_SESSION['idP']) )
+{ + $res = generationIcal($_SESSION['idP'], $iCal_name, $iCal_content, $errmsg); +
+ if ( $res === 0 )
+ {
+ header("Content-disposition: attachment; filename=$iCal_name");
+ header("Content-Type: application/force-download");
+ header("Content-Transfer-Encoding: text/ics\n"); // Surtout ne pas enlever le \n
+ header("Content-Length: ". strlen($iCal_content) );
+ header("Pragma: no-cache");
+ header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public");
+ header("Expires: 0"); + echo $iCal_content; + exit();
+ } +} +require_once('html_elements.inc.php'); +generate_html_doctype_and_head("Génération iCal"); +echo "<body>\n"; +generate_html_div_errmsg($errmsg); +?> +</body> +</html> +
diff --git a/appli_3_alpha_old/images/addP.gif b/appli_3_alpha_old/images/addP.gif Binary files differnew file mode 100644 index 0000000..aa77bef --- /dev/null +++ b/appli_3_alpha_old/images/addP.gif diff --git a/appli_3_alpha_old/images/button_del.png b/appli_3_alpha_old/images/button_del.png Binary files differnew file mode 100644 index 0000000..899b785 --- /dev/null +++ b/appli_3_alpha_old/images/button_del.png diff --git a/appli_3_alpha_old/images/button_ok.png b/appli_3_alpha_old/images/button_ok.png Binary files differnew file mode 100644 index 0000000..229550e --- /dev/null +++ b/appli_3_alpha_old/images/button_ok.png diff --git a/appli_3_alpha_old/images/del.gif b/appli_3_alpha_old/images/del.gif Binary files differnew file mode 100644 index 0000000..cc89b0b --- /dev/null +++ b/appli_3_alpha_old/images/del.gif diff --git a/appli_3_alpha_old/images/details.png b/appli_3_alpha_old/images/details.png Binary files differnew file mode 100644 index 0000000..11982cc --- /dev/null +++ b/appli_3_alpha_old/images/details.png diff --git a/appli_3_alpha_old/images/editCreneau2.gif b/appli_3_alpha_old/images/editCreneau2.gif Binary files differnew file mode 100644 index 0000000..ba90a82 --- /dev/null +++ b/appli_3_alpha_old/images/editCreneau2.gif diff --git a/appli_3_alpha_old/images/logo.png b/appli_3_alpha_old/images/logo.png Binary files differnew file mode 100644 index 0000000..a768d45 --- /dev/null +++ b/appli_3_alpha_old/images/logo.png diff --git a/appli_3_alpha_old/images/masque.png b/appli_3_alpha_old/images/masque.png Binary files differnew file mode 100644 index 0000000..45a6027 --- /dev/null +++ b/appli_3_alpha_old/images/masque.png diff --git a/appli_3_alpha_old/images/ok.gif b/appli_3_alpha_old/images/ok.gif Binary files differnew file mode 100644 index 0000000..1935a84 --- /dev/null +++ b/appli_3_alpha_old/images/ok.gif diff --git a/appli_3_alpha_old/images/question.gif b/appli_3_alpha_old/images/question.gif Binary files differnew file mode 100644 index 0000000..d57516b --- /dev/null +++ b/appli_3_alpha_old/images/question.gif diff --git a/appli_3_alpha_old/include/connect.inc.php b/appli_3_alpha_old/include/connect.inc.php new file mode 100644 index 0000000..be96c02 --- /dev/null +++ b/appli_3_alpha_old/include/connect.inc.php @@ -0,0 +1,14 @@ +<?php +/* + * Paramètres de connexion à la base MySQL + */ + +// $bd représente le nom de la database à utiliser
+$bd = "awor"; +// mysql_connect(<nom_ou_ip_serveur_mysql>, <utilisateur_mysql>, <mot_de_passe_en_clair_mysql>);
+$link = @mysql_connect('localhost', 'lud_restricted', 'maille_ess_ku_elle'); + +@mysql_select_db($bd , $link); + +// NB : La gestion d'erreur est inhibée. Cet include ne génèrera jamais de code, même si la connexion n'a pas pu être établie
+?>
\ No newline at end of file diff --git a/appli_3_alpha_old/include/ical.inc.php b/appli_3_alpha_old/include/ical.inc.php new file mode 100644 index 0000000..5df8e4c --- /dev/null +++ b/appli_3_alpha_old/include/ical.inc.php @@ -0,0 +1,68 @@ +<?php +/* + * Fonction de génération d'iCal + */ + +// Constantes d'erreur +define("ERR_ICAL_NO_DATA", -1); +define("ERR_ICAL_SQL_ERROR", -2); + + function generationIcal($idP, &$iCal_name, &$iCal_content, &$errmsg) +{ + require_once('connect.inc.php'); + $query = 'SELECT DISTINCT R.idR,R.objetR,P.courrielP,UNIX_TIMESTAMP(C.dateHeure),C.duree,R.lieuR,R.ordreJourR,L.idL' + . ' FROM Liste L,Reunion R,Appartenir A,Creneau C,Personne P' + . " WHERE ((A.idP = $idP AND A.idL = L.idL) OR R.idP_Orga = $idP)" + . ' AND R.idL = L.idL AND C.idC = R.idC_Fixe AND P.idP = R.idP_Orga'; + + if ( ! $result = @mysql_query($query) ) + { + // Cas d'erreur + $errmsg =mysql_generate_errmsg(); + return ERR_ICAL_SQL_ERROR; + } + else + { + if (mysql_num_rows($result)<1) + { + return ERR_ICAL_NO_DATA; + } + else + { + $time = time(); + $iCal_name = "iCal_${idP}_${time}.ics"; + $iCal_content = "BEGIN:VCALENDAR\r\n" . "VERSION:2.0\r\n"; + while ( list($idR, $objetR, $courrielP, $dateDeb, $duree, $lieuR, $ordreJourR, $idL) = mysql_fetch_array($result) ) + { + // TODO : Il est probablement judicieux d'ajouter à l'UID un timestamp unix !!!!! + $iCal_content .= "BEGIN:VEVENT\r\n" . "UID:awor_${idP}.${idR}\r\n" . "SUMMARY:$objetR ($courrielP)\r\n"; + $iCal_content .= 'DTSTART:' . date('Ymd\THis', $dateDeb) . "\r\n"; + $iCal_content .= 'DTEND:' . date('Ymd\THis', $dateDeb+60*$duree) . "\r\n"; + $iCal_content .= "LOCATION:$lieuR\r\n"; + $iCal_content .= "DESCRIPTION:$ordreJourR\r\n"; + + $query = 'SELECT P.courrielP FROM Appartenir A,Personne P' . " WHERE A.idP=P.idP AND A.idL='$idL'"; + if ( ! $result = mysql_query($query) ) + { + // Cas d'erreur + $errmsg =mysql_generate_errmsg(); + $ret=ERR_ICAL_SQL_ERROR; + break; + } + else + { + while ( list($mail_autres) = mysql_fetch_array($result) ) + { + $iCal_content .= "ATTENDEE:mailto:$mail_autres\r\n"; + } + } + // TODO : vérifier la pertinance de la variable utilisée + $iCal_content .= 'URL:http://' . $_SERVER['HTTP_HOST'] . "\r\n"; + $iCal_content .= "END:VEVENT\r\n"; + } + $iCal_content .= "END:VCALENDAR\r\n"; + return 0; + } + } +} +?>
\ No newline at end of file diff --git a/appli_3_alpha_old/include/je.inc.php b/appli_3_alpha_old/include/je.inc.php new file mode 100644 index 0000000..cb80df0 --- /dev/null +++ b/appli_3_alpha_old/include/je.inc.php @@ -0,0 +1,99 @@ +<?php + function traiter_formulaire_valider_modif_personnes() + { + require_once ('include/connect.inc.php'); + $result = mysql_query("SELECT P.idP,P.courrielP FROM Appartenir A, Personne P WHERE P.idP = A.idP AND A.idL=".$_GET['idL']); + if (mysql_num_rows($result)>=0) + { + //Fabrication des trois tableaux + $tabOldPers = array(); + $tabOldPersMail = array(); + $tabNewPers = array(); + if (isset( $_GET['dataParticipants'] ) ) $tabNewPers = $_GET['dataParticipants']; + for($i=0;$i<mysql_num_rows($result);$i++) + { + $row = mysql_fetch_array($result); + $tabOldPers[$i] = $row[0]; + $tabOldPersMail[$i] = $row[1]; + } + //Boucle permettant de suprimer les élements identiques aux deux tableaux + $i = 0; + while ($i < count($tabOldPers)) + { + $exist=false; + for ($j=0;$j<count($tabNewPers);$j++) + { + echo $tabOldPers[$i] . "==<b>" . $tabNewPers[$j] . "</b>OU " . $tabOldPersMail[$i] . "==<b>" . $tabNewPers[$j] . "</b>->" ; + echo "<i>" . (($tabOldPers[$i] == $tabNewPers[$j]) or ($tabOldPersMail[$i] == $tabNewPers[$j])) . "</i><br/>"; + + if (($tabOldPers[$i] == $tabNewPers[$j]) or ($tabOldPersMail[$i] == $tabNewPers[$j])) + { + $exist = true; + print_r($tabNewPers); + $tabNewPers[$j]=NULL; + echo "<br/>"; + print_r($tabNewPers); + echo "<br/>"; + } + } + if ($exist) + { + /* + $tabOldPers[$i] = $tabOldPers[(count($tabOldPers)-1)];unset($tabOldPers[(count($tabOldPers)-1)]); + $tabOldPersMail[$i] = $tabOldPersMail[(count($tabOldPersMail)-1)];unset($tabOldPersMail[(count($tabOldPersMail)-1)]); + } + else + {i++;} + */ + $tabOldPers[$i]=NULL; + $tabOldPersMail[$i]=NULL; + } + $i++; + } + //Tableau permet de savoir qui doit etre supprimer et ajouter + echo "--TabOldPers--<br/>"; + print_r ($tabOldPers); + //for ($i=0;$i<(int)$sizeTabOldPers;$i++) echo "<br/> - " . $tabOldPers[$i]; + echo "<br/>--TabNewPers--<br/>"; + print_r ($tabNewPers); + //for ($i=0;$i<(int)$sizeTabNewPers;$i++) echo " - " . $tabNewPers[$i] ."<br/>"; + } + /* + for ($i=0;$i<count($_GET['dataParticipants']); $i++) + { + if (!stristr($_GET['dataParticipants'][$i],'@')===false) + { + echo "Nouvel inscrit : ".$_GET['dataParticipants'][$i]; + } + } + */ + } + + //Fonction qui affiche toutes les liste public ainsi que les liste privée possédées par idP + function generate_html_array_list ($idP) + { + + // Connexion à la base et sélection de la database + require_once ('include/connect.inc.php'); + $result = mysql_query("SELECT idL,libelleL,estPrivee FROM Liste WHERE idP_Createur=$idP OR estPrivee='non' ORDER BY estPrivee"); + echo "<table>\n<tr>\n<th>Type</th>\n<th>Libellé</th>\n</tr>\n"; + if (mysql_num_rows($result)>0) + { + + for($i=0;$i<mysql_num_rows($result);$i++) + { + $row = mysql_fetch_array($result); + echo "<tr>\n<td>"; + if ($row['estPrivee'] == 'oui') echo 'Privée' ; else echo 'Public'; + echo "</td>\n<td>"; + echo "<a href=\"#\" onclick=\"loadid('poppersonne.php?idL=".$row['idL']."&idP_orga=$idP','poppersonne',true);popon('poppersonne')\" \>"; + echo $row['libelleL']; + echo "</a>\n"; + echo "</td>\n</tr>\n"; + } + + } + echo "</table>\n"; + + } +?>
\ No newline at end of file diff --git a/appli_3_alpha_old/include/ju.inc.php b/appli_3_alpha_old/include/ju.inc.php new file mode 100644 index 0000000..1a03ca9 --- /dev/null +++ b/appli_3_alpha_old/include/ju.inc.php @@ -0,0 +1,80 @@ +<?php + function traiter_formulaire_cequetuveux_aussi() + { + echo "coucou\n"; + } + + function generate_html_reunion_commentaires($idR) + { +?> + <table cellspacing="0" class="commentaires"> + <thead> + <tr> + <th>Commentaires <a href="#">(Editer votre commentaire)</a></th> + </tr> + </thead> + <tr> + <td>Ludo : J'ai monté le DC sur lequel sera basé le SNI</td> + </tr> + <tr> + <td>Jérémie : J'ai fais une première ebauche du DC</td> + </tr> + </table> +<?php + } + + + function generate_html_reunion_fichiers($idR) + { +?> +<table cellspacing="0" class="fichiers"> + <thead> + <tr> + <th>Fichiers attachés <a href="#popfichier" class="pop">(Ajouter un fichier)</a></th> + </tr> + </thead> + <tr> + <td><a href="compte-rendu.txt">compte-rendu.txt</a></td> + </tr> + <tr> + <td><a href="photos-ru.jpg">photos-ru.jpg</a></td> + </tr> +</table> +<?php + } + + + function generate_html_reunion_detail($idR) + { +?> + <table cellspacing="0" class="detail_reunion"> + <thead> + <tr> + <th>Détails de la réunion </th> + <th> </th> + </tr> + </thead> + <tr> + <td><strong>Objet : </strong></td> + <td>Détails stages NEWI</td> + </tr> + <tr> + <td><strong>Organisateur : </strong></td> + <td>Mme Verdier</td> + </tr> + <tr> + <td><strong>Lieu : </strong></td> + <td>Salle 209 </td> + </tr> + <tr> + <td><strong>Ordre du jour : </strong></td> + <td>Le logement, le séjour, les contacts</td> + </tr> + <tr> + <td><strong>Remarque :</strong></td> + <td>aucune</td> + </tr> + </table> +<?php + } +?>
\ No newline at end of file diff --git a/appli_3_alpha_old/include/ludo/TODO_list.txt b/appli_3_alpha_old/include/ludo/TODO_list.txt new file mode 100644 index 0000000..09bca5c --- /dev/null +++ b/appli_3_alpha_old/include/ludo/TODO_list.txt @@ -0,0 +1,22 @@ +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/appli_3_alpha_old/include/ludo/TODO_list.txt~ b/appli_3_alpha_old/include/ludo/TODO_list.txt~ new file mode 100644 index 0000000..9d5b2f5 --- /dev/null +++ b/appli_3_alpha_old/include/ludo/TODO_list.txt~ @@ -0,0 +1,19 @@ +mysql_free_result après les requetes et mysql_close ? + + +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/appli_3_alpha_old/include/ludo/auth.inc.php b/appli_3_alpha_old/include/ludo/auth.inc.php new file mode 100644 index 0000000..18b339d --- /dev/null +++ b/appli_3_alpha_old/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/appli_3_alpha_old/include/ludo/config.inc.php b/appli_3_alpha_old/include/ludo/config.inc.php new file mode 100644 index 0000000..58d159f --- /dev/null +++ b/appli_3_alpha_old/include/ludo/config.inc.php @@ -0,0 +1,63 @@ +<?php +$CONFIG = array +( + 'adminMail' => 'jmi@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', + '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' + ) + ) + ) +); +?> diff --git a/appli_3_alpha_old/include/ludo/fonctions.inc.php b/appli_3_alpha_old/include/ludo/fonctions.inc.php new file mode 100644 index 0000000..2914d50 --- /dev/null +++ b/appli_3_alpha_old/include/ludo/fonctions.inc.php @@ -0,0 +1,294 @@ +<?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) +{ + // Alignement html + require_once('html_elements.inc.php'); + if ( ! $isEditable ) + { + if ( $withTD ) { echo " <td>\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}\">\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 ' '; + generate_html_dispo_dire_non($idR, $idC); + }else + { + // Non Disponible + generate_html_dispo_dire_oui($idR, $idC); + echo ' '; + 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) +{ + // 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 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); + //echo "$is_admin = ( $idP_Self == $idP_orga );"; + $is_admin = ( $idP_Self == $idP_orga ); + $montrerDispoR = ( ( $montrerDispoR === 'oui' ) || $is_admin ) ; + //echo "DEBUG : annuléé $estAnnulee\n"; + $estAnnulee = ( $estAnnulee == 'oui' ); + $estFixee = ( $idC_Fixe != null); + } + else + { + // TODO : erreur + } + // DEBUG : tests en forçant les variables + //$estAnnulee=true; + + echo "\nmontrerDispoR==$montrerDispoR\nestAnnulee==$estAnnulee\nestFixee==$estFixee\nis_admin==$is_admin\n"; +?> +<table class="details" cellspacing="0" 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>Personnes</th>' . "\n"; + + // Remplissage des entêtes de colonnes (créneaux) + $query="SELECT idC, UNIX_TIMESTAMP(dateHeure), duree FROM 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; + echo ' <th>'; + 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; + + } + } + 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> + <form id="formmail" action="sendmail.php" method="get"> + <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 Choisir ch, Creneau c, Personne p, Appartenir a, 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 Choisir ch, 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=='oui' ) { $dispos[$idC]['nbDispo']++; } + if ( $estDispo=='non' ) { $dispos[$idC]['nbNonDispo']++; } + } + } + //print_r($dispos); + + + $query='SELECT p.idP, p.prenomP, p.nomP FROM Personne p, Appartenir a, 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>$p[1] $p[2]</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"; + generate_html_dispo_case($idR, $p[0], $c_id, ( ! $estFixee && ! $estAnnulee && ( $p[0]==$idP_Self ) ),$estDispo, true); + } + // 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?idL='; + echo $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>'; } + if ( $is_admin && ! $estFixee && ! $estAnnulee ) { echo "\n <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 ) + { + 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 " input name=\"idR\" value=\"$idR\" type=\"hidden\"\n"; + echo " </form> </table>\n"; +} + +?>
\ No newline at end of file diff --git a/appli_3_alpha_old/include/ludo/html_elements.inc.php b/appli_3_alpha_old/include/ludo/html_elements.inc.php new file mode 100644 index 0000000..511ea58 --- /dev/null +++ b/appli_3_alpha_old/include/ludo/html_elements.inc.php @@ -0,0 +1,138 @@ +<?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 + if ( isset($_COOKIE['awor']['custom_css'] ) ) + { + $cssfile = $_COOKIE['awor']['custom_css']; + } + else + { + include 'config.inc.php'; + $cssfile=$CONFIG['CSS']['CHOOSER_LIST']['standard']; + } + echo '<link href="css/' . $cssfile . '.css" rel="stylesheet" type="text/css" />' . "\n"; + echo '<link href="css/' . $cssfile . '_nohelp.css" rel="alternate stylesheet" type="text/css" title="nohelp"/>' . "\n"; + echo '<!--<link href="css/print.css" rel="alternate stylesheet" type="text/css" title="print"/>-->' . "\n"; + ?> + </head> +<?php +} + +function generate_html_divs_menu() +{ +?> +<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 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<h2><a href=\"#css_nohelp\" onclick=\"setActiveStyleSheet('nohelp');\">Aide</a></h2>\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() +{ + // TODO : fonction JS qui fait ce qu'il faut !! (a mettre dans le head ??) + require_once('config.inc.php'); + if ( ! is_array($CONFIG['CSS']['CHOOSER_LIST']) ) { return false; } + + if ( isset($_COOKIE['awor']['custom_css'] ) ) { $css_selected=$_COOKIE['awor']['custom_css']; }; + echo '<div class="css_chooser">' . "\n"; + echo ' <select>' . "\n"; + foreach ( $CONFIG['CSS']['CHOOSER_LIST'] as $file => $name ) + { + echo ' <option value="' . $file; + if ( $file == $css_selected ) { echo ' selected="selected'; } + echo '">' . $name . '</option>' . "\n"; + } + echo ' </select>'. "\n"; + echo '</div>'. "\n"; +} + +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 src="./images/question.gif" alt="Inconnu" height="15" width="15" />' . "\n"; +} + +function generate_html_dispo_oui($idP, $idC) +{ + echo '<img src="./images/ok.gif" alt="Disponible" height="16" width="16" />' . "\n"; +} + +function generate_html_dispo_non($idP, $idC) +{ + echo '<img 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 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 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/appli_3_alpha_old/include/ludo/mail_textarea.php b/appli_3_alpha_old/include/ludo/mail_textarea.php new file mode 100644 index 0000000..c9a01eb --- /dev/null +++ b/appli_3_alpha_old/include/ludo/mail_textarea.php @@ -0,0 +1,44 @@ +<?php +require_once('session_verify.inc.php'); +include('config.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=$_GET['model']; } else { $model='empty'; } +?> + +<textarea name="msgText"> +<?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 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/appli_3_alpha_old/include/ludo/majDispo.php b/appli_3_alpha_old/include/ludo/majDispo.php new file mode 100644 index 0000000..276b8a3 --- /dev/null +++ b/appli_3_alpha_old/include/ludo/majDispo.php @@ -0,0 +1,28 @@ +<?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['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['idP']; + + + // TODO Traitement + + generate_html_dispo_case($idR, $idP, $idC, true, $estDispo, false); +} +?>
\ No newline at end of file diff --git a/appli_3_alpha_old/include/ludo/redir.inc.php b/appli_3_alpha_old/include/ludo/redir.inc.php new file mode 100644 index 0000000..6baf40d --- /dev/null +++ b/appli_3_alpha_old/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="' . $dest . '">' . $dest . '</a></p>' . "\n"; +?> +</body> +</html> +<?php + exit(); +} +?>
\ No newline at end of file diff --git a/appli_3_alpha_old/include/ludo/session_verify.inc.php b/appli_3_alpha_old/include/ludo/session_verify.inc.php new file mode 100644 index 0000000..0a9cfbb --- /dev/null +++ b/appli_3_alpha_old/include/ludo/session_verify.inc.php @@ -0,0 +1,10 @@ +<?php +require('redir.inc.php'); + +session_start(); +if ( ! isset($_SESSION['loginP']) ) +{ + $dest='auth_dialog.php?retour=' . $_SERVER['PHP_SELF']; + html_redir($dest); +} +?>
\ No newline at end of file diff --git a/appli_3_alpha_old/index.php b/appli_3_alpha_old/index.php new file mode 100644 index 0000000..7decdd6 --- /dev/null +++ b/appli_3_alpha_old/index.php @@ -0,0 +1,111 @@ +<?php +require('include/ludo/session_verify.inc.php'); +require_once('include/ludo/html_elements.inc.php'); +generate_html_doctype_and_head("Modèle"); +echo "<body>\n"; +generate_html_divs_menu(); +?> + <div id="sous_menu"> + <p class="arbre"> + > <a href="index.php">Accueil</a> + > <a href="index.php">Réunions</a> + > Liste des réunions + </p> + </div> +<?php +generate_html_div_help(); +?> + <div id="contenu"> +<?php + $idP= $_SESSION['idP']; + if ( isset( $_SESSION['prenomP'] ) && isset( $_SESSION['prenomP'] ) ) + { $nom=$_SESSION['prenomP'] . ' ' . $_SESSION['nomP']; } + else { $nom = $_SESSION['loginP']; } + + echo "Bonjour $nom, nous sommes le " . date('d/m/Y') . ' et il est ' . date('H:i'); +?> + <br/><br/> + <a href="organiser.php">Organiser une réunion</a> + <br/><br/> + <table class="listeReunions" summary="Liste des réunions vous concernant"> + <tr> + <th>Objet</th> + <th>Organisateur</th> + <th>Date</th> + <th>Etat</th> + <th>Détails</th> + </tr> +<?php + // Connexion à la base et sélection de la database + require_once 'include/connect.inc.php'; + + function fill_array_liste_reunion($query) + { + if ( ! $result = @mysql_query($query) ) + { + require_once('fonctions.inc.php'); + $errmsg=mysql_generate_errmsg(); + } + else + { + // On écrit ligne à ligne les personnes et les disponibilités + while ( list($idR, $objetR, $nomP, $prenomP, $dateR) = mysql_fetch_array($result) ) + { + // Boucle sur chaque personne + echo " <tr>\n"; + echo ' <td><a href="details_reunion.php?idR=' . $idR . '">' . "$objetR</td>\n"; + echo " <td>$prenomP $nomP</td>\n"; + $dateStr=''; + $stateStr='En préparation'; + if ( isset($dateR) ) + { + $dateStr=date('d/m/Y \à H:i', $dateR); + if ( $dateR > time() ) + { + $stateStr='Fixée'; + } + else + { + $stateStr='Pasée'; + } + } + echo " <td>$dateStr</td>\n"; + echo " <td>$stateStr</td>\n"; + echo ' <td>'; + generate_html_reunion_detail_button($idR); + echo "</td>\n"; + echo " </tr>\n"; + } + } + } + + + // Réunions fixées et passées + $query = 'SELECT DISTINCT R.idR, R.objetR, P.nomP, P.prenomP, UNIX_TIMESTAMP(C.dateHeure)' + . ' FROM Liste L,Reunion R,Appartenir A,Creneau C,Personne P' + . " WHERE ((A.idP = $idP AND A.idL = L.idL) OR R.idP_Orga = $idP)" + . ' AND R.idL = L.idL AND P.idP = R.idP_Orga AND R.idC_Fixe = C.idC' + . ' ORDER BY C.dateHeure DESC;'; + fill_array_liste_reunion($query); + + // Réunion en préparation + $query = 'SELECT DISTINCT R.idR, R.objetR, P.nomP, P.prenomP, NULL' + . ' FROM Liste L,Reunion R,Appartenir A,Personne P' // Creneau C, + . " WHERE ((A.idP = $idP AND A.idL = L.idL) OR R.idP_Orga = $idP)" + . ' AND R.idL = L.idL AND P.idP = R.idP_Orga AND ISNULL(R.idC_Fixe);'; + //echo "DEBUG : $query\n"; + fill_array_liste_reunion($query); + + //$query = + //echo "DEBUG : $query\n"; +?> + </table> + <br/> + <a href="organiser.php">Organiser une réunion</a> + </div> +<?php + if ( isset ($errmsg) ) { generate_html_div_errmsg($errmsg); } +?> +</body> +</html> + diff --git a/appli_3_alpha_old/listes.php b/appli_3_alpha_old/listes.php new file mode 100644 index 0000000..8372ef4 --- /dev/null +++ b/appli_3_alpha_old/listes.php @@ -0,0 +1,60 @@ +<?php +require('include/ludo/session_verify.inc.php'); +require('include/ludo/html_elements.inc.php'); +generate_html_doctype_and_head("Mon profil"); +echo "<body>\n"; +// TODO : déplacer à un endroit opportun +echo '<script type="text/javascript" src="script.js"></script>' . "\n"; +generate_html_divs_menu(); +?> + <div id="sous_menu"> + <p class="arbre"> + > <a href="index.php">Accueil</a> + > <a href="profil.php">Listes</a> + > Gestion des listes + </p> + </div> +<?php generate_html_div_help(); ?> + <div id="contenu"> + <a href="#poppersonne" onclick="loadid('poppersonne.php?idR=2&idL=3','poppersonne',true);popon('poppersonne');">Créer une liste</a><br /> +<table cellspacing="0"> + <thead> + + <tr> + <th> </th> + <th>Type</th> + <th>Libellé</th> + </tr> + </thead> + <tr> + <td><img src="./images/del.gif" alt="Non disponible" width="15" height="15" /></td> + + <td>Privée</td> + <td><a href="gestListes.php">Mes contacts préférés</a> </td> + </tr> + <tr> + <td><img src="./images/del.gif" alt="Non disponible" width="15" height="15" /></td> + + <td>Privée</td> + <td><a href="gestListes.php">Professeurs de TP de réseau</a></td> + </tr> + <tr> + <td> </td> + <td>Public</td> + + <td><a href="gestListes.php">Conseil d'administration</a></td> + </tr> + <tr> + <td> </td> + <td>Public</td> + <td><a href="gestListes.php">Tous</a></td> + </tr> + +</table> + <a href="#poppersonne" onclick="loadid('poppersonne.php?idR=2&idL=3','poppersonne',true);popon('poppersonne');">Créer une liste</a><br /> + </div> + <div id="poppersonne" class="popup_personne"></div> + +</body> +</html> + diff --git a/appli_3_alpha_old/popcreneau.php b/appli_3_alpha_old/popcreneau.php new file mode 100644 index 0000000..484594b --- /dev/null +++ b/appli_3_alpha_old/popcreneau.php @@ -0,0 +1,90 @@ +<?php +function generate_html_div_popcreneau($idR) +{ + require_once ('include/connect.inc.php'); + ?> + <h2>Créneaux de la réunion </h2> + <div class="popup_contenu"> + <form id="formcreneau" method="get" action="" onsubmit="return dataListe('creneaux','dataCreneaux');"> + <table> + <tr> + <td>Créer un créneau </td> + <td> </td> + <td>Créneaux</td> + </tr> + <tr> + <td>Date : + <select name="day"> + <?php + for ($i=1;$i<=31;$i++) {$i = "0$i"; $i = substr($i,-2); echo "<option value=\"$i\">$i</option>"; } + ?> + </select>/ + <select name="month"> + <?php + for ($i=1;$i<=12;$i++) {$i = "0$i"; $i = substr($i,-2); echo "<option value=\"$i\">$i</option>"; } + ?> + </select>/ + <select name="year"> + <?php + for ($i=date('Y');$i<=((int)date('Y')+4);$i++) echo "<option value=\"$i\">$i</option>"; + ?> + </select><br />Début : + <select name="hourStart"> + <?php + for ($i=0;$i<=23;$i++) {$i = "0$i"; $i = substr($i,-2); echo "<option value=\"$i\">$i</option>"; } + ?> + </select>: + <select name="minuteStart"> + <?php + for ($i=0;$i<=59;$i++) {$i = "0$i"; $i = substr($i,-2); echo "<option value=\"$i\">$i</option>"; } + ?> + </select><br />Fin : + <select name="hourEnd"> + <?php + for ($i=0;$i<=23;$i++) {$i = "0$i"; $i = substr($i,-2); echo "<option value=\"$i\">$i</option>"; } + ?> + </select>: + <select name="minuteEnd"> + <?php + for ($i=0;$i<=59;$i++) {$i = "0$i"; $i = substr($i,-2); echo "<option value=\"$i\">$i</option>"; } + ?> + </select></td> + <td><input name="AjouterCreneau" type="button" value="Ajouter" onclick="addcreneau(this.form);"/><br/><br/> + <input name="supprimerCreneau" type="button" value="Retirer" onclick="removecreneau(this.form);"/></td> + <td><select name="creneaux" size="10" id="creneaux"> + <?php + $result = mysql_query("SELECT UNIX_TIMESTAMP(dateHeure),duree FROM Creneau WHERE idR=".$idR); + if (mysql_num_rows($result)>0) + { + for($i=0;$i<mysql_num_rows($result);$i++) + { + $row = mysql_fetch_array($result); + $date_deb =$row[0]; + $date_fin = $date_deb + 60 * $row[1]; + echo '<option value="'.date('Hi',$date_deb).'.'.date('Hi',$date_fin).'.'.date('d.m.Y',$date_deb).'">' . date('H:i',$date_deb) . ' -> ' . date('H:i',$date_fin) . ' ' . date('d/m/Y',$date_deb); + } + } + ?> + </select></td></tr></table><br/> + <input type="hidden" name="idR" value="<?php echo $idR;?>" /> + <input type="hidden" name="action" value="valider_creneau" /> + <input type="submit" value="Valider" /><input type="button" value="Fermer" onclick="popoff('popcreneau')"/> + </form> + </div> +<?php +} + +if (isset($_GET['idR'])) +{ + generate_html_div_popcreneau($_GET['idR']); +} +else +{ + echo '<div class="popup_contenu">'; + echo 'Erreur - pas d\'identifiant de réunion !'; + echo '<form id="formcreneau" method="get" action="">'; + echo '<input type="button" value="Fermer" onclick="popoff(\'popcreneau\')"/>'; + echo '</form>'; + echo '</div>'; +} +?> diff --git a/appli_3_alpha_old/popfixer.php b/appli_3_alpha_old/popfixer.php new file mode 100644 index 0000000..87cc2dd --- /dev/null +++ b/appli_3_alpha_old/popfixer.php @@ -0,0 +1,40 @@ +<?php + if (isset($_GET['idC'])) + { + include ('include/connect.inc.php'); + echo '<h2>Désirez-vous fixer ce créneau ?</h2>'; + echo '<div class="popup_contenu">'; + $result = mysql_query("SELECT UNIX_TIMESTAMP(dateHeure),duree FROM Creneau WHERE idC=".$_GET['idC']); + if (mysql_num_rows($result)>0) + { + for($i=0;$i<mysql_num_rows($result);$i++) + { + $row = mysql_fetch_array($result); + $date_deb =$row[0]; + $date_fin = $date_deb + 60 * $row[1]; + echo 'Le ' . date('d/m/y', $date_deb) . ' de ' . date('H:i', $date_deb) . ' à ' . date('H:i', $date_fin); + } + } + + echo '<br/><br/>'; + //~ echo '<form id="formfixer" method="get" action="'.$_SERVER['PHP_SELF'].'">'; + echo '<form id="formfixer" method="get" action="">'; + echo '<input type="hidden" name="action" value="fixer_creneau" />'; + echo '<input type="hidden" name="idR" value="'.$_GET['idR'].'" />'; + echo '<input type="hidden" name="idR" value="'.$_GET['idR'].'" />'; + echo '<input type="submit" value="Valider"/>'; + echo '<input type="button" value="Annuler" onclick="popoff(\'popfixer\')"/>'; + echo '</form>'; + echo '</div>'; + } + else + { + echo '<div class="popup_contenu">'; + echo 'Erreur - pas d\'identifiant de cr&eaneau !'; + echo '<form id="formfixer" method="get" action="">'; + echo '<input type="button" value="Fermer" onclick="popoff(\'popfixer\')"/>'; + echo '</form>'; + echo '</div>'; + } +?> + diff --git a/appli_3_alpha_old/poppersonne.php b/appli_3_alpha_old/poppersonne.php new file mode 100644 index 0000000..074c023 --- /dev/null +++ b/appli_3_alpha_old/poppersonne.php @@ -0,0 +1,68 @@ +<?php require_once('include/connect.inc.php'); ?> +<h2>Participants de la réunion</h2> +<div class="popup_contenu"> +<form id="formpersonne" action="" method="get" onsubmit="return dataListe('participants','dataParticipants');"> +<table> +<tr> +<td>Contacts disponibles </td> +<td> </td> +<td>Participants </td> +</tr> +<tr> +<td> +<select name="listeDispo" id="listeDispo" onChange="loadlist('poppersonneliste.php?idL=','listeDispo','divListe');"> +<option value="None">Choisir ...</option> +<option value="Tous">Tous</option> +<?php + $result = mysql_query("SELECT idL,libelleL,estPrivee FROM Liste WHERE (idP_Createur=".$_GET['idP_orga']." OR estPrivee='non') AND idL <>".$_GET['idL']." ORDER BY estPrivee"); + if (mysql_num_rows($result)>0) + { + for($i=0;$i<mysql_num_rows($result);$i++) + { + $row = mysql_fetch_array($result); + echo '<option value="'.$row[0].'">'; + echo $row[1]; + echo '</option>'; + } + } +?> +</select> +</td> +<td> </td> +<td> </td> +</tr> +<tr> +<td> +<div id="divListe"> +</div> +</td> +<td><input name="AjouterParticipant" type="button" id="AjouterParticipant" value="Ajouter" onclick="addPers(this.form);"/> +<br/> +<br/> +<input name="supprimerParticipant" type="button" id="supprimerParticipant" value="Retirer" onclick="removePers(this.form);"/></td> +<td> +<select name="participants" size="10" id="participants"> +<?php + $result = mysql_query("SELECT P.idP,P.courrielP,P.nomP,P.prenomP FROM Personne P,Appartenir A WHERE P.idP=A.idP AND A.idL=".$_GET['idL']); + if (mysql_num_rows($result)>0) + { + for($i=0;$i<mysql_num_rows($result);$i++) + { + $row = mysql_fetch_array($result); + echo '<option value="'.$row[0].'">'; + echo $row[2] . " " . $row[3]; + echo '</option>'; + } + } +?> +</select> +</td> +</tr> +</table> +<input type="text" name="courriel" id="courriel" value="" size="30" /><input type="button" value="inscrire" onclick="newPers(this.form);" /> +<br/><br/> +<input type="hidden" name="idL" value="<?php echo $_GET['idL'];?>" /> +<input type="hidden" name="action" value="valider_modif_personnes" /> +<input type="submit" name="Submit" value="Valider" /><input type="button" value="Fermer" onclick="popoff('poppersonne');" /> +</form> +</div> diff --git a/appli_3_alpha_old/poppersonneliste.php b/appli_3_alpha_old/poppersonneliste.php new file mode 100644 index 0000000..819604b --- /dev/null +++ b/appli_3_alpha_old/poppersonneliste.php @@ -0,0 +1,22 @@ +<?php + require_once 'include/connect.inc.php'; + if ($_GET['idL'] != "None") + { + $req = "SELECT P.idP , P.courrielP , P.nomP , P.prenomP FROM Personne P"; + if ($_GET['idL'] != "Tous") {$req=$req.",Appartenir A WHERE P.idP=A.idP AND A.idL=".$_GET['idL'];} + $result = mysql_query($req) ; + echo '<select name="contactDispo" size="10" id="contactDispo">'; + + if (mysql_num_rows($result)>0) + { + for($i=0;$i<mysql_num_rows($result);$i++) + { + $row = mysql_fetch_array($result); + echo '<option value="'.$row[0].'" onDblClick="addPers(this.form);">'; + echo $row[2] . " " . $row[3]; + echo '</option>'; + } + } + echo '</select>'; + } +?> diff --git a/appli_3_alpha_old/script.js b/appli_3_alpha_old/script.js new file mode 100644 index 0000000..12a8998 --- /dev/null +++ b/appli_3_alpha_old/script.js @@ -0,0 +1,277 @@ +function addPers(form) +{ + if(form.contactDispo.options.selectedIndex>=0) + { + var oValue = form.contactDispo.options[form.contactDispo.options.selectedIndex].value; + + var exist = false; + var i = 0; + while (i<form.participants.options.length && !exist) { if (form.participants.options[i].value == oValue) exist = true; i=i+1;} + + if (!exist) + { + var oText = form.contactDispo.options[form.contactDispo.options.selectedIndex].text; + var o = new Option(oText,oValue); + form.participants.options[form.participants.options.length]=o; + } + } +} + +function newPers(form) +{ + if (verifMail(form.courriel.value)) + { + var oValue = form.courriel.value; + + var exist = false; + var i = 0; + while (i<form.participants.options.length && !exist) { if (form.participants.options[i].value == oValue) exist = true; i=i+1;} + + if (!exist) + { + var oText = form.courriel.value; + var o = new Option(oText,oValue); + form.participants.options[form.participants.options.length]=o; + } + } + else + { + alert ("Mail invalide"); + } +} + +function verifMail(mail) +{ + if ((mail.indexOf("@")>=0)&&(mail.indexOf(".")>=0)) return true; else return false; +} + + +function removePers(form) +{ + if (form.participants.options.selectedIndex>=0) + { + var i = form.participants.options.selectedIndex; + form.participants.options[form.participants.options.selectedIndex]=null; + if (parseInt(i) > 0) {form.participants.options.selectedIndex=parseInt(i)-1;} else {form.participants.options.selectedIndex=0;} + } + else + { + alert("Suppression impossible : aucune ligne sélectionnée"); + } +} + +function loadid(url,id,isPop) { + if (isPop) + document.getElementById(id).innerHTML = "<em>Chargement en cours ...<br/><a href=\"#\" onclick=\"popoff('"+id+"')\" >Fermer</a></em>"; + else + document.getElementById(id).innerHTML = "<em>Chargement en cours ...</em>"; + + + var http_request = false; + + if (window.XMLHttpRequest) { // Mozilla, Safari,... + http_request = new XMLHttpRequest(); + if (http_request.overrideMimeType) { + http_request.overrideMimeType('text/xml'); + } + } else if (window.ActiveXObject) { // IE + try { + http_request = new ActiveXObject("Msxml2.XMLHTTP"); + } catch (e) { + try { + http_request = new ActiveXObject("Microsoft.XMLHTTP"); + } catch (e) {} + } + } + + if (!http_request) { + alert('Abandon : Impossible de créer une instance XMLHTTP'); + return false; + } + + http_request.onreadystatechange = function(){ + if (http_request.readyState == 4) { + if (http_request.status == 200) { + document.getElementById(id).innerHTML = http_request.responseText; + } else { + if (isPop) + document.getElementById(id).innerHTML = "<em>Un problème est survenu ...<br/><a href=\"#\" onclick=\"loadid('"+url+"','"+id+"',true)\" >Réessayer</a> - <a href=\"#\" onclick=\"popoff('"+id+"')\" >Fermer</a></em>"; + else + document.getElementById(id).innerHTML = "<em>Un problème est survenu ...<br/><a href=\"#\" onclick=\"loadid('"+url+"','"+id+"',false)\" >Réessayer</a></em>"; + } + } + }; + + http_request.open('GET', url, true); + http_request.send(null); +} + +function popon (id) +{ + var thisPopup = document.getElementById(id); + thisPopup.style.display='block'; + var thisMasque = document.getElementById('masque'); + thisMasque.style.display='block'; +} + +function popoff (id) +{ + var thisPopup = document.getElementById(id); + thisPopup.style.display='none'; + var thisMasque = document.getElementById('masque'); + thisMasque.style.display='none'; +} + +function addcreneau(form) +{ + if(form.day.options.selectedIndex>=0 && form.month.options.selectedIndex>=0 && form.year.options.selectedIndex>=0 && form.hourStart.options.selectedIndex>=0 && form.minuteStart.options.selectedIndex>=0 && form.hourEnd.options.selectedIndex>=0 && form.minuteEnd.options.selectedIndex>=0) + { + if (verifDate(form.day.options[form.day.options.selectedIndex].value,form.month.options[form.month.options.selectedIndex].value,form.year.options[form.year.options.selectedIndex].value)) + { + //Création de la valeur + var oValue = form.hourStart.options[form.hourStart.options.selectedIndex].value + form.minuteStart.options[form.minuteStart.options.selectedIndex].value + "." + form.hourEnd.options[form.hourEnd.options.selectedIndex].value + form.minuteEnd.options[form.minuteEnd.options.selectedIndex].value; + oValue = oValue + "." + form.day.options[form.day.options.selectedIndex].value + "." + form.month.options[form.month.options.selectedIndex].value + "." + form.year.options[form.year.options.selectedIndex].value; + + //Test si la valeur est déja dans la liste + var exist = false; + var i = 0; + while (i<form.creneaux.options.length && !exist) { if (form.creneaux.options[i].value == oValue) exist = true; i=i+1;} + + //Création du texte et de l'option et insertion de l'option si la valeur n'a pas été trouvée + if (!exist) + { + var oText = form.hourStart.options[form.hourStart.options.selectedIndex].value + ":" + form.minuteStart.options[form.minuteStart.options.selectedIndex].value + " -> " + form.hourEnd.options[form.hourEnd.options.selectedIndex].value + ":" + form.minuteEnd.options[form.minuteEnd.options.selectedIndex].value; + oText = oText + " " + form.day.options[form.day.options.selectedIndex].value + "/" + form.month.options[form.month.options.selectedIndex].value + "/" + form.year.options[form.year.options.selectedIndex].value; + var o = new Option(oText,oValue); + form.creneaux.options[form.creneaux.options.length]=o; + } + } + } +} + +function removecreneau(form) +{ + if (form.creneaux.options.selectedIndex>=0) + { + var i = form.creneaux.options.selectedIndex; + form.creneaux.options[form.creneaux.options.selectedIndex]=null; + if (parseInt(i) > 0) {form.creneaux.options.selectedIndex=parseInt(i)-1;} else {form.creneaux.options.selectedIndex=0;} + } + else + { + alert("Suppression impossible : aucune ligne sélectionnée"); + } +} + +function dataListe(idSelect,idInput) +{ + var liste = document.getElementById(idSelect); + if (liste) + { + for (var i=0;i<liste.options.length;i++) + { + var newInput = document.createElement("input"); +/* newInput.setAttribute("type", "hidden"); + newInput.setAttribute("name", (idInput+"["+i+"]")); + newInput.setAttribute("value", liste.options[i].value);*/ + newInput.type = "hidden"; + newInput.name = idInput+"["+i+"]"; + newInput.value = liste.options[i].value; + liste.form.appendChild(newInput); + } + return (true); + } + else + { + return (false); + } + +} +function verifDate(day,month,year) +{ + var a= year; + var m= month; + var d= day; + var ok=true; + + var date2=new Date(a,m-1,d); + d2=date2.getDate(); + m2=date2.getMonth()+1; + a2=date2.getFullYear(); + if (a2<=100) {a2=1900+a2} //Pour depasser 2000 + if ( (d!=d2)||(m!=m2)||(a!=a2) ) + { + alert("Cette date n'existe pas !"); + ok=false; + } + return (ok); +} +function loadlist(url,id,idListe) +{ + + if (document.getElementById(id)) + { + loadid((url+document.getElementById(id).options[document.getElementById(id).options.selectedIndex].value),idListe,false); + } +} + +//*************************************************************************// +// Switcher CSS +//*************************************************************************// +function setActiveStyleSheet(title) { + var i, a, main; + for(i=0; (a = document.getElementsByTagName("link")[i]); i++) { + if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) { + a.disabled = true; + if(a.getAttribute("title") == title) a.disabled = false; + } + } +} +function getActiveStyleSheet() { + var i, a; + for(i=0; (a = document.getElementsByTagName("link")[i]); i++) { + if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title") && !a.disabled) return a.getAttribute("title"); + } + return null; +} +function getPreferredStyleSheet() { + var i, a; + for(i=0; (a = document.getElementsByTagName("link")[i]); i++) { + if(a.getAttribute("rel").indexOf("style") != -1 + && a.getAttribute("rel").indexOf("alt") == -1 + && a.getAttribute("title") + ) return a.getAttribute("title"); + } + return null; +} +function createCookie(name,value,days) { + if (days) { + var date = new Date(); + date.setTime(date.getTime()+(days*24*60*60*1000)); + var expires = "; expires="+date.toGMTString(); + } + else expires = ""; + document.cookie = name+"="+value+expires+"; path=/"; +} +function readCookie(name) { + var nameEQ = name + "="; + var ca = document.cookie.split(';'); + for(var i=0;i < ca.length;i++) { + var c = ca[i]; + while (c.charAt(0)==' ') c = c.substring(1,c.length); + if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); + } + return null; +} +window.onload = function(e) { + var cookie = readCookie("aworcustom_css"); + var title = cookie ? cookie : getPreferredStyleSheet(); + setActiveStyleSheet(title); +} +window.onunload = function(e) { + var title = getActiveStyleSheet(); + createCookie("aworcustom_css", title, 365); +} +var cookie = readCookie("aworcustom_css"); +var title = cookie ? cookie : getPreferredStyleSheet(); +setActiveStyleSheet(title);
\ No newline at end of file diff --git a/appli_3_alpha_old/sendmail.php b/appli_3_alpha_old/sendmail.php new file mode 100644 index 0000000..e739884 --- /dev/null +++ b/appli_3_alpha_old/sendmail.php @@ -0,0 +1,138 @@ +<?php +require('include/ludo/session_verify.inc.php'); +require_once('include/ludo/html_elements.inc.php'); +require_once('include/connect.inc.php'); + + + +generate_html_doctype_and_head("Envoi de courriel"); +echo "<body>\n"; +generate_html_divs_menu(); +?> + <div id="sous_menu"> + <p class="arbre"> + > <a href="index.php">Accueil</a> + > <a href="index.php">Réunions</a> + > Envoi de courriel + </p> + </div> +<?php generate_html_div_help(); +if( isset($_GET['envoi']) ) +{ + // TODO : code d'envoi + echo '<div id="contenu"><pre>'; + print_r($_REQUEST); + echo '</div></body></html>'; + exit(); +} + +if( isset($_GET['idR']) ) +{ + $idR=addslashes($_GET['idR']); +} +else +{ + $errmsg=""; +} + +$result = mysql_query("SELECT idL FROM Reunion WHERE idR='$idR'"); +if (mysql_num_rows($result)===1) +{ + list($idL) = mysql_fetch_array($result); +} +else +{ + $errmsg=""; +} + + +if ( isset($errmsg) ) + { + echo '<div id="contenu">' . $errmsg .'</div></body></html>'; + exit(); + } + +?> + + <div id="contenu"> + <form id="formmail" action="sendmail.php" method="get" onsubmit="return dataListe('participants','dataParticipants');"> + <table> + <tbody> + <tr> + <td>Contacts disponibles</td> + <td> </td> + <td>Destinataires</td> + </tr> + <tr> + <td> + <select name="contactDispo" size="10" id="contactDispo"> +<?php + $personnes = array(); + $req = 'SELECT P.idP , P.courrielP , P.nomP , P.prenomP FROM Personne P, Appartenir A WHERE P.idP=A.idP AND A.idL=' . $idL; + $result = mysql_query($req) ; + + if (mysql_num_rows($result)>0) + { + for($i=0;$i<mysql_num_rows($result);$i++) + { + list($idP, $courrielP, $nomP, $prenomP) = mysql_fetch_array($result); + $personnes[$idP]=array($courrielP, $nomP, $prenomP); + echo '<option value="'.$idP.'" onDblClick="addPers(this.form);">'; + echo $nomP . " " . $prenomP; + echo "</option>\n"; + } + } +?> + </select> + </td> + <td> + <input name="AjouterParticipant" id="AjouterParticipant" value="Ajouter" onclick="addPers(this.form);" type="button" /> + <br /> + <br /> + <input name="supprimerParticipant" id="supprimerParticipant" value="Retirer" onclick="removePers(this.form);" type="button" /> + </td> + <td> + <select name="participants" size="10" id="participants"> +<?php + foreach( $personnes as $idP=>$p) + { + if ( isset($_GET['mail_idP' . $idP] ) ) + { + echo '<option value="'.$idP.'" onDblClick="addPers(this.form);">'; + echo $p[1] . " " . $p[2]; + echo "</option>\n"; + } + } +?> + </select> + </td> + </tr> + </tbody> + </table> + <div> + Modèle : +<?php + echo '<select name="modelsList" id="modelsList" onchange="loadlist(\'include/ludo/mail_textarea.php?idR='; + echo $idR . "&model=','modelsList','divMsg');\">\n"; +?> + <option value="empty">Vierge</option> + <option value="cree">Nouvelle Réunion</option> + <option value="modif">Réunion modifiée</option> + <option value="annul">Réunion annulée</option> + <option value="fixee">Réunion fixée</option> + </select> + </div> + <div> + Objet : <input name="msgObject" type="text" size="40" value="AWOR : Courriel de notification" /> + <div id='divMsg'> +<?php include 'include/ludo/mail_textarea.php'; ?> + </div> + <div> + <input name="envoi" type="hidden" value="1" /> + <input type="submit" value="Envoyer" /> + </div> + </form> + </div> +</body> +</html> + diff --git a/appli_3_alpha_old/sendmail.php~ b/appli_3_alpha_old/sendmail.php~ new file mode 100644 index 0000000..4b5248d --- /dev/null +++ b/appli_3_alpha_old/sendmail.php~ @@ -0,0 +1,47 @@ +<?php +require('include/ludo/session_verify.inc.php'); +require_once('include/ludo/html_elements.inc.php'); +generate_html_doctype_and_head("Envoi de courriel"); +echo "<body>\n"; +generate_html_divs_menu(); +?> + <div id="sous_menu"> + <p class="arbre"> + > <a href="index.php">Accueil</a> + > <a href="index.php">Réunions</a> + > Envoi de courriel + </p> + </div> +<?php generate_html_div_help(); ?> + <div id="contenu"> + <pre> +<?php print_r($_REQUEST); ?> + </pre> +<?php + require_once 'include/connect.inc.php'; + if ($_GET['idL'] != "None") + { + $req = "SELECT P.idP , P.courrielP , P.nomP , P.prenomP FROM Personne P"; + if ($_GET['idL'] != "Tous") {$req=$req.",Appartenir A WHERE P.idP=A.idP AND A.idL=".$_GET['idL'];} + $result = mysql_query($req) ; + echo '<select name="contactDispo" size="10" id="contactDispo">'; + + if (mysql_num_rows($result)>0) + { + for($i=0;$i<mysql_num_rows($result);$i++) + { + $row = mysql_fetch_array($result); + echo '<option value="'.$row[0].'" onDblClick="addPers(this.form);">'; + echo $row[2] . " " . $row[3]; + echo '</option>'; + } + } + echo '</select>'; + } +?> + + + </div> +</body> +</html> + diff --git a/appli_3_alpha_old/templates/mail_cree.php b/appli_3_alpha_old/templates/mail_cree.php new file mode 100644 index 0000000..a69a8b4 --- /dev/null +++ b/appli_3_alpha_old/templates/mail_cree.php @@ -0,0 +1,6 @@ +<?php +// Vous pouvez utiliser les variables suivantes pour personnaliser le modèle +// $objetR, $ordreJourR, $lieuR, $remarquesR +echo "Réunion créée..."; +echo "test : $objetR, $ordreJourR, $lieuR, $remarquesR\n"; +?>
\ No newline at end of file diff --git a/appli_3_alpha_old/testGet.php b/appli_3_alpha_old/testGet.php new file mode 100644 index 0000000..03dc369 --- /dev/null +++ b/appli_3_alpha_old/testGet.php @@ -0,0 +1,18 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<title>TestGEt</title> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> +<script type="text/javascript" src="script.js"></script> +</head> + +<body> +<?php + include("include/connect.inc.php"); + include("popcreneau.php"); + include("poppersonne.php"); +?> +<hr/> +<pre><?php print_r($_GET); ?></pre> +</body> +</html> |