Skip to content
Extraits de code Groupes Projets
Valider 38417f7f rédigé par Fil's avatar Fil
Parcourir les fichiers

corrections plugins (Cedric)

parent 35dcc4a3
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -20,6 +20,7 @@ include_ecrire ("inc_layer"); ...@@ -20,6 +20,7 @@ include_ecrire ("inc_layer");
function ligne_plug($plug_file,&$plug_actifs,$last_actif = false,$surligne = false){ function ligne_plug($plug_file,&$plug_actifs,$last_actif = false,$surligne = false){
static $id_input=0; static $id_input=0;
global $couleur_claire; global $couleur_claire;
$erreur = false;
$vals = array(); $vals = array();
$info = plugin_get_infos($plug_file); $info = plugin_get_infos($plug_file);
$plugok='N'; $plugok='N';
...@@ -31,6 +32,13 @@ function ligne_plug($plug_file,&$plug_actifs,$last_actif = false,$surligne = fal ...@@ -31,6 +32,13 @@ function ligne_plug($plug_file,&$plug_actifs,$last_actif = false,$surligne = fal
if ($surligne) if ($surligne)
$s .= " style='background:$couleur_claire'"; $s .= " style='background:$couleur_claire'";
$s .= ">"; $s .= ">";
if (isset($info['erreur'])){
$s .= "<div style='background:$couleur_claire'>";
$erreur = true;
foreach($info['erreur'] as $err)
$s .= "/!\ $err <br/>";
$s .= "</div>";
}
$s .= bouton_block_invisible("$plug_file"); $s .= bouton_block_invisible("$plug_file");
$s .= ($plugok=='O'?"<strong>":"").$info['nom'].($plugok=='O'?"</strong>":""); $s .= ($plugok=='O'?"<strong>":"").$info['nom'].($plugok=='O'?"</strong>":"");
$s .= "</div>"; $s .= "</div>";
...@@ -64,9 +72,11 @@ function ligne_plug($plug_file,&$plug_actifs,$last_actif = false,$surligne = fal ...@@ -64,9 +72,11 @@ function ligne_plug($plug_file,&$plug_actifs,$last_actif = false,$surligne = fal
$vals[] = $s; $vals[] = $s;
$s = ""; $s = "";
$s .= "<input type='checkbox' name='statusplug_$plug_file' value='O' id='label_$id_input'"; if (!$erreur){
$s .= ('O' == $plugok)?" checked='checked'":""; $s .= "<input type='checkbox' name='statusplug_$plug_file' value='O' id='label_$id_input'";
$s .= " /> <label for='label_$id_input'><strong>"._T('plugin:activer_plugin')."</strong></label>"; $s .= ('O' == $plugok)?" checked='checked'":"";
$s .= " /> <label for='label_$id_input'><strong>"._T('plugin:activer_plugin')."</strong></label>";
}
$id_input++; $id_input++;
$vals[] = $s; $vals[] = $s;
......
...@@ -53,15 +53,22 @@ function liste_plugin_actifs(){ ...@@ -53,15 +53,22 @@ function liste_plugin_actifs(){
} }
function ecrire_plugin_actifs($plugin){ function ecrire_plugin_actifs($plugin){
ecrire_meta('plugin',implode(",", $plugin)); // mieux avec un serialize ?
$plugin_valides = array();
if (is_array($plugin)){ if (is_array($plugin)){
// charger les infos de plugin en memoire // charger les infos de plugin en memoire
$infos = array(); $infos = array();
foreach ($plugin as $plug) { foreach ($plugin as $plug) {
$infos[$plug] = plugin_get_infos($plug); $infos[$plug] = plugin_get_infos($plug);
if (!isset($infos[$plug]['erreur']))
$plugin_valides[] = $plug;
else
unset($infos[$plug]);
} }
} }
ecrire_meta('plugin',implode(",", $plugin_valides)); // mieux avec un serialize ?
$start_file = "<"."?php\nif (!defined('_ECRIRE_INC_VERSION')) return;\n"; $start_file = "<"."?php\nif (!defined('_ECRIRE_INC_VERSION')) return;\n";
$end_file = "\n?".">"; $end_file = "\n?".">";
...@@ -268,23 +275,105 @@ function plugin_get_infos($plug){ ...@@ -268,23 +275,105 @@ function plugin_get_infos($plug){
if (@file_exists(_DIR_PLUGINS."$plug/plugin.xml")) { if (@file_exists(_DIR_PLUGINS."$plug/plugin.xml")) {
$texte = file_get_contents(_DIR_PLUGINS."$plug/plugin.xml"); $texte = file_get_contents(_DIR_PLUGINS."$plug/plugin.xml");
$arbre = parse_plugin_xml($texte); $arbre = parse_plugin_xml($texte);
$arbre = array_pop($arbre['plugin']); // derniere def plugin if (!isset($arbre['plugin'])&&is_array($arbre['plugin']))
$arbre = array('erreur' => array(_T('plugin:erreur_plugin_fichier_def_incorrect')." : $plug/plugin.xml"));
$ret['nom'] = join(' ',$arbre['nom']); }
$ret['version'] = array_pop($arbre['version']); else {
if (isset($arbre['auteur'])) // pour arriver ici on l'a vraiment cherche...
$ret['auteur'] = join(',',$arbre['auteur']); $arbre = array('erreur' => array(_T('plugin:erreur_plugin_fichier_def_absent')." : $plug/plugin.xml"));
if (isset($arbre['description'])) }
$ret['description'] = chaines_lang(join(' ',$arbre['description']));
if (isset($arbre['lien'])) plugin_verifie_conformite($plug,$arbre);
$ret['lien'] = join(' ',$arbre['lien']);
$ret['nom'] = join(' ',$arbre['nom']);
$ret['version'] = array_pop($arbre['version']);
if (isset($arbre['auteur']))
$ret['auteur'] = join(',',$arbre['auteur']);
if (isset($arbre['description']))
$ret['description'] = chaines_lang(join(' ',$arbre['description']));
if (isset($arbre['lien']))
$ret['lien'] = join(' ',$arbre['lien']);
if (isset($arbre['options']))
$ret['options'] = $arbre['options']; $ret['options'] = $arbre['options'];
if (isset($arbre['fonctions']))
$ret['fonctions'] = $arbre['fonctions']; $ret['fonctions'] = $arbre['fonctions'];
$ret['class'] = $arbre['class']; $ret['class'] = $arbre['class'];
if (isset($arbre['pipeline']))
$ret['pipeline'] = $arbre['pipeline']; $ret['pipeline'] = $arbre['pipeline'];
} if (isset($arbre['erreur']))
$ret['erreur'] = $arbre['erreur'];
} }
return $ret; return $ret;
} }
function plugin_verifie_conformite($plug,&$arbre){
$silence = false;
if (isset($arbre['plugin'])&&is_array($arbre['plugin']))
$arbre = end($arbre['plugin']); // derniere def plugin
else{
$arbre = array('erreur' => array(_T('plugin:erreur_plugin_tag_plugin_absent')." : $plug/plugin.xml"));
$silence = true;
}
// verification de la conformite du plugin avec quelques
// precautions elementaires
if (!isset($arbre['nom'])){
if (!$silence)
$arbre['erreur'][] = _T('plugin:erreur_plugin_nom_manquant');
$arbre['nom'] = array("");
}
if (!isset($arbre['version'])){
if (!$silence)
$arbre['erreur'][] = _T('plugin:erreur_plugin_version_manquant');
$arbre['version'] = array("");
}
if (!isset($arbre['class'])){
if (!$silence)
$arbre['erreur'][] = _T('plugin:erreur_plugin_class_manquant');
$arbre['class'] = array("");
}
else{
$class = trim(end($arbre['class']));
if (isset($arbre['options'])){
foreach($arbre['options'] as $optfile){
$optfile = trim($optfile);
if (!@is_readable(_DIR_PLUGINS."$plug/$optfile"))
if (!$silence)
$arbre['erreur'][] = _T('plugin:erreur_plugin_fichier_absent')." : $optfile";
}
}
if (isset($arbre['fonctions'])){
foreach($arbre['fonctions'] as $optfile){
$optfile = trim($optfile);
if (!@is_readable(_DIR_PLUGINS."$plug/$optfile"))
if (!$silence)
$arbre['erreur'][] = _T('plugin:erreur_plugin_fichier_absent')." : $optfile";
}
}
$fonctions = array();
if (isset($arbre['fonctions']))
$fonctions = $arbres['fonctions'];
$liste_methodes_reservees = array('__construct','__destruct','plugin','install',strtolower($class));
foreach($arbre['pipeline'] as $pipe){
$nom = trim(end($pipe['nom']));
if (isset($pipe['action']))
$action = trim(end($pipe['action']));
else
$action = $nom;
// verif que la methode a un nom autorise
if (in_array(strtolower($action),$liste_methodes_reservees)){
if (!$silence)
$arbre['erreur'][] = _T("plugin:erreur_plugin_nom_fonction_interdit")." : $action";
}
else{
// verif que le fichier de def est bien present
if (isset($pipe['inclure'])){
$inclure = _DIR_PLUGINS."$plug/".end($pipe['inclure']);
if (!@is_readable($inclure))
if (!$silence)
$arbre['erreur'][] = _T('plugin:erreur_plugin_fichier_absent')." : $inclure";
}
}
}
}
}
?> ?>
\ No newline at end of file
...@@ -7,8 +7,15 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( ...@@ -7,8 +7,15 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'auteur_plugin' => 'Auteur', 'auteur_plugin' => 'Auteur',
'lien_plugin' => 'Lien', 'erreur_plugin_fichier_def_absent' => "Fichier de definition absent",
'erreur_plugin_tag_plugin_absent' => "&lt;plugin&gt; manquant dans le fichier de definition",
'erreur_plugin_nom_manquant' => "Nom du plugin manquant",
'erreur_plugin_version_manquant' => "Version du plugin manquante",
'erreur_plugin_class_manquant' => "Classe du plugin manquant",
'erreur_plugin_fichier_absent' => "Fichier absent",
'erreur_plugin_nom_fonction_interdit' => 'Nom de fonction interdit',
'lien_plugin' => 'Lien',
'onglet_plugin' => 'Gestion des plugins', 'onglet_plugin' => 'Gestion des plugins',
'repertoire_plugin' => 'R&eacute;pertoire', 'repertoire_plugin' => 'R&eacute;pertoire',
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter