From e938781f010b0ce2379bc3f4668a6c4ded45edea Mon Sep 17 00:00:00 2001 From: Pascal Corpet Date: Fri, 3 Jun 2005 09:08:37 +0000 Subject: [PATCH] gestion des evenements pour xnet git-archimport-id: opensource@polytechnique.org--2005/platal--mainline--0.9--patch-677 --- ChangeLog | 3 + htdocs.net/groupe/annuaire.php | 3 - htdocs.net/groupe/evenements.php | 102 +++++++++++++++++++++++++++++++ htdocs.net/groupe/evt-admin.php | 98 +++++++++++++++++++++++++++++ htdocs.net/groupe/evt-detail.php | 55 +++++++++++++++++ include/xnet/page.inc.php | 2 +- templates/xnet/groupe/evenements.tpl | 53 ++++++++++++++++ templates/xnet/groupe/evt-admin.tpl | 77 +++++++++++++++++++++++ templates/xnet/groupe/evt-detail.tpl | 33 ++++++++++ templates/xnet/groupe/form_evenement.tpl | 90 +++++++++++++++++++++++++++ upgrade/0.9.7/00_xnet.sql | 2 + 11 files changed, 514 insertions(+), 4 deletions(-) create mode 100644 htdocs.net/groupe/evenements.php create mode 100644 htdocs.net/groupe/evt-admin.php create mode 100644 htdocs.net/groupe/evt-detail.php create mode 100644 templates/xnet/groupe/evenements.tpl create mode 100644 templates/xnet/groupe/evt-admin.tpl create mode 100644 templates/xnet/groupe/evt-detail.tpl create mode 100644 templates/xnet/groupe/form_evenement.tpl diff --git a/ChangeLog b/ChangeLog index 0317146..4ba3c53 100644 --- a/ChangeLog +++ b/ChangeLog @@ -6,6 +6,9 @@ New : * Search : - Nickname are used in fast search. -Car + * Xnet : + - Events management. -Car + Bug/Wish : * Core : diff --git a/htdocs.net/groupe/annuaire.php b/htdocs.net/groupe/annuaire.php index adafedd..604fd5e 100644 --- a/htdocs.net/groupe/annuaire.php +++ b/htdocs.net/groupe/annuaire.php @@ -62,9 +62,6 @@ $ann = $globals->xdb->iterator( 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); diff --git a/htdocs.net/groupe/evenements.php b/htdocs.net/groupe/evenements.php new file mode 100644 index 0000000..ee8f65a --- /dev/null +++ b/htdocs.net/groupe/evenements.php @@ -0,0 +1,102 @@ +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(); + +?> diff --git a/htdocs.net/groupe/evt-admin.php b/htdocs.net/groupe/evt-admin.php new file mode 100644 index 0000000..848ceb8 --- /dev/null +++ b/htdocs.net/groupe/evt-admin.php @@ -0,0 +1,98 @@ +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(); + +?> diff --git a/htdocs.net/groupe/evt-detail.php b/htdocs.net/groupe/evt-detail.php new file mode 100644 index 0000000..c6bdbbc --- /dev/null +++ b/htdocs.net/groupe/evt-detail.php @@ -0,0 +1,55 @@ +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(); + +?> diff --git a/include/xnet/page.inc.php b/include/xnet/page.inc.php index 3d1eccc..bd37c69 100644 --- a/include/xnet/page.inc.php +++ b/include/xnet/page.inc.php @@ -78,8 +78,8 @@ class XnetPage extends PlatalPage 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"; diff --git a/templates/xnet/groupe/evenements.tpl b/templates/xnet/groupe/evenements.tpl new file mode 100644 index 0000000..a01f4bd --- /dev/null +++ b/templates/xnet/groupe/evenements.tpl @@ -0,0 +1,53 @@ +

{$asso.nom} : +{if ($smarty.request.add || $smarty.request.mod) && $admin} +Evénements +{else} +Evénements +{/if} +

+{if !$logged} +

+ Aucune manifestation publique n'a été saisie par ce groupe pour l'instant... +

