868ec6b04933d04f04748a29758afc196b0925ed
[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){
16 $valeurs = array();
17 // si pas d'evenement ou d'inscription, on echoue silencieusement
18 if (!$row = sql_fetsel('inscription,places','spip_evenements','id_evenement='.intval($id_evenement).' AND date_fin>NOW()')
19 OR !$row['inscription'])
20 return false;
21
22 // si anonyme, on echoue avec avertissement
23 if (!$GLOBALS['visiteur_session']['id_auteur'])
24 return array(
25 'message_erreur'=>_T('agenda:connexion_necessaire_pour_inscription'),
26 'editable'=>false
27 );
28
29 // valeurs d'initialisation
30 $valeurs['id'] = $id_evenement;
31 $valeurs['reponse'] = sql_getfetsel('reponse','spip_evenements_participants','id_evenement='.intval($id_evenement).' AND id_auteur='.intval($GLOBALS['visiteur_session']['id_auteur']));
32
33 // si les places sont comptees, regarder si il en reste
34 if ($places = $row['places']){
35 $ok = sql_countsel('spip_evenements_participants','id_evenement='.intval($id_evenement)." AND reponse='oui'");
36 $peutetre = sql_countsel('spip_evenements_participants','id_evenement='.intval($id_evenement)." AND reponse='?'");
37 // Les reponses PEUT-ETRE sont ponderees a 0,5 donc
38 // on multiplie tout par 2 pour eviter les troncatures ($total ne sert de toute facon que dans les tests)
39 $total = 2*$ok+$peutetre;
40 if ($total>=2*$places){
41 // dans ce cas, le formulaire est editable seulement si l'auteur a deja repondu oui ou peut-etre, et peut changer d'avis !
42 if (!($valeurs['reponse']=='oui' OR $valeurs['reponse']=='?')){
43 $valeurs['editable'] = false;
44 $valeurs['message_ok'] = _T('agenda:evenement_complet');
45 }
46 }
47 }
48
49 return $valeurs;
50 }
51
52 function formulaires_participer_evenement_verifier_dist($id_evenement){
53 $erreurs = array();
54 $reponse = _request('reponse');
55 // Le test de la ligne suivante sert a savoir si la reponse est vide, non?
56 // On vient juste de la recuperer ci-dessus, pas la peine de la reaffecter...
57 if (!($reponse) OR !in_array($reponse,array('oui','non','?')))
58 $erreurs['reponse'] = _T('agenda:indiquez_votre_choix');
59 elseif ($reponse!=='non') {
60 $row = sql_fetsel('places','spip_evenements','id_evenement='.intval($id_evenement));
61 $valeurs['reponse'] = sql_getfetsel('reponse','spip_evenements_participants','id_evenement='.intval($id_evenement).' AND id_auteur='.intval($GLOBALS['visiteur_session']['id_auteur']));
62 if ($places = $row['places'] AND $valeurs['reponse']!==$reponse){
63 $ok = sql_countsel('spip_evenements_participants','id_evenement='.intval($id_evenement)." AND reponse='oui'");
64 $peutetre = sql_countsel('spip_evenements_participants','id_evenement='.intval($id_evenement)." AND reponse='?'");
65 // Les reponses PEUT-ETRE sont ponderees a 0,5 donc
66 // on multiplie tout par 2 pour eviter les troncatures ($total ne sert de toute facon que dans les tests)
67 $total = 2*$ok+$peutetre;
68 if (
69 // Si on est au taquet, le seul cas autorise restant (la reponse NON et la reponse identique sont prises
70 // en compte dans les tests ci-dessus) est: transformation d'un OUI en PEUT-ETRE (-0,5)
71 ($total>=2*$places AND !($valeurs['reponse']=='oui' AND $reponse=='?'))
72 OR
73 // Si il reste un siege PEUT-ETRE, le seul cas interdit restant est: transformation d'un NON en OUI (+1)
74 ($total==2*$places-1 AND ($valeurs['reponse']=='non' AND $reponse=='oui'))
75 ){
76 $erreurs['reponse'] = _T('agenda:plus_de_place');
77 }
78 }
79 }
80 return $erreurs;
81 }
82
83 function formulaires_participer_evenement_traiter_dist($id_evenement){
84
85 $reponse = _request('reponse');
86 if (sql_fetsel('reponse','spip_evenements_participants','id_evenement='.intval($id_evenement).' AND id_auteur='.intval($GLOBALS['visiteur_session']['id_auteur']))){
87 sql_updateq('spip_evenements_participants',array('reponse'=>$reponse),'id_evenement='.intval($id_evenement).' AND id_auteur='.intval($GLOBALS['visiteur_session']['id_auteur']));
88 }
89 else
90 sql_insertq('spip_evenements_participants',array('id_evenement'=>$id_evenement,'id_auteur'=>$GLOBALS['visiteur_session']['id_auteur'],'reponse'=>$reponse,'date'=>'NOW()'));
91
92 $retour = array('editable'=>true);
93 if (!$reponse = sql_getfetsel('reponse','spip_evenements_participants','id_evenement='.intval($id_evenement).' AND id_auteur='.intval($GLOBALS['visiteur_session']['id_auteur']))
94 OR $reponse!=_request('reponse')){
95 $retour['message_erreur'] = _T('agenda:probleme_technique');
96 }
97 else {
98 if ($reponse=='oui')
99 $message = _T('agenda:participation_prise_en_compte');
100 elseif ($reponse=='?')
101 $message = _T('agenda:participation_incertaine_prise_en_compte');
102 else
103 $message = _T('agenda:absence_prise_en_compte');
104 }
105 return array('message_ok'=>$message,'editable'=>true);
106 }
107
108 ?>