diff --git a/ecrire/inc/plugin.php b/ecrire/inc/plugin.php index b8995a9afb7354d53e586a102a86271ac3d72abc..beca8d5814344752b4a47eeec177357d347f1dd9 100644 --- a/ecrire/inc/plugin.php +++ b/ecrire/inc/plugin.php @@ -284,40 +284,59 @@ function ordonne_plugin(){ function plugin_get_infos($plug){ include_spip('inc/xml'); static $infos=array(); + static $plugin_xml_cache=NULL; + if ($plugin_xml_cache==NULL){ + $plugin_xml_cache = array(); + if (is_file($f=_DIR_TMP."plugin_xml.cache")){ + lire_fichier($f,$contenu); + $plugin_xml_cache = unserialize($contenu); + } + } if (!isset($infos[$plug])){ - $ret = array(); - if ((@file_exists(_DIR_PLUGINS))&&(is_dir(_DIR_PLUGINS))){ - if (@file_exists(_DIR_PLUGINS."$plug/plugin.xml")) { - $arbre = spip_xml_load(_DIR_PLUGINS."$plug/plugin.xml"); - if (!$arbre OR !isset($arbre['plugin']) OR !is_array($arbre['plugin'])) - $arbre = array('erreur' => array(_T('erreur_plugin_fichier_def_incorrect')." : $plug/plugin.xml")); + $ret = array(); + if (isset($plugin_xml_cache[$plug])){ + $info = $plugin_xml_cache[$plug]; + if (isset($info['filemtime']) && (@filemtime(_DIR_PLUGINS."$plug/plugin.xml")<=$info['filemtime'])) + $ret = $info; + } + if (!count($ret)){ + if ((@file_exists(_DIR_PLUGINS))&&(is_dir(_DIR_PLUGINS))){ + if (@file_exists(_DIR_PLUGINS."$plug/plugin.xml")) { + $arbre = spip_xml_load($f = _DIR_PLUGINS."$plug/plugin.xml"); + if (!$arbre OR !isset($arbre['plugin']) OR !is_array($arbre['plugin'])) + $arbre = array('erreur' => array(_T('erreur_plugin_fichier_def_incorrect')." : $plug/plugin.xml")); + } + else { + // pour arriver ici on l'a vraiment cherche... + $arbre = array('erreur' => array(_T('erreur_plugin_fichier_def_absent')." : $plug/plugin.xml")); + } + plugin_verifie_conformite($plug,$arbre); + + $ret['nom'] = spip_xml_aplatit($arbre['nom']); + $ret['version'] = trim(end($arbre['version'])); + if (isset($arbre['auteur'])) + $ret['auteur'] = spip_xml_aplatit($arbre['auteur']); + if (isset($arbre['description'])) + $ret['description'] = spip_xml_aplatit($arbre['description']); + if (isset($arbre['lien'])) + $ret['lien'] = join(' ',$arbre['lien']); + if (isset($arbre['etat'])) + $ret['etat'] = trim(end($arbre['etat'])); + if (isset($arbre['options'])) + $ret['options'] = $arbre['options']; + if (isset($arbre['fonctions'])) + $ret['fonctions'] = $arbre['fonctions']; + $ret['prefix'] = trim(array_pop($arbre['prefix'])); + if (isset($arbre['pipeline'])) + $ret['pipeline'] = $arbre['pipeline']; + if (isset($arbre['erreur'])) + $ret['erreur'] = $arbre['erreur']; } - else { - // pour arriver ici on l'a vraiment cherche... - $arbre = array('erreur' => array(_T('erreur_plugin_fichier_def_absent')." : $plug/plugin.xml")); + if ($t=filemtime($f)){ + $ret['filemtime'] = $t; + $plugin_xml_cache[$plug]=$ret; + ecrire_fichier(_DIR_TMP."plugin_xml.cache",serialize($plugin_xml_cache)); } - - plugin_verifie_conformite($plug,$arbre); - - $ret['nom'] = spip_xml_aplatit($arbre['nom']); - $ret['version'] = trim(end($arbre['version'])); - if (isset($arbre['auteur'])) - $ret['auteur'] = spip_xml_aplatit($arbre['auteur']); - if (isset($arbre['description'])) - $ret['description'] = spip_xml_aplatit($arbre['description']); - if (isset($arbre['lien'])) - $ret['lien'] = join(' ',$arbre['lien']); - if (isset($arbre['etat'])) - $ret['etat'] = trim(end($arbre['etat'])); - if (isset($arbre['options'])) - $ret['options'] = $arbre['options']; - if (isset($arbre['fonctions'])) - $ret['fonctions'] = $arbre['fonctions']; - $ret['prefix'] = trim(array_pop($arbre['prefix'])); - if (isset($arbre['pipeline'])) - $ret['pipeline'] = $arbre['pipeline']; - if (isset($arbre['erreur'])) - $ret['erreur'] = $arbre['erreur']; } $infos[$plug] = $ret; }