NOW()') OR !$row['inscription']) return false; // si anonyme, on echoue avec avertissement if (!$GLOBALS['visiteur_session']['id_auteur']) return array( 'message_erreur'=>_T('agenda:connexion_necessaire_pour_inscription'), 'editable'=>false ); // 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'])); // si les places sont comptees, regarder si il en reste if ($places = $row['places']){ $ok = sql_countsel('spip_evenements_participants','id_evenement='.intval($id_evenement)." AND reponse='oui'"); $peutetre = sql_countsel('spip_evenements_participants','id_evenement='.intval($id_evenement)." AND reponse='?'"); // Les reponses PEUT-ETRE sont ponderees a 0,5 donc // 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']=='?')){ $valeurs['editable'] = false; $valeurs['message_ok'] = _T('agenda:evenement_complet'); } } } return $valeurs; } function formulaires_participer_evenement_verifier_dist($id_evenement){ $erreurs = array(); $reponse = _request('reponse'); // 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') { $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){ $ok = sql_countsel('spip_evenements_participants','id_evenement='.intval($id_evenement)." AND reponse='oui'"); $peutetre = sql_countsel('spip_evenements_participants','id_evenement='.intval($id_evenement)." AND reponse='?'"); // Les reponses PEUT-ETRE sont ponderees a 0,5 donc // 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'); } } } return $erreurs; } 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); } ?>