X-Git-Url: http://git.cyclocoop.org/?p=ptitvelo%2Fweb%2Fwww.git;a=blobdiff_plain;f=www%2Fplugins%2Fagenda_3_5%2Fformulaires%2Fparticiper_evenement.php;fp=www%2Fplugins%2Fagenda_3_5%2Fformulaires%2Fparticiper_evenement.php;h=7c91173eb12c75dc064de20a930d320551a4022f;hp=868ec6b04933d04f04748a29758afc196b0925ed;hb=e9831187c8ec71fdae89f823e969d63fc3cbc7f3;hpb=f854641371bdfbaba8fbab6212853d9795ba8cc8 diff --git a/www/plugins/agenda_3_5/formulaires/participer_evenement.php b/www/plugins/agenda_3_5/formulaires/participer_evenement.php index 868ec6b..7c91173 100644 --- a/www/plugins/agenda_3_5/formulaires/participer_evenement.php +++ b/www/plugins/agenda_3_5/formulaires/participer_evenement.php @@ -12,15 +12,19 @@ if (!defined("_ECRIRE_INC_VERSION")) return; include_spip('inc/actions'); include_spip('inc/editer'); -function formulaires_participer_evenement_charger_dist($id_evenement){ - $valeurs = array(); +function formulaires_participer_evenement_charger_dist($id_evenement, $mode=''){ + $valeurs = array( + 'nom' => isset($GLOBALS['visiteur_session']['id_auteur']) ? $GLOBALS['visiteur_session']['nom'] : _request('nom'), + 'email' => isset($GLOBALS['visiteur_session']['id_auteur']) ? $GLOBALS['visiteur_session']['email'] : _request('email'), + 'reponse' => _request('reponse'), + ); // si pas d'evenement ou d'inscription, on echoue silencieusement if (!$row = sql_fetsel('inscription,places','spip_evenements','id_evenement='.intval($id_evenement).' AND date_fin>NOW()') - OR !$row['inscription']) + OR !$row['inscription']) return false; // si anonyme, on echoue avec avertissement - if (!$GLOBALS['visiteur_session']['id_auteur']) + if ($mode!='public' && (!isset($GLOBALS['visiteur_session']['id_auteur']) || !$GLOBALS['visiteur_session']['id_auteur'])) return array( 'message_erreur'=>_T('agenda:connexion_necessaire_pour_inscription'), 'editable'=>false @@ -28,7 +32,8 @@ function formulaires_participer_evenement_charger_dist($id_evenement){ // valeurs d'initialisation $valeurs['id'] = $id_evenement; - $valeurs['reponse'] = sql_getfetsel('reponse','spip_evenements_participants','id_evenement='.intval($id_evenement).' AND id_auteur='.intval($GLOBALS['visiteur_session']['id_auteur'])); + if(isset($GLOBALS['visiteur_session']['id_auteur'])) + $valeurs['reponse'] = sql_getfetsel('reponse','spip_evenements_participants','id_evenement='.intval($id_evenement).' AND id_auteur='.intval($GLOBALS['visiteur_session']['id_auteur'])); // si les places sont comptees, regarder si il en reste if ($places = $row['places']){ @@ -38,8 +43,8 @@ function formulaires_participer_evenement_charger_dist($id_evenement){ // on multiplie tout par 2 pour eviter les troncatures ($total ne sert de toute facon que dans les tests) $total = 2*$ok+$peutetre; if ($total>=2*$places){ - // dans ce cas, le formulaire est editable seulement si l'auteur a deja repondu oui ou peut-etre, et peut changer d'avis ! - if (!($valeurs['reponse']=='oui' OR $valeurs['reponse']=='?')){ + // dans ce cas, le formulaire est editable seulement si l'auteur a deja repondu oui ou peut-etre, et peut changer d'avis ! + if (!($valeurs['reponse']=='oui' OR $valeurs['reponse']=='?')){ $valeurs['editable'] = false; $valeurs['message_ok'] = _T('agenda:evenement_complet'); } @@ -49,14 +54,26 @@ function formulaires_participer_evenement_charger_dist($id_evenement){ return $valeurs; } -function formulaires_participer_evenement_verifier_dist($id_evenement){ +function formulaires_participer_evenement_verifier_dist($id_evenement, $mode=''){ $erreurs = array(); $reponse = _request('reponse'); + $nom = _request('nom'); + $email = _request('email'); // Le test de la ligne suivante sert a savoir si la reponse est vide, non? // On vient juste de la recuperer ci-dessus, pas la peine de la reaffecter... if (!($reponse) OR !in_array($reponse,array('oui','non','?'))) $erreurs['reponse'] = _T('agenda:indiquez_votre_choix'); - elseif ($reponse!=='non') { + elseif ($mode=='public' AND !isset($GLOBALS['visiteur_session']['id_auteur'])) { + // nom et email sont obligatoires + if (!$nom) + $erreurs['nom'] = _T('info_obligatoire'); + if (!$email) + $erreurs['email'] = _T('info_obligatoire'); + // pas de double inscription avec le même email + if (sql_fetsel('reponse','spip_evenements_participants','id_evenement='.intval($id_evenement).' AND email='.sql_quote($email))) { + $erreurs['email'] = _T('erreur_email_deja_existant'); + } + } elseif ($reponse!=='non' && isset($GLOBALS['visiteur_session']['id_auteur'])) { $row = sql_fetsel('places','spip_evenements','id_evenement='.intval($id_evenement)); $valeurs['reponse'] = sql_getfetsel('reponse','spip_evenements_participants','id_evenement='.intval($id_evenement).' AND id_auteur='.intval($GLOBALS['visiteur_session']['id_auteur'])); if ($places = $row['places'] AND $valeurs['reponse']!==$reponse){ @@ -66,14 +83,13 @@ function formulaires_participer_evenement_verifier_dist($id_evenement){ // on multiplie tout par 2 pour eviter les troncatures ($total ne sert de toute facon que dans les tests) $total = 2*$ok+$peutetre; if ( - // Si on est au taquet, le seul cas autorise restant (la reponse NON et la reponse identique sont prises - // en compte dans les tests ci-dessus) est: transformation d'un OUI en PEUT-ETRE (-0,5) - ($total>=2*$places AND !($valeurs['reponse']=='oui' AND $reponse=='?')) - OR - // Si il reste un siege PEUT-ETRE, le seul cas interdit restant est: transformation d'un NON en OUI (+1) - ($total==2*$places-1 AND ($valeurs['reponse']=='non' AND $reponse=='oui')) - ){ - $erreurs['reponse'] = _T('agenda:plus_de_place'); + // Si on est au taquet, le seul cas autorise restant (la reponse NON et la reponse identique sont prises + // en compte dans les tests ci-dessus) est: transformation d'un OUI en PEUT-ETRE (-0,5) + ($total>=2*$places AND !($valeurs['reponse']=='oui' AND $reponse=='?')) + OR + // Si il reste un siege PEUT-ETRE, le seul cas interdit restant est: transformation d'un NON en OUI (+1) + ($total==2*$places-1 AND ($valeurs['reponse']=='non' AND $reponse=='oui'))){ + $erreurs['reponse'] = _T('agenda:plus_de_place'); } } } @@ -83,26 +99,30 @@ function formulaires_participer_evenement_verifier_dist($id_evenement){ function formulaires_participer_evenement_traiter_dist($id_evenement){ $reponse = _request('reponse'); - if (sql_fetsel('reponse','spip_evenements_participants','id_evenement='.intval($id_evenement).' AND id_auteur='.intval($GLOBALS['visiteur_session']['id_auteur']))){ - sql_updateq('spip_evenements_participants',array('reponse'=>$reponse),'id_evenement='.intval($id_evenement).' AND id_auteur='.intval($GLOBALS['visiteur_session']['id_auteur'])); - } - else - sql_insertq('spip_evenements_participants',array('id_evenement'=>$id_evenement,'id_auteur'=>$GLOBALS['visiteur_session']['id_auteur'],'reponse'=>$reponse,'date'=>'NOW()')); - - $retour = array('editable'=>true); - if (!$reponse = sql_getfetsel('reponse','spip_evenements_participants','id_evenement='.intval($id_evenement).' AND id_auteur='.intval($GLOBALS['visiteur_session']['id_auteur'])) - OR $reponse!=_request('reponse')){ - $retour['message_erreur'] = _T('agenda:probleme_technique'); - } - else { - if ($reponse=='oui') - $message = _T('agenda:participation_prise_en_compte'); - elseif ($reponse=='?') - $message = _T('agenda:participation_incertaine_prise_en_compte'); - else - $message = _T('agenda:absence_prise_en_compte'); - } - return array('message_ok'=>$message,'editable'=>true); + $nom = _request('nom'); + $email = _request('email'); + + if(isset($GLOBALS['visiteur_session']['id_auteur'])){ + $editable = true; + if (sql_fetsel('reponse','spip_evenements_participants','id_evenement='.intval($id_evenement).' AND id_auteur='.intval($GLOBALS['visiteur_session']['id_auteur']))) + sql_updateq('spip_evenements_participants',array('reponse'=>$reponse,'date'=>'NOW()'),'id_evenement='.intval($id_evenement).' AND id_auteur='.intval($GLOBALS['visiteur_session']['id_auteur'])); + else + sql_insertq('spip_evenements_participants',array('id_evenement'=>$id_evenement,'id_auteur'=>$GLOBALS['visiteur_session']['id_auteur'],'reponse'=>$reponse,'date'=>'NOW()')); + } else { + $editable = false; + sql_insertq('spip_evenements_participants',array('id_evenement'=>$id_evenement,'nom'=>$nom,'email'=>$email,'reponse'=>$reponse,'date'=>'NOW()')); + } + if ($reponse == 'oui') + $message = _T('agenda:participation_prise_en_compte'); + elseif ($reponse == '?') + $message = _T('agenda:participation_incertaine_prise_en_compte'); + else + $message = _T('agenda:absence_prise_en_compte'); + + include_spip('inc/invalideur'); + suivre_invalideur("id='evenement/$id_evenement'"); + + return array('message_ok'=>$message,'editable'=>$editable); } ?> \ No newline at end of file