git-archimport-id: opensource@polytechnique.org--2005/platal--mainline--0.9--patch-677
* Search :
- Nickname are used in fast search. -Car
+ * Xnet :
+ - Events management. -Car
+
Bug/Wish :
* Core :
ORDER BY $tri
LIMIT {?},{?}", $globals->asso('id'), $ofs*NB_PER_PAGE, NB_PER_PAGE);
-$nb = $globals->xdb->query("SELECT FOUND_ROWS()");
-$nb = $nb->fetchOneCell();
-
$page->assign('ann', $ann);
--- /dev/null
+<?php
+require 'xnet.inc.php';
+
+new_group_page('xnet/groupe/evenements.tpl');
+
+$page->assign('logged', logged());
+$page->assign('admin', may_update());
+
+$moments = range(1, 4);
+$page->assign('moments', $moments);
+
+if ($eid = Env::get('eid')) {
+ $res = $globals->xdb->query("SELECT asso_id FROM groupex.evenements WHERE eid = {?}", $eid);
+ if ($res->fetchOneCell() != $globals->asso('id')) unset($eid);
+}
+
+if (may_update() && Post::get('intitule')) {
+ $globals->xdb->execute("REPLACE INTO groupex.evenements VALUES (
+ {?}, {?}, {?}, {?},
+ {?}, {?},
+ {?},
+ {?},
+ {?}, {?}, {?})",
+ $eid, $globals->asso('id'), Session::get('uid'), Post::get('intitule'),
+ NULL, Post::get('descriptif'),
+ Post::get('deb_Year')."-".Post::get('deb_Month')."-".Post::get('deb_Day')." ".Post::get('deb_Hour').":".Post::get('deb_Minute').":00",
+ Post::get('fin_Year')."-".Post::get('fin_Month')."-".Post::get('fin_Day')." ".Post::get('fin_Hour').":".Post::get('fin_Minute').":00",
+ Post::get('membres_only'), Post::get('advertise'), Post::get('show_participants'));
+
+ if (!$eid) {
+ $res = $globals->xdb->query("SELECT LAST_INSERT_ID()");
+ $eid = $res->fetchOneCell();
+ }
+
+ $nb_moments = 0;
+ foreach ($moments as $i) if (Post::get('titre'.$i)) {
+ $nb_moments++;
+ $globals->xdb->execute("
+ REPLACE INTO groupex.evenements_items VALUES (
+ {?}, {?},
+ {?}, {?}, {?})",
+ $eid, $i,
+ Post::get('titre'.$i), Post::get('details'.$i), strtr(Post::get('montant'.$i), ',', '.'));
+ } else {
+ $globals->xdb->execute("DELETE FROM groupex.evenements_items WHERE eid = {?} AND item_id = {?}", $eid, $i);
+ }
+
+ // events with no sub-event
+ if ($nb_moments == 0)
+ $globals->xdb->execute("INSERT INTO groupex.evenements_items VALUES ({?}, {?}, '', '', 0)", $eid, 1);
+}
+
+if (may_update() && Env::has('sup') && $eid) {
+ $globals->xdb->execute("DELETE FROM groupex.evenements WHERE eid = {?} AND asso_id = {?}", $eid, $globals->asso('id'));
+
+ $globals->xdb->execute("DELETE FROM groupex.evenements_items WHERE eid = {?}", $eid);
+
+ $globals->xdb->execute("DELETE FROM groupex.evenements_participants WHERE eid = {?}", $eid);
+}
+
+if (may_update() && Env::has('add'))
+ $page->assign('get_form', true);
+
+if (may_update() && Env::has('mod') && $eid) {
+ $res = $globals->xdb->query(
+ "SELECT eid, intitule, descriptif, debut, fin, membres_only, advertise, show_participants
+ FROM groupex.evenements
+ WHERE eid = {?}", $eid);
+ $evt = $res->fetchOneAssoc();
+ $page->assign('evt', $evt);
+
+ $res = $globals->xdb->iterator(
+ "SELECT item_id, titre, details, montant
+ FROM groupex.evenements_items AS ei
+ INNER JOIN groupex.evenements AS e ON(e.eid = ei.eid)
+ WHERE e.eid = {?}
+ ORDER BY item_id", $eid);
+ $items = array();
+ while ($item = $res->next()) $items[$item['item_id']] = $item;
+ $page->assign('items', $items);
+
+ $page->assign('get_form', true);
+} else {
+
+ $evenements = $globals->xdb->iterator(
+ "SELECT e.eid, e.intitule, e.descriptif, e.debut, e.fin, e.show_participants, u.nom, u.prenom, u.promo, a.alias, MAX(ep.nb)>=1 AS inscrit
+ FROM groupex.evenements AS e
+ INNER JOIN x4dat.auth_user_md5 AS u ON u.user_id = e.organisateur_uid
+ LEFT JOIN x4dat.aliases AS a ON (a.type = 'a_vie' AND a.id = u.user_id)
+ LEFT JOIN groupex.evenements_participants AS ep ON (ep.eid = e.eid AND ep.uid = {?})
+ WHERE asso_id = {?}
+ GROUP BY e.eid
+ ORDER BY debut",Session::get('uid'),$globals->asso('id'));
+
+ $page->assign('evenements', $evenements);
+
+ $page->assign('nb_evt', $evenements->total());
+}
+
+$page->run();
+
+?>
--- /dev/null
+<?php
+require 'xnet.inc.php';
+
+define('NB_PER_PAGE', 25);
+
+$res = $globals->xdb->query(
+ "SELECT SUM(nb) AS nb_tot, e.intitule, ei.titre, e.show_participants
+ FROM groupex.evenements AS e
+ INNER JOIN groupex.evenements_items AS ei ON (e.eid = ei.eid)
+ LEFT JOIN groupex.evenements_participants AS ep ON(e.eid = ep.eid AND ei.item_id = ep.item_id)
+ WHERE e.eid = {?} AND ei.item_id = {?} AND asso_id = {?}
+ GROUP BY e.eid",
+ Env::get('eid'), Env::getInt('item_id', 1), $globals->asso('id'));
+
+$evt = $res->fetchOneAssoc();
+if (!$evt['intitule'])
+ header("Location: evenements.php");
+
+if ($evt['show_participants'])
+ new_group_page('xnet/groupe/evt-admin.tpl');
+else
+ new_groupadmin_page('xnet/groupe/evt-admin.tpl');
+
+$page->assign('evt', $evt);
+$page->assign('url_page', Env::get('PHP_SELF')."?eid=".Env::get('eid')."&item_id=".Env::getInt('item_id', 1));
+
+$res = $globals->xdb->iterator(
+ "SELECT eid, item_id, titre
+ FROM groupex.evenements_items
+ WHERE eid = {?}",
+ Env::get('eid'));
+if ($res->total() > 1) $page->assign('moments', $res);
+
+$tri = (Env::get('order') == 'alpha' ? 'promo, nom, prenom' : 'nom, prenom, promo');
+$res = $globals->xdb->iterRow(
+ 'SELECT UPPER(SUBSTRING(IF(m.origine="X",IF(u.nom_usage<>"", u.nom_usage, u.nom),m.nom), 1, 1)), COUNT(IF(m.origine="X",u.nom,m.nom))
+ FROM groupex.evenements_participants AS ep
+ INNER JOIN groupex.evenements AS e ON (ep.eid = e.eid)
+ INNER JOIN groupex.membres AS m ON ( ep.uid = m.uid AND e.asso_id = m.asso_id)
+ LEFT JOIN auth_user_md5 AS u ON ( u.user_id = m.uid )
+ WHERE e.asso_id = {?} AND ep.eid = {?} AND ep.item_id = {?}
+ GROUP BY UPPER(SUBSTRING(IF(m.origine="X",u.nom,m.nom), 1, 1))', $globals->asso('id'), Env::get('eid'), Env::getInt('moment', 1));
+
+$alphabet = array();
+$nb_tot = 0;
+while (list($char, $nb) = $res->next()) {
+ $alphabet[ord($char)] = $char;
+ $nb_tot += $nb;
+ if (Env::has('initiale') && $char == strtoupper(Env::get('initiale'))) {
+ $tot = $nb;
+ }
+}
+$page->assign('alphabet', $alphabet);
+
+$ofs = Env::getInt('offset');
+$tot = Env::get('initiale') ? $tot-1 : $nb_tot-1;
+$nbp = intval(($tot-1)/NB_PER_PAGE);
+$links = array();
+if ($ofs) {
+ $links['précédent'] = $ofs-1;
+}
+for ($i = 0; $i <= $nbp; $i++) {
+ $links[(string)($i+1)] = $i;
+}
+if ($ofs < $nbp) {
+ $links['suivant'] = $ofs+1;
+}
+if (count($links)>1) {
+ $page->assign('links', $links);
+}
+
+$ini = Env::has('initiale') ? 'AND IF(m.origine="X",IF(u.nom_usage<>"", u.nom_usage, u.nom),m.nom) LIKE "'.addslashes(Env::get('initiale')).'%"' : '';
+$ann = $globals->xdb->iterator(
+ "SELECT IF(m.origine='X',IF(u.nom_usage<>'', u.nom_usage, u.nom) ,m.nom) AS nom,
+ IF(m.origine='X',u.prenom,m.prenom) AS prenom,
+ IF(m.origine='X',u.promo,'extérieur') AS promo,
+ IF(m.origine='X',a.alias,m.email) AS email,
+ IF(m.origine='X',FIND_IN_SET('femme', u.flags),0) AS femme,
+ m.perms='admin' AS admin,
+ m.origine='X' AS x,
+ ep.nb
+ FROM groupex.evenements_participants AS ep
+ INNER JOIN groupex.evenements AS e ON (ep.eid = e.eid)
+ INNER JOIN groupex.membres AS m ON ( ep.uid = m.uid AND e.asso_id = m.asso_id)
+ LEFT JOIN auth_user_md5 AS u ON ( u.user_id = m.uid )
+ LEFT JOIN aliases AS a ON ( a.id = m.uid AND a.type='a_vie' )
+ WHERE e.asso_id = {?} AND ep.eid = {?} AND ep.item_id = {?} $ini
+ ORDER BY $tri
+ LIMIT {?}, {?}",
+ $globals->asso('id'), Env::get('eid'), Env::getInt('item_id', 1),
+ $ofs*NB_PER_PAGE, NB_PER_PAGE);
+
+
+$page->assign('ann', $ann);
+
+$page->run();
+
+?>
--- /dev/null
+<?php
+
+require 'xnet.inc.php';
+
+new_group_page('xnet/groupe/evt-detail.tpl');
+
+if (!Env::get("eid"))
+ header("Location: evenements.php");
+
+$may_participate = !$members_only || is_member() || may_update();
+$page->assign('may_participate', $may_participate);
+
+for ($i=1; Env::has('item_id'.$i); $i++) {
+ $j = Env::get('item_id'.$i);
+ $nb = Env::get('item_'.$j);
+ if ($nb == '+') $nb = Env::get('itemnb_'.$j)+1;
+ if ($nb > 0)
+ $globals->xdb->execute(
+ "REPLACE INTO groupex.evenements_participants
+ VALUES ({?}, {?}, {?}, {?})",
+ Env::get("eid"), Session::get("uid"), $j, $nb);
+ else
+ $globals->xdb->execute(
+ "DELETE FROM groupex.evenements_participants
+ WHERE eid = {?}, uid = {?}, item_id = {?}",
+ Env::get("eid"), Session::get("uid"), $j);
+}
+
+// return to the main page after modifying
+if (Env::has("ins"))
+ header("Location: evenements.php");
+
+$res = $globals->xdb->query(
+ "SELECT e.eid, a.nom, a.prenom, a.promo, intitule, descriptif, debut AS deb,
+ fin, membres_only
+ FROM groupex.evenements AS e
+ INNER JOIN x4dat.auth_user_md5 AS a ON a.user_id = e.organisateur_uid
+ WHERE e.eid = {?}", Env::get("eid"));
+
+$evt = $res->fetchOneAssoc();
+$page->assign('evt', $evt);
+
+$moments = $globals->xdb->iterator(
+ "SELECT titre, i.item_id, details, montant, nb
+ FROM groupex.evenements_items AS i
+ LEFT JOIN groupex.evenements_participants AS p
+ ON(i.eid = p.eid AND i.item_id = p.item_id AND uid = {?})
+ WHERE i.eid = {?}",
+ Session::get('uid'), Env::get('eid'));
+
+$page->assign('moments', $moments);
+
+$page->run();
+
+?>
if ($globals->asso('mail_domain')) {
$sub['listes de diffusion'] = "$dim/listes.php";
}
+ $sub['évenement'] = "$dim/evenements.php";
if (false) {
- $sub['evenement'] = "$dim/evenement.php";
$sub['carnet'] = "$dim/carnet.php";
}
$sub['telepaiement'] = "$dim/telepaiement.php";
--- /dev/null
+<h1>{$asso.nom} :
+{if ($smarty.request.add || $smarty.request.mod) && $admin}
+<a href='{$smarty.server.PHP_SELF}'>Evénements</a>
+{else}
+Evénements
+{/if}
+</h1>
+{if !$logged}
+<p class="descr">
+ Aucune manifestation publique n'a été saisie par ce groupe pour l'instant...
+</p>
+{elseif $get_form}
+ {include file='xnet/groupe/form_evenement.tpl'}
+{else}
+{if $admin}
+<p class="center">
+ <a href="{$marty.server.PHP_SELF}?add=1">Annoncer un nouvel événement</a>
+</p>
+{/if}
+
+{if $nb_evt eq 0}
+<p class="descr">
+ Aucun événement n'a été référencé par les animateurs du groupe.
+</p>
+{else}
+<ul class="decr">
+ {iterate from=$evenements item=e}
+ <li>{$e.intitule}
+ {if $admin || $e.show_participants}
+ <a href="evt-admin.php?eid={$e.eid}"><img src="{rel}/images/loupe.gif" title="Liste des participants" alt="Liste des participants" /></a>
+ {/if}
+ {if $admin}
+ <a href="{$smarty.session.PHP_SELF}?mod=1&eid={$e.eid}"><img src="{rel}/images/profil.png" title="Edition de l'événement" alt="Edition de l'événement" /></a>
+ <a href="{$smarty.session.PHP_SELF}?sup=1&eid={$e.eid}"><img src="{rel}/images/del.png" alt="Suppression de {$e.intitule}" title="Suppression de {$e.intitule}" /></a>
+ {/if}
+ <br />
+ date : {$e.debut}{if $e.fin} - {$e.fin}{/if}
+ <br />
+ annonceur : <a href='https://polytechnique.org/fiche.php?user={$e.alias}' target='new'>{$e.prenom} {$e.nom} ({$e.promo})</a>
+ <br />
+ <a href='evt-detail.php?eid={$e.eid}'><i>Détails...</i></a>
+ {if $e.inscrit}
+ <small>tu es inscrit à cet événément !</small>
+ {else}
+ <small>pour l'instant, tu n'es pas inscrit à cet événément !</small>
+ {/if}
+ </li>
+ {/iterate}
+</ul>
+{/if}
+
+{/if}
+
--- /dev/null
+{**************************************************************************}
+{* *}
+{* Copyright (C) 2003-2004 Polytechnique.org *}
+{* http://opensource.polytechnique.org/ *}
+{* *}
+{* This program is free software; you can redistribute it and/or modify *}
+{* it under the terms of the GNU General Public License as published by *}
+{* the Free Software Foundation; either version 2 of the License, or *}
+{* (at your option) any later version. *}
+{* *}
+{* This program is distributed in the hope that it will be useful, *}
+{* but WITHOUT ANY WARRANTY; without even the implied warranty of *}
+{* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *}
+{* GNU General Public License for more details. *}
+{* *}
+{* You should have received a copy of the GNU General Public License *}
+{* along with this program; if not, write to the Free Software *}
+{* Foundation, Inc., *}
+{* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *}
+{* *}
+{**************************************************************************}
+
+<h1>{$asso.nom} : <a href='evenements.php'>Evénements</a> </h1>
+
+{if $moments}
+<p class="center">
+{iterate from=$moments item=m}
+[<a href="{$smarty.server.PHP_SELF}?eid={$m.eid}&item_id={$m.item_id}" {if $smarty.request.item_id eq $m.item_id || ($m.item_id eq 1 && !$smarty.request.item_id)}class="erreur"{/if}>{$m.titre}</a>]
+{/iterate}
+</p>
+{/if}
+
+<p class="descr">
+L'événement {$evt.intitule} {if $evt.titre} - {$evt.titre}{/if} comptera {$evt.nb_tot} personne{if $evt.nb_tot > 1}s{/if}.
+</p>
+
+<p class="center">
+[<a href="{$url_page}" {if !$smarty.request.initiale}class="erreur"{/if}>tout</a>]
+{foreach from=$alphabet item=c}
+[<a href="{$url_page}&initiale={$c}"{if $smarty.request.initiale eq $c} class="erreur"{/if}>{$c}</a>]
+{/foreach}
+</p>
+
+<table summary="participants a l'evenement" class="tiny">
+ <tr>
+ <th>Prénom NOM</th>
+ <th>Promo</th>
+ <th>Info</th>
+ <th>Nombre</th>
+ </tr>
+ {iterate from=$ann item=m}
+ <tr style="background:#d0c198;">
+ <td>{if $m.femme}•{/if}{$m.prenom} {$m.nom}</td>
+ <td>{$m.promo}</td>
+ <td>
+ {if $m.x}
+ <a href="https://www.polytechnique.org/fiche.php?user={$m.email}"><img src="{rel}/images/loupe.gif" alt="[fiche]" /></a>
+ <a href="https://www.polytechnique.org/vcard.php/{$m.email}.vcf/?x={$m.email}"><img src="{rel}/images/vcard.png" alt="[vcard]" /></a>
+ <a href="mailto:{$m.email}@polytechnique.org"><img src="{rel}/images/mail.png" alt="mail" /></a>
+ {else}
+ <a href="mailto:{$m.email}"><img src="{rel}/images/mail.png" alt="mail"></a>
+ {/if}
+ </td>
+ <td>
+ {$m.nb}
+ </td>
+ </tr>
+ {/iterate}
+</table>
+
+<p class="descr">
+{foreach from=$links item=ofs key=txt}
+<a href="?offset={$ofs}&initiale={$smarty.request.initiale}"{if $smarty.request.offset eq $ofs} class="erreur"{/if}>{$txt}</a>
+{/foreach}
+</p>
+
+{* vim:set et sw=2 sts=2 sws=2: *}
--- /dev/null
+<h1>{$asso.nom} : <a href="{$smarty.server.PHP_SELF}">Evénements</a></h1>
+
+<h2>{$evt.intitule}</h2>
+
+<form method='post' action='{$smarty.server.PHP_SELF}'>
+ <table>
+ <tr><td><i>Evénement annoncé par :</i></td><td>{$evt.prenom} {$evt.nom} (X{$evt.promo})</td></tr>
+ <tr><td><i>Description :</i></td><td>{$evt.descriptif}</td></tr>
+ <tr><td><i>Date :</i></td><td>{$evt.deb}{if $evt.fin} - {$evt.fin}{/if}</td></tr>
+</table>
+
+<br /><br />
+
+<table border=1 width='100%'>
+ <input type="hidden" name="eid" value="{$evt.eid}" />
+ <tr><td></td><td>Participation</td></tr>
+ {iterate from=$moments item=m}
+ <input type="hidden" name="item_id{counter}" value="{$m.item_id}" />
+ {if $m.titre | $m.montant}
+ <tr><td colspan='2'><b>{$m.titre} - {if $m.montant > 0}{$m.montant}{else}gratuit{/if}</b></td></tr>
+ {/if}
+ <tr><td>{$m.details}</td><td>
+ <input name='item_{$m.item_id}' value='0' type='radio' {if $m.nb eq 0}checked{/if}> je ne participe pas<br />
+ <input name='item_{$m.item_id}' value='1' type='radio' {if $m.nb eq 1}checked{/if}> je participe, seul<br />
+ <input name='item_{$m.item_id}' value='+' type='radio' {if $m.nb > 1}checked{/if}> je viens, et serai accompagné de <input type='text' name='itemnb_{$m.item_id}' value='{if $m.nb < 2}0{else}{$m.nb-1}{/if}' size=1 maxlength=1> personnes
+ </td></tr>
+ {/iterate}
+</table>
+<br />
+<center><input type='submit' name='ins' value='valider ma participation'>
+<input type='reset' value='annuler'></center>
+</form>
+
--- /dev/null
+<p class="descr">
+ Un événement peut être une réunion, un séminaire, une conférence, un voyage promo,
+ etc... Pour en organiser un et bénéficier des outils de suivi d'inscription et de
+ paiement offerts, il te faut remplir les quelques champs du formulaire ci-dessous.
+</p>
+<p class="descr">
+ Tu as la possibilité, pour un événement donné, de distinguer plusieurs "moments"
+ distincts. Par exemple, dans le cas d'une réunion suivie d'un dîner, il peut être
+ utile de comptabiliser les présents à la réunion d'une part, et de compter ceux
+ qui s'inscrivent au repas d'autre part (en général certains participants à la réunion
+ ne restent pas pour le dîner...), de sorte que tu sauras combien de chaises prévoir
+ pour le premier "moment" (la réunion), et pour combien de personnes réserver le
+ restaurant.
+</p>
+<form method="post" action="{$smarty.server.PHP_SELF}">
+<input type="hidden" name="eid" value="{$evt.eid}" />
+ <hr />
+ <table>
+ <tr>
+ <td>Intitulé de l'événement :</td>
+ <td><input type="text" name="intitule" value="{$evt.intitule}" size="45" maxlength="100" /></td>
+ </tr>
+ <tr>
+ <td>Descriptif :</td>
+ <td><textarea name="descriptif" cols="45" rows="6">{$evt.descriptif}</textarea></td>
+ </tr>
+ <tr>
+ <td>Date de début :</td>
+ <td>
+ le
+ {html_select_date prefix='deb_' end_year='+5' day_value_format='%02d' field_order='DMY' field_separator=' / ' month_format='%m' time=$evt.debut}
+ à
+ {html_select_time use_24_hours=true display_seconds=false time=$evt.debut prefix='deb_' minute_interval=5}
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td>Date de fin :</td>
+ <td>
+ le
+ {html_select_date prefix='fin_' end_year='+5' day_value_format='%02d' field_order='DMY' field_separator=' / ' month_format='%m' time=$evt.fin}
+ à
+ {html_select_time use_24_hours=true display_seconds=false time=$evt.fin prefix='fin_' minute_interval=5}
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">Ouvert aux membres du groupe uniquement :
+ <input type="radio" name="membres_only" value="1" {if $evt.membres_only}checked="checked"{/if} /> oui
+ <input type="radio" name="membres_only" value="0" {if !$evt.membres_only}checked="checked"{/if} /> non
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">Annoncer l'événement publiquement sur le site :
+ <input type="radio" name="advertise" value="1" {if $evt.advertise}checked{/if} /> oui
+ <input type="radio" name="advertise" value="0" {if !$evt.advertise}checked{/if} /> non
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">Montrer la liste des participants à tous les membres :
+ <input type="radio" name="show_participants" value="1" {if $evt.show_participants}checked{/if} /> oui
+ <input type="radio" name="show_participants" value="0" {if !$evt.show_participants}checked{/if}/> non
+ </td>
+ </tr>
+ </table>
+ {foreach from=$moments item=i}
+ {assign var='moment' value=$items[$i]}
+ <hr />
+ <table>
+ <tr><td colspan="2" align="center"><strong>"Moment" {$i}</strong></td></tr>
+ <tr>
+ <td>Intitulé :</td>
+ <td><input type="text" name="titre{$i}" value="{$moment.titre}" size="45" maxlength="100" /></td>
+ </tr>
+ <tr>
+ <td>Détails pratiques :</td>
+ <td><textarea name="details{$i}" rows="6" cols="45">{$moment.details}</textarea></td>
+ </tr>
+ <tr>
+ <td>Montant par participant :<br /><small>(0 si gratuit)</small></td>
+ <td><input type="text" name="montant{$i}" value="{if $moment.montant}{$moment.montant|replace:".":","}{else}0,00{/if}" size="7" maxlength="7" /> €</td>
+ </tr>
+ </table>
+{/foreach}
+ <center>
+ <input type="submit" name="valid" value="Valider" />
+
+ <input type="reset" value="Annuler" />
+ </center>
+
+</form>
ALTER TABLE groupex.asso ADD `pub` ENUM( 'public', 'private' ) DEFAULT 'public' NOT NULL AFTER `ax` ;
+ALTER TABLE evenements_participants ADD PRIMARY KEY (eid, item_id, uid);
+ALTER TABLE evenements ADD `show_participants` TINYINT( 1 ) NOT NULL ;