26 Commits

Author SHA1 Message Date
Matthieu Marcillaud 0cb72efbf5 Version 3.2.8 1 year ago
Cerdic a5cda7ff8c Si une page preview est visualisee dans un element embed on sandbox l'element et on redirige sur la home pour eviter toute poupee russe 1 year ago
Matthieu Marcillaud 6c2e56441e On intègre plugins-dist.json à la place de .gitsvnextmodules pour lister les plugins-dist. Report de 7306ba9a sans bigup. 1 year ago
Matthieu Marcillaud 10718d144b Lorsqu’un champ date contient un souligné, tel que "date_modif_manuelle", permettre d’utiliser les critères {age_modif_manuelle} et consœurs (age_relatif_modif_manuelle, mois_modif_manuelle, ...) 1 year ago
nicod_ 85e8576b45 issue_4549 (!58) 1 year ago
Cerdic f868732dee #4494 : masquer les cookies sensible de le phpinfo 1 year ago
Cerdic eaa08a27c1 Ajouter des logs sur le genie optimiser, dans un log dedie, c'est bien le moins qu'on puisse faire pour savoir un peu ce qui s'est passe 1 year ago
Cerdic 978cec0d54 Complement a 52764a1611 : permettre d'utiliser une vue aussi pour une table de liens, en declarant les cles dans tables_auxiliaires 1 year ago
Cerdic 8158f8b6fd Fix petit cas tordu sur trouver_table() quand on l'utilise sur une vue qui est un filtre d'une table reelle : sql_showtable() trouve bien les champs mais pas les cles (qui n'ont pas de sens en general sur une vue) 1 year ago
Cerdic 6418ceb405 cot cot cot... 1 year ago
Cerdic e593f2fbb3 _oups donc (aka un base64_encode ca fait pas de mal) 1 year ago
Cerdic 6b5de38ac4 Divers petites sanitization et une balise manquante #4494 1 year ago
RastaPopoulos f6cfbce169 Corriger un bug présent dans plusieurs navigateurs, qui fait que ça agrandit tous les fieldsets dès qu'il y a un élément qui déborde dedans. https://stackoverflow.com/a/17863685 1 year ago
b_b 925abdf1d5 API modifier : passer l'éventuelle la liste de champs fixe au pipeline pre_edition 1 year ago
b_b 319b9acbff corriger le filtre singuler_ou_pluriel quand la valeur est 0 1 year ago
b_b 44ebe49279 Améliorer le filtre singulier_ou_pluriel pour prendre en compte les valeurs non entières (!41) 1 year ago
Matthieu Marcillaud bd9957b0bb Sanitiser les préférences utilisateurs. (g0uz) 1 year ago
Cerdic ae4267eba1 n'enregistrer que les preferences licites (g0uZ) 1 year ago
Cerdic 0880b517b0 Fix petite salade autour de la suppression des resultats de recherche trop vieux : 1 year ago
Maïeul f6e3627c58 filtre |balise_svg > supprimer l'entête XML + effacer pour gagner un peu de place les commentaires XML 2 years ago
Cerdic f02e933cca class grostitre manquante dans l'echafaudage 2 years ago
Cerdic db97552ffa Permettre de preciser le #SELF utilise par la pagination dans l'appel de la balise pagination, ce qui permet de nettoyer eventuellement une variable indesirable : #PAGINATION{prive,self=#SELF|parametre_url{...}} 2 years ago
Cerdic adda869ce8 Fix : utiliser propre sur les nom de plugin est dangereux, car certains plugins peuvent enrichir avec un lien et comme on met le nom dans un lien ca casse - surtout que pour les plugin.xml on utilisait typo. On utilise donc maintenant typo sur tous les titre de plugin 2 years ago
ben.spip@gmail.com f7a93668f3 SPIP 3.2.7 2 years ago
ben.spip@gmail.com d3c2db6b9a la 3.2.6 est stable (realet) 2 years ago
ben.spip@gmail.com a306385cca SPIP 3.2.6 2 years ago
  1. 92
      CHANGELOG.TXT
  2. 7
      ecrire/action/editer_liens.php
  3. 15
      ecrire/base/trouver_table.php
  4. 14
      ecrire/genie/optimiser.php
  5. 19
      ecrire/inc/commencer_page.php
  6. 24
      ecrire/inc/filtres.php
  7. 1
      ecrire/inc/modifier.php
  8. 6
      ecrire/inc/pipelines.php
  9. 8
      ecrire/inc/precharger_objet.php
  10. 9
      ecrire/inc/prepare_recherche.php
  11. 65
      ecrire/inc/utils.php
  12. 8
      ecrire/inc_version.php
  13. 4
      ecrire/index.php
  14. 4
      ecrire/paquet.xml
  15. 12
      ecrire/plugins/afficher_plugin.php
  16. 7
      ecrire/public/aiguiller.php
  17. 13
      ecrire/public/balises.php
  18. 6
      ecrire/public/criteres.php
  19. 1
      ecrire/public/tracer.php
  20. 3
      ecrire/req/mysql.php
  21. 3
      ecrire/req/sqlite_generique.php
  22. 106
      plugins-dist.json
  23. 2
      prive/echafaudage/contenu/objets.html
  24. 20
      prive/formulaires/configurer_preferences.php
  25. 6
      prive/formulaires/dateur/inc-dateur.html
  26. 16
      prive/formulaires/editer_liens.php
  27. 1
      prive/formulaires/editer_logo.php
  28. 1
      prive/squelettes/structure.html
  29. 2
      prive/themes/spip/forms.css.html

92
CHANGELOG.TXT

@ -1,3 +1,95 @@
SPIP-Core v3.2.7 -> v3.2.8 (29 septembre 2020)
----------------------------------------------
a5cda7ff8 | cedric | 2020-09-17 | Si une page preview est visualisee dans un element embed on sandbox l'element et on redirige sur la home pour eviter t..
6c2e56441 | marcimat | 2020-09-28 | On intègre plugins-dist.json à la place de .gitsvnextmodules pour lister les plugins-dist. Report de 7306ba9a sans big..
10718d144 | marcimat | 2020-09-08 | Lorsqu’un champ date contient un souligné, tel que "date_modif_manuelle", permettre d’utiliser les critères {age_modif..
85e8576b4 | nicod_ | 2020-09-11 | issue_4549 (!58)
f868732de | cedric | 2020-09-11 | #4494 : masquer les cookies sensible de le phpinfo
eaa08a27c | cedric | 2020-09-11 | Ajouter des logs sur le genie optimiser, dans un log dedie, c'est bien le moins qu'on puisse faire pour savoir un peu ..
978cec0d5 | cedric | 2020-09-11 | Complement a 52764a1611 : permettre d'utiliser une vue aussi pour une table de liens, en declarant les cles dans table..
8158f8b6f | cedric | 2020-09-02 | Fix petit cas tordu sur trouver_table() quand on l'utilise sur une vue qui est un filtre d'une table reelle : sql_show..
6418ceb40 | cedric | 2020-05-27 | cot cot cot...
e593f2fbb | cedric | 2020-05-27 | _oups donc (aka un base64_encode ca fait pas de mal)
6b5de38ac | cedric | 2020-05-19 | Divers petites sanitization et une balise manquante #4494
f6cfbce16 | rastapopoulos | 2020-06-24 | Corriger un bug présent dans plusieurs navigateurs, qui fait que ça agrandit tous les fieldsets dès qu'il y a un éléme..
925abdf1d | bruno | 2020-06-23 | API modifier : passer l'éventuelle la liste de champs fixe au pipeline pre_edition
319b9acbf | bruno | 2020-06-19 | corriger le filtre singuler_ou_pluriel quand la valeur est 0
44ebe4927 | bruno | 2020-06-16 | Améliorer le filtre singulier_ou_pluriel pour prendre en compte les valeurs non entières (!41)
bd9957b0b | marcimat | 2020-06-05 | Sanitiser les préférences utilisateurs. (g0uz)
ae4267eba | cedric | 2020-06-05 | n'enregistrer que les preferences licites (g0uZ)
0880b517b | cedric | 2020-05-29 | Fix petite salade autour de la suppression des resultats de recherche trop vieux : - on utilise le champ maj comme ind..
f6e3627c5 | maieul | 2019-09-19 | filtre |balise_svg > supprimer l'entête XML + effacer pour gagner un peu de place les commentaires XML
f02e933cc | cedric | 2020-03-11 | class grostitre manquante dans l'echafaudage
db97552ff | cedric | 2020-02-10 | Permettre de preciser le #SELF utilise par la pagination dans l'appel de la balise pagination, ce qui permet de nettoy..
adda869ce | cedric | 2020-01-22 | Fix : utiliser propre sur les nom de plugin est dangereux, car certains plugins peuvent enrichir avec un lien et comme..
f7a93668f | ben.spip | 2019-12-12 | SPIP 3.2.7
d3c2db6b9 | ben.spip | 2019-12-12 | la 3.2.6 est stable (realet)
a306385cc | ben.spip | 2019-12-12 | SPIP 3.2.6
SPIP-plugins-dist v3.2.7 -> v3.2.8 (29 septembre 2020)
------------------------------------------------------
aide | fe76f13 | spip.franck | 2020-01-01 | Bonne année "aide" de spip 3.2
archiviste | 94be628 | spip.franck | 2020-01-01 | Bonne année "archives" de spip 3.2
breves | 7f4e2ac | spip.franck | 2020-01-01 | Bonne Année "breves" de spip 3.2
compresseur | 4785c1a | cedric | 2020-06-04 | Tentative de fix de l'inflation du repertoire local/cache-css : tenir compte des timestamps des fichiers a concatener ..
compresseur | 2372cf3 | spip.franck | 2020-01-01 | Bonne Année "compresseur" de spip 3.2
dump | 0955b05 | spip.franck | 2020-01-01 | Bonne Année "dump" de spip 3.2
filtres_images | 190bf90 | spip.franck | 2020-01-01 | Bonne année "filtres_images" de spip 3.2
forum | 2e18f59 | spip.franck | 2020-01-01 | Bonne année "forum" de spip 3.2
medias | bc5a517 | cedric | 2020-06-05 | Utilisation des fonctions de sanitization sur galerie et _galerie en lien avec #4494 du core
medias | a4484ea | spip.franck | 2020-01-02 | ajout du cartouche spip avec accord de cerdic (spip 3.2)
medias | fa3c5b3 | spip.franck | 2020-01-01 | Bonne année "medias" de spip 3.2
mots | 012f539 | spip.franck | 2020-01-01 | Bonne année "mots" de spip 3.2
organiseur | 4a30bd8 | marcimat | 2020-09-23 | FullCalendar 3.10.2 (c’est vieux, mais des bugs en moins) et Moment 2.29 + Correction sur les rendez vous dont le cale..
organiseur | 53a76b0 | marcimat | 2020-09-23 | Notice PHP en moins.
organiseur | aa7eb97 | spip.franck | 2020-01-01 | Bonne année "organiseur" de spip 3.2
petitions | 1f40e1b | spip.franck | 2020-01-01 | Bonne année "petitions" de spip 3.2
porte_plume | 57cae2a | cedric | 2020-08-25 | Deux constantes pour piloter une desactivation partielle ou totale du porte_plume : * `define('_PORTE_PLUME_INSERER_AU..
revisions | 44d7df8 | spip.franck | 2020-01-01 | Bonne année "revisions" de spip 3.2
safehtml | c404945 | spip.franck | 2020-01-01 | Bonne année "safehtml" de spip 3.2
sites | 0f362a7 | spip.franck | 2020-01-01 | Bonne année "sites" de spip 3.2
squelettes_par_rubrique | 4a70c9f | spip.franck | 2020-01-01 | Bonne année "squelettes_par_rubrique" de spip 3.2
statistiques | d64d037 | spip.franck | 2020-01-01 | Bonne année "statistiques" de spip 3.2
svp | dcaf67b | cedric | 2020-03-31 | Support des logos au format svg en provenance de l'empaqueteur, meme si le paquet.xml reference un png + support de la..
svp | 0e1d905 | spip.franck | 2020-01-01 | Bonne année "svp" de spip 3.2
svp | 9f8caf6 | eric | 2019-12-23 | Utiliser le logo SVG ou PNG si il existe en se servant de la nouvelle balise incluse par Smart-Paquets. Compatible ave..
textwheel | 77f1aac | cyrille | 2020-06-11 | éviter un warning lorsqu'il y a une ligne de cellules vides dans un table
textwheel | 578a21f | cyrille | 2020-06-11 | éviter un warning lorsqu'il y a une ligne de cellules vides dans un table
textwheel | 216519a | spip.franck | 2020-01-01 | Bonne année "textwheel" de spip 3.2
urls_etendues | b74a272 | spip.franck | 2020-01-01 | Bonne année "urls_etendues" de spip 3.2
vertebres | d84a81e | spip.franck | 2020-01-01 | Bonne année "vertebres" de spip 3.2
squelettes-dist | ea695c1 | spip.franck | 2020-01-01 | Bonne Année "dist" de spip 3.2
SPIP-Core spip-3.2.6 -> spip-3.2.7 12 décembre 2019
-------------------------------------------------------------
r24471 | ben | (jeu. 12 déc. 2019) | la 3.2.6 est stable (realet)
SPIP-Core spip-3.2.5 -> spip-3.2.6 10 décembre 2019
-------------------------------------------------------------
r24399 | cedric | (lun. 16 sept. 2019) | Mise a jour de l'ecran de securite
r24403 | ben | (lun. 16 sept. 2019) | SPIP 3.2.5
r24411 | marcimat | (mar. 17 sept. 2019) | Fix #4381 : coquille de priorités d’opérateurs sur un test (Équipement).
r24420 | cedric | (mar. 24 sept. 2019) | 2 constantes _SPIP_VERSION_ID et _SPIP_EXTRA_VERSION pour faciliter les tests de version dans les plugins
r24421 | cedric | (mar. 24 sept. 2019) | coherence du paquet.xml avec inc_version
r24431 | cedric | (ven. 22 nov. 2019) | Fix opcache invalidation sur les mutus qui n'ont pas la fonction opcache_invalidate() (Jean Marie)
r24440 | bruno | (mer. 04 déc. 2019) | des fichiers CACHEDIR.TAG fonctionnelsretour sur https://core.spip.net/projects/spip/repository/revisions/23514ref https://core.spip.net/issues/2346 & https://bford.info/cachedir/
r24448 | cedric | (mer. 04 déc. 2019) | Feu les temps modernes
SPIP-plugins-dist spip-3.2.5 -> spip-3.2.6 10 décembre 2019
-------------------------------------------------------------
r117876 | cedric | (mar. 17 sept. 2019) | Report de r117577 et 117578 : Dans le formulaire d'oubli de mot de passe, ne pas dire si l'email est inscrit sur le site ou non, toujours afficher le meme resultat ​https://core.spip.net/issues/4171
r117892 | marcimat | (mer. 18 sept. 2019) | Ticket #4383 : Bien prendre en compte les nécessite / utilise des paquets.xml qui ont une balise `<spip>` intégrée. [report de r117891]
r118163 | Cerdic | (mer. 16 oct. 2019) | Reparer le formulaire de saisie d'un nouveau mot de passe qui ne marchait plus avec les navigateur bases sur webkit/blink : ceux-ci croient reconnaitre le formulaire de login, et preremplissent avec les identifiants enregistres. Du coup faute de mieux ils mettaient le login dans le champ nobot, declenchant un fort peu avenant 'Rien a faire ici' pour les utilisateurs
r118195 | Cerdic | (ven. 18 oct. 2019) | Trop de n attire l'attention (dd)
r118593 | marcimat | (mer. 13 nov. 2019) | Report de r118592 : Ne pas transmettre le paramètre "objet" aux listes d’objets dont on a trouvé le squelette, c’est contre productif, particulièrement lorsque ce paramètre peut servir à autre chose, comme dans le plugin albums.
r118900 | marcimat | (mer. 04 déc. 2019) | Rétablir l’ordre un minimum ; on ne tolère aucune manifestation en chaîne. (Alexis Z)
r118901 | marcimat | (mer. 04 déc. 2019) | Version 2.20.31
SPIP-Core spip-3.2.4 -> spip-3.2.5 16 septembre 2019
-------------------------------------------------------------

7
ecrire/action/editer_liens.php

@ -211,6 +211,7 @@ function objet_trouver_liens($objets_source, $objets_lies, $cond = null) {
* @return int
*/
function objet_optimiser_liens($objets_source, $objets_lies) {
spip_log("objet_optimiser_liens : ".json_encode($objets_source) . ', ' . json_encode($objets_lies), 'genie'._LOG_DEBUG);
return objet_traiter_liaisons('lien_optimise', $objets_source, $objets_lies);
}
@ -652,8 +653,10 @@ function lien_optimise($objet_source, $primary, $table_lien, $id, $objets) {
array("$primary=" . $row['id'], "id_objet=" . $row['id_objet'], "objet=" . sql_quote($type)));
if ($e != false) {
$dels += $e;
spip_log("Entree " . $row['id'] . "/" . $row['id_objet'] . "/$type supprimee dans la table $table_lien",
_LOG_INFO_IMPORTANTE);
spip_log(
"lien_optimise: Entree " . $row['id'] . "/" . $row['id_objet'] . "/$type supprimee dans la table $table_lien",
'genie'._LOG_INFO_IMPORTANTE
);
}
}
}

15
ecrire/base/trouver_table.php

@ -152,7 +152,7 @@ function base_trouver_table_dist($nom, $serveur = '', $table_spip = true) {
$desc = sql_showtable($nom_sql, $table_spip, $serveur);
if (!$desc or !$desc['field']) {
if (!$fdesc) {
spip_log("trouver_table: table inconnue '$serveur' '$nom'", _LOG_INFO_IMPORTANTE);
spip_log("trouver_table: table inconnue '$serveur' '$nom'", 'base' . _LOG_INFO_IMPORTANTE);
return null;
}
@ -162,6 +162,12 @@ function base_trouver_table_dist($nom, $serveur = '', $table_spip = true) {
$desc['exist'] = false;
} else {
$desc['exist'] = true;
// gerer le cas des cles vides (echec de l'analyse sur une vue par exemple)
// pour recuperer la declaration de lister_tables_objets_sql() si il y en a une
if (! $desc['key']) {
spip_log("trouver_table: table sans cle '$serveur' '$nom'", 'base');
unset($desc['key']);
}
}
$desc['table'] = $desc['table_sql'] = $nom_sql;
@ -171,6 +177,13 @@ function base_trouver_table_dist($nom, $serveur = '', $table_spip = true) {
// en lui passant les infos connues
// $desc est prioritaire pour la description de la table
$desc = array_merge(lister_tables_objets_sql($nom_sql, $desc), $desc);
// s'assurer qu'on a toujours un 'key'
if (!isset($desc['key']) && !empty($fdesc['key'])){
$desc['key'] = $fdesc['key'];
}
if (! isset($desc['key'])) {
$desc['key'] = array();
}
// si tables_objets_sql est bien fini d'init, on peut cacher
$connexion['tables'][$nom_sql] = $desc;

14
ecrire/genie/optimiser.php

@ -84,15 +84,16 @@ function optimiser_base_une_table() {
$tables[] = array_shift($row);
}
spip_log("optimiser_base_une_table ".json_encode($tables), 'genie'._LOG_DEBUG);
if ($tables) {
$table_op = intval(lire_config('optimiser_table', 0) + 1) % sizeof($tables);
ecrire_config('optimiser_table', $table_op);
$q = $tables[$table_op];
spip_log("debut d'optimisation de la table $q");
spip_log("optimiser_base_une_table : debut d'optimisation de la table $q", 'genie'._LOG_DEBUG);
if (sql_optimize($q)) {
spip_log("fin d'optimisation de la table $q");
spip_log("optimiser_base_une_table : fin d'optimisation de la table $q", 'genie'._LOG_DEBUG);
} else {
spip_log("Pas d'optimiseur necessaire");
spip_log("optimiser_base_une_table : Pas d'optimiseur necessaire", 'genie'._LOG_DEBUG);
}
}
}
@ -128,7 +129,7 @@ function optimiser_sansref($table, $id, $sel, $and = '') {
if ($in) {
sql_delete($table, sql_in($id, array_keys($in)) . ($and ? " AND $and" : ''));
spip_log("Numeros des entrees $id supprimees dans la table $table: " . implode(', ', array_keys($in)));
spip_log("optimiser_sansref: Numeros des entrees $id supprimees dans la table $table: " . implode(', ', array_keys($in)), 'genie'._LOG_DEBUG);
}
return count($in);
@ -220,7 +221,6 @@ function optimiser_base_disparus($attente = 86400) {
'data' => $n
));
if (!$n) {
spip_log("Optimisation des tables: aucun lien mort");
}
spip_log("optimiser_base_disparus : {$n} lien(s) mort(s)", 'genie'._LOG_DEBUG);
}

19
ecrire/inc/commencer_page.php

@ -157,16 +157,14 @@ function init_body($rubrique = 'accueil', $sous_rubrique = 'accueil', $id_rubriq
* @return string Classes CSS (séparées par des espaces)
*/
function init_body_class() {
$GLOBALS['spip_display'] = isset($GLOBALS['visiteur_session']['prefs']['display'])
? $GLOBALS['visiteur_session']['prefs']['display']
: 2;
$spip_display_navigation = isset($GLOBALS['visiteur_session']['prefs']['display_navigation'])
? $GLOBALS['visiteur_session']['prefs']['display_navigation']
: 'navigation_avec_icones';
$spip_display_outils = isset($GLOBALS['visiteur_session']['prefs']['display_outils'])
? ($GLOBALS['visiteur_session']['prefs']['display_outils'] ? 'navigation_avec_outils' : 'navigation_sans_outils')
$prefs = isset($GLOBALS['visiteur_session']['prefs']) ? $GLOBALS['visiteur_session']['prefs'] : array();
$GLOBALS['spip_display'] = isset($prefs['display']) ? (int) $prefs['display'] : 2;
$spip_display_navigation = isset($prefs['display_navigation']) ? spip_sanitize_classname($prefs['display_navigation']) : 'navigation_avec_icones';
$spip_display_outils = isset($prefs['display_outils'])
? ($prefs['display_outils'] ? 'navigation_avec_outils' : 'navigation_sans_outils')
: 'navigation_avec_outils';
$GLOBALS['spip_ecran'] = isset($_COOKIE['spip_ecran']) ? $_COOKIE['spip_ecran'] : "etroit";
$GLOBALS['spip_ecran'] = isset($_COOKIE['spip_ecran']) ? spip_sanitize_classname($_COOKIE['spip_ecran']) : "etroit";
$display_class = array(
0 => 'icones_img_texte'
@ -176,7 +174,8 @@ function init_body_class() {
3 => 'icones_img'
);
return $GLOBALS['spip_ecran'] . " $spip_display_navigation $spip_display_outils " . $display_class[$GLOBALS['spip_display']];
$classes = $GLOBALS['spip_ecran'] . " $spip_display_navigation $spip_display_outils " . $display_class[$GLOBALS['spip_display']];
return spip_sanitize_classname($classes);
}

24
ecrire/inc/filtres.php

@ -352,6 +352,17 @@ function filtre_setenv(&$Pile, $val, $key, $continue = null) {
return $continue ? $val : '';
}
/**
* @param array $Pile
* @param array|string $keys
* @return string
*/
function filtre_sanitize_env(&$Pile, $keys) {
$Pile[0] = spip_sanitize_from_request($Pile[0], $keys);
return '';
}
/**
* Filtre `debug` qui affiche un debug de la valeur en entrée
*
@ -2789,9 +2800,10 @@ function filtre_pagination_dist(
return $ancres[$ancre];
}
$self = (empty($env['self']) ? self() : $env['self']);
$pagination = array(
'debut' => $debut,
'url' => parametre_url(self(), 'fragment', ''), // nettoyer l'id ahah eventuel
'url' => parametre_url($self, 'fragment', ''), // nettoyer l'id ahah eventuel
'total' => $total,
'position' => intval($position),
'pas' => $pas,
@ -3438,6 +3450,10 @@ function filtre_balise_svg_dist($img, $alt = "", $class = "") {
}
$balise_svg = $match[0];
$balise_svg_source = $balise_svg;
// entete XML à supprimer
$svg = preg_replace(',^\s*<\?xml[^>]*\?' . '>,', '', $svg);
// IE est toujours mon ami
$balise_svg = inserer_attribut($balise_svg, 'focusable', 'false');
if ($class) {
@ -3880,20 +3896,20 @@ function lien_ou_expose($url, $libelle = null, $on = false, $class = "", $title
*
* @param int $nb : le nombre
* @param string $chaine_un : l'item de langue si $nb vaut un
* @param string $chaine_plusieurs : l'item de lanque si $nb > 1
* @param string $chaine_plusieurs : l'item de lanque si $nb >= 2
* @param string $var : La variable à remplacer par $nb dans l'item de langue (facultatif, défaut "nb")
* @param array $vars : Les autres variables nécessaires aux chaines de langues (facultatif)
* @return string : la chaine de langue finale en utilisant la fonction _T()
*/
function singulier_ou_pluriel($nb, $chaine_un, $chaine_plusieurs, $var = 'nb', $vars = array()) {
if (!$nb = intval($nb)) {
if (!is_numeric($nb) or $nb == 0) {
return "";
}
if (!is_array($vars)) {
return "";
}
$vars[$var] = $nb;
if ($nb > 1) {
if ($nb >= 2) {
return _T($chaine_plusieurs, $vars);
} else {
return _T($chaine_un, $vars);

1
ecrire/inc/modifier.php

@ -160,6 +160,7 @@ function objet_modifier_champs($objet, $id_objet, $options, $c = null, $serveur
'spip_table_objet' => $spip_table_objet,
'type' => $objet,
'id_objet' => $id_objet,
'data' => isset($options['data']) ? $options['data'] : null,
'champs' => isset($options['champs']) ? $options['champs'] : array(), // [doc] c'est quoi ?
'serveur' => $serveur,
'action' => isset($options['action']) ? $options['action'] : 'modifier'

6
ecrire/inc/pipelines.php

@ -207,6 +207,12 @@ function f_admin($texte) {
$pos = strlen($texte);
}
$texte = substr_replace($texte, $x, $pos, 0);
// pas de preview en fenetre enfant
$x = "<script type='text/javascript'>const frameEl = window.frameElement;if (frameEl) {frameEl.sandbox='sandbox';window.location.href='".addslashes($GLOBALS['meta']['adresse_site'])."';}</script>";
if (!$pos = stripos($texte, '<head') or !$pos = strpos($texte, '>', $pos)) {
$pos = -1;
}
$texte = substr_replace($texte, $x, $pos+1, 0);
}
if (isset($GLOBALS['affiche_boutons_admin']) and $GLOBALS['affiche_boutons_admin']) {

8
ecrire/inc/precharger_objet.php

@ -50,7 +50,7 @@ function precharger_objet($type, $id_objet, $id_rubrique = 0, $lier_trad = 0, $c
// si l'objet existe deja, on retourne simplement ses valeurs
if (is_numeric($id_objet)) {
return sql_fetsel("*", $table, "$_id_objet=$id_objet");
return sql_fetsel("*", $table, "$_id_objet=".intval($id_objet));
}
// ici, on demande une creation.
@ -133,7 +133,7 @@ function precharger_traduction_objet($type, $id_objet, $id_rubrique = 0, $lier_t
$_id_objet = id_table_objet($table);
// Recuperer les donnees de l'objet original
$row = sql_fetsel("*", $table, "$_id_objet=$lier_trad");
$row = sql_fetsel("*", $table, "$_id_objet=".intval($lier_trad));
if ($row) {
include_spip('inc/filtres');
$row[$champ_titre] = filtrer_entites(objet_T($type, 'info_nouvelle_traduction')) . ' ' . $row[$champ_titre];
@ -172,12 +172,12 @@ function precharger_traduction_objet($type, $id_objet, $id_rubrique = 0, $lier_t
$id_parent = 0;
} else {
// on cherche une rubrique soeur dans la bonne langue
$row_rub = sql_fetsel("id_parent", "spip_rubriques", "id_rubrique=$id_rubrique");
$row_rub = sql_fetsel("id_parent", "spip_rubriques", "id_rubrique=".intval($id_rubrique));
$id_parent = $row_rub['id_parent'];
}
$row_rub = sql_fetsel("id_rubrique", "spip_rubriques",
"lang='" . $GLOBALS['spip_lang'] . "' AND id_parent=$id_parent");
"lang='" . $GLOBALS['spip_lang'] . "' AND id_parent=".intval($id_parent));
if ($row_rub) {
$row['id_rubrique'] = $row_rub['id_rubrique'];
}

9
ecrire/inc/prepare_recherche.php

@ -77,14 +77,14 @@ function inc_prepare_recherche_dist(
$rechercher = false;
$where_resultat_recent = sql_date_proche('maj', (0 - ($delai_fraicheur + 100)), " SECOND");
if (!isset($cache[$serveur][$table][$recherche])) {
$hash_serv = ($serveur ? substr(md5($serveur), 0, 16) : '');
$hash = substr(md5($recherche . $table), 0, 16);
$where = "(resultats.recherche='$hash' AND resultats.table_objet=" . sql_quote($table) . " AND resultats.serveur='$hash_serv')";
$row = sql_fetsel('UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(resultats.maj) AS fraicheur', 'spip_resultats AS resultats',
$where, '', 'fraicheur DESC', '0,1');
$row = sql_fetsel('recherche', 'spip_resultats AS resultats',
$where . " AND $where_resultat_recent", '', '', '0,1');
if (!$row
or ($row['fraicheur'] > $delai_fraicheur)
or (defined('_VAR_MODE') and _VAR_MODE == 'recalcul')
) {
$rechercher = true;
@ -122,8 +122,9 @@ function inc_prepare_recherche_dist(
// pas de AS resultats dans un delete (mysql)
$whered = str_replace(array("resultats.recherche", "resultats.table_objet", "resultats.serveur"),
array("recherche", "table_objet", "serveur"), $where);
sql_delete('spip_resultats',
'NOT(' . sql_date_proche('maj', (0 - ($delai_fraicheur + 100)), " SECOND") . ") OR ($whered)");
"NOT($where_resultat_recent) OR ($whered)");
// inserer les resultats dans la table de cache des resultats
if (count($points)) {

65
ecrire/inc/utils.php

@ -446,6 +446,43 @@ function set_request($var, $val = null, $c = false) {
return false; # n'affecte pas $c
}
/**
* Sanitizer une valeur *SI* elle provient du GET ou POST
* Utile dans les squelettes pour les valeurs qu'on attrape dans le env,
* dont on veut permettre à un squelette de confiance appelant de fournir une valeur complexe
* mais qui doit etre nettoyee si elle provient de l'URL
*
* On peut sanitizer
* - une valeur simple : `$where = spip_sanitize_from_request($value, 'where')`
* - un tableau en partie : `$env = spip_sanitize_from_request($env, ['key1','key2'])`
* - un tableau complet : `$env = spip_sanitize_from_request($env, '*')`
*
* @param string|array $value
* @param string|array $key
* @param string $sanitize_function
* @return array|mixed|string
*/
function spip_sanitize_from_request($value, $key, $sanitize_function='entites_html') {
if (is_array($value)) {
if ($key=='*') {
$key = array_keys($value);
}
if (!is_array($key)) {
$key = [$key];
}
foreach ($key as $k) {
if (!empty($value[$k])) {
$value[$k] = spip_sanitize_from_request($value[$k], $k, $sanitize_function);
}
}
return $value;
}
// si la valeur vient des GET ou POST on la sanitize
if (!empty($value) and $value == _request($key)) {
$value = $sanitize_function($value);
}
return $value;
}
/**
* Tester si une URL est absolue
@ -3125,7 +3162,18 @@ function exec_info_dist() {
include_spip('inc/autoriser');
if (autoriser('webmestre')) {
$cookies_masques = ['spip_session', 'PHPSESSID'];
$cookies_backup = [];
foreach ($cookies_masques as $k) {
if (!empty($_COOKIE[$k])) {
$cookies_backup[$k] = $_COOKIE[$k];
$_COOKIE[$k] = '******************************';
}
}
phpinfo();
foreach ($cookies_backup as $k => $v) {
$_COOKIE[$k] = $v;
}
} else {
include_spip('inc/filtres');
sinon_interdire_acces();
@ -3585,4 +3633,21 @@ if (PHP_VERSION_ID < 50500) {
}
}
}
/**
* Nettoie une chaine pour servir comme classes CSS.
*
* @note
* les classes CSS acceptent théoriquement tous les caractères sauf NUL.
* Ici, on limite (enlève) les caractères autres qu’alphanumérique, espace, - + _ @
*
* @param string|string[] $classes
* @return string|string[]
*/
function spip_sanitize_classname($classes) {
if (is_array($classes)) {
return array_map('spip_sanitize_classname', $classes);
}
return preg_replace("/[^ 0-9a-z_\-+@]/i", "", $classes);
}

8
ecrire/inc_version.php

@ -372,9 +372,11 @@ $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.2.6-dev";
define('_SPIP_VERSION_ID', 30206);
define('_SPIP_EXTRA_VERSION', '-dev');
// le _SPIP_VERSION_ID est un nombre entier représentant le numéro de version (2 chiffres pour chaque 03 + 02 + 06 = 30206
// le _SPIP_EXTRA_VERSION sert à repérer les version dev, beta etc. Pour une version stable il est vide.
$spip_version_branche = "3.2.8";
define('_SPIP_VERSION_ID', 30208);
define('_SPIP_EXTRA_VERSION', '');
// cette version dev accepte tous les plugins compatible avec la version ci-dessous
// a supprimer en phase beta/rc/release

4
ecrire/index.php

@ -147,9 +147,9 @@ elseif (!preg_match(',^[a-z4_][0-9a-z_-]*$,i', $exec)) {
// compatibilite ascendante : obsolete, ne plus utiliser
$GLOBALS['spip_display'] = isset($GLOBALS['visiteur_session']['prefs']['display'])
? $GLOBALS['visiteur_session']['prefs']['display']
? (int) $GLOBALS['visiteur_session']['prefs']['display']
: 0;
$GLOBALS['spip_ecran'] = isset($_COOKIE['spip_ecran']) ? $_COOKIE['spip_ecran'] : "etroit";
$GLOBALS['spip_ecran'] = isset($_COOKIE['spip_ecran']) ? preg_replace('/[^a-z0-9]/i', '', $_COOKIE['spip_ecran']) : "etroit";
// si la langue est specifiee par cookie et ne correspond pas
// (elle a ete changee dans une autre session, et on retombe sur un vieux cookie)

4
ecrire/paquet.xml

@ -1,8 +1,8 @@
<paquet
prefix="spip"
categorie="outil"
version="3.2.6"
etat="dev"
version="3.2.8"
etat="stable"
compatibilite="];["
schema="23375"
documentation="https://www.spip.net"

12
ecrire/plugins/afficher_plugin.php

@ -137,9 +137,9 @@ function plugin_nom($info, $dir_plugins, $plug_file) {
$dir = "$dir_plugins$plug_file";
// Si dtd paquet, on traite le nom soit par son item de langue soit par sa valeur immediate a l'index "nom"
if ($info['dtd'] == "paquet") {
$nom = PtoBR(plugin_propre("{$prefix}_nom", "$dir/lang/paquet-$prefix"));
$nom = plugin_typo("{$prefix}_nom", "$dir/lang/paquet-$prefix");
if (!$nom) {
$nom = PtoBR(propre($info['nom']));
$nom = typo($info['nom']);
}
} else {
$nom = typo(attribut_html($info['nom']));
@ -221,7 +221,7 @@ function plugin_etat_en_clair($etat) {
}
// http://code.spip.net/@plugin_propre
function plugin_propre($texte, $module = '') {
function plugin_propre($texte, $module = '',$propre='propre') {
// retirer le retour a la racine du module, car le find_in_path se fait depuis la racine
if (_DIR_RACINE and strncmp($module, _DIR_RACINE, strlen(_DIR_RACINE)) == 0) {
$module = substr($module, strlen(_DIR_RACINE));
@ -230,7 +230,11 @@ function plugin_propre($texte, $module = '') {
$texte = _T(($module ? "$module:" : '') . $texte, array(), array('force' => false));
}
return propre($texte);
return $propre($texte);
}
function plugin_typo($texte, $module = '') {
return plugin_propre($texte, $module, 'typo');
}

7
ecrire/public/aiguiller.php

@ -15,6 +15,13 @@ if (!defined('_ECRIRE_INC_VERSION')) {
}
function securiser_redirect_action($redirect) {
// cas d'un double urlencode : si un urldecode de l'url n'est pas secure, on retient ca comme redirect
if (strpos($redirect, '%') !== false) {
$r2 = urldecode($redirect);
if (($r3 = securiser_redirect_action($r2)) !== $r2) {
return $r3;
}
}
if ((tester_url_absolue($redirect) or preg_match(',^\w+:,',trim($redirect)))
and !defined('_AUTORISER_ACTION_ABS_REDIRECT')) {
// si l'url est une url du site, on la laisse passer sans rien faire

13
ecrire/public/balises.php

@ -1728,6 +1728,19 @@ function balise_REM_dist($p) {
return $p;
}
/**
* Une balise #NULL quand on a besoin de passer un argument null sur l'appel d'un filtre ou formulaire
* (evite un #EVAL{null})
* @param $p
* @return mixed
*/
function balise_NULL_dist($p) {
$p->code = "null";
$p->interdire_scripts = false;
return $p;
}
/**
* Compile la balise `#HTTP_HEADER` envoyant des entêtes de retour HTTP

6
ecrire/public/criteres.php

@ -1563,11 +1563,11 @@ function critere_where_dist($idb, &$boucles, $crit) {
if (isset($crit->param[0])) {
$_where = calculer_liste($crit->param[0], array(), $boucles, $boucle->id_parent);
} else {
$_where = '@$Pile[0]["where"]';
$_where = 'spip_sanitize_from_request(@$Pile[0]["where"],"where","vide")';
}
if ($crit->cond) {
$_where = "(($_where) ? ($_where) : '')";
$_where = "((\$zzw = $_where) ? \$zzw : '')";
}
if ($crit->not) {
@ -2412,7 +2412,7 @@ function calculer_vieux_in($params) {
* - nom de la colonne de date (si le calcul n'est pas relatif)
**/
function calculer_critere_infixe_date($idb, &$boucles, $col) {
if (!preg_match(",^((age|jour|mois|annee)_relatif|date|mois|annee|jour|heure|age)(_[a-z]+)?$,", $col, $regs)) {
if (!preg_match(",^((age|jour|mois|annee)_relatif|date|mois|annee|jour|heure|age)(_[a-z_]+)?$,", $col, $regs)) {
return '';
}

1
ecrire/public/tracer.php

@ -129,6 +129,7 @@ function chrono_requete($temps) {
foreach ($temps as $k => $v) {
$titre = strip_tags($v[2]);
$href = quote_amp($GLOBALS['REQUEST_URI']) . "#req$i";
$href = str_replace("\\'", '&#39;', $href);
if (!isset($t[$v[2]])) {
$t[$v[2]] = array();

3
ecrire/req/mysql.php

@ -1543,12 +1543,13 @@ function spip_mysql_quote($v, $type = '') {
* Expression SQL
**/
function spip_mysql_date_proche($champ, $interval, $unite) {
$use_now = ( ($champ === 'maj' or strpos($champ, '.maj')) ? true : false );
return '('
. $champ
. (($interval <= 0) ? '>' : '<')
. (($interval <= 0) ? 'DATE_SUB' : 'DATE_ADD')
. '('
. sql_quote(date('Y-m-d H:i:s'))
. ($use_now ? 'NOW()' : sql_quote(date('Y-m-d H:i:s')))
. ', INTERVAL '
. (($interval > 0) ? $interval : (0 - $interval))
. ' '

3
ecrire/req/sqlite_generique.php

@ -2723,9 +2723,10 @@ function _sqlite_ajouter_champs_timestamp($table, $couples, $desc = '', $serveur
// mais ceux-ci ne sont pas utilises dans le core
$tables[$table] = array();
$now = _sqlite_func_now();
foreach ($desc['field'] as $k => $v) {
if (strpos(strtolower(ltrim($v)), 'timestamp') === 0) {
$tables[$table][$k] = "datetime('now')";
$tables[$table][$k] = _sqlite_calculer_cite($now, $v);
}
}
}

106
plugins-dist.json

@ -0,0 +1,106 @@
{
"aide": {
"path": "plugins-dist/aide",
"source": "https://git.spip.net/spip/aide.git"
},
"archiviste": {
"path": "plugins-dist/archiviste",
"source": "https://git.spip.net/spip/archiviste.git"
},
"breves": {
"path": "plugins-dist/breves",
"source": "https://git.spip.net/spip/breves.git"
},
"compagnon": {
"path": "plugins-dist/compagnon",
"source": "https://git.spip.net/spip/compagnon.git"
},
"compresseur": {
"path": "plugins-dist/compresseur",
"source": "https://git.spip.net/spip/compresseur.git"
},
"dump": {
"path": "plugins-dist/dump",
"source": "https://git.spip.net/spip/dump.git"
},
"filtres_images": {
"path": "plugins-dist/filtres_images",
"source": "https://git.spip.net/spip/filtres_images.git"
},
"forum": {
"path": "plugins-dist/forum",
"source": "https://git.spip.net/spip/forum.git"
},
"jquery_ui": {
"path": "plugins-dist/jquery_ui",
"source": "https://git.spip.net/spip/jquery_ui.git"
},
"mediabox": {
"path": "plugins-dist/mediabox",
"source": "https://git.spip.net/spip/mediabox.git"
},
"medias": {
"path": "plugins-dist/medias",
"source": "https://git.spip.net/spip/medias.git"
},
"mots": {
"path": "plugins-dist/mots",
"source": "https://git.spip.net/spip/mots.git"
},
"organiseur": {
"path": "plugins-dist/organiseur",
"source": "https://git.spip.net/spip/organiseur.git"
},
"petitions": {
"path": "plugins-dist/petitions",
"source": "https://git.spip.net/spip/petitions.git"
},
"plan": {
"path": "plugins-dist/plan",
"source": "https://git.spip.net/spip/plan.git"
},
"porte_plume": {
"path": "plugins-dist/porte_plume",
"source": "https://git.spip.net/spip/porte_plume.git"
},
"revisions": {
"path": "plugins-dist/revisions",
"source": "https://git.spip.net/spip/revisions.git"
},
"safehtml": {
"path": "plugins-dist/safehtml",
"source": "https://git.spip.net/spip/safehtml.git"
},
"sites": {
"path": "plugins-dist/sites",
"source": "https://git.spip.net/spip/sites.git"
},
"squelettes_par_rubrique": {
"path": "plugins-dist/squelettes_par_rubrique",
"source": "https://git.spip.net/spip/squelettes_par_rubrique.git"
},
"statistiques": {
"path": "plugins-dist/statistiques",
"source": "https://git.spip.net/spip/statistiques.git"
},
"svp": {
"path": "plugins-dist/svp",
"source": "https://git.spip.net/spip/svp.git"
},
"textwheel": {
"path": "plugins-dist/textwheel",
"source": "https://git.spip.net/spip/textwheel.git"
},
"urls_etendues": {
"path": "plugins-dist/urls_etendues",
"source": "https://git.spip.net/spip/urls_etendues.git"
},
"vertebres": {
"path": "plugins-dist/vertebres",
"source": "https://git.spip.net/spip/vertebres.git"
},
"dist": {
"path": "squelettes-dist",
"source": "https://git.spip.net/spip/dist.git"
}
}

2
prive/echafaudage/contenu/objets.html

@ -1,4 +1,4 @@
<h1>[(#OBJET|objet_info{texte_objets}|_T)]</h1>
<h1 class="grostitre">[(#OBJET|objet_info{texte_objets}|_T)]</h1>
<INCLURE{fond=prive/objets/liste/#OBJET|objet_info{table_objet},env,ajax,sinon=#OBJET|objet_info{info_aucun_objet}|_T} />
[(#OBJET|objet_info{editable}|et{#AUTORISER{creer,#OBJET}})
[(#REM|generer_url_ecrire_entite_edit{#OBJET}|parametre_url{new,oui}|icone_verticale{[(#OBJET|objet_info{texte_creer}|_T)],[(#OBJET|objet_info{icone_objet})],new,right})]

20
prive/formulaires/configurer_preferences.php

@ -65,30 +65,36 @@ function formulaires_configurer_preferences_charger_dist() {
function formulaires_configurer_preferences_traiter_dist() {
if ($couleur = _request('couleur')) {
$GLOBALS['visiteur_session']['prefs']['couleur'] = $couleur;
$couleurs = charger_fonction('couleurs', 'inc');
$les_couleurs = $couleurs(array(), true);
if (isset($les_couleurs[$couleur])) {
$GLOBALS['visiteur_session']['prefs']['couleur'] = $couleur;
}
}
if ($display = _request('display')) {
if ($display = intval(_request('display'))) {
$GLOBALS['visiteur_session']['prefs']['display'] = $display;
}
if ($display_navigation = _request('display_navigation')) {
if ($display_navigation = _request('display_navigation')
and in_array($display_navigation, ['navigation_sans_icone', 'navigation_avec_icones'])) {
$GLOBALS['visiteur_session']['prefs']['display_navigation'] = $display_navigation;
}
if (!is_null($display_outils = _request('display_outils'))) {
$GLOBALS['visiteur_session']['prefs']['display_outils'] = $display_outils;
$GLOBALS['visiteur_session']['prefs']['display_outils'] = ($display_outils ? 'oui' : '');
}
if (intval($GLOBALS['visiteur_session']['id_auteur'])) {
include_spip('action/editer_auteur');
$c = array('prefs' => serialize($GLOBALS['visiteur_session']['prefs']));
if (_request('imessage')) {
$c['imessage'] = _request('imessage');
if ($imessage = _request('imessage') and in_array($imessage, ['oui', 'non'])) {
$c['imessage'] = $imessage;
}
auteur_modifier($GLOBALS['visiteur_session']['id_auteur'], $c);
}
if ($spip_ecran = _request('spip_ecran')) {
if ($spip_ecran = _request('spip_ecran')
and in_array($spip_ecran, ['etroit', 'large'])) {
// Poser un cookie,
// car ce reglage depend plus du navigateur que de l'utilisateur
$GLOBALS['spip_ecran'] = $spip_ecran;

6
prive/formulaires/dateur/inc-dateur.html

@ -1,14 +1,13 @@
<script type='text/javascript'>/*<![CDATA[*/
function date_picker_options(){
return {
buttonText: '<:afficher_calendrier|texte_script:>',
buttonText: '',
buttonImage: '#CHEMIN_IMAGE{calendrier-16.png}',
buttonImageOnly: true,
closeText: '<:bouton_fermer|texte_script:>',
prevText: '<:precedent|texte_script:>',
nextText: '<:suivant|texte_script:>',
currentText: '<:date_aujourdhui|texte_script:>',
closeText: '<:bouton_fermer|texte_script:>',
monthNames: [
'<:date_mois_1|texte_script:>','<:date_mois_2|texte_script:>','<:date_mois_3|texte_script:>','<:date_mois_4|texte_script:>','<:date_mois_5|texte_script:>','<:date_mois_6|texte_script:>',
'<:date_mois_7|texte_script:>','<:date_mois_8|texte_script:>','<:date_mois_9|texte_script:>','<:date_mois_10|texte_script:>','<:date_mois_11|texte_script:>','<:date_mois_12|texte_script:>'],
@ -55,7 +54,8 @@ function date_picker_init(){
}
jQuery(this)
.datepicker(jQuery.extend(date_picker_options(),options))
.trigger('datePickerLoaded');
.trigger('datePickerLoaded')
.next('.ui-datepicker-trigger').removeAttr('title');
});
// Initialisation du sélecteur sur les champs d'heure

16
prive/formulaires/editer_liens.php

@ -127,6 +127,17 @@ function formulaires_editer_liens_charger_dist($a, $b, $c, $options = array()) {
$skel_ajout = $table_source . '_roles_associer';
}
$oups = _request('_oups');
if (unserialize(base64_decode($oups))) {
// on est bon, rien a faire
}
elseif(unserialize($oups)) {
// il faut encoder
$oups = base64_encode($oups);
}
else {
$oups = '';
}
$valeurs = array(
'id' => "$table_source-$objet-$id_objet-$objet_lien", // identifiant unique pour les id du form
'_vue_liee' => $skel_vue,
@ -143,7 +154,7 @@ function formulaires_editer_liens_charger_dist($a, $b, $c, $options = array()) {
'supprimer_lien' => '',
'qualifier_lien' => '',
'_roles' => $roles, # description des roles
'_oups' => _request('_oups'),
'_oups' => $oups,
'editable' => $editable,
);
@ -212,6 +223,7 @@ function formulaires_editer_liens_traiter_dist($a, $b, $c, $options = array()) {
// annuler les suppressions du coup d'avant !
if (_request('annuler_oups')
and $oups = _request('_oups')
and $oups = base64_decode($oups)
and $oups = unserialize($oups)
) {
if ($oups_objets = charger_fonction("editer_liens_oups_{$table_source}_{$objet}_{$objet_lien}", 'action', true)) {
@ -282,7 +294,7 @@ function formulaires_editer_liens_traiter_dist($a, $b, $c, $options = array()) {
}
}
}
set_request('_oups', $oups ? serialize($oups) : null);
set_request('_oups', $oups ? base64_encode(serialize($oups)) : null);
}
if ($ajouter) {

1
prive/formulaires/editer_logo.php

@ -61,6 +61,7 @@ function formulaires_editer_logo_charger_dist($objet, $id_objet, $retour = '', $
if (!is_array($options)) {
$options = unserialize($options);
}
$options = spip_sanitize_from_request($options, '*');
if (!isset($options['titre'])) {
$balise_img = chercher_filtre('balise_img');

1
prive/squelettes/structure.html

@ -10,5 +10,6 @@
<head>
<INCLURE{fond=prive/squelettes/head/#ENV{type-page},env,espace_prive=1}>
</head>
[(#LISTE{titre,sinon}|sanitize_env)]
<INCLURE{fond=prive/squelettes/body,env,espace_prive=1}>
</html>

2
prive/themes/spip/forms.css.html

@ -53,7 +53,7 @@ h3.titrem {position:relative;}
.formulaire_spip h3.titrem {background-color: [#(#ENV{foncee}|couleur_eclaircir)];color: #4A4A4A;}
/* ul li -----*/
.formulaire_spip fieldset {padding-left:10px;padding-right:10px;margin-bottom:[(#ENV{margin-bottom}|strdiv{4})em]}
.formulaire_spip fieldset {min-width:0;padding-left:10px;padding-right:10px;margin-bottom:[(#ENV{margin-bottom}|strdiv{4})em]}
.formulaire_spip .editer-groupe {padding: [(#ENV{margin-bottom}|strdiv{4})em] 0;}
.formulaire_spip .editer-groupe .editer-groupe,.formulaire_spip .fieldset fieldset {margin:0;}
.formulaire_spip .editer-groupe,

Loading…
Cancel
Save