--- /dev/null
+<?php
+
+/***************************************************************************\
+ * SPIP, Systeme de publication pour l'internet *
+ * *
+ * Copyright (c) 2001-2012 *
+ * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
+ * *
+ * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
+ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
+\***************************************************************************/
+
+if (!defined('_ECRIRE_INC_VERSION')) return;
+
+/**
+ * lecture du fichier de configuration d'un plugin
+ *
+ * @staticvar string $filecache
+ * @staticvar array $cache
+ * @param string|array|bool $plug
+ * @param bool $reload
+ * @param string $dir
+ * @return array
+ */
+function plugins_get_infos_dist($plug=false, $reload=false, $dir = _DIR_PLUGINS, $clean_old=false){
+ static $cache='';
+ static $filecache = '';
+
+ if ($cache===''){
+ $filecache = _DIR_TMP."plugin_xml_cache.gz";
+ if (is_file($filecache)){
+ lire_fichier($filecache, $contenu);
+ $cache = unserialize($contenu);
+ }
+ if (!is_array($cache)) $cache = array();
+ }
+
+ if (defined('_VAR_MODE') AND _VAR_MODE=='recalcul')
+ $reload = true;
+
+ if ($plug===false) {
+ ecrire_fichier($filecache, serialize($cache));
+ return $cache;
+ }
+ elseif (is_string($plug)) {
+ $res = plugins_get_infos_un($plug, $reload, $dir, $cache);
+ }
+ elseif (is_array($plug)) {
+ $res = false;
+ if (!$reload) $reload = -1;
+ foreach($plug as $nom)
+ $res |= plugins_get_infos_un($nom, $reload, $dir, $cache);
+ // Nettoyer le cache des vieux plugins qui ne sont plus la
+ if ($clean_old and count($cache[$dir])) {
+ foreach (array_keys($cache[$dir]) as $p) {
+ if (!in_array($p,$plug)) {
+ unset($cache[$dir][$p]);
+ }
+ }
+ }
+ }
+ if ($res) {
+ ecrire_fichier($filecache, serialize($cache));
+ }
+ if (!isset($cache[$dir])) {
+ return array();
+ }
+ return is_string($plug) ? $cache[$dir][$plug] : $cache[$dir];
+}
+
+
+function plugins_get_infos_un($plug, $reload, $dir, &$cache)
+{
+ if (!is_readable($file = "$dir$plug/" . ($desc = "paquet") . ".xml")) {
+ if (!is_readable($file = "$dir$plug/" . ($desc = "plugin") . ".xml"))
+ return false;
+ }
+
+ if (($time = intval(@filemtime($file))) < 0) return false;
+ $md5 = md5_file($file);
+
+ $pcache = isset($cache[$dir][$plug])
+ ? $cache[$dir][$plug] : array('filemtime' => 0, 'md5_file' => '');
+
+ // si le cache est valide
+ if ((intval($reload) <= 0)
+ AND ($time > 0)
+ AND ($time <= $pcache['filemtime'])
+ AND $md5==$pcache['md5_file'])
+ return false;
+
+ // si on arrive pas a lire le fichier, se contenter du cache
+ if (!($texte = spip_file_get_contents($file))) {
+ return false;
+ }
+
+ $f = charger_fonction('infos_' . $desc, 'plugins');
+ $ret = $f($texte, $plug, $dir);
+ $ret['filemtime'] = $time;
+ $ret['md5_file'] = $md5;
+ $diff = ($ret != $pcache);
+
+ if ($diff) {
+ $cache[$dir][$plug] = $ret;
+# echo count($cache[$dir]), $dir,$plug, " $reloadc<br>";
+ }
+ return $diff;
+}
+?>