Changeset 101529 in spip-zone


Ignore:
Timestamp:
Jan 5, 2017, 7:16:25 PM (3 years ago)
Author:
abelass@…
Message:

Permettre d'effacer les réservation avec statut par défaut selon deĺai définit dans config.

optimiser_base_disparus nen semble cependant pas être actionner par le genie optimiser, à creuser

Location:
_plugins_/reservation_evenement/trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/reservation_evenement/trunk/formulaires/configurer_reservation_evenement.php

    r99363 r101529  
    1414        $config = lire_config('reservation_evenement', array());
    1515        $quand = isset($config['quand']) ? $config['quand'] : array();
     16
    1617        //Le statuts du plugin, sauf en cours
    1718        foreach ($liste_objets['spip_reservations']['statut_textes_instituer'] AS $statut => $label) {
     
    4950                                                'label' => _T('reservation:label_statut_defaut'),
    5051                                                'defaut' => $config['statut_defaut']
     52                                        )
     53                                ),
     54                                array(
     55                                        'saisie' => 'input',
     56                                        'options' => array(
     57                                                'nom' => 'duree_vie',
     58                                                'label' => _T('reservation:duree_vie_label'),
     59                                                'explication' => _T('reservation:duree_vie_explication',
     60                                                                array(
     61                                                                        'statut_defaut' => $config['statut_defaut']
     62                                                                )
     63                                                        ),
     64                                                'defaut' => $config['duree_vie'],
    5165                                        )
    5266                                ),
  • _plugins_/reservation_evenement/trunk/inc/reservation_evenements.php

    r88419 r101529  
    11<?php
     2/**
     3 * Fonctions générique du plugin Réservation événements.
     4 *
     5 * @plugin     Réservation événements
     6 * @copyright  2013
     7 * @author     Rainer Müller
     8 * @licence    GNU/GPL
     9 * @package    SPIP\Commandes\Fonctions
     10 */
    211
    312// Sécurité
     
    1827 */
    1928function rubrique_reservation($id='',$objet,$rubrique_reservation='',$options=array()){
    20         include_spip('inc/rubriques');         
     29        include_spip('inc/rubriques');
    2130        //On récupère la config si pas passé comme variable
    2231        if(!$rubrique_reservation){
    2332                include_spip('inc/config');
    24                 include_spip('formulaires/selecteur/generique_fonctions');     
     33                include_spip('formulaires/selecteur/generique_fonctions');
    2534                $config=lire_config('reservation_evenement/',array());
    2635                $rubrique_reservation=isset($config['rubrique_reservation'])?picker_selected($config['rubrique_reservation'],'rubrique'):'';
     
    2837        //Chercher les rubriques de la branche
    2938        if(is_array($rubrique_reservation))$rubrique_reservation=explode(',',calcul_branche_in($rubrique_reservation));
    30        
     39
    3140
    3241        //Si une zone a été définit
    3342        if(is_array($rubrique_reservation) and count($rubrique_reservation)!=0){
    34                
     43
    3544                //Teste si l'objet se trouve dans la zone
    3645                if($id){
     
    3948                                $select='id_article';
    4049                                $from=array('spip_articles');
    41                                 $where=array('id_article='.$id.' AND id_rubrique IN ('.implode(',',$rubrique_reservation).')');                         
     50                                $where=array('id_article='.$id.' AND id_rubrique IN ('.implode(',',$rubrique_reservation).')');
    4251                        }
    4352                        elseif($objet=='evenement'){
     
    4958                                $select='id_rubrique';
    5059                                $from=array('spip_rubriques');
    51                                 $where=array('id_rubrique='.$id.' AND id_rubrique IN ('.implode(',',$rubrique_reservation).')');                               
     60                                $where=array('id_rubrique='.$id.' AND id_rubrique IN ('.implode(',',$rubrique_reservation).')');
    5261                        }
    5362                        if(isset($options['e.id_evenement']))array_push($where,$options['where']);
    54                                        
     63
    5564                        if(sql_getfetsel($select,$from,$where)) $return=true; //Objet se trouve dans la zone
    5665                        else $return=false;//Objet ne se trouve pas dans la zone
    57                        
     66
    5867                }
    5968                //Afficher les id_articles se trouvant dans la zone
     
    6372                                $select=array('id_article');
    6473                                $from=array('spip_articles');
    65                                 $where=array('id_rubrique IN ('.implode(',',$rubrique_reservation).')');                               
     74                                $where=array('id_rubrique IN ('.implode(',',$rubrique_reservation).')');
    6675                        }
    6776                        if($objet=='evenement'){
     
    7382                                $select=array('id_rubrique');
    7483                                $from=array('spip_rubriques');
    75                                 $where=array('id_rubrique IN ('.implode(',',$rubrique_reservation).')');       
     84                                $where=array('id_rubrique IN ('.implode(',',$rubrique_reservation).')');
    7685                        }
    7786                        if(isset($options['where']))array_push($where,$options['where']);
     
    7988                                if($options['select'] != '*')array_push($where,$options['where']);
    8089                                else $select=$options['select'];
    81                                 }                       
    82                                                                
     90                                }
     91
    8392                        $sql=sql_select($select,$from,$where);
    84                        
     93
    8594                        $ids=array();
    8695                        if(!isset($options['resultat'])){
     
    9099                        }
    91100                        elseif($options['resultat']=='par_id'){
    92                                
     101
    93102                                while($data=sql_fetch($sql)){
    94103                                        $ids[$data['id_evenement']]=$data;
    95                                 }                                       
     104                                }
    96105                        }
    97106                        $return=$ids;
     
    99108        }
    100109        elseif(!isset($options['tableau'])) $return=true; //Test sur objet, pas de zone définit
    101         elseif(isset($options['tableau'])) $return=false; //Affichage tableau, pas de zone définit donc pas de résultat 
     110        elseif(isset($options['tableau'])) $return=false; //Affichage tableau, pas de zone définit donc pas de résultat
    102111
    103112        return $return;
    104113}
     114
     115/**
     116 * Supprimer une ou plusieurs réservations et leurs données associées
     117 *
     118 * La fonction va supprimer :
     119 *
     120 * - les détails des réservations
     121 * - les liens entre les réservations et leurs adresses
     122 * - les adresses si elles sont devenues orphelines
     123 *
     124 * @param int|array $ids_reservations
     125 *     Identifiant d'une commande ou tableau d'identifiants
     126 * @return bool
     127 *     - false si pas d'identifiant de commande transmis
     128 *     - true sinon
     129 **/
     130function reservations_supprimer($ids_reservations) {
     131        if (!$ids_reservations) {
     132                return false;
     133        }
     134        if (!is_array($ids_reservations)) $ids_reservations = array($ids_reservations);
     135
     136        spip_log("reservations_effacer : suppression de reservations(s) : " . implode(',', $ids_reservations),
     137                        'reservation_evenement');
     138
     139        $in_reservations = sql_in('id_reservation', $ids_reservations);
     140
     141        // On supprime ses détails
     142        sql_delete('spip_reservations_details', $in_reservations);
     143
     144        // On dissocie les commandes et les adresses, et éventuellement on supprime ces dernières
     145        include_spip('action/editer_liens');
     146        if ($adresses_commandes = objet_trouver_liens(array('adresse'=>'*'), array('reservation'=>$ids_reservations))) {
     147                $adresses_reservations = array_unique(array_map('reset', $adresses_reservations));
     148
     149                // d'abord, on dissocie les adresses et les réservations
     150                spip_log("reservations_effacer : dissociation des adresses des réservations à supprimer : " . implode(',', $adresses_reservations),
     151                                'reservation_evenement');
     152                objet_dissocier(array('adresse'=>$adresses_commandes), array('reservation'=>$ids_reservations));
     153
     154                // puis si les adresses ne sont plus utilisées nul part, on les supprime
     155                foreach($adresses_commandes as $id_adresse) {
     156                        if (!count(objet_trouver_liens(array('adresse'=>$id_adresse), '*'))) {
     157                                sql_delete(table_objet_sql('adresse'), "id_adresse=".intval($id_adresse));
     158                        }
     159                }
     160        }
     161
     162        // On supprime les réservations.
     163        sql_delete(table_objet_sql('reservation'), $ids_reservations);
     164
     165        return true;
     166}
  • _plugins_/reservation_evenement/trunk/lang/reservation_fr.php

    r101150 r101529  
    2525        'designation' => 'Désignation',
    2626        'details_reservation' => 'Détails de la réservation :',
     27        'duree_vie_label' => 'Durée de vie :',
     28        'duree_vie_explication' => 'Saisir la durée de vie (en heures) d’une commande avec le statut "@statut_defaut@". Si aucune valeur ou valeur 0 - la durée de vie est illimitée.',
    2729
    2830        // E
  • _plugins_/reservation_evenement/trunk/paquet.xml

    r101443 r101529  
    22        prefix="reservation_evenement"
    33        categorie="date"
    4         version="1.22.2"
     4        version="1.23.0"
    55        etat="test"
    66        compatibilite="[3.0.16;3.1.*]"
     
    4545        <pipeline nom="formulaire_traiter" inclure="reservation_evenement_pipelines.php" />
    4646        <pipeline nom="recuperer_fond" inclure="reservation_evenement_pipelines.php" />
     47                <pipeline nom="optimiser_base_disparus" inclure="reservation_evenement_pipelines.php" />
    4748
    4849
  • _plugins_/reservation_evenement/trunk/reservation_evenement_pipelines.php

    r100321 r101529  
    1111if (! defined('_ECRIRE_INC_VERSION'))
    1212        return;
    13        
     13
    1414        // Afficher les box infos et téléchargement des réservations
    1515function reservation_evenement_affiche_gauche($flux) {
     
    1919                'rubrique',
    2020                'article',
    21                 'evenement' 
    22         );
    23        
     21                'evenement'
     22        );
     23
    2424        if (in_array($exec, $objets_affichage)) {
    2525                include_spip('inc/config');
    2626                include_spip('formulaires/selecteur/generique_fonctions');
    2727                include_spip('inc/reservation_evenements');
    28                
     28
    2929                $config = lire_config('reservation_evenement/rubrique_reservation');
    3030                $contexte = array ();
     
    3535                $rubrique_reservation = picker_selected($config, 'rubrique');
    3636                $zone = rubrique_reservation($id, $exec, $rubrique_reservation);
    37                
     37
    3838                // Si l'objet se trouve dans la zone Reservation Evénement, on affiche
    3939                if ($zone) {
     
    4848 *
    4949 * @pipeline affiche_auteurs_interventions
    50  * 
     50 *
    5151 * @param array $flux
    5252 *              Données du pipeline
     
    5757                $flux['data'] .= '<br class="nettoyeur"/>' . recuperer_fond('prive/objets/liste/reservations', array (
    5858                        'id_auteur' => $id_auteur,
    59                         'titre' => _T('reservation:info_reservations_auteur') 
     59                        'titre' => _T('reservation:info_reservations_auteur')
    6060                ), array (
    61                         'ajax' => true 
     61                        'ajax' => true
    6262                ));
    6363        }
     
    6868        // reservations sur les événements
    6969        if (! $e['edition'] and in_array($e['type'], array (
    70                 'evenement' 
     70                'evenement'
    7171        ))) {
    7272                $contexte = calculer_contexte();
     
    7474                $contexte['par'] = 'id_evenement';
    7575                $texte .= recuperer_fond('prive/objets/liste/reservations_details', $contexte, array (
    76                         'ajax' => 'oui' 
     76                        'ajax' => 'oui'
    7777                ));
    7878                $flux['data'] .= $texte;
     
    8686                'reservation_client' => array (
    8787                        'activer' => 'on',
    88                         'duree' => '180' 
     88                        'duree' => '180'
    8989                ),
    9090                'reservation_vendeur' => array (
    91                         'duree' => '180' 
    92                 ) 
     91                        'duree' => '180'
     92                )
    9393        ));
    9494        return $flux;
     
    107107                else
    108108                        $periodicite = 24 * 3600;
    109                
     109
    110110                $taches['reservation_evenement_cloture'] = $periodicite;
    111111        }
     
    116116        $forms = array (
    117117                'editer_article',
    118                 'editer_evenement' 
     118                'editer_evenement'
    119119        );
    120120        $contexte = $flux['data'];
    121        
     121
    122122        // Charger les valeurs par défaut
    123123        if (in_array($form, $forms)) {
     
    136136        $forms = array (
    137137                'editer_article',
    138                 'editer_evenement' 
     138                'editer_evenement'
    139139        );
    140140        if (in_array($form, $forms)) {
    141141                list ($edit, $objet) = explode('_', $form);
    142142                sql_updateq('spip_' . $objet . 's', array (
    143                         'action_cloture' => _request('action_cloture') 
     143                        'action_cloture' => _request('action_cloture')
    144144                ), 'id_' . $objet . '=' . $flux['data']['id_' . $objet]);
    145145        }
     
    148148function reservation_evenement_recuperer_fond($flux) {
    149149        $fond = $flux['args']['fond'];
    150        
     150
    151151        $contexte = $flux['data']['contexte'];
    152152        $fonds = array (
    153153                'formulaires/editer_article' => 'article',
    154                 'formulaires/editer_evenement' => 'evenement' 
     154                'formulaires/editer_evenement' => 'evenement'
    155155        );
    156156        // Ajouter le champ action_cloture
    157157        if (isset($fonds[$fond])) {
    158                
     158
    159159                include_spip('inc/config');
    160160                include_spip('formulaires/selecteur/generique_fonctions');
    161161                include_spip('inc/reservation_evenements');
    162162                $config = lire_config('reservation_evenement', array ());
    163                
     163
    164164                $type = $fonds[$fond];
    165165                $rubrique_reservation = isset($config['rubrique_reservation']) ? picker_selected($config['rubrique_reservation'], 'rubrique') : '';
     
    167167                $zone = rubrique_reservation($id, $type, $rubrique_reservation);
    168168                $cron = isset($config['cron']) ? $config['cron'] : '';
    169                
     169
    170170                // Si cron activé et l'objet se trouve dans la zone Reservation Evénement, on affiche
    171171                if ($cron and $zone) {
     
    182182        $types = array (
    183183                'article',
    184                 'evenement' 
    185         );
    186        
     184                'evenement'
     185        );
     186
    187187        if (in_array($type, $types)) {
    188188                include_spip('inc/config');
    189189                include_spip('formulaires/selecteur/generique_fonctions');
    190190                include_spip('inc/reservation_evenements');
    191                
     191
    192192                $config = lire_config('reservation_evenement', array ());
    193193                $rubrique_reservation = isset($config['rubrique_reservation']) ? picker_selected($config['rubrique_reservation'], 'rubrique') : '';
     
    195195                $zone = rubrique_reservation($id, $type, $rubrique_reservation);
    196196                $cron = isset($config['cron']) ? $config['cron'] : '';
    197                
     197
    198198                // Si cron activé et l'objet se trouve dans la zone Reservation Evénement, on affiche
    199199                if ($cron and $zone) {
     
    201201                                1 => _T('item:oui'),
    202202                                2 => _T('item:non'),
    203                                 3 => _T('reservation:evenement_cloture') 
     203                                3 => _T('reservation:evenement_cloture')
    204204                        );
    205205                        $action_cloture = sql_getfetsel('action_cloture', 'spip_' . $type . 's', 'id_' . $type . '=' . $type = $flux['args']['id_objet']);
     
    212212        return $flux;
    213213}
     214
     215/**
     216 * Optimiser la base de donnée en supprimant toutes les reservations en cours qui sont trop vieilles
     217 *
     218 * Le délai de "péremption" est défini dans les options de configuration du plugin
     219 *
     220 * @pipeline optimiser_base_disparus
     221 * @param  array $flux Données du pipeline
     222 * @return array       Données du pipeline
     223 */
     224function reservation_evenement_optimiser_base_disparus($flux){
     225        include_spip('inc/config');
     226
     227        // les config
     228        $config_reservation = lire_config('reservation_evenement');
     229        $heures = isset($config_reservation['duree_vie']) ? $config_reservation['duree_vie'] : 0;
     230
     231        if ($heures > 0) {
     232                $statut_defaut = isset($config_reservation['statut_defaut']) ? $config_reservation['statut_defaut'] : 'encours';
     233                $depuis = date('Y-m-d H:i:s', time() - 3600*intval($heures));
     234                // On récupère les réservations trop vieilles
     235                $reservations = sql_allfetsel(
     236                                'id_reservation',
     237                                'spip_reservations',
     238                                'statut = '.sql_quote($statut_defaut).' and date<'.sql_quote($depuis)
     239                                );
     240
     241                // S'il y a bien des commandes à supprimer
     242                if ($reservations) {
     243                        $reservations = array_map('reset', $reservations);
     244                        include_spip('inc/reservations_evenements');
     245                        reservations_supprimer($reservations);
     246                        $flux['data'] += count($reservations);
     247                }
     248        }
     249
     250        return $flux;
     251}
Note: See TracChangeset for help on using the changeset viewer.