source: spip-zone/_plugins_/svp/plugins/preparer_sql_plugin.php @ 47822

Last change on this file since 47822 was 47822, checked in by eric@…, 10 years ago

On initialise systématiquement les champs qui pourraient être nuls pour éviter l'erreur lors de l'insertq d'un paquet.
Cette modification est nécessaire depuis le commit 17552

  • Property svn:eol-style set to native
File size: 5.6 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2011                                                *
7 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
8 *                                                                         *
9 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
10 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
11\***************************************************************************/
12
13if (!defined('_ECRIRE_INC_VERSION')) return;
14
15function plugins_preparer_sql_plugin($plugin)
16{
17        $champs = array();
18        if (!$plugin)
19                return $champs;
20
21        // On initialise les champs ne necessitant aucune transformation
22        $champs['categorie'] = $plugin['categorie'] ? $plugin['categorie'] : '';
23        $champs['etat'] = $plugin['etat'] ? $plugin['etat'] : '';
24        $champs['version'] = $plugin['version'] ? $plugin['version'] : '';
25        $champs['version_base'] = $plugin['version_base'] ? $plugin['version_base'] : '';
26        $champs['lien'] = $plugin['lien'] ? $plugin['lien'] : '';
27
28        // Renommage de certains champs
29        $champs['logo'] = $plugin['icon'] ? $plugin['icon'] : '';
30        // On passe le prefixe en lettres majuscules comme ce qui est fait dans SPIP
31        // Ainsi les valeurs dans la table spip_plugins coincideront avec celles de la meta plugin
32        $champs['prefixe'] = strtoupper($plugin['prefix']);
33
34        // Indicateurs d'etat numerique (pour simplifier la recherche des maj de STP)
35        static $num = array('stable'=>4, 'test'=>3, 'dev'=>2, 'experimental'=>1);
36        $champs['etatnum'] = isset($num[$plugin['etat']]) ? $num[$plugin['etat']] : 0;
37
38        // Tags : liste de mots-cles
39        $champs['tags'] = ($plugin['tags']) ? serialize($plugin['tags']) : '';
40       
41        // On passe en utf-8 avec le bon charset les champs pouvant contenir des entites html
42        $champs['description'] = unicode2charset(html2unicode($plugin['description']));
43        $champs['auteur'] = unicode2charset(html2unicode($plugin['auteur']));
44        $champs['licence'] = unicode2charset(html2unicode($plugin['licence']));
45       
46        // Extrait d'un nom et un slogan normalises
47        // -- Pour le cas particulier du prefixe des themes qui est toujours egal a "theme", il faut
48        // forcer malheureusement un nom et un slogan stanfard
49        if ($champs['prefixe'] == _SVP_PREFIXE_PLUGIN_THEME) {
50                // Traitement specifique des themes qui aujourd'hui sont consideres comme des paquets
51                // d'un plugin unique de prefixe "theme"
52                $champs['nom'] = _SVP_NOM_PLUGIN_THEME;
53                $champs['slogan'] = _SVP_SLOGAN_PLUGIN_THEME;
54        }
55        else {
56                $plugin['slogan'] = unicode2charset(html2unicode($plugin['slogan']));
57                $plugin['nom'] = unicode2charset(html2unicode($plugin['nom']));
58                // Calcul *temporaire* de la nouvelles balise slogan si celle-ci n'est
59                // pas renseignee et de la balise nom. Ceci devrait etre temporaire jusqu'a la nouvelle ere
60                // glaciaire des plugins
61                // - Slogan     :       si vide alors on prend la premiere phrase de la description limitee a 255
62                $champs['slogan'] = (!$plugin['slogan']) ? normaliser_slogan($champs['description']) : $plugin['slogan'];
63                // - Nom :      on repere dans le nom du plugin un chiffre en fin de nom
64                //                      et on l'ampute de ce numero pour le normaliser
65                //                      et on passe tout en unicode avec le charset du site
66                $champs['nom'] = normaliser_nom($plugin['nom']);
67        }
68
69        // Extraction de la compatibilite SPIP
70        $champs['version_spip'] = ($plugin['compatible']) ? $plugin['compatible'] : '';
71       
72        // Construction du tableau des dependances necessite, lib et utilise
73        $dependances['necessite'] = $plugin['necessite'];
74        $dependances['librairie'] = $plugin['lib'];
75        $dependances['utilise'] = $plugin['utilise'];
76        $champs['dependances'] = serialize($dependances);
77
78        return $champs;
79}
80
81
82function normaliser_slogan($description) {
83        include_spip('inc/texte');
84
85        // On extrait les traductions de l'eventuel multi
86        // Si le nom n'est pas un multi alors le tableau renvoye est de la forme '' => 'nom'
87        $descriptions = extraire_trads(str_replace(array('<multi>', '</multi>'), array(), $description, $nbr_replace));
88        $multi = ($nbr_replace > 0) ? true : false;
89
90        // On boucle sur chaque multi ou sur la chaine elle-meme en extrayant le slogan
91        // dans les differentes langues
92        $slogan = '';
93        foreach ($descriptions as $_lang => $_descr) {
94                $_descr = trim($_descr);
95                if (!$_lang)
96                        $_lang = 'fr';
97                $nbr_matches = preg_match(',^(.+)[.!?\r\n\f],Um', $_descr, $matches);
98                $slogan .= (($multi) ? '[' . $_lang . ']' : '') . 
99                                        (($nbr_matches > 0) ? trim($matches[1]) : couper($_descr, 150, ''));
100        }
101
102        if ($slogan)
103                // On renvoie un nouveau slogan multi ou pas
104                $slogan = (($multi) ? '<multi>' : '') . $slogan . (($multi) ? '</multi>' : '');
105
106        return $slogan;
107}
108
109
110function normaliser_nom($nom) {
111        include_spip('inc/texte');
112
113        // On extrait les traductions de l'eventuel multi
114        // Si le nom n'est pas un multi alors le tableau renvoye est de la forme '' => 'nom'
115        $noms = extraire_trads(str_replace(array('<multi>', '</multi>'), array(), $nom, $nbr_replace));
116        $multi = ($nbr_replace > 0) ? true : false;
117       
118        $nouveau_nom = '';
119        foreach ($noms as $_lang => $_nom) {
120                $_nom = trim($_nom);
121                if (!$_lang)
122                        $_lang = 'fr';
123                $nbr_matches = preg_match(',(.+)(\s+[\d._]*)$,Um', $_nom, $matches);
124                $nouveau_nom .= (($multi) ? '[' . $_lang . ']' : '') . 
125                                                (($nbr_matches > 0) ? trim($matches[1]) : $_nom);
126        }
127       
128        if ($nouveau_nom)
129                // On renvoie un nouveau nom multi ou pas sans la valeur de la branche
130                $nouveau_nom = (($multi) ? '<multi>' : '') . $nouveau_nom . (($multi) ? '</multi>' : '');
131               
132        return $nouveau_nom;
133}
134
135?>
Note: See TracBrowser for help on using the repository browser.