From 7dd9f1cf4b9afe66b698c3f966879486a726354c Mon Sep 17 00:00:00 2001 From: Ludovic CHEVALIER Date: Thu, 4 Feb 2016 09:53:38 +0100 Subject: [PATCH] [SPIP] ~v3.0.20-->v3.0.21 --- www/CHANGELOG.txt | 48 ++ www/ecrire/action/desinstaller_plugin.php | 2 +- www/ecrire/base/connect_sql.php | 2 +- www/ecrire/inc/cvt_autosave.php | 3 + www/ecrire/inc/editer.php | 3 +- www/ecrire/inc/filtres_images_lib_mini.php | 5 + www/ecrire/inc/filtres_mini.php | 24 +- www/ecrire/inc/lang_liste.php | 6 +- www/ecrire/inc/lien.php | 6 +- www/ecrire/inc/texte.php | 7 + www/ecrire/inc/texte_mini.php | 43 +- www/ecrire/inc/utils.php | 14 +- www/ecrire/inc_version.php | 2 +- www/ecrire/paquet.xml | 2 +- www/ecrire/public/assembler.php | 2 + www/ecrire/public/compiler.php | 5 + www/ecrire/public/composer.php | 23 +- www/ecrire/public/phraser_html.php | 14 +- www/plugins-dist/forum/formulaires/forum.html | 2 +- www/plugins-dist/forum/paquet.xml | 2 +- .../mots/formulaires/editer_mot.php | 18 +- www/plugins-dist/mots/paquet.xml | 2 +- .../prive/squelettes/contenu/mot_edit.html | 8 +- .../mots/prive/squelettes/contenu/mots.html | 6 +- .../porte_plume/css/barre_outils.css | 5 +- .../javascript/jquery.previsu_spip.js | 14 +- www/plugins-dist/porte_plume/paquet.xml | 2 +- www/plugins-dist/revisions/inc/revisions.php | 3 + www/plugins-dist/revisions/paquet.xml | 2 +- .../prive/squelettes/contenu/revision.html | 6 +- www/plugins-dist/sites/genie/syndic.php | 2 + www/plugins-dist/sites/inc/syndic.php | 2 +- www/plugins-dist/sites/paquet.xml | 2 +- .../statistiques/engines-list.txt | 504 ++++++++++-------- www/plugins-dist/statistiques/paquet.xml | 2 +- .../prive/style_prive_plugin_stats.html | 3 + .../svp/inc/svp_depoter_distant.php | 2 +- www/plugins-dist/svp/paquet.xml | 2 +- www/plugins-dist/textwheel/inc/lien.php | 6 +- www/prive/formulaires/dater.html | 8 +- www/prive/formulaires/dater.php | 37 +- www/prive/javascript/ajaxCallback.js | 23 +- www/prive/javascript/jquery.autosave.js | 2 +- www/prive/objets/liste/articles.html | 2 +- www/prive/squelettes/ajax.html | 2 +- www/prive/squelettes/head/dist.html | 2 +- www/prive/squelettes/structure.html | 4 +- www/squelettes-dist/robots.txt.html | 3 +- www/svn.revision | 12 +- 49 files changed, 552 insertions(+), 349 deletions(-) diff --git a/www/CHANGELOG.txt b/www/CHANGELOG.txt index 6fa24cb1..392f76d6 100644 --- a/www/CHANGELOG.txt +++ b/www/CHANGELOG.txt @@ -1,3 +1,51 @@ + +SPIP-Core spip-3.0.20 -> spip-3.0.21 31 octobre 2015 +------------------------------------------------------------- + +r22267 | cedric | (mer. 24 juin 2015) | Quand la source image est dans IMG/ et contient une query-string complexe et que le fichier existe sans la query-string, on l'ignore. Repare le traitement des images qui ont une URL restreinte basee sur la query-string+htaccess +r22282 | fil | (lun. 29 juin 2015) | report de #22281 (https://core.spip.net/issues/3456) +r22315 | cedric | (lun. 20 juil. 2015) | Reparer la desinstallation des plugins dans _DIR_PLUGINS_SUPPL +r22326 | cedric | (ven. 24 juil. 2015) | Report de r22325 : Fix #3504 : purge des autosave cvt en session +r22327 | cedric | (ven. 24 juil. 2015) | Report de r21817 : 0 est une valeur acceptable pour un champ obligatoire (Frederic, Pierretux) +r22342 | cedric | (sam. 25 juil. 2015) | Fix #3510 : parametre_url sur les arguments de type tableau. On backporte la version du trunk 3.1 sur laquelle le bug a ete corrige +r22344 | cedric | (dim. 26 juil. 2015) | Report de r22343 : Fix #3494 : quand la date de redaction anterieure est utilisee, il faut pouvoir l'editer sur un article en cours de redaction, comme avant, mais sans permettre l'edition de la date.On robustifie traiter() en verifiant le droit a edition qui a ete calcule dans charger() avant de prendre en compte les request, ce qui evite tout risque de manipulation du form et d'injection d'input en html+ Report de r22338 au passage +r22362 | kent1 | (mar. 28 juil. 2015) | Récupérer le title et le hreflang du lien entourant un modèle cf #3516 +r22384 | kent1 | (mer. 12 août 2015) | Gros bug sur r22282 (cf #3456)Le passage en liens absolus se faisait uniquement sur le premier href ou src, remplaçant le premier href ou src par le dernier href / src présent dans le texte...On ne remplaçait plus lien par lien +r22392 | erational | (mar. 25 août 2015) | report de c22360 +r22393 | erational | (mar. 25 août 2015) | arménien en code HTML +r22402 | rasta | (jeu. 03 sept. 2015) | RAH. On corrige enfin ce fichu gros bug du compilateur qui faisait qu'on ne pouvait pas avoir un critère conditionnel ET plusieurs arguments.Ça marchait pour les critères sans arguments ou avec un seul argument.La raison ? Non-factorisation et doublonnage de code : actuellement, les critères mêmes persos (pas juste les trucs SQL) qui ont 0 ou 1 arguments, ne passent PAS par le même code que ceux avec 2 ou plus. Alors qu'ensuite le traitement et la regex associée sont quasiment les mêmes… mais pas tout à fait, puisque dans le cas 2 ou plus ça ne cherchait pas le "?".Pour l'instant on corrige juste le bug, mais il faudrait nettoyer le code et factoriser pour ne plus générer d'erreur de ce genre…Au passage, pour SPIP 3.0, on backport la correction du "_" manquant qui faisait, là aussi qu'avec 2 arguments ou plus, on avait pas le droit d'avoir des critères avec_plusieurs_mots, alors qu'on peut avec 0 ou 1 argument. Même raison : code fait deux fois différemment, dont la regex. +r22434 | erational | (ven. 16 oct. 2015) | pas d'accent sur Kreyòl (Peyi Dayiti) +r22436 | cedric | (lun. 19 oct. 2015) | On ajoute l'heure de publication au survol de la date, cela est utile pour faire de la programmation intensive d'article a l'avance +r22442 | cedric | (mar. 27 oct. 2015) | Report de r22441 : r17234 a introduit un include_spip() au debut de base/connect_sql.php, ce qui etait une erreur car ce fichier est inclus par inc_version avant toute initialisation du core et chargement des caches.Du coup chaque hit provoquait une invalidation du chemin car find_in_path appele trop tot croyait que son find etait nouveau, donc le hit se finissait par une ecriture du fichier tmp/cache/chemin.txt.Comme ce fichier peut etre assez gros (>100ko) et ecrit en posant un verrou, cela impactait la performance par un debit d'ecriture sur le disque et des possibles attentes entre hit concourants.Bug repere par nicod en 3.0 et confirme par RealET en 3.1 +r22444 | cedric | (mar. 27 oct. 2015) | Report de r22443 : Complement a r22441 : ne pas lever le flag en cas de find_in_path appele trop tot si le fichier n'est pas trouve +r22449 | cedric | (jeu. 29 oct. 2015) | Report de r22427 : #3371 Les squelettes de l'espace prive recoivent un flag espace_prive=1 a toute fin utile +r22450 | cedric | (jeu. 29 oct. 2015) | Report de r22428 : Fix #3371 : dans la fonction typo, si un flag espace_prive=1 est present dans le env, on echappe tout html suspect, ie qui ne passe pas a travers safehtml sans censure. Pour limiter l'impact perfo on conditionne l'echappement a la presence des caracteres < et = dans le texte, c'est a dire une balise avec un attribut, ce qui ne traitera donc quasiment aucun contenu par defaut, sauf quelques rares ou autre curiosite de ce type +r22451 | cedric | (jeu. 29 oct. 2015) | Report de r22429 : oups oubli dans r22428 : cas de typo appele en php depuis l'espace prive +r22452 | b_b | (jeu. 29 oct. 2015) | report de r22346Fix #3430 : les boucles avec langue utilisaient lang_select_public() qui changeait sauvagement la langue en debut de boucle, sans la restaurer en fin de boucle, provoquant des bugs de contexteOn modifie la compulation des boucles : lang_select_public() appelle toujours lang_select(...) avec eventuellement la langue inchangee, et la boucle finit par un lang_select() qui depile et restaure la langue pour l'iteration suivante. + +SPIP-plugins-dist spip-3.0.20 -> spip-3.0.21 31 octobre 2015 +------------------------------------------------------------- + +r91143 | kent1 | (mar. 28 juil. 2015) | Récupérer le title et le hreflang du lien entourant un modèle cf #3516 +r91205 | cedric | (jeu. 30 juil. 2015) | bug lors d'une erreur a la creation d'un mot (confirmation sur un doublon par exexemple) +r91206 | cedric | (jeu. 30 juil. 2015) | complement a r91205 +r91209 | cy_altern | (jeu. 30 juil. 2015) | report de 91148 (acces de google bot aux js et css) +r91271 | cedric | (mer. 05 août 2015) | On ne verifie et alerte sur le doublon de titre de mot cle uniquement si c'est un nouveau mot cle ou si on retitre un mot cle existant, sinon c'est penible +r91274 | cedric | (mer. 05 août 2015) | ne pas syndiquer un site en refuse +r91290 | real3t | (ven. 07 août 2015) | Mise à jour pour la reconnaissance des moteurs de recherche. Reportable en 2.1. +r91384 | real3t | (dim. 16 août 2015) | Un paramètre de plus reconnu pour Google +r91608 | kent1 | (jeu. 03 sept. 2015) | Report de la fonctionnalité de z91607"Faire prendre en compte à la prévisu l'hypothétique dir="ltr" ou dir="rtl" sur le textarea" +r91797 | marcimat | (sam. 12 sept. 2015) | Report de r91796 : Le pipeline "afficher_contenu_objet" n'était pas appelé pour l'affichage des groupes de mots sur la page exec=mots. +r92079 | chankalan | (mar. 29 sept. 2015) | pour affichage des colonnes des visites, report de http://zone.spip.org/trac/spip-zone/changeset/91091/ et http://zone.spip.org/trac/spip-zone/changeset/91404/ +r92236 | cedric | (sam. 10 oct. 2015) | Report de r92235 : soyons un peu moins bisounours : les diff necessitent aussi un interdire_scripts comme tous les contenus affiches dans l'espace prive +r92513 | b_b | (jeu. 29 oct. 2015) | Report de r92512 : éviter d'afficher le script d'autosave dans la prévisu d'un forum quand le site est en mode parano avec $filtrer_javascript = -1;Ref ​https://core.spip.net/issues/3413 merci Équipement +r92523 | b_b | (jeu. 29 oct. 2015) | report de r92522 : éviter une erreur PHP Strict Standards: Only variables should be passed by reference (Eric Camus)Ref ​https://core.spip.net/issues/3373 +r92525 | b_b | (jeu. 29 oct. 2015) | version 0.80.27 : report de r92524fix installation d'un plugin qui nécessite un plugin du core sur un site neuf, ​https://core.spip.net/issues/3572À la fin de svp_ajouter_depot(), utiliser svp_actualiser_paquets_locaux(true) qui, comme son nom l'indique, actualise les paquets locaux puis supprime les paquets locaux avec l'option true.Merci marcimat :) +r92568 | real3t | (sam. 31 oct. 2015) | Et report en 3.0 +r92576 | real3t | (sam. 31 oct. 2015) | Sur une suggestion de Franck, intégration de Haosou dont parle cet article. +r92578 | Francky | (sam. 31 oct. 2015) | Il semble que sogou soit un moteur en chinehttp://www.journaldunet.com/solutions/expert/59882/haosoule-moteur-de-recherche-qui-pourrait-changer-le-monde-du-seo-chinois.shtml +r92580 | Francky | (sam. 31 oct. 2015) | Rangement alphabétique + SPIP-Core spip-3.0.19 -> spip-3.0.20 23 juin 2015 ------------------------------------------------------------- r22106 | ben | (sam. 09 mai 2015) | 3.0.20 dev diff --git a/www/ecrire/action/desinstaller_plugin.php b/www/ecrire/action/desinstaller_plugin.php index 89a35fa8..2c91ea0c 100644 --- a/www/ecrire/action/desinstaller_plugin.php +++ b/www/ecrire/action/desinstaller_plugin.php @@ -22,7 +22,7 @@ function action_desinstaller_plugin_dist() { if (defined('_DIR_PLUGINS_SUPPL') AND $dir_plugins==_DIR_PLUGINS_SUPPL) $dir_type = "_DIR_PLUGINS_SUPPL"; $installer_plugins = charger_fonction('installer', 'plugins'); - $infos = $installer_plugins($plugin, 'uninstall'); + $infos = $installer_plugins($plugin, 'uninstall',$dir_type); if ($infos AND !$infos['install_test'][0]) { include_spip('inc/plugin'); ecrire_plugin_actifs(array($plugin),false,'enleve'); diff --git a/www/ecrire/base/connect_sql.php b/www/ecrire/base/connect_sql.php index 41eeff10..759b4228 100644 --- a/www/ecrire/base/connect_sql.php +++ b/www/ecrire/base/connect_sql.php @@ -11,7 +11,7 @@ \***************************************************************************/ if (!defined('_ECRIRE_INC_VERSION')) return; -include_spip('base/objets'); +require_once _ROOT_RESTREINT . 'base/objets.php'; // // Utilitaires indispensables autour des serveurs SQL diff --git a/www/ecrire/inc/cvt_autosave.php b/www/ecrire/inc/cvt_autosave.php index af7837ee..934091aa 100644 --- a/www/ecrire/inc/cvt_autosave.php +++ b/www/ecrire/inc/cvt_autosave.php @@ -75,7 +75,9 @@ function cvtautosave_formulaire_traiter($flux){ if ($cle_autosave = _request('autosave')){ include_spip('inc/session'); session_set('session_autosave_'.$cle_autosave, null); + } + if (isset($GLOBALS['visiteur_session']) AND $GLOBALS['visiteur_session']){ // delai par defaut avant purge d'un backup de form : 72H if (!defined('_AUTOSAVE_GB_DELAY')) define('_AUTOSAVE_GB_DELAY',72*3600); $time_too_old = time() - _AUTOSAVE_GB_DELAY; @@ -92,6 +94,7 @@ function cvtautosave_formulaire_traiter($flux){ } } } + return $flux; } diff --git a/www/ecrire/inc/editer.php b/www/ecrire/inc/editer.php index af084e4d..1702c318 100644 --- a/www/ecrire/inc/editer.php +++ b/www/ecrire/inc/editer.php @@ -69,7 +69,8 @@ function formulaires_editer_objet_verifier($type,$id='new', $oblis = array()){ } } foreach($oblis as $obli) { - if (!_request($obli)) { + $value = _request($obli); + if (is_null($value) OR !(is_array($value)?count($value):strlen($value))) { if (!isset($erreurs[$obli])) { $erreurs[$obli] = ''; } $erreurs[$obli] .= _T("info_obligatoire"); } diff --git a/www/ecrire/inc/filtres_images_lib_mini.php b/www/ecrire/inc/filtres_images_lib_mini.php index 03620a1c..83c54290 100644 --- a/www/ecrire/inc/filtres_images_lib_mini.php +++ b/www/ecrire/inc/filtres_images_lib_mini.php @@ -145,6 +145,11 @@ function _image_valeurs_trans($img, $effet, $forcer_format = false, $fonction_cr } else { // enlever le timestamp eventuel $source=preg_replace(',[?][0-9]+$,','',$source); + if (strpos($source,"?")!==false + AND strncmp($source,_DIR_IMG,strlen(_DIR_IMG))==0 + AND file_exists($f=preg_replace(',[?].*$,','',$source))){ + $source = $f; + } $fichier = $source; } diff --git a/www/ecrire/inc/filtres_mini.php b/www/ecrire/inc/filtres_mini.php index cc10091f..4621ebc6 100644 --- a/www/ecrire/inc/filtres_mini.php +++ b/www/ecrire/inc/filtres_mini.php @@ -100,22 +100,22 @@ function protocole_implicite($url_absolue){ // ne s'applique qu'aux textes contenant des liens // http://doc.spip.org/@liens_absolus function liens_absolus($texte, $base='') { - if (preg_match_all(',(<(a|link|image)[[:space:]]+[^<>]*href=["\']?)([^"\' ><[:space:]]+)([^<>]*>),imsS', + if (preg_match_all(',(<(a|link|image|img|script)\s[^<>]*(href|src)=[^<>]*>),imsS', $texte, $liens, PREG_SET_ORDER)) { foreach ($liens as $lien) { - $abs = url_absolue($lien[3], $base); - if ($abs <> $lien[3] and !preg_match('/^#/',$lien[3])) - $texte = str_replace($lien[0], $lien[1].$abs.$lien[4], $texte); - } - } - if (preg_match_all(',(<(img|script)[[:space:]]+[^<>]*src=["\']?)([^"\' ><[:space:]]+)([^<>]*>),imsS', - $texte, $liens, PREG_SET_ORDER)) { - foreach ($liens as $lien) { - $abs = url_absolue($lien[3], $base); - if ($abs <> $lien[3]) - $texte = str_replace($lien[0], $lien[1].$abs.$lien[4], $texte); + foreach(array('href', 'src') as $attr) { + $href = extraire_attribut($lien[0], $attr); + if (strlen($href)>0) { + $abs = url_absolue($href, $base); + if ($href != $abs and !preg_match('/^#/',$href)) { + $texte_lien = inserer_attribut($lien[0], $attr, $abs); + $texte = str_replace($lien[0],$texte_lien,$texte); + } + } + } } } + return $texte; } diff --git a/www/ecrire/inc/lang_liste.php b/www/ecrire/inc/lang_liste.php index 9fe1e64c..8bcb588e 100644 --- a/www/ecrire/inc/lang_liste.php +++ b/www/ecrire/inc/lang_liste.php @@ -33,7 +33,7 @@ $GLOBALS['codes_langues'] = array( 'ay' => "Aymara", 'az' => "Azərbaycan dili", 'ba' => "Bashkir", - 'be' => "Беларускі", + 'be' => "Беларуская", 'ber_tam' => "Tamazigh", 'ber_tam_tfng' => "Tamazigh tifinagh", 'bg' => "български", @@ -48,7 +48,7 @@ $GLOBALS['codes_langues'] = array( 'co' => "corsu", 'cpf' => "Kréol réyoné", 'cpf_dom' => "Kreyòl", - 'cpf_hat' => "Kréyòl (Péyi Dayiti)", + 'cpf_hat' => "Kreyòl (Peyi Dayiti)", 'cs' => "čeština", 'cy' => "Cymraeg", # welsh, gallois 'da' => "dansk", @@ -91,7 +91,7 @@ $GLOBALS['codes_langues'] = array( 'hi' => "हिंदी", 'hr' => "hrvatski", 'hu' => "magyar", - 'hy' => "Հայերեն",// Arménien + 'hy' => "Հայերեն",// Arménien 'ia' => "Interlingua", 'id' => "Indonesia", 'ie' => "Interlingue", diff --git a/www/ecrire/inc/lien.php b/www/ecrire/inc/lien.php index 9fc5d480..a76d5c7e 100644 --- a/www/ecrire/inc/lien.php +++ b/www/ecrire/inc/lien.php @@ -255,7 +255,9 @@ function traiter_modeles($texte, $doublons=false, $echap='', $connect='', $liens $lien = array( 'href' => extraire_attribut($r[0],'href'), 'class' => extraire_attribut($r[0],'class'), - 'mime' => extraire_attribut($r[0],'type') + 'mime' => extraire_attribut($r[0],'type'), + 'title' => extraire_attribut($r[0],'title'), + 'hreflang' => extraire_attribut($r[0],'hreflang') ); $n = strlen($r[0]); $a -= $n; @@ -275,7 +277,7 @@ function traiter_modeles($texte, $doublons=false, $echap='', $connect='', $liens // dans les parametres, plutot que les liens echappes if (!is_null($liens)) $params = str_replace($liens[0], $liens[1], $params); - $modele = inclure_modele($type, $id, $params, $lien, $connect, $env); + $modele = inclure_modele($type, $id, $params, $lien, $connect, $env); // en cas d'echec, // si l'objet demande a une url, // creer un petit encadre vers elle diff --git a/www/ecrire/inc/texte.php b/www/ecrire/inc/texte.php index af706b3e..c0cec0be 100644 --- a/www/ecrire/inc/texte.php +++ b/www/ecrire/inc/texte.php @@ -156,6 +156,7 @@ function typo($letexte, $echapper=true, $connect=null, $env=array()) { if (is_null($connect)){ $connect = ''; $interdire_script = true; + $env['espace_prive'] = 1; } // Echapper les codes etc @@ -183,6 +184,12 @@ function typo($letexte, $echapper=true, $connect=null, $env=array()) { if ($interdire_script) $letexte = interdire_scripts($letexte); + // Dans l'espace prive on se mefie de tout contenu dangereux + // https://core.spip.net/issues/3371 + if (isset($env['espace_prive']) AND $env['espace_prive']){ + $letexte = echapper_html_suspect($letexte); + } + return $letexte; } diff --git a/www/ecrire/inc/texte_mini.php b/www/ecrire/inc/texte_mini.php index b0aab8a3..bd141ccf 100644 --- a/www/ecrire/inc/texte_mini.php +++ b/www/ecrire/inc/texte_mini.php @@ -381,15 +381,52 @@ function echapper_faux_tags($letexte){ $letexte = ""; while (count($textMatches)) { // un texte a echapper - $letexte .= str_replace(array("<"),array('<'),array_shift($textMatches)); + $letexte .= str_replace("<",'<',array_shift($textMatches)); // un tag html qui a servit a faite le split $letexte .= array_shift($textMatches); } return $letexte; } -// Securite : utiliser SafeHTML s'il est present dans ecrire/safehtml/ -// http://doc.spip.org/@safehtml +/** + * Si le html contenu dans un texte ne passe pas sans transformation a travers safehtml + * on l'echappe + * si safehtml ne renvoie pas la meme chose on echappe les < en < pour montrer le contenu brut + * + * @param string $texte + * @return string + */ +function echapper_html_suspect($texte){ + if (strpos($texte,'<')===false OR strpos($texte,'=')===false) + return $texte; + + // on teste sur strlen car safehtml supprime le contenu dangereux + // mais il peut aussi changer des ' en " sur les attributs html, + // donc un test d'egalite est trop strict + if (strlen(safehtml($texte))!==strlen($texte)){ + $texte = str_replace("<","<",$texte); + } + + return $texte; +} + + +/** + * Sécurise un texte HTML + * + * Échappe le code PHP et JS. + * Applique en plus safehtml si un plugin le définit dans inc/safehtml.php + * + * Permet de protéger les textes issus d'une origine douteuse (forums, syndications...) + * + * @filtre + * @link http://www.spip.net/4310 + * + * @param string $t + * Texte à sécuriser + * @return string + * Texte sécurisé +**/ function safehtml($t) { static $safehtml; diff --git a/www/ecrire/inc/utils.php b/www/ecrire/inc/utils.php index 16500134..923431f2 100644 --- a/www/ecrire/inc/utils.php +++ b/www/ecrire/inc/utils.php @@ -969,8 +969,11 @@ function find_in_path ($file, $dirname='', $include=false) { include_once _ROOT_CWD . $a; $inc[$dirname][$file] = $inc[''][$dirname . $file] = true; } - if (!defined('_SAUVER_CHEMIN')) - define('_SAUVER_CHEMIN',true); + if (!defined('_SAUVER_CHEMIN')){ + // si le chemin n'a pas encore ete charge, ne pas lever le flag, ne pas cacher + if (is_null($GLOBALS['path_files'])) return $a; + define('_SAUVER_CHEMIN', true); + } return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file] = $GLOBALS['path_files'][$GLOBALS['path_sig']][''][$dirname . $file] = $a; } } @@ -988,8 +991,11 @@ function find_in_path ($file, $dirname='', $include=false) { } } - if (!defined('_SAUVER_CHEMIN')) - define('_SAUVER_CHEMIN',true); + if (!defined('_SAUVER_CHEMIN')){ + // si le chemin n'a pas encore ete charge, ne pas lever le flag, ne pas cacher + if (is_null($GLOBALS['path_files'])) return false; + define('_SAUVER_CHEMIN', true); + } return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file] = $GLOBALS['path_files'][$GLOBALS['path_sig']][''][$dirname . $file] = false; } diff --git a/www/ecrire/inc_version.php b/www/ecrire/inc_version.php index 188638d3..31467ab7 100644 --- a/www/ecrire/inc_version.php +++ b/www/ecrire/inc_version.php @@ -294,7 +294,7 @@ $liste_des_authentifications = array( // pour specifier les versions de SPIP necessaires // il faut s'en tenir a un nombre de decimales fixe // ex : 2.0.0, 2.0.0-dev, 2.0.0-beta, 2.0.0-beta2 -$spip_version_branche = "3.0.20"; +$spip_version_branche = "3.0.21"; // version des signatures de fonctions PHP // (= numero SVN de leur derniere modif cassant la compatibilite et/ou necessitant un recalcul des squelettes) $spip_version_code = 17873; diff --git a/www/ecrire/paquet.xml b/www/ecrire/paquet.xml index aca20e3f..a14f6d02 100644 --- a/www/ecrire/paquet.xml +++ b/www/ecrire/paquet.xml @@ -1,7 +1,7 @@ partie . $corps; + // depiler la lang de la boucle si besoin + $corps .= $fin_lang_select_public; + // si le corps est une constante, ne pas appeler le serveur N fois! if (preg_match(CODE_MONOTONE,str_replace("\\'",'',$corps), $r)) { diff --git a/www/ecrire/public/composer.php b/www/ecrire/public/composer.php index 71aca21a..02fee784 100644 --- a/www/ecrire/public/composer.php +++ b/www/ecrire/public/composer.php @@ -421,21 +421,22 @@ function lang_select_public($lang, $lang_select, $titre=null) { // Cas 1. forcer_lang = true et pas de critere {lang_select} if (isset($GLOBALS['forcer_lang']) AND $GLOBALS['forcer_lang'] AND $lang_select !== 'oui') - return; + $lang = $GLOBALS['spip_lang']; // Cas 2. l'objet n'a pas de langue definie (ou definie a '') - if (!strlen($lang)) - return; + elseif (!strlen($lang)) + $lang = $GLOBALS['spip_lang']; // Cas 3. l'objet est multilingue ! - if ($lang_select !== 'oui' - AND strlen($titre) > 10 - AND strpos($titre, '') !== false - AND strpos(echappe_html($titre), '') !== false) - return; - - // Tous les cas ayant ete elimines, faire le job - $GLOBALS['spip_lang'] = $lang; + elseif ($lang_select !== 'oui' + AND strlen($titre) > 10 + AND strpos($titre, '') !== false + AND strpos(echappe_html($titre), '') !== false) + $lang = $GLOBALS['spip_lang']; + + // faire un lang_select() eventuellement sur la langue inchangee + lang_select($lang); + return; } diff --git a/www/ecrire/public/phraser_html.php b/www/ecrire/public/phraser_html.php index 50064e82..ea4aca8e 100644 --- a/www/ecrire/public/phraser_html.php +++ b/www/ecrire/public/phraser_html.php @@ -485,23 +485,24 @@ function phraser_criteres($params, &$result) { $not = ""; } else { // Le debut du premier argument est l'operateur - preg_match("/^([!]?)([a-zA-Z][a-zA-Z0-9]*)[[:space:]]*(.*)$/ms", $param, $m); + preg_match("/^([!]?)([a-zA-Z][a-zA-Z0-9_]*)[[:space:]]*(\??)[[:space:]]*(.*)$/ms", $param, $m); $op = $m[2]; $not = $m[1]; + $cond = $m[3]; // virer le premier argument, // et mettre son reliquat eventuel // Recopier pour ne pas alterer le texte source // utile au debusqueur - if ($m[3]) { + if ($m[4]) { // une maniere tres sale de supprimer les "' autour de {critere "xxx","yyy"} - if (preg_match(',^(["\'])(.*)\1$,', $m[3])) { + if (preg_match(',^(["\'])(.*)\1$,', $m[4])) { $c = null; - eval ('$c = '.$m[3].';'); + eval ('$c = '.$m[4].';'); if (isset($c)) - $m[3] = $c; + $m[4] = $c; } $texte = new Texte; - $texte->texte = $m[3]; + $texte->texte = $m[4]; $v[1][0]= $texte; } else array_shift($v[1]); } @@ -509,6 +510,7 @@ function phraser_criteres($params, &$result) { $crit = new Critere; $crit->op = $op; $crit->not = $not; + $crit->cond = $cond; $crit->exclus =""; $crit->param = $v; $args[] = $crit; diff --git a/www/plugins-dist/forum/formulaires/forum.html b/www/plugins-dist/forum/formulaires/forum.html index 6b461d79..792d5128 100644 --- a/www/plugins-dist/forum/formulaires/forum.html +++ b/www/plugins-dist/forum/formulaires/forum.html @@ -26,7 +26,7 @@ [] [(#INCLURE{fond=formulaires/inc-forum_ajouter_mot, ajouter_mot})] - (#ENV*{erreurs}|table_valeur{previsu}) + (#ENV**{erreurs}|table_valeur{previsu}) ] diff --git a/www/plugins-dist/forum/paquet.xml b/www/plugins-dist/forum/paquet.xml index e9c24bc0..0a43aa0d 100644 --- a/www/plugins-dist/forum/paquet.xml +++ b/www/plugins-dist/forum/paquet.xml @@ -1,7 +1,7 @@ ".intval($id_mot))) - $erreurs['titre'] = - _T('mots:avis_doublon_mot_cle') - ." "; + // on ne fait la verification que si c'est une creation de mot ou un retitrage + if (!intval($id_mot) + OR supprimer_numero(_request('titre'))!==supprimer_numero(sql_getfetsel('titre','spip_mots','id_mot='.intval($id_mot)))){ + if (!count($erreurs) AND !_request('confirm_titre_mot')){ + if (sql_countsel("spip_mots", + "titre REGEXP ".sql_quote("^([0-9]+[.] )?".preg_quote(supprimer_numero(_request('titre')))."$") + ." AND id_mot<>".intval($id_mot))) + $erreurs['titre'] = + _T('mots:avis_doublon_mot_cle') + ." "; + } } return $erreurs; } diff --git a/www/plugins-dist/mots/paquet.xml b/www/plugins-dist/mots/paquet.xml index cc9cfef4..3e651cc1 100644 --- a/www/plugins-dist/mots/paquet.xml +++ b/www/plugins-dist/mots/paquet.xml @@ -1,7 +1,7 @@
- [(#ID_MOT|oui) + [(#ID_MOT|intval|oui) [(#GET{retour}|icone_verticale{<:icone_retour:>,mot,'',left retour[(#ENV{retourajax,''}|oui)ajax preload]})] ] - [[(#ID_MOT|?{<:mots:info_modifier_mot:>,<:titre_ajouter_un_mot:>})] + [[(#ID_MOT|intval|?{<:mots:info_modifier_mot:>,<:titre_ajouter_un_mot:>})]

(#ENV{titre,#INFO_TITRE{mot,#ID_MOT}|sinon{<:mots:texte_nouveau_mot:>}})

]
diff --git a/www/plugins-dist/mots/prive/squelettes/contenu/mots.html b/www/plugins-dist/mots/prive/squelettes/contenu/mots.html index ab9f8520..4b09e5d6 100644 --- a/www/plugins-dist/mots/prive/squelettes/contenu/mots.html +++ b/www/plugins-dist/mots/prive/squelettes/contenu/mots.html @@ -9,7 +9,9 @@ [(#URL_ECRIRE{groupe_mots_edit,id_groupe=#ID_GROUPE}|icone_verticale{<:mots:icone_modif_groupe_mots:>,groupe_mots-24.png,edit,right})] ]
- + [(#PIPELINE{afficher_contenu_objet,#ARRAY{ + args,#ARRAY{type,groupe_mots,id,#ID_GROUPE,id_objet,#ID_GROUPE}, + data,#INCLURE{fond=prive/objets/contenu/groupe_mots, id=#ID_GROUPE, id_groupe=#ID_GROUPE}}})]
@@ -23,4 +25,4 @@ ] #BOITE_FERMER -] \ No newline at end of file +] diff --git a/www/plugins-dist/porte_plume/css/barre_outils.css b/www/plugins-dist/porte_plume/css/barre_outils.css index 7af4d059..8354489d 100644 --- a/www/plugins-dist/porte_plume/css/barre_outils.css +++ b/www/plugins-dist/porte_plume/css/barre_outils.css @@ -22,7 +22,7 @@ .markItUp { margin:5px 0 5px 0; clear:both; - position: relative; + position: relative; } .markItUp .markItUpContainer { margin:0; padding:0; @@ -86,7 +86,8 @@ padding:1em; /* decaler de la hauteur de .markItUpTabs */ position:relative; - top:2.2em; + top:2.2em; + text-align:initial; } /* correction des styles spip_formulaires appliques par defaut (grr) */ diff --git a/www/plugins-dist/porte_plume/javascript/jquery.previsu_spip.js b/www/plugins-dist/porte_plume/javascript/jquery.previsu_spip.js index e8ef8c17..5e57baa7 100644 --- a/www/plugins-dist/porte_plume/javascript/jquery.previsu_spip.js +++ b/www/plugins-dist/porte_plume/javascript/jquery.previsu_spip.js @@ -32,15 +32,14 @@ mark = $(this).parent().parent(); objet = mark.parents('.formulaire_spip')[0].className.match(/formulaire_editer_(\w+)/); champ = mark.parents('li')[0].className.match(/editer_(\w+)/); + dir = mark.find('textarea').attr('dir'); $(mark).find('.markItUpPreview').height( $(mark).find('.markItUpHeader').height() + $(mark).find('.markItUpEditor').height() + $(mark).find('.markItUpFooter').height() ); - $(mark).find('.markItUpHeader').hide(); - $(mark).find('.markItUpEditor').hide(); - $(mark).find('.markItUpFooter').hide(); + $(mark).find('.markItUpHeader,.markItUpEditor,.markItUpFooter').hide(); $(this).addClass('on').next().removeClass('on'); $(mark).find('.markItUpPreview').show() .addClass('ajaxLoad') @@ -50,7 +49,9 @@ (objet ? objet[1] : '')) ) .removeClass('ajaxLoad'); - + if(dir) + $(mark).find('.markItUpPreview').attr('dir',dir); + //ouvre un nouvel onglet lorsqu'on clique sur un lien dans la prévisualisation $(".markItUpPreview a").attr("target","blank"); @@ -59,15 +60,12 @@ $('.previsuEditer').click(function(){ mark = $(this).parent().parent(); $(mark).find('.markItUpPreview').hide(); - $(mark).find('.markItUpHeader').show(); - $(mark).find('.markItUpEditor').show(); - $(mark).find('.markItUpFooter').show(); + $(mark).find('.markItUpHeader,.markItUpEditor,.markItUpFooter').show(); $(this).addClass('on').prev().removeClass('on'); return false; }); } - function renderPreview(val, champ, objet) { var phtml; if (options.previewParserPath !== '') { diff --git a/www/plugins-dist/porte_plume/paquet.xml b/www/plugins-dist/porte_plume/paquet.xml index 77b84cc0..67eb8281 100644 --- a/www/plugins-dist/porte_plume/paquet.xml +++ b/www/plugins-dist/porte_plume/paquet.xml @@ -1,7 +1,7 @@ (#GET{textes}|table_valeur{id_rubrique})] - [

(#GET{textes}|table_valeur{surtitre})

] -

[(#INFO_STATUT{#OBJET,#ID_OBJET}|puce_statut{#OBJET}) ][(#GET{textes}|table_valeur{titre}|sinon{<:info_sans_titre:>})]

- [

(#GET{textes}|table_valeur{soustitre})

] + [

(#GET{textes}|table_valeur{surtitre}|interdire_scripts)

] +

[(#INFO_STATUT{#OBJET,#ID_OBJET}|puce_statut{#OBJET}) ][(#GET{textes}|table_valeur{titre}|sinon{<:info_sans_titre:>}|interdire_scripts)]

+ [

(#GET{textes}|table_valeur{soustitre}|interdire_scripts)

]
diff --git a/www/plugins-dist/sites/genie/syndic.php b/www/plugins-dist/sites/genie/syndic.php index 17f7789f..eb474373 100644 --- a/www/plugins-dist/sites/genie/syndic.php +++ b/www/plugins-dist/sites/genie/syndic.php @@ -37,6 +37,7 @@ function executer_une_syndication() { // On va tenter un site 'sus' ou 'off' de plus de 24h, et le passer en 'off' // s'il echoue $where = sql_in("syndication", array('sus','off')) . " + AND statut<>'refuse' AND NOT(" . sql_date_proche('date_syndic', (0 - _PERIODE_SYNDICATION_SUSPENDUE) , "MINUTE") . ')'; $id_syndic = sql_getfetsel("id_syndic", "spip_syndic", $where, '', "date_syndic", "1"); if ($id_syndic) { @@ -46,6 +47,7 @@ function executer_une_syndication() { // Et un site 'oui' de plus de 2 heures, qui passe en 'sus' s'il echoue $where = "syndication='oui' + AND statut<>'refuse' AND NOT(" . sql_date_proche('date_syndic', (0 - _PERIODE_SYNDICATION) , "MINUTE") . ')'; $id_syndic = sql_getfetsel("id_syndic", "spip_syndic", $where, '', "date_syndic", "1"); diff --git a/www/plugins-dist/sites/inc/syndic.php b/www/plugins-dist/sites/inc/syndic.php index 8b0ac69f..56d0e2d1 100644 --- a/www/plugins-dist/sites/inc/syndic.php +++ b/www/plugins-dist/sites/inc/syndic.php @@ -326,7 +326,7 @@ function my_strtotime($la_date, $lang=null) { // par la version anglaise avant de faire strtotime if ($lang){ // "fr-fr" - $lang = reset(explode("-",$lang)); + list($lang) = explode("-", $lang); static $months = null; if (!isset($months[$lang])){ $prev_lang = $GLOBALS['spip_lang']; diff --git a/www/plugins-dist/sites/paquet.xml b/www/plugins-dist/sites/paquet.xml index c1a5ae0b..7894bd71 100644 --- a/www/plugins-dist/sites/paquet.xml +++ b/www/plugins-dist/sites/paquet.xml @@ -1,7 +1,7 @@ ] diff --git a/www/plugins-dist/svp/inc/svp_depoter_distant.php b/www/plugins-dist/svp/inc/svp_depoter_distant.php index 2ce2688b..d5397410 100644 --- a/www/plugins-dist/svp/inc/svp_depoter_distant.php +++ b/www/plugins-dist/svp/inc/svp_depoter_distant.php @@ -101,7 +101,7 @@ function svp_ajouter_depot($url, &$erreur='') { // On vide les paquets locaux pour mettre a jour leurs donnees relatives au depot // comme les mises a jour disponibles include_spip('inc/svp_depoter_local'); - svp_base_supprimer_paquets_locaux(); + svp_actualiser_paquets_locaux(true); return true; } diff --git a/www/plugins-dist/svp/paquet.xml b/www/plugins-dist/svp/paquet.xml index cb722432..e48afe4e 100644 --- a/www/plugins-dist/svp/paquet.xml +++ b/www/plugins-dist/svp/paquet.xml @@ -1,7 +1,7 @@ extraire_attribut($r[0],'href'), 'class' => extraire_attribut($r[0],'class'), - 'mime' => extraire_attribut($r[0],'type') + 'mime' => extraire_attribut($r[0],'type'), + 'title' => extraire_attribut($r[0],'title'), + 'hreflang' => extraire_attribut($r[0],'hreflang') ); $n = strlen($r[0]); $a -= $n; @@ -541,6 +543,8 @@ function traiter_modeles($texte, $doublons=false, $echap='', $connect='', $liens $contexte['lien'] = str_replace(""",'"', $lien['href']); $contexte['lien_class'] = $lien['class']; $contexte['lien_mime'] = $lien['mime']; + $contexte['lien_title'] = $lien['title']; + $contexte['lien_hreflang'] = $lien['hreflang']; } $modele = recuperer_fond("modeles/dist", $contexte, array(), $connect); } diff --git a/www/prive/formulaires/dater.html b/www/prive/formulaires/dater.html index b076b93c..7bc99da8 100644 --- a/www/prive/formulaires/dater.html +++ b/www/prive/formulaires/dater.html @@ -13,12 +13,12 @@ [ (#GET{erreurs}) ] - [(#ENV*{afficher_#GET{name}}|affdate)] + [(#ENV*{afficher_#GET{name}}|affdate)] [(#ENV{editable}) [<:bouton_changer:> \(#ENV{_label_date}\)] - + @@ -32,7 +32,7 @@ ] [(#ENV*{afficher_#GET{name}}|affdate|sinon{<:jour_non_connu_nc:>})] [(#ENV{editable}) - + diff --git a/www/prive/formulaires/dater.php b/www/prive/formulaires/dater.php index 9b6d65d5..230063ed 100644 --- a/www/prive/formulaires/dater.php +++ b/www/prive/formulaires/dater.php @@ -100,6 +100,12 @@ function formulaires_dater_charger_dist($objet, $id_objet, $retour='', $options= $valeurs['_label_date'] = (($statut == 'publie')? _T('texte_date_publication_objet'): _T('texte_date_creation_objet')); $valeurs['_saisie_en_cours'] = (_request('date_jour')!==null); + // cas ou l'on ne peut pas dater mais on peut modifier la date de redac anterieure + // https://core.spip.net/issues/3494 + $valeurs['_editer_date'] = $valeurs['editable']; + if ($valeurs['_editer_date_anterieure'] AND !$valeurs['editable']){ + $valeurs['editable'] = autoriser('modifier',$objet,$id_objet); + } return $valeurs; } @@ -175,14 +181,19 @@ function formulaires_dater_traiter_dist($objet, $id_objet, $retour=''){ $set = array(); - if (!$d = dater_recuperer_date_saisie(_request('date_jour'))) - $d = array(date('Y'),date('m'),date('d')); - if (!$h = dater_recuperer_heure_saisie(_request('date_heure'))) - $h = array(0,0); + $charger = charger_fonction("charger","formulaires/dater/"); + $v = $charger($objet, $id_objet, $retour, $options); + + if ($v['_editer_date']){ + if (!$d = dater_recuperer_date_saisie(_request('date_jour'))) + $d = array(date('Y'),date('m'),date('d')); + if (!$h = dater_recuperer_heure_saisie(_request('date_heure'))) + $h = array(0,0); - $set[$champ_date] = sql_format_date($d[0], $d[1], $d[2], $h[0], $h[1]); + $set[$champ_date] = sql_format_date($d[0], $d[1], $d[2], $h[0], $h[1]); + } - if (isset($desc['field']['date_redac'])){ + if (isset($desc['field']['date_redac']) AND $v['_editer_date_anterieure']){ if (!_request('date_redac_jour') OR _request('sans_redac')) $set['date_redac'] = sql_format_date(0,0,0,0,0,0); else { @@ -193,8 +204,18 @@ function formulaires_dater_traiter_dist($objet, $id_objet, $retour=''){ $set['date_redac'] = sql_format_date($d[0], $d[1], $d[2], $h[0], $h[1]); } } - include_spip('action/editer_objet'); - objet_modifier($objet, $id_objet, $set); + + if (count($set)){ + $publie_avant = objet_test_si_publie($objet,$id_objet); + include_spip('action/editer_objet'); + objet_modifier($objet, $id_objet, $set); + $publie_apres = objet_test_si_publie($objet,$id_objet); + if ($publie_avant !== $publie_apres){ + // on refuse ajax pour forcer le rechargement de la page ici + // on refera traiter une 2eme fois, mais c'est sans consequence + refuser_traiter_formulaire_ajax(); + } + } } if ($retour) diff --git a/www/prive/javascript/ajaxCallback.js b/www/prive/javascript/ajaxCallback.js index 3cece6ef..3df5c884 100644 --- a/www/prive/javascript/ajaxCallback.js +++ b/www/prive/javascript/ajaxCallback.js @@ -870,12 +870,13 @@ function parametre_url(url,c,v,sep,force_vide){ if (p>0) a=url.substring(0,p); args = url.substring(p+1).split('&'); } - else - a=url; + else + a=url; var regexp = new RegExp('^(' + c.replace('[]','\\[\\]') + '\\[?\\]?)(=.*)?$'); var ajouts = []; var u = (typeof(v)!=='object')?encodeURIComponent(v):v; var na = []; + var v_read = null; // lire les variables et agir for(var n=0;n2 && typeof r[2]!=='undefined')?r[2].substring(1):''; + // c'est un tableau, on memorise les valeurs + if (r[1].substr(-2) == '[]') { + if (!v_read) v_read = []; + v_read.push((r.length>2 && typeof r[2]!=='undefined')?r[2].substring(1):''); + } + // c'est un scalaire, on retourne direct + else { + return (r.length>2 && typeof r[2]!=='undefined')?r[2].substring(1):''; + } } // suppression else if (!v.length) { } // Ajout. Pour une variable, remplacer au meme endroit, // pour un tableau ce sera fait dans la prochaine boucle - else if (r[1].substring(-2) != '[]') { + else if (r[1].substr(-2) != '[]') { na.push(r[1]+'='+u); ajouts.push(r[1]); } - else na.push(args[n]); + /* Pour les tableaux ont laisse tomber les valeurs de départ, on + remplira à l'étape suivante */ + // else na.push(args[n]); } else na.push(args[n]); } - if (v==null) return v; // rien de trouve + if (v==null) return v_read; // rien de trouve ou un tableau // traiter les parametres pas encore trouves if (v || v.length || force_vide) { ajouts = "="+ajouts.join("=")+"="; diff --git a/www/prive/javascript/jquery.autosave.js b/www/prive/javascript/jquery.autosave.js index e9619a8d..64ef2d24 100644 --- a/www/prive/javascript/jquery.autosave.js +++ b/www/prive/javascript/jquery.autosave.js @@ -27,7 +27,7 @@ var contenu = $(this).serialize(); // ajoutons un timestamp var d=new Date(); - contenu = contenu + "&__timestamp=" + d.getTime(); + contenu = contenu + "&__timestamp=" + Math.round(d.getTime()/1000); $.post(opt.url, { 'action': 'session', 'var': 'autosave_' + $('input[name=autosave]', this).val(), diff --git a/www/prive/objets/liste/articles.html b/www/prive/objets/liste/articles.html index c34d2248..a793bca9 100644 --- a/www/prive/objets/liste/articles.html +++ b/www/prive/objets/liste/articles.html @@ -26,7 +26,7 @@ [(#LOGO_ARTICLE|image_reduire{20,26})][(#RANG). ]#TITRE [(#ENV{lang}|=={#LANG}|non) (#LANG)] - [(#DATE|affdate_jourcourt)] + [(#DATE|affdate_jourcourt)] [(#AUTORISER{modifier,article,#ID_ARTICLE}|?{ #ID_ARTICLE, #ID_ARTICLE diff --git a/www/prive/squelettes/ajax.html b/www/prive/squelettes/ajax.html index dcd93191..b6bc56ac 100644 --- a/www/prive/squelettes/ajax.html +++ b/www/prive/squelettes/ajax.html @@ -4,4 +4,4 @@ ] #SET{zajax,#VAL{var_zajax}|_request|replace{\W,''}} - \ No newline at end of file + \ No newline at end of file diff --git a/www/prive/squelettes/head/dist.html b/www/prive/squelettes/head/dist.html index d770c45f..9dc5b631 100644 --- a/www/prive/squelettes/head/dist.html +++ b/www/prive/squelettes/head/dist.html @@ -8,4 +8,4 @@ [(#REM) Si pas de title, celui ci sera mis automatiquement par f_title_auto en capturant le premier

de la page] #SET{paramcss,#REM|parametres_css_prive} -#PIPELINE{header_prive,#INCLURE{fond=prive/squelettes/inclure/head,titre,minipres,paramcss=#GET{paramcss}}} \ No newline at end of file +#PIPELINE{header_prive,#INCLURE{fond=prive/squelettes/inclure/head,titre,minipres,paramcss=#GET{paramcss},espace_prive}} \ No newline at end of file diff --git a/www/prive/squelettes/structure.html b/www/prive/squelettes/structure.html index b9dd9878..7520bd83 100644 --- a/www/prive/squelettes/structure.html +++ b/www/prive/squelettes/structure.html @@ -8,7 +8,7 @@ - + - + diff --git a/www/squelettes-dist/robots.txt.html b/www/squelettes-dist/robots.txt.html index b637143a..8a904740 100644 --- a/www/squelettes-dist/robots.txt.html +++ b/www/squelettes-dist/robots.txt.html @@ -7,6 +7,7 @@ User-agent: * Allow: /local/cache-css/ +Allow: /local/cache-js/ Disallow: /local/ Disallow: /ecrire/ Disallow: /plugins-dist/ @@ -17,4 +18,4 @@ Disallow: /squelettes-dist/ Disallow: /squelettes/ Crawl-delay: 1 -Sitemap: #URL_SITE_SPIP/sitemap.xml \ No newline at end of file +Sitemap: #URL_SITE_SPIP/sitemap.xml diff --git a/www/svn.revision b/www/svn.revision index 01119958..18a77d5f 100644 --- a/www/svn.revision +++ b/www/svn.revision @@ -1,10 +1,10 @@ -Origine: svn://trac.rezo.net/spip/tags/spip-3.0.20 -Revision: 22255 -Dernier commit: 2015-06-23 14:49:44 +0200 +Origine: svn://trac.rezo.net/spip/tags/spip-3.0.21 +Revision: 22462 +Dernier commit: 2015-10-31 22:17:30 +0100 -svn://trac.rezo.net/spip/tags/spip-3.0.20 -22255 -2015-06-23 14:49:44 +0200 +svn://trac.rezo.net/spip/tags/spip-3.0.21 +22462 +2015-10-31 22:17:30 +0100 \ No newline at end of file -- 2.20.1