source: spip-zone/_core_/plugins/svp/plugins/preparer_sql_paquet.php

Last change on this file was 115696, checked in by eric@…, 5 months ago

SVP Typologie gère maintenant toute la typologie des plugins, soit les catégories et les tags. Aussi, contrairement à ce qui a été prévu dans les commits précédents on supprime toute manipulation des catégories et des tags dans SVP :

  • les colonnes tags et categorie sont supprimées de spip_plugins
  • le chargement du XML considère encore l'attribut ou la balise categorie par souci de compatibilité mais ne le renvoie pas.
  • il ne reste plus que les API d'affichage qui utilisent la catégorie comme filtre mais qui fonctionnent très bien sans et ne sont utilisés que par Plugins SPIP. Ces API seront revus dans un prochain commit.

Cette version de SVP qui inaugure une branche 2.0 est totalement compatible avec les sites de production fonctionnant en mode runtime mais est incomptaible avec Plugins SPIP.

  • Property svn:eol-style set to native
File size: 3.9 KB
Line 
1<?php
2
3/**
4 * Fichier permettant de transformer les données d'un arbre de description
5 * originaire d'un paquet.xml dans un format compatible avec la base de données
6 *
7 * @plugin SVP pour SPIP
8 * @license GPL
9 * @package SPIP\SVP\Plugins
10 **/
11if (!defined('_ECRIRE_INC_VERSION')) {
12        return;
13}
14
15/**
16 * Pour une description de plugin donnée (issue de la dtd de paquet.xml),
17 * prépare les données à installer en bdd
18 *
19 * Les données sont parfois sérialisées, parfois compilées
20 * pour tenir compte des spécificités de cette DTD et du stockage en bdd.
21 *
22 * @param array $plugin
23 *     Description de plugin
24 * @return array
25 *     Couples clés => valeurs de description du paquet
26 **/
27function plugins_preparer_sql_paquet($plugin) {
28        include_spip('inc/svp_outiller');
29
30        $champs = array();
31        // Se méfier des plugins en erreur
32        if (!$plugin or !empty($plugin[1]['erreur'])) {
33                return $champs;
34        }
35
36        // On initialise les champs ne necessitant aucune transformation
37        foreach (array(
38                         'etat' => 'etat',
39                         'version_base' => 'schema',
40                         'logo' => 'logo',
41                         'lien_doc' => 'documentation',
42                         'lien_demo' => 'demonstration',
43                         'lien_dev' => 'developpement'
44                 ) as $cle_champ => $cle_plugin) {
45                $champs[$cle_champ] = (isset($plugin[$cle_plugin]) and $plugin[$cle_plugin])
46                        ? $plugin[$cle_plugin]
47                        : '';
48        }
49
50        // on normalise la version 1.3.12 => 001.003.012
51        $champs['version'] = (isset($plugin['version']) and $plugin['version'])
52                ? normaliser_version($plugin['version'])
53                : '';
54
55        // On passe le prefixe en lettres majuscules comme ce qui est fait dans SPIP
56        // Ainsi les valeurs dans la table spip_plugins coincideront avec celles de la meta plugin
57        $champs['prefixe'] = strtoupper($plugin['prefix']);
58
59        // Indicateurs d'etat numerique (pour simplifier la recherche des maj de STP)
60        static $num = array('stable' => 4, 'test' => 3, 'dev' => 2, 'experimental' => 1);
61        $champs['etatnum'] = isset($num[$plugin['etat']]) ? $num[$plugin['etat']] : 0;
62
63
64        // On passe en utf-8 avec le bon charset les champs pouvant contenir des entites html
65        foreach (array(
66                         'nom' => 'nom',
67                         'description' => 'description',
68                         'slogan' => 'slogan'
69                 ) as $cle_champ => $cle_plugin) {
70                $champs[$cle_champ] = (isset($plugin[$cle_plugin]) and $plugin[$cle_plugin])
71                        ? entite2charset($plugin[$cle_plugin], 'utf-8')
72                        : '';
73        }
74
75        // Cles necessitant d'etre serialisees
76        // Tags : liste de mots-cles
77        // Traitement des auteurs, credits, licences et copyright
78        foreach (array(
79                         'auteur' => 'auteur',
80                         'credit' => 'credit',
81                         'licence' => 'licence',
82                         'copyright' => 'copyright',
83                 ) as $cle_champ => $cle_plugin) {
84                $champs[$cle_champ] = (isset($plugin[$cle_plugin]) and $plugin[$cle_plugin])
85                        ? serialize($plugin[$cle_plugin])
86                        : '';
87        }
88
89        // Extraction de la compatibilite SPIP et construction de la liste des branches spip supportees
90        $champs['compatibilite_spip'] = (isset($plugin['compatibilite']) and $plugin['compatibilite'])
91                ? $plugin['compatibilite']
92                : '';
93        $champs['branches_spip'] = (isset($plugin['compatibilite']) and $plugin['compatibilite'])
94                ? compiler_branches_spip($plugin['compatibilite'])
95                : '';
96
97        // Construction du tableau des dependances necessite, lib et utilise
98        $dependances['necessite'] = $plugin['necessite'];
99        $dependances['librairie'] = $plugin['lib'];
100        $dependances['utilise'] = $plugin['utilise'];
101        $champs['dependances'] = serialize($dependances);
102
103        // Calculer le champ 'procure' (tableau sérialisé prefixe => version)
104        $champs['procure'] = '';
105        if (!empty($plugin['procure'][0])) {
106                $champs['procure'] = array();
107                foreach ($plugin['procure'][0] as $procure) {
108                        $p = strtoupper($procure['nom']);
109                        if (
110                                !isset($champs['procure'][$p])
111                                or spip_version_compare($procure['version'], $champs['procure'][$p], '>')
112                        ) {
113                                $champs['procure'][$p] = $procure['version'];
114                        }
115                }
116                $champs['procure'] = serialize($champs['procure']);
117        }
118
119        return $champs;
120}
Note: See TracBrowser for help on using the repository browser.