From 1d89e33d064c96fece14742d56eb7ffd992ca13a Mon Sep 17 00:00:00 2001 From: Cerdic <cedric@yterium.com> Date: Fri, 5 Mar 2010 14:12:22 +0000 Subject: [PATCH] Report de [15374] [15375] [15378] [15379] [15380] [15381] [15385] [15386] --- ecrire/action/editer_article.php | 2 +- ecrire/action/purger.php | 1 + ecrire/balise/logo_.php | 2 +- ecrire/inc/filtres.php | 33 +++++++++++++++++++-------- ecrire/inc/instituer_auteur.php | 10 ++++---- ecrire/inc/plugin.php | 10 ++++---- ecrire/inc/securiser_action.php | 39 ++++++++++++++++++++------------ ecrire/inc/utils.php | 7 +++++- ecrire/inc_version.php | 4 +++- prive/javascript/ajaxCallback.js | 2 +- prive/javascript/layer.js | 32 ++++++++++++-------------- 11 files changed, 86 insertions(+), 56 deletions(-) diff --git a/ecrire/action/editer_article.php b/ecrire/action/editer_article.php index c18ea4b200..22b7ef943a 100644 --- a/ecrire/action/editer_article.php +++ b/ecrire/action/editer_article.php @@ -142,7 +142,7 @@ function insert_article($id_rubrique) { $id_article = sql_insertq("spip_articles", $champs); // controler si le serveur n'a pas renvoye une erreur - if ($id_article > 0) + if ($id_article > 0 AND $GLOBALS['visiteur_session']['id_auteur']) sql_insertq('spip_auteurs_articles', array('id_auteur' => $GLOBALS['visiteur_session']['id_auteur'], 'id_article' => $id_article));; return $id_article; diff --git a/ecrire/action/purger.php b/ecrire/action/purger.php index 6ff2b95ff1..784b899855 100644 --- a/ecrire/action/purger.php +++ b/ecrire/action/purger.php @@ -28,6 +28,7 @@ function action_purger_dist() supprime_invalideurs(); @spip_unlink(_CACHE_RUBRIQUES); @spip_unlink(_CACHE_PIPELINES); + @spip_unlink(_CACHE_PLUGINS_PATH); @spip_unlink(_CACHE_PLUGINS_OPT); @spip_unlink(_CACHE_PLUGINS_FCT); @spip_unlink(_CACHE_PLUGINS_VERIF); diff --git a/ecrire/balise/logo_.php b/ecrire/balise/logo_.php index 1dc9c60da9..24e3ecfe8d 100644 --- a/ecrire/balise/logo_.php +++ b/ecrire/balise/logo_.php @@ -106,7 +106,7 @@ function logo_survol($id_objet, $_id_objet, $type, $align, $fichier, $lien, $p, $code = "\n((!is_array(\$l = $code)) ? '':\n (" . '"<img class=\"spip_logos\" alt=\"\"' . ($align ? " align=\\\"$align\\\"" : '') - . ' src=\"$l[0]\"" . $l[3] . ($l[1] ? " onmouseover=\"this.src=\'$l[1]\'\" onmouseout=\"this.src=\'$l[0]\'\"" : "") . \' />\'))'; + . ' src=\"$l[0]\"" . $l[2] . ($l[1] ? " onmouseover=\"this.src=\'$l[1]\'\" onmouseout=\"this.src=\'$l[0]\'\"" : "") . \' />\'))'; if (!$lien) return $code; diff --git a/ecrire/inc/filtres.php b/ecrire/inc/filtres.php index 8fcd7eca16..287e9200dc 100644 --- a/ecrire/inc/filtres.php +++ b/ecrire/inc/filtres.php @@ -2202,10 +2202,20 @@ function encoder_contexte_ajax($c,$form='', $emboite=NULL) { include_spip("inc/securiser_action"); $cle = calculer_cle_action($form.(is_array($c)?serialize($c):$c)); $c = serialize(array($c,$cle)); - if (function_exists('gzdeflate') && function_exists('gzinflate')) - $c = gzdeflate($c); - $c = _xor($c); - $c = base64_encode($c); + + if ((defined('_CACHE_CONTEXTES_AJAX') AND _CACHE_CONTEXTES_AJAX) + AND $dir = sous_repertoire(_DIR_CACHE, 'contextes')) { + // stocker les contextes sur disque et ne passer qu'un hash dans l'url + $md5 = md5($c); + ecrire_fichier("$dir/c$md5",$c); + $c = $md5; + } else { + if (function_exists('gzdeflate') && function_exists('gzinflate')) + $c = gzdeflate($c); + $c = _xor($c); + $c = base64_encode($c); + } + if ($emboite === NULL) return $c; return !trim($emboite) ? '' : "<div class='ajaxbloc env-$c'>\n$emboite</div><!-- ajaxbloc -->\n"; @@ -2215,11 +2225,16 @@ function encoder_contexte_ajax($c,$form='', $emboite=NULL) { // http://doc.spip.org/@decoder_contexte_ajax function decoder_contexte_ajax($c,$form='') { include_spip("inc/securiser_action"); - - $c = @base64_decode($c); - $c = _xor($c); - if (function_exists('gzdeflate') && function_exists('gzinflate')) - $c = @gzinflate($c); + if (( (defined('_CACHE_CONTEXTES_AJAX') AND _CACHE_CONTEXTES_AJAX) OR strlen($c)==32) + AND $dir = sous_repertoire(_DIR_CACHE, 'contextes') + AND lire_fichier("$dir/c$c",$contexte)) { + $c = $contexte; + } else { + $c = @base64_decode($c); + $c = _xor($c); + if (function_exists('gzdeflate') && function_exists('gzinflate')) + $c = @gzinflate($c); + } list($env, $cle) = @unserialize($c); if ($cle == calculer_cle_action($form.(is_array($env)?serialize($env):$env))) diff --git a/ecrire/inc/instituer_auteur.php b/ecrire/inc/instituer_auteur.php index 2dc27fdc75..07226b9e9e 100644 --- a/ecrire/inc/instituer_auteur.php +++ b/ecrire/inc/instituer_auteur.php @@ -103,9 +103,11 @@ function traduire_statut_auteur($statut){ return $recom[$statut]; // retrouver directement par le statut sinon - if ($t = array_search($statut, $GLOBALS['liste_des_statuts']) - AND isset($recom[$t])) - return $recom[$t]; + if ($t = array_search($statut, $GLOBALS['liste_des_statuts'])){ + if (isset($recom[$t])) + return $recom[$t]; + return $t; + } return ''; } @@ -128,7 +130,7 @@ function choix_statut_auteur($statut, $id_auteur, $ancre) { null, array('statut' => '0minirezo'))) unset($droits["info_administrateurs"]); - if (!avoir_visiteurs()) + if (!avoir_visiteurs() AND $statut!==$droits['info_visiteurs']) unset($droits['info_visiteurs']); $menu = ''; diff --git a/ecrire/inc/plugin.php b/ecrire/inc/plugin.php index 99517aadda..d7737aa65b 100644 --- a/ecrire/inc/plugin.php +++ b/ecrire/inc/plugin.php @@ -349,7 +349,7 @@ function ecrire_plugin_actifs($plugin,$pipe_recherche=false,$operation='raz') { // generer les fichier // charger_plugins_options.php // charger_plugins_fonctions.php - foreach(array('options','fonctions') as $charge){ + foreach(array('chemins'=>_CACHE_PLUGINS_PATH,'options'=>_CACHE_PLUGINS_OPT,'fonctions'=>_CACHE_PLUGINS_FCT) as $charge=>$fileconf){ $s = ""; $splugs = ""; if (is_array($infos)){ @@ -363,7 +363,7 @@ function ecrire_plugin_actifs($plugin,$pipe_recherche=false,$operation='raz') { $info = $infos[$dir_type][$plug]; // definir le plugin, donc le path avant l'include du fichier options // permet de faire des include_spip pour attraper un inc_ du plugin - if ($charge=='options'){ + if ($charge=='chemins'){ $prefix = strtoupper(preg_replace(',\W,','_',$info['prefix'])); $splugs .= "define('_DIR_PLUGIN_$prefix',$dir); "; foreach($info['path'] as $chemin){ @@ -376,6 +376,7 @@ function ecrire_plugin_actifs($plugin,$pipe_recherche=false,$operation='raz') { } } } + // concerne uniquement options et fonctions if (isset($info[$charge])){ foreach($info[$charge] as $file){ // on genere un if file_exists devant chaque include pour pouvoir garder le meme niveau d'erreur general @@ -395,9 +396,8 @@ function ecrire_plugin_actifs($plugin,$pipe_recherche=false,$operation='raz') { if ($charge=='options'){ $s .= "function boutons_plugins(){return unserialize('".str_replace("'","\'",serialize($liste_boutons))."');}\n"; $s .= "function onglets_plugins(){return unserialize('".str_replace("'","\'",serialize($liste_onglets))."');}\n"; - $f = _CACHE_PLUGINS_OPT; - } else $f = _CACHE_PLUGINS_FCT; - ecrire_fichier($f, $start_file . $splugs . $s . $end_file); + } + ecrire_fichier($fileconf, $start_file . $splugs . $s . $end_file); } if (is_array($infos)){ diff --git a/ecrire/inc/securiser_action.php b/ecrire/inc/securiser_action.php index 5b4ec411e6..04891ad17a 100644 --- a/ecrire/inc/securiser_action.php +++ b/ecrire/inc/securiser_action.php @@ -100,18 +100,25 @@ function caracteriser_auteur() { // http://doc.spip.org/@_action_auteur function _action_auteur($action, $id_auteur, $pass, $alea) { - if (!isset($GLOBALS['meta'][$alea]) AND _request('exec')!=='install') { - include_spip('base/abstract_sql'); - $GLOBALS['meta'][$alea] = sql_getfetsel('valeur', 'spip_meta', "nom=" . sql_quote($alea)); - if (!($GLOBALS['meta'][$alea])) { - include_spip('inc/minipres'); - echo minipres(); - spip_log("$alea indisponible"); - exit; + static $sha = array(); + if (!isset($sha[$id_auteur.$pass.$alea])){ + if (!isset($GLOBALS['meta'][$alea]) AND _request('exec')!=='install') { + include_spip('base/abstract_sql'); + $GLOBALS['meta'][$alea] = sql_getfetsel('valeur', 'spip_meta', "nom=" . sql_quote($alea)); + if (!($GLOBALS['meta'][$alea])) { + include_spip('inc/minipres'); + echo minipres(); + spip_log("$alea indisponible"); + exit; + } } + include_spip('auth/sha256.inc'); + $sha[$id_auteur.$pass.$alea] = sha256($id_auteur.$pass.@$GLOBALS['meta'][$alea]); } - include_spip('auth/sha256.inc'); - return sha256($action.$id_auteur.$pass.@$GLOBALS['meta'][$alea]); + if (function_exists('sha1')) + return sha1($action.$sha[$id_auteur.$pass.$alea]); + else + return md5($action.$sha[$id_auteur.$pass.$alea]); } // http://doc.spip.org/@calculer_action_auteur @@ -144,10 +151,10 @@ function secret_du_site() { $GLOBALS['meta']['secret_du_site'] = sql_getfetsel('valeur', 'spip_meta', "nom='secret_du_site'"); } if (!isset($GLOBALS['meta']['secret_du_site']) - OR !strlen($GLOBALS['meta']['secret_du_site']) - ) { + OR (strlen($GLOBALS['meta']['secret_du_site'])<64)) { include_spip('inc/acces'); - ecrire_meta('secret_du_site', creer_uniqid(), 'non'); + include_spip('auth/sha256.inc'); + ecrire_meta('secret_du_site', sha256($_SERVER["DOCUMENT_ROOT"] . $_SERVER["SERVER_SIGNATURE"] . creer_uniqid()), 'non'); lire_metas(); // au cas ou ecrire_meta() ne fonctionne pas } return $GLOBALS['meta']['secret_du_site']; @@ -155,8 +162,10 @@ function secret_du_site() { // http://doc.spip.org/@calculer_cle_action function calculer_cle_action($action) { - include_spip('auth/sha256.inc'); - return sha256($action . secret_du_site()); + if (function_exists('sha1')) + return sha1($action . secret_du_site()); + else + return md5($action . secret_du_site()); } // http://doc.spip.org/@verifier_cle_action diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php index 93e848d0ab..7bc6d17b14 100644 --- a/ecrire/inc/utils.php +++ b/ecrire/inc/utils.php @@ -755,6 +755,10 @@ function find_in_path ($file, $dirname='', $include=false) { } function load_path_cache(){ + // charger le path des plugins + if (@is_readable(_CACHE_PLUGINS_PATH)){ + include_once(_CACHE_PLUGINS_PATH); + } $GLOBALS['path_files'] = array(); // si le visiteur est admin, // on ne recharge pas le cache pour forcer sa mise a jour @@ -1169,6 +1173,7 @@ function spip_initialisation_core($pi=NULL, $pa=NULL, $ti=NULL, $ta=NULL) { // Declaration des fichiers + define('_CACHE_PLUGINS_PATH', _DIR_CACHE . "charger_plugins_chemins.php"); define('_CACHE_PLUGINS_OPT', _DIR_CACHE . "charger_plugins_options.php"); define('_CACHE_PLUGINS_FCT', _DIR_CACHE . "charger_plugins_fonctions.php"); define('_CACHE_PLUGINS_VERIF', _DIR_CACHE . "verifier_plugins.txt"); @@ -1236,7 +1241,7 @@ function spip_initialisation_core($pi=NULL, $pa=NULL, $ti=NULL, $ta=NULL) { // systematique du noyau ou une baisse de perfs => a etudier) include_once _DIR_RESTREINT . 'inc/flock.php'; - // charger tout de suite le cache path + // charger tout de suite le path et son cache load_path_cache(); // *********** traiter les variables ************ diff --git a/ecrire/inc_version.php b/ecrire/inc_version.php index 1471250ba7..efc39dd248 100644 --- a/ecrire/inc_version.php +++ b/ecrire/inc_version.php @@ -448,7 +448,7 @@ error_reporting(SPIP_ERREUR_REPORT); // qui ne sera pas execute car _ECRIRE_INC_VERSION est defini // donc il faut avoir tout fini ici avant de charger les plugins -if (@is_readable(_CACHE_PLUGINS_OPT)){ +if (@is_readable(_CACHE_PLUGINS_OPT) AND @is_readable(_CACHE_PLUGINS_PATH)){ // chargement optimise precompile include_once(_CACHE_PLUGINS_OPT); } else { @@ -457,6 +457,8 @@ if (@is_readable(_CACHE_PLUGINS_OPT)){ // generer les fichiers php precompiles // de chargement des plugins et des pipelines if (verif_plugin()) { + if (@is_readable(_CACHE_PLUGINS_PATH)) + include_once(_CACHE_PLUGINS_PATH); // securite : a priori n'a pu etre fait plus tot if (@is_readable(_CACHE_PLUGINS_OPT)) include_once(_CACHE_PLUGINS_OPT); else spip_log("pipelines desactives: impossible de produire " . _CACHE_PLUGINS_OPT); diff --git a/prive/javascript/ajaxCallback.js b/prive/javascript/ajaxCallback.js index 2b9813c814..14b1b2369b 100644 --- a/prive/javascript/ajaxCallback.js +++ b/prive/javascript/ajaxCallback.js @@ -74,7 +74,7 @@ jQuery.fn.animeajax = function(end) { // le bloc cible en haut de l'ecran // si force = true, scroller dans tous les cas jQuery.fn.positionner = function(force) { - var offset = jQuery(this).offset({'scroll':false}); + var offset = jQuery(this).offset(); var hauteur = parseInt(jQuery(this).css('height')); var scrolltop = self['pageYOffset'] || jQuery.boxModel && document.documentElement[ 'scrollTop' ] || diff --git a/prive/javascript/layer.js b/prive/javascript/layer.js index 45825b092b..6c9d173b70 100644 --- a/prive/javascript/layer.js +++ b/prive/javascript/layer.js @@ -269,24 +269,6 @@ function onkey_rechercher(valeur, rac, url, img, nid, init) { // * retailler les input // * utiliser ctrl-s, F8 etc comme touches de sauvegarde function verifForm(racine) { - if(!jQuery.browser.mozilla) return; - jQuery("input.forml,input.formo,textarea.forml,textarea.formo", racine||document) - .each(function() { - var jField = jQuery(this); - var w = jField.css('width'); - if (!w || w == '100%') { - jField.css('width','95%'); - } else { - w = parseInt(w) - - (parseInt(jField.css("borderLeftWidth")) + - parseInt(jField.css("borderRightWidth")) + - parseInt(jField.css("paddingLeft")) + - parseInt(jField.css("paddingRight") - )); - jField.width(w+'px'); - } - }); - // Clavier pour sauver (cf. crayons) jQuery('form', racine||document) .keypress(function(e){ @@ -303,6 +285,20 @@ function verifForm(racine) { return false; } }); + + // vieux fonctionnement verifForm, desormais uniquement sur MSIE < 8: + // forcer la largeur des elements de formulaires a 100% + // (desormais, on utilise la CSS box-sizing pour brouteurs recents). + if(jQuery.browser.msie && jQuery.browser.version.substr(0,3) < 8) { + jQuery(".formulaire_spip", racine||document).find("input.text, input.password, textarea") + .each(function() { + if(this.currentStyle && this.currentStyle.width=="100%") { + var jField = jQuery(this); + jField.width(2*jField.width()-jField.outerWidth()); + } + }); + } + } // Si Ajax est disponible, cette fonction l'utilise pour envoyer la requete. -- GitLab