/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2016 *
+ * Copyright (c) 2001-2017 *
* 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;
+/**
+ * Obtention des description des plugins locaux
+ *
+ * @package SPIP\Core\Plugins
+ **/
+
+if (!defined('_ECRIRE_INC_VERSION')) {
+ return;
+}
/**
- * lecture du fichier de configuration d'un plugin
+ * 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
+ * @param bool $clean_old
* @return array
*/
-function plugins_get_infos_dist($plug=false, $reload=false, $dir = _DIR_PLUGINS, $clean_old=false){
- static $cache='';
+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)){
+ 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 (!is_array($cache)) {
+ $cache = array();
+ }
}
- if (defined('_VAR_MODE') AND _VAR_MODE=='recalcul')
+ if (defined('_VAR_MODE') and _VAR_MODE == 'recalcul') {
$reload = true;
+ }
- if ($plug===false) {
+ if ($plug === false) {
ecrire_fichier($filecache, serialize($cache));
+
return $cache;
- }
- elseif (is_string($plug)) {
+ } elseif (is_string($plug)) {
$res = plugins_get_infos_un($plug, $reload, $dir, $cache);
- }
- elseif (is_array($plug)) {
+ } elseif (is_array($plug)) {
$res = false;
- if (!$reload) $reload = -1;
- foreach($plug as $nom)
- $res |= plugins_get_infos_un($nom, $reload, $dir, $cache);
+ 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])) {
+ if ($clean_old and isset($cache[$dir]) and count($cache[$dir])) {
foreach (array_keys($cache[$dir]) as $p) {
- if (!in_array($p,$plug)) {
+ if (!in_array($p, $plug)) {
unset($cache[$dir][$p]);
}
}
if (!isset($cache[$dir])) {
return array();
}
- return is_string($plug) ? $cache[$dir][$plug] : $cache[$dir];
+ if (is_string($plug)) {
+ return isset($cache[$dir][$plug]) ? $cache[$dir][$plug] : array();
+ } else {
+ return $cache[$dir];
+ }
}
-function plugins_get_infos_un($plug, $reload, $dir, &$cache)
-{
+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 (!is_readable($file = "$dir$plug/" . ($desc = "plugin") . ".xml")) {
+ return false;
+ }
}
- if (($time = intval(@filemtime($file))) < 0) 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' => '');
+ $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'])
+ 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))) {
$ret = $f($texte, $plug, $dir);
$ret['filemtime'] = $time;
$ret['md5_file'] = $md5;
+ // Si on lit le paquet.xml de SPIP, on rajoute un procure php afin que les plugins puissent
+ // utiliser un necessite php. SPIP procure donc la version php courante du serveur.
+ // chaque librairie php est aussi procurée, par exemple 'php:curl'.
+ if (isset($ret['prefix']) and $ret['prefix'] == 'spip') {
+ $ret['procure']['php'] = array('nom' => 'php', 'version' => phpversion());
+ foreach (get_loaded_extensions() as $ext) {
+ $ret['procure']['php:' . $ext] = array('nom' => 'php:' . $ext, 'version' => phpversion($ext));
+ }
+ }
$diff = ($ret != $pcache);
if ($diff) {
$cache[$dir][$plug] = $ret;
# echo count($cache[$dir]), $dir,$plug, " $reloadc<br>";
}
+
return $diff;
}
-?>