Gestion des inscriptions à des conférences

Cette contribution à pour objectif d’expliquer comment gérer automatiquement les inscriptions à des colloques sous SPIP.

Introduction

Cet article est maintenant obsolete. Une version de cette contribution existe sous forme de plugin gestion des inscriptions à des conférences.

Un problème qui se pose pour les gestionnaires de sites d’associations ou d’institutions organisant des colloques est de gérer efficacement les inscriptions des participants.
Cette contrib propose une solution simple et pratique pour le faire.

Fonctionnalités

Les fonctionnalités de cette contrib sont les suivantes :

-  On peut gérer simultanément autant de colloque que l’on veut (chaque colloque est associé à l’article dans lequel la page d’inscription est insérée).
-  L’ajout d’une page d’inscription est extrêmement simple pour les contributeurs : il suffit d’insérer un tag <registration adresse@de.notification.fr> (ou <fastregistration adresse@de.notification.fr> pour un formulaire simplifié) dans le texte de l’article.
-  Lorsque quelqu’un s’inscrit ou se désinscrit, un mail de notification est automatiquement envoyé à l’adresse email de son choix (adresse@de.notification.fr).
-  Toute les infos sont enregistrées dans la base de donnée (comme ça les personnes qui se sont inscrite une fois n’ont
pas à redonner leurs coordonnées pour le second colloque).
-  Normalement le formulaire généré est XHTML conforme.

Installation


-  Il faut tout d’abord ajouter un filtre sur le texte pour détecter la présence de la balise . Pour ma part, j’ai regroupé tous mes filtres perso dans un « meta filtre » que j’appelle sur le contenu de mes articles. Mais vous n’êtes pas obligé de faire pareil et vous pouvez appeller directement le filtre fl_registrationform.
Mon fichier mes_fonctions.php3 contient donc le code suivant :

// Mon "meta filtre" qui appelle tous les autres
function fl_complements($texte_in){
        $texte = fl_registrationform($texte_in);
        return $texte;
}

// fonction contrôlant l'apparition d'un formulaire d'enregistrement
function fl_registrationform($fl_txt){
	global $notif_email;
	// On récupère le/les email(s) pour la notification 
	

	$fl_patern_in="|<registration([^>]*?)>|i";
	$fl_replace_in1="";
	if (preg_match($fl_patern_in, $fl_txt, $matches) ) {
		$GLOBALS['registration']=true;
		$GLOBALS['fastregistration']=false;
		 if (trim($matches[1])<>""){			
				$notif_email=trim($matches[1]);		
		}
		$fl_txt = preg_replace($fl_patern_in, "$fl_replace_in1", $fl_txt);
	}

	$fl_patern_in="|<fastregistration([^>]*?)>|i";
	//if (strstr($fl_txt,$rechercher)!==false){
	if (preg_match($fl_patern_in, $fl_txt, $matches) ) {
		$GLOBALS['registration']=true;
		$GLOBALS['fastregistration']=true;
		 if (trim($matches[1])<>""){			
				$notif_email=trim($matches[1]);		
		}
		$fl_txt = preg_replace($fl_patern_in, "$fl_replace_in1", $fl_txt);
	}	
	return $fl_txt;
}



