Salle informatique : Installation d'un script de réservation. Introduction PhpMyResa est un script en php permettant la gestion des réservations d'une salle informatique en ligne (site Internet ou intranet). Il utilise une base MySql pour fonctionner. PhpMyResa est un logiciel libre sous licence GPL. N'hésitez pas à le modifier, le transformer, l'améliorer... il est fait pour cela! Configuration requise Pour fonctionner, le script nécessite une version 4.2 de php. C'est le cas des versions récentes de EasyPhp (à partir de la version 1.6) et de l'hébergement proposé aux établissements de l'académie de Strasbourg (actuellement 4.2.0). Les requêtes MySql utilisées par ce script sont des requêtes très simples et devraient fonctionner sur la plupart des versions de MySql (versions testées : 3.23.39 et 4.0.15). Vous êtes... un PRI off-line : un PRI on-line : Quel PRI êtes-vous? ou «Comment lire cette documentation?» sans Intranet et sans site web dynamique, l'installation «de base» devrait convenir. Lisez la partie Installation. vous souhaitez ajouter le script à un système d'identification existant. Lisez la partie Installation et Configuration. Un PRI esthète : les couleurs par défaut jurent avec le camaïeu rose de votre Intranet : lisez la partie Feuille de style Un PRI riche : vous avez trois salles informatiques à gérer, deux vidéoprojecteur et cinq portables. Mettez les mains dans le cambouis et modifiez le code php en lisant la partie Adapter le script. Un programmeur fou : Vous avez pris «Php/MySql» en première langue quand vous étiez petit... merci de fermer cette documentation qui n'est pas faite pour vous. Plongez-vous dans le code php (commenté en plus) et modifiez le, perfectionnez-le... C'est ça la magie du logiciel libre! Christian Westphal christian.westphal@ac-strasbourg.fr
Installation Cette partie décrit l'installation et la configuration «de base» de PhpMyResa. Pour une configuration plus fine, lisez la partie suivante «configuration». Copie des fichiers : les fichiers à copier sur le serveur (ou dans le répertoire www de EasyPhp) sont les suivants : reservation.php auth.php conf.inc.php config.ini funct_date.inc.php logout.php resa.php resa_form.html style.css SCRIPT PRINCIPAL script d'identification fichier de configuration fichier de configuration fonction de date francophone script de déconnection script gérant les réservations formulaire de login feuille de style Configuration : Si vous demandez à votre navigateur la page reservation.php, le formulaire de login apparaîtra bien mais ne sera pas fonctionnel : Warning: mysql_connect(): Unknown MySQL Server Host '********' (11001) in c:\program files\easyphp1-7\www\resa2\auth.php on line 11 Ouvrez le fichier conf.inc.php dans un éditeur de texte (notepad fait l'affaire) et corrigez les lignes 5 à 8 : define ("NOM", "*********"); define ("PASSE", "*********"); define ("SERVEUR", "********"); define ("BASE", "********"); Ces quatre lignes définissent des constantes pour MySql. NOM : PASSE : SERVEUR : BASE : est le nom de l'utilisateur de MySql. Pour EasyPhp, c'est Root par défaut, pour ac-strasbourg.fr, c'est le nom fourni par le webmestre lors de l'ouverture de l'espace d'hébergement (du style COL_0671234X pour les collèges et, je présume, LYC_ 0671234X pour les lycées) mot de passe pour MySql. Vide par défaut pour EasyPhp, il est fourni pour le domaine ac-strasbourg.fr. nom de la machine faisant office de serveur MySql : localhost pour EasyPhp comme pour ac-strasbourg.fr. nom de la base de donnée. Pour ac-strasbourg.fr, le nom est le même que NOM, pour EasyPhp, deux bases existent par défaut, mysql et test. Il est préférable de créer une nouvelle base pour les essais (pourquoi pas avec le même nom que l'hébergement définitif). Création des comptes : Si, à présent, vous redemandez à votre navigateur la page reservation.php, le message d'erreur n'apparaît plus mais l'identification n'est toujours pas possible : aucune table d'utilisateurs n'existe. Cette table peut être créée avec PhpMyAdmin et un fichier *.sql tel celui fourni en exemple (install_tables.sql). Ce fichier permet la création des deux tables nécessaires au fonctionnement du script : salle_info qui contient les réservations de la salle et profs qui recense les utilisateurs et leurs mots de passe. (remarque : une telle base de données nécessite sa déclaration à la CNIL) Les trois comptes par défaut ne convenant pas, il est nécessaire de les modifier. Deux solutions s'offrent à vous : la création via PhpMyAdmin ou l'écriture d'un script SQL. PhpMyAdmin : Dans la base utilisée, sélectionnez la table profs et cliquez sur insérer. Il ne reste qu'à ajouter, à la main, les différentes entrées de la table. Les champs par défaut sont login, passe, nom et groupe. Login contient l'identifiant (unique) de chaque utilisateur. Passe contient le mot de passe et nom son... nom (nom ou nom complet, à votre convenance). Le champ groupe contient le groupe d'utilisateur. 'prof' pour les profs (droits de base) et 'admin' pour le PRI (droits étendus)
Script SQL : Si vous disposez d'un listing des enseignants de votre établissement, le plus simple est de modifier le fichier install_table.sql, tout du moins sa dernière instruction : INSERT INTO `profs` (`login`, `passe`, `nom`, `groupe`) VALUES ('black', 'azerty', 'Black', 'prof'), ('pri', 'prisunic', 'PRI', 'admin'), ('mortimer', 'qwerty', 'Mortimer', 'prof'); La syntaxe est évidente : la première ligne INSERT INTO `profs` (`login`, `passe`, `nom`, `groupe`) VALUES est à conserver, les lignes suivantes contiennent, dans l'ordre, identifiant, mot de passe, nom et groupe de chaque utilisateur. Les chaînes sont limitées par des apostrophes ('), chaque utilisateur est encadré par des parenthèses et est séparé du suivant par une virgule. Un point-virgule termine la liste. Plages horaires : Le script est fonctionnel mais ne correspond peut-être pas aux spécificités de votre établissement. Les plages horaires s'ajustent avec le fichier config.ini. Ce fichier est un simple fichier *.ini semblables à ceux utilisé par Windows. La section [plages_horaire] contient les noms des différentes plages horaires, l'indexation commence à 0 et doit être continue et dans l'ordre. Le contenu des chaînes est, par contre, quelconque : [plages_horaire] 0=M1 1=M2 Ceci peut devenir : [plages_horaire] 0=8h05-9h00 1=9h05-10h00 Le nombre de plages horaires n'est, à priori, pas limité. La section [plages_interdites] contient les plages interdites à la réservation, les plages horaires sont désignées par leur numéro d'ordre (à partir de 1 et non de 0!) séparées par une virgule. Les jours normaux sont laissés vides mais ne doivent pas être supprimés. Le script attend les jours dans l'ordre naturel, ne modifiez pas cet ordre. [plages_interdites] lundi= mardi= mercredi=5,6,7,8 Les sections [debut_vacances] et [fin_vacances] contiennent les jours de début et de fin de vacances. Pour une journée isolée, la date de début et de fin sont identiques. Les étiquettes ont un nom quelconque mais doivent être dans le même ordre dans les deux sections. Cet ordre n'est pas nécessairement l'ordre chronologique. Le format de date est j/m/yyyy sans zéro éventuel - par exemple 23/5/2004 pour le 23 mai 2004. [debut_vacances] hiver=22/2/2004 vendsaint=9/4/2004 [fin_vacances] hiver=7/3/2004 vendsaint=9/4/2004 Interface utilisateur : La plupart des messages affichés par le script sont définis sous forme de constantes dans le fichier conf.inc.php. Adaptez-les à votre convenance. Par exemple : define ("TITRE_NAVIGATEUR", "Réservation de la salle 114"); define ("MESS_LOGIN", "Veuillez vous identifier"); define ("TITRE_PAGE", "Réservation de la salle informatique"); Hop-là! Le script est entièrement fonctionnel. Félicitations.
Configuration Cette partie décrit l'installation et la configuration «avancée» de PhpMyResa. Elle demande quelques notions de Php et MySql. PhpMyResa est prévu pour s'intégrer dans un site web dynamique ou un intranet existant. Si vous disposez déjà d'une table d'utilisateurs, l'adaptation devrait être assez facile. La configuration de PhpMyResa se fait via le fichier conf.inc.php. La ligne define ("TABLE_USERS", "profs"); permet de modifier le nom de la table contenant les utilisateurs du site. Cela peut devenir, par exemple : La ligne define ("TABLE_USERS", "users"); define ("TABLE_RESA", "salle_info"); permet quant à elle de modifier le nom de la table contenant les réservations. Les lignes define ("CHAMP_USER_LOGIN", "login"); define ("CHAMP_USER_PWD", "passe"); define ("CHAMP_USER_NOM", "nom"); define ("CHAMP_USER_GROUPE", "groupe"); contiennent les noms des différents champs à utiliser. À priori, tous ces champs devraient se trouver dans votre table d'utilisateurs, mais éventuellement sous un autre nom. Cela pourrait donner, si bon vous semble : define ("CHAMP_USER_LOGIN", "identifiant"); define ("CHAMP_USER_PWD", "password"); define ("CHAMP_USER_NOM", "utilisateur"); define ("CHAMP_USER_GROUPE", "groupe"); PhpMyResa suppose l'existence de deux groupes d'utilisateurs : les enseignants et les administrateurs. Ils sont différenciés par le champ CHAMP_USER_GROUPE qui peut prendre l'une des deux valeurs définies par les lignes : define ("STR_GROUPE_ADMIN", "admin"); define ("STR_GROUPE_PROF", "prof"); Si certains utilisateurs sont enregistrés sous un autre groupe (par exemple eleve), ils ne pourront pas accéder à la page de réservation. Si votre système utilise d'autres chaînes de caractères pour l'identification des groupes, ces dernières lignes sont à modifier. L'utilisation de valeurs numériques est également possible (sans guillemets) : define ("STR_GROUPE_ADMIN", 2); define ("STR_GROUPE_PROF", 1); Dans la table des utilisateurs, les mots de passes ne sont pas cryptés par défaut. Si chez vous c'est le cas (et c'est une bonne chose), la ligne $passe = $_POST['passe']; du fichier auth.php doit être modifiée. Par exemple dans le cas d'un codage par md5() : $passe = md5($_post['passe']); L'identification des utilisateurs fait appel aux sessions de php4. L'intégration dans un autre système d'identification nécessitera probablement la réécriture d'une partie du code php. Bon courage...
Feuille de style L'aspect de la page de réservation est gouverné par la feuille de style style.css qui doit se trouver dans le même répertoire que reservation.php. Pour une modification complète de cette feuille de style, je vous laisse vous référer à votre documentation CSS favorite (par exemple : CSS précis et concis par Eric A. Meyer aux éditions O'Reilly) Le script produit du code HTML comportant quelques identifiants particuliers : <div id="navig"> identifie la partie «navigation» de la page de réservation <div id="page_resa"> identifie la partie principale de la page de réservation <table id="resa"> tableau de réservation <td class="sem_cour"> met en évidence la semaine courante dans le menu de navigation <td class="libre"> correspond aux plages libres <td class="reserve"> correspond aux plages réservées <td class="interdit"> correspond aux plages interdites <td class="maintenance"> correspond aux plages réservées par le PRI pour maintenance À chaque identifiant correspond une entrée du fichier style.css. Pour modifier, par exemple, l'aspect des plages libres, on modifiera la feuille de style en : td.reserve{ background-color: #FAB8AF; color: #ABF510; text-align: right; font-weight: bold; font-style: italic width: 100px; height: 45px;} Ce qui aura pour sublime effet de colorer les plages libres en un très joli rose, le texte vert aligné à droite, en gras et italique... Libre à vous de faire l'interface graphique que vous souhaitez...
Adapter le script Mettons un peu les mains dans le cambouis... Imaginez-vous en PRI à la tête, non pas d'une, mais de deux salles informatiques pouvant être réservées indépendamment. Deux solutions s'offrent à vous : deux pages indépendantes (et un peu bricolées) ou les deux tableaux de réservations sur une même page (avec les mêmes bricolages). Dans les deux cas, un certain nombre d'éléments sont à doubler comme la table de réservation. Dans l'exemple qui suit, les éléments dupliqués seront renommés avec un 2. Rien ne vous empêche de trouver un nom plus explicite. Dans conf.inc.php, ajoutez une ligne : define ("TABLE_RESA2", "salle_info2"); sur le modèle de : define ("TABLE_RESA", "salle_info"); et créez une nouvelle base nommée salle_info2 ayant la même structure que salle_info. Pour cela, PhpMyAdmin propose une commande «Copier la table vers...» Le script de réservation resa.php doit lui aussi être doublé en resa2.php. Dans ce nouveau fichier, toutes les occurrences de TABLE_RESA doivent être transformées en TABLE_RESA2 (il y en 4). Par exemple, ligne 35 : $requete = sprintf("insert INTO %s (%s, %s, %s, %s, %s) VALUES ('%s', '%s', '%s', '%s', '%s')", TABLE_RESA2, Il faut à présent doubler le tableau de réservation, soit en dupliquant le fichier reservation.php soit en intégrant deux tableaux dans un seul fichier. C'est cette dernière possibilité qui est exploitée ici. Dans le fichier reservation.php, il faut copier toute la partie comprise entre les lignes 214 et 282 et la coller en dessous. // TRACE DU TABLEAU... $requete = sprintf("select * FROM %s WHERE %s >= '%s' AND echo "</tr>\n</table>\n"; Là aussi, la constante TABLE_RESA doit être modifiée en TABLE_RESA2 dans la ligne $requete = sprintf(... Toutes les lignes créant les liens avec le script resa.php doivent être transformées en resa2.php. Il y en a 3 à modifier. printf("<a href=\"resa2.php?date=%s Pour une meilleure présentation, un titre supplémentaire peut être ajouté avant chaque tableau : echo "<h3>salle 114</h3>"; echo "<h3>salle 214</h3>"; Si vous avez pris le parti de créer deux pages distinctes, un lien entre les deux pages devrait être le bienvenu : echo "<a href=\"reservation2.php\">réservation de la salle 214</a>"; À vous de jouer et d'ajouter les tableaux de réservation pour vos trois vidéoprojecteurs et vos quatre ordinateurs portables.