+{elseif $get_form} + {include file='xnet/groupe/form_evenement.tpl'} +{else} +{if $admin} +

+ Annoncer un nouvel événement +

+{/if} + +{if $nb_evt eq 0} +

+ Aucun événement n'a été référencé par les animateurs du groupe. +

+{else} + +{/if} + +{/if} + diff --git a/templates/xnet/groupe/evt-admin.tpl b/templates/xnet/groupe/evt-admin.tpl new file mode 100644 index 0000000..1737a38 --- /dev/null +++ b/templates/xnet/groupe/evt-admin.tpl @@ -0,0 +1,77 @@ +{**************************************************************************} +{* *} +{* 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 *} +{* *} +{**************************************************************************} + +

{$asso.nom} : Evénements

+ +{if $moments} +

+{iterate from=$moments item=m} +[{$m.titre}] +{/iterate} +

+{/if} + +

+L'événement {$evt.intitule} {if $evt.titre} - {$evt.titre}{/if} comptera {$evt.nb_tot} personne{if $evt.nb_tot > 1}s{/if}. +

+ +

+[tout] +{foreach from=$alphabet item=c} +[{$c}] +{/foreach} +

+ + + + + + + + + {iterate from=$ann item=m} + + + + + + + {/iterate} +
Prénom NOMPromoInfoNombre
{if $m.femme}•{/if}{$m.prenom} {$m.nom}{$m.promo} + {if $m.x} + [fiche] + [vcard] + mail + {else} + mail + {/if} + + {$m.nb} +
+ +

+{foreach from=$links item=ofs key=txt} +{$txt} +{/foreach} +

+ +{* vim:set et sw=2 sts=2 sws=2: *} diff --git a/templates/xnet/groupe/evt-detail.tpl b/templates/xnet/groupe/evt-detail.tpl new file mode 100644 index 0000000..22f57fa --- /dev/null +++ b/templates/xnet/groupe/evt-detail.tpl @@ -0,0 +1,33 @@ +

{$asso.nom} : Evénements

+ +

{$evt.intitule}

+ +
+ + + + +
Evénement annoncé par :{$evt.prenom} {$evt.nom} (X{$evt.promo})
Description :{$evt.descriptif}
Date :{$evt.deb}{if $evt.fin} - {$evt.fin}{/if}
+ +

+ + + + + {iterate from=$moments item=m} + + {if $m.titre | $m.montant} + + {/if} + + {/iterate} +
Participation
{$m.titre} - {if $m.montant > 0}{$m.montant}{else}gratuit{/if}
{$m.details} + je ne participe pas
+ je participe, seul
+ 1}checked{/if}> je viens, et serai accompagné de personnes +
+
+
+
+
+ diff --git a/templates/xnet/groupe/form_evenement.tpl b/templates/xnet/groupe/form_evenement.tpl new file mode 100644 index 0000000..2b5e93d --- /dev/null +++ b/templates/xnet/groupe/form_evenement.tpl @@ -0,0 +1,90 @@ +

+ 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. +

+

+ 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. +

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Intitulé de l'événement :
Descriptif :
Date de début : + 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} + +
Date de fin : + 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} +
Ouvert aux membres du groupe uniquement : + oui + non +
Annoncer l'événement publiquement sur le site : + oui + non +
Montrer la liste des participants à tous les membres : + oui + non +
+ {foreach from=$moments item=i} + {assign var='moment' value=$items[$i]} +
+ + + + + + + + + + + + + + +
"Moment" {$i}
Intitulé :
Détails pratiques :
Montant par participant :
(0 si gratuit)
+{/foreach} +
+ +   + +
+ +
diff --git a/upgrade/0.9.7/00_xnet.sql b/upgrade/0.9.7/00_xnet.sql index 6aff287..402e94e 100644 --- a/upgrade/0.9.7/00_xnet.sql +++ b/upgrade/0.9.7/00_xnet.sql @@ -1,2 +1,4 @@ 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 ; -- 2.1.4