// Fonctions génériques provenant du livre PHP4
// Utilisées entre autre pour les inscriptions aux colloques
function supprimer_encodage_MQ($valeur) {
	// si magic quotes est actif, retourner
	// la valeur après suppression de l'encodage
	// (=> appel à stripslashes), sinon, retourner
	// la valeur
	return (get_magic_quotes_gpc())?
		stripslashes($valeur):$valeur;
}
function valeur_saisie($valeur) {
	return supprimer_encodage_MQ ( trim($valeur));
}
function vers_formulaire($valeur) {

	// affichage dans un formulaire

	// encoder tous les caractères HTML spéciaux
	// 	- ENT_QUOTES : dont " et '
	return htmlentities($valeur,ENT_QUOTES);

}
function vers_page($valeur) {

	// affichage direct dans une page

	// 1. encoder tous les caractères HTML spéciaux
	// 	- ENT_QUOTES : dont " et '
	// 2. transformer les sauts de ligne en <BR>
	return nl2br(htmlentities($valeur,ENT_QUOTES));

}
function vers_base($valeur) {
	// le seul caractère qui pose vraiment problème est
	// l'apostrophe (') ; c'est donc le seul qui est échappé
	// par cette fonction
	// une solution valable pour toutes les bases consiste à
	// l'échapper par lui-même => remplacement de ' par ''
	return str_replace("'","''",$valeur);
}
function construire_requete($requete) {

	// récupérer le nombre de paramètre 
	$nombre_param = func_num_args();
	// boucler sur tous les paramètres à partir du deuxième
	// (le premier contient la requête de base)
	for($i=1;$i<$nombre_param;$i++) {

		// récupérer la valeur du paramètre
		$valeur = func_get_arg($i);

		// si c'est une chaîne, remplacer ' par ''
		if (is_string($valeur)) {
			$valeur = str_replace("'","''",$valeur);
		}

		// mettre la valeur à son emplacement %n (n = $i)
		$requete = str_replace("%$i",$valeur,$requete);
	}
	// retourner la requête
	return $requete;
}

function affiche_msg($message)
{
		$message=addslashes($message);
		echo "<script language=\"JavaScript\" type=\"text/JavaScript\">\n";
		echo "<!--\n";
		echo "alert( '$message')\n";
		echo "//-->\n";
		echo "</script>\n";
}

function fl_at($fl_txt){
	$rechercher="@";
	$remplacer="<a class=\"hackers\" href=\"mailto:support@microsoft.com\"></a><img src=\"squelettes/design/at.gif\" border=\"0\"  align=\"middle\" alt=\"at\" /><a class=\"hackers\" href=\"mailto:support@microsoft.com\"></a>";
	$fl_txt = str_replace($rechercher,$remplacer,$fl_txt);
	return $fl_txt;
}

Ensuite, il faut appeller le filtre. Cela se fait dans le squelette.
Dans le squelette, il faudra aussi tester si le formulaire a été demandé et si oui inclure le formulaire. Tout cela se fait en mettant les lignes suivantes dans le squelette « article.html ».

