source: spip-zone/_plugins_/projection/projection_pipelines.php @ 111365

Last change on this file since 111365 was 57471, checked in by fil@…, 9 years ago

Plugin "projection"


L'objectif de ce plugin est de maintenir sur le disque dur une sauvegarde de
chaque objet dans un format exploitable :

  • pour le recopier ailleurs
  • pour faire des diff en mode texte
  • pour le gérer dans un système de versionning type git
  • etc.

La sauvegarde d'un objet doit contenir tous les éléments de contenu qui
permettent de le reconstituer ailleurs. Par exemple, il ne suffit pas de
dire qu'il est lié à l'auteur 12, car sur un autre site l'auteur "Albert
Einstein" n'a pas nécessairement le numéro 12.

Le format de sortie doit être suffisamment structuré pour être lisible par
une machine (je pense à YAML, mais ça peut aussi être HTML si on fait bien
attention). Mais suffisamment textuel également pour bénéficier des outils
de diff d'interfaces web type github.

Dans cette première version on enregistre les contenus dans

local/projection/articles/article-91.json

Ca pose plusieurs problèmes :

  • local/ est accessible par le web
  • ce serait bien d'ajouter la notion de rubrique/arborescence du site
  • json est un format temporaire
  • le contenu est très incomplet

Premier commit : le moteur de délcenchement de la projection lorsqu'on édite un article.

File size: 1.0 KB
Line 
1<?php
2
3/*
4 * Plugin Projection
5 * (c) 2012 Fil
6 *
7 */
8
9$GLOBALS['projection_post_edition'] = array(
10        'spip_articles' => 'projection_export_article'
11);
12
13/**
14 *
15 * Declarer la tache cron de projection des vieux articles
16 * @param array $taches_generales
17 * @return array
18 */
19function projection_taches_generales_cron($taches_generales){
20        $taches_generales['projection'] = 60 * 60; // toutes les heures
21        return $taches_generales;
22}
23
24/**
25 * Pipeline post-edition
26 * envoyer une demande de projection dans la queue
27 *
28 * @param array $x
29 * @return array
30 */
31function projection_post_edition($x) {
32        if (isset($x['args']['table_objet'])) {
33                $objet = $x['args']['table_objet'];
34                $id_objet = $x['args']['id_objet'];
35
36                if (function_exists('ZZZZZjob_queue_add')) {
37                        job_queue_add('projection', 'projection '.$objet.' '.$id_objet,
38                                $arguments = array($objet, $id_objet),
39                                $file = 'inc/projection',
40                                $no_duplicate = TRUE,
41                                $time=0,
42                                $priority=0
43                        );
44                } else {
45                        include_spip('inc/projection');
46                        projection($objet, $id_objet);
47                }
48        }
49        return $x;
50}
51
52
Note: See TracBrowser for help on using the repository browser.