Browse Source

feat: Amélioration de la relation entre statut de la réponse et participation à l'évènement.

Pour chaque statut on peut définir une règle:
    - `oui` : impose la participation
    - `non` : impose la non participation (par défaut pour les statuts `prop`, `poubelle`, `refuse`)
    - `auto` : dépend de la config du formulaire et du résultat de la réponse (par défaut pour statut `publie`)
    - `idem` : uniquement en cas de changement de statut : prendre l'ancienne valeur de participation.

Le tout est personnalisable par le pipeline `formidableparticipation_statuts_reponse_participation` si on ajoute des statuts / si on veut avoir des règles spéciales selon les formulaires / selon la réponse.
Maïeul 10 months ago
parent
commit
a75b362add
  1. 7
      CHANGELOG.md
  2. 3
      formidableparticipation_pipelines.php
  3. 33
      inc/formidableparticipation.php
  4. 1
      paquet.xml
  5. 14
      traiter/participation.php

7
CHANGELOG.md

@ -5,6 +5,13 @@
### Added
- #11 Le pipeline `traiter_formidableparticipation` reçoit, lors de la modification d'une réponse, la liste des ancien·nes participant·es
- #11 Amélioration de la relation entre statut de la réponse et participation à l'évènement. Pour chaque statut on peut définir une règle:
- `oui` : impose la participation
- `non` : impose la non participation (par défaut pour les statuts `prop`, `poubelle`, `refuse`)
- `auto` : dépend de la config du formulaire et du résultat de la réponse (par défaut pour statut `publie`)
- `idem` : uniquement en cas de changement de statut : prendre l'ancienne valeur de participation.
Le tout est personnalisable par le pipeline `formidableparticipation_statuts_reponse_participation` si on ajoute des statuts / si on veut avoir des règles spéciales selon les formulaires / selon la réponse
### Changed

3
formidableparticipation_pipelines.php

@ -131,7 +131,8 @@ function formidableparticipation_post_edition($flux) {
'formulaire' => $formulaire,
'id_formulaire' => $formulaire['id_formulaire'],
'id_formulaires_reponse' => $id_formulaires_reponse,
'options' => $traitements['participation']
'options' => $traitements['participation'],
'changement_statut' => $statut != $statut_ancien
);
$retours = array(
'traitements' => array(),

33
inc/formidableparticipation.php

@ -9,9 +9,40 @@ include_spip('formidable_fonctions');
* @param int|val $id_formulaire
* @param int|val $id_formulaires_reponse
* @param array $options les options du traitement participation
* @param bool $changement_statut true si on a affaire à un changement de statut de la réponse
* @return str oui|non
**/
function formidableparticipation_choix_participation($id_formulaire, $id_formulaires_reponse, $options) {
function formidableparticipation_choix_participation($id_formulaire, $id_formulaires_reponse, $options, $changement_statut = false) {
// Regarder s'il y a des statuts qui imposent un choix participation
$statut_reponse = sql_getfetsel('statut', 'spip_formulaires_reponses', "id_formulaires_reponse=$id_formulaires_reponse");
$statuts_reponse_participation = pipeline('formidableparticipation_statuts_reponse_participation',
array(
'args' => array(
'id_formulaire' => $id_formulaire,
'id_formulaires_reponse' => $id_formulaires_reponse,
'choix_participation' => $options['choix_participation_oui']
),
// 4 choix possibles
// - oui
// - non
// - auto : selon la config du formulaire
// - idem : prendre l'ancienne valeur de participation
'data' => array(
'prop' => 'non',
'poubelle' => 'non',
'refuse' => 'non',
'publie' => 'auto' // Si publie, on prend les règles de base
)
)
);
// Est-ce que c'est un statut qui impose quelque chose ?
if (in_array($statuts_reponse_participation[$statut_reponse], array('oui', 'non'))) {
return $statuts_reponse_participation[$statut_reponse];
} elseif ($changement_statut == true and $statuts_reponse_participation[$statut_reponse] === 'idem') {//Dans le cas de changement de statut avec un statut qui dit de garder l'ancien choix
return sql_getfetsel('reponse', 'spip_evenements_participants', "`id_formulaires_reponse`=$id_formulaires_reponse");
}
if ($options['participation_auto'] == 'auto') {
$choix_participation = 'oui';
} elseif ($options['champ_choix_participation']) {

1
paquet.xml

@ -15,6 +15,7 @@
<licence>GNU/GPL</licence>
<pipeline nom="traiter_formidableparticipation" inclure="formidableparticipation_pipelines.php" />
<pipeline nom="formidableparticipation_statuts_reponse_participation" action="" />
<pipeline nom="post_edition" inclure="formidableparticipation_pipelines.php" />
<pipeline nom="declarer_tables_auxiliaires" inclure="base/formidableparticipation.php" />
<pipeline nom="affiche_milieu" inclure="formidableparticipation_pipelines.php" />

14
traiter/participation.php

@ -18,6 +18,11 @@ function traiter_participation_dist($args, $retours) {
$options = $args['options'];
$id_formulaire = $formulaire['id_formulaire'];
$id_formulaires_reponse = $retours['id_formulaires_reponse'];
if (isset($args['changement_statut'])) {
$changement_statut = $args['changement_statut'];
} else {
$changement_statut = false;
}
// Initialisation des variable
@ -53,14 +58,7 @@ function traiter_participation_dist($args, $retours) {
$organisme_participation = calculer_voir_reponse($id_formulaires_reponse, $id_formulaire, $champ, '', 'brut', '');
}
$choix_participation = formidableparticipation_choix_participation($id_formulaire, $id_formulaires_reponse, $options);
// Si la réponse n'est pas publié (modération a priori), alors la réponse est non, en attendant une éventuelle future publication
$statut_reponse = sql_getfetsel('statut', 'spip_formulaires_reponses', "id_formulaires_reponse=$id_formulaires_reponse");
if ($statut_reponse != 'publie') {
$choix_participation = 'non';
}
$choix_participation = formidableparticipation_choix_participation($id_formulaire, $id_formulaires_reponse, $options, $changement_statut);
// détermination de l'évènement où s'inscrire
$id_evenement = formidableparticipation_id_evenement($id_formulaire, $id_formulaires_reponse, $options);

Loading…
Cancel
Save