[<div class="textearticle"> (#TEXTE|fl_complements)</div>]

<?php
if ($registration) {
    include("registrationform.php");
}
?>

Maintenant, il faut copier le fichier registrationform.php ci joint à la racine de votre site [1].
Il faudra aussi ajouter à la racine du site le fichier objets.inc.php (attention, si vous ne le mettez pas à la racine, il faudra changer son appel dans registrationform.php).

registrationform.php
The registration form.
objets.inc.php
Classes de gestion des colloques.

Configurez les variables $adresse_site et $adresse_email_defaut dans registrationform.php (adresse de votre site et adresse email d’où seront envoyé les emails de notification. On doit pouvoir utiliser l’adresse web défini pour le site, mais j’ai pas pris le temps de regarder comment... avis aux amateurs ! ).

Pour que ça s’afiche correctement, il faut aussi ajouter les styles correspondant.
Je conseille de les inclure une feuille de style séparée appelée registration.css placée à la racine (ou ailleurs).

registration.css
Feuille de style pour les formulaires d’inscription.

Pour cela ajouter

<style type="text/css" media="projection, screen, tv">
		@import "registration.css"; 
</style>

dans les entêtes des pages (entre les balises <head> et </head>).

Il faut également ajouter le fichier contenant le javascript Onglet.js à la racine du site.

Onglet.js
Javascript pour basculer de la fiche d’inscription à la liste des participants.

Dernière étape, créer les tables dans la base.
Voici le code de création des tables :

#
# Table structure for table <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+c3BpcF9wZW9wbGU8L2NvZGU+"></span>
#

CREATE TABLE <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+c3BpcF9wZW9wbGU8L2NvZGU+"></span> (
  <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+aWRfcGVvcGxlPC9jb2RlPg=="></span> int(11) NOT NULL auto_increment,
  <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+bm9tPC9jb2RlPg=="></span> char(30) NOT NULL default '',
  <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+cHJlbm9tPC9jb2RlPg=="></span> char(30) NOT NULL default '',
  <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ZW1haWw8L2NvZGU+"></span> char(40) NOT NULL default '',
  <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+aW5zdGl0dXQ8L2NvZGU+"></span> char(50) NOT NULL default '',
  <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+YWRkcmVzc2UxPC9jb2RlPg=="></span> char(50) NOT NULL default '',
  <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+YWRkcmVzc2UyPC9jb2RlPg=="></span> char(50) NOT NULL default '',
  <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+emlwPC9jb2RlPg=="></span> char(10) NOT NULL default '',
  <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+dmlsbGU8L2NvZGU+"></span> char(50) NOT NULL default '',
  <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+cGF5czwvY29kZT4="></span> char(40) NOT NULL default '',
  <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+dGVsMTwvY29kZT4="></span> char(20) NOT NULL default '',
  <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+dGVsMjwvY29kZT4="></span> char(20) NOT NULL default '',
  <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ZmF4PC9jb2RlPg=="></span> char(20) NOT NULL default '',
  <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+cGFzc3dkPC9jb2RlPg=="></span> char(15) NOT NULL default '',
  UNIQUE KEY <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ZW1haWw8L2NvZGU+"></span> (<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ZW1haWw8L2NvZGU+"></span>),
  UNIQUE KEY <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+aWRfcGVvcGxlPC9jb2RlPg=="></span> (<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+aWRfcGVvcGxlPC9jb2RlPg=="></span>)
) TYPE=MyISAM;
    
#
# Table structure for table <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+c3BpcF9wZW9wbGVfY29uZjwvY29kZT4="></span>
#

CREATE TABLE <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+c3BpcF9wZW9wbGVfY29uZjwvY29kZT4="></span> (
  <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+aWRfcGVvcGxlPC9jb2RlPg=="></span> int(11) NOT NULL default '0',
  <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+aWRfY29uZjwvY29kZT4="></span> int(11) NOT NULL default '0',
  <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+bHVuY2g8L2NvZGU+"></span> char(1) NOT NULL default '',
  <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+cmVtb3RlPC9jb2RlPg=="></span> char(1) NOT NULL default '',
  <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+YXJyaXZhbDwvY29kZT4="></span> varchar(20) NOT NULL default '',
  <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ZGVwYXJ0dXJlPC9jb2RlPg=="></span> varchar(20) NOT NULL default '',
  <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+cHJlc2VudGF0aW9uPC9jb2RlPg=="></span> char(1) NOT NULL default '',
  <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+dGl0bGU8L2NvZGU+"></span> varchar(120) NOT NULL default '',
  <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+YWJzdHJhY3Q8L2NvZGU+"></span> text NOT NULL,
  <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+Y29tbWVudHM8L2NvZGU+"></span> varchar(250) NOT NULL default '',
  KEY <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+aWRfcGVvcGxlPC9jb2RlPg=="></span> (<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+aWRfcGVvcGxlPC9jb2RlPg=="></span>),
  KEY <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+aWRfY29uZjwvY29kZT4="></span> (<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+aWRfY29uZjwvY29kZT4="></span>)
) TYPE=MyISAM;
    

Connectez-vous à votre base de données (phpmyadmin) et executez le code SQL ci-dessus pour créer les tables.

Voila, normalement, ça devrait fonctionner.
Chez moi, ça fonctionne avec spip 1.7.2 et 1.8.1.
Bonne chance.

Liens concernants la gestion de conférences (suggèrés par Minh)

ConfTool

OpenConf

Discussion

Notes

[1ou dans un autre répertoire, par exemple « squelettes », si vous modifiez include(« registrationform.php ») ; en include(« squelettes/registrationform.php ») ; dans article.html

Discussion

Aucune discussion

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom