Installation phpMyConferences - Ian`s Web Page

Transcription

Installation phpMyConferences - Ian`s Web Page
Installation phpMyConferences
Y. Morère
Janvier 2006
Résumé
Cet article a pour but de présenter l’installation du Logiciel phpMyConferences :
phpMyConferences est un outil intuitif de gestion de conférences. Il est developpé par
l’équipe Sedre (Soutien en Développement pour la Recherche) http://sedre.loria.fr/.
L’intérêt principal de cet outil est qu’il sépare complètement la partie présentation de
la conférence (Les pages web regroupant les informations de la conférence : présentation,
comités, appel à communication etc..) de la partie gestion des communications (soumission,
relecture, acceptation etc...). La distribution choisie pour l’installation est une Gentoo.
Mais tout autre distribution Linux fait l’affaire, il suffit d’installer le trio Apache/PHP/Mysql
ainsi qu’un gestionnaire d’envoi de courrier électronique.
Table des matières
1 Introduction
1.1 Prérequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Fonctionnalités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3 Informations d’administration . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2 Installation
2.1 Installation Mysql . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Installation Apache et PHP . . . . . . . . . . . . . . . . . . . . . . .
2.3 PhpMyAdmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.4 Installation ssmtp . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5 Préparation de la base de données . . . . . . . . . . . . . . . . . . . .
2.5.1 Création d’un nouvelle base . . . . . . . . . . . . . . . . . . .
2.5.2 Ajout d’un utilisateur de base de données (autre que root) . .
2.5.3 Configuration des droits du nouvel utilisateur sur la base créée
2.5.4 Essai connexion nouvel utilisateur . . . . . . . . . . . . . . . .
2.6 Installation phpMyConferences . . . . . . . . . . . . . . . . . . . . .
3 Configuration et
3.1 Configuration
3.2 Configuration
3.3 Configuration
3.4 Configuration
utilisation phpMyConferences
des informations générales . . . . . . . . . . .
des options d’envoi d’email . . . . . . . . . . .
du contrôle d’accès . . . . . . . . . . . . . . .
des options de soumission des communications
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2
2
2
3
.
.
.
.
.
.
.
.
.
.
4
4
5
7
9
10
10
14
15
17
19
.
.
.
.
25
26
27
30
32
Documentation phpMyConferences Version 0.1
3.5
3.6
3.7
3.8
3.9
3.10
3.11
Configuration des options d’évaluation des soumissions
Configuration des informations des éventuels ateliers .
Configuration des informations pour les inscriptions .
Configuration et édition des listes, badges et étiquettes
Gestion du site web . . . . . . . . . . . . . . . . . . . .
Surveillance, sauvegarde et statistiques . . . . . . . . .
Messagerie interne au site . . . . . . . . . . . . . . . .
2
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
35
38
39
47
50
58
63
4 Correction de Bugs en Vrac pour la version 8.0.2
64
5 conclusion
82
1
Introduction
Le logiciel phpMyConferences est un outil intuitif de gestion de conférences. Il est developpé
par l’équipe Sedre (Soutien en Développement pour la Recherche) http://sedre.loria.fr/.
L’intérêt principal de cet outil est qu’il sépare complètement la partie présentation de la
conférence (Les pages web regroupant les informations de la conférence : présentation, comités,
appel à communication etc..) de la partie gestion des communications (soumission, relecture,
acceptation etc...).
Nous allons voir la configuration globale de phpMyconferences, en partant d’un système sans
Apache, ni Php, ni mysql. En effet le logiciel a besoin de ce trio pour fonctionner.
Puis nous installerons le logiciel et verrons comment l’utiliser.
1.1
Prérequis
B La version de php doit être PHP4 ou PHP5 (4.3.0 minimum à cause de la fonction get_file_contents).
Nous verrons comment modifier le code si vous avez une version antérieur de PHP et que
vous ne pouvez pas la mettre à jour (Cf : correction de bugs en vrac). De plus PHP doit être
compilé avec le support MySQL. N’oublier pas le support GD si vous voulez des graphiques
pour la partie statistique du site.
B Les versions de MySQL testées sont les suivantes : 3.21.x, 3.22.x, 3.23.x, 4.0.x et 4.1.x.
B Un navigateur
B un système de mailling automatique (au moins un client mail qui doit pouvoir relayer au
serveur mail de votre FAI ou Université). Ceci nécessite une bonne configuration de la ligne
SMTP du fichier php.ini. Sur les distributions que j’ai testée (gentoo et debian j’ai juste
eu à configurer le client SMTP)
B modifier la taille maximale (MAX_FILE_SIZE) dans le fichier php.ini des fichiers téléchargeable
afin que les utilisateurs ne soient pas bloqués par un taille de fichier trop petite.
B La version d’apache est peu importante, cela fonctionne sur apache1.3 et apache2.
1.2
Fonctionnalités
B Gestion de l’évènement
. Titre, lieu
. Dates, date d’inscription, date de soumission, date de relecture
B Gestion des papiers :
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
B
B
B
B
B
B
B
B
B
3
. Soumission des papiers
. Choix des formats de papier électronique
. Droits de visualisation
. Association papier-relecteur
. Acceptation/rejet des papiers => mél automatique
. 6 Critères d’évaluation plus commentaire
Gestion des utilisateurs :
. 3 groupes avec des droits différents :
. Administrateur, Comité de programmes : gestion de la conférence
. Relecteurs : accès uniquement aux papiers soumis
. Identification basée sur l’adresse mél des utilisateurs
Gestion des ateliers :
. Date, heures, responsable, description, URL.
Gestion des inscriptions :
. Catégorie des participants paramétrable
. Suivi des inscriptions, paiement, documents requis
. Facturation, modes de paiement paramétrables
. Génération automatique du formulaire d’inscription avec les options dépendante de la
catégorie
Gestion des hébergements :
. Type, association catégorie de participant/logements
. Nombre de place, suivi du remplissage
Gestion des évènements externes :
. Visites, repas, etc.
. Nombre d’évènements illimités définis par l’utilisateur.
Gestion du courrier éléctronique :
. 7 méls automatiques paramétrables par l’interface administrateur.
. Envoi de messages par groupes d’utilisateur.
Création de listes :
. Listes paramétrables par interrogation SQL de la base de données.
. Sortie des listes sous forme PDF ou HTML.
. Génération automatique des badges des participants en PDF.
. Création des planches d’étiquettes pour les publipostages.
Divers :
. Statistiques d’accès au site Web et aux papiers
. Sauvegarde automatique de la base de données
. Accès sécurisé par phpSecurePages
Avantages concurrentiels :
. Toute la gestion de la conférence se fait par l’interface Web,aucun script à paramétrer.
. Pas de CGI-BIN, le site Web de la conférence et la gestion sont dans le même répertoire.
. Interface administrateur multilingue (en cours d’implémentation).
1.3
Informations d’administration
B Le logiciel est entièrement écrit en PHP et stocke toutes les informations relatives à la
conférence dans une base de données MySQL.
B L’installation par l’administarteur du serveur Web est réduite au plus simple : création
d’un compte MySQL et d’une base de données Tout le reste se fait par phpMyConferences,
création des tables y compris, à condition que l’on puisse créer les tables via le Web.
B Pour l’utilisateur/administrateur de la conférence, l’installation consiste à désarchiver le
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
4
paquetage du logiciel à la racine du répertoire de la conférence.
B Le premier accès à la racine du site demande les paramètres d’accès à mySql, crée les tables
et un fichier de configuration en PHP avec les infos sur le serveur MySQL.
B La partie publique du site (présentation, comités, appel à communication etc..) n’est pas
écrite dans phpMyConferences. La présentation de la conférence doit être réalisée à part et
placée dans un répertoire du site de la conférence variable/siteweb. Cela permet de ne
pas être tributaire d’une présentation figée par les auteurs du logiciels. Les fonctionnalités
de phpMyConferences seront utilisable par l’intermédiaire de simples liens dans les pages
que vous aurez créées.
2
2.1
Installation
Installation Mysql
Avec gentoo, c’est assez simple. Il s’agit de bien configurer la variable USE de votre fichier
make.conf et d’utiliser la commande emerge.
USE="mmx mmxext sse 3dnowext apache2 esd ffmpeg network nsplugin v4l
win32codecs xine gtk gtk2 gnome cdparanoia bash-completion cups encode
foomaticdb glut ftp imagemagick ipv6 lesstif mysql nls spell eds opengl
pam xv type1-fonts bitmap-fonts truetype-fonts ogg oggvorbis ssl threads
readline foomaticdb gif png jpeg quicktime xml2 sdl java crypt pdflib
berkdb
mpeg truetype dvd alsa cdr gnome hal howl mikmod -arts -kde -ldap -qt "
est un bon début puis
# emerge mysql
Après quelques minutes (tout depend de votre machine), mysql est installé sur votre machine.
On va configurer pour que le serveur se lance au démarrage :
# rc-update add mysql default
puis on installe effectivement les bases de données par défaut :
# /usr/bin/mysql_install_db
et finalement on lance le serveur pour ne pas avoir à rebooter la machine.
# /etc/init.d/mysql start
On vient ensuite configurer l’administrateur des bases de données qui aura pour login root
(mais il ne s’agit pas du compte administrateur Unix, ici c’est le DBA database administrator).
Un nom plus approprié serait effectivement plus judicieux. Ici pas besoin d’être l’administrateur
Unix.
$ /usr/bin/mysqladmin -u root password ’mot_de_passe’
puis on teste la connexion :
$ mysql -u root -p
On s’arrête là pour l’instant au niveau de la base de données.
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
2.2
5
Installation Apache et PHP
Grâce à la gestion des dépendances sous gentoo, nous allons installer un seul paquet qui imposera
l’installation du serveur web apache et de php4.
# emerge mod_php
Une fois le tout compilé et installé, il faut modifier quelques fichiers de configuration.
Dans un premier temps, il faut dire à apache qu’il doit charger la module PHP. Ceci se passe
dans le fichier /etc/conf.d/apache2
# vim /etc/conf.d/apache2
// faire la modification suivante
APACHE2_OPTS="-D DEFAULT_VHOST -D SSL -D PHP4"
Om modifie ensuite le fichier /etc/apache2/modules.d/70_mod_php.conf
# vim /etc/apache2/modules.d/70_mod_php.conf
<IfDefine PHP4>
# Load the module first
<IfModule !sapi_apache2.c>
LoadModule php4_module
</IfModule>
modules/libphp4.so
# Set it to handle the files
<IfModule mod_mime.c>
AddType application/x-httpd-php .php
AddType application/x-httpd-php .phtml
AddType application/x-httpd-php .php3
AddType application/x-httpd-php .php4
AddType application/x-httpd-php-source .phps
</IfModule>
AddDirectoryIndex index.php index.phtml
</IfDefine>
# Fix some bugs
<Files *.php>
# keep this the same size as post_max_size in php.ini
LimitRequestBody 8388608
</Files>
<Files *.phps>
# keep this the same size as post_max_size in php.ini
LimitRequestBody 8388608
</Files>
On va modifier la variable upload_max_filesize
# vim /etc/php/apache2-php4/php.ini
;;;;;;;;;;;;;;;;
; File Uploads ;
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
6
;;;;;;;;;;;;;;;;
; Whether to allow HTTP file uploads.
file_uploads = On
; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
;upload_tmp_dir =
; Maximum allowed size for uploaded files.
upload_max_filesize = 2M
; modifier ici pour avoir la taille max que vous désirez
Afin d’éviter les erreurs du type
Warning: xxx: URL file-access is disabled in the server configuration
in yyy on line zz
Il faut modifier une variable dans php.ini. Cette erreur est dûe à une désactivation de la
directive allow_url_fopen contenue dans le fichier de configuration php.ini. La désactivation
de cette directive est généralement réalisée par mesure de sécurité.
;;;;;;;;;;;;;;;;;;
; Fopen wrappers ;
;;;;;;;;;;;;;;;;;;
; Whether to allow the treatment of URLs (like http:// or ftp://) as files.
; allow_url_fopen = On
; Closed for security - <[email protected]>
allow_url_fopen = On
puis on lance apache2 et on configure pour qu’il se lance au démarrage.
rc-update add apache2 default
/etc/init.d/apache2 start
Si lors du démarrage du serveur apache vous avez l’erreur suivante :
httpd: Could not determine the server’s fully qualified domain name,
using 127.0.0.1 for ServerName
modifiez le fichier httpd.conf et ajouter la ligne suivante :
ServerName localhost
Voilà, normalement tout est opérationnel pour l’installation de phpMyConferences.
Un dernier test pour voir si le module PHP est activé :
vim /var/www/localhost/htdocs/test.php
<?
phpinfo();
?>
puis à l’aide d’un navigateur aller à l’adresse http://localhost/test.php et là vous devriez
avoir un tableau résumant la configuration de PHP sur votre serveur.
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
2.3
7
PhpMyAdmin
Afin de na pas avoir à écrire les commandes SQL pour la création de la base de donnée relative
à la conférence, nous allons installer phpMyAdmin, qui va nous permettre par l’intermédiaire
de notre navigateur de réaliser graphiquement toues les actions nécessaires à la mise en place
de la base pour la conférence.
La commande suivante permet d’installer phpmyadmin :
emerge phpmyadmin
Ensuite nous allons configurer le fichier conf.inc.php afin que notre administrateur root des
bases de données puisse utiliser phpmyadmin. On va aussi utiliser la configuration cookie.
Commencer par copier le fichier config.default.php vers config.inc.php puis éditez le
comme suit :
//$cfg[’Servers’][$i][’controluser’]
= ’pma’;
// MySQL control user settings
// (this user must have read-only
//$cfg[’Servers’][$i][’controlpass’]
= ’1593922121604117530’;
// access to the "mysql/user"
$cfg[’Servers’][$i][’controluser’]
= ’root’;
// MySQL control user settings
// (this user must have read-only
$cfg[’Servers’][$i][’controlpass’]
= ’mot_de_passe’;
// access to the "mysql/user"
// and "mysql/db" tables).
// and "mysql/db" tables).
// The controluser is also
// used for all relational
// features (pmadb)
$cfg[’Servers’][$i][’auth_type’]
= ’cookie’;
// Authentication method (config, http or cookie based)?
et voilà en allant à l’adresse suivante http://localhost/phpmyadmin vous devriez avoir la
page suivante.
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
8
Il ne vous reste plus qu’à entrer le login root et le mot de passe choisis et vous pouvez utiliser
phpmyadmin.
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
2.4
9
Installation ssmtp
Nous allons configurer notre SMTP afin qu’il utilise le serveur mail de notre FAI ou celui de
notre université (le plus simple). Pas besoin de transformer votre machine en serveur de courrier.
Installez, ssmtp par la commande :
# emerge ssmtp
puis nous allons configurer SMTP pour qu’il fasse du ”relaying” sur le serveur mail de notre
FAI ou université/société.
# vim /etc/ssmtp/ssmtp.conf
#
# /etc/ssmtp.conf -- a config file for sSMTP sendmail.
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=postmaster
# The place where the mail goes. The actual machine name is required
# no MX records are consulted. Commonly mailhosts are named mail.domain.com
# The example will fit if you are in domain.com and your mailhub is so named.
#mailhub=mail
# Example for SMTP port number 2525
# mailhub=mail.your.domain:2525
# Example for SMTP port number 25 (Standard/RFC)
# serveur smtp du FAI/Université pour le "relaying"
mailhub=smtp.wanadoo.fr
# Example for SSL encrypted connection
# mailhub=mail.your.domain:465
# Where will the mail seem to come from?
rewriteDomain=athome.org
# cette option doit ^
etre remplie sinon sendmail refuse d’envoyer le mail
# The full hostname
# Gentoo bug #47562
# Commenting the following line will force ssmtp to figure
# out the hostname itself.
#hostname=biboo
# Set this to never rewrite the "From:" line (unless not given) and to
# use that address in the "from line" of the envelope.
FromLineOverride=YES
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
10
# Use SSL/TLS to send secure messages to server.
#UseTLS=YES
# Use SSL/TLS certificate to authenticate against smtp host.
#UseTLSCert=YES
# Use this RSA certificate.
#TLSCert=/etc/ssl/certs/ssmtp.pem
Ensuite on peux essayer d’envoyer un mail par la commande :
sendmail votre_adresse_mail@votre_domaine
test
test
CTRL-D
Normalement vous devez recevoir le mail (si vous avez indiqué votre adresse ;-)).
2.5
Préparation de la base de données
Avant d’installer phpMyConferences, il est nécessaire de créer une base de données sur Mysql et
de donner les droits nécessaires à l’utilisateur qui va gérer la conférence (utilisateur différent du
DBA : database administrator, pour des questions de sécurité). Il est possible que vous n’ayez
pas les droits nécessaires pour réaliser ces opérations si vous n’êtes pas l’administrateur de la
machine sur laquelle se trouvera le site de votre conférence.
Dans ce cas, il faut demander à votre adminitrateur système de vous créer tout cela.
Si vous êtes administrateur de la machine, voici la marche à suivre en image à l’aide de
phpmyadmin.
1. Création de la base de données de la conférence par le DBA ;
2. Création de l’utilisateur de la base de donnée de la conférence par l’administrateur ;
3. Modification des droits d’accès sur la base de la conférence pour la gestion par l’utilisateur
de la base de données de la conférence.
2.5.1
Création d’un nouvelle base
Dans un premier temps connectez vous à l’adresse suivante afin d’utiliser phpmyadmin http:
//localhost/phpmyadmin vous devriez avoir la page suivante.
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
11
Il ne vous reste plus qu’à entrer le login root (DBA) et le mot de passe choisi et vous pouvez
utiliser phpmyadmin.
Vous arrivez alors sur la page suivante. Vous devez saisir le nom de la base de données qui
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
12
contiendra les données de la conférence dans le champs prévu à cette effet Créer une base de
données, puis appuyez sur le bouton Créer.
Vous obtenez la page suivante :
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
13
Il est bien sur possible de tout faire en mode console si vous avez un accès Terminal, ou que
phpmyadmin n’est pas installé sur votre serveur.
yann@biboo ~ $ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 4.1.14-log
Type ’help;’ or ’\h’ for help. Type ’\c’ to clear the buffer.
mysql> show databases;
+------------+
| Database
|
+------------+
| mysql
|
| test
|
+------------+
3 rows in set (0.15 sec)
mysql>CREATE DATABASE ‘conference‘ ;
mysql> show databases;
+------------+
| Database
|
+------------+
| conference |
| mysql
|
| test
|
+------------+
3 rows in set (0.15 sec)
mysql>
Nous allons ensuite ajouter un utilisateur. Pour l’instant séléctionnez la base que vous venez
de créer dans le menu déroulant en haut à gauche comme montré dans la figure suivante.
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
2.5.2
14
Ajout d’un utilisateur de base de données (autre que root)
Dans un premier temps cliquez sur la petite maison en haut à gauche (Accueil), qui vous permet
de revenir sur les fonctionnalités principales de phpmyadmin.
Cliquez sur le lien Privilèges. Vous obtenez la figure suivante :
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
15
Entrez les informations concernant votre nouvel utilisateur. Pour l’instant ne rentrez aucuns
privilèges globaux. Finalement cliquez sur exécuter.
La même chose en version console :
mysql> \u mysql
mysql> GRANT USAGE ON * . * TO ’conference’@’localhost’ IDENTIFIED BY ’****’
WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 ;
2.5.3
Configuration des droits du nouvel utilisateur sur la base créée
Nous allons donnez des privilèges supplémentaires au nouvel utilisateur sur la base de la
conférence. Pour cela sélectionnez la base de votre conférence dans la partie Privilèges
spécifiques à une base de données.
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
16
Vous obtenez la page suivante :
Cochez alors les privilèges désirés. Dans notre cas, comme il s’agit de l’administrateur de la
conférence, nous allons sélectionner tous les droits sur les données et la structure de la base.
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
17
En mode console cela donne la chose suivante :
mysql> GRANT SELECT , INSERT , UPDATE , DELETE , CREATE , DROP , INDEX ,
ALTER , CREATE TEMPORARY TABLES ON ‘conference‘ . * TO ’toto’@’localhost’;
Normalement vous avez un nouvel utilisateur qui se possède les droits pour être administrateur
de votre conférence. Pour terminer la préparation à l’installation de phpMyConferences, nous
allons essayer de nous connecter à phpMyadmin avec le nouvel utilisateur.
2.5.4
Essai connexion nouvel utilisateur
Dans un premier temps déconnectez vous de phpMyadmin, puis retentez une connexion avec le
login et mot de passe de l’administrateur de la conférence.
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
18
Voila on y est presque.
Vous êtes maintenant connecté en tant qu’administrateur de la base de données de la conférence.
C’est donc ce compte qu’il faudra utiliser lors de l’installation de phpMyConferences.
Voici ce que cela donne en mode console :
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
19
yann@biboo ~ $ mysql -u conference -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 53 to server version: 4.1.14-log
Type ’help;’ or ’\h’ for help. Type ’\c’ to clear the buffer.
mysql> show databases;
+------------+
| Database
|
+------------+
| conference |
| test
|
+------------+
2 rows in set (0.00 sec)
mysql>
On remarque que l’on a accès qu’à la base publique (test) et la base conference. La base
mysql est cachée, seulement utilisable par l’administrateur de mysql.
Nous pouvons donc passer à l’installation de phpMyConferences.
2.6
Installation phpMyConferences
Dans un premier temps, vérifier que :
B Si vous êtes administrateur de votre système :
1. vous possédez un login et mot de passe pour l’utilisation de mysql
2. le nom de la base de données qui sera utilisée pour la conférence
B Si vous n’êtes pas administrateur de la machine d’hébergement
1. que vous y possédez un compte pour déposer vos fichiers et les scripts de phpMyConferences
2. que l’administrateur vous y a créé un compte mysql et une base pour le bon fonctionnement
de phpMyConferences.
Voilà, c’est parti ; on va commencer par télécharger l’archive de phpMyConferences sur le site
http://sedre.loria.fr/phpMyConferences/ à la page download http://sedre.loria.fr/
phpMyConferences/download.html.
Si vous êtes administrateur de la machine d’hébergement vous devez créer un répertoire qui
contiendra tous les fichiers du site de la conférence. Ensuite il suffit de décompresser l’archive
et de déplacer ou copier son contenu à l’endroit choisi.
biboo yann # cd /var/www/localhost/
cgi-bin/ error/
htdocs/ icons/
.keep
biboo yann # cd /var/www/localhost/htdocs/
biboo htdocs # ls
apache_pb2.gif apache_pb.gif index.html phpmyadmin testing.php
biboo htdocs # mkdir conference
biboo htdocs #
biboo htdocs # cp /home/yann/sources/phpMyConferences_8.0.2.tgz .
biboo htdocs # tar xzf phpMyConferences_8.0.2.tgz
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
20
biboo htdocs # ls
apache_pb2.gif conference phpmyadmin
phpMyConferences_8.0.2.tgz
apache_pb.gif
index.html phpMyConferences_8.0.2 testing.php
biboo htdocs #
biboo htdocs # mv phpMyConferences_8.0.2/* conference/
biboo htdocs # ls
apache_pb2.gif conference phpmyadmin
testing.php
apache_pb.gif
index.html phpMyConferences_8.0.2.tgz
biboo htdocs #
Ensuite changer les droits du répertoire de la conférence pour que l’utilisateur ”Serveur Web”
soit propriétaire de l’arborescence. Vous pouvez connaitre l’utilisateur sous lequel est labncé le
serveur web par les commandes suivantes :
biboo htdocs # more /etc/apache2/httpd.conf | grep "User "
# Processor - Specify a User and Group for a specific child process.
# . On SCO (ODT 3) use "User nouser" and "Group nogroup".
User apache
biboo htdocs # more /etc/apache2/httpd.conf | grep "Group "
# Processor - Specify a User and Group for a specific child process.
# . On SCO (ODT 3) use "User nouser" and "Group nogroup".
# when the value of (unsigned)Group is above 60000;
# don’t use Group #-1 on these systems!
Group apache
biboo htdocs #
On attribue ensuite ce répertoire à l’utilisateur ”apache”. Pourquoi ? Parce que ... lorsque les
scripts php seront exécutés, ils le seront par le serveur web qui n’est autre qu’”apache”.
Si vous n’êtes pas l’administrateur de votre machine, téléchargez tout le contenu de l’archive
décompressée sur votre compte de la machine d’hébergement.
Ensuite il est nécessaire de fixer des droits d’accès à certains répertoires et fichiers pour le bon
fonctionnement des scripts.
Si vous êtes administrateur de la machine d’hébergement lancer simplement le script d’installation
install.sh qui suit :
#!/bin/sh
echo
echo
echo
echo
echo
echo
echo
"************************************";
"*
*";
"*
phpMyConferences
*";
"*
*";
"*
Linux/Unix Install
*";
"*
*";
"************************************";
# Backup conf.php if it is present
if test -f conf.php; then
cp conf.php conf.php.bak
fi
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
21
# Set conf.php to an empty file
cp conf.php.default conf.php
# Set conf.php to be writable
chmod 777 conf.php
# Some directories need to be writable
chmod -R 777 archive
chmod -R 777 temp
chmod -R 777 user
chmod -R 777 variable
chmod -R 777 common/visiteurs/include/caches
echo
echo
echo
echo
echo
echo
echo
"";
"Chmod done, you can launch the installation.";
"";
"Open the file <www.your-host.com>/<your-install-dir>/ in your browser.";
"";
"";
"************************************";
Je pense que le mode ”777” est un peu excessif. Je le changerai en ”664” pour les fichiers et
”775” pour les répertoires ce qui donne :
biboo
biboo
chmod
chmod
chmod
chmod
chmod
chmod
conference # touch conf.php
conference # chmod 664 conf.php
-R 775 archive
-R 775 temp
-R 775 user
-R 775 variable
-R 775 common/visiteurs/include/caches
-R 775 /html/admin/participants/pdf
L’option -R permet de le faire pour tous les sous répertoires.
J’ai rajouté aussi le répertoire /html/admin/participants/pdf pour le téléchargement du logo
lors de la création des étiquettes (mais j’y reviendrai plus tard).
Voilà tout est prêt. Lancer maintenant votre navigateur préféré (firefox, dillo, lynx ;-)). Puis
allez à l’adresse http://localhost/conference/ si vous êtes directement sur la machine
d’hébergement, ou l’adresse que vous a fournit votre administrateur système. Vous obtenez la
fenêtre suivante, qui vous rappelle les prérequis ainsi que les modifications de droits nécessaires.
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
22
Si tout est ok, vous pouvez cliquer sur le lien next, qui va nous amener à la fenêtre de
configuration de phpMyConferences en terme de base de données. C’est la fenêtre suivante :
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
23
Lisez attentivement ce qui est écrit. En effet il faut tout d’abord remplir le formulaire avec les
données de l’administrateur de la conférence :
B Prénom
B Nom
B email qui servira aussi de login pour l’accès à l’interface de gestion de la conférence
B le mot de passe à stocker (en clair ! ! ! pour l’instant dans la base)
B une confirmation de mot de passe
Ensuite viennent les données importantes concernant la base de données où seront stockées
toutes les informations. Comme il est rappellé dans cette page, si le serveur de base de données
n’est pas installé sur la même machine que le serveur Apache, il sera nécessaire de réaliser une
installation manuelle. C’est d’ailleurs le cas pour les FAI comme Free. C’est à dire que vous
devrez utiliser le fichier database.sql qui sera générer par le script d’installation et placé dans
le répertoire archive/backup/ à partir de la racine du répertoire de votre conférence.
Ce fichier ressemble à ceci :
#
# Structure de la table ‘visiteurs‘
#
# Création: Jeudi 24 Juillet 2003 à 16:49
# Dernière modification: Lundi 11 Ao^
ut 2003 à 15:10
#
CREATE TABLE ‘visiteurs‘ (
‘AGENT‘ char(100) default NULL,
‘REFERER‘ char(200) default NULL,
‘ADDR‘ char(50) NOT NULL default ’’,
‘DATE‘ char(20) default NULL,
‘HOST‘ char(100) default NULL,
‘CODE‘ int(11) NOT NULL auto_increment,
‘REF_HOST‘ char(100) default NULL,
PRIMARY KEY (‘CODE‘),
KEY ‘ADDR‘ (‘ADDR‘)
) TYPE=MyISAM AUTO_INCREMENT=2427 ;#%%
#
# Structure de la table ‘workshop‘
#
# Création: Jeudi 24 Juillet 2003 à 16:49
# Dernière modification: Mercredi 06 Ao^
ut 2003 à 15:41
#
CREATE TABLE ‘workshop‘ (
‘id_workshop‘ int(11) NOT NULL auto_increment,
‘name‘ varchar(100) NOT NULL default ’’,
‘reference‘ varchar(50) NOT NULL default ’’,
‘description‘ text NOT NULL,
‘date‘ date NOT NULL default ’0000-00-00’,
‘time‘ varchar(20) NOT NULL default ’’,
‘responsable_name‘ varchar(30) NOT NULL default ’’,
‘responsable_mail‘ varchar(50) NOT NULL default ’’,
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
24
‘URL‘ varchar(90) NOT NULL default ’’,
‘salle‘ varchar(40) default NULL,
PRIMARY KEY (‘id_workshop‘)
) TYPE=MyISAM AUTO_INCREMENT=17 ;#%%
etc.....
Il vous faudra alors installer la base manuellement à l’aide de ce fichier par l’intermédaire de
phpmyadmin et de la commande importer qui vous permet de choisir le fichier contenant les
commandes mysql à exécuter pour la création de la base. Il ne vous reste qu’à choisir le fichier
archive/backup/database.sql et exécuter. En mode console la commande ressemble à ceci :
$ mysql -u conference -p conference < database.sql
Dans le cas où la machine est identique pour le serveur Apache et le serveur Mysql, l’installation
se fait automatiquement.
Il faut alors remplir le champ avec le nom de la base de données, puis le nom de la machine qui
contient serveur Apache et Mysql (dans ce cas localhost la plupart du temps). N’oubliez pas
de remplir votre mot de passe mysql.
Remplissez ensuite Internet Path avec l’adresse du site de votre conférence. Ceci est important
dans la cas de gestion par virtual host. Si vous êtes sur une machine de test et que tout se fait
en local, localhost/conference/ suffit. Normalement la variable Server Path est remplie
automatiquement.
Voila il ne vous reste plus qu’à cliquer sur Valider dans la cas d’une installation automatique
et Création du script dans le cas d’une installation manuelle.
Si tout se passe bien dans la cas de la configuration automatique, vous obtenez la page de
connexion à phpMyConferences, sinon, la page d’installation réapparait avec des messages
d’erreurs en fin de page.
Vous devrez alors analyser ces messages afin de voir ce qui ne va pas, corriger et valider à
nouveau.
Les données sont inscrites dans le fichier conf.php. En voici un exemple :
<?php
/****************************************
*
phpMyConferences * *
*
Configuration file * *
*****************************************/
define("SQL_SERVEUR","localhost");
define("SQL_USER","conference");
define("SQL_PASSWD","mot_de_passe");
define("SQL_BDD","conference");
//Never change the value of KEY
define("KEY",’OS3’);
define("ROOT_URL","http://localhost/conference");
define("VERSION","beta 8.0.2");
define("TAILLE","50");
define("ROOT_DIR_PATH","/var/www/localhost/htdocs/conference/");
?>
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
25
Si vous voyez qu’une variable n’est pas correcte, modifiez là et réessayer l’adresse de votre
conférence.
Voilà, maintenant phpMyConferences est installé, nous allons voir comment l’utiliser au mieux.
3
Configuration et utilisation phpMyConferences
Connectez vous à l’adresse du site de votre conférence, par exemple http://localhost/conference/.
Vous devez voir apparaı̂tre une fenêtre de connexion comme suit :
Entrez l’adresse email de l’administrateur de la conférence (en fait le super_administrateur
lorsque vous avez réalisé l’installation), puis le mot de passe.
Cliquez sur la ”checkmark” verte ou appuyez sur entrée, vous devez obtenir la page suivante :
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
3.1
26
Configuration des informations générales
Voilà, nous sommes maintenant l’administrateur du site de la conférence. Nous nous occuperons
ici uniquement de la configuration de la partie gestion de la conférence. La partie publique,
composée de pages web statiques présentant votre conférence, n’est pas abordée ici. Mais vous
avez juste à créer quelques pages HTML, qui contiendront des liens vers les fonctionnalités de
phpMyConferences :
B la soumissions d’articles : Proposer un article
B les inscriptions à la conférence : Registration
B les différents ateliers proposés lors de la conférence : Ateliers proposés
B l’accès aux relecteurs : Accès relecteurs
B l’accès administrateur : Accès administrateur
Sur la page courante, vous renseignerez les champs concernant la conférence avec les dates
principales :
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
3.2
27
Configuration des options d’envoi d’email
Avant de commencer à inscrire les personnes des comités et relecteurs, il est nécessaire de
configurer les options des emails. En effet, lors de l’inscription des personnes, des emails sont
envoyés automatiquement. Si vous ne configurez pas les options de ces emails, ce sont les valeurs
par défaut qui seront prises en comptes.
Pour cela allez sur l’onglet e-mail puis lien options. Vous avez alors accès à différents champs
pré-remplis qu’il vous faudra modifier pour votre utilisation.
Attention : Ne pas oublier de sauver le champ juste après sa modification sous peine la perdre.
Toutes ces informations sont stockées dans le répertoire variable/file de phpMyConferences
et non dans la base de données (j’en ai d’ailleurs fais les frais lors d’une migration de version 7
vers une cersion 8).
Voici quelques exemples de configuration en images.
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
Y. Morère
28
L.A.S.C.
Documentation phpMyConferences Version 0.1
Y. Morère
29
L.A.S.C.
Documentation phpMyConferences Version 0.1
30
La partie envoi de ce même onglet permet l’envoi au coup par coup d’email par l’intermédaire
de l’interface de phpMyConferences. Cette partie possède la particularité de pouvoir envoyer
un email à une série de personne. Par exemple ”tous les relecteurs, tous les auteurs de papiers
etc...”. Pour l’instant cette liste est prédéfinie et non configurable.
3.3
Configuration du contrôle d’accès
Nous passons maintenant à la partie contrôle d’accès, qui va permettre de donner différents
droits aux personnes qui gèrent la conférence. Nous avons 3 types de droits d’accès :
B les Super-Utilisateurs qui possèdent tous les droits de gestion de la conférence ;
B Le personnes du comités de programmes qui ont accès à la gestion de la conférence. Seuls
les onglets contr^
ole d’accès, Site Web et Administration ne leurs sont pas accessibles.
Pour le reste ils possèdent les mêmes droits que les administrateurs. Leurs tâches principales
sera d’administrer les relectures des communications.
B Les relecteurs qui ont un accès privilégié pour la relecture et notation des communications
qui leur ont été affectées par les personnes du comité de programme et les super-utilisateurs
Dans un premier temps il s’agit d’inscrire chaque personne dans la bonne classe. Chaque fois
qu’une personne est inscrite elle reçoit un email.
S’il s’agit d’utilisateur avec un certain pouvoir (l’une des 3 classes précédentes), ils seront convier
à se connecter sur le site pour renseigner des informations personnelles ainsi qu’un mot de passe
de connexion.
Voici quelques exemples de création d’utilisateurs :
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
Y. Morère
31
L.A.S.C.
Documentation phpMyConferences Version 0.1
3.4
32
Configuration des options de soumission des communications
Nous allons maintenant voir les onglets dans l’ordre, en commançant par l’onglet papier. Nous
allons voir la configuration des options de soumission des communications.
Dans l’onglet options, nous renseignerons les formats de fichiers acceptés en relecture pour la
conférence, dans les champs extentions et type. La date de soumission est automatiquement
récupérée du premier onglet de configuration de la conférence. ensuite il est possible de choisir
le type d’accès à la liste des communications soumises. Je vous conseille de laisser l’option
choisie par défaut Les relecteurs ont accès seulement aux papiers qui leur ont été
assignés.
Ensuite libre à vous d’afficher ou non les auteurs des communications aux relecteurs. Ceci n’est
utile que si vous avez demandé une soumission d’article dans un format sans auteur (sinon les
auteurs sont dans le titre de la publication).
Vous avez ensuite accès à la liste des communications soumises grâce au lien liste des papiers.
Cette page permet de tout connaı̂tre sur une communication et d’avoir accès aux notations et
commentaires des relecteurs. Il est aussi possible de télécharger la communication ainsi que
l’effacer de la liste.
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
33
Ensuite si vous avez des communications, il vous est possible à vous (super utilisateur) et aux
personnes du comité de programme d’affecter des relecteurs aux communications. Pour ajouter
un relecteur à un papier il suffit de le choisir dans la liste déroulante. Pour avoir les informations
concernant le relecteur, il suffit de cliquer que la première petite icône à gauche du nom. Pour
l’enlever, il suffit de cliquer sur la deuxième petite icône à gauche du nom. Lorsqu’un relecteur
n’a pas encore évalué le papier qui lui a été soumis il apparaı̂t en vert, sinon il apparaı̂t en gris.
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
34
Le dernier lien accepter-rejeter, permet aux personnes autorisées, à la vue des évaluations
d’accepter ou rejeter un papier. On accède aux évaluations par l’intermédaire de l’icône information.
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
35
Il est possible de notifier à l’auteur la décision du comité de programme concernant la communication.
Il est bien sur possible de choisir l’acceptation/rejet des communications et de notifier en bloc
aux contacts.
3.5
Configuration des options d’évaluation des soumissions
Le premier onglet option doit être rempli automatiquement avec la date choisie dans l’onglet
home. Si la date ne vous convient, il est toujours possible de la modifier ici.
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
36
Voici maintenant le lien critères. phpMyConferences permet de centraliser la relecture de
papier. Dans ce cadre, il est possible de fournir des critères d’évualuation que les relecteurs
noteront entre les bornes que vous aurez choisies. De plus il est possible de réaliser une
pondération sur chaque critère. Ensuite vous pouvez saisir une description du critère choisi.
Tous les critères ajoutés apparaı̂tront lors de l’évaluation d’une communication par un relecteur.
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
Y. Morère
37
L.A.S.C.
Documentation phpMyConferences Version 0.1
38
Le dernier lien permet de voir sous la forme d’un tableau, l’état des évaluations des communications
soumises par critère.
3.6
Configuration des informations des éventuels ateliers
Si lors de votre conférence, vous désirez faire des ateliers (workshop), il est possible de les lister
dans la base de données afin qu’ils apparaissent sur votre site. Pour cela il suffit de passer par le
lien éfiter/insérer et de renseigner les champs avec les informations sur l’atelier. Pour avoir
la liste des ateliers, il suffira d’ajouter le lien http://human07.univ-metz.fr/user/workshop_
list.php dans une de vos pages web du site.
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
3.7
39
Configuration des informations pour les inscriptions
Voici la plus grosse partie, de la gestion de conférence par phpMyConferences. Il s’agit de la
gestion des inscriptions à la conférence. Cette gestion est assez complète car elle permet de gérer
les catégories de participant, les modes de paiements, les documents requis, les hébergements
et les extras (par exemple les accompagnants, repas de gala etc...). Des factures peuvent aussi
être éditées par l’intermédaire de l’interface.
Le premier lien options permet de définir la date limite d’inscription ainsi que l’adresse de
retour des documents nécessaires. C’est ici aussi que l’on fixe la monnaie locale.
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
40
Le second lien permet de définir différentes catégories de personnes pour l’inscription. En effet
le plupart du temps le tarif est différent suivant que la personne est étudiante, ou un industriel
etc... On peut ainsi définir différentes catégories qui apparaı̂tront dans la formulaire d’inscription
à la conférence.
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
41
Le troisième lien permet de définir les différents moyens de paiement de la conférence. Il s’agit
de remplir le nom du moyen de paiement et sa description. Ainsi ces différents moyens de
paiement apparaı̂tront sur le formulaire d’enregistrement.
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
42
Il est aussi possible de demander des documents en fonction des catégories de personnes. Par
exemple, on demandera aux étudiants inscrits de fournir la photocopie de leur carte d’étudiant.
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
43
Le lien suivant hébergement va nous permettre de proposer des lieux d’hébergement aux
congressistes. De plus il sera possible de gérer les places disponibles de ces hotels lors de
l’inscription, et par la suite d’intégrer dans la facture les prix de l’hébergement. Il est aussi
possible de faire apparaı̂tre ou non, sur le formulaire d’inscription, le choix de l’hébergement
en fonction de la catégorie.
La partie extra permet de traiter les choses non prévues directement dans la gestion de la
conférence, comme par exemple, la participation ou non au repas de gala, la présence d’un
accompagnant etc... De même ceci apparaı̂tra sur le formulaire d’inscription.
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
44
Le lien résumé permet d’afficher un résumé des inscriptions réalisées. On y retrouve les nombres
d’inscrit classés par catégorie. Puis dans une seconde partie un résumé concernant les hébergements
et les extras..
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
45
Le dernier lien concerne la partie paiement de la conférence. On y retrouve la liste des inscrits
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
46
avec la somme due pour la conférence. On peut par cette interface supprimer un inscrit,
modifier/editer sa facture et notifier qu’il a bien payé en cliquant sur la somme due. Il est
aussi possible de trier les listes simplement en cliquant sur la petite flèche inversée dans les
entêtes de colonnes.
Voici un exemple de facture imprimable :
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
3.8
47
Configuration et édition des listes, badges et étiquettes
Afin de réaliser des états sur la base de donnée, l’onglet Listes permet de réaliser des requêtes
sur la base de données afin de générer des listes. Par défaut très peu de listes sont éditables, et
il faut certaines bases en langage SQL afin de générer de nouvelles listes.
Le premier lien de l’onglet édition des listes permet d’éditer des listes sous différents
formats (pdf, html et texte). Bien sur il faut avoir auparavant créer ces listes par l’intermédiaire
du second lien Création des listes. Cette partie permet d’enregistrer des requêtes SQL qui
fournissent un résultat attendu comme une liste qu’il sera possible d’utiliser dans la partie
édition des listes.
Voici en image la partie édition des liste.
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
48
Puis la partie Création des listes,
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
49
avec un exemple de requête qui permet d’obtenir la liste des papiers de la conférence.
La partie suivante, Création des badges, permet d’éditer les badges des personnes participant
à la conférence. On peut choisir différentes options puis on obtient un fichier PDF à télécharger
contenant des pages A4 avec les badges.
Attention : Ne pas oublier d’effacer un précédent logo avant d’en recharger un nouveau.
Ensuite recharger la page Web, car le précédent logo est encore dans le cache (le fichier image
possède toujours le même nom logo.jpg).
On peut faire la même chose pour des étiquettes à poser sur les bureaux. Il s’agit de la partie
Création d’étiquettes.
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
3.9
50
Gestion du site web
Comme je l’ai dit précédemment, la partie publique du site Web est complètement indépendante
de la partie gestion. Il suffit d’insérer les liens vers les fonctionnalités de phpMyConferences dans
les pages web de votre site.
Ces pages web seront déposées dans le répertoire variable/site web de l’arborescence de
phpMyConferences.
L’onglet Site WEB résume les fonctionnalités de phpMyConferences ainsi que les liens à insérer
dans vos pages web.
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
51
Voici un exemple de formulaire de soumission de communication.
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
52
Voici un exemple de formulaire d’inscription à la conférence.
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
53
Voici un exemple de site web minimaliste (il se résume à une page) regroupant tous les liens
vers les fonctionnalités de phpMyConferences.
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
54
Voici un exemple de page listant les ateliers de la conférence.
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
55
Voici la page de login des Relecteurs,
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
56
Puis une fois le login et mot de passe saisis, le relecteur est dirigé vers la page qui regroupe les
communications qu’il doit relire.
Il peut alors télécharger la communication, la lire et l’évaluer, puis en cliquant sur l’icône avec
le stylo, réaliser son evaluation en ligne.
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
57
Il rentre les différentes notes correspondantes aux critères prédéfinis, et remplis les champs de
commentaires.
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
58
Un fois validée, son évaluation est enregistrée dans la base de données. Il peut aussi à tout
moment revoir son évaluation et modifier la notation.
3.10
Surveillance, sauvegarde et statistiques
La dernière partie concerne, la maintenance du site de la conférence. Par l’intermédiaire de cet
onglet, il est possible de logger, sauvegarder/restaurer et consulter les statistiques du site Web.
Le premier lien log permet de visualiser les principales activités sur le site de phpMyConferences.
Les inscriptions,les mises à jour etc... tout ceci classé par mois.
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
59
Le second lien serveur donne les informations sur les numéros de version des différents serveurs
et librairies utilisés par phpMyConferences.
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
60
Le troisième lien base de données, permet de sauvegarder la base de données de phpMyConferences.
Pout l’instant la restauration n’est pas fonctionnelle par l’intermédiaire du site Web, mais elle
peut être faite en mode console ou via phpMyadmin.
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
61
Le dernier lien permet de visualiser les statistiques complètes du site web. Elles regroupent, les
informations de connexion des visiteurs : date, heure, systèmes d’exploitation, navigateur. De
plus ces informations sont résumées de manières graphiques.
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
Y. Morère
62
L.A.S.C.
Documentation phpMyConferences Version 0.1
3.11
63
Messagerie interne au site
Lors de votre connexion au site d’administration de la conférence, à tout moment vous pouvez
contacter les différents membres enregistrés de la conférence (Super utilisateur, comité de
programme et relecteurs) par l’intermédiaire d’une messagerie interne.
Son fonctionnement est très simple et est décrit dans les deux captures qui suivent.
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
4
64
Correction de Bugs en Vrac pour la version 8.0.2
Lors de la mise en place de phpMyConferences, j’ai réalisé un certain nombre de corrections.
Les voici en vrac :
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
encore une petite erreur lors de la consultation "administration ->
base de données"
Warning: mysql_connect(): Access denied for user
’root’@’localhost’ (using password: NO)
in /var/www/human07/admin/administration/backup.php on line 26
par contre la restauration n’a pas l’air de fonctionner
Enfin attention, j’ai des fichiers au formats MS Windows (des ^M en fin
de ligne) et d’autres au formats Unix
Yann
fichier backup.php
je pense que cette ligne n’y est pas étrangère... depuis quand on se
connecte en root sans mot de passe ;)
$conn = mysql_connect("localhost","root","") or die(mysql_error());
il est s^
urement possible de passer les paramètres... je pense que
l’ancienne était mieux
<?
@session_start();
require_once("../conf.php");
// number of backups to keep
$backups = 5;
$conn = mysql_connect($dbhost,$dbuser,$dbpass) or die(mysql_error());
et tout de suite cela marche beaucoup mieux ;)
// hours between backups
$interval = 24;
Yann
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
// 1 only with ZLib support, else change value to 0
$compression = 0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Donc voici les corrections concernant la partie "database" de la partie
admin en fichiers attachés
// full path to phpMyBackup
$path=ROOT_DIR_PATH."archive/backup";
Au fait elle existe la fonction javascript ’restore’... je ne l’ai pas
trouvée
en fait, des petits bugs qui bloquaient la sauvegarde.
notamment l’oubli de global $dbname dans les fonctions get_content et
get_def, j’en ai profité pour les passer en paramètres
ensuite les liens qui ne marchait pas, cela venait de la mauvaise
syntaxe dans la création des liens href. Attention aux \" et ’ "
imbriqués
en fait j’ai comparé avec le fichier de la version 7 qui marchait
Y. Morère
// mySQL - variables
$dbhost=SQL_SERVEUR;
$dbuser=SQL_USER;
$dbpass=SQL_PASSWD;
$dbname=SQL_BDD;
// DO NOT CHANGE THE LINES BELOW
$version = "0.4 beta";
// flush();
//$conn = mysql_connect("localhost","root","") or die(mysql_error());
//$conn = mysql_connect(SQL_SERVER,SQL_USER,SQL_PASSWD) or die(mysql_error());
$conn = mysql_connect($dbhost,$dbuser,$dbpass) or die(mysql_error());
L.A.S.C.
Documentation phpMyConferences Version 0.1
$path = $path . "/";
65
<?
/******* Security *************/
include_once("./../conf.php");
$requiredUserLevel = array(1);
require(ROOT_DIR_PATH."/common/phpSecurePages/secure.php");
function get_def($table,$conn,$dbname) {
//
global $conn;
//
global $dbname;
$def = "";
/******************************/
$def .= "DROP TABLE IF EXISTS $table;#%%\n";
if(isset($_SESSION[’language’]))
$def .= "CREATE TABLE $table (\n";
require_once(ROOT_DIR_PATH."/common/lang/".$_SESSION[’language’]);
//
$result = mysql_db_query(SQL_BDD, "SHOW FIELDS FROM $table",$conn);
$result = mysql_db_query($dbname, "SHOW FIELDS FROM $table",$conn);
include "backup.php";
while($row = mysql_fetch_array($result)) {
?>
$def .= "
$row[Field] $row[Type]";
<table cellspacing="1" cellpadding="2" border="0" bgcolor="#354463" width="798">
if ($row["Default"] != "") $def .= " DEFAULT ’$row[Default]’";
<tr>
if ($row["Null"] != "YES") $def .= " NOT NULL";
<td bgcolor="#BFC4CB" class="medium_black">
if ($row[Extra] != "") $def .= " $row[Extra]";
<table cellpadding="2" cellspacing="5" border="0">
$def .= ",\n";
<tr>
}
<td align="center" valign="top">
$def = ereg_replace(",\n$","", $def);
<table cellspacing="0" cellpadding="0" border="0" bgcolor="#BFC4CB" valign="top">
$result = mysql_db_query($dbname, "SHOW KEYS FROM $table",$conn);
<tr>
//$result = mysql_db_query(SQL_BDD, "SHOW KEYS FROM $table",$conn);
<td class="medium_black">
while($row = mysql_fetch_array($result)) {
<table cellspacing="0" cellpadding="4" border="0" bgcolor="#9CA4B1" width="550" valign="top">
$kname=$row[Key_name];
<tr>
if(($kname != "PRIMARY") && ($row[Non_unique] == 0)) $kname="UNIQUE|$kname";
<td bgcolor="#9CA4B1" width="5" align="center">:.</td>
if(!isset($index[$kname])) $index[$kname] = array();
<td bgcolor="#BFC4CB"><b><font color="#333333">phpMyBackup v.<? echo $version;?></font></b></
$index[$kname][] = $row[Column_name];
</tr>
}
</table>
while(list($x, $columns) = @each($index)) {
</td>
$def .= ",\n";
</tr>
if($x == "PRIMARY") $def .= "
PRIMARY KEY (" . implode($columns, ",
<tr>
") . ")";
else if (substr($x,0,6) == "UNIQUE") $def .= "
UNIQUE ".substr($x,7)."<td
(" bgcolor="#BFC4CB"
. implode($columns,
width="798"
", ") . ")";
valign="top" height="250">
else $def .= "
KEY $x (" . implode($columns, ", ") . ")";
<p>
}
<font color="#333333">
$def .= "\n);#%%";
return (stripslashes($def));
A database backup is automatically made every day.
<br>
<a href=index.php?page=AdminDatabase&save=TRUE" class="main">dump</a>
<?
function get_content($table,$conn,$dbname) {
if ($file!="") {
//
global $conn;
$filename = $file;
//
global $dbname;
set_time_limit(180);
$content="";
if ($compression ==1) $file=gzread(gzopen($path.$file, "r"), 10485760);
//
$result = mysql_db_query(SQL_BDD, "SELECT * FROM $table",$conn);
else $file=fread(fopen($path.$file, "r"), 10485760);
$result = mysql_db_query($dbname, "SELECT * FROM $table",$conn);
$query=explode(";#%%\n",$file);
while($row = mysql_fetch_row($result)) {
for ($i=0;$i < count($query)-1;$i++) {
$insert = "INSERT INTO $table VALUES (";
mysql_db_query(SQL_BDD,$query[$i],$conn) or die(mysql_error());
for($j=0; $j<mysql_num_fields($result);$j++) {
}
if(!isset($row[$j])) $insert .= "NULL,";
echo "<b>$filename successfully restored!</b>";
else if($row[$j] != "") $insert .= "’".addslashes($row[$j])."’,"; }
else $insert .= "’’,";
?>
}
<table border="0" cellpadding="4">
$insert = ereg_replace(",$","",$insert);
<tr align="center">
$insert .= ");#%%\n";
<td class="medium_black"><u><i>File</i></u></td>
$content .= $insert;
<td class="medium_black"><u><i>Date</i></u></td>
}
</tr>
return $content;
<?
}
//echo "$path";
$dir=opendir($path);
if ($compression==1) $filetype = "sql.gz";
while ($file = readdir ($dir)) {
else $filetype = "sql";
if ($file != "." && $file != ".." && eregi("\.sql",$file)) {
echo "<tr><td class=’medium_black’>$file&nbsp;</td>
if ((@filemtime($path . "0.$filetype") < time() - $interval * 3600)||$_GET[’save’]==TRUE)
<td {class=’medium_black’>&nbsp;" . date("Y-m-d H:i",filemtime($path.$file)) . "</td>
for ($i = $backups-1; $i > 0; $i--) {
<td class=’medium_black’>&nbsp;<a href=\"javascript:restore(’$file’)\" class=’main’>
$oldname = $i-1 . ".$filetype";
<td class=’medium_black’>&nbsp;<a href=\"../archive/backup/$file\" class=’main’>View
$newname = $i . ".$filetype";
}
@rename($path.$oldname,$path.$newname);
}
}
closedir($dir);
?>
$cur_time=date("Y-m-d H:i");
</table>
$newfile="# Dump created with ’phpMyBackup v.$version’ on $cur_time\r\n";
</td>
// $newfile .= "$dbuser $dbhost $path $dbname".’SQL_BDD SQL_USER \n\n’;
</tr>
// $tables = mysql_list_tables(SQL_BDD,$conn);
$tables = mysql_list_tables($dbname,$conn);
</table>
$num_tables = @mysql_num_rows($tables);
// $newfile .= "$tables $num_tables\n";
</td>
$i = 0;
</tr>
while($i < $num_tables) {
$table = mysql_tablename($tables, $i);
</table>
}
$newfile
$newfile
$newfile
$newfile
$newfile
$newfile
$newfile
$i++;
.=
.=
.=
.=
.=
.=
.=
"\n# ----------------------------------------------------------\n#\n";
<?
"# structure for table ’$table’\n#\n";
if($mailSend>0)
get_def($table,$conn,$dbname);
echo"
"\n\n";
<script language=’javascript’>
"#\n# data for table ’$table’\n#\n";
alert(’$mailSend email(s) send’);
get_content($table,$conn,$dbname);
</script>";
"\n\n";
?>
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if ($compression==1) {
$fp = gzopen($path."0.$filetype","w9");
gzwrite ($fp,$newfile);
gzclose ($fp);
} else {
$fp = fopen ($path."0.$filetype","w+");
fwrite ($fp,$newfile);
fclose ($fp);
}
}
?>
fichier database.inc.php
Y. Morère
Bonjour,
Lors de l’ajout d’un nouvel utilisateur le mot de passe generé
if(!isset($pass))
$pass=str_replace(".","",crypt($nom."$CLE".$prenom,$CLE));
(common/mail/send_mail.inc.php)
n’etait pas stocké dans la table personne.
J’ai du ajouter
Service::updateMessage("personne","passe_personne",$pass,"id_personne",$reviewer[id_personne]
afin de le stocker sinon la personne recevant le mail ne pouvait pas remplir ses informations
L.A.S.C.
Documentation phpMyConferences Version 0.1
Si cette info peut aider qqu,
Nicolas VOLLMER
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
66
if($_POST[’validate’]=="add")
{
$insert_comment =
Service::insert_cinq_quatre("comment","id_comment","date","id_article","id_sender","comment",
INTO ‘comment‘ ( ‘id_comment‘ , ‘date‘ , ‘id_article‘ , ‘id_sender‘ ,
‘comment‘ ) VALUES (’’, now(), ’".$_GET[’id_article’]."’, ’$ID’,
’".$_POST[’comment’]."’)",$db_link); }
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
J’ai remarqué un truc chez moi, l’envoi de mail par l’intermédiaire de
email->envoi ne fonctionne pas.
hope this help
Yann
Comme cela est placé sur un serveur Debian stable, la version de php
est trop ancienne et il ne connait pas la fonction de file_get_contents
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
j’ai donc remplacé par
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
<?
$lines= file(ROOT_DIR_PATH."variable/file/copy.txt");
foreach ($lines as $line) { $file_copy .= $line; }
$lines = file(ROOT_DIR_PATH."variable/file/from.txt");
foreach ($lines as $line) { $file_from .= $line; }
// $file_copy
=file_get_contents(ROOT_DIR_PATH."variable/file/copy.txt"); //
$file_from
=file_get_contents(ROOT_DIR_PATH."variable/file/from.txt"); ?>
je pense qu’il faudra aussi changer dans
et la j’ai le bien l’interface, par contre les mails ne partent pas
malgrè la boite de dialogue qui dit que tout est ok
on peut aussi remplacer now() par "now()" c’est plus simple
admin/participants/payment.php: $update_payment =
Service::update_Deux("registration","payment",now(),"id_registration",$_GET[’id_registration’
admin/participants/payment.php:
$update_document =
Service::update_un_deux("registration_document","validate",now(),"id_registration",$_GET[’id_
puis dans common/service/service.php:
yann
Une idée ...
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Je ne trouve pas la fonction now() dans le manuel php
corection de bugs
dans user/article.php
d’ou vient cette fonction?
J’ai trouvé c’est du mysql
/********* record data **********/
mais visiblement elle ne marche pas dans tous les contextes... peut
e
^tre des caractères à déspécialiser !!!
//On remplace les espaces par des _
//$file_name=ereg_replace ("_", " ", $name);
$file_name=ereg_replace (" ", "_", $name);
inversion, on commence par rechercher puis ensuite on remplace
ereg_replace -- Remplacement par expression rationnelle
Description
string ereg_replace ( string pattern, string replacement, string
string )
et puis pourquoi mélanger la fonction date php et la fonction now()
mysql ...
puis plus loin ya encore une inversion entre répertoire et nom de
fichier
Bonsoir à tous
ceci emp^
eche l’upload de fichier
yann
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Afin de faire marcher convenablement les statistiques (je n’avais pas
les graphs en images), j’ai modifié le
fichier /html/common/visiteurs/include/conf.inc.php car les variables de
connexion à la base n’étaient pas renseignéee, j’ai donc inclus le
fichier de conf général
// echo "post
file !".$_FILES[’file’][’tmp_name’]."/".$_FILES[’file’][’dir’]; echo
"post file !".$_FILES[’file’][’dir’]."/".$_FILES[’file’][’tmp_name’];
include(’../../conf.php’);
//if(!copy($_FILES[’file’][’tmp_name’]."/".$_FILES[’file’][’dir’],ROOT_DIR_PATH."/variable/submission/$file_name"))
//on peut aussi directement les fixer : moins
if(!copy($_FILES[’file’][’dir’]."/".$_FILES[’file’][’tmp_name’],ROOT_DIR_PATH."/variable/submission/$file_name"))
//define("SQL_SERVEUR","localhost");
//define("SQL_USER","user");
//define("SQL_PASSWD","mot de passe");
Autre petite chose ya pas de sujet dans l’email de confirmation d’envoi
//define("SQL_BDD","bdd");
d’une soumission de papier !!!
Yann
pratique
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
par ailleurs la fonction connexion_error($lvm_connexion_error); dans le
fichier /html/common/visiteurs/image-vis.php ne semble pas exister sur
mon serveur ni dans les scripts présents
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Hope this help
> Autre petite chose ya pas de sujet dans l’email de confirmation
> d’envoi d’une soumission de papier !!!
yann
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
dans user/article.php
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
$file="validate_upload"; //ça sert à quoi
//à Rajouter
$subject="HuMaN07 Paper Submission"; //par exemple mais c’est pas
générique
peut ^
etre peut on ajouter un champs "paper submission" dans
email->option et avoir le fichier txt pour gérer ce sujet
Yann
Petit correctif, si on met include(’../../conf.php’); cela occasionne
une erreur lors de la visualisation de la racine du site
optez pour
define("SQL_SERVEUR","localhost");
define("SQL_USER","user");
define("SQL_PASSWD","mot de passe");
define("SQL_BDD","bdd");
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
moins pratique, mais cela fonctionne. Ya surement une meilleure manière
de faire... je vais chercher
Bonjour,
Yann
Ajout d’un commentaire sur le papier lors de l’évaluation
dans paper_comment.php
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Fatal error: Call to undefined function: now()
in /drbd/drbd1/www/human07/html/common/paper/paper_comment.php on line
82
Pour avoir le nom de votre site dans les stats : modifier fichier /html/common/visiteurs/incl
// your parameters (for graphs and titles)
$lvc_site_name
= "human07.univ-metz.fr"; // like ’phpInfo.net’ or ’My Web’
remplacer now() par date("y-m-d")
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
67
destination était vide. De plus le nom des champs récupérés n’étaient
pas les bons.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Hope this help
Bonsoir
Yann
Chez moi l’envoi de mail par l’interface d’administration ne marchait.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
J’ai modifié le code du fichier admin/mail/formmail_send.php comme
suit
avant
Bonjour, la modif d’hier soir n’était pas complète, en effet l’envoi
par les listes ne fonctionnait pas
if(isset($query))
{
// Database link
voici les nouvelles modifications
$mailSend=0;
$mail_selection=Service::passageRequete($query);
while($mail=mysql_fetch_row($mail_selection))
{
$m= new Mail; // create the mail
if($_POST[’from’]!=""){
$m->From(trim($_POST[’from’]));}
if($_POST[’to’]!=""){
$m->From(trim($_POST[’to’]));}
$m->Subject($subject);
$m->Body( $message);
// set the body
if ($_POST[’copy’] != ""){
$m->Cc(trim($_POST[’copy’]));}
$m->Priority($_POST[’priority’]) ;
$m->Send();
$mailSend++;
}
}
else
{
$m= new Mail; // create the mail
if($_POST[’from’]!=""){
$m->From(trim($_POST[’from’]));}
if($_POST[’to’]!=""){
$m->From(trim($_POST[’to’]));}
$m->Subject($subject);
$m->Body($message);
// set the body
if ($_POST[’copy’] != ""){
$m->Cc(trim($_POST[’copy’]));}
$m->Priority($_POST[’priority’]);
$m->Send();
$mailSend=1;
}
après
if(isset($query))
{
// Database link
$mail_selection=Service::passageRequete($query);
while($mail=mysql_fetch_row($mail_selection))
{
$mailSend++;
}
}
else
{
$m= new Mail; // create the mail
//$venantde=trim($_POST[’from’]);
if($_POST[’from’]!=""){
$m->From(trim($_POST[’from’]));}
//$allanta=trim($_POST[’email’]);
if($_POST[’email’]!=""){
$m->To(trim($_POST[’email’]));}
$m->Subject($subject);
$m->Body("$message","iso-8859-1");
if ($_POST[’copy’] != ""){
$m->Cc(trim($_POST[’copy’]));}
//$m->Priority($_POST[’priority’]);
$m->Send();
$mailSend=1;
}
//
// set the body
en fait il s’agissait d’erreur de copier-coller et du coup l’adresse de
Y. Morère
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
avant
if(isset($query))
{
// Database link
$mailSend=0;
$mail_selection=Service::passageRequete($query);
while($mail=mysql_fetch_row($mail_selection))
{
$m= new Mail; // create the mail
if($_POST[’from’]!=""){
$m->From(trim($_POST[’from’]));}
if($_POST[’to’]!=""){
$m->From(trim($_POST[’to’]));}
$m->Subject($subject);
$m->Body( $message);
// set the body
if ($_POST[’copy’] != ""){
$m->Cc(trim($_POST[’copy’]));}
$m->Priority($_POST[’priority’]) ;
$m->Send();
$mailSend++;
}
}
else
{
$m= new Mail; // create the mail
if($_POST[’from’]!=""){
$m->From(trim($_POST[’from’]));}
if($_POST[’to’]!=""){
$m->From(trim($_POST[’to’]));}
$m->Subject($subject);
$m->Body($message);
// set the body
if ($_POST[’copy’] != ""){
$m->Cc(trim($_POST[’copy’]));}
$m->Priority($_POST[’priority’]);
$m->Send();
$mailSend=1;
}
if(isset($query))
{
// Database link
$mailSend=0;
$m= new Mail; // create the mail
if($_POST[’from’]!=""){
$m->From(trim($_POST[’from’]));}
if($_POST[’to’]!=""){
$m->To($mail);}
$m->Subject($subject);
$m->Body( "$message", "iso-8859-1");
set the body if ($_POST[’copy’] != ""){
$m->Cc(trim($_POST[’copy’]));}
//$m->Priority($_POST[’priority’]) ;
$m->Send();
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
$mailSend=0;
$mail_selection=Service::passageRequete($query);
while($mail=mysql_fetch_row($mail_selection))
{
//echo "<DEFANGED_script language=\"javascript\">alert(\" to $mail[0]
\");</script>"; $m= new Mail; // create the mail
if($_POST[’from’]!=""){
$venantde=trim($_POST[’from’]);
//echo "<DEFANGED_script language=\"javascript\">alert(\" from
$venantde\");</script>"; $m->From(trim($_POST[’from’]));}
if($mail[0]!=""){
//echo "<DEFANGED_script language=\"javascript\">alert(\" POST to $mail[0]
\");</script>"; $m->To($mail[0]);}
$m->Subject($subject);
//echo "<DEFANGED_script language=\"javascript\">alert(\"sujet
$subject\");</script>"; $m->Body( "$message", "iso-8859-1");
//
set the body if ($_POST[’copy’] != ""){
$m->Cc(trim($_POST[’copy’]));}
$m->Priority($_POST[’priority’]) ;
$m->Send();
//$num_contact++;
$mailSend++;
}
}
else
{
$m= new Mail; // create the mail
//$venantde=trim($_POST[’from’]);
if($_POST[’from’]!=""){
$m->From(trim($_POST[’from’]));}
//$allanta=trim($_POST[’email’]);
if($_POST[’email’]!=""){
$m->To(trim($_POST[’email’]));}
$m->Subject($subject);
$m->Body("$message","iso-8859-1");
// set the body
L.A.S.C.
Documentation phpMyConferences Version 0.1
if ($_POST[’copy’] != ""){
$m->Cc(trim($_POST[’copy’]));}
//$m->Priority($_POST[’priority’]);
$m->Send();
$mailSend=1;
}
68
Places disponibles: 9999 ( vide = aucune restriction )
et la tout va bien
Yann
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//echo "<DEFANGED_script
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
language=\"javascript\">alert(\"$subject\");</script>"; //echo "<DEFANGED_script
language=\"javascript\">alert(\"msg $msg\");</script>"; //echo "<DEFANGED_script
language=\"javascript\">alert(\"from $venantde\");</script>"; //echo
Bonjour,
"<DEFANGED_script language=\"javascript\">alert(\"to
$allanta\");</script>"; //
echo "<DEFANGED_script
Si vous avez plusieurs h^
otels, lors de l’inscription le calcul du co^
ut
language=\"javascript\">alert(\"$_POST\[\’to\’\]\");</script>"; echo
est faux. Il prend toujours le prix du dernier h^
otel.
"<DEFANGED_SCRIPT language=\"JavaScript\">alert(\" mail send.\\nThank
you\")</SCRIPT>"; echo " <DEFANGED_script language=’javascript’> <!--//
Cela vient s^
urement de la variable ’night_price’ dont le nom est
identique d’un h^
otel à l’autre (en fait le while($housing_categories)
Hope this help
n’est pas gérer correctement.)
Yann
En fait il faut faire la m^
eme chose que pour les "extra" qui sont eux
ben gérer.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Yann MORERE
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Bonjour
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Dans le fichier /html/admin/participants/summary.inc.php j’ai fait les
modifs suivantes afin de gérer le fait que le nb de place dans les
hotels n’est pas défini. Sinon lors de l’affichage, des warning de
"divide by zero", et oui comme il n’a rien -> 0 est stocké dans la base.
//Calcul des % si nb place définie
sinon c’est 0 qui est stocké dans la base if($max_place!=0)
{
$presence_unvalidate_p=($presence_unvalidate/$max_place)*100;
$presence_validate_p=($presence_validate/$max_place)*100;
$free_p=100-$presence_unvalidate_p-$presence_validate_p;
Bonjour,
J’ai modifié assez profondément les fichiers registration.php
new_order.php et edit_order.php pour mon application
Quelques petits trucs boguent encore (selection d’une nuit dans
chaque h^
otel par exemple)
Maintenant, ils prennent en compte plusieurs hébergement. La méthode
facturation a été corrigée.
$free=$max_place-$presence_unvalidate-$presence_validate;
echo"
<td colspan=2 align=center
valign=center class=’medium_black’> <DEFANGED_IMG src=’graph/red.jpg’
width=$presence_validate_p height=6 alt=’validate : $presence_validate
place(s) (".number_format($presence_validate_p,2)." %)’><DEFANGED_IMG
src=’graph/orange.jpg’ width=$presence_unvalidate_p height=6
alt=’unvalidate : $presence_unvalidate place(s)
(".number_format($presence_unvalidate_p,2)." %)’><DEFANGED_IMG
src=’graph/black.jpg’ width=$free_p height=6 alt=\"free : $free
place(s) (".number_format($free_p,2)." %)\"> </td>
voici les fichiers joints
</tr>";
Yann
}
else
{
$presence_unvalidate_p=" NA ";
$presence_validate_p=" NA ";
$free_p=" NA ";
Voici la dernière modification du fichier
echo"
<td colspan=2 align=center
valign=center class=’medium_black’> <DEFANGED_IMG src=’graph/red.jpg’
width=$presence_validate_p height=6 alt=’validate : $presence_validate
place(s) (".$presence_validate_p." %)’><DEFANGED_IMG src=’graph/orange.jpg’
width=$presence_unvalidate_p height=6 alt=’unvalidate :
$presence_unvalidate place(s) (".$presence_unvalidate_p." %)’><DEFANGED_IMG
src=’graph/black.jpg’ width=$free_p height=6 alt=\"free : $free
place(s) (".$free_p." %)\"> </td>
Le génération des bagdes et des étiquettes ne fonctionne pas du tout
SInon, voici quelques idées :
- Création de comptes de soumission de papier avec login mot de passe,
comme cela, il serait possible de mettre à jour le papier téléchargé et
les données des auteurs
- Vérification à l’inscription si la personne n’est pas déjà inscrite
-> j’ai pu m’inscrire plusieurs fois avec les m^
emes données...
Cordialement
edit_order.php
On peut maintenant choisir une a plusieurs nuits par hotel.
j’ai un autre soucis.
J’obtient un fichier PDF vide !!!! enfin presque ya une ligne noir sur
la partie supérieur de la page.
Yann
fichier edit_order.php
<?
</tr>";
/*** Edit Order **
}
v 1.0
ensuite modification du traitement de la date pour que cela soit joli
************/
$date_housing_temp=str_replace(" ","/",$housing[date]);
$date_housing=explode("|",$date_housing_temp);
session_start();
require_once("../../conf.php");
puis plus loin
//on enlève les / de trop
$date_modifiee=rtrim(ltrim($date_housing[$j],"/"),"/");
echo"
<tr class=’line$i’>
<td class=’medium_black’>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Le
$date_modifiee : </td>
";
//********Language**************/
if(isset($_SESSION[’language’]))
require_once(ROOT_DIR_PATH."/common/lang/".$_SESSION[’language’]);
require(ROOT_DIR_PATH."/common/phpSecurePages/functions.inc.php");
$requiredUserLevel = array(1, 2);
require(ROOT_DIR_PATH."/common/phpSecurePages/secure.php");
A+
Yann
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//******Service********//
require_once(ROOT_DIR_PATH."common/service/service.php");
// Connexion à la base
//$db_link = mysql_connect(SQL_SERVEUR,SQL_USER,SQL_PASSWD);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Comme zéro est socké dans la base cela pose des pbs pour le formulaire
d’inscription. En effet comme il y a un test sur les places restantes
dans l’hotel... ces hotels s’affiche complet.
/******** Amount Calculate ********/
$select_evenement = Service::SelectAll("evenement");
$evenement=mysql_fetch_array($select_evenement);
Un moyen simple de contourner cela est de mettre un grand nombre dans
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
69
$select_registration = Service::select_where("registration","id_registration",$_GET[’id_registration’]);
}
$registration=mysql_fetch_array($select_registration);
<!-if (isset($_POST[’mod_fee’]) and $_POST[’mod_fee’]) { // Le statut a ete modifie
*{ dans le formulaire
// On cherche un nouveau tarif
font-size: x-small;
//$select_categories=mysql_db_query(SQL_BDD,"select prices from categories
}
where id_categories = ’".$_POST[’id_categories’]."’",$db_link);
$select_categories = Service::select_champ_where("prices","categories","id_categories",$_POST[’id_categories’]);
$categories=mysql_fetch_array($select_categories);
input, textarea, select {
$amount=$categories[prices];
background-color: #CCCCCC;
// Suppression les informations dependantes du statut
font-family: verdana, arial, sans-serif;
//$del_db = mysql_db_query(SQL_BDD,"delete from extra_registration font-size:
where id_registration=’".$_GET[’id_registration’]."’",$db_link);
10px;
$del_db = Service::delete("extra_registration","id_registration",$_GET[’id_registration’]);
color: #333333;
//$del_db = mysql_db_query(SQL_BDD,"delete from registration_document
padding:
where 0px;
id_registration=’".$_GET[’id_registration’]."’",$db_link);
$del_db = Service::delete("registration_document","id_registration",$_GET[’id_registration’]);
}
unset($_POST[’mod_fee’]);
}
input.red, textarea.red, select.red
{
background-color: #D89A8F;
if (! (isset($_POST[’validate’]) or isset($_POST[’id_categories’]))) {
font-family: verdana, arial, sans-serif;
$_POST[’id_categories’] = $registration[id_categories];
font-size: 10px;
$_POST[’mr’] = $registration[mr];
color: WHITE;
$_POST[’first_name’] = $registration[first_name];
padding: 0px;
$_POST[’last_name’] = $registration[last_name];
}
$_POST[’title’] = $registration[title];
$_POST[’compagny’] = $registration[compagny];
info {
$_POST[’adress’] = $registration[adress];
text-align: left;
$_POST[’city’] = $registration[city];
font: 10px sans-serif, tahoma, verdana, geneva, helvetica, arial;
$state = $registration[state];
color: #666666;
$_POST[’zip_code’] = $registration[zip_code];
}
$_POST[’country’] = $registration[country];
-->
$_POST[’phone’] = $registration[phone];
</style>
$_POST[’fax’] = $registration[fax];
<SCRIPT>
$_POST[’email’] = $registration[email];
<!-$roomate = $registration[compagnon];
// $night_presence=explode("|",$registration[housing_presence]);
function Lien() {
$night_presence2 = $registration[housing_presence];
i = document.registration.list_categories.selectedIndex;
// echo "$night_presence2<br>";
if (i == 0) return;
$night_presence1=explode("|",$registration[housing_presence]);
statut = document.registration.list_categories.options[i].value;
// alert(statut);
for ($i=0;$i<count($night_presence1);$i++)
document.forms.registration.id_categories.value = statut;
{
document.forms.registration.mod_fee.value = statut;
$indic=$i+1;
document.forms.registration.submit()
$night_presence[$indic]=explode(":",$night_presence1[$i]);
}
}
// -->
// var_dump($night_presence1);
</SCRIPT>
// var_dump($night_presence);
</head>
$_POST[’online_information’] = $registration[online_information];
$day_presence = $registration[day_presence];
$_POST[’tab_presence’]=explode(" | ",$day_presence);
$document_req = $registration[document];
$payment = $registration[payment];
$_POST[’amount’] = $registration[amount];
$_POST[’comments’] = $registration[comments];
$date = $registration[date];
<BODY>
<h1><center><font color="#0000FF">- Edition d’un enregistrement</font> / Editing registratio
<form name="registration" method="post" action="edit_order.php" >
<? if(isset($_GET[’id_registration’])){
echo "<input type=’hidden’ name=’id_registration’ value=".$_GET[’id_registration’].">";
}elseif(isset($_POST[’id_registration’])){
echo "<input type=’hidden’ name=’id_registration’ value=".$_POST[’id_registration’].">";}
?>
<input type="hidden" name="id_categories" value="<? echo $_POST[’id_categories’];?>">
<input type="hidden" name="mod_fee" value="<? echo $_POST[’mod_fee’];?>">
$select_extra_registration = Service::select_where("extra_registration","id_registration",$_GET[’id_registration’]);
<h5>
$extra_tab = array();
while ($row = mysql_fetch_array($select_extra_registration)) {
<table width="95%" border="0">
$extra_tab[$row[’id_extra’]] = $row[’number’];
}
<tr>
<td width="3%" height="20">&nbsp;</td>
foreach($extra_tab as $id_extra => $number)
<td colspan=2 height="20" bgcolor="#CCCCCC"><b><font color="#0000FF">Informations pers
{
$select_extra = Service::select_champ_where("price","extra","id_extra",$id_extra);
</tr>
//$select_extra=mysql_db_query(SQL_BDD,"select price from extra where id_extra=$id_extra",$db_link);
<tr><td><? echo"id_registration en get ".$_GET[id_registration];?></td><td><? echo"id_registr
$extra=mysql_fetch_array($select_extra);
$amount=$amount-($extra[price]*$number);
}
<?
}
if($categories_id[document]!="")
echo"
<tr>
$select_categories = Service::select_where("categories","id_categories",$registration[id_categories]);
<td width=’3%’ height=’40’>&nbsp;</td>
//$select_categories=mysql_db_query(SQL_BDD,"select * from categories where id_categories=’".$registration[id_categories]."’",$db_link);
<td width=’47%’ height=’40’ valign=top>Documents requis :</td>
$categories=mysql_fetch_array($select_categories);
<td width=’50%’ height=’40’>
<font color=’#D89A8F’ >$categories_id[document]</font>
// include("../conf.php");
</td>
</tr>";
/******* FUNCTION *************/
$error=0;
require_once(ROOT_DIR_PATH."controle.php");
function ecriture_log($value)
{
// A compléter ou à charger
}
/*****************************/
?>
<HTML>
<head>
<title>Registration of participation</title>
<style type="text/css">
BODY{
font-family: verdana, arial, sans-serif;
font-size: x-small;
Y. Morère
if($categories_id[online_information]!="")
{
echo"
<tr>
<td width=’3%’ height=’40’>&nbsp;</td>
<td width=’47%’ height=’40’ valign=top>$categories_id[online_information] :</td>
<td width=’50%’ height=’40’>
<input type=’textarea’ name=’online_information’ size=50 value=";
modifie($_POST[’online_information’]);
echo" ></input>
</td>
</tr>";
}
if($categories_id[description]!="")
echo"
<tr>
L.A.S.C.
Documentation phpMyConferences Version 0.1
<td width=’3%’ height=’40’>&nbsp;</td>
<td width=’47%’ height=’40’ valign=top>Remarques :</td>
<td width=’50%’ height=’40’>
$categories_id[description]
</td>
</tr>";
?>
70
<input type="textarea" name="fax" size=20 value="<?
echo $_POST[’fax’];
?>"></input>
</td>
</tr>
<tr>
<td width="3%" height="40">&nbsp;</td>
<td width="47%" height="40">Email :</td>
<td width="3%" height="40">&nbsp;</td>
<td width="50%" height="40">
<td width="47%" height="40">&nbsp;</td>
<input type="textarea" name="email" size=50 <?
<td width="50%" height="40">
modifie($_POST[’email’]);
<input type=radio name=mr value="mrs" <?php echo ($_POST[’mr’] == "mrs") ? ’checked’:
?>></input>’’; ?>> Mme/Mrs.
<input type=radio name=mr value="mr" <?php echo ($_POST[’mr’] == "mr") ? ’checked’:
</td>’’; ?>> Mr.
</td>
</tr>
</tr>
<tr>
<tr>
<td width="3%" height="40">&nbsp;</td>
<td width="3%" height="40">&nbsp;</td>
<td width="47%" height="40">Commentaires :</td>
<td width="47%" height="40"><font color="#0000FF">Prenom</font><br>Firstname</td>
<td width="50%" height="40">
<td width="50%" height="40">
<textarea name="comments" cols=’50’ rows=’5’><?php echo $_POST[’comments’]; ?></texta
<input type="textarea" name="first_name" size=50 <?
</td>
modifie($_POST[’first_name’])
</tr>
?>></input>
</td>
<tr>
</tr>
<td width="3%" height="20">&nbsp;</td>
<td colspan=2 height="20" bgcolor="#CCCCCC"><b><font color="#0000FF">Informations sur
<tr>
</tr>
<td width="3%" height="40">&nbsp;</td>
<tr>
<td width="47%" height="40"><font color="#0000FF">Nom</font><br>Lastname</td> <td width="3%" height="40">&nbsp;</td>
<td width="50%" height="40">
<td width="47%" height="40"><font color="#0000FF">Date de l’inscription</font></td>
<input type="textarea" name="last_name" size=50 <?
<td width="50%" height="40">
modifie($_POST[’last_name’])
<?
?>></input>
echo $date;
</td>
?></input>
</tr>
</td>
</tr>
<tr>
<td width="3%" height="40">&nbsp;</td>
<tr>
<td width="47%" height="40"><font color="#0000FF">Date de paiement</font></td>
<td width="3%" height="40">&nbsp;</td>
<td width="50%" height="40">
<td width="47%" height="40"><font color="#0000FF">Organisme</font><br>Affiliation</td>
<?
<td width="50%" height="40">
echo $payment;
<input type="textarea" name="compagny" size=50 <?
?></input>
modifie($_POST[’compagny’])
</td>
?>></input>
</tr>
</td>
</tr>
<tr>
<td width="3%" height="40">&nbsp;</td>
<tr>
<td width="47%" height="40">Choisissez votre statut : </td>
<td width="3%" height="40">&nbsp;</td>
<td width="50%" height="40">
<td width="47%" height="40"><font color="#0000FF">Adresse postale</font><br>Regular
mail</td>
<?
<td width="50%" height="40">
$select_categories = Service::SelectAll("categories");
<input type="textarea" name="adress" size=50 <?
//$select_categories=mysql_db_query(SQL_BDD,"select * from categories",$db_link);
modifie($_POST[’adress’])
?>></input>
echo"
</td>
<select name=’list_categories’ onChange=’Lien()’ class=’red’>
</tr>
<option value=’’></option>";
<tr>
<tr>
<td width="3%" height="40">&nbsp;</td>
while($categories=mysql_fetch_array($select_categories))
<td width="47%" height="40"><font color="#0000FF">Ville</font><br>City</td>
{
<td width="50%" height="40">
if($categories[’id_categories’]==$_POST[’id_categories’]){
<input type="textarea" name="city" size=50 <?
echo "<option value= ".$categories[’id_categories’]." selected>$categories[name]</option>";
modifie($_POST[’city’])
}else{
?>></input>
echo "<option value=".$categories[’id_categories’].">$categories[name]</option>";
</td>
}
</tr>
}
<tr>
<td width="3%" height="40">&nbsp;</td>
echo"
<td width="47%" height="40"><font color="#0000FF">Code postal</font><br>Zip
</select>
code</td>
<td width="50%" height="40">
";
<input type="textarea" name="zip_code" size=20 <?
modifie($_POST[’zip_code’]);
if(isset($_POST[’id_categories’]))
?>></input>
{
</td>
$select_categories_id = Service::select_where("categories","id_categories",$_POST[’id_categor
</tr>
//$select_categories_id=mysql_db_query(SQL_BDD,"select * from categories where id_categories=
$categories_id=mysql_fetch_array($select_categories_id);
<tr>
}
<td width="3%" height="40">&nbsp;</td>
<td width="47%" height="40"><font color="#0000FF">Pays</font><br>Country</td>
?>
<td width="50%" height="40">
</td>
<input type="textarea" name="country" size=20 value="<?
</tr>
echo $_POST[’country’];
?>"></input>
<tr>
</td>
<td width="3%" height="40">&nbsp;</td>
</tr>
<td width="47%" height="40"><font color="#0000FF">Prix de l’inscription</font><br>Regis
<td width="50%" height="40">
<tr>
<?
<td width="3%" height="40">&nbsp;</td>
$prices_cat = Service::select_champ_where("prices","categories","id_categories",$_POST[’id_c
<td width="47%" height="40"><font color="#0000FF">Téléphone</font><br>Phone</td>
$price_cat[] = mysql_fetch_array($prices_cat);
<td width="50%" height="40">
?>
<input type="textarea" name="phone" size=20 value="<?
<input type="textarea" name="amount" size=20 value="<?
echo $_POST[’phone’];
echo $price_cat[0][0];
?>"></input>
?>"></input>
</td>
</td>
</tr>
</tr>
<tr>
<td width="3%" height="40">&nbsp;</td>
<td width="47%" height="40">Fax :</td>
<td width="50%" height="40">
Y. Morère
<?
if(isset($_POST[’id_categories’]))
{
L.A.S.C.
Documentation phpMyConferences Version 0.1
71
$select_housing_categories = Service::select_where("housing_categories","id_categories",$_POST[’id_categories’]);
if ($trouve==0)
$j=0;
{
while($housing_categories=@mysql_fetch_array($select_housing_categories))
echo " <input type=’checkbox’ name=’presence[$indice][]’ value=’$tab_date[$i]’ class=’noborde
{
}
echo "
else
<tr>
{
<td width=’3%’ height=’20’>&nbsp;</td>
echo " <input type=’checkbox’ name=’presence[$indice][]’ value=’$tab_date[$i]’ class=’noborde
<td colspan=2 height=’20’ bgcolor=’#CCCCCC’><b>Logement</b></td>
}
</tr>
";
}
$select_used_places = Service::select_2where_2not("registration","id_categories",$_POST[’id_categories’],"housing_presence","");
$used_places=mysql_num_rows($select_used_places);
$j++;
$select_housing = Service::select_where("housing","id_housing",$housing_categories[id_housing]);
//hotel suivant
$housing=@mysql_fetch_array($select_housing);
/**********************/
if($used_places<$housing[max_place])
{
echo "
echo "
</td>
<tr>
</tr>
<td width=’3%’ height=’40’>&nbsp;</td>
";
<td width=’47%’ height=’40’>Lieux :</td>
<td width=’50%’ height=’40’>
}
$housing[name]
else
</td>
{
</tr>
echo"
<tr>
<tr>
<td width=’3%’ height=’40’>&nbsp;</td>
<td width=’3%’ height=’40’>&nbsp;</td>
<td colspan=2> Plus de place disponible.</td>
<td width=’47%’ height=’40’>Prix par nuit :</td>
</tr>";
<td width=’50%’ height=’40’>";
}
if($housing[price_registration]!="")
}
echo $housing[price_registration]." ".$evenement[currency];
}
echo"
<input type=’hidden’ name=’housing_tab[$housing[id_housing]]’ value=".$housing[price_registration].">
?>
</td>
<tr>
</tr>";
<td width="3%" height="20">&nbsp;</td>
<td colspan=2 height="20" bgcolor="#CCCCCC"><b><font color="#0000FF">Informations comp
if($housing[description]!="")
</tr>
{
echo"
<?
<tr>
/************ EXTRA ******************/
<td width=’3%’ height=’40’>&nbsp;</td>
if(isset($_POST[’id_categories’]))
<td width=’47%’ height=’40’>Remarques :</td>
{
<td width=’50%’ height=’40’>
$select_extra_categories = Service::select_where("extra_categories","id_categories",$_POST[’i
$housing[description]
while($extra_categories=mysql_fetch_array($select_extra_categories))
</td>
{
</tr>";
$select_extra = Service::select_2where_2not("extra","id_extra",$extra_categories[id_extra],"a
}
if($housing[document]!="")
echo"
<tr>
<td width=’3%’ height=’40’>&nbsp;</td>
<td width=’47%’ height=’40’ valign=top>Documents requis :</td>
<td width=’50%’ height=’40’>
<font color=’#D89A8F’ >$housing[document]</font>
</td>
</tr>";
if($housing[remarque]!="")
echo"
<tr>
<td width=’3%’ height=’40’>&nbsp;</td>
<td width=’47%’ height=’40’ valign=top>Remarque :</td>
<td width=’50%’ height=’40’>
$housing[remarque]
</td>
</tr>";
$extra=mysql_fetch_array($select_extra);
$extra_price[$extra[id_extra]]=$extra[price];
echo"
<tr>
<td width=’3%’ height=’40’>&nbsp;</td>
<td width=’47%’ height=’40’>$extra[name] ($extra[price] $evenement[currency]) :</td>
<td width=’50%’ height=’40’>
<select name=’extra_tab[$extra[id_extra]]’>";
foreach (array(0,1,2,3,4,5,6,7,8,9) as $num) {
echo "<option value=’$num’";
if ($num == $extra_tab[$extra[id_extra]]) echo "sele
echo ">$num</option>";
};
echo " </select>
</td>
</tr>";
}
/** DAY OF PRESENCE **/
echo"
<tr>
<td width=’3%’ height=’40’>&nbsp;</td>
<td width=’47%’ height=’40’ valign=’top’>Jours de présence :</td>
<td width=’50%’ height=’40’>";
$tab_date=explode("|",$housing[date]);
echo $housing[date]."<br>";
$indice=$j+1;
$tab_pres=implode(":",$night_presence[$indice]);
echo $tab_pres."<br>";
//$select_extra=mysql_db_query(SQL_BDD,"select * from extra where all_categories=’all’ ",$db_
$select_extra = Service::select_where("extra","all_categories","all");
while($extra=mysql_fetch_array($select_extra))
{
$extra_price[$extra[id_extra]]=$extra[price];
echo"
<tr>
<td width=’3% height=’40’>&nbsp;</td>
<td width=’47%’ height=’40’>$extra[name] ($extra[price] $evenement[currency]) :</td>
<td width=’50%’ height=’40’>
<select name=’extra_tab[$extra[id_extra]]’>";
foreach (array(0,1,2,3,4,5,6,7,8,9) as $num) {
echo "<option value=’$num’";
//for($k=0;$k<count($night_presence[$indice]);$k++)
if ($num == $extra_tab[$extra[id_extra]]) echo "sele
for($i=0;$i<=sizeof($tab_date)&&$tab_date[$i]!="";$i++)
echo ">$num</option>";
{
};
$trouve=0;$k=0;
while(($trouve==0)&&($k<count($night_presence[$indice])))
echo " </select>
{
</td>
//echo "date".$night_presence[$indice][$k]." ind i ".$i." ind j ".$indice." ind
</tr>";
k ".$k."tab_date".$tab_date[$i]."<br>;";
if (strstr(trim($night_presence[$indice][$k]),trim($tab_date[$i]))) {
//echo " trouve <br>";
if($extra[description]!="")
$trouve=1;
echo"
<tr class=’info’>
}else {
<td width=’3%’ valign=’top’><img src=’information.gif’></td>
//echo " pas trouve <br>";
<td width=’47%’ colspan=’2’>$extra[description] </td>
$trouve=0;
</tr>";
}
}
$k++;
}
}
?>
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
72
<tr>
/***calcul du prix total***/
<td width="3%" height="40">&nbsp;</td>
//calcul du prix des extras
<td width="47%" height="40" valign="top"><font color="#0000FF">&nbsp;<br>Présence
// if(isset($extra_temp)){
aux repas de midi (inclus dans l’inscription)</font></td>
<td width="50%" height="40">&nbsp;<br>&nbsp;<br>&nbsp;<br>
// foreach($extra_temp as $id_extra => $number)
<?
// {
/** DAY OF PRESENCE **/
// $amount=$amount+($extra_price[$id_extra]*$number);
// }
$first_day = $evenement[date_debut];
// }
list($year, $month, $day) = split(’[-:\ ]’, $first_day);
//ajout du prix de l’inscription
while("$year-$month-$day"<=$evenement[date_fin])
{
// $amount = $amount+$_POST[’amount’];
// echo "prix avant hotel : ".$amount."<br>";
if (($_POST[’tab_presence’]) and in_array("$day-$month-$year",$_POST[’tab_presence’]))
//ajout du{ prix des chambres d’hotels
echo " <input type=’checkbox’ name=’tab_presence[]’ value=’$day-$month-$year’ class=’red’ checked/> $day $month $year<br />";
} else {
// if(isset($_POST[’presence’])){
echo " <input type=’checkbox’ name=’tab_presence[]’ value=’$day-$month-$year’ //
class=’red’
$amount=$amount+($housing[price_registration]*sizeof($presence));}
/> $day $month $year<br/ >";
}
$day++;
if(strlen($day)<2){
$day="0$day";}
if($day>=28){
if(!checkdate($month, $day, $year))
{
$day="01";
$month++;
}
}
/*** amount ***/
$extra_temp=$_POST[’extra_tab’];
// var_dump($extra_temp);
// var_dump($extra_price);
$housing_temp=$_POST[’housing_tab’];
// var_dump($housing_temp);
if(isset($extra_temp)){
foreach($extra_temp as $id_extra => $number)
{
//echo "prix : ".$extra_price[$id_extra]."*".$number."<br>";
$amount=$amount+($extra_price[$id_extra]*$number);
}
}
if(strlen($month)<2){
$month="0$month";}
$nb_hotel=count($housing_temp);
// echo "Nombre hotel : ".$nb_hotel."<br>";
$prix_hotel=0;
for ($i = 1; $i <= $nb_hotel; $i++)
{
$nb_nuit=count($nuit_presence[$i]); //nb nuit pour chaque hotel
if ($nb_nuit!=0)
{
if(strlen($year)<2){
$tab_night_presence[$i]=implode(":",$nuit_presence[$i]); //pour la partie facturation (new_or
$year="0$year";}
}
}
else $tab_night_presence[$i]="";
/**********************/
$prix_hotel+=$nb_nuit*$housing_temp[$i];
?>
}
</td>
$night_presence=implode(" | ",$tab_night_presence); //convertit tableau en chaine pour (new_o
</tr>
echo "night_presence : ".$night_presence."<br>";
// echo "post_night : ".$_POST[’night_price’]."<br>";
<tr>
// echo "prix avant hotel : ".$amount."<br>";
<td width="3%" height="40">&nbsp;</td>
// echo "jours depresence : ".sizeof($_POST[’presence’])."<br>";
<td width="50%">
// echo "prix de l’hotel : ".$_POST[’night_price’]."<br>";
<input type="submit" name="validate" value="validate">
// if(isset($_POST[’presence’]))
// $amount=$amount+($_POST[’night_price’]*sizeof($_POST[’presence’]));
<input type="submit" name="retour" value="retour sans modification"> $amount=$amount+$prix_hotel;
</td>
// echo "prix apres hotel : ".$amount."<br>";
</tr>
/**************/
</table>
</h5>
if($amount==0)
</form>
$payment="OK";
if($month>12)
{
$month=1;
$year++;
}
<?
echo "Mise à jour des données<br> identifiant : ".$_POST[id_registration]."<br>";
/****** UPDATE *******/
if (isset($_POST[’retour’])){
$insert_registration = Service::replace_registration($_POST[’id_registration’],$_POST[’id_cat
echo "<script language=’javascript’> window.location.replace(’../index.php?page=ParticipantPayment’) </script>";}
//,addslashes($_POST[’comments’])
if($error==0&&isset($_POST[’validate’]))
{
/**** ERROR CONTROL ****/
if(isset($_POST[’id_registration’]))
$id_registration=$insert_registration;
if(isset($_POST[’extra_tab’])){
if($_POST[’id_categories’]=="")
foreach($_POST[’extra_tab’] as $id_extra => $number)
{
{
echo "<script language=’JavaScript’>alert(’You must choose a status.’)</script>";
// echo "<br>Passe par le foreach d’extra";
exit;
if($number>=0)
}
{
// echo "<br>Passe par le replace d’extra";
/***********************/
//$insert_registration=mysql_db_query(SQL_BDD,"replace into extra_registration (id_extra, id_
$insert_registration = Service::replace_trois_trois("extra_registration","id_extra","id_regis
/** Database update **/
}
if(isset($_POST[’presence’])){
}
echo "post_presence : ".$_POST[’presence’]."var_dump(presence) : ".";<br>";var_dump($_POST[’presence’]);echo
"<br>";
}
$nuit_presence=$_POST[’presence’];
//il faut stocker les dates pour chaque hotel
/********************************************************
//$night_presence=implode(" | ",$_POST[’presence’]); //contient nb_hotel tableau$night_presence2 = $night_presence;
echo "$night_presence2<br>";
// $night_presence1=implode(" | ",$nuit_presence[1]);
$night_presence1=explode("|",$registration[housing_presence]);
// $night_presence2=implode(" | ",$nuit_presence[2]);
for ($i=0;$i<count($night_presence1);$i++)
// echo "les nuits d’hebergement réservées sont : ".$night_presence."<br>"; {
// echo "les nuits d’hebergement réservées sont : ".$night_presence1." ça fait".count($nuit_presence[1])."<br>";
$indic=$i+1;
// echo "les nuits d’hebergement réservées sont : ".$night_presence2." ça fait".count($nuit_presence[2])."<br>";
$night_presence[$indic]=explode(":",$night_presence1[$i]);
} //$night_presence=implode(" | ",$_POST[’presence’]);
}
***************************************************************/
if(isset($_POST[’tab_presence’]))
$day_presence=implode(" | ",$_POST[’tab_presence’]);
// Log file
ecriture_log("Register : ".$first_name." ".$last_name);
if($categories_id[document]==""&&$housing[document]=="")
$document_req="OK";
//echo "prix avant extra : ".$amount."<br>";
echo "<script language=’javascript’>
window.location.replace(’../index.php?page=ParticipantPayment’) //window.location.replace(’n
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
</script>
";
/*********************/
}
/*********************/
?>
</BODY>
</HTML>
fichier new_order.php
<?
/*** Order **
v 1.3
************/
/**Configuration de connexion**/
session_start();
73
-->
</style>
</head>
<body bgcolor="#FFFFFF" text="#000000" class="main">
<table width="80%">
<tr>
<td><H2>FACTURE</h2></td>
<td>
<form action="new_order.php?id_registration=<? echo $_GET[’id_registration’];?>" method="post
<?
echo"<input type=’submit’ value=’print’ name=’print’> ";
?>
</form>
</td>
<td align="right">
<form action="../index.php?page=ParticipantPayment" method="post">
<?
echo"<input type=’submit’ value=’back to payment list’ name=’back to payment list’> ";
?>
</form>
</td>
</tr>
</table>
require_once("../../conf.php");
//********Language**************/
if(isset($_SESSION[’language’]))
require_once(ROOT_DIR_PATH."/common/lang/".$_SESSION[’language’]);
$requiredUserLevel = array(1, 2);
require(ROOT_DIR_PATH."/common/phpSecurePages/secure.php");
require_once(ROOT_DIR_PATH."common/service/service.php");
<hr width="90%" style="background-color: #000000" noshade>
<table>
<tr valign=top>
<td width="50%"><b>Ref :</b></td>
<td><?
echo"
# $registration[id_registration]
";
?>
</td>
</tr>
// Connexion à la base
//$db_link = mysql_connect(SQL_SERVEUR,SQL_USER,SQL_PASSWD);
<tr valign=top>
<td><b>Customer :</b></td>
<td><?
echo"
/******** Amount Calculate ********/
$registration[mr] $registration[first_name] $registration[last_name]<br>
$registration[adress]<br>
//$select_evenement=mysql_db_query(SQL_BDD,"select * from evenement",$db_link);
$registration[zip_code] $registration[city]<br>
$select_evenement = Service::SelectAll("evenement");
$registration[city] <br>&nbsp
$evenement=mysql_fetch_array($select_evenement);
";
?>
//$select_registration=mysql_db_query(SQL_BDD,"select * from registration where
id_registration=’".$_GET[’id_registration’]."’",$db_link);
</td>
$select_registration = Service::select_where("registration","id_registration",$_GET[’id_registration’]);
</tr>
$registration=mysql_fetch_array($select_registration);
<tr>
//$select_categories=mysql_db_query(SQL_BDD,"select * from categories where id_categories=’".$registration[id_categories]."’",$db_link);
<td><b>Telephone :</b></td>
$select_categories = Service::select_where("categories","id_categories",$registration[id_categories]);
<td><?
$categories=mysql_fetch_array($select_categories);
echo"
$registration[phone]
/**********************************/
";
?>
?>
</td>
<html>
</tr>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<tr>
<title>Invoice</title>
<td><b>E-Mail Address :</b></td>
<link rel="stylesheet" href="<? echo $ROOT_URL ?>admin/css.css" type="text/css">
<td><?
<style type="text/css">
echo"
$registration[email]
<!-";
body {
?>
margin: 10px 40px 0px 40px;
</td>
text-align: left;
</tr>
font: 12px sans-serif, tahoma, verdana, geneva, helvetica, arial;
</table>
color: #666666;
<br>
}
<br>
Les pauses café et les repas de midi sont inclus dans le prix indiqué.
.line1{
<br>
font-size : 12px;
<br>
font-family : Verdana, arial, helvetica, sans-serif;
background-color : #CCCCCC;
<br><br>
}
<table border="0" width="90%" cellspacing="0" cellpadding="2" border=0>
<tr class="line1">
.line2{
<td width="10%">Qty.</td>
font-size : 10px;
<td width="50%">Label</td>
font-family : Verdana, arial, helvetica, sans-serif;
<td width="20%">Price</td>
background-color : #DDDDDD;
<td width="20%">Total</td>
}
</tr>
.line3{
font-size : 10px;
font-family : Verdana, arial, helvetica, sans-serif;
background-color : white;
}
.line4 {
font-size : 12px;
font-family : Verdana, arial, helvetica, sans-serif;
color : #333333;
background-color : #c6c3bd;
}
Y. Morère
<?
// Registration
echo "prix de registration: ".$registration[amount];
$amount = $registration[amount];
//$select_extra_registration=mysql_db_query(SQL_BDD,"select * from extra_registration where
$select_extra_registration =Service::select_where("extra_registration","id_registration",$_
echo "id_registration :".$_GET[’id_registration’];
while ($row = mysql_fetch_array($select_extra_registration))
{
$extra_tab[$row[’id_extra’]] = $row[’number’];
}
L.A.S.C.
Documentation phpMyConferences Version 0.1
// echo "foreach extra_tab :".var_dump($extra_tab)."<br>";
if ($extra_tab!=NULL) //si pas d’extra à l’enregistrement
{
foreach($extra_tab as $id_extra => $number)
{
74
while($extra_registration=mysql_fetch_array($select_extra_registration))
{
if($line==2)
$line=3;
else
$line=2;
// echo "passe...";
//
echo "number = ".$number." id extra = ".$id_extra;
//$select_extra=mysql_db_query(SQL_BDD,"select * from extra where id_extra=$extra_registratio
//$select_extra=mysql_db_query(SQL_BDD,"select price from extra where id_extra=$id_extra",$db_link);
$select_extra = Service::select_champ_where("price","extra","id_extra",$id_extra);
$select_extra = Service::select_where("extra","id_extra",$extra_registration[id_extra]);
$extra=mysql_fetch_array($select_extra);
$extra=mysql_fetch_array($select_extra);
$amount=$amount-($extra[price]*$number);
}
$amount_temp=$extra[price]*$extra_registration[number];
}
if ($amount_temp!=0)
{
$amount=$categories[prices];
echo"
echo"
<tr class=’line$line’>
<tr class=’line2’>
<td width=’10%’>$extra_registration[number]</td>
<td width=’10%’>1</td>
<td width=’50%’>$extra[name]</td>
<td width=’50%’>$categories[name]</td>
<td width=’20%’>$extra[price]</td>
<td width=’20%’>$amount</td>
<td width=’20%’>$amount_temp</td>
<td width=’20%’>$amount</td>
</tr>
</tr>
";
";
$amount+=$amount_temp;
}
}
$amount=$categories[prices];
?>
// echo "le prix est :".$amount=$categories[prices]."<br>";
<tr class="line3" align="right">
//CSS
<td colspan=4>&nbsp</td>
$line=2;
</tr>
?>
<tr class="line1" align="right">
<td colspan=4><b>Total :</b> <? echo "$amount $evenement[currency]";?> </td>
<?
</tr>
// Housing
</table>
<BR>
if($registration[housing_presence]!="")
<table border="0" width="90%" cellspacing="0" cellpadding="2" border=0>
{
<tr class="line4">
$select_housing_registration = Service::select_where("housing_categories","id_categories",$categories[id_categories]);
<td colspan="2">Required documents</td>
//pb avec ce qui est retourné dans $select_housing_registration
</tr>
//$select_housing_registration=mysql_db_query(SQL_BDD,"select * from housing_categories
<?
where id_categories=$categories[id_categories]",$db_link);
$housing_registration=mysql_fetch_array($select_housing_registration);
/***Required document***/
$select_required_document = Service::select_where("document_categories","id_categories",$regi
$select_housing = Service::select_where("housing","id_housing",$housing_registration[id_housing]);
//$select_required_document=mysql_db_query(SQL_BDD,"select * from document_categories where i
//$select_housing=mysql_db_query(SQL_BDD,"select * from housing where id_housing=$housing_registration[id_housing]",$db_link);
$housing=mysql_fetch_array($select_housing);
if(mysql_num_rows($select_required_document)==0 && ($registration[housing_presence]=="" || $h
{
$night=explode("|",$registration[housing_presence]);
echo "
// echo "registration[housing_presence] : $registration[housing_presence]<br>"; <tr colspan=’2’ class=’line2’>
// echo "night0 : $night[0]<br>";
<td align=’center’><i>Any documents</i></td>
// echo "night1 : $night[1]<br>";
</tr>
// echo "night : ".count($night)."<br>";
";
for($i=0;$i<sizeof($night);$i++)
}
{
else
if($line==2)
{
$line=3;
while($categories_document=mysql_fetch_array($select_required_document))
else
{
$line=2;
$select_document = Service::select_where("document","id_document",$categories_document[id_doc
// echo "nb_nuit : $night[$i]<br>";
//$select_document=mysql_db_query(SQL_BDD,"select * from document where id_document=$categori
if (trim($night[$i])!="")
{
$document=mysql_fetch_array($select_document);
$nb_nuit=count(explode(":",$night[$i]));
if($line==2)
}
else
$line=3;
{
else
$line=2;
$nb_nuit=0;
}
echo "
// echo "nb_nuit : $nb_nuit<br>";
<tr class=’line$line’>
// $nb_nuit=trim($night[$i]);
<td>&nbsp&nbsp<b>$document[name]</b> :</td>
$prix_nuits=$housing[price_registration]*$nb_nuit;
<td>".nl2br($document[description])."</td>
if($nb_nuit!=0) //n’affiche que les hotels fréquentés
</tr>
{
echo"
";
}
<tr class=’line$line’>
<td width=’10%’>1</td>
if($registration[housing_presence]!=""&&$housing[document]!="")
<td width=’50%’>$housing[name] (".$nb_nuit.")</td>
echo "
<td width=’20%’>$housing[price_registration]</td>
<tr class=’line2’>
<td width=’20%’>$prix_nuits</td>
<td colspan=’2’>&nbsp&nbsp$housing[document]</td>
</tr>
</tr>
";
";
}
}
$amount+=$housing[price_registration]*$nb_nuit;
$housing_registration=mysql_fetch_array($select_housing_registration);
?>
if ($housing_registration!=NULL)
{
</table>
$select_housing = Service::select_where("housing","id_housing",$housing_registration[id_housing]);
<BR>
$housing=mysql_fetch_array($select_housing);
<table border="0" width="90%" cellspacing="0" cellpadding="2" border=0>
// echo "housing : ".var_dump($housing)."<br>";
<tr class="line4">
// $test2=implode(" | ",$housing);
<td colspan=2>Please mail documents to :</td>
//echo "$test2<br>";
</tr>
}
<tr class="line2">
}
<td width="2%"></td>
}
<td>
<?
?>
echo nl2br($evenement[mail_document]);
?>
<?
</td>
// Extra
</tr>
</table>
$select_extra_registration = Service::select_where("extra_registration","id_registration",$_GET[’id_registration’]);
<br>
//$select_extra_registration=mysql_db_query(SQL_BDD,"select * from extra_registration
where id_registration=’".$_GET[’id_registration’]."’",$db_link);
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
<table border="0" width="90%" cellspacing="0" cellpadding="2" border=0>
<tr class="line4">
<td colspan=3>Payment methods :</td>
</tr>
<?
$select_payment = Service::SelectAll("payment");
//$select_payment=mysql_db_query(SQL_BDD,"select * from payment",$db_link);
$line=2;
while($payment=mysql_fetch_array($select_payment))
{
if($line==2)
$line=3;
else
$line=2;
echo"
<tr class=’line$line’>
<td width=’2%’></td>
<td valign=’top’ width=’20%’>";
echo "<b>".nl2br($payment[name])." :</b>";
echo"
</td>
<td width=’70%’>";
echo nl2br($payment[description]);
echo"
</td>
</tr>";
}
?>
</table>
<br>
<?
if(isset($_POST[’print’]))
{
echo"
<script language=’javascript’>
window.print();
</script>";
}
?>
</body>
</html>
75
padding: 0px;
}
input.red, textarea.red, select.red
{
background-color: #D89A8F;
font-family: verdana, arial, sans-serif;
font-size: 10px;
color: WHITE;
padding: 0px;
}
info {
text-align: left;
font: 10px sans-serif, tahoma, verdana, geneva, helvetica, arial;
color: #666666;
}
-->
</style>
<SCRIPT>
<!-function Lien() {
i = document.registration.list_categories.selectedIndex;
if (i == 0) return;
url = document.registration.list_categories.options[i].value;
window.location.href= url;
}
// -->
</SCRIPT>
</head>
<BODY>
<div id="Header" align="center"></div>
<h1><center><font color="#0000FF">Inscription à la conférence</font> - Conference registrati
<?
/**** SUBMISSION OVER****/
$today = date("Y-m-d");
if($today>$evenement[’registration_deadline’])
{
echo "<center><h1>REGISTRATION PHASE IS OVER</h1></center>";
exit;
}
/************************/
?>
<p><font color="#0000FF">Apres avoir valider votre inscription, vous serez redirigé automatiq
<p><font color="#0000FF">Vous receverez dans quelques secondes un mail de confirmation.</font
<br><br>
<p><font color="#0000FF">Tous les champs marqués en <font color="#D89A8F">rouge</font> sont o
All the following fields marked in <font color="#D89A8F">red</font> are mandatory.</p>
fichier registration.php
<?
/****** Registratrion form *****
<form name="registration" method="post" action="registration.php" >
<input type="hidden" name="id_categories" value="<? echo $_GET[’id_categories’];?>">
<h5>
<table width="95%" border="0">
V 2.2
*******************************/
require_once("../conf.php");
<tr>
<td width="3%" height="20">&nbsp;</td>
<td colspan=2 height="20" bgcolor="#CCCCCC"><b><font color="#0000FF">Informations pers
</tr>
//*********Service*************/
require_once(ROOT_DIR_PATH."common/service/service.php");
<tr>
session_start();
// Link to database
$db_link = mysql_connect(SQL_SERVEUR,SQL_USER,SQL_PASSWD);
$select_evenement = Service::SelectAll("evenement");
$evenement=mysql_fetch_array($select_evenement);
include (ROOT_DIR_PATH."/archive/log/log.inc.php");
<td width="3%" height="40">&nbsp;</td>
<td width="47%" height="40"><font color="#0000FF">Choisissez votre statut</font> - Your
<td width="50%" height="40">
<?
//$select_categories=mysql_db_query(SQL_BDD,"select * from categories",$db_link);
$select_categories = Service::SelectAll("categories");
echo"
<select name=’list_categories’ onChange=’Lien()’ class=’red’>
<option value=\"\"></option>";
/******* FUNCTION *************/
$error=0;
require_once(ROOT_DIR_PATH."controle.php");
/*****************************/
?>
<HTML>
<head>
<title>Registration of participation</title>
<style type="text/css">
BODY{
font-family: verdana, arial, sans-serif;
font-size: x-small;
background-color: #f3e7b7;
}
<!-*{
font-size: x-small;
}
input, textarea, select {
background-color: #CCCCCC;
font-family: verdana, arial, sans-serif;
font-size: 10px;
color: #333333;
Y. Morère
while($categories=mysql_fetch_array($select_categories))
{
if($categories[’id_categories’]==$_GET[’id_categories’]){
echo "<option value=’registration.php?id_categories=".$categories[’id_categories’]."’ selecte
}else{
echo "<option value=’registration.php?id_categories=".$categories[’id_categories’]."’>".$cate
}
}
echo"
</select>
";
if(isset($_GET[’id_categories’]))
{
$select_categories_id = Service::select_where("categories","id_categories",$_GET[’id_categori
//$select_categories_id=mysql_db_query(SQL_BDD,"select * from categories where id_categories=
$categories_id=mysql_fetch_array($select_categories_id);
}
?>
</td>
</tr>
<tr>
L.A.S.C.
Documentation phpMyConferences Version 0.1
76
<td width="3%" height="40">&nbsp;</td>
modifie($_POST[’city’])
<td width="47%" height="40"><font color="#0000FF">Prix de l’inscription</font>
?>></input>
- Registration fee</td>
<td width="50%" height="40">
</td>
<?
</tr>
if($categories_id[’prices’]!="")
<tr>
echo $categories_id[’prices’]." ".$evenement[’currency’];
<td width="3%" height="40">&nbsp;</td>
<td width="47%" height="40"><font color="#0000FF">Code postal</font> - Zip code</td>
$amount=$categories_id[’prices’];
<td width="50%" height="40">
echo "<input type=’hidden’ name=’amount’ value=’".$amount."’>";
<input type="textarea" name="zip_code" size=20 <?
?>
modifie($_POST[’zip_code’]);
</td>
?>></input>
</tr>
</td>
<?
</tr>
if($categories_id[’document’]!="")
echo"
<tr>
<tr>
<td width="3%" height="40">&nbsp;</td>
<td width=’3%’ height=’40’>&nbsp;</td>
<td width="47%" height="40"><font color="#0000FF">Pays</font> - Country</td>
<td width=’47%’ height=’40’ valign=top>Documents requis :</td>
<td width="50%" height="40">
<td width=’50%’ height=’40’>
<input type="textarea" name="country" size=20 value="<?
<font color=’#D89A8F’ >".$categories_id[’document’]."</font>
echo $_POST[’country’];
</td>
?>"></input>
</tr>";
</td>
</tr>
if($categories_id[’online_information’]!="")
{
echo"
<tr>
<td width=’3%’ height=’40’>&nbsp;</td>
<td width=’47%’ height=’40’ valign=top>Documents requis
<td width=’50%’ height=’40’>
$categories_id[online_information]
</td>
</tr>";
}
<tr>
: </td>
if($categories_id[’description’]!="")
echo"
<tr>
<td width=’3%’ height=’40’>&nbsp;</td>
<td width=’47%’ height=’40’ valign=top>Remarques :</td>
<td width=’50%’ height=’40’>".
$categories_id[’description’]."
</td>
</tr>";
?>
<tr>
<td width="3%" height="40">&nbsp;</td>
<td width="47%" height="40">&nbsp;</td>
<td width="50%" height="40">
<input type=radio name=mr value="mrs."> Mrs.
<input type=radio name=mr value="mr"> Mr.
</td>
</tr>
<td width="3%" height="40">&nbsp;</td>
<td width="47%" height="40"><font color="#0000FF">Téléphone</font> - Phone</td>
<td width="50%" height="40">
<input type="textarea" name="phone" size=20 value="<?
echo $_POST[’phone’];
?>"></input>
</td>
</tr>
<tr>
<td width="3%" height="40">&nbsp;</td>
<td width="47%" height="40">Fax</td>
<td width="50%" height="40">
<input type="textarea" name="fax" size=20 value="<?
echo $_POST[’fax’];
?>"></input>
</td>
</tr>
<tr>
<td width="3%" height="40">&nbsp;</td>
<td width="47%" height="40">Email</td>
<td width="50%" height="40">
<input type="textarea" name="email" size=50 <?
modifie($_POST[’email’]);
?>></input>
</td>
</tr>
<tr>
<td width="3%" height="40">&nbsp;</td>
<?
<td width="47%" height="40"><font color="#0000FF">Prenom</font> - Firstname</td>
if(isset($_GET[’id_categories’]))
<td width="50%" height="40">
{
<input type="textarea" name="first_name" size=50 <?
//selectionne les hebergements correspondant ~
A la catégorie et effectue les operations suiva
modifie($_POST[’first_name’])
$select_housing_categories = Service::select_where("housing_categories","id_categories",$_GET
?>></input>
</td>
while($housing_categories=@mysql_fetch_array($select_housing_categories))
</tr>
{
echo "
<tr>
<tr>
<td width="3%" height="40">&nbsp;</td>
<td width=’3%’ height=’20’>&nbsp;</td>
<td width="47%" height="40"><font color="#0000FF">Nom</font> - Lastname</td>
<td colspan=2 height=’20’ bgcolor=’#CCCCCC’><b>Logement</b></td>
<td width="50%" height="40">
</tr>
<input type="textarea" name="last_name" size=50 <?
";
modifie($_POST[’last_name’])
?>></input>
//selectionne les hotels où les jours de reservation ne sont pas nuls
$select_used_places = Service::select_2where_2not("registration","id_categories",$_POST[’id_c
</td>
</tr>
$used_places=mysql_num_rows($select_used_places);
$select_housing = Service::select_where("housing","id_housing",$housing_categories[id_housing
<tr>
$housing=@mysql_fetch_array($select_housing);
<td width="3%" height="40">&nbsp;</td>
$housing_price[$housing[id_housing]]=$housing[price_registration];
<td width="47%" height="40"><font color="#0000FF">Organisme</font> - Affiliation</td>
if($used_places<$housing[max_place])
<td width="50%" height="40">
{
<input type="textarea" name="compagny" size=50 <?
echo "
modifie($_POST[’compagny’])
<tr>
?>></input>
<td width=’3%’ height=’40’>&nbsp;</td>
</td>
<td width=’47%’ height=’40’>Lieux :</td>
</tr>
<td width=’50%’ height=’40’>
$housing[name]
<tr>
</td>
<td width="3%" height="40">&nbsp;</td>
</tr>
<td width="47%" height="40"><font color="#0000FF">Adresse postale</font> - Regular mail</td>
<td width="50%" height="40">
<tr>
<input type="textarea" name="adress" size=50 <?
<td width=’3%’ height=’40’>&nbsp;</td>
modifie($_POST[’adress’])
<td width=’47%’ height=’40’>Prix par nuit :</td>
?>></input>
<td width=’50%’ height=’40’>";
</td>
</tr>
if($housing[price_registration]!="")
echo $housing[price_registration]." ".$evenement[currency];
<tr>
<td width="3%" height="40">&nbsp;</td>
//
<input type=’hidden’ name=’night_price’ value=".$housing[price_registration].">
<td width="47%" height="40"><font color="#0000FF">Ville</font> - City</td>
<td width="50%" height="40">
echo"
<input type="textarea" name="city" size=50 <?
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
77
<input type=’hidden’ name=’housing_tab[$housing[id_housing]]’ value=".$housing[price_registration].">
if(!checkdate($month, $day, $year))
</td>
{
</tr>";
$day="01";
$month++;
if($housing[description]!="")
}
{
}
echo"
<tr>
<td width=’3%’ height=’40’>&nbsp;</td>
if(strlen($month)<2)
<td width=’47%’ height=’40’>Remarques :</td>
$month="0$month";
<td width=’50%’ height=’40’>
$housing[description]
if($month>12)
</td>
{
</tr>";
$month=1;
}
$year++;
}
if($housing[document]!="")
echo"
if(strlen($year)<2)
<tr>
$year="0$year";
<td width=\"3%\" height=\"40\">&nbsp;</td>
}
<td width=\"47%\" height=\"40\" valign=top>Documents requis :</td>
/**********************/
<td width=\"50%\" height=\"40\">
?>
<font color=\"#D89A8F\" >$housing[document]</font>
</td>
</td>
</tr>";
</tr>
if($housing[remarque]!="")
echo"
<tr>
<td width=’3%’ height=’40’>&nbsp;</td>
<td width=’47%’ height=’40’ valign=top>Remarque :</td>
<td width=’50%’ height=’40’>
$housing[remarque]
</td>
</tr>";
/** DAY OF PRESENCE **/
echo"
<tr>
<td width=\"3%\" height=\"40\">&nbsp;</td>
<td width=\"47%\" height=\"40\" valign=\"top\">Places disponibles</td>
<td width=\"50%\" height=\"40\">";
$tab_date=explode(" | ",$housing[date]);
<?
/************ EXTRA ******************/
if(isset($categories_id[’id_categories’]))
{
$select_extra_categories = Service::select_where("extra_categories","id_categories",$_GET[’id
while($extra_categories=@mysql_fetch_array($select_extra_categories))
{
$select_extra = Service::select_2where_2not("extra","id_extra",$extra_categories[id_extra],"a
$extra=mysql_fetch_array($select_extra);
$extra_price[$extra[id_extra]]=$extra[price];
echo"
<tr>
<td width=’3%’ height=’40’>&nbsp;</td>
<td width=’47%’ height=’40’><B>$extra[name] ($extra[price] $evenement[currency]) :</B></td>
<td width=’50%’ height=’40’>
<select name=’extra_tab[$extra[id_extra]]’>
<option value=’0’>0</option>
<option value=’1’>1</option>
for($i=0;$i<=sizeof($tab_date)&&$tab_date[$i]!="";$i++)
{
echo " <input type=’checkbox’ name=’presence[$housing[id_housing]][]’ value=’$tab_date[$i]’
class=’noborder’> $tab_date[$i]<BR>";
</select>
}
</td>
/**********************/
</tr>";
echo "
</td>
</tr>
";
}
else
{
echo"
<tr>
<td width=\"3%\" height=\"40\">&nbsp;</td>
<td colspan=2> Plus de place disponible.</td>
</tr>";
if($extra[’description’]!="")
echo"
<tr class=\"info\">
<td width=’3%’ valign=’top’><img src=’information.gif’></td>
<td width=’47’ colspan=\"2\">".$extra[’description’]."</td>
</tr>";
}
$select_extra = Service::select_where("extra","all_categories","all");
//$select_extra=mysql_db_query(SQL_BDD,"select * from extra where all_categories=’all’ ",$db_
while($extra=mysql_fetch_array($select_extra))
{
$extra_price[$extra[id_extra]]=$extra[price];
}
echo"
}
<tr>
}
<td width=’3%’ height=’40’>&nbsp;</td>
<td width=’47%’ height=’40’><font color=’#0000FF’><B>$extra[name] ($extra[price] $evenement
?>
<td width=’50%’ height=’40’>
<select name=’extra_tab[$extra[id_extra]]’>
<tr>
<option value=’0’>0</option>
<td width="3%" height="20">&nbsp;</td>
<option value=’1’>1</option>
<td colspan=2 height="20" bgcolor="#CCCCCC"><b><font color="#0000FF">Informations
complémentaires</font></b></td>
<option value=’2’>2</option>
</tr>
<option value=’3’>3</option>
<tr>
<option value=’4’>4</option>
<td width="3%" height="40">&nbsp;</td>
</select>
<td width="47%" height="40" valign="top"><font color="#0000FF">Présence aux
repas de midi (inclus)</font></td>
</td>
<td width="50%" height="40">
</tr>";
<? /** DAY OF PRESENCE **/
if($extra[description]!="")
$first_day = $evenement[date_debut];
echo"
list($year, $month, $day) = split(’[-:\ ]’, $first_day);
<tr class=\"info\">
while("$year-$month-$day"<=$evenement[date_fin])
<td width=\"3%\" valign=\"top\">&nbsp;
{
</td>
<td width=\"47%\" colspan=\"2\"><font color=\"#0000FF\">$extra[description] </font></td>
</tr>";
if (($tab_presence) and in_array("$day-$month-$year", $tab_presence)) {
}
echo " <input type=’checkbox’ name=’tab_presence[]’ value=’$day-$month-$year’} class=’red’ checked/> $day $month $year<br />";
} else {
?>
echo " <input type=’checkbox’ name=’tab_presence[]’ value=’$day-$month-$year’ class=’red’ /> $day $month $year<br/ >";
<tr>
}
<td width="3%" height="40">&nbsp;</td>
<td width="50%">
$day++;
<input type="submit" name="validate" value="Validation ">
</td>
if(strlen($day)<2)
</tr>
$day="0$day";
</table>
if($day>=28)
</h5>
{
</form>
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
78
<?
/****** UPDATE *******/
ecriture_log("ERROR on the database : ".mysql_errno());
}
else
{*/
echo $error;
if($error==0&&isset($_POST[’validate’]))
{
/**** ERROR CONTROL ****/
if(!isset($_POST[’id_registration’]))
$id_registration=$insert_registration;
if(isset($_POST[’extra_tab’]))
if($_POST[’id_categories’]=="")
foreach($_POST[’extra_tab’] as $id_extra => $number)
{
{
echo "<script language=’javascript’>alert(\"you must choose a status.\")</script>";
exit;
if($number>0)
}
{
$insert_registration = Service::insert_trois_trois("extra_registration","id_extra","id_regist
/***********************/
}
/** Database update **/
}
// Log file
if(isset($_POST[’presence’])){
ecriture_log("Register : ".$_POST[’first_name’]." ".$_POST[’last_name’]);
echo "post_presence : ".$_POST[’presence’]."var_dump(presence) : ".";<br>";var_dump($_POST[’presence’]);echo "<br>";
$nuit_presence=$_POST[’presence’];
//Send a confirmation mail
//il faut stocker les dates pour chaque hotel
$mail=$_POST[’email’];
//$night_presence=implode(" | ",$_POST[’presence’]); //contient nb_hotel tableau
$file="registration";
$name=$_POST[’last_name’];
// $night_presence1=implode(" | ",$nuit_presence[1]);
include(ROOT_DIR_PATH."/common/mail/send_mail.inc.php");
// $night_presence2=implode(" | ",$nuit_presence[2]);
// echo "les nuits d’hebergement réservées sont : ".$night_presence."<br>"; echo "<script language=\"javascript\">
// echo "les nuits d’hebergement réservées sont : ".$night_presence1." ça fait".count($nuit_presence[1])."<br>";
window.open(’order.php?id_registration=’".$_POST[’id_registration’]."’,’registration’)
// echo "les nuits d’hebergement réservées sont : ".$night_presence2." ça fait".count($nuit_presence[2])."<br>";
</script>
}
";
if(isset($_POST[’tab_presence’]))
$day_presence=implode(" | ",$_POST[’tab_presence’]);
//}
if($categories_id[document]==""&&$housing[’document’]=="")
$document_req="OK";
/*********************/
echo "
<script language=’javascript’>
<!--//
window.location.replace(’".ROOT_URL."’);
//-->
</script>";
/*** amount ***/
$extra_temp=$_POST[’extra_tab’];
$tableau_extra=implode(" | ",$_POST[’extra_tab’]);
echo "tableau extra : ".$tableau_extra."<br>";
$housing_temp=$_POST[’housing_tab’];
$tableau_housing=implode(" | ",$_POST[’housing_tab’]);
echo "tableau housing : ".$tableau_housing."<br>";
$amount = $_POST[’amount’];
echo "prix : ".$amount."<br>";
}
/*********************/
?>
</BODY>
</HTML>
if(isset($extra_temp))
foreach($extra_temp as $id_extra => $number)
{
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
$cal_extra = Service::select_where("extra","id_extra",$id_extra);
$calcul_extra = mysql_fetch_array($cal_extra);
J’avance ... cela ne me parait pas trop normal... il doit manquer un
argument.... et comment fait on pour mettre un jour quelques chose qui
n’existe pas encore
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
$amount=$amount+($calcul_extra[3]*$number);
}
update badge set width=’60’, height=’40’, font_size=’12’,
compagny=’true’ , country=’true’, description=’Ma conf’, title=’Human’
WHERE ‘id_badge‘ =’1’
$nb_hotel=count($housing_temp);
Warning: Missing argument 18 for update_huit()
echo "Nombre hotel : ".$nb_hotel."<br>";
in /drbd/drbd1/www/human07/html/common/service/service.php on line 566
$prix_hotel=0;
Warning: Missing argument 19 for update_huit()
for ($i = 1; $i <= $nb_hotel; $i++)
in /drbd/drbd1/www/human07/html/common/service/service.php on line 566
{
$nb_nuit=count($nuit_presence[$i]); //nb nuit pour chaque hotel
Warning: Missing
argument 20 for update_huit()
$tab_night_presence[$i]=implode(" : ",$nuit_presence[$i]); //pour la partie facturation
(new_order.php)
in /drbd/drbd1/www/human07/html/common/service/service.php on line 566
$prix_hotel+=$nb_nuit*$housing_temp[$i];
~
~
c
c
c
c
}
Echec dans la rA°cup
A°ration
des donn~
A°es
Veuillez v~
A°rifier
votre
requete.
$night_presence=implode(" | ",$tab_night_presence); //convertit tableau en chaine
pour (new_order.php)
echo "tableau des nuits : ".$night_presence."<br>";
echo "Prix hotel : ".$prix_hotel."<br>";
M^
eme en créant à la main le premier enregistrement, ben ça marche ...
// echo "post_night : ".$_POST[’night_price’]."<br>";
// echo "prix avant hotel : ".$amount."<br>";
// echo "jours depresence : ".sizeof($_POST[’presence’])."<br>";
// echo "prix de l’hotel : ".$_POST[’night_price’]."<br>";
// if(isset($_POST[’presence’]))
// $amount=$amount+($_POST[’night_price’]*sizeof($_POST[’presence’]));
$amount=$amount+$prix_hotel;
echo "prix apres hotel : ".$amount."<br>";
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
/**************/
if($amount==0)
$payment="OK";
Pas cool
du coup, voila la modification
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
> M^
eme en créant à la main le premier enregistrement, ben ça marche ...
>
enfin presque... il manque comme qui dirait le champ Nom_prenom dans la
table badge... si bien que les noms n’apparaissent pas sur les bagdes...
#
$insert_registration = Service::insert_registration($_POST[’id_categories’],$_POST[’mr’],addslashes($_POST[’first_name’]),addslashes($_POST[’last_name’]),addslashes($_POS
# Structure de la table ‘badge‘
#
/*if(mysql_affected_rows()<0)
CREATE TABLE badge (
{
id_badge int(11) NOT NULL auto_increment,
echo "<BR>Un probleme est survenu dans la mise à jour de la base.<BR><BR>";
title varchar(50) NOT NULL default ’’,
echo "insert into registration (id_registration, id_categories, mr, first_name, width
last_name,
title,
compagny,
adress,
int(11)
NOT NULL
default
’0’, city, state, zip_code, country, phone, fax, email, com
echo mysql_errno().": ".mysql_error()."<br>";
height int(11) NOT NULL default ’0’,
font_size int(11) NOT NULL default ’0’,
// On importe les informations de la session pour le log
nom_prenom varchar(5) NOT NULL default ’’,
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
compagny varchar(5) NOT NULL default ’’,
country varchar(5) NOT NULL default ’’,
description varchar(250) NOT NULL default ’’,
PRIMARY KEY (id_badge)
) TYPE=MyISAM;
79
remplacer les chmod 777 dans le fichier install.sh par des chmod 770
pour les répertoires, et pour les fichiers (comme php.conf qui contient
le mot de passe d’accès à la base de données).
et les données
INSERT INTO badge (id_badge, title, width, height, font_size,
nom_prenom, compagny, country, description) VALUES (1, ’Human’, 60, 40,
12, ’’, ’TRUE’, ’TRUE’, ’Ma conf’), (2, ’Etiquette Human’, 0, 0, 0, ’’,
’’, ’’, ’’);
pour avoir aussi pour les étiquettes
et la modif de la requ^
ete dans badge_generator.inc.php (strtoupper
pour mettre en majuscule dans la table, mieux pour la gestion du PDF)
pour éviter un warning lors de la consultation des log j’ai ajouté le
petit test suivant dans le
fichier /html/admin/administration/log.inc.php
remplacer
$fcontents = file( $_GET[’nom_fichier’] );
par
if ($_GET[’nom_fichier’]!="")
{
$fcontents = file( $_GET[’nom_fichier’] );
}
Yann
$update_badge=mysql_db_query(SQL_BDD,"update badge set
width=’".$_POST[’width’]."’, height=’".$_POST[’height’]."’,
font_size=’".$_POST[’font_size’]."’,
nom_prenom=’".strtoupper($_POST[’name’])."’,
compagny=’".strtoupper($_POST[’compagny’])."’ ,
country=’".strtoupper($_POST[’country’])."’,
description=’".$_POST[’description’]."’, title=’".$_POST[’title’]."’
WHERE ‘id_badge‘ =’1’ ",$db_link);
puis il faut modifier pour prendre en compte l’apparition ou non du
nom-prénom sur le badge
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
dans le fichier /html/admin/participants/payment.inc.php, il faut
remplacer
<td bgcolor="#BFC4CB"><b><font color="#333333"><? echo
$strSummary ?></font></b></td>
par
<td bgcolor="#BFC4CB"><b><font
color="#333333"><? echo $strPayment ?></font></b></td>
la checked box dans badge_generator.inc.php
<DEFANGED_input type="checkbox" name="name" class="orange"
value="true" checked > <? echo "$strFirstName & $strLastName"?><br>
pour avoir le bon intitulé dans la page;
puis la gestion dans badge_generator.inc.php
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
$pdf->SetFont(’Arial’,’B’,$badge[font_size]);
if ($badge[nom_prenom]=="TRUE"){
$pdf->Cell($badge[width],$height,$registration[first_name]."
".$registration[last_name],’LR’,1,’C’);} else{
//il faut passer une ligne vide
$pdf->Cell($badge[width],$height,"",’LR’,1,’C’);
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ya encore un pbn avec le logo de la conf, il est pile poil sur le titre
de la conf....
Yann
Comme je viens d’^
etre confronté au pb, (j’ai résolu en utilisant la
bonne volonté des utilisateurs et le champs theme de la table article)
ce serait bien de pouvoir indiquer dans une partie du site de
l’administration les différents thèmes et sous-thèmes de la conférence
et de faire appara^
ıtre cela dans le formulaire de soumission d’article
Pour l’instant j’utilise le champs theme-keywords pour y mettre ces
informations
ben il suffit de de commenter une ligne et d’en décommenter une autre ;)
voila
if(file_exists("logo.jpg")) {
list($im_width, $im_height, $im_type, $im_attr) =
getimagesize("logo.jpg"); // echo "Image size : $im_width X $im_height";
// $pdf->Image("logo.jpg",($logoX+1)+($badge[width]$im_width*($height-2)/$im_height)/2, ($logoY+1), ’’, ($height-2));
$pdf->Image("logo.jpg",($logoX+1), ($logoY+1), ’’, ($height-2)); };
ce serait biende pouvoir choisir
ou mettre l’image de logo ;)
une liste déroulante en plus ....
Yann
PS : je pense que je vais devoir faire la m^
eme chose avec
d’étiquettes ;)
la création
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Petit bug corrigé dans user/article.php il était possible d’envoyer un
article sans avoir rempli le champs résumé
il faut modifier textarea_control("abstract",$abstract); par
textarea_control("abstract",$_POST[’abstract’]);
dans la partie concernée
<td width="47%"
height="40"><font color="#0000FF">Résumé (200 mots
max)</font><br>Abstract (Maximum 200 words)</td> <td width="50%"
height="40"> <? textarea_control("abstract",$_POST[’abstract’]); ?>
</td>
la voici :
Yann
$update_badge=mysql_db_query(SQL_BDD,"update badge set
width=’".$_POST[’width’]."’, height=’".$_POST[’height’]."’,
font_size=’".$_POST[’font_size’]."’,
nom_prenom=’".strtoupper($_POST[’name’])."’,
compagny=’".strtoupper($_POST[’compagny’])."’ ,
country=’".strtoupper($_POST[’country’])."’,
description=’".$_POST[’description’]."’, title=’".$_POST[’title’]."’
WHERE ‘id_badge‘ =’2’ ",$db_link);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Bonsoir,
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Lorsque les utilisateurs ont modifiés une fois leurs données à l’aide
de l’adresse fournie dans l’email,
par exemple
http://human07.univ-metz.fr/user/info_user.php?pass=zhSEHnOHGtyu6&id=35
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
comment font ils pour se reconnecter plus simplement que par
J’ai d’ailleurs une question concernant le champ "comments" dans la
table "registration"... il a été enlevé ou ai je une vieille version de
la bdd
http://human07.univ-metz.fr/user/info_user.php?pass=mon_nouveau_mot_de_passe&id=35
Je l’ai enlevé des requ^
etes concernant la mise à jour des données
Pourquoi ne pas passer par un php-secure page ?
Yann
eest-ce difficile?
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
YAnn
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Bonjour,
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Afin de pouvoir ajouter un logo dans le
rep /html/admin/participants/pdf il faut qu’il soit utilisable en
écriture
ben non pas trop difficile finalement
pour re modifier données perso et mot de passe
D’ou un chmod 770 /html/admin/participants/pdf
voila le code source à modifier du fichier info_user.php, bon encore un
p’tit soucis, il faut modifier son mot de pass à chaque modification
D’ailleurs en parlant des droits sur la fichiers, je suis d’avis de
/******* DATA *******/
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
$premiere_connexion=1;
//modif par yann pour avoir phpsecurepage
if (isset($_GET[’id’])){
$id = $_GET[’id’];
} elseif(isset($_POST[’id’])) {
$id = $_POST[’id’];
} else {
//echo "Error : you have tried to access a protected page.";
//exit;
$premiere_connexion=0;
}
if (isset($_GET[’pass’])){
$pass = $_GET[’pass’];
} elseif(isset($_POST[’pass’])) {
$pass = $_POST[’pass’];
} else {
//echo "Error : you have tried to access a protected page.";
//exit;
$premiere_connexion=0;
}
if ($premiere_connexion==0)
{
/**** PROTECT MODE ****/
$select_access = Service::SelectAll("evenement");
//$select_access=mysql_db_query(SQL_BDD,"select * from
evenement",$db_link); $access=mysql_fetch_array($select_access);
if($access[access]!="everybody")
{
//require(ROOT_DIR_PATH."/common/phpSecurePages/functions.inc.php");
require(ROOT_DIR_PATH."/common/phpSecurePages/secure.php");
$requiredUserLevel = array(1,2,3);
}
//var_dump($access);
//var_dump($ID);
/*********************/
//modif par yann
//$select_personne =
Service::select_where("personne","id_personne",$id); $select_personne =
Service::select_where("personne","id_personne",$ID); }
else
{
$select_personne = Service::select_where("personne","id_personne",$id);
}
//var_dump($select_personne);
$personne = mysql_fetch_array($select_personne);
//var_dump($personne);
if ($premiere_connexion==1)
{
if ($pass != $personne[’passe_personne’]) {
echo "Error : you have tried to access a protected page.";
exit;
}
}
$fields =
array(’mail’,’nom’,’prenom’,’ville’,’adresse’,’pays’,’tel’,’fax’);
foreach ($fields as $field) { if(!isset($_POST[$field]))
$_POST[$field] = $personne[$field];
};
80
include (ROOT_DIR_PATH."/archive/log/log.inc.php");
// Link to database
/**** FUNCTION ****/
$error=0;
require_once(ROOT_DIR_PATH."controle.php");
/********Service********/
require_once(ROOT_DIR_PATH."common/service/service.php");
/******* DATA *******/
$premiere_connexion=1;
//modif par yann pour avoir phpsecurepage
/*
if (isset($_GET[’id’])){
$id = $_GET[’id’];
} elseif(isset($_POST[’id’])) {
$id = $_POST[’id’];
} else {
//echo "Error : you have tried to access a protected page.";
//exit;
$premiere_connexion=0;
}
if (isset($_GET[’pass’])){
$pass = $_GET[’pass’];
} elseif(isset($_POST[’pass’])) {
$pass = $_POST[’pass’];
} else {
//echo "Error : you have tried to access a protected page.";
//exit;
$premiere_connexion=0;
}
*/
if (!empty($_GET[’id’])){
$id = $_GET[’id’];
} elseif(!empty($_POST[’id’])) {
$id = $_POST[’id’];
} else {
//echo "Error : you have tried to access a protected page.";
//exit;
$premiere_connexion=0;
}
if (!empty($_GET[’pass’])){
$pass = $_GET[’pass’];
} elseif(!empty($_POST[’pass’])) {
$pass = $_POST[’pass’];
} else {
//echo "Error : you have tried to access a protected page.";
//exit;
$premiere_connexion=0;
}
if ($premiere_connexion==0)
{
/**** PROTECT MODE ****/
$select_access = Service::SelectAll("evenement");
//$select_access=mysql_db_query(SQL_BDD,"select * from evenement",$db_link);
$access=mysql_fetch_array($select_access);
if($access[access]!="everybody")
{
//require(ROOT_DIR_PATH."/common/phpSecurePages/functions.inc.php");
require(ROOT_DIR_PATH."/common/phpSecurePages/secure.php");
$requiredUserLevel = array(1,2,3);
ensuite pour avoir les images de l’interface phpsecure page, il faut
}
copier le répertoire ommon/phpSecurePages/images dans user/
//var_dump($access);
//var_dump($ID);
voila on dirait que ça marche,
/*********************/
//modif par yann
Peut ^
etre serait il plus simple de mettre ces infos dans l’interface d’administration...
//$select_personne
vu que ce
= Service::select_where("personne","id_personne",$id);
sont des personnes connues (relecteurs, admin, CP)
//$select_personne = Service::select_where("personne","id_personne",$ID);
voili
//var_dump($ID);
$_POST[’ident’]=$ID;
a+
//var_dump($_POST[’ident’]);
$select_personne = Service::select_where("personne","id_personne",$ID);
Yann
}
else
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{
$_POST[’ident’]=$id;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//var_dump($_POST[’ident’]);
$select_personne = Service::select_where("personne","id_personne",$id);
bof non pas si simple, les mise à jour ne se font pas dans le cas de
}
phpsecure page
//var_dump($select_personne);
$personne = mysql_fetch_array($select_personne);
je cherche
//var_dump($personne);
/********************/
voici finalement un truc qui marche... c’est pas trop joli, mais ça
marche
Yann
fichier info_user.php
if ($premiere_connexion==1)
{
if ($pass != $personne[’passe_personne’]) {
echo "Error : you have tried to access a protected page.";
exit;
}
}
<?
session_start();
require_once("../conf.php");
Y. Morère
$fields = array(’mail’,’nom’,’prenom’,’ville’,’adresse’,’pays’,’tel’,’fax’);
foreach ($fields as $field) {
if(!isset($_POST[$field]))
L.A.S.C.
Documentation phpMyConferences Version 0.1
$_POST[$field] = $personne[$field];
81
</tr>
};
<tr>
/********************/
?>
<HTML>
<head>
<title>Inscription</title>
<style type="text/css">
BODY{
font-family: verdana, arial, sans-serif;
font-size: x-small;
}
<!-*{
font-size: x-small;
}
input, textarea, select {
background-color: #CCCCCC;
border-style: solid;
border-width: 1px;
font-family: verdana, arial, sans-serif;
font-size: 10px;
color: #333333;
padding: 0px;
}
input.red, textarea.red, select.red
{
background-color: #D89A8F;
border-style: dashed;
border-width: 1px;
font-family: verdana, arial, sans-serif;
font-size: 10px;
color: WHITE;
padding: 0px;
}
-->
</style>
</head>
<BODY>
<H2>Inscription</H2>
<td width="3%" height="40">&nbsp;</td>
<td width="47%" height="40">fax :</td>
<td width="50%" height="40">
<input type="text" name="fax" size="15" value="<? echo $_POST[’fax’]; ?>">
</td>
</tr>
<tr>
<td width="3%" height="40">&nbsp;</td>
<td width="47%" height="40">e-mail :</td>
<td width="50%" height="40">
<input type="text" name="mail" size="50" value=<?
modifie_mail($_POST[’mail’])
?>>
</td>
</tr>
<tr>
<td width="3%" height="40">&nbsp;</td>
<td width="47%" height="40">password :</td>
<td width="50%" height="40">
<input type="password" name="new_pass" size="20" class=red>
</td>
</tr>
<tr>
<td width="3%" height="40">&nbsp;</td>
<td width="47%" height="40">confirme :</td>
<td width="50%" height="40">
<input type="password" name="confirme_pass" size="20" class=red>
</td>
</tr>
<tr>
<td width="3%" height="40">&nbsp;</td>
<td width="47%">validate >></td>
<td width="50%">
<input type="submit" name="validate" value="validate">
</td>
</tr>
</table>
</p>
</form>
<p>
<?
<form method="post" action="info_user.php">
/****** UPDATE *******/
if($error==0&&isset($_POST[’validate’]))
<input type="hidden" name="id" size="20" value="<? echo $_GET[’id’];?>">
{
<input type="hidden" name="pass" size="20" value="<? echo $_GET[’pass’];?>">/*** VALIDE PASS ***/
<input type="hidden" name="ident" size="20" value="<? echo $_POST[’ident’];?>">
<table width="90%" border="0">
if($_POST[’confirme_pass’]!=$_POST[’new_pass’])
<tr>
{
<td width="3%" height="40">&nbsp;</td>
echo "<script language=’Javascript’>alert(’your password entries do not match. please retype
<td width="47%" height="40">first name :</td>
exit;
<td width="50%" height="40">
}
<input type="text" name="nom" size="20" <?modifie($_POST[’nom’]);?>>
</td>
if(strlen($_POST[’new_pass’])<5)
</tr>
{
echo "<script language=\"JavaScript\">alert(\"Your password must be at least 5 characters .\"
<tr>
exit;
<td width="3%" height="40">&nbsp;</td>
}
<td width="47%" height="40">last name :</td>
<td width="50%" height="40">
/** Database update **/
<input type="text" name="prenom" size="20" <?modifie($_POST[’prenom’]);?>>
</td>
//var_dump($_POST[’ident’]);
</tr>
$mail=strtolower($_POST[’mail’]);
$nom=strtolower($_POST[’nom’]);
<tr>
$prenom=strtolower($_POST[’prenom’]);
<td width="3%" height="40">&nbsp;</td>
$maj_personne = Service::update_douze("personne","titre",addslashes($_POST[’titre’]),"n
<td width="47%" height="40">adress :</td>
<td width="50%" height="40">
if(mysql_affected_rows($maj_personne)<0)
<input type="text" name="adresse" size="50" value="<?
{
echo $_POST[’adresse’];
// On importe les informations de la session pour le log
?>">
ecriture_log("ERROR on the database : ".mysql_errno());
</td>
}
</tr>
else
{
<tr>
// On importe les informations de la session pour le log
<td width="3%" height="40">&nbsp;</td>
ecriture_log("Update : ".$prenom." ".$nom);
<td width="47%" height="40">city :</td>
echo "<SCRIPT language=\"JavaScript\">alert(\"Information updated.\\nThank you\")</SCRIPT>";
<td width="50%" height="40">
<input type="text" name="ville" size="20" value="<? echo $_POST[’ville’]; ?>">
echo "
zipcode : <input type="text" name="cp" size="5" value="<? echo $_POST[’cp’]; ?>">
<script language=’javascript’>
</td>
<!--//
</tr>
window.location.replace(’".ROOT_URL."’);
//-->
<tr>
</script>";
<td width="3%" height="40">&nbsp;</td>
<td width="47%" height="40">country :</td>
}
<td width="50%" height="40">
/*********************/
<input type="text" name="pays" size="50" value="<? echo $_POST[’pays’];
?>">
}
</td>
</tr>
?>
</BODY>
<tr>
</HTML>
<td width="3%" height="40">&nbsp;</td>
<td width="47%" height="40">phone :</td>
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
<td width="50%" height="40">
<input type="text" name="tel" size="15" maxlenght="15" value="<? echo $_POST[’tel’]; ?>">
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
</td>
<p>All fields marked in <font color="#D89A8F">red</font> are mandatory.</p>
Y. Morère
L.A.S.C.
Documentation phpMyConferences Version 0.1
82
Dans le formulaire de soumission de papier, il est possible d’envoyé un
papier sans remplir le champs obligatoire "abstract" ou keywords..
Bonjour,
Si comme moi votre site de conference est hébergé par un serveur apache
qui autorise l’affichage du contenu des répertoires, utilisez le
fichier index.html suivant afin d’éviter le listage.
voici les modifications
<tr>
<td width="3%" height="40">&nbsp;</td>
yann@yoda:~/temp$ more index.html
<td width="47%" height="40"><font color="#0000FF">Résumé (200
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
mots max)</font><br>Abstract (Maximum 200 words)</td> <td width="50%"
"http://www.w3.org/TR/html4/loose.dtd"> <html>
height="40"> <? textarea_control("abstract",$_POST[’abstract’]); ?>
<head>
</td>
<DEFANGED_meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> </tr>
<title>Conférence human07</title>
<!-</head>
<? textarea_control("abstract",$abstract); ?>
<body>
<input type"textarea" name="abstract" rows="5" cols="50" <?
Accès non Autorisé.
modifie($_POST[’abstract’]);
</body>
?>></input>
</html>
yann@yoda:~/temp$
-->
<tr>
Copiez le dans chaque répertoire de l’arborescence du site de la conf,
qui ne contient ni fichier "index.php" ni fichier "index.html". en
<td width="3%" height="40">&nbsp;</td>
effet par défaut apache cherche et affiche les fichiers index.*, et
<td width="47%" height="40">
s’il ne les trouve pas affiche le contenu du répertoire si cela est
<table border="0" width="100%">
autorisé.
<tr>
<td width="50%" height="40" valign="top">
Cela évitera à des personnes mal intentionnées de télécharger
<font color="#0000FF">
facilement les fichiers php de les étudier et d’y trouver une faille
Mots-clés (séparés par |)<br>
afin de prendre le contr^
ole de votre conférence
Les mots clés doivent ^
etre constitués d’une
catégorie et d’une ou plusieurs sous catégories parmi les suivantes
Je rappelle pour info que les mots de passe sont en clair dans la
(vous pouvez eventuellement rajouter des sous-catégories) séparés par
base!!!
des |. <b>Attention : Veuillez remplir ce champs avec les termes
anglais.</b> </font> </td> <td width="50%" height="40" valign="top">
Il est toujours possible de faire un wget sur le site de la conf et de
Keywords (separeted by | ) :<br> Keyword list is made of one category
récupérer les fichiers, mais cela fait un premier rempart (enfin une
word and one or more sub-category words from the following lists (you
petite barrière).
can add sub-category) separated by |. <b>Warning : Please, fill this
field with english words</b> </td> </tr></table> <td width="50%"
Yann
height="40"> <? textarea_control("theme",$_POST[’theme’]); ?>
</td>
<!--commentaire
PS : j’ai remarqué que certain fichier étaient encodé en UTF-8 et
<td width="50%" height="40">
d’autres en ISO-8859-1.
<? textarea_control("theme",$theme); ?>
Pourrait on harmoniser ?
<input type="textarea" name="theme" rows="5" cols="50" <?
modifie($_POST[’theme’]);
L’aide d’iconv sera la bienvenue... iconv -f utf-8 -t iso-8859-1 par exemple
?>></type>
<textarea name="theme" rows="5" cols="50"><? echo
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
$_POST[’theme’]; ?></textarea> </td>
-->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Yann
Bonjour
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5
conclusion
C’en est fini de cet article, toutes remarques et corrections sont les bienvenues à l’adresse
[email protected]
Y. Morère
L.A.S.C.

Documents pareils