source: trunk/spip/esqueleto-redcta/plugins/sktheme/1_9_2/inc/sktheme_xml.php @ 30

Last change on this file since 30 was 30, checked in by sebas, 17 years ago

nueva importacion del codigo del esqueleto de redcta con los plugins

File size: 5.9 KB
Line 
1<?php
2  // ---------------------------------------------------------------------
3  //
4  // Sktheme : manage themes under SPIP (squelettes + habillages)
5  //
6  // Copyright (c) 2006 - Skedus
7  //
8  // This program is free software; you can redistribute it and/or modify
9  // it under the terms of the GNU General Public License as published by
10  // the Free Software Foundation; either version 2 of the License, or
11  // (at your option) any later version.
12  //
13  // You should have received a copy of the GNU General Public License
14  // along with this program;
15  //
16  // ---------------------------------------------------------------------
17if (!defined("_ECRIRE_INC_VERSION")) return;
18
19function sktheme_xml_get_infos($xml_dir,$xml_type){
20
21  include_spip('inc/plugin'); 
22
23  $ret = array();
24  if ((@file_exists($xml_dir))&&(is_dir($xml_dir))){
25    if (@file_exists($xml_dir."/$xml_type.xml")) {
26      lire_fichier($xml_dir."/$xml_type.xml", $texte);
27      $arbre = parse_plugin_xml($texte);
28      if (!isset($arbre[$xml_type])&&is_array($arbre[$xml_type]))
29        $arbre = array('erreur' => array(_T('erreur_plugin_fichier_def_incorrect')." : $xml_dir/$xml_type.xml"));
30    }
31    else {
32      // pour arriver ici on l'a vraiment cherche...
33      //debug echo "error: erreur_plugin_fichier_def_absent $xml_dir/$xml_type.xml<br>";
34      $arbre = array('erreur' => array(_T('erreur_plugin_fichier_def_absent')." : $xml_dir/$xml_type.xml"));
35    }
36
37    sktheme_xml_verifie_conformite($xml_dir,$xml_type,$arbre);
38               
39    $ret['nom'] = applatit_arbre($arbre['nom']);
40    $ret['version'] = trim(end($arbre['version']));
41    if (isset($arbre['auteur']))
42      $ret['auteur'] = applatit_arbre($arbre['auteur']);
43    if (isset($arbre['description']))
44      $ret['description'] = applatit_arbre($arbre['description']);
45    if (isset($arbre['lien']))
46      $ret['lien'] = join(' ',$arbre['lien']);
47    if (isset($arbre['etat']))
48      $ret['etat'] = trim(end($arbre['etat']));
49    if (isset($arbre['options']))
50      $ret['options'] = $arbre['options'];
51    if (isset($arbre['fonctions']))
52      $ret['fonctions'] = $arbre['fonctions'];
53    $ret['prefix'] = $arbre['prefix'];
54    if (isset($arbre['pipeline']))
55      $ret['pipeline'] = $arbre['pipeline'];
56    if (isset($arbre['erreur']))
57      $ret['erreur'] = $arbre['erreur'];
58    if (isset($arbre['squelettes'])) {
59      $ret['squelettes'] = $arbre['squelettes'];
60    }
61    if (isset($arbre['type'])) {
62      $ret['type'] =  trim(applatit_arbre($arbre['type']));
63    }
64
65    // Compute extra values
66    $etat = 'dev';
67    if (isset($ret['etat']))
68      $etat = $ret['etat'];
69    switch ($etat) {
70    case 'experimental':
71      $puce = 'puce-rouge.gif';
72      $titre_etat = _T('plugin_etat_experimental');
73      break;
74    case 'test':
75      $puce = 'puce-orange.gif';
76      $titre_etat = _T('plugin_etat_test');
77      break;
78    case 'stable':
79      $puce = 'puce-verte.gif';
80      $titre_etat = _T('plugin_etat_stable');
81      break;
82    default:
83      $puce = 'puce-poubelle.gif';
84      $titre_etat = _T('plugin_etat_developpement');
85      break;
86    }
87    $ret['extra_puce']       = $puce;
88    $ret['extra_img_puce']   = "<img src='"._DIR_IMG_PACK."$puce' width='9' height='9' style='border:0;' alt=\"$titre_etat\" title=\"$titre_etat\" />&nbsp;";
89    $ret['extra_titre_etat'] = $titre_etat;
90  }
91  return $ret;
92}
93
94function sktheme_xml_verifie_conformite($xml_dir,$xml_type="plugin",&$arbre){
95        $silence = false;
96        if (isset($arbre[$xml_type])&&is_array($arbre[$xml_type]))
97                $arbre = end($arbre[$xml_type]); // derniere def xml_type
98        else{
99                $arbre = array('erreur' => array(_T('erreur_plugin_tag_plugin_absent')." : $xml_dir/plugin.xml"));
100                $silence = true;
101        }
102  // verification de la conformite du plugin avec quelques
103  // precautions elementaires
104  if (!isset($arbre['nom'])){
105        if (!$silence)
106                        $arbre['erreur'][] = _T('erreur_plugin_nom_manquant');
107                $arbre['nom'] = array("");
108        }
109  if (!isset($arbre['version'])){
110        if (!$silence)
111                        $arbre['erreur'][] = _T('erreur_plugin_version_manquant');
112                $arbre['version'] = array("");
113        }
114  if (!isset($arbre['prefix'])){
115        if (!$silence)
116                        $arbre['erreur'][] = _T('erreur_plugin_prefix_manquant');
117                $arbre['prefix'] = array("");
118        }
119        else{
120                $prefix = "";
121                $prefix = trim(end($arbre['prefix']));
122                if (isset($arbre['etat'])){
123                        $etat = trim(end($arbre['etat']));
124                        if (!preg_match(',^(dev|experimental|test|stable)$,',$etat))
125                                $arbre['erreur'][] = _T('erreur_plugin_etat_inconnu')." : $etat";
126                }
127                if (isset($arbre['options'])){
128                        foreach($arbre['options'] as $optfile){
129                                $optfile = trim($optfile);
130                                if (!@is_readable(_DIR_PLUGINS."$xml_dir/$optfile"))
131                                if (!$silence)
132                                                $arbre['erreur'][] = _T('erreur_plugin_fichier_absent')." : $optfile";
133                        }
134                }
135                if (isset($arbre['fonctions'])){
136                        foreach($arbre['fonctions'] as $optfile){
137                                $optfile = trim($optfile);
138                                if (!@is_readable(_DIR_PLUGINS."$xml_dir/$optfile"))
139                                if (!$silence)
140                                                $arbre['erreur'][] = _T('erreur_plugin_fichier_absent')." : $optfile";
141                        }
142                }
143                $fonctions = array();
144                if (isset($arbre['fonctions']))
145                        $fonctions = $arbres['fonctions'];
146          $liste_methodes_reservees = array('__construct','__destruct','plugin','install','uninstall',strtolower($prefix));
147                if (is_array($arbre['pipeline'])){
148                        foreach($arbre['pipeline'] as $pipe){
149                                $nom = trim(end($pipe['nom']));
150                                if (isset($pipe['action']))
151                                        $action = trim(end($pipe['action']));
152                                else
153                                        $action = $nom;
154                                // verif que la methode a un nom autorise
155                                if (in_array(strtolower($action),$liste_methodes_reservees)){
156                                        if (!$silence)
157                                                $arbre['erreur'][] = _T("erreur_plugin_nom_fonction_interdit")." : $action";
158                                }
159                                else{
160                                        // verif que le fichier de def est bien present
161                                        if (isset($pipe['inclure'])){
162                                                $inclure = _DIR_PLUGINS."$xml_dir/".end($pipe['inclure']);
163                                                if (!@is_readable($inclure))
164                                                if (!$silence)
165                                                                $arbre['erreur'][] = _T('erreur_plugin_fichier_absent')." : $inclure";
166                                        }
167                                }
168                        }
169                }
170        }
171}
172
173?>
Note: See TracBrowser for help on using the repository browser.