[PLUGINS] +les plugins de bases
[ptitvelo/web/www.git] / www / plugins / agenda_3_5 / formulaires / participer_evenement.php
diff --git a/www/plugins/agenda_3_5/formulaires/participer_evenement.php b/www/plugins/agenda_3_5/formulaires/participer_evenement.php
new file mode 100644 (file)
index 0000000..868ec6b
--- /dev/null
@@ -0,0 +1,108 @@
+<?php
+/**
+ * Plugin Agenda 4 pour Spip 3.0
+ * Licence GPL 3
+ *
+ * 2006-2011
+ * Auteurs : cf paquet.xml
+ */
+
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+include_spip('inc/actions');
+include_spip('inc/editer');
+
+function formulaires_participer_evenement_charger_dist($id_evenement){
+       $valeurs = array();
+       // 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'])
+               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);
+}
+
+?>
\ No newline at end of file