Browse Source

Fix #4192 : si un dossier squelettes/ est present dans le plugin ET qu'on a pas de balise <chemin> dans le paquet.xml, il est automatiquement detecte et ajoute au path du site public

Au passage, on reorganise : les chemins par defaut sont geres a la compilation et pas a la lecture du paquet.xml, comme pour la detection des fichiers options, fonctions etc.
decaler_niveau_titre
Cerdic 2 months ago
parent
commit
cee594c0a5
  1. 54
      ecrire/inc/plugin.php
  2. 4
      ecrire/plugins/infos_paquet.php

54
ecrire/inc/plugin.php

@ -915,7 +915,10 @@ function ecrire_plugin_actifs($plugin, $pipe_recherche = false, $operation = 'ra
* Couples (prefixe => infos complètes) des plugins qui seront actifs, dans l'ordre de leurs dépendances
**/
function plugins_precompile_chemin($plugin_valides, $ordre) {
$chemins = array();
$chemins = [
'public' => [],
'prive' => []
];
$contenu = "";
foreach ($ordre as $p => $info) {
// $ordre peur contenir des plugins en attente et non valides pour ce hit
@ -933,32 +936,41 @@ function plugins_precompile_chemin($plugin_valides, $ordre) {
and strpos($dir, ":") === false // exclure le cas des procure:
) {
$contenu .= "define('_DIR_PLUGIN_$prefix',$dir);\n";
foreach ($info['chemin'] as $chemin) {
if (!isset($chemin['version']) or plugin_version_compatible($chemin['version'],
$GLOBALS['spip_version_branche'], 'spip')
) {
$dir = $chemin['path'];
if (strlen($dir) and $dir[0] == "/") {
$dir = substr($dir, 1);
}
if (strlen($dir) and $dir == "./") {
$dir = '';
}
if (strlen($dir)) {
$dir = rtrim($dir, '/') . '/';
}
if (!isset($chemin['type']) or $chemin['type'] == 'public') {
$chemins['public'][] = "_DIR_PLUGIN_$prefix" . (strlen($dir) ? ".'$dir'" : "");
}
if (!isset($chemin['type']) or $chemin['type'] == 'prive') {
$chemins['prive'][] = "_DIR_PLUGIN_$prefix" . (strlen($dir) ? ".'$dir'" : "");
if (!$info['chemin']) {
$chemins['public'][] = "_DIR_PLUGIN_$prefix";
$chemins['prive'][] = "_DIR_PLUGIN_$prefix";
if (is_dir(constant($dir_type) . $plug . '/squelettes/')) {
$chemins['public'][] = "_DIR_PLUGIN_{$prefix}.'squelettes/'";
}
}
else{
foreach ($info['chemin'] as $chemin) {
if (!isset($chemin['version']) or plugin_version_compatible($chemin['version'],
$GLOBALS['spip_version_branche'], 'spip')
) {
$dir = $chemin['path'];
if (strlen($dir) and $dir[0] == "/") {
$dir = substr($dir, 1);
}
if (strlen($dir) and $dir == "./") {
$dir = '';
}
if (strlen($dir)) {
$dir = rtrim($dir, '/') . '/';
}
if (!isset($chemin['type']) or $chemin['type'] == 'public') {
$chemins['public'][] = "_DIR_PLUGIN_$prefix" . (strlen($dir) ? ".'$dir'" : "");
}
if (!isset($chemin['type']) or $chemin['type'] == 'prive') {
$chemins['prive'][] = "_DIR_PLUGIN_$prefix" . (strlen($dir) ? ".'$dir'" : "");
}
}
}
}
}
}
}
if (count($chemins)) {
if (count($chemins['public']) or count($chemins['prive'])) {
$contenu .= "if (_DIR_RESTREINT) _chemin([" . implode(',',
array_reverse($chemins['public'])) . "]);\n"
. "else _chemin([" . implode(',', array_reverse($chemins['prive'])) . "]);\n";

4
ecrire/plugins/infos_paquet.php

@ -51,8 +51,8 @@ function plugins_infos_paquet($desc, $plug = '', $dir_plugins = _DIR_PLUGINS) {
$tree['description'] = $tree['prefix'] . "_description";
paquet_readable_files($tree, "$dir_plugins$plug/");
if (!$tree['chemin']) {
$tree['chemin'] = array(array('path' => ''));
} // initialiser par defaut
$tree['chemin'] = array();
}
// On verifie qu'il existe des balises spip qu'il faudrait rajouter dans
// la structure d'infos du paquet en fonction de la version spip courante

Loading…
Cancel
Save