source: spip-zone/_plugins_/indexer/trunk/indexer_pipelines.php @ 82713

Last change on this file since 82713 was 82713, checked in by rastapopoulos@…, 5 years ago

Déplacer la réindexation d'une source précise dans une tâche programmée.

Au passage on ajoute une méthode getSource() à la classe Sources pour pouvoir récupérer telle source précise avec son alias donné lors de l'enregistrement.

File size: 1.7 KB
Line 
1<?php
2
3// Sécurité
4if (!defined('_ECRIRE_INC_VERSION')) return;
5
6/**
7 * Réindexer des choses lorsqu'il y a des modifications sur un objet
8 *
9 * @pipeline post_edition
10 * @param array $flux Arguments et contenu du pipeline "post_edition"
11 * @return Retourne le flux d'origine mais possiblement modifié
12 */
13function indexer_post_edition($flux){
14        include_spip('base/connect_sql'); // pour être sûr d'avoir objet_type()
15       
16        // On trouve le type de l'objet
17        if (isset($flux['args']['type'])){
18                $objet = $flux['args']['type'];
19        }
20        elseif (isset($flux['args']['table'])){
21                $objet = objet_type($flux['args']['table']);
22        }
23        // On trouve son identifiant
24        if (isset($flux['args']['id_objet'])){
25                $id_objet = $flux['args']['id_objet'];
26        }
27       
28        // Si on a ce qu'il faut, on continue
29        if ($objet and $id_objet){
30                include_spip('inc/indexer');
31               
32                // On récupère toutes les sources compatibles avec l'indexation
33                $sources = indexer_sources();
34               
35                // On parcourt toutes les sources et on garde celles on un rapport avec l'objet du pipeline
36                foreach ($sources as $alias => $source){
37                        // Si une méthode pour définir explicitement existe, on l'utilise
38                        if (method_exists($source, 'getObjet')){
39                                $objet_source = $source->getObjet();
40                        }
41                        // Sinon on cherche avec l'alias donné à la source
42                        else{
43                                $objet_source = objet_type(strtolower($alias));
44                        }
45                       
46                        // Si l'objet de la source est le même que dans l'édition, on met à jour l'indexation de l'objet
47                        if ($objet_source == $objet){
48                                job_queue_add(
49                                        'indexer_job_indexer_source',
50                                        "Réindexer l'objet ($objet - $id_objet)",
51                                        array($alias, $id_objet, $id_objet+1), // +1 car le test est normalement : id < $end
52                                        'inc/indexer',
53                                        true // pas de duplication
54                                );
55                        }
56                }
57        }
58       
59        return $flux;
60}
Note: See TracBrowser for help on using the repository browser.