Changeset 90920 in spip-zone


Ignore:
Timestamp:
Jul 19, 2015, 9:06:24 AM (4 years ago)
Author:
abelass@…
Message:

si changement de statut ne pas passer par la fonction editer objet, uniquement instituer objet

Location:
_plugins_/reservation_evenement
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/reservation_evenement/branches/v1/action/editer_reservation.php

    r89541 r90920  
    11<?php
    22if (!defined('_ECRIRE_INC_VERSION'))
    3         return;
     3  return;
    44
    55function reservation_inserer($id_parent = null, $set = null) {
    6         $table_sql = table_objet_sql('reservation');
    7         $champs = array();
    8         $champs['statut'] = 'encours';
    9         $champs['date'] = date('Y-m-d H:i:s');
    10 
    11         if ($set)
    12                 $champs = array_merge($champs, $set);
    13 
    14         // Envoyer aux plugins
    15         $champs = pipeline('pre_insertion', array(
    16                 'args' => array('table' => $table_sql, ),
    17                 'data' => $champs
    18         ));
    19 
    20         $id = sql_insertq($table_sql, $champs);
    21 
    22         if ($id) {
    23                 pipeline('post_insertion', array(
    24                         'args' => array(
    25                                 'table' => $table_sql,
    26                                 'id_objet' => $id,
    27                         ),
    28                         'data' => $champs
    29                 ));
    30         }
    31         return $id;
     6  $table_sql = table_objet_sql('reservation');
     7  $champs = array();
     8  $champs['statut'] = 'encours';
     9  $champs['date'] = date('Y-m-d H:i:s');
     10
     11  if ($set)
     12    $champs = array_merge($champs, $set);
     13
     14  // Envoyer aux plugins
     15  $champs = pipeline('pre_insertion', array(
     16    'args' => array('table' => $table_sql, ),
     17    'data' => $champs
     18  ));
     19
     20  $id = sql_insertq($table_sql, $champs);
     21
     22  if ($id) {
     23    pipeline('post_insertion', array(
     24      'args' => array(
     25        'table' => $table_sql,
     26        'id_objet' => $id,
     27      ),
     28      'data' => $champs
     29    ));
     30  }
     31  return $id;
    3232}
    3333
    3434function reservation_instituer($id_reservation, $c, $calcul_rub = true) {
    35         $table_sql = table_objet_sql('reservation');
    36         $trouver_table = charger_fonction('trouver_table', 'base');
    37 
    38         include_spip('inc/autoriser');
    39         include_spip('inc/rubriques');
    40         include_spip('inc/modifier');
    41         include_spip('inc/config');
    42         $config = lire_config('reservation_evenement');
    43 
    44         $row = sql_fetsel('statut,date,id_auteur,email,lang', 'spip_reservations', 'id_reservation=' . intval($id_reservation));
    45         $statut_ancien = $statut = $row['statut'];
    46         $date_ancienne = $date = $row['date'];
    47 
    48         $d = isset($c['date']) ? $c['date'] : null;
    49         $s = isset($c['statut']) ? $c['statut'] : $statut;
    50 
    51         $champs = array();
    52         // cf autorisations dans inc/instituer_objet
    53         if ($s != $statut OR ($d AND $d != $date)) {
    54                 if (autoriser('modifier', 'reservation', $id_reservation))
    55                         $statut = $champs['statut'] = $s;
    56                 else
    57                         spip_log("editer_reservation $id_reservation refus " . join(' ', $c));
    58 
    59                 // En cas de publication, fixer la date a "maintenant"
    60                 // sauf si $c commande autre chose
    61                 // ou si l'objet est deja date dans le futur
    62                 // En cas de proposition d'un objet (mais pas depublication), idem
    63                 if ($champ_date) {
    64                         if ($champs['statut'] == 'publie' OR ($champs['statut'] == 'prop' AND !in_array($statut_ancien, array(
    65                                 'publie',
    66                                 'prop'
    67                         ))) OR $d) {
    68                                 if ($d OR strtotime($d = $date) > time())
    69                                         $champs[$champ_date] = $date = $d;
    70                                 else
    71                                         $champs[$champ_date] = $date = date('Y-m-d H:i:s');
    72                         }
    73                 }
    74         }
    75 
    76         //les champs extras auteur
    77         include_spip('cextras_pipelines');
    78         $valeurs_extras = array();
    79 
    80         if (function_exists('champs_extras_objet')) {
    81                 //Charger les définitions pour la création des formulaires
    82                 $champs_extras_auteurs = champs_extras_objet(table_objet_sql('auteur'));
    83 
    84                 if (is_array($champs_extras_auteurs)) {
    85                         foreach ($champs_extras_auteurs as $value) {
    86                                 $valeurs_extras[$value['options']['nom']] = _request($value['options']['nom']);
    87                         }
    88                 }
    89 
    90                 $champs['donnees_auteur'] = serialize($valeurs_extras);
    91         }
    92 
    93         // Envoyer aux plugins
    94         $champs = pipeline('pre_edition', array(
    95                 'args' => array(
    96                         'table' => 'spip_reservations',
    97                         'id_reservation' => $id_reservation,
    98                         'action' => 'instituer',
    99                         'statut_ancien' => $statut_ancien,
    100                         'date_ancienne' => $date_ancienne,
    101                 ),
    102                 'data' => $champs
    103         ));
    104 
    105         if (!count($champs))
    106                 return '';
    107 
    108         // Envoyer les modifs.
    109         objet_editer_heritage('reservation', $id_reservation, '', $statut_ancien, $champs);
    110 
    111         // Invalider les caches
    112         include_spip('inc/invalideur');
    113         suivre_invalideur("id='reservation/$id_reservation'");
    114 
    115         // Pipeline
    116         pipeline('post_edition', array(
    117                 'args' => array(
    118                         'table' => 'spip_reservations',
    119                         'id_reservation' => $id_reservation,
    120                         'action' => 'instituer',
    121                         'statut_ancien' => $statut_ancien,
    122                         'date_ancienne' => $date_ancienne,
    123                         'id_parent_ancien' => $id_rubrique,
    124                 ),
    125                 'data' => $champs
    126         ));
    127 
    128         // Les traitements spécifiques
    129 
    130         $action = charger_fonction('editer_objet', 'action');
    131         $quantite = _request('quantite');
    132         $set = array(
    133                 'id_reservation' => $id_reservation,
    134                 'statut' => $statut
    135         );
    136 
    137         // Gérer les détails des réservations
    138         $evenements = _request('id_evenement');
    139 
    140         // Si les déclinaisons sont actives on récupère les évenements via le prix
    141         if (test_plugin_actif('declinaisons')) {
    142                 $evenements = array();
    143                 if ($id_prix_objet = _request('id_objet_prix')) {
    144                         foreach (array_keys($id_prix_objet ) AS $id_evenement) {
    145                                 $evenements[] = $id_evenement;
    146                         }
    147                 }
    148         }
    149         // Si on n'est pas dans le cas d'une création, on récupère les détails attachées à la réservation
    150         if (!is_array($evenements) OR (is_array($evenements) AND count($evenements) == 0)) {
    151 
    152                 $evenements = array();
    153                 $sql = sql_select('id_evenement', 'spip_reservations_details', 'id_reservation=' . $id_reservation);
    154                 while ($data = sql_fetch($sql)) {
    155                         $evenements[] = $data['id_evenement'];
    156                 }
    157         } else {
    158                 $set['evenements'] = $evenements;
    159                 set_request('evenements', $evenements);
    160         }
    161         // Pour chaque évènement on crée un détail de la réservation
    162 
    163         foreach ($evenements AS $id_evenement) {
    164                 // Si aucun détail n'est attaché à l'évènement, on le crée
    165                 if (!$reservations_detail = sql_fetsel('*', 'spip_reservations_details', 'id_reservation=' . $id_reservation . ' AND id_evenement=' . $id_evenement)) {
    166                         $id_reservations_detail = 'new';
    167                         $set['id_prix_objet'] = $id_prix_objet[$id_evenement];
    168                 } else
    169                         $id_reservations_detail = $reservations_detail['id_reservations_detail'];
    170 
    171                 // Pour l'enregistrement
    172                 $set['id_evenement'] = $id_evenement;
    173 
    174                 // Eviter l'envoi d'une notification pour chaque détail
    175                 set_request('envoi_separe_actif', 'non');
    176 
    177                 $detail = $action($id_reservations_detail, 'reservations_detail', $set);
    178 
    179         }
    180 
    181         // Notifications
    182 
    183         if ((!$statut_ancien OR $statut != $statut_ancien) && (isset($config['activer'])) && (isset($config['quand']) && is_array($config['quand']) && in_array($statut, $config['quand'])) && ($notifications = charger_fonction('notifications', 'inc', true))) {
    184                 //Déterminer la langue pour les notifications
    185                 $lang = isset($row['lang']) ? $row['lang'] : lire_config('langue_site');
    186                 lang_select($lang);
    187                 // Determiner l'expediteur
    188                 $options = array(
    189                         'statut' => $statut,
    190                         'lang' => $lang
    191                 );
    192                 if ($config['expediteur'] != "facteur")
    193                         $options['expediteur'] = $config['expediteur_' . $config['expediteur']];
    194 
    195                 // Envoyer au vendeur et au client
    196                 $notifications('reservation_vendeur', $id_reservation, $options);
    197                 if ($config['client']) {
    198                         //$row['email']=trim($row['email']);
    199                         if (intval($row['id_auteur']) AND $row['id_auteur'] > 0)
    200                                 $options['email'] = sql_getfetsel('email', 'spip_auteurs', 'id_auteur=' . $row['id_auteur']);
    201                         else
    202                                 $options['email'] = $row['email'];
    203 
    204                         $notifications('reservation_client', $id_reservation, $options);
    205                 }
    206 
    207         }
    208 
    209         return '';
    210         // pas d'erreur
     35  $table_sql = table_objet_sql('reservation');
     36  $trouver_table = charger_fonction('trouver_table', 'base');
     37
     38  include_spip('inc/autoriser');
     39  include_spip('inc/rubriques');
     40  include_spip('inc/modifier');
     41  include_spip('inc/config');
     42  $config = lire_config('reservation_evenement');
     43
     44  $row = sql_fetsel('statut,date,id_auteur,email,lang', 'spip_reservations', 'id_reservation=' . intval($id_reservation));
     45  $statut_ancien = $statut = $row['statut'];
     46  $date_ancienne = $date = $row['date'];
     47
     48  $d = isset($c['date']) ? $c['date'] : null;
     49  $s = isset($c['statut']) ? $c['statut'] : $statut;
     50
     51  $champs = array();
     52  // cf autorisations dans inc/instituer_objet
     53  if ($s != $statut OR ($d AND $d != $date)) {
     54    if (autoriser('modifier', 'reservation', $id_reservation))
     55      $statut = $champs['statut'] = $s;
     56    else
     57      spip_log("editer_reservation $id_reservation refus " . join(' ', $c));
     58
     59    // En cas de publication, fixer la date a "maintenant"
     60    // sauf si $c commande autre chose
     61    // ou si l'objet est deja date dans le futur
     62    // En cas de proposition d'un objet (mais pas depublication), idem
     63    if ($champ_date) {
     64      if ($champs['statut'] == 'publie' OR ($champs['statut'] == 'prop' AND !in_array($statut_ancien, array(
     65        'publie',
     66        'prop'
     67      ))) OR $d) {
     68        if ($d OR strtotime($d = $date) > time())
     69          $champs[$champ_date] = $date = $d;
     70        else
     71          $champs[$champ_date] = $date = date('Y-m-d H:i:s');
     72      }
     73    }
     74  }
     75
     76  //les champs extras auteur
     77  include_spip('cextras_pipelines');
     78  $valeurs_extras = array();
     79
     80  if (function_exists('champs_extras_objet')) {
     81    //Charger les définitions pour la création des formulaires
     82    $champs_extras_auteurs = champs_extras_objet(table_objet_sql('auteur'));
     83
     84    if (is_array($champs_extras_auteurs)) {
     85      foreach ($champs_extras_auteurs as $value) {
     86        $valeurs_extras[$value['options']['nom']] = _request($value['options']['nom']);
     87      }
     88    }
     89
     90    $champs['donnees_auteur'] = serialize($valeurs_extras);
     91  }
     92
     93  // Envoyer aux plugins
     94  $champs = pipeline('pre_edition', array(
     95    'args' => array(
     96      'table' => 'spip_reservations',
     97      'id_reservation' => $id_reservation,
     98      'action' => 'instituer',
     99      'statut_ancien' => $statut_ancien,
     100      'date_ancienne' => $date_ancienne,
     101    ),
     102    'data' => $champs
     103  ));
     104
     105  if (!count($champs))
     106    return '';
     107
     108  // Envoyer les modifs.
     109  objet_editer_heritage('reservation', $id_reservation, '', $statut_ancien, $champs);
     110
     111  // Invalider les caches
     112  include_spip('inc/invalideur');
     113  suivre_invalideur("id='reservation/$id_reservation'");
     114
     115  // Pipeline
     116  pipeline('post_edition', array(
     117    'args' => array(
     118      'table' => 'spip_reservations',
     119      'id_reservation' => $id_reservation,
     120      'action' => 'instituer',
     121      'statut_ancien' => $statut_ancien,
     122      'date_ancienne' => $date_ancienne,
     123      'id_parent_ancien' => $id_rubrique,
     124    ),
     125    'data' => $champs
     126  ));
     127
     128  // Les traitements spécifiques
     129
     130  $set = array(
     131    'id_reservation' => $id_reservation,
     132    'statut' => $statut
     133  );
     134
     135  // Gérer les détails des réservations
     136  $evenements = _request('id_evenement');
     137
     138  // Si les déclinaisons sont actives on récupère les évenements via le prix
     139  if (test_plugin_actif('declinaisons')) {
     140    $evenements = array();
     141    if ($id_prix_objet = _request('id_objet_prix')) {
     142      foreach (array_keys($id_prix_objet ) AS $id_evenement) {
     143        $evenements[] = $id_evenement;
     144      }
     145    }
     146  }
     147  // Si on n'est pas dans le cas d'une création, on récupère les détails attachées à la réservation
     148  if (!is_array($evenements) OR (is_array($evenements) AND count($evenements) == 0)) {
     149    include_spip('action/editer_reservations_detail');
     150    $c = array('statut' => $statut);
     151    $sql = sql_select('id_reservations_detail', 'spip_reservations_details', 'id_reservation=' . $id_reservation);
     152    while ($data = sql_fetch($sql)) {
     153      reservations_detail_instituer($data['id_reservations_detail'], $c);
     154    }
     155  }
     156  else {
     157    $action = charger_fonction('editer_objet', 'action');
     158    $set['evenements'] = $evenements;
     159    set_request('evenements', $evenements);
     160  }
     161  //Si on est dans le cas d'une création
     162  if (is_array($evenements)) {
     163    // Pour chaque évènement on crée un détail de la réservation
     164    foreach ($evenements AS $id_evenement) {
     165      // Si aucun détail n'est attaché à l'évènement, on le crée
     166      if (!$reservations_detail = sql_fetsel('*', 'spip_reservations_details', 'id_reservation=' . $id_reservation . ' AND id_evenement=' . $id_evenement)) {
     167        $id_reservations_detail = 'new';
     168        $set['id_prix_objet'] = $id_prix_objet[$id_evenement];
     169      }
     170      else {
     171        $id_reservations_detail = $reservations_detail['id_reservations_detail'];
     172        $set['quantite'] = $reservations_detail['quantite'];
     173      }
     174
     175      // Pour l'enregistrement
     176      $set['id_evenement'] = $id_evenement;
     177
     178      // Eviter l'envoi d'une notification pour chaque détail
     179      set_request('envoi_separe_actif', 'non');
     180      $detail = $action($id_reservations_detail, 'reservations_detail', $set);
     181    }
     182  }
     183
     184  // Notifications
     185
     186  if ((!$statut_ancien OR $statut != $statut_ancien) && (isset($config['activer'])) && (isset($config['quand']) && is_array($config['quand']) && in_array($statut, $config['quand'])) && ($notifications = charger_fonction('notifications', 'inc', true))) {
     187    //Déterminer la langue pour les notifications
     188    $lang = isset($row['lang']) ? $row['lang'] : lire_config('langue_site');
     189    lang_select($lang);
     190    // Determiner l'expediteur
     191    $options = array(
     192      'statut' => $statut,
     193      'lang' => $lang
     194    );
     195    if ($config['expediteur'] != "facteur")
     196      $options['expediteur'] = $config['expediteur_' . $config['expediteur']];
     197
     198    // Envoyer au vendeur et au client
     199    $notifications('reservation_vendeur', $id_reservation, $options);
     200    if ($config['client']) {
     201      //$row['email']=trim($row['email']);
     202      if (intval($row['id_auteur']) AND $row['id_auteur'] > 0)
     203        $options['email'] = sql_getfetsel('email', 'spip_auteurs', 'id_auteur=' . $row['id_auteur']);
     204      else
     205        $options['email'] = $row['email'];
     206
     207      $notifications('reservation_client', $id_reservation, $options);
     208    }
     209
     210  }
     211
     212  return '';
     213  // pas d'erreur
    211214}
  • _plugins_/reservation_evenement/branches/v1/action/editer_reservations_detail.php

    r87953 r90920  
    44function reservations_detail_modifier($id_reservations_detail, $set=null) {
    55
    6         $table_sql = table_objet_sql('reservations_detail');
    7         $trouver_table = charger_fonction('trouver_table','base');
    8         $desc = $trouver_table($table_sql);
    9         if (!$desc OR !isset($desc['field'])) {
    10                 spip_log("Objet $objet inconnu dans objet_modifier",_LOG_ERREUR);
    11                 return _L("Erreur objet $objet inconnu");
    12         }
    13         include_spip('inc/modifier');
    14 
    15         $champ_date = '';
    16         if (isset($desc['date']) AND $desc['date'])
    17                 $champ_date = $desc['date'];
    18         elseif (isset($desc['field']['date']))
    19                 $champ_date = 'date';
    20 
    21         $white = array_keys($desc['field']);
    22         // on ne traite pas la cle primaire par defaut, notamment car
    23         // sur une creation, id_x vaut 'oui', et serait enregistre en id_x=0 dans la base
    24         $white = array_diff($white, array($desc['key']['PRIMARY KEY']));
    25 
    26         if (isset($desc['champs_editables']) AND is_array($desc['champs_editables'])) {
    27                 $white = $desc['champs_editables'];
    28         }
    29         $c = collecter_requests(
    30                 // white list
    31                 $white,
    32                 // black list
    33                 array($champ_date,'statut','id_parent','id_secteur'),
    34                 // donnees eventuellement fournies
    35                 $set
    36         );
    37 
    38         $donnees_reservations_details=charger_fonction('donnees_reservations_details','inc');
    39        
    40         //On retient le prix original pour le cas ou celui est modifié par la suite
    41 
    42         $details=$donnees_reservations_details($id_reservations_detail,$c);
    43         $details['prix original']=isset($details['prix_ht'])?$details['prix_ht']:'';
    44        
    45         //Pipeline permettant aux plugins de modifier les détails de la réservation
    46         $c = pipeline('reservation_evenement_donnees_details',array(
    47                                         'args'=>$set,
    48                                         'data'=>array_merge($c,$details)
    49                                         )
    50                                 );
    51 
    52         // Si l'objet est publie, invalider les caches et demander sa reindexation
    53         if (objet_test_si_publie($objet,$id)){
    54                 $invalideur = "id='reservations_detail/$id_reservations_detail'";
    55                 $indexation = true;
    56         }
    57         else {
    58                 $invalideur = "";
    59                 $indexation = false;
    60         }
    61 
    62         if ($err = objet_modifier_champs('reservations_detail',$id_reservations_detail,
    63                 array(
    64                         'nonvide' => '',
    65                         'invalideur' => $invalideur,
    66                         'indexation' => $indexation,
    67                         // champ a mettre a date('Y-m-d H:i:s') s'il y a modif
    68                         'date_modif' => (isset($desc['field']['date_modif'])?'date_modif':'')
    69                 ),
    70                 $c))
    71                 return $err;
    72 
    73         // Modification de statut, changement de rubrique ?
    74         // FIXME: Ici lorsqu'un $set est passé, la fonction collecter_requests() retourne tout
    75         //         le tableau $set hors black liste, mais du coup on a possiblement des champs en trop.
    76         $c = collecter_requests(array($champ_date, 'statut', 'id_parent'),array(),$set);
    77         $err = reservations_detail_instituer($id_reservations_detail, $c);
    78 
    79         return $err;
     6  $table_sql = table_objet_sql('reservations_detail');
     7  $trouver_table = charger_fonction('trouver_table','base');
     8  $desc = $trouver_table($table_sql);
     9  if (!$desc OR !isset($desc['field'])) {
     10    spip_log("Objet $objet inconnu dans objet_modifier",_LOG_ERREUR);
     11    return _L("Erreur objet $objet inconnu");
     12  }
     13  include_spip('inc/modifier');
     14
     15  $champ_date = '';
     16  if (isset($desc['date']) AND $desc['date'])
     17    $champ_date = $desc['date'];
     18  elseif (isset($desc['field']['date']))
     19    $champ_date = 'date';
     20
     21  $white = array_keys($desc['field']);
     22  // on ne traite pas la cle primaire par defaut, notamment car
     23  // sur une creation, id_x vaut 'oui', et serait enregistre en id_x=0 dans la base
     24  $white = array_diff($white, array($desc['key']['PRIMARY KEY']));
     25
     26  if (isset($desc['champs_editables']) AND is_array($desc['champs_editables'])) {
     27    $white = $desc['champs_editables'];
     28  }
     29  $c = collecter_requests(
     30    // white list
     31    $white,
     32    // black list
     33    array($champ_date,'statut','id_parent','id_secteur'),
     34    // donnees eventuellement fournies
     35    $set
     36  );
     37
     38  $donnees_reservations_details=charger_fonction('donnees_reservations_details','inc');
     39 
     40  //On retient le prix original pour le cas ou celui est modifié par la suite
     41
     42  $details=$donnees_reservations_details($id_reservations_detail,$c);
     43  $details['prix original']=isset($details['prix_ht'])?$details['prix_ht']:'';
     44 
     45  //Pipeline permettant aux plugins de modifier les détails de la réservation
     46  $c = pipeline('reservation_evenement_donnees_details',array(
     47          'args'=>$set,
     48          'data'=>array_merge($c,$details)
     49          )
     50        );
     51
     52  // Si l'objet est publie, invalider les caches et demander sa reindexation
     53  if (objet_test_si_publie($objet,$id)){
     54    $invalideur = "id='reservations_detail/$id_reservations_detail'";
     55    $indexation = true;
     56  }
     57  else {
     58    $invalideur = "";
     59    $indexation = false;
     60  }
     61
     62  if ($err = objet_modifier_champs('reservations_detail',$id_reservations_detail,
     63    array(
     64      'nonvide' => '',
     65      'invalideur' => $invalideur,
     66      'indexation' => $indexation,
     67      // champ a mettre a date('Y-m-d H:i:s') s'il y a modif
     68      'date_modif' => (isset($desc['field']['date_modif'])?'date_modif':'')
     69    ),
     70    $c))
     71    return $err;
     72
     73  // Modification de statut, changement de rubrique ?
     74  // FIXME: Ici lorsqu'un $set est passé, la fonction collecter_requests() retourne tout
     75  //         le tableau $set hors black liste, mais du coup on a possiblement des champs en trop.
     76  $c = collecter_requests(array($champ_date, 'statut', 'id_parent'),array(),$set);
     77  $err = reservations_detail_instituer($id_reservations_detail, $c);
     78
     79  return $err;
    8080}
    8181
    8282
    8383function reservations_detail_inserer( $id_parent=null, $set=null) {
    84         $objet='reservations_detail';
    85 
    86         $table_sql = table_objet_sql($objet);
    87         $trouver_table = charger_fonction('trouver_table','base');
    88         $desc = $trouver_table($table_sql);
    89         if (!$desc OR !isset($desc['field']))
    90                 return 0;
    91 
    92         $champs = array();
    93 
    94 
    95 
    96         if (isset($desc['field']['statut'])){
    97                 if (isset($desc['statut_textes_instituer'])){
    98                         $cles_statut = array_keys($desc['statut_textes_instituer']);
    99                         $champs['statut'] = reset($cles_statut);
    100                 }
    101                 else
    102                         $champs['statut'] = 'attente';
    103         }
    104 
    105 
    106         if ((isset($desc['date']) AND $d=$desc['date']) OR isset($desc['field'][$d='date']))
    107                 $champs[$d] = date('Y-m-d H:i:s');
    108 
    109         if ($set)
    110                 $champs = array_merge($champs, $set);
    111        
    112 
    113         // Envoyer aux plugins
    114         $champs = pipeline('pre_insertion',
    115                 array(
    116                         'args' => array(
    117                                 'table' => $table_sql,
    118                         ),
    119                         'data' => $champs
    120                 )
    121         );
    122 
    123         $id = sql_insertq($table_sql, $champs);
    124 
    125         if ($id){
    126                 pipeline('post_insertion',
    127                         array(
    128                                 'args' => array(
    129                                         'table' => $table_sql,
    130                                         'id_objet' => $id,
    131                                 ),
    132                                 'data' => $champs
    133                         )
    134                 );
    135         }
    136 
    137         return $id;
     84  $objet='reservations_detail';
     85
     86  $table_sql = table_objet_sql($objet);
     87  $trouver_table = charger_fonction('trouver_table','base');
     88  $desc = $trouver_table($table_sql);
     89  if (!$desc OR !isset($desc['field']))
     90    return 0;
     91
     92  $champs = array();
     93
     94
     95
     96  if (isset($desc['field']['statut'])){
     97    if (isset($desc['statut_textes_instituer'])){
     98      $cles_statut = array_keys($desc['statut_textes_instituer']);
     99      $champs['statut'] = reset($cles_statut);
     100    }
     101    else
     102      $champs['statut'] = 'attente';
     103  }
     104
     105
     106  if ((isset($desc['date']) AND $d=$desc['date']) OR isset($desc['field'][$d='date']))
     107    $champs[$d] = date('Y-m-d H:i:s');
     108
     109  if ($set)
     110    $champs = array_merge($champs, $set);
     111 
     112
     113  // Envoyer aux plugins
     114  $champs = pipeline('pre_insertion',
     115    array(
     116      'args' => array(
     117        'table' => $table_sql,
     118      ),
     119      'data' => $champs
     120    )
     121  );
     122
     123  $id = sql_insertq($table_sql, $champs);
     124
     125  if ($id){
     126    pipeline('post_insertion',
     127      array(
     128        'args' => array(
     129          'table' => $table_sql,
     130          'id_objet' => $id,
     131        ),
     132        'data' => $champs
     133      )
     134    );
     135  }
     136
     137  return $id;
    138138}
    139139
    140140function reservations_detail_instituer($id_reservations_detail, $c, $calcul_rub=true) {
    141141
    142         include_spip('inc/autoriser');
    143         include_spip('inc/rubriques');
    144         include_spip('inc/modifier');
    145        
    146        
    147         $row = sql_fetsel('*','spip_reservations_details','id_reservations_detail='.intval($id_reservations_detail));
    148         $id_reservation=$row['id_reservation'];
    149         $id_evenement=$row['id_evenement'];
    150 
    151         $envoi_separe_actif=_request('envoi_separe_actif');     
    152        
    153         if(!$places=$c[places]){
    154                 $places=sql_getfetsel('places','spip_evenements','id_evenement='.$id_evenement);
    155                 }
    156         $statut_ancien = $statut = $row['statut'];
    157 
    158         $s = isset($c['statut']) ? $c['statut'] : $statut;
    159 
    160         $champs['statut']= $s ;
    161        
    162         // Vérifier si le statut peut être modifiés
    163         $statuts_complets=charger_fonction('complet','inc/statuts');
    164         $statuts=$statuts_complets();   
    165        
    166         /* Si on change depuis un statut non compris dans statuts_complet
    167          * vers un statut compris dans statuts_complet,
    168          * on vérifie si l'événement n'est pas complet
    169          */
    170         if ($s != $statut AND in_array($s,$statuts) AND !in_array($statut,$statuts)) {
    171                 // Si il y a une limitation de places prévu, on sélectionne les détails de réservation qui ont le statut_complet
    172                 if($places AND $places>0){
    173                         $sql=sql_select('quantite','spip_reservations_details','id_evenement='.$id_evenement.' AND statut IN ("'.implode('","',$statuts).'")');         
    174                         $reservations=array();
    175                         while($data=sql_fetch($sql)){
    176                                 $reservations[]=$data['quantite'];
    177                         }
    178                         if(array_sum($reservations)>=$places)$champs['statut']='attente';                                                 
    179                 }
    180         }
    181        
    182 
    183         // Envoyer aux plugins
    184         $champs = pipeline('pre_edition',
    185                 array(
    186                         'args' => array(
    187                                 'table' => 'spip_reservations_details',
    188                                 'id_reservation_detail' => $id,
    189                                 'action'=>'instituer',
    190                                 'statut_ancien' => $statut_ancien,
    191                                 'date_ancienne' => $date_ancienne,
    192                         ),
    193                         'data' => $champs
    194                 )
    195         );
    196 
    197         if (!count($champs)) return '';
    198         // Envoyer les modifs.
    199         objet_editer_heritage('reservations_detail', $id_reservations_detail,'', $statut_ancien, $champs);
    200 
    201         // Invalider les caches
    202         include_spip('inc/invalideur');
    203         suivre_invalideur("id='reservations_detail/$id_reservations_detail'");
    204 
    205 
    206         // Pipeline
    207         pipeline('post_edition',
    208                 array(
    209                         'args' => array(
    210                                 'table' => 'spip_reservations_details',
    211                                 'id_reservation_detail' => $id_reservations_detail,
    212                                 'action'=>'instituer',
    213                                 'statut_ancien' => $statut_ancien,
    214                                 'date_ancienne' => $date_ancienne,
    215                         ),
    216                         'data' => $champs
    217                 )
    218         );
    219        
    220 
    221        
    222         // Notifications si en mode différé et ne pas déclencher par le changement de statut de la réservation
    223        
    224         if($envoi_separe_actif!='non'){
    225                 //Déterminer la langue pour les notifications   
    226                 if(!$lang=sql_getfetsel('lang','spip_reservations','id_reservation='.$id_reservation)) $lang=lire_config('langue_site');                               
    227 
    228                 lang_select($lang);     
    229                 include_spip('inc/config');     
    230                 $config = lire_config('reservation_evenement');
    231                 $envoi_separe_config=isset($config['envoi_separe'])?$config['envoi_separe']:array();
    232                
    233                 if(in_array($s, $envoi_separe_config) OR $s == 'cloture'){
    234                        
    235                          if ((!$statut_ancien OR $s != $statut_ancien ) &&
    236                          ($config['activer']) &&
    237                          (in_array($s,$config['quand'])) &&
    238                          ($notifications = charger_fonction('notifications', 'inc', true))
    239                         ) {
    240                                 $row=sql_fetsel('id_auteur,email','spip_reservations','id_reservation='.$id_reservation);
    241                                 $id_auteur=$row['id_auteur'];
    242                                 $email=$row['email'];
    243                                
    244                                 // Determiner l'expediteur
    245                                 $options = array('statut'=>$s,'id_reservations_detail'=>$id_reservations_detail,'lang'=>$lang);
    246                                 if( $config['expediteur'] != "facteur" )
    247                                         $options['expediteur'] = $config['expediteur_'.$config['expediteur']];
    248                
    249                                 // Envoyer au vendeur et au client
    250                                 //Pour le moment pas d'envoi à l'administrateur, prévoir un seul mail pour tout l'événement.
    251                                 if ($s!='cloture') {
    252                                         spip_log('envoi mail differe vendeur email:'.$email.', statut:'.$s ,'reservation_evenement'.LOG_INFO); 
    253                                         $notifications('reservation_vendeur', $id_reservation, $options);
    254                                 }
    255                                        
    256                                 if($config['client']){
    257                                        
    258                                                 if(intval($id_auteur) AND $id_auteur>0)$options['email']=sql_getfetsel('email','spip_auteurs','id_auteur='.$id_auteur);
    259                                                 else $options['email']=$email;
    260                                                
    261                                         spip_log('envoi mail séparé client email:'.$options['email'].', statut:'.$s ,'reservation_evenement'._LOG_INFO);       
    262                                                                                        
    263                                         $notifications('reservation_client', $id_reservation, $options);
    264                                        
    265                                         }
    266                                 }
    267                         }               
    268                 }
    269 
    270         return ''; // pas d'erreur
     142  include_spip('inc/autoriser');
     143  include_spip('inc/rubriques');
     144  include_spip('inc/modifier');
     145 
     146 
     147  $row = sql_fetsel('*','spip_reservations_details','id_reservations_detail='.intval($id_reservations_detail));
     148  $id_reservation=$row['id_reservation'];
     149  $id_evenement=$row['id_evenement'];
     150
     151  $envoi_separe_actif=_request('envoi_separe_actif'); 
     152 
     153  if(!$places=$c[places]){
     154    $places=sql_getfetsel('places','spip_evenements','id_evenement='.$id_evenement);
     155    }
     156  $statut_ancien = $statut = $row['statut'];
     157
     158  $s = isset($c['statut']) ? $c['statut'] : $statut;
     159
     160  $champs['statut']= $s ;
     161 
     162  // Vérifier si le statut peut être modifiés
     163  $statuts_complets=charger_fonction('complet','inc/statuts');
     164  $statuts=$statuts_complets();   
     165 
     166  /* Si on change depuis un statut non compris dans statuts_complet
     167   * vers un statut compris dans statuts_complet,
     168   * on vérifie si l'événement n'est pas complet
     169   */
     170  if ($s != $statut AND in_array($s,$statuts) AND !in_array($statut,$statuts)) {
     171    // Si il y a une limitation de places prévu, on sélectionne les détails de réservation qui ont le statut_complet
     172    if($places AND $places>0){
     173      $sql=sql_select('quantite','spip_reservations_details','id_evenement='.$id_evenement.' AND statut IN ("'.implode('","',$statuts).'")');   
     174      $reservations=array();
     175      while($data=sql_fetch($sql)){
     176        $reservations[]=$data['quantite'];
     177      }
     178      if(array_sum($reservations)>=$places)$champs['statut']='attente';               
     179    }
     180  }
     181 
     182
     183  // Envoyer aux plugins
     184  $champs = pipeline('pre_edition',
     185    array(
     186      'args' => array(
     187        'table' => 'spip_reservations_details',
     188        'id_reservation_detail' => $id,
     189        'action'=>'instituer',
     190        'statut_ancien' => $statut_ancien,
     191        'date_ancienne' => $date_ancienne,
     192      ),
     193      'data' => $champs
     194    )
     195  );
     196
     197  if (!count($champs)) return '';
     198  // Envoyer les modifs.
     199  objet_editer_heritage('reservations_detail', $id_reservations_detail,'', $statut_ancien, $champs);
     200
     201  // Invalider les caches
     202  include_spip('inc/invalideur');
     203  suivre_invalideur("id='reservations_detail/$id_reservations_detail'");
     204
     205
     206  // Pipeline
     207  pipeline('post_edition',
     208    array(
     209      'args' => array(
     210        'table' => 'spip_reservations_details',
     211        'id_reservation_detail' => $id_reservations_detail,
     212        'action'=>'instituer',
     213        'statut_ancien' => $statut_ancien,
     214        'date_ancienne' => $date_ancienne,
     215      ),
     216      'data' => $champs
     217    )
     218  );
     219 
     220
     221 
     222  // Notifications si en mode différé et ne pas déclencher par le changement de statut de la réservation
     223 
     224  if($envoi_separe_actif!='non'){
     225    //Déterminer la langue pour les notifications 
     226    if(!$lang=sql_getfetsel('lang','spip_reservations','id_reservation='.$id_reservation)) $lang=lire_config('langue_site');       
     227
     228    lang_select($lang); 
     229    include_spip('inc/config'); 
     230    $config = lire_config('reservation_evenement');
     231    $envoi_separe_config=isset($config['envoi_separe'])?$config['envoi_separe']:array();
     232   
     233    if(in_array($s, $envoi_separe_config) OR $s == 'cloture'){
     234     
     235       if ((!$statut_ancien OR $s != $statut_ancien ) &&
     236       ($config['activer']) &&
     237       (in_array($s,$config['quand'])) &&
     238       ($notifications = charger_fonction('notifications', 'inc', true))
     239      ) {
     240        $row=sql_fetsel('id_auteur,email','spip_reservations','id_reservation='.$id_reservation);
     241        $id_auteur=$row['id_auteur'];
     242        $email=$row['email'];
     243       
     244        // Determiner l'expediteur
     245        $options = array('statut'=>$s,'id_reservations_detail'=>$id_reservations_detail,'lang'=>$lang);
     246        if( $config['expediteur'] != "facteur" )
     247          $options['expediteur'] = $config['expediteur_'.$config['expediteur']];
     248   
     249        // Envoyer au vendeur et au client
     250        //Pour le moment pas d'envoi à l'administrateur, prévoir un seul mail pour tout l'événement.
     251        if ($s!='cloture') {
     252          spip_log('envoi mail differe vendeur email:'.$email.', statut:'.$s ,'reservation_evenement'.LOG_INFO);
     253          $notifications('reservation_vendeur', $id_reservation, $options);
     254        }
     255         
     256        if($config['client']){
     257         
     258            if(intval($id_auteur) AND $id_auteur>0)$options['email']=sql_getfetsel('email','spip_auteurs','id_auteur='.$id_auteur);
     259            else $options['email']=$email;
     260           
     261          spip_log('envoi mail séparé client email:'.$options['email'].', statut:'.$s ,'reservation_evenement'._LOG_INFO);
     262          $notifications('reservation_client', $id_reservation, $options);
     263         
     264          }
     265        }
     266      }   
     267    }
     268
     269  return ''; // pas d'erreur
    271270}
  • _plugins_/reservation_evenement/branches/v1/paquet.xml

    r90813 r90920  
    22prefix="reservation_evenement"
    33categorie="date"
    4 version="1.19.6"
     4version="1.19.7"
    55etat="test"
    66compatibilite="[3.0.16;3.1.*]"
  • _plugins_/reservation_evenement/trunk/action/editer_reservation.php

    r89538 r90920  
    11<?php
    22if (!defined('_ECRIRE_INC_VERSION'))
    3         return;
     3  return;
    44
    55function reservation_inserer($id_parent = null, $set = null) {
    6         $table_sql = table_objet_sql('reservation');
    7         $champs = array();
    8         $champs['statut'] = 'encours';
    9         $champs['date'] = date('Y-m-d H:i:s');
    10 
    11         if ($set)
    12                 $champs = array_merge($champs, $set);
    13 
    14         // Envoyer aux plugins
    15         $champs = pipeline('pre_insertion', array(
    16                 'args' => array('table' => $table_sql, ),
    17                 'data' => $champs
    18         ));
    19 
    20         $id = sql_insertq($table_sql, $champs);
    21 
    22         if ($id) {
    23                 pipeline('post_insertion', array(
    24                         'args' => array(
    25                                 'table' => $table_sql,
    26                                 'id_objet' => $id,
    27                         ),
    28                         'data' => $champs
    29                 ));
    30         }
    31         return $id;
     6  $table_sql = table_objet_sql('reservation');
     7  $champs = array();
     8  $champs['statut'] = 'encours';
     9  $champs['date'] = date('Y-m-d H:i:s');
     10
     11  if ($set)
     12    $champs = array_merge($champs, $set);
     13
     14  // Envoyer aux plugins
     15  $champs = pipeline('pre_insertion', array(
     16    'args' => array('table' => $table_sql, ),
     17    'data' => $champs
     18  ));
     19
     20  $id = sql_insertq($table_sql, $champs);
     21
     22  if ($id) {
     23    pipeline('post_insertion', array(
     24      'args' => array(
     25        'table' => $table_sql,
     26        'id_objet' => $id,
     27      ),
     28      'data' => $champs
     29    ));
     30  }
     31  return $id;
    3232}
    3333
    3434function reservation_instituer($id_reservation, $c, $calcul_rub = true) {
    35         $table_sql = table_objet_sql('reservation');
    36         $trouver_table = charger_fonction('trouver_table', 'base');
    37 
    38         include_spip('inc/autoriser');
    39         include_spip('inc/rubriques');
    40         include_spip('inc/modifier');
    41         include_spip('inc/config');
    42         $config = lire_config('reservation_evenement');
    43 
    44         $row = sql_fetsel('statut,date,id_auteur,email,lang', 'spip_reservations', 'id_reservation=' . intval($id_reservation));
    45         $statut_ancien = $statut = $row['statut'];
    46         $date_ancienne = $date = $row['date'];
    47 
    48         $d = isset($c['date']) ? $c['date'] : null;
    49         $s = isset($c['statut']) ? $c['statut'] : $statut;
    50 
    51         $champs = array();
    52         // cf autorisations dans inc/instituer_objet
    53         if ($s != $statut OR ($d AND $d != $date)) {
    54                 if (autoriser('modifier', 'reservation', $id_reservation))
    55                         $statut = $champs['statut'] = $s;
    56                 else
    57                         spip_log("editer_reservation $id_reservation refus " . join(' ', $c));
    58 
    59                 // En cas de publication, fixer la date a "maintenant"
    60                 // sauf si $c commande autre chose
    61                 // ou si l'objet est deja date dans le futur
    62                 // En cas de proposition d'un objet (mais pas depublication), idem
    63                 if ($champ_date) {
    64                         if ($champs['statut'] == 'publie' OR ($champs['statut'] == 'prop' AND !in_array($statut_ancien, array(
    65                                 'publie',
    66                                 'prop'
    67                         ))) OR $d) {
    68                                 if ($d OR strtotime($d = $date) > time())
    69                                         $champs[$champ_date] = $date = $d;
    70                                 else
    71                                         $champs[$champ_date] = $date = date('Y-m-d H:i:s');
    72                         }
    73                 }
    74         }
    75 
    76         //les champs extras auteur
    77         include_spip('cextras_pipelines');
    78         $valeurs_extras = array();
    79 
    80         if (function_exists('champs_extras_objet')) {
    81                 //Charger les définitions pour la création des formulaires
    82                 $champs_extras_auteurs = champs_extras_objet(table_objet_sql('auteur'));
    83 
    84                 if (is_array($champs_extras_auteurs)) {
    85                         foreach ($champs_extras_auteurs as $value) {
    86                                 $valeurs_extras[$value['options']['nom']] = _request($value['options']['nom']);
    87                         }
    88                 }
    89 
    90                 $champs['donnees_auteur'] = serialize($valeurs_extras);
    91         }
    92 
    93         // Envoyer aux plugins
    94         $champs = pipeline('pre_edition', array(
    95                 'args' => array(
    96                         'table' => 'spip_reservations',
    97                         'id_reservation' => $id_reservation,
    98                         'action' => 'instituer',
    99                         'statut_ancien' => $statut_ancien,
    100                         'date_ancienne' => $date_ancienne,
    101                 ),
    102                 'data' => $champs
    103         ));
    104 
    105         if (!count($champs))
    106                 return '';
    107 
    108         // Envoyer les modifs.
    109         objet_editer_heritage('reservation', $id_reservation, '', $statut_ancien, $champs);
    110 
    111         // Invalider les caches
    112         include_spip('inc/invalideur');
    113         suivre_invalideur("id='reservation/$id_reservation'");
    114 
    115         // Pipeline
    116         pipeline('post_edition', array(
    117                 'args' => array(
    118                         'table' => 'spip_reservations',
    119                         'id_reservation' => $id_reservation,
    120                         'action' => 'instituer',
    121                         'statut_ancien' => $statut_ancien,
    122                         'date_ancienne' => $date_ancienne,
    123                         'id_parent_ancien' => $id_rubrique,
    124                 ),
    125                 'data' => $champs
    126         ));
    127 
    128         // Les traitements spécifiques
    129 
    130         $action = charger_fonction('editer_objet', 'action');
    131         $quantite = _request('quantite');
    132         $set = array(
    133                 'id_reservation' => $id_reservation,
    134                 'statut' => $statut
    135         );
    136 
    137         // Gérer les détails des réservations
    138         $evenements = _request('id_evenement');
    139 
    140         // Si les déclinaisons sont actives on récupère les évenements via le prix
    141         if (test_plugin_actif('declinaisons')) {
    142                 $evenements = array();
    143                 if ($id_prix_objet = _request('id_objet_prix')) {
    144                         foreach (array_keys($id_prix_objet ) AS $id_evenement) {
    145                                 $evenements[] = $id_evenement;
    146                         }
    147                 }
    148         }
    149         // Si on n'est pas dans le cas d'une création, on récupère les détails attachées à la réservation
    150         if (!is_array($evenements) OR (is_array($evenements) AND count($evenements) == 0)) {
    151 
    152                 $evenements = array();
    153                 $sql = sql_select('id_evenement', 'spip_reservations_details', 'id_reservation=' . $id_reservation);
    154                 while ($data = sql_fetch($sql)) {
    155                         $evenements[] = $data['id_evenement'];
    156                 }
    157         } else {
    158                 $set['evenements'] = $evenements;
    159                 set_request('evenements', $evenements);
    160         }
    161         // Pour chaque évènement on crée un détail de la réservation
    162 
    163         foreach ($evenements AS $id_evenement) {
    164                 // Si aucun détail n'est attaché à l'évènement, on le crée
    165                 if (!$reservations_detail = sql_fetsel('*', 'spip_reservations_details', 'id_reservation=' . $id_reservation . ' AND id_evenement=' . $id_evenement)) {
    166                         $id_reservations_detail = 'new';
    167                         $set['id_prix_objet'] = $id_prix_objet[$id_evenement];
    168                 } else
    169                         $id_reservations_detail = $reservations_detail['id_reservations_detail'];
    170 
    171                 // Pour l'enregistrement
    172                 $set['id_evenement'] = $id_evenement;
    173 
    174                 // Eviter l'envoi d'une notification pour chaque détail
    175                 set_request('envoi_separe_actif', 'non');
    176 
    177                 $detail = $action($id_reservations_detail, 'reservations_detail', $set);
    178 
    179         }
    180 
    181         // Notifications
    182 
    183         if ((!$statut_ancien OR $statut != $statut_ancien) && (isset($config['activer'])) && (isset($config['quand']) && is_array($config['quand']) && in_array($statut, $config['quand'])) && ($notifications = charger_fonction('notifications', 'inc', true))) {
    184                 //Déterminer la langue pour les notifications
    185                 $lang = isset($row['lang']) ? $row['lang'] : lire_config('langue_site');
    186                 lang_select($lang);
    187                 // Determiner l'expediteur
    188                 $options = array(
    189                         'statut' => $statut,
    190                         'lang' => $lang
    191                 );
    192                 if ($config['expediteur'] != "facteur")
    193                         $options['expediteur'] = $config['expediteur_' . $config['expediteur']];
    194 
    195                 // Envoyer au vendeur et au client
    196                 $notifications('reservation_vendeur', $id_reservation, $options);
    197                 if ($config['client']) {
    198                         //$row['email']=trim($row['email']);
    199                         if (intval($row['id_auteur']) AND $row['id_auteur'] > 0)
    200                                 $options['email'] = sql_getfetsel('email', 'spip_auteurs', 'id_auteur=' . $row['id_auteur']);
    201                         else
    202                                 $options['email'] = $row['email'];
    203 
    204                         $notifications('reservation_client', $id_reservation, $options);
    205                 }
    206 
    207         }
    208 
    209         return '';
    210         // pas d'erreur
     35  $table_sql = table_objet_sql('reservation');
     36  $trouver_table = charger_fonction('trouver_table', 'base');
     37
     38  include_spip('inc/autoriser');
     39  include_spip('inc/rubriques');
     40  include_spip('inc/modifier');
     41  include_spip('inc/config');
     42  $config = lire_config('reservation_evenement');
     43
     44  $row = sql_fetsel('statut,date,id_auteur,email,lang', 'spip_reservations', 'id_reservation=' . intval($id_reservation));
     45  $statut_ancien = $statut = $row['statut'];
     46  $date_ancienne = $date = $row['date'];
     47
     48  $d = isset($c['date']) ? $c['date'] : null;
     49  $s = isset($c['statut']) ? $c['statut'] : $statut;
     50
     51  $champs = array();
     52  // cf autorisations dans inc/instituer_objet
     53  if ($s != $statut OR ($d AND $d != $date)) {
     54    if (autoriser('modifier', 'reservation', $id_reservation))
     55      $statut = $champs['statut'] = $s;
     56    else
     57      spip_log("editer_reservation $id_reservation refus " . join(' ', $c));
     58
     59    // En cas de publication, fixer la date a "maintenant"
     60    // sauf si $c commande autre chose
     61    // ou si l'objet est deja date dans le futur
     62    // En cas de proposition d'un objet (mais pas depublication), idem
     63    if ($champ_date) {
     64      if ($champs['statut'] == 'publie' OR ($champs['statut'] == 'prop' AND !in_array($statut_ancien, array(
     65        'publie',
     66        'prop'
     67      ))) OR $d) {
     68        if ($d OR strtotime($d = $date) > time())
     69          $champs[$champ_date] = $date = $d;
     70        else
     71          $champs[$champ_date] = $date = date('Y-m-d H:i:s');
     72      }
     73    }
     74  }
     75
     76  //les champs extras auteur
     77  include_spip('cextras_pipelines');
     78  $valeurs_extras = array();
     79
     80  if (function_exists('champs_extras_objet')) {
     81    //Charger les définitions pour la création des formulaires
     82    $champs_extras_auteurs = champs_extras_objet(table_objet_sql('auteur'));
     83
     84    if (is_array($champs_extras_auteurs)) {
     85      foreach ($champs_extras_auteurs as $value) {
     86        $valeurs_extras[$value['options']['nom']] = _request($value['options']['nom']);
     87      }
     88    }
     89
     90    $champs['donnees_auteur'] = serialize($valeurs_extras);
     91  }
     92
     93  // Envoyer aux plugins
     94  $champs = pipeline('pre_edition', array(
     95    'args' => array(
     96      'table' => 'spip_reservations',
     97      'id_reservation' => $id_reservation,
     98      'action' => 'instituer',
     99      'statut_ancien' => $statut_ancien,
     100      'date_ancienne' => $date_ancienne,
     101    ),
     102    'data' => $champs
     103  ));
     104
     105  if (!count($champs))
     106    return '';
     107
     108  // Envoyer les modifs.
     109  objet_editer_heritage('reservation', $id_reservation, '', $statut_ancien, $champs);
     110
     111  // Invalider les caches
     112  include_spip('inc/invalideur');
     113  suivre_invalideur("id='reservation/$id_reservation'");
     114
     115  // Pipeline
     116  pipeline('post_edition', array(
     117    'args' => array(
     118      'table' => 'spip_reservations',
     119      'id_reservation' => $id_reservation,
     120      'action' => 'instituer',
     121      'statut_ancien' => $statut_ancien,
     122      'date_ancienne' => $date_ancienne,
     123      'id_parent_ancien' => $id_rubrique,
     124    ),
     125    'data' => $champs
     126  ));
     127
     128  // Les traitements spécifiques
     129
     130  $set = array(
     131    'id_reservation' => $id_reservation,
     132    'statut' => $statut
     133  );
     134
     135  // Gérer les détails des réservations
     136  $evenements = _request('id_evenement');
     137
     138  // Si les déclinaisons sont actives on récupère les évenements via le prix
     139  if (test_plugin_actif('declinaisons')) {
     140    $evenements = array();
     141    if ($id_prix_objet = _request('id_objet_prix')) {
     142      foreach (array_keys($id_prix_objet ) AS $id_evenement) {
     143        $evenements[] = $id_evenement;
     144      }
     145    }
     146  }
     147  // Si on n'est pas dans le cas d'une création, on récupère les détails attachées à la réservation
     148  if (!is_array($evenements) OR (is_array($evenements) AND count($evenements) == 0)) {
     149    include_spip('action/editer_reservations_detail');
     150    $c = array('statut' => $statut);
     151    $sql = sql_select('id_reservations_detail', 'spip_reservations_details', 'id_reservation=' . $id_reservation);
     152    while ($data = sql_fetch($sql)) {
     153      reservations_detail_instituer($data['id_reservations_detail'], $c);
     154    }
     155  }
     156  else {
     157    $action = charger_fonction('editer_objet', 'action');
     158    $set['evenements'] = $evenements;
     159    set_request('evenements', $evenements);
     160  }
     161  //Si on est dans le cas d'une création
     162  if (is_array($evenements)) {
     163    // Pour chaque évènement on crée un détail de la réservation
     164    foreach ($evenements AS $id_evenement) {
     165      // Si aucun détail n'est attaché à l'évènement, on le crée
     166      if (!$reservations_detail = sql_fetsel('*', 'spip_reservations_details', 'id_reservation=' . $id_reservation . ' AND id_evenement=' . $id_evenement)) {
     167        $id_reservations_detail = 'new';
     168        $set['id_prix_objet'] = $id_prix_objet[$id_evenement];
     169      }
     170      else {
     171        $id_reservations_detail = $reservations_detail['id_reservations_detail'];
     172        $set['quantite'] = $reservations_detail['quantite'];
     173      }
     174
     175      // Pour l'enregistrement
     176      $set['id_evenement'] = $id_evenement;
     177
     178      // Eviter l'envoi d'une notification pour chaque détail
     179      set_request('envoi_separe_actif', 'non');
     180      $detail = $action($id_reservations_detail, 'reservations_detail', $set);
     181    }
     182  }
     183
     184  // Notifications
     185
     186  if ((!$statut_ancien OR $statut != $statut_ancien) && (isset($config['activer'])) && (isset($config['quand']) && is_array($config['quand']) && in_array($statut, $config['quand'])) && ($notifications = charger_fonction('notifications', 'inc', true))) {
     187    //Déterminer la langue pour les notifications
     188    $lang = isset($row['lang']) ? $row['lang'] : lire_config('langue_site');
     189    lang_select($lang);
     190    // Determiner l'expediteur
     191    $options = array(
     192      'statut' => $statut,
     193      'lang' => $lang
     194    );
     195    if ($config['expediteur'] != "facteur")
     196      $options['expediteur'] = $config['expediteur_' . $config['expediteur']];
     197
     198    // Envoyer au vendeur et au client
     199    $notifications('reservation_vendeur', $id_reservation, $options);
     200    if ($config['client']) {
     201      //$row['email']=trim($row['email']);
     202      if (intval($row['id_auteur']) AND $row['id_auteur'] > 0)
     203        $options['email'] = sql_getfetsel('email', 'spip_auteurs', 'id_auteur=' . $row['id_auteur']);
     204      else
     205        $options['email'] = $row['email'];
     206
     207      $notifications('reservation_client', $id_reservation, $options);
     208    }
     209
     210  }
     211
     212  return '';
     213  // pas d'erreur
    211214}
  • _plugins_/reservation_evenement/trunk/action/editer_reservations_detail.php

    r87953 r90920  
    44function reservations_detail_modifier($id_reservations_detail, $set=null) {
    55
    6         $table_sql = table_objet_sql('reservations_detail');
    7         $trouver_table = charger_fonction('trouver_table','base');
    8         $desc = $trouver_table($table_sql);
    9         if (!$desc OR !isset($desc['field'])) {
    10                 spip_log("Objet $objet inconnu dans objet_modifier",_LOG_ERREUR);
    11                 return _L("Erreur objet $objet inconnu");
    12         }
    13         include_spip('inc/modifier');
    14 
    15         $champ_date = '';
    16         if (isset($desc['date']) AND $desc['date'])
    17                 $champ_date = $desc['date'];
    18         elseif (isset($desc['field']['date']))
    19                 $champ_date = 'date';
    20 
    21         $white = array_keys($desc['field']);
    22         // on ne traite pas la cle primaire par defaut, notamment car
    23         // sur une creation, id_x vaut 'oui', et serait enregistre en id_x=0 dans la base
    24         $white = array_diff($white, array($desc['key']['PRIMARY KEY']));
    25 
    26         if (isset($desc['champs_editables']) AND is_array($desc['champs_editables'])) {
    27                 $white = $desc['champs_editables'];
    28         }
    29         $c = collecter_requests(
    30                 // white list
    31                 $white,
    32                 // black list
    33                 array($champ_date,'statut','id_parent','id_secteur'),
    34                 // donnees eventuellement fournies
    35                 $set
    36         );
    37 
    38         $donnees_reservations_details=charger_fonction('donnees_reservations_details','inc');
    39        
    40         //On retient le prix original pour le cas ou celui est modifié par la suite
    41 
    42         $details=$donnees_reservations_details($id_reservations_detail,$c);
    43         $details['prix original']=isset($details['prix_ht'])?$details['prix_ht']:'';
    44        
    45         //Pipeline permettant aux plugins de modifier les détails de la réservation
    46         $c = pipeline('reservation_evenement_donnees_details',array(
    47                                         'args'=>$set,
    48                                         'data'=>array_merge($c,$details)
    49                                         )
    50                                 );
    51 
    52         // Si l'objet est publie, invalider les caches et demander sa reindexation
    53         if (objet_test_si_publie($objet,$id)){
    54                 $invalideur = "id='reservations_detail/$id_reservations_detail'";
    55                 $indexation = true;
    56         }
    57         else {
    58                 $invalideur = "";
    59                 $indexation = false;
    60         }
    61 
    62         if ($err = objet_modifier_champs('reservations_detail',$id_reservations_detail,
    63                 array(
    64                         'nonvide' => '',
    65                         'invalideur' => $invalideur,
    66                         'indexation' => $indexation,
    67                         // champ a mettre a date('Y-m-d H:i:s') s'il y a modif
    68                         'date_modif' => (isset($desc['field']['date_modif'])?'date_modif':'')
    69                 ),
    70                 $c))
    71                 return $err;
    72 
    73         // Modification de statut, changement de rubrique ?
    74         // FIXME: Ici lorsqu'un $set est passé, la fonction collecter_requests() retourne tout
    75         //         le tableau $set hors black liste, mais du coup on a possiblement des champs en trop.
    76         $c = collecter_requests(array($champ_date, 'statut', 'id_parent'),array(),$set);
    77         $err = reservations_detail_instituer($id_reservations_detail, $c);
    78 
    79         return $err;
     6  $table_sql = table_objet_sql('reservations_detail');
     7  $trouver_table = charger_fonction('trouver_table','base');
     8  $desc = $trouver_table($table_sql);
     9  if (!$desc OR !isset($desc['field'])) {
     10    spip_log("Objet $objet inconnu dans objet_modifier",_LOG_ERREUR);
     11    return _L("Erreur objet $objet inconnu");
     12  }
     13  include_spip('inc/modifier');
     14
     15  $champ_date = '';
     16  if (isset($desc['date']) AND $desc['date'])
     17    $champ_date = $desc['date'];
     18  elseif (isset($desc['field']['date']))
     19    $champ_date = 'date';
     20
     21  $white = array_keys($desc['field']);
     22  // on ne traite pas la cle primaire par defaut, notamment car
     23  // sur une creation, id_x vaut 'oui', et serait enregistre en id_x=0 dans la base
     24  $white = array_diff($white, array($desc['key']['PRIMARY KEY']));
     25
     26  if (isset($desc['champs_editables']) AND is_array($desc['champs_editables'])) {
     27    $white = $desc['champs_editables'];
     28  }
     29  $c = collecter_requests(
     30    // white list
     31    $white,
     32    // black list
     33    array($champ_date,'statut','id_parent','id_secteur'),
     34    // donnees eventuellement fournies
     35    $set
     36  );
     37
     38  $donnees_reservations_details=charger_fonction('donnees_reservations_details','inc');
     39 
     40  //On retient le prix original pour le cas ou celui est modifié par la suite
     41
     42  $details=$donnees_reservations_details($id_reservations_detail,$c);
     43  $details['prix original']=isset($details['prix_ht'])?$details['prix_ht']:'';
     44 
     45  //Pipeline permettant aux plugins de modifier les détails de la réservation
     46  $c = pipeline('reservation_evenement_donnees_details',array(
     47          'args'=>$set,
     48          'data'=>array_merge($c,$details)
     49          )
     50        );
     51
     52  // Si l'objet est publie, invalider les caches et demander sa reindexation
     53  if (objet_test_si_publie($objet,$id)){
     54    $invalideur = "id='reservations_detail/$id_reservations_detail'";
     55    $indexation = true;
     56  }
     57  else {
     58    $invalideur = "";
     59    $indexation = false;
     60  }
     61
     62  if ($err = objet_modifier_champs('reservations_detail',$id_reservations_detail,
     63    array(
     64      'nonvide' => '',
     65      'invalideur' => $invalideur,
     66      'indexation' => $indexation,
     67      // champ a mettre a date('Y-m-d H:i:s') s'il y a modif
     68      'date_modif' => (isset($desc['field']['date_modif'])?'date_modif':'')
     69    ),
     70    $c))
     71    return $err;
     72
     73  // Modification de statut, changement de rubrique ?
     74  // FIXME: Ici lorsqu'un $set est passé, la fonction collecter_requests() retourne tout
     75  //         le tableau $set hors black liste, mais du coup on a possiblement des champs en trop.
     76  $c = collecter_requests(array($champ_date, 'statut', 'id_parent'),array(),$set);
     77  $err = reservations_detail_instituer($id_reservations_detail, $c);
     78
     79  return $err;
    8080}
    8181
    8282
    8383function reservations_detail_inserer( $id_parent=null, $set=null) {
    84         $objet='reservations_detail';
    85 
    86         $table_sql = table_objet_sql($objet);
    87         $trouver_table = charger_fonction('trouver_table','base');
    88         $desc = $trouver_table($table_sql);
    89         if (!$desc OR !isset($desc['field']))
    90                 return 0;
    91 
    92         $champs = array();
    93 
    94 
    95 
    96         if (isset($desc['field']['statut'])){
    97                 if (isset($desc['statut_textes_instituer'])){
    98                         $cles_statut = array_keys($desc['statut_textes_instituer']);
    99                         $champs['statut'] = reset($cles_statut);
    100                 }
    101                 else
    102                         $champs['statut'] = 'attente';
    103         }
    104 
    105 
    106         if ((isset($desc['date']) AND $d=$desc['date']) OR isset($desc['field'][$d='date']))
    107                 $champs[$d] = date('Y-m-d H:i:s');
    108 
    109         if ($set)
    110                 $champs = array_merge($champs, $set);
    111        
    112 
    113         // Envoyer aux plugins
    114         $champs = pipeline('pre_insertion',
    115                 array(
    116                         'args' => array(
    117                                 'table' => $table_sql,
    118                         ),
    119                         'data' => $champs
    120                 )
    121         );
    122 
    123         $id = sql_insertq($table_sql, $champs);
    124 
    125         if ($id){
    126                 pipeline('post_insertion',
    127                         array(
    128                                 'args' => array(
    129                                         'table' => $table_sql,
    130                                         'id_objet' => $id,
    131                                 ),
    132                                 'data' => $champs
    133                         )
    134                 );
    135         }
    136 
    137         return $id;
     84  $objet='reservations_detail';
     85
     86  $table_sql = table_objet_sql($objet);
     87  $trouver_table = charger_fonction('trouver_table','base');
     88  $desc = $trouver_table($table_sql);
     89  if (!$desc OR !isset($desc['field']))
     90    return 0;
     91
     92  $champs = array();
     93
     94
     95
     96  if (isset($desc['field']['statut'])){
     97    if (isset($desc['statut_textes_instituer'])){
     98      $cles_statut = array_keys($desc['statut_textes_instituer']);
     99      $champs['statut'] = reset($cles_statut);
     100    }
     101    else
     102      $champs['statut'] = 'attente';
     103  }
     104
     105
     106  if ((isset($desc['date']) AND $d=$desc['date']) OR isset($desc['field'][$d='date']))
     107    $champs[$d] = date('Y-m-d H:i:s');
     108
     109  if ($set)
     110    $champs = array_merge($champs, $set);
     111 
     112
     113  // Envoyer aux plugins
     114  $champs = pipeline('pre_insertion',
     115    array(
     116      'args' => array(
     117        'table' => $table_sql,
     118      ),
     119      'data' => $champs
     120    )
     121  );
     122
     123  $id = sql_insertq($table_sql, $champs);
     124
     125  if ($id){
     126    pipeline('post_insertion',
     127      array(
     128        'args' => array(
     129          'table' => $table_sql,
     130          'id_objet' => $id,
     131        ),
     132        'data' => $champs
     133      )
     134    );
     135  }
     136
     137  return $id;
    138138}
    139139
    140140function reservations_detail_instituer($id_reservations_detail, $c, $calcul_rub=true) {
    141141
    142         include_spip('inc/autoriser');
    143         include_spip('inc/rubriques');
    144         include_spip('inc/modifier');
    145        
    146        
    147         $row = sql_fetsel('*','spip_reservations_details','id_reservations_detail='.intval($id_reservations_detail));
    148         $id_reservation=$row['id_reservation'];
    149         $id_evenement=$row['id_evenement'];
    150 
    151         $envoi_separe_actif=_request('envoi_separe_actif');     
    152        
    153         if(!$places=$c[places]){
    154                 $places=sql_getfetsel('places','spip_evenements','id_evenement='.$id_evenement);
    155                 }
    156         $statut_ancien = $statut = $row['statut'];
    157 
    158         $s = isset($c['statut']) ? $c['statut'] : $statut;
    159 
    160         $champs['statut']= $s ;
    161        
    162         // Vérifier si le statut peut être modifiés
    163         $statuts_complets=charger_fonction('complet','inc/statuts');
    164         $statuts=$statuts_complets();   
    165        
    166         /* Si on change depuis un statut non compris dans statuts_complet
    167          * vers un statut compris dans statuts_complet,
    168          * on vérifie si l'événement n'est pas complet
    169          */
    170         if ($s != $statut AND in_array($s,$statuts) AND !in_array($statut,$statuts)) {
    171                 // Si il y a une limitation de places prévu, on sélectionne les détails de réservation qui ont le statut_complet
    172                 if($places AND $places>0){
    173                         $sql=sql_select('quantite','spip_reservations_details','id_evenement='.$id_evenement.' AND statut IN ("'.implode('","',$statuts).'")');         
    174                         $reservations=array();
    175                         while($data=sql_fetch($sql)){
    176                                 $reservations[]=$data['quantite'];
    177                         }
    178                         if(array_sum($reservations)>=$places)$champs['statut']='attente';                                                 
    179                 }
    180         }
    181        
    182 
    183         // Envoyer aux plugins
    184         $champs = pipeline('pre_edition',
    185                 array(
    186                         'args' => array(
    187                                 'table' => 'spip_reservations_details',
    188                                 'id_reservation_detail' => $id,
    189                                 'action'=>'instituer',
    190                                 'statut_ancien' => $statut_ancien,
    191                                 'date_ancienne' => $date_ancienne,
    192                         ),
    193                         'data' => $champs
    194                 )
    195         );
    196 
    197         if (!count($champs)) return '';
    198         // Envoyer les modifs.
    199         objet_editer_heritage('reservations_detail', $id_reservations_detail,'', $statut_ancien, $champs);
    200 
    201         // Invalider les caches
    202         include_spip('inc/invalideur');
    203         suivre_invalideur("id='reservations_detail/$id_reservations_detail'");
    204 
    205 
    206         // Pipeline
    207         pipeline('post_edition',
    208                 array(
    209                         'args' => array(
    210                                 'table' => 'spip_reservations_details',
    211                                 'id_reservation_detail' => $id_reservations_detail,
    212                                 'action'=>'instituer',
    213                                 'statut_ancien' => $statut_ancien,
    214                                 'date_ancienne' => $date_ancienne,
    215                         ),
    216                         'data' => $champs
    217                 )
    218         );
    219        
    220 
    221        
    222         // Notifications si en mode différé et ne pas déclencher par le changement de statut de la réservation
    223        
    224         if($envoi_separe_actif!='non'){
    225                 //Déterminer la langue pour les notifications   
    226                 if(!$lang=sql_getfetsel('lang','spip_reservations','id_reservation='.$id_reservation)) $lang=lire_config('langue_site');                               
    227 
    228                 lang_select($lang);     
    229                 include_spip('inc/config');     
    230                 $config = lire_config('reservation_evenement');
    231                 $envoi_separe_config=isset($config['envoi_separe'])?$config['envoi_separe']:array();
    232                
    233                 if(in_array($s, $envoi_separe_config) OR $s == 'cloture'){
    234                        
    235                          if ((!$statut_ancien OR $s != $statut_ancien ) &&
    236                          ($config['activer']) &&
    237                          (in_array($s,$config['quand'])) &&
    238                          ($notifications = charger_fonction('notifications', 'inc', true))
    239                         ) {
    240                                 $row=sql_fetsel('id_auteur,email','spip_reservations','id_reservation='.$id_reservation);
    241                                 $id_auteur=$row['id_auteur'];
    242                                 $email=$row['email'];
    243                                
    244                                 // Determiner l'expediteur
    245                                 $options = array('statut'=>$s,'id_reservations_detail'=>$id_reservations_detail,'lang'=>$lang);
    246                                 if( $config['expediteur'] != "facteur" )
    247                                         $options['expediteur'] = $config['expediteur_'.$config['expediteur']];
    248                
    249                                 // Envoyer au vendeur et au client
    250                                 //Pour le moment pas d'envoi à l'administrateur, prévoir un seul mail pour tout l'événement.
    251                                 if ($s!='cloture') {
    252                                         spip_log('envoi mail differe vendeur email:'.$email.', statut:'.$s ,'reservation_evenement'.LOG_INFO); 
    253                                         $notifications('reservation_vendeur', $id_reservation, $options);
    254                                 }
    255                                        
    256                                 if($config['client']){
    257                                        
    258                                                 if(intval($id_auteur) AND $id_auteur>0)$options['email']=sql_getfetsel('email','spip_auteurs','id_auteur='.$id_auteur);
    259                                                 else $options['email']=$email;
    260                                                
    261                                         spip_log('envoi mail séparé client email:'.$options['email'].', statut:'.$s ,'reservation_evenement'._LOG_INFO);       
    262                                                                                        
    263                                         $notifications('reservation_client', $id_reservation, $options);
    264                                        
    265                                         }
    266                                 }
    267                         }               
    268                 }
    269 
    270         return ''; // pas d'erreur
     142  include_spip('inc/autoriser');
     143  include_spip('inc/rubriques');
     144  include_spip('inc/modifier');
     145 
     146 
     147  $row = sql_fetsel('*','spip_reservations_details','id_reservations_detail='.intval($id_reservations_detail));
     148  $id_reservation=$row['id_reservation'];
     149  $id_evenement=$row['id_evenement'];
     150
     151  $envoi_separe_actif=_request('envoi_separe_actif'); 
     152 
     153  if(!$places=$c[places]){
     154    $places=sql_getfetsel('places','spip_evenements','id_evenement='.$id_evenement);
     155    }
     156  $statut_ancien = $statut = $row['statut'];
     157
     158  $s = isset($c['statut']) ? $c['statut'] : $statut;
     159
     160  $champs['statut']= $s ;
     161 
     162  // Vérifier si le statut peut être modifiés
     163  $statuts_complets=charger_fonction('complet','inc/statuts');
     164  $statuts=$statuts_complets();   
     165 
     166  /* Si on change depuis un statut non compris dans statuts_complet
     167   * vers un statut compris dans statuts_complet,
     168   * on vérifie si l'événement n'est pas complet
     169   */
     170  if ($s != $statut AND in_array($s,$statuts) AND !in_array($statut,$statuts)) {
     171    // Si il y a une limitation de places prévu, on sélectionne les détails de réservation qui ont le statut_complet
     172    if($places AND $places>0){
     173      $sql=sql_select('quantite','spip_reservations_details','id_evenement='.$id_evenement.' AND statut IN ("'.implode('","',$statuts).'")');   
     174      $reservations=array();
     175      while($data=sql_fetch($sql)){
     176        $reservations[]=$data['quantite'];
     177      }
     178      if(array_sum($reservations)>=$places)$champs['statut']='attente';               
     179    }
     180  }
     181 
     182
     183  // Envoyer aux plugins
     184  $champs = pipeline('pre_edition',
     185    array(
     186      'args' => array(
     187        'table' => 'spip_reservations_details',
     188        'id_reservation_detail' => $id,
     189        'action'=>'instituer',
     190        'statut_ancien' => $statut_ancien,
     191        'date_ancienne' => $date_ancienne,
     192      ),
     193      'data' => $champs
     194    )
     195  );
     196
     197  if (!count($champs)) return '';
     198  // Envoyer les modifs.
     199  objet_editer_heritage('reservations_detail', $id_reservations_detail,'', $statut_ancien, $champs);
     200
     201  // Invalider les caches
     202  include_spip('inc/invalideur');
     203  suivre_invalideur("id='reservations_detail/$id_reservations_detail'");
     204
     205
     206  // Pipeline
     207  pipeline('post_edition',
     208    array(
     209      'args' => array(
     210        'table' => 'spip_reservations_details',
     211        'id_reservation_detail' => $id_reservations_detail,
     212        'action'=>'instituer',
     213        'statut_ancien' => $statut_ancien,
     214        'date_ancienne' => $date_ancienne,
     215      ),
     216      'data' => $champs
     217    )
     218  );
     219 
     220
     221 
     222  // Notifications si en mode différé et ne pas déclencher par le changement de statut de la réservation
     223 
     224  if($envoi_separe_actif!='non'){
     225    //Déterminer la langue pour les notifications 
     226    if(!$lang=sql_getfetsel('lang','spip_reservations','id_reservation='.$id_reservation)) $lang=lire_config('langue_site');       
     227
     228    lang_select($lang); 
     229    include_spip('inc/config'); 
     230    $config = lire_config('reservation_evenement');
     231    $envoi_separe_config=isset($config['envoi_separe'])?$config['envoi_separe']:array();
     232   
     233    if(in_array($s, $envoi_separe_config) OR $s == 'cloture'){
     234     
     235       if ((!$statut_ancien OR $s != $statut_ancien ) &&
     236       ($config['activer']) &&
     237       (in_array($s,$config['quand'])) &&
     238       ($notifications = charger_fonction('notifications', 'inc', true))
     239      ) {
     240        $row=sql_fetsel('id_auteur,email','spip_reservations','id_reservation='.$id_reservation);
     241        $id_auteur=$row['id_auteur'];
     242        $email=$row['email'];
     243       
     244        // Determiner l'expediteur
     245        $options = array('statut'=>$s,'id_reservations_detail'=>$id_reservations_detail,'lang'=>$lang);
     246        if( $config['expediteur'] != "facteur" )
     247          $options['expediteur'] = $config['expediteur_'.$config['expediteur']];
     248   
     249        // Envoyer au vendeur et au client
     250        //Pour le moment pas d'envoi à l'administrateur, prévoir un seul mail pour tout l'événement.
     251        if ($s!='cloture') {
     252          spip_log('envoi mail differe vendeur email:'.$email.', statut:'.$s ,'reservation_evenement'.LOG_INFO);
     253          $notifications('reservation_vendeur', $id_reservation, $options);
     254        }
     255         
     256        if($config['client']){
     257         
     258            if(intval($id_auteur) AND $id_auteur>0)$options['email']=sql_getfetsel('email','spip_auteurs','id_auteur='.$id_auteur);
     259            else $options['email']=$email;
     260           
     261          spip_log('envoi mail séparé client email:'.$options['email'].', statut:'.$s ,'reservation_evenement'._LOG_INFO);
     262          $notifications('reservation_client', $id_reservation, $options);
     263         
     264          }
     265        }
     266      }   
     267    }
     268
     269  return ''; // pas d'erreur
    271270}
  • _plugins_/reservation_evenement/trunk/paquet.xml

    r90813 r90920  
    22prefix="reservation_evenement"
    33categorie="date"
    4 version="1.19.6"
     4version="1.19.7"
    55etat="test"
    66compatibilite="[3.0.16;3.1.*]"
Note: See TracChangeset for help on using the changeset viewer.