~maj plugins
[ptitvelo/web/www.git] / www / plugins / agenda_3_5 / formulaires / participer_evenement.php
1 <?php
2 /**
3 * Plugin Agenda 4 pour Spip 3.0
4 * Licence GPL 3
5 *
6 * 2006-2011
7 * Auteurs : cf paquet.xml
8 */
9
10 if (!defined("_ECRIRE_INC_VERSION")) return;
11
12 include_spip('inc/actions');
13 include_spip('inc/editer');
14
15 function formulaires_participer_evenement_charger_dist($id_evenement, $mode=''){
16 $valeurs = array(
17 'nom' => isset($GLOBALS['visiteur_session']['id_auteur']) ? $GLOBALS['visiteur_session']['nom'] : _request('nom'),
18 'email' => isset($GLOBALS['visiteur_session']['id_auteur']) ? $GLOBALS['visiteur_session']['email'] : _request('email'),
19 'reponse' => _request('reponse'),
20 );
21 // si pas d'evenement ou d'inscription, on echoue silencieusement
22 if (!$row = sql_fetsel('inscription,places','spip_evenements','id_evenement='.intval($id_evenement).' AND date_fin>NOW()')
23 OR !$row['inscription'])
24 return false;
25
26 // si anonyme, on echoue avec avertissement
27 if ($mode!='public' && (!isset($GLOBALS['visiteur_session']['id_auteur']) || !$GLOBALS['visiteur_session']['id_auteur']))
28 return array(
29 'message_erreur'=>_T('agenda:connexion_necessaire_pour_inscription'),
30 'editable'=>false
31 );
32
33 // valeurs d'initialisation
34 $valeurs['id'] = $id_evenement;
35 if(isset($GLOBALS['visiteur_session']['id_auteur']))
36 $valeurs['reponse'] = sql_getfetsel('reponse','spip_evenements_participants','id_evenement='.intval($id_evenement).' AND id_auteur='.intval($GLOBALS['visiteur_session']['id_auteur']));
37
38 // si les places sont comptees, regarder si il en reste
39 if ($places = $row['places']){
40 $ok = sql_countsel('spip_evenements_participants','id_evenement='.intval($id_evenement)." AND reponse='oui'");
41 $peutetre = sql_countsel('spip_evenements_participants','id_evenement='.intval($id_evenement)." AND reponse='?'");
42 // Les reponses PEUT-ETRE sont ponderees a 0,5 donc
43 // on multiplie tout par 2 pour eviter les troncatures ($total ne sert de toute facon que dans les tests)
44 $total = 2*$ok+$peutetre;
45 if ($total>=2*$places){
46 // dans ce cas, le formulaire est editable seulement si l'auteur a deja repondu oui ou peut-etre, et peut changer d'avis !
47 if (!($valeurs['reponse']=='oui' OR $valeurs['reponse']=='?')){
48 $valeurs['editable'] = false;
49 $valeurs['message_ok'] = _T('agenda:evenement_complet');
50 }
51 }
52 }
53
54 return $valeurs;
55 }
56
57 function formulaires_participer_evenement_verifier_dist($id_evenement, $mode=''){
58 $erreurs = array();
59 $reponse = _request('reponse');
60 $nom = _request('nom');
61 $email = _request('email');
62 // Le test de la ligne suivante sert a savoir si la reponse est vide, non?
63 // On vient juste de la recuperer ci-dessus, pas la peine de la reaffecter...
64 if (!($reponse) OR !in_array($reponse,array('oui','non','?')))
65 $erreurs['reponse'] = _T('agenda:indiquez_votre_choix');
66 elseif ($mode=='public' AND !isset($GLOBALS['visiteur_session']['id_auteur'])) {
67 // nom et email sont obligatoires
68 if (!$nom)
69 $erreurs['nom'] = _T('info_obligatoire');
70 if (!$email)
71 $erreurs['email'] = _T('info_obligatoire');
72 // pas de double inscription avec le même email
73 if (sql_fetsel('reponse','spip_evenements_participants','id_evenement='.intval($id_evenement).' AND email='.sql_quote($email))) {
74 $erreurs['email'] = _T('erreur_email_deja_existant');
75 }
76 } elseif ($reponse!=='non' && isset($GLOBALS['visiteur_session']['id_auteur'])) {
77 $row = sql_fetsel('places','spip_evenements','id_evenement='.intval($id_evenement));
78 $valeurs['reponse'] = sql_getfetsel('reponse','spip_evenements_participants','id_evenement='.intval($id_evenement).' AND id_auteur='.intval($GLOBALS['visiteur_session']['id_auteur']));
79 if ($places = $row['places'] AND $valeurs['reponse']!==$reponse){
80 $ok = sql_countsel('spip_evenements_participants','id_evenement='.intval($id_evenement)." AND reponse='oui'");
81 $peutetre = sql_countsel('spip_evenements_participants','id_evenement='.intval($id_evenement)." AND reponse='?'");
82 // Les reponses PEUT-ETRE sont ponderees a 0,5 donc
83 // on multiplie tout par 2 pour eviter les troncatures ($total ne sert de toute facon que dans les tests)
84 $total = 2*$ok+$peutetre;
85 if (
86 // Si on est au taquet, le seul cas autorise restant (la reponse NON et la reponse identique sont prises
87 // en compte dans les tests ci-dessus) est: transformation d'un OUI en PEUT-ETRE (-0,5)
88 ($total>=2*$places AND !($valeurs['reponse']=='oui' AND $reponse=='?'))
89 OR
90 // Si il reste un siege PEUT-ETRE, le seul cas interdit restant est: transformation d'un NON en OUI (+1)
91 ($total==2*$places-1 AND ($valeurs['reponse']=='non' AND $reponse=='oui'))){
92 $erreurs['reponse'] = _T('agenda:plus_de_place');
93 }
94 }
95 }
96 return $erreurs;
97 }
98
99 function formulaires_participer_evenement_traiter_dist($id_evenement){
100
101 $reponse = _request('reponse');
102 $nom = _request('nom');
103 $email = _request('email');
104
105 if(isset($GLOBALS['visiteur_session']['id_auteur'])){
106 $editable = true;
107 if (sql_fetsel('reponse','spip_evenements_participants','id_evenement='.intval($id_evenement).' AND id_auteur='.intval($GLOBALS['visiteur_session']['id_auteur'])))
108 sql_updateq('spip_evenements_participants',array('reponse'=>$reponse,'date'=>'NOW()'),'id_evenement='.intval($id_evenement).' AND id_auteur='.intval($GLOBALS['visiteur_session']['id_auteur']));
109 else
110 sql_insertq('spip_evenements_participants',array('id_evenement'=>$id_evenement,'id_auteur'=>$GLOBALS['visiteur_session']['id_auteur'],'reponse'=>$reponse,'date'=>'NOW()'));
111 } else {
112 $editable = false;
113 sql_insertq('spip_evenements_participants',array('id_evenement'=>$id_evenement,'nom'=>$nom,'email'=>$email,'reponse'=>$reponse,'date'=>'NOW()'));
114 }
115 if ($reponse == 'oui')
116 $message = _T('agenda:participation_prise_en_compte');
117 elseif ($reponse == '?')
118 $message = _T('agenda:participation_incertaine_prise_en_compte');
119 else
120 $message = _T('agenda:absence_prise_en_compte');
121
122 include_spip('inc/invalideur');
123 suivre_invalideur("id='evenement/$id_evenement'");
124
125 return array('message_ok'=>$message,'editable'=>$editable);
126 }
127
128 ?>