source: spip-zone/_plugins_/taxonomie/trunk/taxonomie_pipelines.php @ 113820

Last change on this file since 113820 was 113820, checked in by eric@…, 20 months ago

Transfert de certaines fonctions d'API dans inc/taxonomie car elles ne servent jamais de filtres.

  • Property svn:eol-style set to native
File size: 4.0 KB
Line 
1<?php
2/**
3 * Ce fichier contient les cas d'utilisation de certains pipelines par le plugin Taxonomie.
4 *
5 */
6
7if (!defined('_ECRIRE_INC_VERSION')) return;
8       
9
10/**
11 * Surcharge l'action `modifier` d'un taxon en positionnant l'indicateur d'édition à `oui`
12 * afin que les modifications manuelles du taxon soient préservées lors d'un prochain
13 * rechargement du règne.
14 *
15 * @pipeline pre_edition
16 * @package SPIP\TAXONOMIE\TAXON
17 *
18 * @param array         $flux
19 *              Données du pipeline fournie en entrée (chaque pipeline possède une structure de donnée propre).
20 *
21 * @return array
22 *              Données du pipeline modifiées pour refléter le traitement.
23 *
24**/
25function taxonomie_pre_edition($flux) {
26
27        $table = $flux['args']['table'];
28        $id = intval($flux['args']['id_objet']);
29        $action = $flux['args']['action'];
30
31        // Traitements particuliers de l'objet taxon quand celui-ci est modifié manuellement
32        if (($table == 'spip_taxons') and $id) {
33                // Modification d'un des champs éditables du taxon
34                if ($action == 'modifier') {
35                        // -- On positionne l'indicateur d'édition à oui, ce qui permettra d'éviter lors
36                        //    d'un rechargement du règne de perdre les modifications manuelles pour les taxons importés
37                        //    via le fichier ITIS.
38                        //    On met aussi à jour les taxons créés lors d'un ajout d'une espèce et donc non importés,
39                        //    même si cet indicateur n'a que peu d'intérêt dans ce cas.
40                        $flux['data']['edite'] = 'oui';
41                }
42        }
43
44        return $flux;
45}
46
47
48/**
49 * Surcharge l'action `instituer` d'un taxon.
50 * Si une espèce est instituée à publié, alors ses ascendants de type espèce non encore publiés sont automatiquement
51 * publiés.
52 *
53 * @pipeline pre_edition
54 * @package SPIP\TAXONOMIE\TAXON
55 *
56 * @param array         $flux
57 *              Données du pipeline fournie en entrée (chaque pipeline possède une structure de donnée propre).
58 *
59 * @return array
60 *              Données du pipeline modifiées pour refléter le traitement.
61 *
62**/
63function taxonomie_post_edition($flux) {
64
65        if (isset($flux['args']['table'], $flux['args']['id_objet'], $flux['args']['action'])) {
66                $table = $flux['args']['table'];
67                $id = intval($flux['args']['id_objet']);
68                $action = $flux['args']['action'];
69
70                // Traitements particuliers de l'objet taxon quand celui-ci est institué manuellement
71                if (($table == 'spip_taxons') and $id) {
72                        // Instituer : on ne peut instituer qu'une espèce dont aucun enfant n'est publié. Il est donc inutile de
73                        // considérer ces cas.
74                        if ($action == 'instituer') {
75                                // On vérifie qu'on institue l'espèce de 'prop' à 'publie'. Si c'est le cas, alors on vérifie
76                                // qu'il est aussi nécessaire d'instituer à 'publie' les enfants de type espèce encore à prop.
77                                $statut_nouveau = $flux['data']['statut'];
78                                $statut_ancien = $flux['args']['statut_ancien'];
79                                if (($statut_ancien == 'prop') and ($statut_nouveau == 'publie')) {
80                                        // On récupère le TSN et le TSN parent de l'espèce concernée.
81                                        $from = 'spip_taxons';
82                                        $select = array('tsn', 'tsn_parent');
83                                        $where = array("id_taxon=$id");
84                                        $taxon = sql_fetsel($select, $from, $where);
85
86                                        // On récupère les ascendants de type espèce de l'espèce concernée si ils existent.
87                                        include_spip('taxonomie_fonctions');
88                                        $ascendance = taxon_informer_ascendance($id, $taxon['tsn_parent'], 'ascendant');
89                                        if ($ascendance) {
90                                                // On publie les taxons en évitant une ré-entrance (donc sans appeler l'api objet)
91                                                // mais en utilisant directement une mise à jour sql.
92                                                foreach ($ascendance as $_parent) {
93                                                        if ($_parent['espece'] == 'oui') {
94                                                                if (($_parent['statut'] <> 'publie')) {
95                                                                        $maj = array('statut' => $statut_nouveau, 'edite' => 'oui');
96                                                                        sql_updateq($from, $maj, 'id_taxon=' . intval($_parent['id_taxon']));
97                                                                }
98                                                        } else {
99                                                                // Dès que l'on est sur un taxon non espèce on peut s'arrêter vu que les ascendants sont
100                                                                // classé du parent le plus proche au plus éloigné.
101                                                                break;
102                                                        }
103                                                }
104                                        }
105                                }
106                        }
107                }
108        }
109
110        return $flux;
111}
Note: See TracBrowser for help on using the repository browser.