fix: impossibilité d'écrire dans /lib/

+ avertissements sur les erreurs de fichiers distants
+ lien vers le code source Git
+ meilleure descriptions "d'outils concernés"
+ aération du code
- warnings
master
patrice4 2 weeks ago
parent e38a7dcf3a
commit e073727340

@ -16,6 +16,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
@define('_URL_ZONE_EXTRACT', 'https://zone.spip.net/trac/spip-zone/export/');
@define('_CS_RSS_SOURCE', _URL_CS_GIT_EXT . 'couteau_suisse/commits/branch/master');
@define('_CS_GIT_COMMITS', _URL_CS_GIT . 'api/v1/repos/spip-contrib-extensions/couteau_suisse/commits');
@define('_URL_GIT_CS', _URL_CS_GIT . 'spip-contrib-extensions/couteau_suisse');
// Doc de contrib.spip.net
@define('_URL_CONTRIB', 'https://contrib.spip.net/?article');
// Dernieres revisions du CS

@ -861,20 +861,29 @@ if(defined('_LOG_CS')) cs_log(" -- $f() : OK !");
if(!defined('_SPIP19300')) ecrire_metas(); # Pour SPIP 1.92
}
function cs_outils_concernes($key, $off=false){
global $outils, $metas_outils; $s='';
foreach($outils as $o) if(autoriser('configurer', 'outil', 0, NULL, $o) && isset($o[$key]))
$s .= ($s?' - ':'') . '[.->' . $o['id'] . ']'
. (isset($metas_outils[$o['id']]['actif']) && $metas_outils[$o['id']]['actif']
? ' ('.couteauprive_T('outil_actif_court').')' : '');
if(!$s) return '';
$s = couteauprive_T('outils_'.($off?'desactives':'concernes')).$s;
return "<q4>$s</q4>";
// $off = 0 (outils concernes), 1 (outils empeches), -1 (outils en erreur)
function cs_outils_concernes($key, $off = 0, $balise = 'q4', $langue = array(-1 => 'erreurs', 0 => 'concernes', 1 => 'empeches')) {
global $outils, $metas_outils;
list($a, $b) = strpos($key, '/') === false ? array($key, '') : explode('/', $key, 2);
$prefixe = couteauprive_T('outils_' . $langue[$off] . ($b ? "_$b" : ''));
//return "<br>$prefixe $key / $a / $b";
$res = array();
foreach($outils as $o) {
$test = $b ? isset($o[$a]) && isset($o[$a][$b]) : isset($o[$a]);
if(autoriser('configurer', 'outil', 0, NULL, $o) && $test)
$res[] = '[.->' . $o['id'] . ']'
. (isset($metas_outils[$o['id']]['actif']) && $metas_outils[$o['id']]['actif']
? ' (' . couteauprive_T('outil_actif_court') . ')' : '');
}
if(!$res) return '';
$res = $prefixe . implode(' - ', $res);
return $balise ? "<$balise>$res</$balise>" : $res;
}
// Recupere le contenu d'une URL, et au besoin, encode son contenu dans le charset local
// recuperer_url() est introduit par SPIP 3.1 - recuperer_page() disparait sous SPIP 4.0
function cs_recuperer_page($url, $trans = false, $get_headers = false, $taille_max = null) {
if(!$url) return '';
include_spip('inc/distant');
if(function_exists('recuperer_page'))
return recuperer_page($url, $trans, $get_headers, $taille_max);
@ -887,8 +896,8 @@ function cs_recuperer_page($url, $trans = false, $get_headers = false, $taille_m
);
if(!is_null($taille_max)) $options['taille_max'] = $taille_max;
$res = recuperer_url($url, $options);
if(!$res) return false;
if($res['status'] !== 200) return false;
if(!$res) return '';
if($res['status'] !== 200) return '';
if($get_headers) return $res['headers'] . "\n" . $res['page'];
return $res['page'] ? $res['page'] : '';
}

@ -74,6 +74,8 @@ function couteau_suisse_vider_tables($nom_meta_base_version) {
// installation des tables du plugin et mises a jour
function couteau_suisse_upgrade($nom_meta_base_version, $version_cible) {
if (!isset($GLOBALS['cs_base_update']))
$GLOBALS['cs_base_update'] = '';
if (defined('_LOG_CS'))
cs_log("cout_upgrade : $nom_meta_base_version => $version_cible");
$current_version = '0.0';

@ -50,11 +50,12 @@ function cs_liste_docs_outils($coupe = 999, $join = "</li><li>") {
global $metas_outils;
$contribs = array();
foreach($metas_outils as $o=>$v) if(isset($v['contrib']) && isset($v['actif']) && $v['actif'])
$contribs[] = '[' . couper(couteauprive_T($o.':nom'), $coupe) . '->'
. (is_numeric($v['contrib']) ? _URL_CONTRIB.$v['contrib'] : $v['contrib']) . ']';
$contribs[] = '[' . couper(couteauprive_T($o . ':nom'), $coupe) . '->'
. (is_numeric($v['contrib']) ? _URL_CONTRIB . $v['contrib'] : $v['contrib']) . ']';
sort($contribs);
return '[{{' . couteauprive_T('docgen') . '}}->' . _URL_CONTRIB . '2166]'
. $join . '[{{' . couteauprive_T('docwiki') . '}}->' . _URL_CONTRIB . '2793]'
. $join . '[{{' . couteauprive_T('code_source') . '}}->' . _URL_GIT_CS . ']'
. (count($contribs) ? $join . implode($join, $contribs) : '');
}
@ -272,21 +273,27 @@ if(defined('_LOG_CS')) cs_log(" initialisation generale : OK !");
if(strlen($t = cs_aide_raccourcis()))
echo '<div class="titrem cs_intros">', couper($t, 50),
'</div><div id="cs_infos_2" class="sous_liste cs_intros_inner">', $t, '</div>';
if($t = cs_outils_concernes("erreurs/fichiers_distants", -1, ''))
echo '<div class="titrem cs_erreurs">', description_outil_liens($t), '</div>';
echo "\n<table border='0' cellspacing='0' cellpadding='5' style='width:100%;'><tr><td class='sansserif'>";
$_GET['source'] = $exec;
echo '<div class="conteneur">', $liste_outils,
'</div><br class="conteneur" /><div class="cs_patience"><br />' . http_img_pack('searching.gif','*','') . ' ...</div>';
flush();
$descrip = (function_exists($f = 'cs_description_' . $cmd) || ($cmd == 'descrip' && function_exists($f = 'cs_description_' . $outil)))
? $f() : description_outil2($afficher_outil);
$modif = (isset($_GET['modif']) && $_GET['modif'] == 'oui')
? '<br/>' . couteauprive_T('vars_modifiees') . '.' : '';
echo '<div class="conteneur"><div id="cs_infos" class="cs_infos">',
function_exists($f = 'cs_description_' . $cmd) || ($cmd == 'descrip' && function_exists($f = 'cs_description_' . $outil))
? $f() : description_outil2($afficher_outil),
$descrip,
'</div><script type="text/javascript"><!--
var cs_descripted = "', $afficher_outil, '";
document.write("<style type=\'text/css\'>#csjs{display: none;}<\/style>");
//--></script><div id="csjs" class="cs_red"><br/>', couteauprive_T('erreur:js'), '</div>
<noscript><style type="text/css">#csjs{display: none;}</style><div class="cs_red"><br/>', couteauprive_T('erreur:nojs'),
$_GET['modif'] == 'oui' ? '<br/>' . couteauprive_T('vars_modifiees') . '.' : '',
<noscript><style type="text/css">#csjs{display: none;}</style><div class="cs_red"><br/>',
couteauprive_T('erreur:nojs'),
$modif,
'</div></noscript>',
'</div></td></tr></table>',
'<style type="text/css">.cs_patience{display:none;}</style>',

@ -41,6 +41,7 @@ div.cs_infos div.cs_menu_outil { text-align:right; font-size:85%; margin-bottom:
div.cs_infos div.cs_details_outil { font-size:85%; margin-top:0.8em; border-top:solid 1px; }
div.cs_infos fieldset ul { margin:0; padding:0; }
div.cs_infos fieldset ul li { list-style:none; display:inline; }
div.cs_erreurs { margin-top:0.6em; padding:2px; font-weight:bold; background-color:#ffff96; }
div.cs_action_rapide { border:1px dotted; margin-bottom:1em; padding-bottom:0.4em; background-color:#F0EEEE; }
div.cs_action_rapide select.ar_select { width:auto; display:inline; }

@ -236,6 +236,7 @@ Notez bien : en modifiant ce deuxième style, vous perdez alors les styles stand
'code_js' => 'JavaScript',
'code_options' => 'Options',
'code_spip_options' => 'Options SPIP',
'code_source' => 'Code Source',
'compacte_css' => 'Compacter les CSS',
'compacte_js' => 'Compacter le Javacript',
'compacte_prive' => 'Ne rien compacter en partie privée',
@ -616,6 +617,8 @@ Voici quelques exemples de syntaxe :
<BOUCLE(XXX YYY ZZZ){left_join debug}...
</cadre></quote>',
'left_join:nom' => 'Left join',
'lib_inaccessible' => 'Il n\'a pas été possible d\'écrire dans le dossier "/lib/@outil@/" !
_ Les fichiers nécessaires sont temporairement placés dans le dossier "/tmp/couteau-suisse/@outil@/".',
'liens_en_clair:description' => 'Met à votre disposition le filtre : "{{liens_en_clair}}".\n\nVotre texte contient probablement des liens hypertexte qui ne sont pas visibles lors d\'une impression. Ce filtre ajoute entre crochets la destination de chaque lien cliquable (liens externes ou mails). Attention : en mode impression (paramètre \'cs=print\' ou \'page=print\' dans l\'url de la page), cette fonctionnalité est appliquée automatiquement.',
'liens_en_clair:nom' => 'Liens en clair',
'liens_orphelins:description' => 'Cet outil a deux fonctions :
@ -702,7 +705,9 @@ Objets publiés mais masqués du public :
'outils_caches' => 'Outils cachés :',
'outils_cliquez' => 'Cliquez sur le nom des outils ci-dessus pour afficher ici leur description.',
'outils_concernes' => 'Sont concernés : ',
'outils_empeches' => 'Sont empêchés : ',
'outils_desactives' => 'Sont désactivés : ',
'outils_erreurs_fichiers_distants' => 'Erreur sur les fichiers distants : ',
'outils_inactifs' => 'Outil inactifs :',
'outils_liste' => 'Liste des outils du Couteau Suisse',
'outils_non_parametrables' => 'Non paramétrables :',

@ -99,7 +99,7 @@ function maj_lire_cookie(i,e){
function info_maj_spip2(){
if (!autoriser('webmestre')) return "";
$tmp = "<fieldset><legend $style>"._T('couteauprive:help2', array('version'=>'SPIP '.$GLOBALS['spip_version_branche'])).'</legend>';
$tmp = "<fieldset><legend>" . _T('couteauprive:help2', array('version' => 'SPIP ' . $GLOBALS['spip_version_branche'])).'</legend>';
if(defined('_CS_PAS_DE_DISTANT'))
return $tmp . ' <b>'.cs_lien("https://www.spip.net/$GLOBALS[spip_lang]_download", couteauprive_T('version_distante_off')) . '</b></fieldset>';
include_spip('inc/presentation');
@ -130,13 +130,15 @@ function info_maj_spip_ext($ver_min, $rev_min, $min3){
$page = info_maj_cache($nom, 'spip', !file_exists($nom) ? '' : file_get_contents($nom));
preg_match_all(',/SPIP\D+((\d)\D+(\d)(\D+(\d+))?.*?[.]zip)",i', "$page", $m, PREG_SET_ORDER);
$v_min = "$ver_min.$rev_min.$min3";
for($ver=$ver_min;$ver<=4;$ver++) for($rev=($ver==$ver_min?$rev_min:0);$rev<=1;$rev++) {
$max = -1;
foreach ($m as $v) if ($v[2]=="$ver" && $v[3]=="$rev" && $v[5]>$max)
list($max, $fich) = array($v[5], $v[1]);
if($max>=0 && ($v="$ver.$rev.$max")!=$v_min)
$res[$v] = _T('couteau:maj_rev_ok',array('revision'=>$v, 'url'=>_MAJ_ZIP_SPIP.$fich, 'zip'=>''));
}
for($ver = $ver_min; $ver<=4; $ver++)
for($rev = ($ver == $ver_min ? $rev_min : 0); $rev <= 1; $rev++) {
$max = -1;
foreach ($m as $v)
if ($v[2] == "$ver" && $v[3] == "$rev" && isset($v[5]) && $v[5] > $max)
list($max, $fich) = array($v[5], $v[1]);
if($max>=0 && ($v="$ver.$rev.$max")!=$v_min)
$res[$v] = _T('couteau:maj_rev_ok',array('revision'=>$v, 'url'=>_MAJ_ZIP_SPIP.$fich, 'zip'=>''));
}
ksort($res);
return $res;
}
@ -221,7 +223,7 @@ function maj_auto_action_rapide($actif) {
$maj_lib = preg_replace(',\[([^[]+)->\],', '$1', $maj_lib);
if($actif || $extension) $cfg = defined('_SPIP30000')
? recuperer_fond('prive/squelettes/inclure/cfg',
array('script'=>'configurer_' . strtolower($infos['prefix']), 'nom' => ': '.$nom))
array('script' => 'configurer_' . strtolower($infos['prefix']), 'nom' => ': ' . $nom))
: ( (include_spip('plugins/afficher_plugin') && function_exists('plugin_bouton_config')) ? plugin_bouton_config($p, $infos, $dir) : '');
$nom = $cfg . $nom . '&nbsp;(v' . $infos['version'] . ')' . ($maj_lib ? "<br /> {{".$maj_lib.'}}' : '');
$nom = preg_replace(",[\n\r]+,", ' ', $nom); // Pour éviter les auto_br de SPIP...
@ -229,7 +231,7 @@ function maj_auto_action_rapide($actif) {
if(strlen($infos['commit'])) $rev .= (strlen($rev)?'<br/>' : '') . cs_date_court($infos['commit']);
if($infos['svn']) $rev .= '<br/><span class="caps">svn</span>';
if($infos['id_paquet']>0) $rev .= '<span class="caps">&nbsp;svp</span>';
elseif($infos['id_paquet']<0) $rev .= '<span class="caps">&nbsp;old</span>';
elseif($infos['id_paquet'] < 0) $rev .= '<span class="caps">&nbsp;old</span>';
$id_paquet = abs($infos['id_paquet']);
if(!strlen($rev)) $rev = '&nbsp;';
$zip_log = (strlen($infos['zip_log']) && $infos['zip_log'] != $infos['zip_trac'])
@ -238,7 +240,7 @@ function maj_auto_action_rapide($actif) {
$bouton = '&nbsp;';
// bouton si on est dans les temps, et si une mise a jour est dispo
// (sauf si un vieux plugin auto/ est detecte ou erreur d'archivage distant)
if(!$stop && ($infos['maj_dispo'] || $infos['id_paquet']<0 || $infos['rev_local']==999.99)) {
if(!$stop && ($infos['maj_dispo'] || $infos['id_paquet'] < 0 || $infos['rev_local'] == 999.99)) {
if($id_paquet) {
// format des donnees en sortie
$bouton = $id_paquet . ':' . $infos['id_depot'] . ':' . $p . ':' . $infos['zip_trac'];
@ -246,7 +248,7 @@ function maj_auto_action_rapide($actif) {
$bouton = /*"<input type='radio' value=\"$bouton\"$checked name='$arg_chargeur'/><br/>*/"<input type='checkbox' class='checkbox select_plugin' name='ids_paquet[]' value=\"$bouton\">";
} elseif($auto) $bouton = strlen($infos['zip_trac'])
? "<input type='radio' value='$infos[zip_trac]'$checked name='$arg_chargeur'/>"
: '<acronym class="interb" title="'._T('couteau:maj_zip_ko').'">&#63;</acronym>';
: '<acronym class="interb" title="' . _T('couteau:maj_zip_ko') . '">&#63;</acronym>';
}
if(strlen($zip_log)) {
if (!$stop)
@ -254,8 +256,9 @@ function maj_auto_action_rapide($actif) {
$bouton = '&nbsp;';
}
// relations exterieures
foreach($tiers as $k=>$v) if(isset($infos[$k]) && count($infos[$k]))
$nom .= "<br/>$v {" . implode('}, {', array_map('array_shift', $infos[$k])) . '}';
foreach($tiers as $k => $v)
if(isset($infos[$k]) && count($inf = $infos[$k]))
$nom .= "<br/>$v {" . implode('}, {', array_column($inf, 'nom')) . '}';
${$actif ? 'html_actifs' : ($extension ? 'html_extensions' : 'html_inactifs')}[] = "|$bouton|$nom|$rev|";
}
@ -351,8 +354,8 @@ function plugin_get_infos_maj($p, $timeout = false, $DIR_PLUGINS = _DIR_PLUGINS)
$url_origine = str_replace(array(_MAJ_SVN_FILE, _MAJ_SVN_DEBUT), _MAJ_LOG_DEBUT, $regs[1]);
// prise en compte du recent demenagement de la Zone...
$url_origine = preg_replace(',/_plugins_/_(?:stable|dev|test)_/,', '/_plugins_/', $url_origine);
} else
$url_origine = $infos['prefix'] == 'couteau_suisse' ? _MAJ_LOG_CS : '';
} else
$url_origine = (isset($infos['prefix']) && $infos['prefix'] == 'couteau_suisse') ? _MAJ_LOG_CS : '';
$infos['commit'] = ($fichier_lu && preg_match(',<commit>(.+)</commit>,', $svn, $regs)) ? $regs[1] : '';
$rev_local = (strlen($svn) && preg_match(',<revision>(.+)</revision>,', $svn, $regs))
? intval($regs[1])
@ -388,7 +391,7 @@ function plugin_get_infos_maj($p, $timeout = false, $DIR_PLUGINS = _DIR_PLUGINS)
// supposition du passage par SVP ?
maj_auto_svp_query($p, $infos);
// ce plugin passe en negatif s'il n'a pas ete installe par SVP
if(strpos($p2,$infos['prefix'].'/v') === false)
if(isset($infos['prefix']) && strpos($p2, $infos['prefix'] . '/v') === false)
$infos['id_paquet'] *= -1;
}
// supposition du nom d'archive sur files.spip.org

Loading…
Cancel
Save