Version in base suite: 4.4.21+dfsg-0+deb13u1
Version in overlay suite: 4.4.23+dfsg-0+deb13u1
Base version: spip_4.4.23+dfsg-0+deb13u1
Target version: spip_4.4.28+dfsg-0+deb13u1
Base file: /srv/ftp-master.debian.org/ftp/pool/main/s/spip/spip_4.4.23+dfsg-0+deb13u1.dsc
Target file: /srv/ftp-master.debian.org/policy/pool/main/s/spip/spip_4.4.28+dfsg-0+deb13u1.dsc
CHANGELOG.md | 20
composer.lock | 165 +
debian/changelog | 11
debian/patches/0001-Fix-created-directories-and-files-default-rights.patch | 4
debian/patches/0002-No-next-upstream-version-display-in-private-area.patch | 6
debian/patches/0003-Fix-displayed-version-in-the-private-interface.patch | 4
ecrire/CHANGELOG.md | 91
ecrire/action/activer_plugins.php | 24
ecrire/action/ajouter_lien.php | 25
ecrire/action/annuler_job.php | 23
ecrire/action/api_transmettre.php | 36
ecrire/action/auth.php | 26
ecrire/action/calculer_taille_cache.php | 28
ecrire/action/confirmer_email.php | 22
ecrire/action/confirmer_inscription.php | 10
ecrire/action/converser.php | 13
ecrire/action/cookie.php | 19
ecrire/action/debloquer_edition.php | 20
ecrire/action/desinstaller_plugin.php | 30
ecrire/action/editer_article.php | 78
ecrire/action/editer_auteur.php | 102 -
ecrire/action/editer_liens.php | 119 -
ecrire/action/editer_logo.php | 39
ecrire/action/editer_objet.php | 119 -
ecrire/action/editer_rubrique.php | 54
ecrire/action/etre_webmestre.php | 29
ecrire/action/forcer_job.php | 21
ecrire/action/inscrire_auteur.php | 54
ecrire/action/instituer_langue_objet.php | 21
ecrire/action/instituer_langue_rubrique.php | 40
ecrire/action/instituer_objet.php | 21
ecrire/action/instituer_parent_objet.php | 21
ecrire/action/logout.php | 43
ecrire/action/menu_rubriques.php | 37
ecrire/action/purger.php | 28
ecrire/action/purger_queue.php | 22
ecrire/action/redirect.php | 43
ecrire/action/referencer_traduction.php | 19
ecrire/action/relancer_inscription.php | 21
ecrire/action/session.php | 29
ecrire/action/super_cron.php | 19
ecrire/action/supprimer_lien.php | 25
ecrire/action/supprimer_rubrique.php | 24
ecrire/action/tester.php | 31
ecrire/action/tester_taille.php | 28
ecrire/auth/ldap.php | 51
ecrire/auth/spip.php | 155 -
ecrire/balise/formulaire_.php | 75
ecrire/balise/formulaire_admin.php | 78
ecrire/balise/formulaire_ecrire_auteur.php | 33
ecrire/balise/formulaire_inscription.php | 26
ecrire/balise/id_logo_.php | 32
ecrire/balise/info_.php | 25
ecrire/balise/logo_.php | 30
ecrire/balise/menu_lang.php | 29
ecrire/balise/menu_lang_ecrire.php | 37
ecrire/balise/url_.php | 54
ecrire/balise/url_logout.php | 28
ecrire/base/abstract_sql.php | 325 +--
ecrire/base/auxiliaires.php | 21
ecrire/base/connect_sql.php | 110 -
ecrire/base/create.php | 55
ecrire/base/delete_all.php | 21
ecrire/base/dump.php | 98 -
ecrire/base/objets.php | 367 +--
ecrire/base/repair.php | 33
ecrire/base/serial.php | 21
ecrire/base/trouver_table.php | 51
ecrire/base/upgrade.php | 43
ecrire/charsets/cp1250.php | 9
ecrire/charsets/cp1251.php | 9
ecrire/charsets/cp1256.php | 9
ecrire/charsets/html.php | 13
ecrire/charsets/iso-8859-1.php | 15
ecrire/charsets/iso-8859-15.php | 21
ecrire/charsets/iso-8859-6.php | 25
ecrire/charsets/iso-8859-9.php | 33
ecrire/charsets/mathml.php | 9
ecrire/charsets/translit.php | 31
ecrire/charsets/translitcomplexe.php | 27
ecrire/composer.json | 13
ecrire/exec/403.php | 19
ecrire/exec/404.php | 35
ecrire/exec/admin_plugin.php | 38
ecrire/exec/base_delete_all.php | 21
ecrire/exec/base_repair.php | 20
ecrire/exec/demande_mise_a_jour.php | 24
ecrire/exec/fond.php | 43
ecrire/exec/info_plugin.php | 7
ecrire/exec/informer.php | 21
ecrire/exec/install.php | 26
ecrire/exec/plonger.php | 21
ecrire/exec/puce_statut.php | 33
ecrire/exec/rechercher.php | 40
ecrire/exec/selectionner.php | 22
ecrire/exec/upgrade.php | 25
ecrire/genie/mail.php | 26
ecrire/genie/maintenance.php | 26
ecrire/genie/mise_a_jour.php | 49
ecrire/genie/optimiser.php | 48
ecrire/inc/acces.php | 75
ecrire/inc/actions.php | 14
ecrire/inc/admin.php | 52
ecrire/inc/auth.php | 113 -
ecrire/inc/autoriser.php | 382 +--
ecrire/inc/bandeau.php | 78
ecrire/inc/boutons.php | 23
ecrire/inc/charsets.php | 129 -
ecrire/inc/chercher_logo.php | 29
ecrire/inc/chercher_rubrique.php | 66
ecrire/inc/commencer_page.php | 38
ecrire/inc/completer_traduction.php | 25
ecrire/inc/config.php | 86
ecrire/inc/cookie.php | 42
ecrire/inc/couleurs.php | 67
ecrire/inc/csv.php | 27
ecrire/inc/cvt_autosave.php | 35
ecrire/inc/cvt_configurer.php | 53
ecrire/inc/cvt_multietapes.php | 87
ecrire/inc/definir_menus_favoris.php | 22
ecrire/inc/distant.php | 246 +-
ecrire/inc/documents.php | 93
ecrire/inc/drapeau_edition.php | 48
ecrire/inc/editer.php | 111 -
ecrire/inc/email_valide.php | 28
ecrire/inc/envoyer_mail.php | 33
ecrire/inc/exif.php | 3
ecrire/inc/exporter_csv.php | 36
ecrire/inc/filtres.php | 806 +++-----
ecrire/inc/filtres_alertes.php | 58
ecrire/inc/filtres_boites.php | 30
ecrire/inc/filtres_dates.php | 224 +-
ecrire/inc/filtres_ecrire.php | 65
ecrire/inc/filtres_images_lib_mini.php | 291 +-
ecrire/inc/filtres_images_mini.php | 82
ecrire/inc/filtres_mime.php | 44
ecrire/inc/filtres_mini.php | 50
ecrire/inc/filtres_selecteur_generique.php | 28
ecrire/inc/flock.php | 133 -
ecrire/inc/genie.php | 32
ecrire/inc/headers.php | 78
ecrire/inc/icone_renommer.php | 27
ecrire/inc/iconifier.php | 27
ecrire/inc/importer_csv.php | 30
ecrire/inc/informer.php | 21
ecrire/inc/install.php | 90
ecrire/inc/invalideur.php | 61
ecrire/inc/journal.php | 23
ecrire/inc/json.php | 26
ecrire/inc/lang.php | 84
ecrire/inc/lang_liste.php | 27
ecrire/inc/layer.php | 24
ecrire/inc/lien.php | 41
ecrire/inc/lien_court.php | 17
ecrire/inc/liens.php | 17
ecrire/inc/lister_objets.php | 23
ecrire/inc/livrer_fichier.php | 49
ecrire/inc/log.php | 48
ecrire/inc/math.php | 28
ecrire/inc/meta.php | 72
ecrire/inc/minipres.php | 23
ecrire/inc/modeles.php | 80
ecrire/inc/modifier.php | 53
ecrire/inc/nfslock.php | 28
ecrire/inc/notifications.php | 32
ecrire/inc/pipelines.php | 62
ecrire/inc/pipelines_ecrire.php | 97
ecrire/inc/plonger.php | 17
ecrire/inc/plugin.php | 275 +-
ecrire/inc/precharger_article.php | 27
ecrire/inc/precharger_objet.php | 37
ecrire/inc/prepare_recherche.php | 40
ecrire/inc/preselectionner_parent_nouvel_objet.php | 22
ecrire/inc/presentation.php | 78
ecrire/inc/presentation_mini.php | 62
ecrire/inc/presenter_enfants.php | 23
ecrire/inc/puce_statut.php | 42
ecrire/inc/queue.php | 118 -
ecrire/inc/recherche_to_array.php | 68
ecrire/inc/rechercher.php | 76
ecrire/inc/roles.php | 44
ecrire/inc/rubriques.php | 137 -
ecrire/inc/securiser_action.php | 66
ecrire/inc/selectionner.php | 28
ecrire/inc/session.php | 107 -
ecrire/inc/simplexml_to_array.php | 31
ecrire/inc/surligne.php | 33
ecrire/inc/svg.php | 137 -
ecrire/inc/texte.php | 78
ecrire/inc/texte_mini.php | 151 -
ecrire/inc/traduire.php | 59
ecrire/inc/urls.php | 134 -
ecrire/inc/utils.php | 522 ++---
ecrire/inc/xml.php | 65
ecrire/inc_version.php | 208 --
ecrire/index.php | 45
ecrire/install/etape_.php | 21
ecrire/install/etape_1.php | 28
ecrire/install/etape_2.php | 35
ecrire/install/etape_3.php | 68
ecrire/install/etape_3b.php | 35
ecrire/install/etape_4.php | 20
ecrire/install/etape_chmod.php | 25
ecrire/install/etape_fin.php | 21
ecrire/install/etape_ldap1.php | 40
ecrire/install/etape_ldap2.php | 31
ecrire/install/etape_ldap3.php | 19
ecrire/install/etape_ldap4.php | 24
ecrire/install/etape_ldap5.php | 23
ecrire/iterateur/condition.php | 24
ecrire/iterateur/data.php | 45
ecrire/iterateur/php.php | 25
ecrire/iterateur/pour.php | 23
ecrire/lang/ecrire_fr.php | 1
ecrire/maj/2021.php | 30
ecrire/maj/2026.php | 20
ecrire/maj/legacy/svn10000.php | 19
ecrire/maj/legacy/v21.php | 36
ecrire/maj/legacy/v30.php | 48
ecrire/maj/legacy/v31.php | 29
ecrire/maj/legacy/v32.php | 21
ecrire/maj/legacy/v40.php | 27
ecrire/notifications/instituerarticle.php | 24
ecrire/paquet.xml | 4
ecrire/plugins/afficher_liste.php | 28
ecrire/plugins/afficher_nom_plugin.php | 17
ecrire/plugins/afficher_plugin.php | 48
ecrire/plugins/afficher_repertoires.php | 18
ecrire/plugins/extraire_boutons.php | 22
ecrire/plugins/extraire_pipelines.php | 18
ecrire/plugins/get_infos.php | 43
ecrire/plugins/infos_paquet.php | 44
ecrire/plugins/installer.php | 44
ecrire/plugins/verifie_conformite.php | 31
ecrire/prive.php | 16
ecrire/public.php | 113 -
ecrire/public/admin.php | 25
ecrire/public/aiguiller.php | 245 +-
ecrire/public/assembler.php | 182 -
ecrire/public/balises.php | 362 +--
ecrire/public/boucles.php | 36
ecrire/public/cacher.php | 121 -
ecrire/public/compiler.php | 279 +-
ecrire/public/composer.php | 209 +-
ecrire/public/criteres.php | 425 +---
ecrire/public/debusquer.php | 126 -
ecrire/public/decompiler.php | 50
ecrire/public/evaluer_page.php | 40
ecrire/public/fonctions.php | 127 -
ecrire/public/format_html.php | 46
ecrire/public/interfaces.php | 112 -
ecrire/public/jointures.php | 71
ecrire/public/normaliser.php | 30
ecrire/public/parametrer.php | 90
ecrire/public/phraser_html.php | 168 -
ecrire/public/quete.php | 95
ecrire/public/references.php | 119 -
ecrire/public/sandbox.php | 32
ecrire/public/styliser.php | 55
ecrire/public/styliser_par_z.php | 128 -
ecrire/public/tracer.php | 59
ecrire/req/mysql.php | 204 +-
ecrire/req/pg.exp.php | 150 -
ecrire/req/sqlite3.php | 20
ecrire/req/sqlite_fonctions.php | 148 -
ecrire/req/sqlite_generique.php | 488 +----
ecrire/src/Admin/Bouton.php | 48
ecrire/src/Afficher/Minipage/AbstractPage.php | 44
ecrire/src/Afficher/Minipage/Admin.php | 48
ecrire/src/Afficher/Minipage/Installation.php | 14
ecrire/src/Afficher/Minipage/Page.php | 10
ecrire/src/Chiffrer/Chiffrement.php | 40
ecrire/src/Chiffrer/Cles.php | 27
ecrire/src/Chiffrer/Password.php | 32
ecrire/src/Chiffrer/SpipCles.php | 142 +
ecrire/src/Compilateur/Iterateur/AbstractIterateur.php | 9
ecrire/src/Compilateur/Iterateur/Condition.php | 1
ecrire/src/Compilateur/Iterateur/Data.php | 97
ecrire/src/Compilateur/Iterateur/Decorator.php | 87
ecrire/src/Compilateur/Iterateur/Factory.php | 7
ecrire/src/Compilateur/Iterateur/Sql.php | 12
ecrire/src/Compilateur/Noeud/Boucle.php | 52
ecrire/src/Compilateur/Noeud/Champ.php | 36
ecrire/src/Compilateur/Noeud/Contexte.php | 16
ecrire/src/Compilateur/Noeud/Critere.php | 31
ecrire/src/Compilateur/Noeud/Idiome.php | 41
ecrire/src/Compilateur/Noeud/Inclure.php | 14
ecrire/src/Compilateur/Noeud/Polyglotte.php | 10
ecrire/src/Compilateur/Noeud/Texte.php | 14
ecrire/src/Css/Vars/Collection.php | 4
ecrire/src/Debug/Context.php | 149 +
ecrire/src/ErrorHandler.php | 10
ecrire/src/I18n/Description.php | 32
ecrire/src/Sql/Sqlite/PDOStatement.php | 4
ecrire/src/Sql/Sqlite/Requeteur.php | 62
ecrire/src/Sql/Sqlite/Sqlite.php | 69
ecrire/src/Sql/Sqlite/Traducteur.php | 78
ecrire/src/Texte/Collecteur/AbstractCollecteur.php | 16
ecrire/src/Texte/Collecteur/HtmlPhp.php | 37
ecrire/src/Texte/Collecteur/HtmlTag.php | 73
ecrire/src/Texte/Collecteur/Idiomes.php | 12
ecrire/src/Texte/Collecteur/Liens.php | 18
ecrire/src/Texte/Collecteur/Modeles.php | 128 -
ecrire/src/Texte/Collecteur/Multis.php | 25
ecrire/src/Texte/Collecteur/QuotedStrings.php | 128 +
ecrire/typographie/en.php | 25
ecrire/typographie/fr.php | 38
ecrire/urls/page.php | 34
ecrire/xml/analyser_dtd.php | 53
ecrire/xml/indenter.php | 33
ecrire/xml/interfaces.php | 28
ecrire/xml/sax.php | 39
ecrire/xml/valider.php | 76
plugins-dist.json | 20
plugins-dist/forum/.editorconfig | 2
plugins-dist/forum/CHANGELOG.md | 17
plugins-dist/forum/base/forum.php | 29
plugins-dist/forum/formulaires/forum.php | 9
plugins-dist/forum/formulaires/forum_prive.php | 7
plugins-dist/forum/formulaires/inc-forum_previsu.html | 2
plugins-dist/forum/formulaires/inc-forum_prive_previsu.html | 2
plugins-dist/forum/formulaires/inc-login_forum.html | 4
plugins-dist/forum/formulaires/inc-login_forum_abo.html | 4
plugins-dist/forum/forum_fonctions.php | 61
plugins-dist/forum/forum_pipelines.php | 8
plugins-dist/forum/inc/forum.php | 31
plugins-dist/forum/paquet.xml | 2
plugins-dist/forum/phpstan-baseline.neon | 22
plugins-dist/forum/prive/objets/liste/forums.html | 6
plugins-dist/forum/prive/objets/liste/participer_forum.html | 8
plugins-dist/forum/prive/objets/liste/participer_forum_thread.html | 6
plugins-dist/forum/prive/squelettes/contenu/controler_forum.html | 14
plugins-dist/forum/prive/transmettre/rss/forums_public.html | 5
plugins-dist/forum/prive/transmettre/rss/forums_vide.html | 5
plugins-dist/forum/rss_forum_article.html | 4
plugins-dist/forum/rss_forum_breve.html | 4
plugins-dist/forum/rss_forum_rubrique.html | 4
plugins-dist/forum/rss_forum_thread.html | 4
plugins-dist/medias/.editorconfig | 2
plugins-dist/medias/CHANGELOG.md | 18
plugins-dist/medias/action/acceder_document.php | 2
plugins-dist/medias/action/ajouter_documents.php | 33
plugins-dist/medias/action/editer_document.php | 3
plugins-dist/medias/formulaires/editer_document.php | 3
plugins-dist/medias/formulaires/illustrer_document.php | 10
plugins-dist/medias/formulaires/joindre_document.php | 19
plugins-dist/medias/inc/documents.php | 22
plugins-dist/medias/inc/renseigner_document.php | 17
plugins-dist/medias/lib/getid3/getid3.lib.php | 8
plugins-dist/medias/lib/getid3/getid3.php | 45
plugins-dist/medias/lib/getid3/module.audio-video.isobmff.php | 294 +++
plugins-dist/medias/lib/getid3/module.audio-video.quicktime.php | 11
plugins-dist/medias/lib/getid3/module.audio-video.riff.php | 7
plugins-dist/medias/lib/getid3/module.audio.mp3.php | 1
plugins-dist/medias/lib/getid3/module.audio.shorten.php | 4
plugins-dist/medias/lib/getid3/module.graphic.jpegxl.php | 971 ++++++++++
plugins-dist/medias/lib/getid3/module.tag.apetag.php | 26
plugins-dist/medias/lib/getid3/module.tag.id3v2.php | 13
plugins-dist/medias/lib/getid3/module.tag.lyrics3.php | 5
plugins-dist/medias/lib/getid3/write.metaflac.php | 6
plugins-dist/medias/lib/getid3/write.vorbiscomment.php | 6
plugins-dist/medias/medias_autoriser.php | 33
plugins-dist/medias/modeles/file_emb_text.html | 4
plugins-dist/medias/modeles/file_emb_text_csv.html | 4
plugins-dist/medias/paquet.xml | 2
plugins-dist/porte_plume/.editorconfig | 2
plugins-dist/porte_plume/CHANGELOG.md | 10
plugins-dist/porte_plume/paquet.xml | 2
plugins-dist/porte_plume/porte_plume_fonctions.php | 95
plugins-dist/revisions/CHANGELOG.md | 6
plugins-dist/revisions/afficher_diff/jointure.php | 7
plugins-dist/revisions/paquet.xml | 2
plugins-dist/revisions/prive/objets/liste/versions.html | 6
plugins-dist/revisions/prive/squelettes/contenu/revision.html | 6
plugins-dist/safehtml/.editorconfig | 2
plugins-dist/safehtml/CHANGELOG.md | 18
plugins-dist/safehtml/inc/safehtml.php | 3
plugins-dist/safehtml/paquet.xml | 2
plugins-dist/safehtml/phpstan-baseline.neon | 12
plugins-dist/safehtml/sanitizer/html.php | 182 +
plugins-dist/safehtml/sanitizer/svg.php | 37
plugins-dist/sites/CHANGELOG.md | 12
plugins-dist/sites/inc/site.php | 4
plugins-dist/sites/paquet.xml | 2
plugins-dist/sites/syndic/atomrss.php | 2
plugins-dist/statistiques/.editorconfig | 2
plugins-dist/statistiques/.gitattributes | 1
plugins-dist/statistiques/.gitlab-ci.yml | 35
plugins-dist/statistiques/CHANGELOG.md | 15
plugins-dist/statistiques/action/statistiques_archiver.php | 8
plugins-dist/statistiques/composer.json | 7
plugins-dist/statistiques/genie/visites.php | 114 -
plugins-dist/statistiques/inc/referenceurs.php | 14
plugins-dist/statistiques/inc/stats_referers_to_array.php | 26
plugins-dist/statistiques/paquet.xml | 4
plugins-dist/statistiques/phpunit.xml.dist | 39
plugins-dist/statistiques/prive/bouton/statistiques.html | 2
plugins-dist/statistiques/prive/squelettes/contenu/stats_referers.html | 12
plugins-dist/statistiques/prive/squelettes/contenu/stats_repartition_fonctions.php | 14
plugins-dist/statistiques/prive/squelettes/inclure/stats-visites-data.html | 8
plugins-dist/statistiques/prive/squelettes/inclure/stats-visites-jours-resume.html | 6
plugins-dist/statistiques/prive/squelettes/inclure/stats-visites-jours.html | 6
plugins-dist/statistiques/prive/squelettes/inclure/stats-visites-populaires.html | 8
plugins-dist/statistiques/public/stats.php | 62
plugins-dist/statistiques/stats_administrations.php | 27
plugins-dist/statistiques/tests/StatsNettoyerRefererTest.php | 288 ++
plugins-dist/statistiques/tests/StatsRefererValideTest.php | 134 +
plugins-dist/statistiques/tests/StatsValiderRefererTest.php | 223 ++
plugins-dist/svp/.editorconfig | 2
plugins-dist/svp/CHANGELOG.md | 7
plugins-dist/svp/action/actionner.php | 2
plugins-dist/svp/formulaires/admin_plugin.php | 41
plugins-dist/svp/formulaires/charger_plugin.php | 42
plugins-dist/svp/formulaires/inc-confirmer_actions.html | 12
plugins-dist/svp/inc/svp_decider.php | 2
plugins-dist/svp/paquet.xml | 2
plugins-dist/textwheel/CHANGELOG.md | 13
plugins-dist/textwheel/inc/lien.php | 4
plugins-dist/textwheel/inc/notes.php | 14
plugins-dist/textwheel/inc/texte.php | 84
plugins-dist/textwheel/paquet.xml | 2
plugins-dist/textwheel/wheels/spip/echappe-js.json | 8
plugins-dist/textwheel/wheels/spip/echappe-js.yaml | 30
plugins-dist/textwheel/wheels/spip/interdire-scripts.json | 2
plugins-dist/textwheel/wheels/spip/interdire-scripts.yaml | 4
plugins-dist/urls_etendues/.editorconfig | 2
plugins-dist/urls_etendues/CHANGELOG.md | 6
plugins-dist/urls_etendues/paquet.xml | 2
plugins-dist/urls_etendues/urls/arbo.php | 97
prive/CHANGELOG.md | 17
prive/ajax_selecteur_fonctions.php | 16
prive/composer.json | 21
prive/echafaudage/hierarchie/objet_fonctions.php | 22
prive/formulaires/configurer_annonces.php | 20
prive/formulaires/configurer_articles.php | 19
prive/formulaires/configurer_avertisseur.php | 19
prive/formulaires/configurer_ecran_connexion.php | 18
prive/formulaires/configurer_flux.php | 21
prive/formulaires/configurer_identite.php | 18
prive/formulaires/configurer_langage.php | 26
prive/formulaires/configurer_langue.php | 17
prive/formulaires/configurer_logos.php | 21
prive/formulaires/configurer_multilinguisme.php | 32
prive/formulaires/configurer_preferences.php | 22
prive/formulaires/configurer_preferences_menus.php | 24
prive/formulaires/configurer_previsualiseur.php | 17
prive/formulaires/configurer_redacteurs.php | 19
prive/formulaires/configurer_reducteur.php | 41
prive/formulaires/configurer_relayeur.php | 29
prive/formulaires/configurer_rubriques.php | 23
prive/formulaires/configurer_transcodeur.php | 19
prive/formulaires/configurer_visiteurs.php | 21
prive/formulaires/dater.php | 69
prive/formulaires/declarer_bases.php | 36
prive/formulaires/editer_article.php | 30
prive/formulaires/editer_auteur.html | 24
prive/formulaires/editer_auteur.php | 152 -
prive/formulaires/editer_liens.php | 110 -
prive/formulaires/editer_logo.php | 41
prive/formulaires/editer_rubrique.php | 31
prive/formulaires/inc-instituer_auteur.html | 1
prive/formulaires/inc-instituer_auteur_fonctions.php | 2
prive/formulaires/inscription.php | 44
prive/formulaires/instituer_objet.php | 30
prive/formulaires/login.php | 83
prive/formulaires/mot_de_passe.php | 70
prive/formulaires/oubli.php | 44
prive/formulaires/recherche_ecrire.php | 20
prive/formulaires/rediriger_article.php | 24
prive/formulaires/traduire.php | 39
prive/informer_auteur_fonctions.php | 19
prive/javascript/js.cookie.js | 27
prive/objets/liste/articles_fonctions.php | 20
prive/objets/liste/auteurs_associer_fonctions.php | 16
prive/objets/liste/auteurs_fonctions.php | 54
prive/objets/liste/auteurs_lies_fonctions.php | 16
prive/objets/liste/objets-en-edition_fonctions.php | 16
prive/objets/liste/objets-trad_fonctions.php | 16
prive/objets/liste/visiteurs_fonctions.php | 16
prive/squelettes/ajax.html | 3
prive/squelettes/contenu/job_queue_fonctions.php | 8
prive/themes/spip/vars.css_fonctions.php | 5
vendor/composer/autoload_files.php | 2
vendor/composer/autoload_static.php | 2
vendor/composer/installed.json | 183 +
vendor/composer/installed.php | 66
vendor/jakeasmith/http_build_url/.travis.yml | 13
vendor/jakeasmith/http_build_url/composer.json | 6
vendor/jakeasmith/http_build_url/readme.md | 46
vendor/symfony/polyfill-mbstring/Mbstring.php | 756 ++++++-
vendor/symfony/polyfill-php80/PhpToken.php | 10
vendor/symfony/polyfill-php82/Php82.php | 63
vendor/symfony/polyfill-php83/Php83.php | 98 -
vendor/symfony/polyfill-php84/Php84.php | 123 +
vendor/symfony/polyfill-php84/bootstrap.php | 2
vendor/symfony/polyfill-php85/Php85.php | 91
vendor/symfony/polyfill-php85/bootstrap.php | 2
vendor/symfony/polyfill-php85/bootstrap80.php | 2
498 files changed, 14294 insertions(+), 11908 deletions(-)
dpkg-source: warning: cannot verify inline signature for /srv/release.debian.org/tmp/tmp3a6wmzyq/spip_4.4.23+dfsg-0+deb13u1.dsc: no acceptable signature found
dpkg-source: warning: cannot verify inline signature for /srv/release.debian.org/tmp/tmp3a6wmzyq/spip_4.4.28+dfsg-0+deb13u1.dsc: no acceptable signature found
diff -Nru spip-4.4.23+dfsg/CHANGELOG.md spip-4.4.28+dfsg/CHANGELOG.md
--- spip-4.4.23+dfsg/CHANGELOG.md 2026-09-02 12:02:52.000000000 +0000
+++ spip-4.4.28+dfsg/CHANGELOG.md 2026-10-07 13:48:22.000000000 +0000
@@ -1,5 +1,25 @@
# Changelog
+## 4.4.28 - 2026-10-07
+
+- Mise à jour des dépendances (ecrire, safehtml)
+
+## 4.4.27 - 2026-10-06
+
+- Mise à jour des dépendances (ecrire)
+
+## 4.4.26 - 2026-10-06
+
+- Mise à jour des dépendances (ecrire, prive, forum, medias, porte-plume, revisions, safehtml, sites, stats, svp, tw)
+
+## 4.4.25 - 2026-09-25
+
+- Mise à jour des dépendances (ecrire, sites)
+
+## 4.4.24 - 2026-09-22
+
+- Mise à jour des dépendances (ecrire, prive, forum, medias, urls)
+
## 4.4.23 - 2026-09-02
- Mise à jour des dépendances (ecrire, prive, bigup, forum, medias)
diff -Nru spip-4.4.23+dfsg/composer.lock spip-4.4.28+dfsg/composer.lock
--- spip-4.4.23+dfsg/composer.lock 2026-09-02 12:02:52.000000000 +0000
+++ spip-4.4.28+dfsg/composer.lock 2026-10-07 13:48:22.000000000 +0000
@@ -64,16 +64,16 @@
},
{
"name": "jakeasmith/http_build_url",
- "version": "1.0.1",
+ "version": "1.0.2",
"source": {
"type": "git",
"url": "https://github.com/jakeasmith/http_build_url.git",
- "reference": "93c273e77cb1edead0cf8bcf8cd2003428e74e37"
+ "reference": "18627808c80621219f80337fa4adcee7a31aff7d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/jakeasmith/http_build_url/zipball/93c273e77cb1edead0cf8bcf8cd2003428e74e37",
- "reference": "93c273e77cb1edead0cf8bcf8cd2003428e74e37",
+ "url": "https://api.github.com/repos/jakeasmith/http_build_url/zipball/18627808c80621219f80337fa4adcee7a31aff7d",
+ "reference": "18627808c80621219f80337fa4adcee7a31aff7d",
"shasum": ""
},
"type": "library",
@@ -89,15 +89,17 @@
"authors": [
{
"name": "Jake A. Smith",
- "email": "theman@jakeasmith.com"
+ "email": "theman@jakeasmith.com",
+ "homepage": "https://jakeasmith.com"
}
],
- "description": "Provides functionality for http_build_url() to environments without pecl_http.",
+ "description": "Deprecated: use PHP 8.5's built-in Uri\\Rfc3986\\Uri instead. Provides http_build_url() for environments without pecl_http.",
"support": {
"issues": "https://github.com/jakeasmith/http_build_url/issues",
"source": "https://github.com/jakeasmith/http_build_url"
},
- "time": "2017-05-01T15:36:40+00:00"
+ "abandoned": true,
+ "time": "2026-09-15T07:48:37+00:00"
},
{
"name": "psr/container",
@@ -317,16 +319,16 @@
},
{
"name": "spip/ecrire",
- "version": "4.4.23",
+ "version": "4.4.28",
"source": {
"type": "git",
"url": "https://git.spip.net/spip/ecrire.git",
- "reference": "f315d717675c54ad2c84411bb8c2d3c26297a0b5"
+ "reference": "c313201ded053f6f3d08f7867e62c740ba315540"
},
"dist": {
"type": "zip",
- "url": "https://git.spip.net/api/v4/projects/spip%2Fecrire/repository/archive.zip?sha=f315d717675c54ad2c84411bb8c2d3c26297a0b5",
- "reference": "f315d717675c54ad2c84411bb8c2d3c26297a0b5",
+ "url": "https://git.spip.net/api/v4/projects/spip%2Fecrire/repository/archive.zip?sha=c313201ded053f6f3d08f7867e62c740ba315540",
+ "reference": "c313201ded053f6f3d08f7867e62c740ba315540",
"shasum": ""
},
"require": {
@@ -343,10 +345,11 @@
"symfony/polyfill-php81": "^1.31",
"symfony/polyfill-php82": "^1.31",
"symfony/polyfill-php83": "^1.31",
- "symfony/polyfill-php84": "^1.31"
+ "symfony/polyfill-php84": "^1.31",
+ "symfony/polyfill-php85": "^1.31"
},
"require-dev": {
- "symplify/easy-coding-standard": "^12.3"
+ "spip-league/qa-tools": "^1.0"
},
"type": "spip-ecrire",
"autoload": {
@@ -357,43 +360,89 @@
"bootstrap/deprecations.php"
]
},
+ "scripts": {
+ "analyse": [
+ "phpstan --memory-limit=1G"
+ ],
+ "baseline": [
+ "phpstan --memory-limit=1G --generate-baseline --allow-empty-baseline"
+ ],
+ "check-cs": [
+ "ecs check --ansi"
+ ],
+ "fix-cs": [
+ "ecs check --fix --ansi"
+ ],
+ "rector": [
+ "rector process --ansi"
+ ],
+ "rector-dry-run": [
+ "rector process --dry-run --ansi"
+ ]
+ },
"license": [
"GPL-3.0-only"
],
"description": "Noyau de SPIP",
"support": {
- "source": "https://git.spip.net/spip/ecrire/-/tree/4.4.23",
+ "source": "https://git.spip.net/spip/ecrire/-/tree/4.4.28",
"issues": "https://git.spip.net/spip/ecrire/-/issues"
},
- "time": "2026-09-02T13:56:18+02:00"
+ "time": "2026-10-07T15:47:13+02:00"
},
{
"name": "spip/prive",
- "version": "1.1.5",
+ "version": "1.1.7",
"source": {
"type": "git",
"url": "https://git.spip.net/spip/prive.git",
- "reference": "7ed90bbcf72fc33213bc0257bc3e805bd6c5a067"
+ "reference": "b68902b53cb29ac8d3ec7c3b12c5e43b23281c40"
},
"dist": {
"type": "zip",
- "url": "https://git.spip.net/api/v4/projects/spip%2Fprive/repository/archive.zip?sha=7ed90bbcf72fc33213bc0257bc3e805bd6c5a067",
- "reference": "7ed90bbcf72fc33213bc0257bc3e805bd6c5a067",
+ "url": "https://git.spip.net/api/v4/projects/spip%2Fprive/repository/archive.zip?sha=b68902b53cb29ac8d3ec7c3b12c5e43b23281c40",
+ "reference": "b68902b53cb29ac8d3ec7c3b12c5e43b23281c40",
"shasum": ""
},
"require-dev": {
- "spip-league/kernel": "^1.x-dev"
+ "spip-league/kernel": "1.x-dev",
+ "spip-league/sdk": "^1.1"
},
"type": "spip-prive",
+ "autoload-dev": {
+ "files": [
+ "vendor/spip-league/sdk/src/Stub/functions.php"
+ ]
+ },
+ "scripts": {
+ "analyse": [
+ "phpstan --memory-limit=1G"
+ ],
+ "baseline": [
+ "phpstan --memory-limit=1G --generate-baseline --allow-empty-baseline"
+ ],
+ "check-cs": [
+ "ecs check --ansi"
+ ],
+ "fix-cs": [
+ "ecs check --fix --ansi"
+ ],
+ "rector": [
+ "rector process --ansi"
+ ],
+ "rector-dry-run": [
+ "rector process --dry-run --ansi"
+ ]
+ },
"license": [
"GPL-3.0-only"
],
"description": "Squelettes de l'espace privé",
"support": {
- "source": "https://git.spip.net/spip/prive/-/tree/1.1.5",
+ "source": "https://git.spip.net/spip/prive/-/tree/1.1.7",
"issues": "https://git.spip.net/spip/prive/-/issues"
},
- "time": "2026-09-02T13:45:16+02:00"
+ "time": "2026-10-06T11:58:29+02:00"
},
{
"name": "spip/security",
@@ -745,16 +794,16 @@
},
{
"name": "symfony/polyfill-mbstring",
- "version": "v1.38.2",
+ "version": "v1.43.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6"
+ "reference": "4d5d331bf731e0aedbc6b2f5e61135b7b7996a72"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6",
- "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/4d5d331bf731e0aedbc6b2f5e61135b7b7996a72",
+ "reference": "4d5d331bf731e0aedbc6b2f5e61135b7b7996a72",
"shasum": ""
},
"require": {
@@ -806,7 +855,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.38.2"
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.43.0"
},
"funding": [
{
@@ -826,20 +875,20 @@
"type": "tidelift"
}
],
- "time": "2026-05-27T06:59:30+00:00"
+ "time": "2026-09-24T15:19:04+00:00"
},
{
"name": "symfony/polyfill-php80",
- "version": "v1.37.0",
+ "version": "v1.43.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
- "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411"
+ "reference": "9c6a5d6b01ca51d486c813e9a9c0ed55f208bb74"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dfb55726c3a76ea3b6459fcfda1ec2d80a682411",
- "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/9c6a5d6b01ca51d486c813e9a9c0ed55f208bb74",
+ "reference": "9c6a5d6b01ca51d486c813e9a9c0ed55f208bb74",
"shasum": ""
},
"require": {
@@ -890,7 +939,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php80/tree/v1.37.0"
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.43.0"
},
"funding": [
{
@@ -910,7 +959,7 @@
"type": "tidelift"
}
],
- "time": "2026-04-10T16:19:22+00:00"
+ "time": "2026-09-25T15:50:05+00:00"
},
{
"name": "symfony/polyfill-php81",
@@ -994,16 +1043,16 @@
},
{
"name": "symfony/polyfill-php82",
- "version": "v1.38.1",
+ "version": "v1.43.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php82.git",
- "reference": "002dc0cfe5fd4ed6033d48f27d4f19a486c4b04b"
+ "reference": "843bbe8b2a7934307b749751eede0f111f5d1cfc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php82/zipball/002dc0cfe5fd4ed6033d48f27d4f19a486c4b04b",
- "reference": "002dc0cfe5fd4ed6033d48f27d4f19a486c4b04b",
+ "url": "https://api.github.com/repos/symfony/polyfill-php82/zipball/843bbe8b2a7934307b749751eede0f111f5d1cfc",
+ "reference": "843bbe8b2a7934307b749751eede0f111f5d1cfc",
"shasum": ""
},
"require": {
@@ -1050,7 +1099,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php82/tree/v1.38.1"
+ "source": "https://github.com/symfony/polyfill-php82/tree/v1.43.0"
},
"funding": [
{
@@ -1070,20 +1119,20 @@
"type": "tidelift"
}
],
- "time": "2026-05-26T12:45:58+00:00"
+ "time": "2026-09-25T15:50:05+00:00"
},
{
"name": "symfony/polyfill-php83",
- "version": "v1.41.0",
+ "version": "v1.43.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php83.git",
- "reference": "5ea99087fb99c273a9b9236ed4c31e78b16103c6"
+ "reference": "80ccff923a8d61f73ebe9da0aa94e25232f004ce"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/5ea99087fb99c273a9b9236ed4c31e78b16103c6",
- "reference": "5ea99087fb99c273a9b9236ed4c31e78b16103c6",
+ "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/80ccff923a8d61f73ebe9da0aa94e25232f004ce",
+ "reference": "80ccff923a8d61f73ebe9da0aa94e25232f004ce",
"shasum": ""
},
"require": {
@@ -1130,7 +1179,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php83/tree/v1.41.0"
+ "source": "https://github.com/symfony/polyfill-php83/tree/v1.43.0"
},
"funding": [
{
@@ -1150,20 +1199,20 @@
"type": "tidelift"
}
],
- "time": "2026-07-01T12:47:55+00:00"
+ "time": "2026-09-25T15:50:05+00:00"
},
{
"name": "symfony/polyfill-php84",
- "version": "v1.38.1",
+ "version": "v1.43.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php84.git",
- "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa"
+ "reference": "22c6548499cbe5c5bb072fc0c42312dff062a015"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa",
- "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa",
+ "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/22c6548499cbe5c5bb072fc0c42312dff062a015",
+ "reference": "22c6548499cbe5c5bb072fc0c42312dff062a015",
"shasum": ""
},
"require": {
@@ -1210,7 +1259,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php84/tree/v1.38.1"
+ "source": "https://github.com/symfony/polyfill-php84/tree/v1.43.0"
},
"funding": [
{
@@ -1230,20 +1279,20 @@
"type": "tidelift"
}
],
- "time": "2026-05-26T12:51:13+00:00"
+ "time": "2026-09-23T22:01:09+00:00"
},
{
"name": "symfony/polyfill-php85",
- "version": "v1.41.0",
+ "version": "v1.43.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php85.git",
- "reference": "255fab485aaa1006ed411040c42aecd7b5302d7a"
+ "reference": "86a42cbcc07adc331481a5ab310a4024bfc227f6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/255fab485aaa1006ed411040c42aecd7b5302d7a",
- "reference": "255fab485aaa1006ed411040c42aecd7b5302d7a",
+ "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/86a42cbcc07adc331481a5ab310a4024bfc227f6",
+ "reference": "86a42cbcc07adc331481a5ab310a4024bfc227f6",
"shasum": ""
},
"require": {
@@ -1290,7 +1339,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php85/tree/v1.41.0"
+ "source": "https://github.com/symfony/polyfill-php85/tree/v1.43.0"
},
"funding": [
{
@@ -1310,7 +1359,7 @@
"type": "tidelift"
}
],
- "time": "2026-07-01T12:47:55+00:00"
+ "time": "2026-09-25T15:46:47+00:00"
},
{
"name": "symfony/service-contracts",
diff -Nru spip-4.4.23+dfsg/debian/changelog spip-4.4.28+dfsg/debian/changelog
--- spip-4.4.23+dfsg/debian/changelog 2026-09-03 05:41:44.000000000 +0000
+++ spip-4.4.28+dfsg/debian/changelog 2026-10-08 17:15:42.000000000 +0000
@@ -1,3 +1,14 @@
+spip (4.4.28+dfsg-0+deb13u1) trixie-security; urgency=medium
+
+ [ Matthieu Marcillaud ]
+ * build: up dependencies
+ * build: Version 4.4.28
+
+ [ David Prévot ]
+ * Refresh patches
+
+ -- David Prévot Thu, 08 Oct 2026 19:15:42 +0200
+
spip (4.4.23+dfsg-0+deb13u1) trixie-security; urgency=medium
[ David Prévot ]
diff -Nru spip-4.4.23+dfsg/debian/patches/0001-Fix-created-directories-and-files-default-rights.patch spip-4.4.28+dfsg/debian/patches/0001-Fix-created-directories-and-files-default-rights.patch
--- spip-4.4.23+dfsg/debian/patches/0001-Fix-created-directories-and-files-default-rights.patch 2026-09-03 05:41:32.000000000 +0000
+++ spip-4.4.28+dfsg/debian/patches/0001-Fix-created-directories-and-files-default-rights.patch 2026-10-08 17:14:45.000000000 +0000
@@ -13,10 +13,10 @@
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ecrire/inc_version.php b/ecrire/inc_version.php
-index 2de3d9c..afec1cb 100644
+index 7405d1a..aea3d46 100644
--- a/ecrire/inc_version.php
+++ b/ecrire/inc_version.php
-@@ -445,7 +445,7 @@ $liste_des_authentifications = [
+@@ -443,7 +443,7 @@ $liste_des_authentifications = [
# $table_des_traitements['TITRE'][]= 'typo(supprimer_numero(%s), "TYPO", $connect)';
// Droits d'acces maximum par defaut
diff -Nru spip-4.4.23+dfsg/debian/patches/0002-No-next-upstream-version-display-in-private-area.patch spip-4.4.28+dfsg/debian/patches/0002-No-next-upstream-version-display-in-private-area.patch
--- spip-4.4.23+dfsg/debian/patches/0002-No-next-upstream-version-display-in-private-area.patch 2026-09-03 05:33:38.000000000 +0000
+++ spip-4.4.28+dfsg/debian/patches/0002-No-next-upstream-version-display-in-private-area.patch 2026-10-08 17:14:45.000000000 +0000
@@ -11,11 +11,11 @@
1 file changed, 2 insertions(+)
diff --git a/ecrire/inc/presentation_mini.php b/ecrire/inc/presentation_mini.php
-index 02d3485..6f5ca21 100644
+index dba717e..c09f194 100644
--- a/ecrire/inc/presentation_mini.php
+++ b/ecrire/inc/presentation_mini.php
-@@ -198,6 +198,8 @@ function html_tests_js() {
- **/
+@@ -190,6 +190,8 @@ function html_tests_js() {
+ */
function info_maj_spip() {
+ return '';
diff -Nru spip-4.4.23+dfsg/debian/patches/0003-Fix-displayed-version-in-the-private-interface.patch spip-4.4.28+dfsg/debian/patches/0003-Fix-displayed-version-in-the-private-interface.patch
--- spip-4.4.23+dfsg/debian/patches/0003-Fix-displayed-version-in-the-private-interface.patch 2026-09-03 05:41:32.000000000 +0000
+++ spip-4.4.28+dfsg/debian/patches/0003-Fix-displayed-version-in-the-private-interface.patch 2026-10-08 17:14:45.000000000 +0000
@@ -14,10 +14,10 @@
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ecrire/inc_version.php b/ecrire/inc_version.php
-index afec1cb..950d443 100644
+index aea3d46..4f73442 100644
--- a/ecrire/inc_version.php
+++ b/ecrire/inc_version.php
-@@ -470,7 +470,7 @@ $spip_sql_version = 1;
+@@ -468,7 +468,7 @@ $spip_sql_version = 1;
// version de spip en chaine
// 1.xxyy : xx00 versions stables publiees, xxyy versions de dev
// (ce qui marche pour yy ne marchera pas forcement sur une version plus ancienne)
diff -Nru spip-4.4.23+dfsg/ecrire/CHANGELOG.md spip-4.4.28+dfsg/ecrire/CHANGELOG.md
--- spip-4.4.23+dfsg/ecrire/CHANGELOG.md 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/CHANGELOG.md 2026-10-07 13:48:22.000000000 +0000
@@ -2,6 +2,97 @@
Changelog de SPIP 4.4
+## 4.4.28 - 2026-10-07
+
+### Fixed
+
+- !413 quand la redirection est fixée par l'action, il ne faut la sanitizer, elle est de confiance
+- #193 Accélérer la maj de réinitialisation des vieux password
+- #192 reduire le niveau de log (en debug) de lecture des clés
+- #191 renforcer la clé d'hébergement quand phpinfo() est désactivée
+
+## 4.4.27 - 2026-10-06
+
+### Fixed
+
+- Collecteur QuotedStrings: en contexte Sqlite `'\'` est une chaine bien formée (les guillemets sont echappés par un `''` et pas un `\'`)
+
+## 4.4.26 - 2026-10-06
+
+### Security
+
+- spip-security/securite#4948 interdire l'affichage direct des squelettes `formulaires/` même pour les webmestres
+- spip-security/securite#4934 reinitialiser les vieux mots de passe en md5 des redacteurs et des administrateurs
+- spip-security/securite#4940 Masquer les valeurs sensibles dans les logs et le debug
+- spip-security/securite#4952 débuggueur: echapper la requete affichee dans le ``
+- spip-security/securite#4952 echappement des attributs dans le debuggueur
+- spip-security/securite#4947 redirige_formulaire est moins laxiste avec la mise en forme des urls
+- spip-security/securite#4938 ne jamais utiliser redirige_par_entete() dans une action
+- spip-security/securite#4928 `|balise_svg` fait appel au sanitizer svg avant tout affichage
+- spip-security/securite#4927 la `copie_locale()` abandonne si la sanitization du fichier echoue
+- spip-security/securite#4927 support des svg avec une balise ` $ids], [$objet_lie => $idl], [$qualif => $valeur_qualif ]);
+ objet_associer([$objet_source => $ids], [$objet_lie => $idl], [$qualif => $valeur_qualif]);
} else {
[$objet_source, $ids, $objet_lie, $idl] = $args;
objet_associer([$objet_source => $ids], [$objet_lie => $idl]);
diff -Nru spip-4.4.23+dfsg/ecrire/action/annuler_job.php spip-4.4.28+dfsg/ecrire/action/annuler_job.php
--- spip-4.4.23+dfsg/ecrire/action/annuler_job.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/action/annuler_job.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,28 +1,23 @@
joli_repertoire(_DIR_VAR),
- 'taille' => '' . (taille_en_octets($taille) > 0 ? taille_en_octets($taille) : '0 octet') . ' '
+ 'taille' => '' . (taille_en_octets($taille) > 0 ? taille_en_octets($taille) : '0 octet') . ' ',
]
);
} else {
@@ -67,7 +64,6 @@
ajax_retour($res);
}
-
/**
* Calculer la taille d'un dossier, sous dossiers inclus
*
@@ -75,7 +71,7 @@
* @return int Taille en octets
*/
function calculer_taille_dossier($dir) {
- if (!is_dir($dir) or !is_readable($dir)) {
+ if (!is_dir($dir) || !is_readable($dir)) {
return 0;
}
$handle = opendir($dir);
diff -Nru spip-4.4.23+dfsg/ecrire/action/confirmer_email.php spip-4.4.28+dfsg/ecrire/action/confirmer_email.php
--- spip-4.4.23+dfsg/ecrire/action/confirmer_email.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/action/confirmer_email.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,20 +1,17 @@
$arg]);
}
diff -Nru spip-4.4.23+dfsg/ecrire/action/confirmer_inscription.php spip-4.4.28+dfsg/ecrire/action/confirmer_inscription.php
--- spip-4.4.23+dfsg/ecrire/action/confirmer_inscription.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/action/confirmer_inscription.php 2026-10-07 13:48:22.000000000 +0000
@@ -13,10 +13,7 @@
/**
* Gestion de l'action confirmer_inscription
- *
- * @package SPIP\Core\Inscription
*/
-
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
@@ -26,7 +23,6 @@
*
* @global array $GLOBALS ['visiteur_session']
* @global string $GLOBALS ['redirect']
- * @return void
*/
function action_confirmer_inscription_dist() {
$jeton = _request('jeton');
@@ -34,9 +30,9 @@
include_spip('action/inscrire_auteur');
if (
- $auteur = auteur_verifier_jeton($jeton)
- and $auteur['email'] == $email
- and $auteur['statut'] == 'nouveau'
+ ($auteur = auteur_verifier_jeton($jeton))
+ && $auteur['email'] == $email
+ && $auteur['statut'] == 'nouveau'
) {
// d'abord on confirme son statut
$auteur = confirmer_statut_inscription($auteur);
diff -Nru spip-4.4.23+dfsg/ecrire/action/converser.php spip-4.4.28+dfsg/ecrire/action/converser.php
--- spip-4.4.23+dfsg/ecrire/action/converser.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/action/converser.php 2026-10-07 13:48:22.000000000 +0000
@@ -13,9 +13,7 @@
/**
* Gestion de l'action converser qui permet changer de langue
- *
- * @package SPIP\Core\Langue
- **/
+ */
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
@@ -27,25 +25,23 @@
*
* Pas de secu si espace public ou login ou installation
* mais alors on n'accède pas à la base, on pose seulement le cookie.
- *
- * @return void
*/
function action_converser_dist() {
$update_session = false;
- if (_request('arg') and spip_connect()) {
+ if (_request('arg') && spip_connect()) {
$securiser_action = charger_fonction('securiser_action', 'inc');
$securiser_action();
$update_session = true;
}
$lang = action_converser_changer_langue($update_session);
- $redirect = rawurldecode(_request('redirect'));
+ $redirect = _request('redirect');
if (!$redirect) {
$redirect = param('spip.routes.back_office');
}
$redirect = parametre_url($redirect, 'lang', $lang, '&');
- redirige_par_entete($redirect, true);
+ redirige_action($redirect);
}
/**
@@ -82,7 +78,6 @@
*
* @param string $lang
* @param bool $ecrire
- * @return void
*/
function action_converser_post($lang, $ecrire = false) {
if ($lang) {
diff -Nru spip-4.4.23+dfsg/ecrire/action/cookie.php spip-4.4.28+dfsg/ecrire/action/cookie.php
--- spip-4.4.23+dfsg/ecrire/action/cookie.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/action/cookie.php 2026-10-07 13:48:22.000000000 +0000
@@ -13,10 +13,7 @@
/**
* Gestion de l'action cookie
- *
- * @package SPIP\Core\Inscription
*/
-
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
@@ -31,13 +28,12 @@
* @global bool ignore_auth_http
* @param string|null $set_cookie_admin
* @param string|null $change_session
- * @return void
*/
function action_cookie_dist($set_cookie_admin = null, $change_session = null) {
$redirect_echec = $redirect = null;
$test_echec_cookie = null;
$url = '';
- if (is_null($set_cookie_admin)) {
+ if ($set_cookie_admin === null) {
$set_cookie_admin = _request('cookie_admin');
$change_session = _request('change_session');
$test_echec_cookie = _request('test_echec_cookie');
@@ -52,7 +48,6 @@
}
}
-
// rejoue le cookie pour renouveler spip_session
if ($change_session == 'oui') {
$session = charger_fonction('session', 'inc');
@@ -63,15 +58,15 @@
}
// tentative de connexion en auth_http
- if (_request('essai_auth_http') and !$GLOBALS['ignore_auth_http']) {
+ if (_request('essai_auth_http') && !$GLOBALS['ignore_auth_http']) {
include_spip('inc/auth');
if (
@$_SERVER['PHP_AUTH_USER']
- and @$_SERVER['PHP_AUTH_PW']
- and $auteur = lire_php_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'])
+ && @$_SERVER['PHP_AUTH_PW']
+ && ($auteur = lire_php_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']))
) {
auth_loger($auteur);
- redirige_par_entete(parametre_url($redirect, 't', time(), '&'));
+ redirige_action(parametre_url($redirect, 't', time(), '&'));
} else {
ask_php_auth(
_T('info_connexion_refusee'),
@@ -110,7 +105,7 @@
}
} // Ajout de cookie d'admin
else {
- if ($set_cookie_admin and _DUREE_COOKIE_ADMIN) {
+ if ($set_cookie_admin && _DUREE_COOKIE_ADMIN) {
spip_setcookie('spip_admin', $set_cookie_admin, [
'expires' => time() + max(_DUREE_COOKIE_ADMIN, 2 * _RENOUVELLE_ALEA),
'httponly' => true,
@@ -122,6 +117,6 @@
// Redirection finale
if ($redirect) {
- redirige_par_entete($redirect, true);
+ redirige_action($redirect, true);
}
}
diff -Nru spip-4.4.23+dfsg/ecrire/action/debloquer_edition.php spip-4.4.28+dfsg/ecrire/action/debloquer_edition.php
--- spip-4.4.23+dfsg/ecrire/action/debloquer_edition.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/action/debloquer_edition.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,20 +1,17 @@
page('', ['titre' => _T('info_acces_interdit')]);
@@ -126,11 +123,11 @@
'article',
$id_article,
[
- 'data' => $set,
- 'nonvide' => ['titre' => _T('info_nouvel_article') . ' ' . _T('info_numero_abbreviation') . $id_article],
- 'invalideur' => $invalideur,
- 'indexation' => $indexation,
- 'date_modif' => 'date_modif' // champ a mettre a date('Y-m-d H:i:s') s'il y a modif
+ 'data' => $set,
+ 'nonvide' => ['titre' => _T('info_nouvel_article') . ' ' . _T('info_numero_abbreviation') . $id_article],
+ 'invalideur' => $invalideur,
+ 'indexation' => $indexation,
+ 'date_modif' => 'date_modif', // champ a mettre a date('Y-m-d H:i:s') s'il y a modif
],
$c
)
@@ -174,7 +171,6 @@
* @param array|null $set
* @return int
* Identifiant du nouvel article
- *
*/
function article_inserer($id_rubrique, $set = null) {
@@ -199,10 +195,8 @@
// ou a defaut celle de la rubrique
// Sinon c'est la langue de la rubrique qui est choisie + heritee
if (
- !empty($GLOBALS['meta']['multi_objets']) and in_array(
- 'spip_articles',
- explode(',', $GLOBALS['meta']['multi_objets'])
- )
+ !empty($GLOBALS['meta']['multi_objets'])
+ && in_array('spip_articles', explode(',', $GLOBALS['meta']['multi_objets']))
) {
lang_select($GLOBALS['visiteur_session']['lang'] ?? '');
if (
@@ -227,7 +221,7 @@
'statut' => 'prepa',
'date' => date('Y-m-d H:i:s'),
'lang' => $lang,
- 'langue_choisie' => $choisie
+ 'langue_choisie' => $choisie,
];
if ($set) {
@@ -241,7 +235,7 @@
'args' => [
'table' => 'spip_articles',
],
- 'data' => $champs
+ 'data' => $champs,
]
);
@@ -249,7 +243,7 @@
// controler si le serveur n'a pas renvoye une erreur
if ($id_article > 0) {
- $id_auteur = ((is_null(_request('id_auteur')) and isset($GLOBALS['visiteur_session']['id_auteur'])) ?
+ $id_auteur = ((_request('id_auteur') === null && isset($GLOBALS['visiteur_session']['id_auteur'])) ?
$GLOBALS['visiteur_session']['id_auteur']
: _request('id_auteur'));
if ($id_auteur) {
@@ -263,9 +257,9 @@
[
'args' => [
'table' => 'spip_articles',
- 'id_objet' => $id_article
+ 'id_objet' => $id_article,
],
- 'data' => $champs
+ 'data' => $champs,
]
);
@@ -294,7 +288,6 @@
return $id_article;
}
-
/**
* Modification des statuts d'un article
*
@@ -333,10 +326,10 @@
$s = $c['statut'] ?? $statut;
// cf autorisations dans inc/instituer_article
- if ($s != $statut or ($d and $d != $date)) {
+ if ($s != $statut || $d && $d != $date) {
if (autoriser('publierdans', 'rubrique', $id_rubrique)) {
$statut = $champs['statut'] = $s;
- } elseif (autoriser('modifier', 'article', $id_article) and $s != 'publie') {
+ } elseif (autoriser('modifier', 'article', $id_article) && $s != 'publie') {
$statut = $champs['statut'] = $s;
} else {
spip_log("editer_article $id_article refus " . join(' ', $c));
@@ -347,10 +340,9 @@
// ou si l'article est deja date dans le futur
// En cas de proposition d'un article (mais pas depublication), idem
if (
- $champs['statut'] == 'publie'
- or ($champs['statut'] == 'prop' and ($d or !in_array($statut_ancien, ['publie', 'prop'])))
+ $champs['statut'] == 'publie' || $champs['statut'] == 'prop' && ($d || !in_array($statut_ancien, ['publie', 'prop']))
) {
- if ($d or strtotime($d = $date) > time()) {
+ if ($d || strtotime($d = $date) > time()) {
$champs['date'] = $date = $d;
} else {
$champs['date'] = $date = date('Y-m-d H:i:s');
@@ -362,9 +354,9 @@
// de la rubrique actuelle
if (
isset($c['id_parent'])
- and $id_parent = $c['id_parent']
- and $id_parent != $id_rubrique
- and (sql_fetsel('1', 'spip_rubriques', 'id_rubrique=' . intval($id_parent)))
+ && ($id_parent = $c['id_parent'])
+ && $id_parent != $id_rubrique
+ && sql_fetsel('1', 'spip_rubriques', 'id_rubrique=' . intval($id_parent))
) {
$champs['id_rubrique'] = $id_parent;
@@ -373,7 +365,7 @@
// repasser l'article en statut 'propose'.
if (
$statut == 'publie'
- and !autoriser('publierdans', 'rubrique', $id_parent)
+ && !autoriser('publierdans', 'rubrique', $id_parent)
) {
$champs['statut'] = 'prop';
}
@@ -394,7 +386,7 @@
'date_ancienne' => $date_ancienne,
'id_parent_ancien' => $id_rubrique,
],
- 'data' => $champs
+ 'data' => $champs,
]
);
@@ -412,7 +404,7 @@
if ($date) {
$t = strtotime($date);
$p = @$GLOBALS['meta']['date_prochain_postdate'];
- if ($t > time() and (!$p or ($t < $p))) {
+ if ($t > time() && (!$p || $t < $p)) {
ecrire_meta('date_prochain_postdate', $t);
}
}
@@ -432,7 +424,7 @@
'date_ancienne' => $date_ancienne,
'id_parent_ancien' => $id_rubrique,
],
- 'data' => $champs
+ 'data' => $champs,
]
);
@@ -526,15 +518,13 @@
if ($cond) {
include_spip('inc/rubriques');
- $postdate = ($GLOBALS['meta']['post_dates'] == 'non' and isset($champs['date']) and (strtotime($champs['date']) < time())) ? $champs['date'] : false;
+ $postdate = ($GLOBALS['meta']['post_dates'] == 'non' && isset($champs['date']) && strtotime($champs['date']) < time()) ? $champs['date'] : false;
calculer_rubriques_if($id_rubrique, $champs, ['statut_ancien' => $statut], $postdate);
}
}
/**
* Réunit les textes decoupés parce que trop longs
- *
- * @return void
*/
function trop_longs_articles() {
if (is_array($plus = _request('texte_plus'))) {
diff -Nru spip-4.4.23+dfsg/ecrire/action/editer_auteur.php spip-4.4.28+dfsg/ecrire/action/editer_auteur.php
--- spip-4.4.23+dfsg/ecrire/action/editer_auteur.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/action/editer_auteur.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,22 +1,19 @@
page('', ['titre' => _T('info_acces_interdit')]);
@@ -51,7 +48,6 @@
}
}
-
// si id_auteur n'est pas un nombre, c'est une creation
if (!$id_auteur = intval($arg)) {
if (($id_auteur = auteur_inserer()) > 0) {
@@ -119,7 +115,7 @@
'args' => [
'table' => 'spip_auteurs',
],
- 'data' => $champs
+ 'data' => $champs,
]
);
$id_auteur = sql_insertq('spip_auteurs', $champs);
@@ -128,9 +124,9 @@
[
'args' => [
'table' => 'spip_auteurs',
- 'id_objet' => $id_auteur
+ 'id_objet' => $id_auteur,
],
- 'data' => $champs
+ 'data' => $champs,
]
);
@@ -157,7 +153,6 @@
return $id_auteur;
}
-
/**
* Modifier un auteur
*
@@ -195,21 +190,21 @@
'auteur',
$id_auteur,
[
- 'data' => $set,
- 'nonvide' => ['nom' => _T('ecrire:item_nouvel_auteur')]
+ 'data' => $set,
+ 'nonvide' => ['nom' => _T('ecrire:item_nouvel_auteur')],
],
$c
)
) {
return $err;
}
- $session = $c;
+ $changed_session = $c;
$err = '';
if (!$force_update) {
// Modification de statut, changement de rubrique ?
$c = collecter_requests(
- // include list
+ // include list
[
'statut',
'new_login',
@@ -218,33 +213,51 @@
'pass',
'webmestre',
'restreintes',
- 'id_parent'
+ 'id_parent',
],
// exclude list
[],
// donnees eventuellement fournies
$set
);
- if (isset($c['new_login']) and !isset($c['login'])) {
+ if (isset($c['new_login']) && !isset($c['login'])) {
$c['login'] = $c['new_login'];
}
- if (isset($c['new_pass']) and !isset($c['pass'])) {
+ if (isset($c['new_pass']) && !isset($c['pass'])) {
$c['pass'] = $c['new_pass'];
}
$err = auteur_instituer($id_auteur, $c);
- $session = array_merge($session, $c);
+ $changed_session = array_merge($changed_session, $c);
}
// .. mettre a jour les sessions de cet auteur
- include_spip('inc/session');
- $session['id_auteur'] = $id_auteur;
- unset($session['new_login']);
- unset($session['new_pass']);
- actualiser_sessions($session);
-
+ $session = auteur_recharger_variables_sessions($id_auteur, array_keys($changed_session));
+ if ($session) {
+ include_spip('inc/session');
+ actualiser_sessions($session);
+ }
return $err;
}
+function auteur_recharger_variables_sessions(int $id_auteur, array $champs): ?array {
+ // on relit en base pour prendre en compte ce qui a été vraiment modifié ou pas selon les autorisations
+ $auteur = sql_fetsel('*', 'spip_auteurs', 'id_auteur = ' . intval($id_auteur));
+ if ($auteur) {
+ $session = ['id_auteur' => $id_auteur];
+ foreach ($champs as $champ) {
+ if (isset($auteur[$champ])) {
+ $session[$champ] = $auteur[$champ];
+ }
+ }
+ if (in_array('restreintes', $champs) || in_array('restreint', $champs)) {
+ include_spip('inc/autoriser');
+ $session['restreint'] = liste_rubriques_auteur($id_auteur, true);
+ }
+ return $session;
+ }
+ return null;
+}
+
/**
* Associer un auteur à des objets listés
*
@@ -312,7 +325,6 @@
return objet_qualifier_liens(['auteur' => $id_auteur], $objets, $qualif);
}
-
/**
* Modifier le statut d'un auteur, ou son login/pass
*
@@ -362,7 +374,7 @@
// Restreindre avant de declarer l'auteur
// (section critique sur les droits)
- if (isset($c['id_parent']) and $c['id_parent']) {
+ if (isset($c['id_parent']) && $c['id_parent']) {
if (is_array($c['restreintes'])) {
$c['restreintes'][] = $c['id_parent'];
} else {
@@ -372,13 +384,13 @@
if (
isset($c['webmestre'])
- and ($force_webmestre or autoriser('modifier', 'auteur', $id_auteur, null, ['webmestre' => '?']))
+ && ($force_webmestre || autoriser('modifier', 'auteur', $id_auteur, null, ['webmestre' => '?']))
) {
$champs['webmestre'] = $c['webmestre'] == 'oui' ? 'oui' : 'non';
}
// si statut change et n'est pas 0minirezo, on force webmestre a non
- if (isset($c['statut']) and $c['statut'] !== '0minirezo') {
+ if (isset($c['statut']) && $c['statut'] !== '0minirezo') {
$champs['webmestre'] = $c['webmestre'] = 'non';
}
@@ -395,13 +407,14 @@
'action' => 'instituer',
'statut_ancien' => $statut_ancien,
],
- 'data' => $champs
+ 'data' => $champs,
]
);
if (
- isset($c['restreintes']) and is_array($c['restreintes'])
- and autoriser('modifier', 'auteur', $id_auteur, null, ['restreint' => $c['restreintes']])
+ isset($c['restreintes'])
+ && is_array($c['restreintes'])
+ && autoriser('modifier', 'auteur', $id_auteur, null, ['restreintes' => $c['restreintes']])
) {
$rubriques = array_map('intval', $c['restreintes']);
$rubriques = array_unique($rubriques);
@@ -413,15 +426,15 @@
$flag_ecrire_acces = false;
// commencer par traiter les cas particuliers des logins et pass
// avant les autres ecritures en base
- if (isset($champs['login']) or isset($champs['pass'])) {
+ if (isset($champs['login']) || isset($champs['pass'])) {
$auth_methode = sql_getfetsel('source', 'spip_auteurs', 'id_auteur=' . intval($id_auteur));
include_spip('inc/auth');
- if (isset($champs['login']) and strlen($champs['login'])) {
+ if (isset($champs['login']) && strlen($champs['login'])) {
if (!auth_modifier_login($auth_methode, $champs['login'], $id_auteur)) {
$erreurs[] = 'ecrire:impossible_modifier_login_auteur';
}
}
- if (isset($champs['pass']) and strlen($champs['pass'])) {
+ if (isset($champs['pass']) && strlen($champs['pass'])) {
$champs['login'] = sql_getfetsel('login', 'spip_auteurs', 'id_auteur=' . intval($id_auteur));
if (!auth_modifier_pass($auth_methode, $champs['login'], $champs['pass'], $id_auteur)) {
$erreurs[] = 'ecrire:impossible_modifier_pass_auteur';
@@ -439,8 +452,7 @@
// .. mettre a jour les fichiers .htpasswd et .htpasswd-admin
if (
- $flag_ecrire_acces
- or isset($champs['statut'])
+ $flag_ecrire_acces || isset($champs['statut'])
) {
include_spip('inc/acces');
ecrire_acces();
@@ -463,7 +475,7 @@
'action' => 'instituer',
'statut_ancien' => $statut_ancien,
],
- 'data' => $champs
+ 'data' => $champs,
]
);
diff -Nru spip-4.4.23+dfsg/ecrire/action/editer_liens.php spip-4.4.28+dfsg/ecrire/action/editer_liens.php
--- spip-4.4.23+dfsg/ecrire/action/editer_liens.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/action/editer_liens.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,13 +1,13 @@
false])
- and !preg_match(',[^\w],', $primary)
- and !preg_match(',[^\w],', $l)
+ ($primary = id_table_objet($objet))
+ && $trouver_table($l = $table_sql . '_liens', '', true, ['log_missing' => false])
+ && !preg_match(',[^\w],', $primary)
+ && !preg_match(',[^\w],', $l)
) {
return [$primary, $l];
}
@@ -96,7 +92,6 @@
return $modifs; // pas d'erreur
}
-
/**
* Dissocier un (ou des) objet(s) des objets listés
*
@@ -130,7 +125,6 @@
return objet_traiter_liaisons('lien_delete', $objets_source, $objets_lies, $cond);
}
-
/**
* Qualifier le lien entre un (ou des) objet(s) et des objets listés
*
@@ -155,7 +149,6 @@
return objet_traiter_liaisons('lien_set', $objets_source, $objets_lies, $qualif);
}
-
/**
* Trouver les liens entre objets
*
@@ -190,7 +183,6 @@
return objet_traiter_liaisons('lien_find', $objets_source, $objets_lies, $cond);
}
-
/**
* Nettoyer les liens morts vers des objets qui n'existent plus
*
@@ -215,7 +207,6 @@
return objet_traiter_liaisons('lien_optimise', $objets_source, $objets_lies);
}
-
/**
* Dupliquer tous les liens entrant ou sortants d'un objet
* vers un autre (meme type d'objet, mais id different)
@@ -237,8 +228,8 @@
$n = 0;
foreach ($tables as $table_sql => $infos) {
if (
- (is_null($types) or in_array($infos['type'], $types))
- and (is_null($exclure_types) or !in_array($infos['type'], $exclure_types))
+ ($types === null || in_array($infos['type'], $types))
+ && ($exclure_types === null || !in_array($infos['type'], $exclure_types))
) {
if (objet_associable($infos['type'])) {
$liens = (($infos['type'] == $objet) ?
@@ -249,8 +240,8 @@
$n++;
if ($infos['type'] == $objet) {
if (
- (is_null($types) or in_array($lien['objet'], $types))
- and (is_null($exclure_types) or !in_array($lien['objet'], $exclure_types))
+ ($types === null || in_array($lien['objet'], $types))
+ && ($exclure_types === null || !in_array($lien['objet'], $exclure_types))
) {
objet_associer([$objet => $id_cible], [$lien['objet'] => $lien[$lien['objet']]], $lien);
}
@@ -270,7 +261,6 @@
* ne pas les appeler directement
*/
-
/**
* Fonction générique qui
* applique une operation de liaison entre un ou des objets et des objets listés
@@ -335,10 +325,9 @@
}
}
- return ($echec ? false : $modifs); // pas d'erreur
+ return $echec ? false : $modifs; // pas d'erreur
}
-
/**
* Sous fonction insertion
* qui traite les liens pour un objet source dont la clé primaire
@@ -366,9 +355,7 @@
function lien_insert($objet_source, $primary, $table_lien, $id, $objets, $qualif) {
$ins = 0;
$echec = null;
- if (is_null($qualif)) {
- $qualif = [];
- }
+ $qualif ??= [];
foreach ($objets as $objet => $id_objets) {
if (!is_array($id_objets)) {
@@ -385,20 +372,19 @@
$insertions = [
'id_objet' => $id_objet,
'objet' => $objet,
- $primary => $id
+ $primary => $id,
];
// rôle en plus s'il est défini
if ($role) {
$insertions += [
- $colonne_role => $role
+ $colonne_role => $role,
];
}
if (lien_triables($table_lien)) {
if (isset($qualif['rang_lien'])) {
$rang = $qualif['rang_lien'];
- }
- else {
+ } else {
$where = lien_where($primary, $id, $objet, $id_objet);
// si il y a deja un lien pour ce couple (avec un autre role?) on reprend le meme rang si non nul
if (!$rang = intval(sql_getfetsel('rang_lien', $table_lien, $where))) {
@@ -429,7 +415,7 @@
'pre_edition_lien',
[
'args' => $args,
- 'data' => $insertions
+ 'data' => $insertions,
]
);
$args['id_objet'] = $insertions['id_objet'];
@@ -437,10 +423,10 @@
$where = lien_where($primary, $id, $objet, $id_objet, $cond);
if (
- ($id_objet = intval($insertions['id_objet']) or in_array($objet, ['site', 'rubrique']))
- and !sql_getfetsel($primary, $table_lien, $where)
+ (($id_objet = intval($insertions['id_objet'])) || in_array($objet, ['site', 'rubrique']))
+ && !sql_getfetsel($primary, $table_lien, $where)
) {
- if (lien_triables($table_lien) and isset($insertions['rang_lien']) and intval($insertions['rang_lien'])) {
+ if (lien_triables($table_lien) && isset($insertions['rang_lien']) && intval($insertions['rang_lien'])) {
$where_meme_lien = lien_where($primary, $id, $objet, $id_objet);
$where_meme_lien = implode(' AND ', $where_meme_lien);
// on decale les liens de rang_lien>=la valeur inseree pour faire la place
@@ -459,7 +445,7 @@
'post_edition_lien',
[
'args' => $args,
- 'data' => $insertions
+ 'data' => $insertions,
]
);
} else {
@@ -470,14 +456,13 @@
}
// si on a fait des insertions, on reordonne les liens concernes
// pas la peine si $qualif['rang_lien'] etait fournie, on va passer dans lien_set a suivre et donc finir le recomptage
- if ($ins > 0 and empty($qualif['rang_lien'])) {
+ if ($ins > 0 && empty($qualif['rang_lien'])) {
lien_ordonner($objet_source, $primary, $table_lien, $id, $objets);
}
- return ($echec ? false : $ins);
+ return $echec ? false : $ins;
}
-
/**
* Reordonner les liens sur lesquels on est intervenus
* @param string $objet_source
@@ -506,7 +491,7 @@
$liens = sql_allfetsel("$primary, id_objet, objet, rang_lien", $table_lien, $where, '', 'rang_lien');
$rangs = array_column($liens, 'rang_lien');
- if (count($rangs) and (max($rangs) > 0 or min($rangs) < 0)) {
+ if (count($rangs) && (max($rangs) > 0 || min($rangs) < 0)) {
$rang = 1;
foreach ($liens as $lien) {
if (empty($deja_reordonne[$lien[$primary]][$lien['objet']][$lien['id_objet']])) {
@@ -530,11 +515,9 @@
}
}
-
/**
* Une table de lien est-elle triable ?
* elle doit disposer d'un champ rang_lien pour cela
- * @param $table_lien
* @return mixed
*/
function lien_triables($table_lien) {
@@ -542,17 +525,15 @@
if (!isset($triables[$table_lien])) {
$trouver_table = charger_fonction('trouver_table', 'base');
$desc = $trouver_table($table_lien);
- if ($desc and isset($desc['field']['rang_lien'])) {
+ if ($desc && isset($desc['field']['rang_lien'])) {
$triables[$table_lien] = true;
- }
- else {
+ } else {
$triables[$table_lien] = false;
}
}
return $triables[$table_lien];
}
-
/**
* Fabriquer la condition where en tenant compte des jokers *
*
@@ -566,15 +547,15 @@
*/
function lien_where($primary, $id_source, $objet, $id_objet, $cond = []) {
if (
- (!is_array($id_source) and !strlen($id_source))
- or !strlen($objet)
- or (!is_array($id_objet) and !strlen($id_objet))
+ !is_array($id_source) && !strlen($id_source)
+ || !strlen($objet)
+ || !is_array($id_objet) && !strlen($id_objet)
) {
return ['0=1'];
} // securite
$not = '';
- if (is_array($id_source) and reset($id_source) == 'NOT') {
+ if (is_array($id_source) && reset($id_source) == 'NOT') {
$not = array_shift($id_source);
$id_source = reset($id_source);
}
@@ -592,7 +573,7 @@
} // idiot mais quand meme
$not = '';
- if (is_array($id_objet) and reset($id_objet) == 'NOT') {
+ if (is_array($id_objet) && reset($id_objet) == 'NOT') {
$not = array_shift($id_objet);
$id_objet = reset($id_objet);
}
@@ -665,13 +646,11 @@
$retires = [];
$dels = 0;
$echec = false;
- if (is_null($cond)) {
- $cond = [];
- }
+ $cond ??= [];
foreach ($objets as $objet => $id_objets) {
$objet = ($objet == '*') ? $objet : objet_type($objet); # securite
- if (!is_array($id_objets) or reset($id_objets) == 'NOT') {
+ if (!is_array($id_objets) || reset($id_objets) == 'NOT') {
$id_objets = [$id_objets];
}
foreach ($id_objets as $id_objet) {
@@ -704,7 +683,7 @@
'pre_edition_lien',
[
'args' => $args,
- 'data' => $l
+ 'data' => $l,
]
);
$args['id_objet'] = $id_o = $l['id_objet'];
@@ -724,14 +703,14 @@
'lien' => [$l['objet'] => $id_o],
'type' => $l['objet'],
'role' => ($colonne_role ? $l[$colonne_role] : ''),
- 'id' => $id_o
+ 'id' => $id_o,
];
// Envoyer aux plugins
pipeline(
'post_edition_lien',
[
'args' => $args,
- 'data' => $l
+ 'data' => $l,
]
);
}
@@ -747,10 +726,9 @@
pipeline('trig_supprimer_objets_lies', $retires);
- return ($echec ? false : $dels);
+ return $echec ? false : $dels;
}
-
/**
* Sous fonction optimisation
* qui nettoie les liens morts (vers un objet inexistant)
@@ -775,7 +753,7 @@
$dels = 0;
foreach ($objets as $objet => $id_objets) {
$objet = ($objet == '*') ? $objet : objet_type($objet); # securite
- if (!is_array($id_objets) or reset($id_objets) == 'NOT') {
+ if (!is_array($id_objets) || reset($id_objets) == 'NOT') {
$id_objets = [$id_objets];
}
foreach ($id_objets as $id_objet) {
@@ -834,10 +812,9 @@
}
}
- return ($echec ? false : $dels);
+ return $echec ? false : $dels;
}
-
/**
* Sous fonction qualification
* qui traite les liens pour un objet source dont la clé primaire
@@ -886,7 +863,7 @@
roles_trouver_dans_qualif($objet_source, $objet, $qualif);
$objet = ($objet == '*') ? $objet : objet_type($objet); # securite
- if (!is_array($id_objets) or reset($id_objets) == 'NOT') {
+ if (!is_array($id_objets) || reset($id_objets) == 'NOT') {
$id_objets = [$id_objets];
}
foreach ($id_objets as $id_objet) {
@@ -911,7 +888,7 @@
);
$args['id_objet'] = $id_objet;
- if (lien_triables($table_lien) and isset($qualif['rang_lien'])) {
+ if (lien_triables($table_lien) && isset($qualif['rang_lien'])) {
if (intval($qualif['rang_lien'])) {
// on decale les liens de rang_lien>=la valeur inseree pour faire la place
// sauf sur le meme lien avec un role eventuellement different
@@ -939,7 +916,7 @@
'post_edition_lien',
[
'args' => $args,
- 'data' => $qualif
+ 'data' => $qualif,
]
);
$ok++;
@@ -951,7 +928,7 @@
lien_ordonner($objet_source, $primary, $table_lien, $id, $objets);
}
- return ($echec ? false : $ok);
+ return $echec ? false : $ok;
}
/**
diff -Nru spip-4.4.23+dfsg/ecrire/action/editer_logo.php spip-4.4.28+dfsg/ecrire/action/editer_logo.php
--- spip-4.4.23+dfsg/ecrire/action/editer_logo.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/action/editer_logo.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,25 +1,21 @@
$objet]);
-
$trouver_table = charger_fonction('trouver_table', 'base');
$chercher_logo = charger_fonction('chercher_logo', 'inc');
include_spip('inc/chercher_logo');
@@ -216,12 +209,12 @@
$logo = explode('.', $logo);
if (
is_numeric($logo[0])
- and ($id_objet = intval($logo[0]) or in_array($objet, ['site', 'rubrique']))
+ && (($id_objet = intval($logo[0])) || in_array($objet, ['site', 'rubrique']))
) {
if (!isset($deja[$id_objet])) {
$logo = $chercher_logo($id_objet, $_id_objet, $mode);
// if no logo in base
- if (!$logo or (is_countable($logo) ? count($logo) : 0) < 6) {
+ if (!$logo || (is_countable($logo) ? count($logo) : 0) < 6) {
foreach ($formats_logos as $format) {
if (@file_exists($d = ($dir . ($nom = $nom_base . intval($id_objet) . '.' . $format)))) {
if (isset($desc['field']['date_modif'])) {
@@ -247,7 +240,7 @@
}
// si le fichier est encore la on le move : rien a faire ici
// (sauf si c'est une re-migration : il est deja dans logo/ donc il bouge pas)
- if ($dir !== $dir_logos and file_exists($file)) {
+ if ($dir !== $dir_logos && file_exists($file)) {
@rename($file, $dir_logos_erreurs . basename($file));
}
@@ -256,7 +249,7 @@
spip_log("logo_migrer_en_base $objet $mode : " . $count . ' logos restant', 'maj' . _LOG_INFO_IMPORTANTE);
}
- if ($time_limit and time() > $time_limit) {
+ if ($time_limit && time() > $time_limit) {
effacer_meta('drapeau_edition');
return;
}
diff -Nru spip-4.4.23+dfsg/ecrire/action/editer_objet.php spip-4.4.28+dfsg/ecrire/action/editer_objet.php
--- spip-4.4.23+dfsg/ecrire/action/editer_objet.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/action/editer_objet.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,22 +1,19 @@
page('', ['titre' => _T('info_acces_interdit')]);
die();
@@ -107,8 +104,7 @@
$objet = $t;
}
if (
- include_spip('action/editer_' . $objet)
- and function_exists($modifier = $objet . '_modifier')
+ include_spip('action/editer_' . $objet) && function_exists($modifier = $objet . '_modifier')
) {
return $modifier($id, $set);
}
@@ -116,7 +112,7 @@
$table_sql = table_objet_sql($objet);
$trouver_table = charger_fonction('trouver_table', 'base');
$desc = $trouver_table($table_sql);
- if (!$desc or !isset($desc['field'])) {
+ if (!$desc || !isset($desc['field'])) {
spip_log("Objet $objet inconnu dans objet_modifier", 'editer' . _LOG_ERREUR);
return _L("Erreur objet $objet inconnu");
@@ -124,7 +120,7 @@
include_spip('inc/modifier');
$champ_date = '';
- if (isset($desc['date']) and $desc['date']) {
+ if (isset($desc['date']) && $desc['date']) {
$champ_date = $desc['date'];
} elseif (isset($desc['field']['date'])) {
$champ_date = 'date';
@@ -161,12 +157,12 @@
$objet,
$id,
[
- 'data' => $set,
- 'nonvide' => '',
- 'invalideur' => $invalideur,
- 'indexation' => $indexation,
- // champ a mettre a date('Y-m-d H:i:s') s'il y a modif
- 'date_modif' => (isset($desc['field']['date_modif']) ? 'date_modif' : '')
+ 'data' => $set,
+ 'nonvide' => '',
+ 'invalideur' => $invalideur,
+ 'indexation' => $indexation,
+ // champ a mettre a date('Y-m-d H:i:s') s'il y a modif
+ 'date_modif' => (isset($desc['field']['date_modif']) ? 'date_modif' : ''),
],
$c
)
@@ -218,7 +214,7 @@
}
if (
include_spip('action/editer_' . $objet)
- and function_exists($inserer = $objet . '_inserer')
+ && function_exists($inserer = $objet . '_inserer')
) {
return $inserer($id_parent, $set);
}
@@ -226,7 +222,7 @@
$table_sql = table_objet_sql($objet);
$trouver_table = charger_fonction('trouver_table', 'base');
$desc = $trouver_table($table_sql);
- if (!$desc or !isset($desc['field'])) {
+ if (!$desc || !isset($desc['field'])) {
return 0;
}
@@ -254,7 +250,7 @@
// ou a defaut celle de la rubrique
// Sinon c'est la langue de la rubrique qui est choisie + heritee
if (
- isset($desc['field']['lang']) and !empty($GLOBALS['meta']['multi_objets']) and in_array(
+ isset($desc['field']['lang']) && !empty($GLOBALS['meta']['multi_objets']) && in_array(
$table_sql,
explode(',', $GLOBALS['meta']['multi_objets'])
)
@@ -271,7 +267,7 @@
$champs['langue_choisie'] = 'oui';
}
}
- } elseif (isset($desc['field']['lang']) and isset($desc['field']['langue_choisie'])) {
+ } elseif (isset($desc['field']['lang']) && isset($desc['field']['langue_choisie'])) {
$champs['lang'] = ($lang_rub ?: $GLOBALS['meta']['langue_site']);
$champs['langue_choisie'] = 'non';
}
@@ -285,8 +281,7 @@
}
}
-
- if ((isset($desc['date']) and $d = $desc['date']) or isset($desc['field'][$d = 'date'])) {
+ if (isset($desc['date']) && ($d = $desc['date']) || isset($desc['field'][$d = 'date'])) {
$champs[$d] = date('Y-m-d H:i:s');
}
@@ -302,7 +297,7 @@
'table' => $table_sql,
'id_parent' => $id_parent,
],
- 'data' => $champs
+ 'data' => $champs,
]
);
@@ -315,10 +310,10 @@
// et si le form n'a pas poste un id_auteur (meme vide, ce qui sert a annuler cette auto association)
if (
$id > 0
- and !isset($desc['field']['id_auteur'])
+ && !isset($desc['field']['id_auteur'])
) {
- $id_auteur = ((is_null(_request('id_auteur')) and isset($GLOBALS['visiteur_session']['id_auteur'])) ?
- $GLOBALS['visiteur_session']['id_auteur']
+ $id_auteur = ((_request('id_auteur') === null && isset($GLOBALS['visiteur_session']['id_auteur']))
+ ? $GLOBALS['visiteur_session']['id_auteur']
: _request('id_auteur'));
if ($id_auteur) {
include_spip('action/editer_auteur');
@@ -334,7 +329,7 @@
'id_parent' => $id_parent,
'id_objet' => $id,
],
- 'data' => $champs
+ 'data' => $champs,
]
);
}
@@ -364,7 +359,6 @@
return $id;
}
-
/**
* Modifie le statut et/ou la date d'un objet
*
@@ -383,8 +377,7 @@
$objet = $t;
}
if (
- include_spip('action/editer_' . $objet)
- and function_exists($instituer = $objet . '_instituer')
+ include_spip('action/editer_' . $objet) && function_exists($instituer = $objet . '_instituer')
) {
return $instituer($id, $c, $calcul_rub);
}
@@ -393,7 +386,7 @@
$table_objet = table_objet($objet);
$trouver_table = charger_fonction('trouver_table', 'base');
$desc = $trouver_table($table_sql);
- if (!$desc or !isset($desc['field'])) {
+ if (!$desc || !isset($desc['field'])) {
return _L("Impossible d'instituer $objet : non connu en base");
}
@@ -405,7 +398,7 @@
$sel[] = (isset($desc['field']['statut']) ? 'statut' : "'' as statut");
$champ_date = '';
- if (isset($desc['date']) and $desc['date']) {
+ if (isset($desc['date']) && $desc['date']) {
$champ_date = $desc['date'];
} elseif (isset($desc['field']['date'])) {
$champ_date = 'date';
@@ -421,11 +414,11 @@
$date_ancienne = $date = $row['date'];
$champs = [];
- $d = ($date and isset($c[$champ_date])) ? $c[$champ_date] : null;
- $s = (isset($desc['field']['statut']) and isset($c['statut'])) ? $c['statut'] : $statut;
+ $d = ($date && isset($c[$champ_date])) ? $c[$champ_date] : null;
+ $s = (isset($desc['field']['statut']) && isset($c['statut'])) ? $c['statut'] : $statut;
// cf autorisations dans inc/instituer_objet
- if ($s != $statut or ($d and $d != $date)) {
+ if ($s != $statut || $d && $d != $date) {
if (
$id_rubrique ?
autoriser('publierdans', 'rubrique', $id_rubrique)
@@ -434,7 +427,7 @@
) {
$statut = $champs['statut'] = $s;
} else {
- if ($s != 'publie' and autoriser('modifier', $objet, $id)) {
+ if ($s != 'publie' && autoriser('modifier', $objet, $id)) {
$statut = $champs['statut'] = $s;
} else {
spip_log("editer_objet $objet #$id refus " . json_encode($c, JSON_THROW_ON_ERROR), 'editer' . _LOG_INFO_IMPORTANTE);
@@ -448,10 +441,10 @@
if ($champ_date) {
if (
$champs['statut'] == 'publie'
- or ($champs['statut'] == 'prop' and !in_array($statut_ancien, ['publie', 'prop']))
- or $d
+ || $champs['statut'] == 'prop' && !in_array($statut_ancien, ['publie', 'prop'])
+ || $d
) {
- if ($d or strtotime($d = $date) > time()) {
+ if ($d || strtotime($d = $date) > time()) {
$champs[$champ_date] = $date = $d;
} else {
$champs[$champ_date] = $date = date('Y-m-d H:i:s');
@@ -463,11 +456,10 @@
// Verifier que la rubrique demandee existe et est differente
// de la rubrique actuelle
if (
- $id_rubrique
- and isset($c['id_parent'])
- and $id_parent = $c['id_parent']
- and $id_parent != $id_rubrique
- and (sql_fetsel('1', 'spip_rubriques', 'id_rubrique=' . intval($id_parent)))
+ $id_rubrique && isset($c['id_parent'])
+ && ($id_parent = $c['id_parent'])
+ && $id_parent != $id_rubrique
+ && sql_fetsel('1', 'spip_rubriques', 'id_rubrique=' . intval($id_parent))
) {
$champs['id_rubrique'] = $id_parent;
@@ -476,13 +468,12 @@
// repasser l'objet en statut 'propose'.
if (
$statut == 'publie'
- and !autoriser('publierdans', 'rubrique', $id_rubrique)
+ && !autoriser('publierdans', 'rubrique', $id_rubrique)
) {
$champs['statut'] = 'prop';
}
}
-
// Envoyer aux plugins
$champs = pipeline(
'pre_edition',
@@ -498,7 +489,7 @@
'date_ancienne' => $date_ancienne,
'id_parent_ancien' => $id_rubrique,
],
- 'data' => $champs
+ 'data' => $champs,
]
);
@@ -537,7 +528,7 @@
'date_ancienne' => $date_ancienne,
'id_parent_ancien' => $id_rubrique,
],
- 'data' => $champs
+ 'data' => $champs,
]
);
@@ -590,7 +581,6 @@
* @param string $statut
* @param array $champs
* @param bool $cond
- * @return void
*/
function objet_editer_heritage($objet, $id, $id_rubrique, $statut, $champs, $cond = true) {
$table_sql = table_objet_sql($objet);
@@ -607,7 +597,7 @@
$champs['id_secteur'] = $row_rub['id_secteur'];
}
- if (isset($desc['field']['lang']) and isset($desc['field']['langue_choisie'])) {
+ if (isset($desc['field']['lang']) && isset($desc['field']['langue_choisie'])) {
if (
sql_fetsel(
'1',
@@ -628,7 +618,7 @@
// Changer le statut des rubriques concernees
if ($cond) {
include_spip('inc/rubriques');
- //$postdate = ($GLOBALS['meta']["post_dates"] == "non" AND isset($champs['date']) AND (strtotime($champs['date']) < time()))?$champs['date']:false;
+ // $postdate = ($GLOBALS['meta']["post_dates"] == "non" AND isset($champs['date']) AND (strtotime($champs['date']) < time()))?$champs['date']:false;
$postdate = false;
// On rajoute les infos de l'objet
$infos = [
@@ -640,7 +630,6 @@
}
}
-
/**
* Lit un objet donné connu par son id ou par un identifiant textuel unique et renvoie tout ou partie de sa
* description.
@@ -685,12 +674,12 @@
// Si l'objet n'a pas encore été stocké, il faut récupérer sa description complète.
if (
!isset($descriptions[$objet][$champ_id][$valeur_id])
- or (isset($options['force']) and $options['force'])
+ || isset($options['force']) && $options['force']
) {
// Il est possible pour un type d'objet de fournir une fonction de lecture de tous les champs d'un objet.
if (
include_spip('action/editer_' . $objet)
- and function_exists($lire = "{$objet}_lire_champs")
+ && function_exists($lire = "{$objet}_lire_champs")
) {
$valeurs = $lire($objet, $valeur_id, $champ_id);
} else {
@@ -699,7 +688,7 @@
// La condition est appliquée sur le champ désigné par l'utilisateur.
$where = [
- $champ_id . '=' . sql_quote($valeur_id)
+ $champ_id . '=' . sql_quote($valeur_id),
];
// Acquisition de tous les champs de l'objet : si l'accès SQL retourne une erreur on renvoie un tableau vide.
@@ -712,7 +701,7 @@
$descriptions[$objet][$champ_id][$valeur_id] = $valeurs;
- if ($champ_id !== $primary and isset($valeurs[$primary])) {
+ if ($champ_id !== $primary && isset($valeurs[$primary])) {
$descriptions[$objet][$primary][$valeurs[$primary]] = $valeurs;
$descriptions[$objet][$champ_id][$valeur_id] = &$descriptions[$objet][$primary][$valeurs[$primary]];
}
@@ -722,7 +711,7 @@
// On ne retourne maintenant que les champs demandés.
// - on détermine les informations à renvoyer.
- if ($retour and !empty($options['champs'])) {
+ if ($retour && !empty($options['champs'])) {
$champs = $options['champs'];
// Extraction des seules informations demandées.
// -- si on demande une information unique on renvoie la valeur simple, sinon on renvoie un tableau.
diff -Nru spip-4.4.23+dfsg/ecrire/action/editer_rubrique.php spip-4.4.28+dfsg/ecrire/action/editer_rubrique.php
--- spip-4.4.23+dfsg/ecrire/action/editer_rubrique.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/action/editer_rubrique.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,20 +1,18 @@
page('', ['titre' => _T('info_acces_interdit')]);
@@ -70,14 +67,12 @@
'&'
);
- include_spip('inc/headers');
- redirige_par_entete($redirect);
+ redirige_action($redirect);
}
return [$id_rubrique, $err];
}
-
/**
* Insérer une rubrique en base
*
@@ -92,7 +87,7 @@
$champs = [
'titre' => _T('item_nouvelle_rubrique'),
'id_parent' => intval($id_parent),
- 'statut' => 'prepa'
+ 'statut' => 'prepa',
];
if ($set) {
@@ -106,7 +101,7 @@
'args' => [
'table' => 'spip_rubriques',
],
- 'data' => $champs
+ 'data' => $champs,
]
);
@@ -116,9 +111,9 @@
[
'args' => [
'table' => 'spip_rubriques',
- 'id_objet' => $id_rubrique
+ 'id_objet' => $id_rubrique,
],
- 'data' => $champs
+ 'data' => $champs,
]
);
propager_les_secteurs();
@@ -180,8 +175,8 @@
'rubrique',
$id_rubrique,
[
- 'data' => $set,
- 'nonvide' => ['titre' => _T('titre_nouvelle_rubrique') . ' ' . _T('info_numero_abbreviation') . $id_rubrique]
+ 'data' => $set,
+ 'nonvide' => ['titre' => _T('titre_nouvelle_rubrique') . ' ' . _T('info_numero_abbreviation') . $id_rubrique],
],
$c
)
@@ -232,7 +227,7 @@
return true;
}
- if (empty($c['confirme_deplace']) or $c['confirme_deplace'] != 'oui') {
+ if (empty($c['confirme_deplace']) || $c['confirme_deplace'] != 'oui') {
return false;
}
@@ -249,7 +244,6 @@
return true;
}
-
/**
* Instituer une rubrique (changer son parent)
*
@@ -275,17 +269,18 @@
if (null !== ($id_parent = $c['id_parent'])) {
$id_parent = intval($id_parent);
$filles = calcul_branche_in($id_rubrique);
- if (strpos(",$id_parent,", (string) ",$filles,") !== false) {
+ if (str_contains(",$id_parent,", (string) ",$filles,")) {
spip_log("La rubrique $id_rubrique ne peut etre fille de sa descendante $id_parent");
} else {
$s = sql_fetsel('id_parent, statut', 'spip_rubriques', "id_rubrique=$id_rubrique");
$old_parent = $s['id_parent'];
if (
- !($id_parent != $old_parent
- and autoriser('publierdans', 'rubrique', $id_parent)
- and autoriser('creerrubriquedans', 'rubrique', $id_parent)
- and autoriser('publierdans', 'rubrique', $old_parent)
+ !(
+ $id_parent != $old_parent
+ && autoriser('publierdans', 'rubrique', $id_parent)
+ && autoriser('creerrubriquedans', 'rubrique', $id_parent)
+ && autoriser('publierdans', 'rubrique', $old_parent)
)
) {
if ($s['statut'] != 'prepa') {
@@ -295,7 +290,6 @@
$statut_ancien = $s['statut'];
sql_updateq('spip_rubriques', ['id_parent' => $id_parent], "id_rubrique=$id_rubrique");
-
propager_les_secteurs();
// Deplacement d'une rubrique publiee ==> chgt general de leur statut
diff -Nru spip-4.4.23+dfsg/ecrire/action/etre_webmestre.php spip-4.4.28+dfsg/ecrire/action/etre_webmestre.php
--- spip-4.4.23+dfsg/ecrire/action/etre_webmestre.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/action/etre_webmestre.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,20 +1,17 @@
'oui'], true);
}
diff -Nru spip-4.4.23+dfsg/ecrire/action/forcer_job.php spip-4.4.28+dfsg/ecrire/action/forcer_job.php
--- spip-4.4.23+dfsg/ecrire/action/forcer_job.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/action/forcer_job.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,28 +1,23 @@
$r, 'nom' => $nom, 'prefs' => $statut];
if (isset($options['login'])) {
$login = trim(corriger_caracteres($options['login']));
- if ((strlen($login) >= _LOGIN_TROP_COURT) and (strlen($nom) <= 64)) {
+ if (strlen($login) >= _LOGIN_TROP_COURT && strlen($nom) <= 64) {
$res['login'] = $login;
}
}
- if (!isset($res['login']) and ((strlen($nom) < _LOGIN_TROP_COURT) or (strlen($nom) > 64))) {
+ if (!isset($res['login']) && (strlen($nom) < _LOGIN_TROP_COURT || strlen($nom) > 64)) {
return 'ecrire:info_login_trop_court';
}
return $res;
}
-
/**
* On enregistre le demandeur comme 'nouveau', en memorisant le statut final
* provisoirement dans le champ prefs, afin de ne pas visualiser les inactifs
@@ -158,7 +149,7 @@
* @return mixed|string
*/
function inscription_nouveau($desc) {
- if (!isset($desc['login']) or !strlen($desc['login'])) {
+ if (!isset($desc['login']) || !strlen($desc['login'])) {
$desc['login'] = test_login($desc['nom'], $desc['email']);
}
@@ -187,7 +178,6 @@
return $desc;
}
-
/**
* Retourne un login valide à partir du nom et email donné
*
@@ -216,7 +206,7 @@
$login = $login_base;
- for ($i = 1;; $i++) {
+ for ($i = 1; ; $i++) {
if (!sql_countsel('spip_auteurs', "login='$login'")) {
return $login;
}
@@ -224,7 +214,6 @@
}
}
-
/**
* Construction du mail envoyant les identifiants
*
@@ -257,7 +246,7 @@
$contexte['url_reset'] = generer_url_public('spip_pass', 'p=' . $contexte['jeton'], false, false);
$modele_mail = 'modeles/mail_inscription';
- if (isset($options['modele_mail']) and $options['modele_mail']) {
+ if (isset($options['modele_mail']) && $options['modele_mail']) {
$modele_mail = $options['modele_mail'];
}
$message = recuperer_fond($modele_mail, $contexte);
@@ -267,7 +256,6 @@
return ['', $message, $from, $head];
}
-
/**
* Creer un mot de passe initial aleatoire
*
@@ -300,9 +288,10 @@
include_spip('inc/autoriser');
if ($statut_tmp) {
return autoriser('inscrireauteur', $statut_tmp, $id) ? $statut_tmp : '';
- } elseif (
+ }
+ if (
autoriser('inscrireauteur', $statut_tmp = '1comite', $id)
- or autoriser('inscrireauteur', $statut_tmp = '6forum', $id)
+ || autoriser('inscrireauteur', $statut_tmp = '6forum', $id)
) {
return $statut_tmp;
}
@@ -310,7 +299,6 @@
return '';
}
-
/**
* Un nouvel inscrit prend son statut definitif a la 1ere connexion.
* Le statut a ete memorise dans prefs (cf test_inscription_dist).
@@ -352,7 +340,6 @@
return $auteur;
}
-
/**
* Attribuer un jeton temporaire pour un auteur en assurant l'unicite du jeton.
*
@@ -360,7 +347,6 @@
* et invalide donc le précédent
*
* @param int $id_auteur
- * @return string
*/
function auteur_attribuer_jeton($id_auteur): string {
include_spip('base/abstract_sql');
@@ -385,9 +371,7 @@
* Cette fonction peut être pratique si plusieurs notifications proches
* dans la durée sont envoyées au même auteur.
*
- * @param int $id_auteur
* @param bool $autoInit Attribue un jeton à l’auteur s’il n’en a pas déjà.
- * @return string|null
*/
function auteur_lire_jeton(int $id_auteur, bool $autoInit = false): ?string {
include_spip('base/abstract_sql');
diff -Nru spip-4.4.23+dfsg/ecrire/action/instituer_langue_objet.php spip-4.4.28+dfsg/ecrire/action/instituer_langue_objet.php
--- spip-4.4.23+dfsg/ecrire/action/instituer_langue_objet.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/action/instituer_langue_objet.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,20 +1,17 @@
0
- and $GLOBALS['meta']['multi_rubriques'] == 'oui'
- and ($GLOBALS['meta']['multi_secteurs'] == 'non' or $id_parent == 0)
+ $changer_lang && $id_rubrique > 0
+ && $GLOBALS['meta']['multi_rubriques'] == 'oui'
+ && ($GLOBALS['meta']['multi_secteurs'] == 'non' || $id_parent == 0)
) {
if ($changer_lang != 'herit') {
sql_updateq(
'spip_rubriques',
- ['lang' => $changer_lang, 'langue_choisie' => 'oui'],
+ [
+ 'lang' => $changer_lang,
+ 'langue_choisie' => 'oui',
+ ],
"id_rubrique=$id_rubrique"
);
} else {
@@ -50,7 +49,10 @@
}
sql_updateq(
'spip_rubriques',
- ['lang' => $langue_parent, 'langue_choisie' => 'non'],
+ [
+ 'lang' => $langue_parent,
+ 'langue_choisie' => 'non',
+ ],
"id_rubrique=$id_rubrique"
);
}
diff -Nru spip-4.4.23+dfsg/ecrire/action/instituer_objet.php spip-4.4.28+dfsg/ecrire/action/instituer_objet.php
--- spip-4.4.23+dfsg/ecrire/action/instituer_objet.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/action/instituer_objet.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,20 +1,17 @@
$GLOBALS['visiteur_session'] ?? [],
]);
- include_spip('inc/headers');
- redirige_par_entete($url);
+
+ redirige_action($url);
}
/**
@@ -127,7 +122,7 @@
* @return string
*/
function generer_jeton_logout($session, $alea = null) {
- if (is_null($alea)) {
+ if ($alea === null) {
include_spip('inc/acces');
$alea = charger_aleas();
}
diff -Nru spip-4.4.23+dfsg/ecrire/action/menu_rubriques.php spip-4.4.28+dfsg/ecrire/action/menu_rubriques.php
--- spip-4.4.23+dfsg/ecrire/action/menu_rubriques.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/action/menu_rubriques.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,20 +1,17 @@
'
. ''
@@ -139,7 +134,7 @@
*
* @return string
* Code HTML présentant la liste des rubriques
- **/
+ */
function bandeau_rubrique($id_rubrique, $titre_rubrique, $zdecal, $profondeur = 1) {
static $zmax = 6;
$profondeur_next = $profondeur + 1;
@@ -163,7 +158,6 @@
return "\n$nav ";
}
-
$nb_col = 1;
if ($nb_rub = count($arr_rub)) {
$nb_col = min(10, max(1, ceil($nb_rub / 10)));
@@ -185,7 +179,6 @@
return $ret;
}
-
/**
* Obtient la liste des rubriques enfants d'une rubrique, prise dans le cache
* du navigateur de rubrique
@@ -198,7 +191,7 @@
* Cache des rubriques
* @return array
* Liste des rubriques enfants de la rubrique (et leur titre)
- **/
+ */
function extraire_article($id_p, $t) {
return array_key_exists($id_p, $t) ? $t[$id_p] : [];
}
@@ -213,7 +206,7 @@
* - stocké également dans la globale `db_art_cache`
*
* @return bool true.
- **/
+ */
function gen_liste_rubriques() {
$cache = null;
diff -Nru spip-4.4.23+dfsg/ecrire/action/purger.php spip-4.4.28+dfsg/ecrire/action/purger.php
--- spip-4.4.23+dfsg/ecrire/action/purger.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/action/purger.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,19 +1,17 @@
true]);
purger_repertoire(_DIR_AIDE);
diff -Nru spip-4.4.23+dfsg/ecrire/action/purger_queue.php spip-4.4.28+dfsg/ecrire/action/purger_queue.php
--- spip-4.4.23+dfsg/ecrire/action/purger_queue.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/action/purger_queue.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,27 +1,23 @@
,racine})]
* ```
- **/
+ */
function action_redirect_dist() {
$type = _request('type');
$id = intval(_request('id'));
@@ -68,23 +65,23 @@
if (
$var_mode == 'preview'
- and defined('_PREVIEW_TOKEN')
- and _PREVIEW_TOKEN
- and autoriser('previsualiser')
+ && defined('_PREVIEW_TOKEN')
+ && _PREVIEW_TOKEN
+ && autoriser('previsualiser')
) {
include_spip('inc/securiser_action');
$token = calculer_token_previsu($url);
- $url = parametre_url($url, 'var_previewtoken', $token);
+ $url = parametre_url($url, 'var_previewtoken', $token, '&');
}
- if (_request('status') and _request('status') == '301') {
+ if (_request('status') && _request('status') == '301') {
$status = '301';
}
} else {
$url = generer_url_public('404', '', true);
}
- redirige_par_entete(str_replace('&', '&', $url), '', $status);
+ redirige_action($url, $status);
}
/**
@@ -110,11 +107,11 @@
$key = "url-$date-$type-$id";
// Obtenir l’url et si elle est publié du cache memoization
- if (function_exists('cache_get') and $desc = cache_get($key)) {
+ if (function_exists('cache_get') && $desc = cache_get($key)) {
[$url, $publie] = $desc;
}
// Si on ne l’a pas trouvé, ou si var mode, on calcule l’url et son état publie
- if (empty($desc) or $var_mode) {
+ if (empty($desc) || $var_mode) {
$publie = objet_test_si_publie($type, $id);
$url = generer_objet_url_absolue($id, $type, '', '', true);
if (function_exists('cache_set')) {
@@ -125,9 +122,9 @@
// On valide l’url si elle est publiee ; sinon si preview on teste l’autorisation
if ($publie) {
return $url;
- } elseif (defined('_VAR_PREVIEW') and _VAR_PREVIEW and autoriser('voir', $type, $id)) {
+ }
+ if (defined('_VAR_PREVIEW') && _VAR_PREVIEW && autoriser('voir', $type, $id)) {
return $url;
}
- return;
}
diff -Nru spip-4.4.23+dfsg/ecrire/action/referencer_traduction.php spip-4.4.28+dfsg/ecrire/action/referencer_traduction.php
--- spip-4.4.23+dfsg/ecrire/action/referencer_traduction.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/action/referencer_traduction.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,20 +1,17 @@
!str_starts_with($k, '_'), ARRAY_FILTER_USE_KEY);
+ $vars = array_filter($vars, fn ($k) => !str_starts_with($k, '_'), ARRAY_FILTER_USE_KEY);
$vars = json_encode($vars);
include_spip('inc/session');
session_set('session_' . $cle_autosave, $vars);
- #spip_log("autosave:$cle_autosave:$vars",'autosave' . _LOG_DEBUG);
+ # spip_log("autosave:$cle_autosave:$vars",'autosave' . _LOG_DEBUG);
}
}
# TODO: mode lecture de session ; n'afficher que ce qu'il faut
- #echo json_encode($GLOBALS['visiteur_session']);
+ # echo json_encode($GLOBALS['visiteur_session']);
}
diff -Nru spip-4.4.23+dfsg/ecrire/action/super_cron.php spip-4.4.28+dfsg/ecrire/action/super_cron.php
--- spip-4.4.23+dfsg/ecrire/action/super_cron.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/action/super_cron.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,20 +1,17 @@
$ids], [$objet_lie => $idl], [$qualif => $valeur_qualif ]);
+ objet_dissocier([$objet_source => $ids], [$objet_lie => $idl], [$qualif => $valeur_qualif]);
} else {
[$objet_source, $ids, $objet_lie, $idl] = $args;
objet_dissocier([$objet_source => $ids], [$objet_lie => $idl]);
diff -Nru spip-4.4.23+dfsg/ecrire/action/supprimer_rubrique.php spip-4.4.28+dfsg/ecrire/action/supprimer_rubrique.php
--- spip-4.4.23+dfsg/ecrire/action/supprimer_rubrique.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/action/supprimer_rubrique.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,20 +1,17 @@
['sAMAccountName', 'uid', 'login', 'userid', 'cn', 'sn'],
'nom' => 'cn',
'email' => 'mail',
- 'bio' => 'description'
+ 'bio' => 'description',
];
}
@@ -61,7 +58,7 @@
$phpauth = false
) {
- #spip_log("ldap $login " . ($pass ? "mdp fourni" : "mdp absent"));
+ # spip_log("ldap $login " . ($pass ? "mdp fourni" : "mdp absent"));
// Utilisateur connu ?
// si http auth, inutile de reauthentifier: cela
@@ -83,7 +80,7 @@
if (
$GLOBALS['meta']['ldap_statut_import']
- and $desc = auth_ldap_retrouver($dn, [], $serveur)
+ && ($desc = auth_ldap_retrouver($dn, [], $serveur))
) {
// rajouter le statut indique a l'install
$desc['statut'] = $GLOBALS['meta']['ldap_statut_import'];
@@ -129,12 +126,12 @@
$f = _DIR_CONNECT . $connexion['authentification']['ldap'];
unset($GLOBALS['ldap_link']);
if (is_readable($f)) {
- include_once($f);
- };
+ include_once $f;
+ }
if (isset($GLOBALS['ldap_link'])) {
$connexion['ldap'] = [
'link' => $GLOBALS['ldap_link'],
- 'base' => $GLOBALS['ldap_base']
+ 'base' => $GLOBALS['ldap_base'],
];
} else {
spip_log("connection LDAP $serveur mal definie dans $f");
@@ -169,7 +166,7 @@
) {
// Securite anti-injection et contre un serveur LDAP laxiste
$login_search = preg_replace('/[^-@._\s\d\w]/', '', $login);
- if (!strlen($login_search) or ($checkpass and !strlen($pass))) {
+ if (!strlen($login_search) || $checkpass && !strlen($pass)) {
return '';
}
@@ -191,7 +188,7 @@
// Ne pas accepter les resultats si plus d'une entree
// (on veut un attribut unique)
- if (is_array($info) and $info['count'] == 1) {
+ if (is_array($info) && $info['count'] == 1) {
$dn = $info[0]['dn'];
if (!$checkpass) {
return $dn;
@@ -202,7 +199,7 @@
}
}
- if ($checkpass and !isset($dn)) {
+ if ($checkpass && !isset($dn)) {
// Si echec, essayer de deviner le DN
foreach ($logins as $att) {
$dn = "$att=$login_search, $ldap_base";
@@ -245,7 +242,7 @@
// Recuperer les donnees du premier (unique?) compte de l'auteur
$val = @ldap_get_entries($ldap_link, $result);
- if (!is_array($val) or !is_array($val[0])) {
+ if (!is_array($val) || !is_array($val[0])) {
return [];
}
$val = $val[0];
@@ -260,7 +257,6 @@
return $desc;
}
-
/**
* Retrouver le login de quelqu'un qui cherche à se loger
*
@@ -328,9 +324,6 @@
* compte générique defini dans config/ldap.php n'a généralement pas (et
* ne devrait pas avoir) les droits suffisants pour faire la modification.
*
- * @param $login
- * @param $new_pass
- * @param $id_auteur
* @param string $serveur
* @return bool
* Informe du succès ou de l'echec du changement du mot de passe
@@ -342,7 +335,7 @@
$id_auteur,
$serveur = ''
) {
- if (is_null($new_pass) or auth_ldap_verifier_pass($login, $new_pass, $id_auteur, $serveur) != '') {
+ if ($new_pass === null || auth_ldap_verifier_pass($login, $new_pass, $id_auteur, $serveur) != '') {
return false;
}
if (!$ldap = auth_ldap_connect($serveur)) {
@@ -351,7 +344,7 @@
$link = $ldap['link'];
include_spip('inc/session');
$dn = session_get('ldap_dn');
- if ('' == $dn) {
+ if ($dn == '') {
return false;
}
if (!ldap_bind($link, $dn, session_get('ldap_password'))) {
diff -Nru spip-4.4.23+dfsg/ecrire/auth/spip.php spip-4.4.28+dfsg/ecrire/auth/spip.php
--- spip-4.4.23+dfsg/ecrire/auth/spip.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/auth/spip.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,19 +1,17 @@
restore($row['backup_cles'], $pass, $row['pass'], $row['id_auteur'])) {
spip_log('Les cles secretes ont ete restaurées avec le backup du webmestre #' . $row['id_auteur'], 'auth' . _LOG_INFO_IMPORTANTE);
if ($cles->save()) {
$secret = $cles->getSecretAuth();
- }
- else {
+ } else {
spip_log("Echec restauration des cles : verifier les droits d'ecriture ?", 'auth' . _LOG_ERREUR);
// et on echoue car on ne veut pas que la situation reste telle quelle
raler_fichier($fichier_cles ?: _DIR_ETC . 'cles.php');
}
- }
- else {
+ } else {
spip_log('Pas de cle secrete disponible (fichier ' . ($fichier_cles ?: 'config/cle.php') . ' absent ?) mais le backup du webmestre #' . $row['id_auteur'] . " n'est pas valide", 'auth' . _LOG_ERREUR);
sql_updateq('spip_auteurs', ['backup_cles' => ''], 'id_auteur=' . intval($row['id_auteur']));
}
}
- if (!$secret or !Password::verifier($pass, $row['pass'], $secret)) {
+ if (!$secret || !Password::verifier($pass, $row['pass'], $secret)) {
unset($row);
- }
- else {
+ } else {
spip_log("validation du mot de passe pour l'auteur #" . $row['id_auteur'] . " $login via Password::verifier", 'auth' . _LOG_DEBUG);
}
break;
@@ -142,7 +139,7 @@
// ET si c'est le login d'un auteur qui peut sauver la cle
// créer la clé (en s'assurant bien que personne n'a de backup d'un precedent fichier cle.php)
// si c'est un auteur normal, on ne fait rien, il garde son ancien pass hashé en sha256 en attendant le login d'un webmestre
- if (!$secret and $auteur_peut_sauver_cles) {
+ if (!$secret && $auteur_peut_sauver_cles) {
if (auth_spip_initialiser_secret()) {
$secret = $cles->getSecretAuth();
}
@@ -155,7 +152,7 @@
// fait tourner le codage du pass dans la base
// sauf si phpauth : cela reviendrait a changer l'alea a chaque hit, et aucune action verifiable par securiser_action()
- if (!$phpauth and $secret) {
+ if (!$phpauth && $secret) {
include_spip('inc/acces'); // pour creer_uniqid et verifier_htaccess
$pass_hash_next = Password::hacher($pass, $secret);
if ($pass_hash_next) {
@@ -198,7 +195,7 @@
// En profiter pour verifier la securite de tmp/
// Si elle ne fonctionne pas a l'installation, prevenir
- if (!verifier_htaccess(_DIR_TMP) and defined('_ECRIRE_INSTALL')) {
+ if (!verifier_htaccess(_DIR_TMP) && defined('_ECRIRE_INSTALL')) {
return false;
}
}
@@ -213,9 +210,6 @@
*
* Si on a pas perdu le secret des auth (le fichier config/cle.php est toujouts la et contient la cle), la fonction ne fait rien
* car réinitialiser le secret des auth invalide *tous* les mots de passe
- *
- * @param bool $force
- * @return bool
*/
function auth_spip_initialiser_secret(bool $force = false): bool {
$cles = SpipCles::instance();
@@ -243,8 +237,7 @@
spip_log("Echec generation d'une nouvelle cle : verifier les droits d'ecriture ?", 'auth' . _LOG_ERREUR);
// et on echoue car on ne veut pas que la situation reste telle quelle
raler_fichier(_DIR_ETC . 'cles.php');
- }
- else {
+ } else {
spip_log('Pas de cle secrete disponible (fichier config/cle.php absent ?) un des webmestres #' . implode(', #', $has_backup) . ' doit se connecter pour restaurer son backup des cles', 'auth' . _LOG_ERREUR);
}
return false;
@@ -272,11 +265,9 @@
return $flux;
}
-
/**
* Informer du droit de modifier ou non son login
*
- * @param string $serveur
* @return bool
* toujours true pour un auteur cree dans SPIP
*/
@@ -329,12 +320,12 @@
* @return bool
*/
function auth_spip_modifier_login($new_login, $id_auteur, $serveur = '') {
- if (is_null($new_login) or auth_spip_verifier_login($new_login, $id_auteur, $serveur) != '') {
+ if ($new_login === null || auth_spip_verifier_login($new_login, $id_auteur, $serveur) != '') {
return false;
}
if (
- !$id_auteur = intval($id_auteur)
- or !$auteur = sql_fetsel('login', 'spip_auteurs', 'id_auteur=' . intval($id_auteur), '', '', '', '', $serveur)
+ !($id_auteur = intval($id_auteur))
+ || !($auteur = sql_fetsel('login', 'spip_auteurs', 'id_auteur=' . intval($id_auteur), '', '', '', '', $serveur))
) {
return false;
}
@@ -375,50 +366,62 @@
* @return string
*/
function auth_spip_retrouver_login($login, $serveur = '') {
- if (!strlen($login)) {
+ // pas la peine de requeter si le login est vide ou trop long
+ if (!strlen($login) || strlen($login) > 256) {
return null;
- } // pas la peine de requeter
- $l = sql_quote($login, $serveur, 'text');
- if (
- $r = sql_getfetsel(
- 'login',
- 'spip_auteurs',
- "statut<>'5poubelle'" .
- ' AND (length(pass)>0)' .
- " AND (login=$l)",
- '',
- '',
- '',
- '',
- $serveur
- )
- ) {
- return $r;
}
- // Si pas d'auteur avec ce login
- // regarder s'il a saisi son nom ou son mail.
- // Ne pas fusionner avec la requete precedente
- // car un nom peut etre homonyme d'un autre login
- else {
- return sql_getfetsel(
- 'login',
+ $login_quoted = sql_quote($login, $serveur, 'text');
+ // On cherche d'abord le login dans le champ login
+ // et sinon dans son mail ou son nom.
+ // On fait en 3 requetes différentes car un nom peut etre homonyme d'un autre login
+ $champs_login_possible = str_contains($login, '@') ? ['login', 'email', 'nom'] : ['login', 'nom'];
+ foreach ($champs_login_possible as $champ_login) {
+ $id_auteur = sql_getfetsel(
+ 'id_auteur',
'spip_auteurs',
"statut<>'5poubelle'" .
' AND (length(pass)>0)' .
- " AND (login<>'' AND (nom=$l OR email=$l))",
+ " AND $champ_login=" . $login_quoted,
'',
'',
'',
'',
$serveur
);
+ if ($id_auteur) {
+ spip_log("auth_spip_retrouver_login: champ $champ_login auteur #$id_auteur correspond à $login_quoted", 'auth' . _LOG_DEBUG);
+ break;
+ }
+ }
+
+ if (!$id_auteur) {
+ return null;
}
+
+ // on requète à nouveau sur la base du (int)id_auteur seul pour retrouver le login
+ // et on vérifie que l'égalité sur le champ était bien vraie
+ // ce qui rejette les égalités approximatives sur nom ou email qui sont des champs case insensitive
+ $auteur = sql_fetsel(
+ implode(',', array_unique(['login', $champ_login])),
+ 'spip_auteurs',
+ 'id_auteur=' . intval($id_auteur) . " AND statut<>'5poubelle' AND (length(pass)>0)",
+ '',
+ '',
+ '',
+ '',
+ $serveur
+ );
+
+ if ($auteur[$champ_login] === $login) {
+ return $auteur['login'];
+ }
+
+ return null;
}
/**
* Informer du droit de modifier ou non le pass
*
- * @param string $serveur
* @return bool
* toujours true pour un auteur cree dans SPIP
*/
@@ -430,7 +433,6 @@
return true;
}
-
/**
* Verification de la validite d'un mot de passe pour le mode d'auth concerne
* c'est ici que se font eventuellement les verifications de longueur mini/maxi
@@ -479,13 +481,13 @@
$id_auteur,
$serveur = ''
) {
- if (is_null($new_pass) or auth_spip_verifier_pass($login, $new_pass, $id_auteur, $serveur) != '') {
+ if ($new_pass === null || auth_spip_verifier_pass($login, $new_pass, $id_auteur, $serveur) != '') {
return false;
}
if (
- !$id_auteur = intval($id_auteur)
- or !$auteur = sql_fetsel('login, statut, webmestre', 'spip_auteurs', 'id_auteur=' . intval($id_auteur), '', '', '', '', $serveur)
+ !($id_auteur = intval($id_auteur))
+ || !($auteur = sql_fetsel('login, statut, webmestre', 'spip_auteurs', 'id_auteur=' . intval($id_auteur), '', '', '', '', $serveur))
) {
return false;
}
@@ -495,13 +497,11 @@
if (!$secret) {
if (auth_spip_initialiser_secret()) {
$secret = $cles->getSecretAuth();
- }
- else {
+ } else {
return false;
}
}
-
include_spip('inc/acces');
$set = [
'pass' => Password::hacher($new_pass, $secret),
@@ -512,7 +512,7 @@
];
// si c'est un webmestre, on met a jour son backup des cles
- if ($auteur['statut'] === '0minirezo' and $auteur['webmestre'] === 'oui') {
+ if ($auteur['statut'] === '0minirezo' && $auteur['webmestre'] === 'oui') {
$set['backup_cles'] = $cles->backup($new_pass);
}
@@ -529,8 +529,6 @@
* @param array $champs
* @param array $options
* all=>true permet de demander la regeneration complete des acces apres operation en base (import, upgrade)
- * @param string $serveur
- * @return void
*/
function auth_spip_synchroniser_distant($id_auteur, $champs, $options = [], string $serveur = ''): void {
// ne rien faire pour une base distante : on ne sait pas regenerer les htaccess
@@ -541,9 +539,9 @@
// regenerer les fichier htpass
if (
isset($champs['login'])
- or isset($champs['pass'])
- or isset($champs['statut'])
- or (isset($options['all']) and $options['all'])
+ || isset($champs['pass'])
+ || isset($champs['statut'])
+ || isset($options['all']) && $options['all']
) {
$htaccess = _DIR_RESTREINT . _ACCESS_FILE_NAME;
$htpasswd = _DIR_TMP . _AUTH_USER_FILE;
@@ -552,8 +550,7 @@
// par exemple acces_restreint ;
// si .htaccess existe, outrepasser spip_meta
if (
- (!isset($GLOBALS['meta']['creer_htpasswd']) or ($GLOBALS['meta']['creer_htpasswd'] != 'oui'))
- and !@file_exists($htaccess)
+ (!isset($GLOBALS['meta']['creer_htpasswd']) || $GLOBALS['meta']['creer_htpasswd'] != 'oui') && !@file_exists($htaccess)
) {
spip_unlink($htpasswd);
spip_unlink($htpasswd . '-admin');
@@ -573,7 +570,7 @@
sql_in('statut', ['1comite', '0minirezo', 'nouveau'])
);
while ($t = sql_fetch($s)) {
- if (strlen($t['login']) and strlen($t['htpass'])) {
+ if (strlen($t['login']) && strlen($t['htpass'])) {
$p1 .= $t['login'] . ':' . $t['htpass'] . "\n";
if ($t['statut'] == '0minirezo') {
$p2 .= $t['login'] . ':' . $t['htpass'] . "\n";
diff -Nru spip-4.4.23+dfsg/ecrire/balise/formulaire_.php spip-4.4.28+dfsg/ecrire/balise/formulaire_.php
--- spip-4.4.23+dfsg/ecrire/balise/formulaire_.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/balise/formulaire_.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,19 +1,17 @@
0) {
return array_map(
- function($v) use ($max_prof) {
- return protege_champ($v, $max_prof-1);
- },
+ fn ($v) => protege_champ($v, $max_prof - 1),
$valeur
);
}
// si on dépasse la prof max on tronque
return [];
- } elseif ($valeur === null) {
+ }
+ if ($valeur === null) {
return $valeur;
- } elseif (is_bool($valeur)) {
+ }
+ if (is_bool($valeur)) {
return $valeur ? '1' : '';
- } elseif (is_string($valeur) and $valeur) {
+ }
+ if (is_string($valeur) && $valeur) {
if (strpbrk($valeur, "&\"'<>") !== false) {
return spip_htmlspecialchars($valeur, ENT_QUOTES);
}
@@ -67,9 +66,9 @@
* @return string|bool
* - string : chemin du squelette
* - false : pas de squelette trouvé
- **/
+ */
function existe_formulaire($form) {
- if (substr($form, 0, 11) == 'FORMULAIRE_') {
+ if (str_starts_with($form, 'FORMULAIRE_')) {
$form = strtolower(substr($form, 11));
} else {
$form = strtolower($form);
@@ -95,7 +94,7 @@
// regarder si un flag a ete leve juste avant l'appel de balise_FORMULAIRE_dyn
if (
function_exists('arguments_balise_dyn_depuis_modele')
- and $form = arguments_balise_dyn_depuis_modele(null, 'read')
+ && ($form = arguments_balise_dyn_depuis_modele(null, 'read'))
) {
if (in_array('balise_formulaire__dyn', $trace_fonctions)) {
$k = array_search('balise_formulaire__dyn', $trace_fonctions);
@@ -107,7 +106,7 @@
// fallback qui ne repose pas sur le flag lie a l'analyse de contexte_compil,
// mais ne marche pas si executer_balise_dynamique est appelee via du php dans le squelette
- if (in_array('eval', $trace_fonctions) and in_array('inclure_modele', $trace_fonctions)) {
+ if (in_array('eval', $trace_fonctions) && in_array('inclure_modele', $trace_fonctions)) {
$k = array_search('inclure_modele', $trace_fonctions);
// les arguments de recuperer_fond() passes par inclure_modele()
return $trace[$k - 1]['args'][1]['args'];
@@ -124,7 +123,7 @@
* Description de la balise formulaire
* @return Champ
* Description complétée du code compilé appelant la balise dynamique
- **/
+ */
function balise_FORMULAIRE__dist($p) {
// Cas d'un #FORMULAIRE_TOTO inexistant : renvoyer la chaine vide.
@@ -182,7 +181,7 @@
* @return array|string
* array: contexte d'environnement à envoyer au squelette
* string: Formulaire non applicable (message d’explication)
- **/
+ */
function balise_FORMULAIRE__contexte($form, $args) {
// tester si ce formulaire vient d'etre poste (memes arguments)
// pour ne pas confondre 2 #FORMULAIRES_XX identiques sur une meme page
@@ -190,10 +189,10 @@
$je_suis_poste = false;
if (
- $post_form = _request('formulaire_action')
- and $post_form == $form
- and $p = _request('formulaire_action_args')
- and is_array($p = decoder_contexte_ajax($p, $post_form))
+ ($post_form = _request('formulaire_action'))
+ && $post_form == $form
+ && ($p = _request('formulaire_action_args'))
+ && is_array($p = decoder_contexte_ajax($p, $post_form))
) {
// enlever le faux attribut de langue masque
array_shift($p);
@@ -233,8 +232,8 @@
$dispo = ($je_suis_poste || (isset($valeurs['_forcer_request']) && $valeurs['_forcer_request']));
foreach (array_keys($valeurs) as $champ) {
$champ = (string) $champ;
- if ($champ[0] !== '_' and !in_array($champ, ['message_ok', 'message_erreur', 'editable'])) {
- if ($dispo and (($v = _request($champ)) !== null)) {
+ if ($champ[0] !== '_' && !in_array($champ, ['message_ok', 'message_erreur', 'editable'])) {
+ if ($dispo && ($v = _request($champ)) !== null) {
$valeurs[$champ] = $v;
}
// nettoyer l'url des champs qui vont etre saisis
@@ -287,13 +286,9 @@
$valeurs['formulaire_sign'] = $secu['hash'];
}
- if (!isset($valeurs['id'])) {
- $valeurs['id'] = 'new';
- }
+ $valeurs['id'] ??= 'new';
// editable peut venir de charger() ou de traiter() sinon
- if (!isset($valeurs['editable'])) {
- $valeurs['editable'] = $editable;
- }
+ $valeurs['editable'] ??= $editable;
// dans tous les cas, renvoyer un espace ou vide (et pas un booleen)
$valeurs['editable'] = ($valeurs['editable'] ? ' ' : '');
@@ -315,7 +310,7 @@
// et si $k ne commence pas par un _ (c'est bien une vrai erreur sur un vrai champ)
if (html5_permis()) {
foreach ($erreurs as $k => $v) {
- if (is_string($v) and strlen(trim($v)) and strpos($k, '_') !== 0) {
+ if (is_string($v) && strlen(trim($v)) && !str_starts_with($k, '_')) {
// on encapsule dans un span car ces messages sont en general simple, juste du texte, et deja dans un span dans le form
$valeurs['erreurs'][$k] = "" . $erreurs[$k] . ' ';
}
@@ -345,12 +340,12 @@
'formulaire_charger',
[
'args' => ['form' => $form, 'args' => $args, 'je_suis_poste' => $poste],
- 'data' => $valeurs
+ 'data' => $valeurs,
]
);
// prise en charge CVT multi etape
- if (is_array($valeurs) and isset($valeurs['_etapes'])) {
+ if (is_array($valeurs) && isset($valeurs['_etapes'])) {
include_spip('inc/cvt_multietapes');
$valeurs = cvtmulti_formulaire_charger_etapes(
['form' => $form, 'args' => $args, 'je_suis_poste' => $poste],
@@ -360,9 +355,7 @@
// si $valeurs et false ou une chaine, pas de formulaire, donc pas de pipeline !
if (is_array($valeurs)) {
- if (!isset($valeurs['_pipelines'])) {
- $valeurs['_pipelines'] = [];
- }
+ $valeurs['_pipelines'] ??= [];
// l'ancien argument _pipeline devient maintenant _pipelines
// reinjectons le vieux _pipeline au debut de _pipelines
if (isset($valeurs['_pipeline'])) {
diff -Nru spip-4.4.23+dfsg/ecrire/balise/formulaire_admin.php spip-4.4.28+dfsg/ecrire/balise/formulaire_admin.php
--- spip-4.4.23+dfsg/ecrire/balise/formulaire_admin.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/balise/formulaire_admin.php 2026-10-07 13:48:22.000000000 +0000
@@ -13,10 +13,7 @@
/**
* Ce fichier gère la balise dynamique `#FORMULAIRE_ADMIN`
- *
- * @package SPIP\Core\Formulaires
- **/
-
+ */
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
@@ -41,7 +38,7 @@
* Pile au niveau de la balise
* @return Champ
* Pile complétée du code compilé
- **/
+ */
function balise_FORMULAIRE_ADMIN($p) {
return calculer_balise_dynamique($p, 'FORMULAIRE_ADMIN', []);
}
@@ -63,7 +60,6 @@
return $args;
}
-
/**
* Retourne le squelette d'affichage et le contexte de la balise FORMULAIRE_ADMIN
*
@@ -82,7 +78,7 @@
* Informations sur la page contenant une erreur de compilation
* @return array|string
* Liste : Chemin du squelette, durée du cache, contexte
- **/
+ */
function balise_FORMULAIRE_ADMIN_dyn($float = '', $debug = '') {
static $dejafait = false;
@@ -100,7 +96,7 @@
return '';
}
foreach ($debug['sourcefile'] as $k => $v) {
- if (strpos($v, 'administration.') !== false) {
+ if (str_contains($v, 'administration.')) {
if (isset($debug['resultat'][$k . 'tout'])) {
return $debug['resultat'][$k . 'tout'];
}
@@ -114,7 +110,6 @@
include_spip('inc/autoriser');
include_spip('base/abstract_sql');
-
$dejafait = true;
// Preparer le #ENV des boutons
@@ -129,9 +124,9 @@
$env['divclass'] = $float;
$env['lang'] = admin_lang();
$env['calcul'] = (_request('var_mode') ? 'recalcul' : 'calcul');
- $env['debug'] = ((defined('_VAR_PREVIEW') and _VAR_PREVIEW) ? '' : admin_debug());
- $env['analyser'] = (!$env['debug'] and !$GLOBALS['xhtml']) ? '' : admin_valider();
- $env['inclure'] = ((defined('_VAR_INCLURE') and _VAR_INCLURE) ? 'inclure' : '');
+ $env['debug'] = ((defined('_VAR_PREVIEW') && _VAR_PREVIEW) ? '' : admin_debug());
+ $env['analyser'] = (!$env['debug'] && !$GLOBALS['xhtml']) ? '' : admin_valider();
+ $env['inclure'] = ((defined('_VAR_INCLURE') && _VAR_INCLURE) ? 'inclure' : '');
if (empty($GLOBALS['use_cache'])) {
$env['use_cache'] = ' *';
@@ -146,7 +141,6 @@
return ['formulaires/administration', 0, $env];
}
-
/**
* Préparer le contexte d'environnement pour les boutons
*
@@ -159,7 +153,7 @@
*
* @return array
* Tableau de l'environnement calculé
- **/
+ */
function admin_objet() {
include_spip('inc/urls');
$env = [];
@@ -173,12 +167,12 @@
$type = $obj;
if (
$type == objet_type($type, false)
- and $_id_type = id_table_objet($type)
- and isset($GLOBALS['contexte'][$_id_type])
- and $id = $GLOBALS['contexte'][$_id_type]
- and !is_array($id)
- and $id = intval($id)
- and $desc = $trouver_table(table_objet_sql($type))
+ && ($_id_type = id_table_objet($type))
+ && isset($GLOBALS['contexte'][$_id_type])
+ && ($id = $GLOBALS['contexte'][$_id_type])
+ && !is_array($id)
+ && ($id = intval($id))
+ && ($desc = $trouver_table(table_objet_sql($type)))
) {
$id = sql_getfetsel($_id_type, table_objet_sql($type), "$_id_type=" . intval($id));
if ($id) {
@@ -189,7 +183,7 @@
str_replace('&', '&', generer_objet_url($id, $obj, '', '', false));
if (
isset($desc['field']['id_rubrique'])
- and $type != 'rubrique'
+ && $type != 'rubrique'
) {
unset($env['id_rubrique']);
unset($env['voir_rubrique']);
@@ -204,7 +198,6 @@
return $env;
}
-
/**
* Détermine si l'élément est previsualisable
*
@@ -217,9 +210,9 @@
* @return string|array
* - Chaine vide si on est déjà en prévisu ou si pas de previsualisation possible
* - Tableau d'un élément sinon.
- **/
+ */
function admin_preview($type, $id, $desc = null) {
- if (defined('_VAR_PREVIEW') and _VAR_PREVIEW) {
+ if (defined('_VAR_PREVIEW') && _VAR_PREVIEW) {
return '';
}
@@ -227,7 +220,7 @@
$trouver_table = charger_fonction('trouver_table', 'base');
$desc = $trouver_table(table_objet_sql($type));
}
- if (!$desc or !isset($desc['field']['statut'])) {
+ if (!$desc || !isset($desc['field']['statut'])) {
return '';
}
@@ -238,20 +231,19 @@
$notpub = sql_in('statut', ['prop', 'prive']);
- if ($type == 'article' and $GLOBALS['meta']['post_dates'] != 'oui') {
+ if ($type == 'article' && $GLOBALS['meta']['post_dates'] != 'oui') {
$notpub .= " OR (statut='publie' AND date>" . sql_quote(date('Y-m-d H:i:s')) . ')';
}
return sql_fetsel('1', table_objet_sql($type), id_table_objet($type) . '=' . $id . " AND ($notpub)");
}
-
/**
* Régler les boutons dans la langue de l'admin (sinon tant pis)
*
* @return string
* Code de langue
- **/
+ */
function admin_lang() {
$alang = '';
if (!empty($_COOKIE['spip_admin'])) {
@@ -278,30 +270,26 @@
* Retourne une URL vers un validateur
*
* @return string
- **/
+ */
function admin_valider() {
-
- return ((!isset($GLOBALS['xhtml']) or $GLOBALS['xhtml'] !== 'true') ?
- (parametre_url(self(), 'var_mode', 'debug', '&')
- . '&var_mode_affiche=validation') :
- ('http://validator.w3.org/check?uri='
- . rawurlencode('http://' . $_SERVER['HTTP_HOST'] . nettoyer_uri())));
+ return (!isset($GLOBALS['xhtml']) || $GLOBALS['xhtml'] !== 'true')
+ ? (parametre_url(self(), 'var_mode', 'debug', '&')
+ . '&var_mode_affiche=validation')
+ : ('http://validator.w3.org/check?uri='
+ . rawurlencode('http://' . $_SERVER['HTTP_HOST'] . nettoyer_uri()));
}
/**
* Retourne une URL vers le mode debug, si l'utilisateur a le droit, et si c'est utile
*
* @return string
- **/
+ */
function admin_debug() {
- return ((
- (isset($GLOBALS['forcer_debug']) and $GLOBALS['forcer_debug'])
- or (isset($GLOBALS['bouton_admin_debug']) and $GLOBALS['bouton_admin_debug'])
- or (
- defined('_VAR_MODE') and _VAR_MODE == 'debug'
- and isset($_COOKIE['spip_debug']) and $_COOKIE['spip_debug']
- )
- ) and autoriser('debug')
+ return (
+ (isset($GLOBALS['forcer_debug']) && $GLOBALS['forcer_debug']
+ || isset($GLOBALS['bouton_admin_debug']) && $GLOBALS['bouton_admin_debug']
+ || defined('_VAR_MODE') && _VAR_MODE == 'debug' && isset($_COOKIE['spip_debug']) && $_COOKIE['spip_debug']) && autoriser('debug')
)
- ? parametre_url(self(), 'var_mode', 'debug', '&') : '';
+ ? parametre_url(self(), 'var_mode', 'debug', '&')
+ : '';
}
diff -Nru spip-4.4.23+dfsg/ecrire/balise/formulaire_ecrire_auteur.php spip-4.4.28+dfsg/ecrire/balise/formulaire_ecrire_auteur.php
--- spip-4.4.23+dfsg/ecrire/balise/formulaire_ecrire_auteur.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/balise/formulaire_ecrire_auteur.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,20 +1,17 @@
'FORMULAIRE_ECRIRE_AUTEUR',
- 'motif' => 'AUTEURS/ARTICLES'
- ]
+ 'motif' => 'AUTEURS/ARTICLES',
+ ],
];
erreur_squelette($msg, $context_compil);
@@ -76,7 +73,7 @@
}
// Si on est dans un contexte article,
// sortir tous les mails des auteurs de l'article
- if (!$args[0] and $id) {
+ if (!$args[0] && $id) {
$r = '';
$s = sql_allfetsel(
'email',
@@ -92,7 +89,7 @@
}
// On ne peut pas ecrire a un auteur dont le mail n'est pas valide
- if (!$args[2] or !email_valide($args[2])) {
+ if (!$args[2] || !email_valide($args[2])) {
return '';
}
diff -Nru spip-4.4.23+dfsg/ecrire/balise/formulaire_inscription.php spip-4.4.28+dfsg/ecrire/balise/formulaire_inscription.php
--- spip-4.4.23+dfsg/ecrire/balise/formulaire_inscription.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/balise/formulaire_inscription.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,20 +1,17 @@
intval($id_ou_options)];
$id = $options['id'];
- }else {
+ } else {
$options = $id_ou_options;
$id = (int) ($id_ou_options['id'] ?? 0);
}
diff -Nru spip-4.4.23+dfsg/ecrire/balise/id_logo_.php spip-4.4.28+dfsg/ecrire/balise/id_logo_.php
--- spip-4.4.23+dfsg/ecrire/balise/id_logo_.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/balise/id_logo_.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,25 +1,21 @@
id_boucle ? $p->boucles[$p->id_boucle]->sql_serveur : '';
if ($type == 'document') {
@@ -96,8 +90,6 @@
* Type d'objet
* @param string $align
* Alignement demandé du logo
- * @param string $lien
- * Lien pour encadrer l'image avec si présent
* @param Spip\Compilateur\Noeud\Champ $p
* Pile au niveau de la balise
* @param string $suite
@@ -106,7 +98,7 @@
* Indique un type de champ à retourner (fichier, src, titre, descriptif, credits, id, alt)
* @return string
* Code compilé retournant le chemin du logo ou le code HTML du logo.
- **/
+ */
function generer_code_logo($id_objet, $_id_objet, $type, $align, $_lien, $p, $suite, string $champ = ''): string {
$onoff = 'ON';
$_id_rubrique = "''";
@@ -126,7 +118,7 @@
$code = "quete_logo('$id_objet', '$onoff', $_id_objet, $_id_rubrique)";
if ($champ) {
- return "table_valeur($code, '".addslashes($champ)."')";
+ return "table_valeur($code, '" . addslashes($champ) . "')";
}
$align = preg_replace(',\W,', '', $align);
diff -Nru spip-4.4.23+dfsg/ecrire/balise/info_.php spip-4.4.28+dfsg/ecrire/balise/info_.php
--- spip-4.4.23+dfsg/ecrire/balise/info_.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/balise/info_.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,20 +1,17 @@
nom_champ;
$type_objet = interprete_argument_balise(1, $p);
$id_objet = interprete_argument_balise(2, $p);
- if ($info === 'INFO_' or !$type_objet or !$id_objet) {
+ if ($info === 'INFO_' || !$type_objet || !$id_objet) {
$msg = _T('zbug_balise_sans_argument', ['balise' => ' INFO_']);
erreur_squelette($msg, $p);
$p->interdire_scripts = true;
diff -Nru spip-4.4.23+dfsg/ecrire/balise/logo_.php spip-4.4.28+dfsg/ecrire/balise/logo_.php
--- spip-4.4.23+dfsg/ecrire/balise/logo_.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/balise/logo_.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,25 +1,21 @@
etoile === '**') ? -1 : 0;
$coord = [];
$align = $lien = '';
$mode_logo = '';
- if ($p->param and !$p->param[0][0]) {
+ if ($p->param && !$p->param[0][0]) {
$params = $p->param[0];
array_shift($params);
foreach ($params as $a) {
@@ -131,7 +125,7 @@
}
// demande de reduction sur logo avec ecriture spip 2.1 : #LOGO_xxx{200, 0}
- if ($coord_x or $coord_y) {
+ if ($coord_x || $coord_y) {
$code = "filtrer('image_graver',filtrer('image_reduire'," . $code . ", '$coord_x', '$coord_y'))";
}
diff -Nru spip-4.4.23+dfsg/ecrire/balise/menu_lang.php spip-4.4.28+dfsg/ecrire/balise/menu_lang.php
--- spip-4.4.23+dfsg/ecrire/balise/menu_lang.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/balise/menu_lang.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,20 +1,17 @@
$default) {
+ if ($GLOBALS['spip_lang'] != $default) {
$opt = lang_select($default); # et remplace
- if ($GLOBALS['spip_lang'] <> $default) {
+ if ($GLOBALS['spip_lang'] != $default) {
$default = ''; # annule tout choix par defaut
if ($opt) {
lang_select();
@@ -120,6 +117,6 @@
'url' => $post,
'name' => $nom,
'default' => $default,
- ]
+ ],
];
}
diff -Nru spip-4.4.23+dfsg/ecrire/balise/url_.php spip-4.4.28+dfsg/ecrire/balise/url_.php
--- spip-4.4.23+dfsg/ecrire/balise/url_.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/balise/url_.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,22 +1,19 @@
interdire_scripts = false;
return $p;
- } elseif ($f = charger_fonction($nom, 'balise', true)) {
+ }
+ if ($f = charger_fonction($nom, 'balise', true)) {
return $f($p);
} else {
$nom = strtolower($nom);
@@ -149,7 +146,7 @@
*
* @balise
* @uses generer_generer_url()
- * @link https://www.spip.net/3963
+ * @see https://www.spip.net/3963
* @example
* ```
* #URL_ARTICLE
@@ -187,7 +184,7 @@
* @balise
* @uses generer_generer_url()
* @see calculer_url()
- * @link https://www.spip.net/3861
+ * @see https://www.spip.net/3861
*
* @param Champ $p
* Pile au niveau de la balise
@@ -220,7 +217,7 @@
* telle que définie dans la configuration
*
* @balise
- * @link https://www.spip.net/4623
+ * @see https://www.spip.net/4623
*
* @param Champ $p
* Pile au niveau de la balise
@@ -235,7 +232,6 @@
return $p;
}
-
/**
* Compile la balise `#URL_PAGE` qui retourne une URL de type « page »
*
@@ -245,7 +241,7 @@
* - `#URL_PAGE*` retourne l'URL sans convertir les `&` en `&`
*
* @balise
- * @link https://www.spip.net/4630
+ * @see https://www.spip.net/4630
* @see generer_url_public()
* @example
* ```
@@ -271,7 +267,7 @@
// si une fonction de generation des url a ete definie pour ce connect l'utiliser
// elle devra aussi traiter le cas derogatoire type=page
if (function_exists($f = 'generer_generer_url_' . $s)) {
- if ($args and $args !== "''") {
+ if ($args && $args !== "''") {
$code .= ", $args";
}
$code = $f('page', $code, $s);
@@ -279,7 +275,7 @@
return $p;
}
$s = 'connect=' . addslashes($s);
- $args = (($args and $args !== "''") ? "$args . '&$s'" : "'$s'");
+ $args = (($args && $args !== "''") ? "$args . '&$s'" : "'$s'");
}
if (!$code) {
@@ -295,11 +291,10 @@
$p->code = $code;
spip_log("Calcul url page : connect vaut $s ca donne :" . $p->code . " args $args", _LOG_INFO);
- #$p->interdire_scripts = true;
+ # $p->interdire_scripts = true;
return $p;
}
-
/**
* Compile la balise `#URL_ECRIRE` qui retourne une URL d'une page de l'espace privé
*
@@ -309,7 +304,7 @@
* - `#URL_ECRIRE*` retourne l'URL sans convertir les `&` en `&`
*
* @balise
- * @link https://www.spip.net/5566
+ * @see https://www.spip.net/5566
* @see generer_url_ecrire()
* @example
* ```
@@ -329,11 +324,9 @@
} else {
$fonc = $code;
$args = interprete_argument_balise(2, $p);
- if ($args === null) {
- $args = "''";
- }
+ $args ??= "''";
$noentities = $p->etoile ? ', true' : '';
- if (($args != "''") or $noentities) {
+ if ($args != "''" || $noentities) {
$fonc .= ",$args$noentities";
}
}
@@ -343,7 +336,6 @@
return $p;
}
-
/**
* Compile la balise `#URL_ACTION_AUTEUR` qui retourne une URL d'action
* sécurisée pour l'auteur en cours
diff -Nru spip-4.4.23+dfsg/ecrire/balise/url_logout.php spip-4.4.28+dfsg/ecrire/balise/url_logout.php
--- spip-4.4.23+dfsg/ecrire/balise/url_logout.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/balise/url_logout.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,20 +1,17 @@
utf8 etc.
$desc = sql_serveur('', $serveur, true);
@@ -151,7 +147,6 @@
return false;
}
-
/**
* Regler le codage de connexion
*
@@ -172,17 +167,16 @@
*
* @return bool
* Retourne true si elle reussie.
- **/
+ */
function sql_set_charset($charset, $serveur = '', $option = true) {
- $f = sql_serveur('set_charset', $serveur, $option === 'continue' or $option === false);
- if (!is_string($f) or !$f) {
+ $f = sql_serveur('set_charset', $serveur, $option === 'continue' || $option === false);
+ if (!is_string($f) || !$f) {
return false;
}
return $f($charset, $serveur, $option !== false);
}
-
/**
* Effectue une requête de selection
*
@@ -216,7 +210,6 @@
* Le cas array est, pour une requete produite par le compilateur,
* un tableau donnnant le contexte afin d'indiquer le lieu de l'erreur au besoin
*
- *
* @return mixed
* Ressource SQL
*
@@ -227,8 +220,7 @@
* Retourne false en cas d'erreur, apres l'avoir denoncee.
* Les portages doivent retourner la requete elle-meme en cas d'erreur,
* afin de disposer du texte brut.
- *
- **/
+ */
function sql_select(
$select = [],
$from = [],
@@ -240,13 +232,13 @@
$serveur = '',
$option = true
) {
- $f = sql_serveur('select', $serveur, $option === 'continue' or $option === false);
- if (!is_string($f) or !$f) {
+ $f = sql_serveur('select', $serveur, $option === 'continue' || $option === false);
+ if (!is_string($f) || !$f) {
return false;
}
- $debug = (defined('_VAR_MODE') and _VAR_MODE == 'debug');
- if (($option !== false) and !$debug) {
+ $debug = (defined('_VAR_MODE') && _VAR_MODE == 'debug');
+ if ($option !== false && !$debug) {
$res = $f(
$select,
$from,
@@ -265,7 +257,7 @@
}
// le debug, c'est pour ce qui a ete produit par le compilateur
if (isset($GLOBALS['debug']['aucasou'])) {
- [$table, $id, ] = $GLOBALS['debug']['aucasou'];
+ [$table, $id] = $GLOBALS['debug']['aucasou'];
$nom = $GLOBALS['debug_objets']['courant'] . $id;
$GLOBALS['debug_objets']['requete'][$nom] = $query;
}
@@ -285,7 +277,6 @@
return false;
}
-
/**
* Recupere la syntaxe de la requete select sans l'executer
*
@@ -316,8 +307,7 @@
* @return mixed
* Chaine contenant la requete
* ou false en cas d'erreur
- *
- **/
+ */
function sql_get_select(
$select = [],
$from = [],
@@ -331,7 +321,6 @@
return sql_select($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur, false);
}
-
/**
* Retourne le nombre de lignes d'une sélection
*
@@ -369,8 +358,7 @@
* @return int|bool
* - Nombre de lignes de resultat
* - ou false en cas d'erreur
- *
- **/
+ */
function sql_countsel(
$from = [],
$where = [],
@@ -379,8 +367,8 @@
$serveur = '',
$option = true
) {
- $f = sql_serveur('countsel', $serveur, $option === 'continue' or $option === false);
- if (!is_string($f) or !$f) {
+ $f = sql_serveur('countsel', $serveur, $option === 'continue' || $option === false);
+ if (!is_string($f) || !$f) {
return false;
}
$r = $f($from, $where, $groupby, $having, $serveur, $option !== false);
@@ -418,10 +406,10 @@
* - false en cas de serveur indiponible ou d'erreur
*
* Ce retour n'est pas pertinent pour savoir si l'opération est correctement réalisée.
- **/
+ */
function sql_alter($q, $serveur = '', $option = true) {
- $f = sql_serveur('alter', $serveur, $option === 'continue' or $option === false);
- if (!is_string($f) or !$f) {
+ $f = sql_serveur('alter', $serveur, $option === 'continue' || $option === false);
+ if (!is_string($f) || !$f) {
return false;
}
$r = $f($q, $serveur, $option !== false);
@@ -452,15 +440,14 @@
* presentant une ligne de resultat d'une selection
*/
function sql_fetch($res, $serveur = '', $option = true) {
- $f = sql_serveur('fetch', $serveur, $option === 'continue' or $option === false);
- if (!is_string($f) or !$f) {
+ $f = sql_serveur('fetch', $serveur, $option === 'continue' || $option === false);
+ if (!is_string($f) || !$f) {
return false;
}
return $f($res, null, $serveur, $option !== false);
}
-
/**
* Retourne tous les enregistrements d'une selection
*
@@ -488,8 +475,8 @@
if (!$res) {
return $rows;
}
- $f = sql_serveur('fetch', $serveur, $option === 'continue' or $option === false);
- if (!is_string($f) or !$f) {
+ $f = sql_serveur('fetch', $serveur, $option === 'continue' || $option === false);
+ if (!is_string($f) || !$f) {
return [];
}
while ($r = $f($res, null, $serveur, $option !== false)) {
@@ -523,10 +510,10 @@
*
* @return bool
* Operation effectuée (true), sinon false.
- **/
+ */
function sql_seek($res, $row_number, $serveur = '', $option = true) {
- $f = sql_serveur('seek', $serveur, $option === 'continue' or $option === false);
- if (!is_string($f) or !$f) {
+ $f = sql_serveur('seek', $serveur, $option === 'continue' || $option === false);
+ if (!is_string($f) || !$f) {
return false;
}
$r = $f($res, $row_number, $serveur, $option !== false);
@@ -537,7 +524,6 @@
return $r;
}
-
/**
* Liste des bases de donnees accessibles
*
@@ -557,10 +543,10 @@
* @return array|bool
* Tableau contenant chaque nom de base de donnees.
* False en cas d'erreur.
- **/
+ */
function sql_listdbs($serveur = '', $option = true) {
- $f = sql_serveur('listdbs', $serveur, $option === 'continue' or $option === false);
- if (!is_string($f) or !$f) {
+ $f = sql_serveur('listdbs', $serveur, $option === 'continue' || $option === false);
+ if (!is_string($f) || !$f) {
return false;
}
$r = $f($serveur);
@@ -571,7 +557,6 @@
return $r;
}
-
/**
* Demande d'utiliser d'une base de donnees
*
@@ -589,10 +574,10 @@
* @return bool|string
* - True ou nom de la base en cas de success.
* - False en cas d'erreur.
- **/
+ */
function sql_selectdb($nom, $serveur = '', $option = true) {
- $f = sql_serveur('selectdb', $serveur, $option === 'continue' or $option === false);
- if (!is_string($f) or !$f) {
+ $f = sql_serveur('selectdb', $serveur, $option === 'continue' || $option === false);
+ if (!is_string($f) || !$f) {
return false;
}
$r = $f($nom, $serveur, $option !== false);
@@ -611,7 +596,7 @@
* @see sql_select()
* @see sql_countsel()
*
- * @param Object $res
+ * @param object $res
* Ressource SQL
* @param string $serveur
* Nom du connecteur
@@ -623,10 +608,10 @@
* @return bool|string
* - int Nombre de lignes,
* - false en cas d'erreur.
- **/
+ */
function sql_count($res, $serveur = '', $option = true) {
- $f = sql_serveur('count', $serveur, $option === 'continue' or $option === false);
- if (!is_string($f) or !$f) {
+ $f = sql_serveur('count', $serveur, $option === 'continue' || $option === false);
+ if (!is_string($f) || !$f) {
return false;
}
$r = $f($res, $serveur, $option !== false);
@@ -643,7 +628,7 @@
* Indique au gestionnaire SQL de libérer de sa mémoire la ressoucre de
* résultat indiquée car on n'a plus besoin de l'utiliser.
*
- * @param Object $res
+ * @param object $res
* Ressource de résultat
* @param string $serveur
* Nom de la connexion
@@ -656,15 +641,14 @@
* True si réussi
*/
function sql_free($res, $serveur = '', $option = true) {
- $f = sql_serveur('free', $serveur, $option === 'continue' or $option === false);
- if (!is_string($f) or !$f) {
+ $f = sql_serveur('free', $serveur, $option === 'continue' || $option === false);
+ if (!is_string($f) || !$f) {
return false;
}
return $f($res);
}
-
/**
* Insère une ligne dans une table
*
@@ -697,14 +681,14 @@
* - int|true identifiant de l'élément inséré (si possible), ou true, si réussite
* - texte de la requête si demandé,
* - False en cas d'erreur.
- **/
+ */
function sql_insert($table, $noms, $valeurs, $desc = [], $serveur = '', $option = true) {
- $f = sql_serveur('insert', $serveur, $option === 'continue' or $option === false);
- if (!is_string($f) or !$f) {
+ $f = sql_serveur('insert', $serveur, $option === 'continue' || $option === false);
+ if (!is_string($f) || !$f) {
return false;
}
$r = $f($table, $noms, $valeurs, $desc, $serveur, $option !== false);
- if ($r === false or $r === null) {
+ if ($r === false || $r === null) {
spip_sql_erreur($serveur);
$r = false;
}
@@ -748,14 +732,14 @@
* - int|true identifiant de l'élément inséré (si possible), ou true, si réussite
* - texte de la requête si demandé,
* - False en cas d'erreur.
- **/
+ */
function sql_insertq($table, $couples = [], $desc = [], $serveur = '', $option = true) {
- $f = sql_serveur('insertq', $serveur, $option === 'continue' or $option === false);
- if (!is_string($f) or !$f) {
+ $f = sql_serveur('insertq', $serveur, $option === 'continue' || $option === false);
+ if (!is_string($f) || !$f) {
return false;
}
$r = $f($table, $couples, $desc, $serveur, $option !== false);
- if ($r === false or $r === null) {
+ if ($r === false || $r === null) {
spip_sql_erreur($serveur);
$r = false;
}
@@ -793,14 +777,14 @@
* - true en cas de succès,
* - texte de la requête si demandé,
* - false en cas d'erreur.
- **/
+ */
function sql_insertq_multi($table, $couples = [], $desc = [], $serveur = '', $option = true) {
- $f = sql_serveur('insertq_multi', $serveur, $option === 'continue' or $option === false);
- if (!is_string($f) or !$f) {
+ $f = sql_serveur('insertq_multi', $serveur, $option === 'continue' || $option === false);
+ if (!is_string($f) || !$f) {
return false;
}
$r = $f($table, $couples, $desc, $serveur, $option !== false);
- if ($r === false or $r === null) {
+ if ($r === false || $r === null) {
spip_sql_erreur($serveur);
$r = false;
}
@@ -845,8 +829,8 @@
* - array Tableau décrivant la requête et son temps d'exécution si var_profile est actif
*/
function sql_update($table, $exp, $where = '', $desc = [], $serveur = '', $option = true) {
- $f = sql_serveur('update', $serveur, $option === 'continue' or $option === false);
- if (!is_string($f) or !$f) {
+ $f = sql_serveur('update', $serveur, $option === 'continue' || $option === false);
+ if (!is_string($f) || !$f) {
return false;
}
$r = $f($table, $exp, $where, $desc, $serveur, $option !== false);
@@ -857,7 +841,6 @@
return $r;
}
-
/**
* Met à jour du contenu d’une table SQL
*
@@ -898,10 +881,10 @@
* - true si réussite
* - texte de la requête si demandé,
* - false en cas d'erreur.
- **/
+ */
function sql_updateq($table, $exp, $where = '', $desc = [], $serveur = '', $option = true) {
- $f = sql_serveur('updateq', $serveur, $option === 'continue' or $option === false);
- if (!is_string($f) or !$f) {
+ $f = sql_serveur('updateq', $serveur, $option === 'continue' || $option === false);
+ if (!is_string($f) || !$f) {
return false;
}
$r = $f($table, $exp, $where, $desc, $serveur, $option !== false);
@@ -938,10 +921,10 @@
* - int : nombre de suppressions réalisées,
* - texte de la requête si demandé,
* - false en cas d'erreur.
- **/
+ */
function sql_delete($table, $where = '', $serveur = '', $option = true) {
- $f = sql_serveur('delete', $serveur, $option === 'continue' or $option === false);
- if (!is_string($f) or !$f) {
+ $f = sql_serveur('delete', $serveur, $option === 'continue' || $option === false);
+ if (!is_string($f) || !$f) {
return false;
}
$r = $f($table, $where, $serveur, $option !== false);
@@ -983,10 +966,10 @@
* - true si réussite
* - texte de la requête si demandé,
* - false en cas d'erreur.
- **/
+ */
function sql_replace($table, $couples, $desc = [], $serveur = '', $option = true) {
- $f = sql_serveur('replace', $serveur, $option === 'continue' or $option === false);
- if (!is_string($f) or !$f) {
+ $f = sql_serveur('replace', $serveur, $option === 'continue' || $option === false);
+ if (!is_string($f) || !$f) {
return false;
}
$r = $f($table, $couples, $desc, $serveur, $option !== false);
@@ -997,7 +980,6 @@
return $r;
}
-
/**
* Insère où met à jour des entrées d’une table SQL
*
@@ -1030,10 +1012,10 @@
* - true si réussite
* - texte de la requête si demandé,
* - false en cas d'erreur.
- **/
+ */
function sql_replace_multi($table, $tab_couples, $desc = [], $serveur = '', $option = true) {
- $f = sql_serveur('replace_multi', $serveur, $option === 'continue' or $option === false);
- if (!is_string($f) or !$f) {
+ $f = sql_serveur('replace_multi', $serveur, $option === 'continue' || $option === false);
+ if (!is_string($f) || !$f) {
return false;
}
$r = $f($table, $tab_couples, $desc, $serveur, $option !== false);
@@ -1067,10 +1049,10 @@
* - true en cas de succès,
* - texte de la requête si demandé,
* - false en cas d'erreur.
- **/
+ */
function sql_drop_table($table, $exist = '', $serveur = '', $option = true) {
- $f = sql_serveur('drop_table', $serveur, $option === 'continue' or $option === false);
- if (!is_string($f) or !$f) {
+ $f = sql_serveur('drop_table', $serveur, $option === 'continue' || $option === false);
+ if (!is_string($f) || !$f) {
return false;
}
$r = $f($table, $exist, $serveur, $option !== false);
@@ -1102,8 +1084,8 @@
* - true si la requête a réussie, false sinon
*/
function sql_drop_view($table, $exist = '', $serveur = '', $option = true) {
- $f = sql_serveur('drop_view', $serveur, $option === 'continue' or $option === false);
- if (!is_string($f) or !$f) {
+ $f = sql_serveur('drop_view', $serveur, $option === 'continue' || $option === false);
+ if (!is_string($f) || !$f) {
return false;
}
$r = $f($table, $exist, $serveur, $option !== false);
@@ -1133,10 +1115,10 @@
* - true -> executer la requete.
* @return object|bool|string
* Ressource à utiliser avec sql_fetch()
- **/
+ */
function sql_showbase($spip = null, $serveur = '', $option = true) {
- $f = sql_serveur('showbase', $serveur, $option === 'continue' or $option === false);
- if (!is_string($f) or !$f) {
+ $f = sql_serveur('showbase', $serveur, $option === 'continue' || $option === false);
+ if (!is_string($f) || !$f) {
return false;
}
@@ -1167,7 +1149,7 @@
* - true -> executer la requete.
* @return array
* Liste des tables SQL
- **/
+ */
function sql_alltable($spip = null, $serveur = '', $option = true) {
$q = sql_showbase($spip, $serveur, $option);
$r = [];
@@ -1208,10 +1190,10 @@
* - 'field' => array(colonne => description)
* - 'key' => array(type => key)
* - 'join' => array() // jointures, si déclarées.
- **/
+ */
function sql_showtable($table, $table_spip = false, $serveur = '', $option = true) {
- $f = sql_serveur('showtable', $serveur, $option === 'continue' or $option === false);
- if (!is_string($f) or !$f) {
+ $f = sql_serveur('showtable', $serveur, $option === 'continue' || $option === false);
+ if (!is_string($f) || !$f) {
return false;
}
@@ -1237,7 +1219,6 @@
return $f;
}
-
/**
* Teste si une table SQL existe ou non dans la base
*
@@ -1245,7 +1226,7 @@
*
* @param string $table
* Nom de la table
-* @param bool $table_spip
+ * @param bool $table_spip
* true pour remplacer automatiquement « spip » par le vrai préfixe de table
* @param string $serveur
* Nom du connecteur
@@ -1259,10 +1240,10 @@
* - true si la table existe,
* - texte de la requête si demandé,
* - false en cas d'erreur.
- **/
+ */
function sql_table_exists(string $table, bool $table_spip = true, $serveur = '', $option = true) {
- $f = sql_serveur('table_exists', $serveur, $option === 'continue' or $option === false);
- if (!is_string($f) or !$f) {
+ $f = sql_serveur('table_exists', $serveur, $option === 'continue' || $option === false);
+ if (!is_string($f) || !$f) {
return false;
}
@@ -1278,7 +1259,6 @@
return $f($vraie_table, $serveur, $option !== false);
}
-
/**
* Crée une table dans la base de données
*
@@ -1319,7 +1299,7 @@
* - true : exécuter la requete.
* @return bool
* true si succès, false en cas d'echec
- **/
+ */
function sql_create(
$nom,
$champs,
@@ -1329,8 +1309,8 @@
$serveur = '',
$option = true
) {
- $f = sql_serveur('create', $serveur, $option === 'continue' or $option === false);
- if (!is_string($f) or !$f) {
+ $f = sql_serveur('create', $serveur, $option === 'continue' || $option === false);
+ if (!is_string($f) || !$f) {
return false;
}
$r = $f($nom, $champs, $cles, $autoinc, $temporary, $serveur, $option !== false);
@@ -1354,10 +1334,10 @@
* - true : exécuter la requête
* - 'continue' : ne pas échouer en cas de serveur sql indisponible
* @return bool true si la base est créee.
- **/
+ */
function sql_create_base($nom, $serveur = '', $option = true) {
- $f = sql_serveur('create_base', $serveur, $option === 'continue' or $option === false);
- if (!is_string($f) or !$f) {
+ $f = sql_serveur('create_base', $serveur, $option === 'continue' || $option === false);
+ if (!is_string($f) || !$f) {
return false;
}
$r = $f($nom, $serveur, $option !== false);
@@ -1368,7 +1348,6 @@
return $r;
}
-
/**
* Crée une vue SQL
*
@@ -1393,10 +1372,10 @@
* - true si succès,
* - texte de la requête si demandé
* - false en cas d'échec.
- **/
+ */
function sql_create_view($nom, $select_query, $serveur = '', $option = true) {
- $f = sql_serveur('create_view', $serveur, $option === 'continue' or $option === false);
- if (!is_string($f) or !$f) {
+ $f = sql_serveur('create_view', $serveur, $option === 'continue' || $option === false);
+ if (!is_string($f) || !$f) {
return false;
}
$r = $f($nom, $select_query, $serveur, $option !== false);
@@ -1433,15 +1412,14 @@
* texte de sélection pour la requête
*/
function sql_multi($sel, $lang, $serveur = '', $option = true) {
- $f = sql_serveur('multi', $serveur, $option === 'continue' or $option === false);
- if (!is_string($f) or !$f) {
+ $f = sql_serveur('multi', $serveur, $option === 'continue' || $option === false);
+ if (!is_string($f) || !$f) {
return false;
}
return $f($sel, $lang);
}
-
/**
* Retourne la dernière erreur connue
*
@@ -1454,7 +1432,7 @@
*/
function sql_error($serveur = '') {
$f = sql_serveur('error', $serveur, true);
- if (!is_string($f) or !$f) {
+ if (!is_string($f) || !$f) {
return false;
}
@@ -1473,7 +1451,7 @@
*/
function sql_errno($serveur = '') {
$f = sql_serveur('errno', $serveur, true);
- if (!is_string($f) or !$f) {
+ if (!is_string($f) || !$f) {
return false;
}
@@ -1496,7 +1474,7 @@
*/
function sql_explain($q, $serveur = '', $option = true) {
$f = sql_serveur('explain', $serveur, true);
- if (!is_string($f) or !$f) {
+ if (!is_string($f) || !$f) {
return false;
}
$r = $f($q, $serveur, $option !== false);
@@ -1522,8 +1500,8 @@
* @return bool Toujours true
*/
function sql_optimize($table, $serveur = '', $option = true) {
- $f = sql_serveur('optimize', $serveur, $option === 'continue' or $option === false);
- if (!is_string($f) or !$f) {
+ $f = sql_serveur('optimize', $serveur, $option === 'continue' || $option === false);
+ if (!is_string($f) || !$f) {
return false;
}
$r = $f($table, $serveur, $option !== false);
@@ -1551,8 +1529,8 @@
* - true si la requête a réussie, false sinon
*/
function sql_repair($table, $serveur = '', $option = true) {
- $f = sql_serveur('repair', $serveur, $option === 'continue' or $option === false);
- if (!is_string($f) or !$f) {
+ $f = sql_serveur('repair', $serveur, $option === 'continue' || $option === false);
+ if (!is_string($f) || !$f) {
return false;
}
$r = $f($table, $serveur, $option !== false);
@@ -1563,7 +1541,6 @@
return $r;
}
-
/**
* Exécute une requête SQL
*
@@ -1585,8 +1562,8 @@
* - array : Tableau décrivant requête et temps d'exécution si var_profile actif pour tracer.
*/
function sql_query($ins, $serveur = '', $option = true) {
- $f = sql_serveur('query', $serveur, $option === 'continue' or $option === false);
- if (!is_string($f) or !$f) {
+ $f = sql_serveur('query', $serveur, $option === 'continue' || $option === false);
+ if (!is_string($f) || !$f) {
return false;
}
$r = $f($ins, $serveur, $option !== false);
@@ -1639,8 +1616,7 @@
* @return array|string|false
* Tableau de la premiere ligne de resultat de la selection tel que
* `array('id_rubrique' => 1, 'id_secteur' => 2)`
- *
- **/
+ */
function sql_fetsel(
$select = [],
$from = [],
@@ -1665,7 +1641,6 @@
return $r;
}
-
/**
* Retourne le tableau de toutes les lignes d'une selection
*
@@ -1707,17 +1682,15 @@
* @return array
* Tableau de toutes les lignes de resultat de la selection
* Chaque entree contient un tableau des elements demandees dans le SELECT.
- * {@example
- * ```
+ * {@example * ```
* array(
* array('id_rubrique' => 1, 'id_secteur' => 2)
* array('id_rubrique' => 4, 'id_secteur' => 2)
* ...
* )
* ```
- * }
- *
- **/
+ *}
+ */
function sql_allfetsel(
$select = [],
$from = [],
@@ -1737,7 +1710,6 @@
return sql_fetch_all($q, $serveur, $option);
}
-
/**
* Retourne un unique champ d'une selection
*
@@ -1778,8 +1750,7 @@
* @return mixed
* Contenu de l'unique valeur demandee du premier enregistrement retourne
* ou NULL si la requete ne retourne aucun enregistrement
- *
- **/
+ */
function sql_getfetsel(
$select,
$from = [],
@@ -1823,11 +1794,11 @@
*
* @return string
* Numero de version du serveur SQL
- **/
+ */
function sql_version($serveur = '', $option = true) {
$row = sql_fetsel('version() AS n', '', '', '', '', '', '', $serveur);
- return ($row['n']);
+ return $row['n'];
}
/**
@@ -1861,10 +1832,10 @@
*
* @return bool
* Le serveur SQL prefere t'il des transactions pour les insertions multiples ?
- **/
+ */
function sql_preferer_transaction($serveur = '', $option = true) {
$f = sql_serveur('preferer_transaction', $serveur, true);
- if (!is_string($f) or !$f) {
+ if (!is_string($f) || !$f) {
return false;
}
$r = $f($serveur, $option !== false);
@@ -1875,8 +1846,6 @@
return $r;
}
-;
-
/**
* Démarre une transaction
*
@@ -1895,10 +1864,10 @@
* @return bool
* true si la transaction est demarree
* false en cas d'erreur
- **/
+ */
function sql_demarrer_transaction($serveur = '', $option = true) {
$f = sql_serveur('demarrer_transaction', $serveur, true);
- if (!is_string($f) or !$f) {
+ if (!is_string($f) || !$f) {
return false;
}
$r = $f($serveur, $option !== false);
@@ -1909,8 +1878,6 @@
return $r;
}
-;
-
/**
* Termine une transaction
*
@@ -1929,10 +1896,10 @@
* @return bool
* true si la transaction est demarree
* false en cas d'erreur
- **/
+ */
function sql_terminer_transaction($serveur = '', $option = true) {
$f = sql_serveur('terminer_transaction', $serveur, true);
- if (!is_string($f) or !$f) {
+ if (!is_string($f) || !$f) {
return false;
}
$r = $f($serveur, $option !== false);
@@ -1943,9 +1910,6 @@
return $r;
}
-;
-
-
/**
* Prépare une chaine hexadécimale
*
@@ -1965,10 +1929,10 @@
* - 'continue' pour ne pas échouer en cas de serveur SQL indisponible.
* @return string
* Valeur hexadécimale attendue par le serveur SQL
- **/
+ */
function sql_hex($val, $serveur = '', $option = true) {
- $f = sql_serveur('hex', $serveur, $option === 'continue' or $option === false);
- if (!is_string($f) or !$f) {
+ $f = sql_serveur('hex', $serveur, $option === 'continue' || $option === false);
+ if (!is_string($f) || !$f) {
return false;
}
@@ -1996,10 +1960,10 @@
* Exemple : `int NOT NULL` qui sert alors aussi à calculer le type d'échappement
* @return string
* La chaine echappee
- **/
+ */
function sql_quote($val, $serveur = '', $type = '') {
$f = sql_serveur('quote', $serveur, true);
- if (!is_string($f) or !$f) {
+ if (!is_string($f) || !$f) {
$f = '_q';
}
@@ -2026,10 +1990,10 @@
* @return string|bool
* - string : Expression SQL
* - false si le serveur SQL est indisponible
- **/
+ */
function sql_date_proche($champ, $interval, $unite, $serveur = '', $option = true) {
$f = sql_serveur('date_proche', $serveur, true);
- if (!is_string($f) or !$f) {
+ if (!is_string($f) || !$f) {
return false;
}
@@ -2067,24 +2031,24 @@
* - true ou false -> retourne l'expression
* @return string
* Expression de requête SQL
- **/
+ */
function sql_in_quote($champ, $valeurs, $not = '', $serveur = '', $type = '', $option = true) {
$quote = sql_serveur('quote', $serveur, true);
- if (!is_string($quote) or !$quote) {
+ if (!is_string($quote) || !$quote) {
return false;
}
// sql_quote produit une chaine dans tous les cas
- $valeurs = array_filter($valeurs, fn($v) => !is_array($v));
+ $valeurs = array_filter($valeurs, fn ($v) => !is_array($v));
$valeurs = array_unique($valeurs);
$valeurs = $quote($valeurs, $type);
if (!strlen(trim($valeurs))) {
- return ($not ? '0=0' : '0=1');
+ return $not ? '0=0' : '0=1';
}
- $f = sql_serveur('in', $serveur, $option === 'continue' or $option === false);
- if (!is_string($f) or !$f) {
+ $f = sql_serveur('in', $serveur, $option === 'continue' || $option === false);
+ if (!is_string($f) || !$f) {
return false;
}
@@ -2108,7 +2072,7 @@
$type = '';
if (!is_array($valeurs)) {
$valeurs = strval($valeurs);
- if (isset($valeurs[0]) and $valeurs[0] === ',') {
+ if (isset($valeurs[0]) && $valeurs[0] === ',') {
$valeurs = substr($valeurs, 1);
}
// on explode en tableau pour pouvoir securiser le contenu
@@ -2120,8 +2084,6 @@
return sql_in_quote($champ, $valeurs, $not, $serveur, $type, $option);
}
-
-
/**
* Retourne une expression IN pour le gestionnaire de base de données
* à partir d'une sélection de données
@@ -2156,7 +2118,7 @@
* Nom du connecteur
* @return string
* Expression de requête SQL
- **/
+ */
function sql_in_select(
$in,
$select,
@@ -2187,7 +2149,7 @@
*
* @see sql_seek()
*
- * @param Object $res
+ * @param object $res
* Ressource issue d'une selection sql_select
* @param int $pos
* position courante
@@ -2224,7 +2186,7 @@
if (sql_seek($res, $seek)) {
$pos = $seek;
} else {
- while ($pos < $seek and sql_fetch($res, $serveur, $option)) {
+ while ($pos < $seek && sql_fetch($res, $serveur, $option)) {
$pos++;
}
}
@@ -2232,7 +2194,6 @@
return $pos;
}
-
/**
* Teste qu'une description de champ SQL est de type entier
*
@@ -2278,7 +2239,7 @@
* qui ne sait pas gerer les dates < 1970
*
* @api
- * @param int $annee Annee
+ * @param int $annee
* @param int $mois Numero du mois
* @param int $jour Numero du jour dans le mois
* @param int $h Heures
@@ -2305,7 +2266,6 @@
. sprintf('%02u', $m) . ':' . sprintf('%02u', $s);
}
-
/**
* Retourne la description de la table SQL
*
@@ -2322,7 +2282,7 @@
* Nom du connecteur
* @return array|bool
* Description de la table ou false si elle n'est pas trouvee ou declaree.
- **/
+ */
function description_table($nom, $serveur = '') {
static $trouver_table;
@@ -2346,11 +2306,8 @@
}
include_spip('base/auxiliaires');
- if (isset($GLOBALS['tables_auxiliaires'][$nom])) {
- return $GLOBALS['tables_auxiliaires'][$nom];
- }
- return false;
+ return $GLOBALS['tables_auxiliaires'][$nom] ?? false;
}
/**
diff -Nru spip-4.4.23+dfsg/ecrire/base/auxiliaires.php spip-4.4.28+dfsg/ecrire/base/auxiliaires.php
--- spip-4.4.23+dfsg/ecrire/base/auxiliaires.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/base/auxiliaires.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,13 +1,13 @@
page(_T(
- 'titre_probleme_technique'),
+ echo $minipage->page(
+ _T(
+ 'titre_probleme_technique'
+ ),
[
'titre' => _T('info_travaux_titre'),
'status' => 503,
@@ -272,7 +268,7 @@
// pour ne pas declarer tout indisponible d'un coup
// si en cours d'installation ou si db=@test@ on ne pose rien
// car c'est un test de connexion
- if (!defined('_ECRIRE_INSTALL') and $db !== '@test@') {
+ if (!defined('_ECRIRE_INSTALL') && $db !== '@test@') {
$f = _DIR_TMP . $type . '.' . substr(md5($host . $port . $db), 0, 8) . '.out';
} elseif ($db == '@test@') {
$db = '';
@@ -280,8 +276,8 @@
if (
$f
- and @file_exists($f)
- and (time() - @filemtime($f) < _CONNECT_RETRY_DELAY)
+ && @file_exists($f)
+ && time() - @filemtime($f) < _CONNECT_RETRY_DELAY
) {
spip_log("Echec : $f recent. Pas de tentative de connexion", _LOG_HS);
@@ -317,7 +313,6 @@
return null;
}
-
/**
* Première connexion au serveur principal de base de données
*
@@ -344,9 +339,9 @@
* - false si pas de charset connu pour la connexion
* - -1 charset non renseigné
* - nom du charset sinon
- **/
+ */
function spip_connect_main($connexion, $charset_sql_connexion = '') {
- if ($GLOBALS['spip_connect_version'] < 0.1 and _DIR_RESTREINT) {
+ if ($GLOBALS['spip_connect_version'] < 0.1 && _DIR_RESTREINT) {
include_spip('inc/headers');
redirige_url_ecrire('upgrade', 'reinstall=oui');
}
@@ -361,8 +356,7 @@
// sinon on regarde la table spip_meta
// en cas d'erreur select retourne la requette (is_string=true donc)
if (
- !$r = $f('valeur', 'spip_meta', "nom='charset_sql_connexion'")
- or is_string($r)
+ !($r = $f('valeur', 'spip_meta', "nom='charset_sql_connexion'")) || is_string($r)
) {
return false;
}
@@ -403,15 +397,18 @@
*
* @param int|float|string|array $a Valeur à échapper
* @return string Valeur échappée.
- **/
+ */
function _q($a): string {
if (is_numeric($a)) {
return strval($a);
- } elseif (is_array($a)) {
+ }
+ if (is_array($a)) {
return join(',', array_map('_q', $a));
- } elseif (is_scalar($a)) {
- return ("'" . addslashes($a) . "'");
- } elseif ($a === null) {
+ }
+ if (is_scalar($a)) {
+ return "'" . addslashes($a) . "'";
+ }
+ if ($a === null) {
return "''";
}
throw new \RuntimeException('Can’t use _q with ' . gettype($a));
@@ -428,13 +425,13 @@
*
* @param string $query
* @return array
+ * @deprecated
*/
function query_echappe_textes($query, $uniqid = null) {
+ trigger_deprecation('spip', '4.4', 'Using "%s" is deprecated, use "%s" instead', __FUNCTION__, 'Spip\Texte\Collecteur\QuotedStrings');
static $codeEchappements = null;
- if (is_null($codeEchappements) or $uniqid) {
- if (is_null($uniqid)) {
- $uniqid = uniqid();
- }
+ if ($codeEchappements === null || $uniqid) {
+ $uniqid ??= uniqid();
$uniqid = substr(md5($uniqid), 0, 4);
$codeEchappements = ['\\\\' => "\x1@#{$uniqid}#@\x1", "\\'" => "\x2@#{$uniqid}#@\x2", '\\"' => "\x3@#{$uniqid}#@\x3", '%' => "\x4@#{$uniqid}#@\x4"];
}
@@ -445,7 +442,7 @@
// si la query contient deja des codes d'echappement on va s'emmeler les pinceaux et donc on ne touche a rien
// ce n'est pas un cas legitime
foreach ($codeEchappements as $codeEchappement) {
- if (strpos($query, (string) $codeEchappement) !== false) {
+ if (str_contains($query, (string) $codeEchappement)) {
return [$query, []];
}
}
@@ -461,15 +458,13 @@
$part = array_shift($textes);
$nextpos = strpos($query_echappees, $part, $currentpos);
// si besoin recoller ensemble les doubles '' de sqlite (echappement des ')
- while (count($textes) and substr($part, -1) === "'") {
+ while (count($textes) && str_ends_with($part, "'")) {
$next = reset($textes);
if (
- strpos($next, "'") === 0
- and strpos($query_echappees, $part . $next, $currentpos) === $nextpos
+ str_starts_with($next, "'") && strpos($query_echappees, $part . $next, $currentpos) === $nextpos
) {
$part .= array_shift($textes);
- }
- else {
+ } else {
break;
}
}
@@ -510,8 +505,10 @@
* @param string $query
* @param array $textes
* @return string
+ * @deprecated
*/
function query_reinjecte_textes($query, $textes) {
+ trigger_deprecation('spip', '4.4', 'Using "%s" is deprecated, use "%s" instead', __FUNCTION__, 'Spip\Texte\Collecteur\QuotedStrings');
// recuperer les codes echappements
$codeEchappements = query_echappe_textes(null);
@@ -524,7 +521,6 @@
return $query;
}
-
/**
* Exécute une requête sur le serveur SQL
*
@@ -537,7 +533,7 @@
* @return bool|mixed
* - false si on ne peut pas exécuter la requête
* - indéfini sinon.
- **/
+ */
function spip_query($query, $serveur = '') {
$f = spip_connect_sql($GLOBALS['spip_sql_version'], 'query', $serveur, true);
diff -Nru spip-4.4.23+dfsg/ecrire/base/create.php spip-4.4.28+dfsg/ecrire/base/create.php
--- spip-4.4.23+dfsg/ecrire/base/create.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/base/create.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,19 +1,17 @@
$type) {
// Ne pas oublier les cas des cles non nommees dans la declaration et qui sont retournees
// par le showtable sous la forme d'un index de tableau "KEY $type" et non "KEY"
- if (!isset($sql_desc['key'][$key]) and !isset($sql_desc['key']["$key $type"])) {
+ if (!isset($sql_desc['key'][$key]) && !isset($sql_desc['key']["$key $type"])) {
sql_alter("TABLE $table ADD $key ($type)", $serveur);
}
$last = $field;
@@ -122,7 +119,6 @@
*
* @param array $tables_inc
* tables avec autoincrement sur la cle primaire
- * @param $tables_noinc
* tables sans autoincrement sur la cle primaire
* @param bool|array $up
* upgrader (true) ou creer (false)
@@ -130,7 +126,6 @@
* et des $tables_inc / $tables_noinc seront traitees
* @param string $serveur
* serveur sql
- * @return void
*/
function alterer_base($tables_inc, $tables_noinc, $up = false, $serveur = '') {
if ($up === false) {
@@ -143,13 +138,13 @@
}
}
foreach ($tables_inc as $k => $v) {
- if (!$old or in_array($k, $up)) {
+ if (!$old || in_array($k, $up)) {
creer_ou_upgrader_table($k, $v, true, $old, $serveur);
}
}
foreach ($tables_noinc as $k => $v) {
- if (!$old or in_array($k, $up)) {
+ if (!$old || in_array($k, $up)) {
creer_ou_upgrader_table($k, $v, false, $old, $serveur);
}
}
@@ -168,7 +163,6 @@
* @uses alterer_base()
*
* @param string $serveur
- * @return void
*/
function creer_base($serveur = '') {
@@ -198,7 +192,6 @@
*
* @param array $upgrade_tables
* @param string $serveur
- * @return void
*/
function maj_tables($upgrade_tables = [], $serveur = '') {
alterer_base(
diff -Nru spip-4.4.23+dfsg/ecrire/base/delete_all.php spip-4.4.28+dfsg/ecrire/base/delete_all.php
--- spip-4.4.23+dfsg/ecrire/base/delete_all.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/base/delete_all.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,20 +1,17 @@
$t) {
// par defaut tout est coche sauf les tables dans $exclude
- if (is_null($post)) {
+ if ($post === null) {
$check = (in_array($t, $exclude) ? false : true);
} // mais si on a poste une selection, la reprendre
else {
@@ -151,7 +149,6 @@
return $res;
}
-
/**
* Lister les tables non exportables par defaut
* (liste completable par le pipeline lister_tables_noexport
@@ -162,7 +159,7 @@
function lister_tables_noexport() {
// par defaut tout est exporte sauf les tables ci-dessous
static $EXPORT_tables_noexport = null;
- if (!is_null($EXPORT_tables_noexport)) {
+ if ($EXPORT_tables_noexport !== null) {
return $EXPORT_tables_noexport;
}
@@ -170,12 +167,12 @@
'spip_caches', // plugin invalideur
'spip_resultats', // resultats de recherche ... c'est un cache !
'spip_test', // c'est un test !
- #'spip_referers',
- #'spip_referers_articles',
- #'spip_visites',
- #'spip_visites_articles',
- #'spip_versions',
- #'spip_versions_fragments'
+ # 'spip_referers',
+ # 'spip_referers_articles',
+ # 'spip_visites',
+ # 'spip_visites_articles',
+ # 'spip_versions',
+ # 'spip_versions_fragments'
];
$EXPORT_tables_noexport = pipeline('lister_tables_noexport', $EXPORT_tables_noexport);
@@ -192,7 +189,7 @@
*/
function lister_tables_noimport() {
static $IMPORT_tables_noimport = null;
- if (!is_null($IMPORT_tables_noimport)) {
+ if ($IMPORT_tables_noimport !== null) {
return $IMPORT_tables_noimport;
}
@@ -212,7 +209,6 @@
return $IMPORT_tables_noimport;
}
-
/**
* Lister les tables a ne pas effacer
* (liste completable par le pipeline lister_tables_noerase
@@ -222,7 +218,7 @@
*/
function lister_tables_noerase() {
static $IMPORT_tables_noerase = null;
- if (!is_null($IMPORT_tables_noerase)) {
+ if ($IMPORT_tables_noerase !== null) {
return $IMPORT_tables_noerase;
}
@@ -233,14 +229,13 @@
'spip_referers',
'spip_referers_articles',
'spip_visites',
- 'spip_visites_articles'
+ 'spip_visites_articles',
];
$IMPORT_tables_noerase = pipeline('lister_tables_noerase', $IMPORT_tables_noerase);
return $IMPORT_tables_noerase;
}
-
/**
* construction de la liste des tables pour le dump :
* toutes les tables principales
@@ -259,15 +254,14 @@
$tables_jointures = $GLOBALS['tables_jointures'];
if (
- include_spip('base/objets')
- and function_exists('lister_tables_objets_sql')
+ include_spip('base/objets') && function_exists('lister_tables_objets_sql')
) {
$tables = lister_tables_objets_sql();
foreach ($tables as $t => $infos) {
- if ($infos['principale'] and !isset($tables_principales[$t])) {
+ if ($infos['principale'] && !isset($tables_principales[$t])) {
$tables_principales[$t] = true;
}
- if (!$infos['principale'] and !isset($tables_auxiliaires[$t])) {
+ if (!$infos['principale'] && !isset($tables_auxiliaires[$t])) {
$tables_auxiliaires[$t] = true;
}
if (is_countable($infos['tables_jointures']) ? count($infos['tables_jointures']) : 0) {
@@ -290,10 +284,10 @@
}
if (isset($tables_auxiliaires[$nom]) || isset($tables_principales[$nom])) {
foreach ($liste_relations as $link_table) {
- if (isset($tables_auxiliaires[$link_table])/*||isset($tables_principales[$link_table])*/) {
+ if (isset($tables_auxiliaires[$link_table])/* ||isset($tables_principales[$link_table]) */) {
$tables_for_link[$link_table][] = $nom;
} else {
- if (isset($tables_auxiliaires["spip_$link_table"])/*||isset($tables_principales["spip_$link_table"])*/) {
+ if (isset($tables_auxiliaires["spip_$link_table"])/* ||isset($tables_principales["spip_$link_table"]) */) {
$tables_for_link["spip_$link_table"][] = $nom;
}
}
@@ -326,7 +320,7 @@
# si une restauration est interrompue,
# cela se verra mieux si il manque des objets
# que des liens
- array_unshift($tables_for_dump, $link_table);
+ array_unshift($tables_for_dump, $link_table);
}
}
@@ -354,7 +348,7 @@
foreach ($tables as $table) {
if (!in_array($table, $exclure_tables)) {
// sur le serveur principal, il ne faut pas supprimer l'auteur loge !
- if (($table != 'spip_auteurs') or $serveur != '') {
+ if ($table != 'spip_auteurs' || $serveur != '') {
// regarder si il y a au moins un champ impt='non'
$desc = $trouver_table($table, $serveur);
if (isset($desc['field']['impt'])) {
@@ -370,8 +364,8 @@
// Bidouille pour garder l'acces admin actuel pendant toute la restauration
if (
$serveur == ''
- and in_array('spip_auteurs', $tables)
- and !in_array('spip_auteurs', $exclure_tables)
+ && in_array('spip_auteurs', $tables)
+ && !in_array('spip_auteurs', $exclure_tables)
) {
base_conserver_copieur(true, $serveur);
sql_delete('spip_auteurs', 'id_auteur>0', $serveur);
@@ -383,11 +377,10 @@
*
* @param bool $move
* @param string $serveur
- * @return void
*/
function base_conserver_copieur($move = true, $serveur = '') {
// s'asurer qu'on a pas deja fait la manip !
- if ($GLOBALS['visiteur_session']['id_auteur'] > 0 and sql_countsel('spip_auteurs', 'id_auteur>0')) {
+ if ($GLOBALS['visiteur_session']['id_auteur'] > 0 && sql_countsel('spip_auteurs', 'id_auteur>0')) {
spip_log(
'Conserver copieur dans id_auteur=' . $GLOBALS['visiteur_session']['id_auteur'] . " pour le serveur '$serveur'",
'dump.' . _LOG_INFO_IMPORTANTE
@@ -462,7 +455,7 @@
$upgrade = false;
// si la table existe et qu'on est a l'init, la dropper
if ($desc_dest = sql_showtable($table, true, $serveur_dest) and $init) {
- if ($serveur_dest == '' and in_array($table, ['spip_meta', 'spip_auteurs'])) {
+ if ($serveur_dest == '' && in_array($table, ['spip_meta', 'spip_auteurs'])) {
// ne pas dropper auteurs et meta sur le serveur principal
// faire un simple upgrade a la place
// pour ajouter les champs manquants
@@ -566,8 +559,7 @@
}
if (
- !lire_fichier($status_file, $status)
- or !$status = unserialize($status)
+ !lire_fichier($status_file, $status) || !($status = unserialize($status))
) {
$status = [];
}
@@ -615,10 +607,10 @@
// si table commence par spip_ c'est une table SPIP, renommer le prefixe si besoin
// sinon chercher la vraie table
$desc_source = false;
- if (strncmp($table, 'spip_', 5) == 0) {
+ if (str_starts_with($table, 'spip_')) {
$desc_source = $trouver_table(preg_replace(',^spip_,', '', $table), $serveur_source, true);
}
- if (!$desc_source or !isset($desc_source['exist']) or !$desc_source['exist']) {
+ if (!$desc_source || !isset($desc_source['exist']) || !$desc_source['exist']) {
$desc_source = $trouver_table($table, $serveur_source, false);
}
@@ -626,19 +618,17 @@
if ($desc_source) {
// $status['tables_copiees'][$table] contient l'avancement
// de la copie pour la $table : 0 a N et -N quand elle est finie (-1 si vide et finie...)
- if (!isset($status['tables_copiees'][$table])) {
- $status['tables_copiees'][$table] = 0;
- }
+ $status['tables_copiees'][$table] ??= 0;
if (
is_numeric($status['tables_copiees'][$table])
- and $status['tables_copiees'][$table] >= 0
- and $desc_dest = $preparer_table_dest(
+ && $status['tables_copiees'][$table] >= 0
+ && ($desc_dest = $preparer_table_dest(
$table,
$desc_tables_dest[$table] ?? $desc_source,
$serveur_dest,
$status['tables_copiees'][$table] == 0
- )
+ ))
) {
if ($callback_progression) {
$callback_progression($status['tables_copiees'][$table], 0, $table);
@@ -662,7 +652,7 @@
// (permet un envoi par lot vers la destination)
if ($data_pool > 0) {
$s = strlen(serialize($row));
- while ($s < $data_pool and $row = sql_fetch($res, $serveur_source)) {
+ while ($s < $data_pool && ($row = sql_fetch($res, $serveur_source))) {
$s += strlen(serialize($row));
$rows[] = $row;
}
@@ -679,7 +669,7 @@
return true;
}
$status['tables_copiees'][$table] += count($rows);
- if ($max_time and time() > $max_time) {
+ if ($max_time && time() > $max_time) {
break;
}
}
@@ -691,7 +681,7 @@
$callback_progression($status['tables_copiees'][$table], 0, $table);
}
ecrire_fichier($status_file, serialize($status));
- if ($max_time and time() > $max_time) {
+ if ($max_time && time() > $max_time) {
return false;
} // on a pas fini, mais le temps imparti est ecoule
}
@@ -713,7 +703,7 @@
$callback_progression(
0,
$status['tables_copiees'][$table],
- "$table" . ((is_numeric($status['tables_copiees'][$table]) and $status['tables_copiees'][$table] >= 0) ? '[Echec]' : '')
+ "$table" . ((is_numeric($status['tables_copiees'][$table]) && $status['tables_copiees'][$table] >= 0) ? '[Echec]' : '')
);
}
}
diff -Nru spip-4.4.23+dfsg/ecrire/base/objets.php spip-4.4.28+dfsg/ecrire/base/objets.php
--- spip-4.4.23+dfsg/ecrire/base/objets.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/base/objets.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,22 +1,19 @@
[
'id_rubrique',
@@ -122,7 +118,7 @@
'url_site',
'chapo',
'texte',
- 'ps'
+ 'ps',
],
'field' => [
'id_article' => 'bigint(21) NOT NULL',
@@ -162,10 +158,10 @@
],
'join' => [
'id_article' => 'id_article',
- 'id_rubrique' => 'id_rubrique'
+ 'id_rubrique' => 'id_rubrique',
],
'parent' => [
- ['type' => 'rubrique', 'champ' => 'id_rubrique']
+ ['type' => 'rubrique', 'champ' => 'id_rubrique'],
],
'rechercher_champs' => [
'surtitre' => 5,
@@ -176,7 +172,7 @@
'ps' => 1,
'nom_site' => 1,
'url_site' => 1,
- 'descriptif' => 4
+ 'descriptif' => 4,
],
'rechercher_jointures' => [
'auteur' => ['nom' => 10],
@@ -187,15 +183,15 @@
'publie' => 'publie',
'previsu' => 'publie,prop,prepa/auteur',
'post_date' => 'date',
- 'exception' => ['statut', 'tout']
- ]
+ 'exception' => ['statut', 'tout'],
+ ],
],
'statut_titres' => [
'prepa' => 'info_article_redaction',
'prop' => 'info_article_propose',
'publie' => 'info_article_publie',
'refuse' => 'info_article_refuse',
- 'poubelle' => 'info_article_supprime'
+ 'poubelle' => 'info_article_supprime',
],
'statut_textes_instituer' => [
'prepa' => 'texte_statut_en_cours_redaction',
@@ -208,7 +204,7 @@
'aide_changer_statut' => 'artstatut',
'tables_jointures' => [
'profondeur' => 'rubriques',
- #'id_auteur' => 'auteurs_liens' // declaration generique plus bas
+ # 'id_auteur' => 'auteurs_liens' // declaration generique plus bas
],
],
'spip_auteurs' => [
@@ -261,7 +257,7 @@
],
'join' => [
'id_auteur' => 'id_auteur',
- 'login' => 'login'
+ 'login' => 'login',
],
'rechercher_champs' => [
'nom' => 5,
@@ -269,7 +265,7 @@
'email' => 1,
'nom_site' => 1,
'url_site' => 1,
- 'login' => 1
+ 'login' => 1,
],
// 2 conditions pour les auteurs : statut!=poubelle,
// et avoir des articles publies
@@ -278,21 +274,21 @@
'champ' => 'statut',
'publie' => '!5poubelle',
'previsu' => '!5poubelle',
- 'exception' => 'statut'
+ 'exception' => 'statut',
],
[
'champ' => [
['spip_auteurs_liens', 'id_auteur'],
[
'spip_articles',
- ['id_objet', 'id_article', 'objet', 'article']
+ ['id_objet', 'id_article', 'objet', 'article'],
],
- 'statut'
+ 'statut',
],
'publie' => 'publie',
'previsu' => '!',
'post_date' => 'date',
- 'exception' => ['statut', 'lien', 'tout']
+ 'exception' => ['statut', 'lien', 'tout'],
],
],
'statut_images' => [
@@ -301,7 +297,7 @@
'1comite' => 'auteur-1comite-16.png',
'6forum' => 'auteur-6forum-16.png',
'5poubelle' => 'auteur-5poubelle-16.png',
- 'nouveau' => ''
+ 'nouveau' => '',
],
'statut_titres' => [
'titre_image_visiteur',
@@ -310,7 +306,7 @@
'6forum' => 'titre_image_visiteur',
'5poubelle' => 'titre_image_auteur_supprime',
],
- 'tables_jointures' => [#'auteurs_liens' // declaration generique plus bas
+ 'tables_jointures' => [# 'auteurs_liens' // declaration generique plus bas
],
],
'spip_rubriques' => [
@@ -350,7 +346,7 @@
'langue_choisie' => "VARCHAR(3) DEFAULT 'non'",
'statut_tmp' => "varchar(10) DEFAULT '0' NOT NULL",
'date_tmp' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
- 'profondeur' => "smallint(5) DEFAULT '0' NOT NULL"
+ 'profondeur' => "smallint(5) DEFAULT '0' NOT NULL",
],
'key' => [
'PRIMARY KEY' => 'id_rubrique',
@@ -358,26 +354,26 @@
'KEY id_parent' => 'id_parent',
],
'parent' => [
- ['type' => 'rubrique', 'champ' => 'id_parent']
+ ['type' => 'rubrique', 'champ' => 'id_parent'],
],
'rechercher_champs' => [
'titre' => 8,
'descriptif' => 5,
- 'texte' => 1
+ 'texte' => 1,
],
'statut' => [
[
'champ' => 'statut',
'publie' => 'publie',
'previsu' => '!',
- 'exception' => ['statut', 'tout']
+ 'exception' => ['statut', 'tout'],
],
],
- 'tables_jointures' => [#'id_auteur' => 'auteurs_liens' // declaration generique plus bas
+ 'tables_jointures' => [# 'id_auteur' => 'auteurs_liens' // declaration generique plus bas
],
],
// toutes les tables ont le droit a une jointure sur les auteurs
- ['tables_jointures' => ['id_auteur' => 'auteurs_liens']]
+ ['tables_jointures' => ['id_auteur' => 'auteurs_liens']],
];
// avant d'appeller les pipeline qui peuvent generer une reentrance a l'install
@@ -409,12 +405,12 @@
$add = $all[$i];
// eviter les doublons de declaration de table jointure (ex des mots sur auteurs)
// pour les declarations generiques avec cles numeriques
- if ($i == 'tables_jointures' and isset($infos_tables[$t][$i]) and is_countable($infos_tables[$t][$i]) ? count($infos_tables[$t][$i]) : 0) {
+ if ($i == 'tables_jointures' && isset($infos_tables[$t][$i]) && (is_countable($infos_tables[$t][$i]) ? count($infos_tables[$t][$i]) : 0)) {
$doublons = array_intersect($infos_tables[$t][$i], $add);
foreach ($doublons as $d) {
if (
is_numeric(array_search($d, $infos_tables[$t][$i]))
- and is_numeric($k = array_search($d, $add))
+ && is_numeric($k = array_search($d, $add))
) {
unset($add[$k]);
}
@@ -440,7 +436,7 @@
$mem = ($GLOBALS[$principale_ou_auxiliaire][$table] ?? []);
// l'ajouter au tableau
$GLOBALS[$principale_ou_auxiliaire][$table] = [];
- if (isset($infos['field']) and isset($infos['key'])) {
+ if (isset($infos['field']) && isset($infos['key'])) {
foreach (['field', 'key', 'join'] as $k) {
if (isset($infos_tables[$table][$k])) {
$GLOBALS[$principale_ou_auxiliaire][$table][$k] = &$infos_tables[$table][$k];
@@ -480,8 +476,8 @@
if ($table_sql === '::md5') {
return $md5;
}
- if ($table_sql and !isset($infos_tables[$table_sql])) {
- #$desc = renseigner_table_objet_sql($table_sql,$desc);
+ if ($table_sql && !isset($infos_tables[$table_sql])) {
+ # $desc = renseigner_table_objet_sql($table_sql,$desc);
$desc = renseigner_table_objet_interfaces($table_sql, $desc);
return $desc;
@@ -493,7 +489,6 @@
return $infos_tables;
}
-
/**
* Déclare les tables principales du Core
*
@@ -501,14 +496,13 @@
*
* @param array $tables_principales
* Description des tables principales déjà déclarées
- * @return void
- **/
+ */
function base_serial(&$tables_principales) {
$spip_jobs = [
'id_job' => 'bigint(21) NOT NULL',
'descriptif' => "text DEFAULT '' NOT NULL",
- 'fonction' => 'varchar(255) NOT NULL', //nom de la fonction
+ 'fonction' => 'varchar(255) NOT NULL', // nom de la fonction
'args' => "longblob DEFAULT '' NOT NULL", // arguments
'md5args' => "char(32) NOT NULL default ''", // signature des arguments
'inclure' => 'varchar(255) NOT NULL', // fichier a inclure ou path/ pour charger_fonction
@@ -524,19 +518,17 @@
'KEY status' => 'status',
];
- /// Attention: mes_fonctions peut avoir deja defini cette variable
- /// il faut donc rajouter, mais pas reinitialiser
+ // / Attention: mes_fonctions peut avoir deja defini cette variable
+ // / il faut donc rajouter, mais pas reinitialiser
$tables_principales['spip_jobs'] = ['field' => &$spip_jobs, 'key' => &$spip_jobs_key];
}
-
/**
* Déclare les tables auxiliaires du Core
*
* @param array $tables_auxiliaires
* Description des tables auxiliaires déjà déclarées
- * @return void
- **/
+ */
function base_auxiliaires(&$tables_auxiliaires) {
$spip_resultats = [
'recherche' => "char(16) DEFAULT '' NOT NULL",
@@ -544,7 +536,7 @@
'points' => "INT UNSIGNED DEFAULT '0' NOT NULL",
'table_objet' => "varchar(30) DEFAULT '' NOT NULL",
'serveur' => "char(16) DEFAULT '' NOT NULL", // hash md5 partiel du serveur de base ('' pour le serveur principal)
- 'maj' => 'TIMESTAMP'
+ 'maj' => 'TIMESTAMP',
];
$spip_resultats_key = [// pas de cle ni index, ca fait des insertions plus rapides et les requetes jointes utilisees en recheche ne sont pas plus lentes ...
@@ -554,7 +546,7 @@
'id_auteur' => "bigint(21) DEFAULT '0' NOT NULL",
'id_objet' => "bigint(21) DEFAULT '0' NOT NULL",
'objet' => "VARCHAR (25) DEFAULT '' NOT NULL",
- 'vu' => "VARCHAR(6) DEFAULT 'non' NOT NULL"
+ 'vu' => "VARCHAR(6) DEFAULT 'non' NOT NULL",
];
$spip_auteurs_liens_key = [
@@ -568,11 +560,11 @@
'nom' => 'VARCHAR (255) NOT NULL',
'valeur' => "text DEFAULT ''",
'impt' => "ENUM('non', 'oui') DEFAULT 'oui' NOT NULL",
- 'maj' => 'TIMESTAMP'
+ 'maj' => 'TIMESTAMP',
];
$spip_meta_key = [
- 'PRIMARY KEY' => 'nom'
+ 'PRIMARY KEY' => 'nom',
];
$spip_jobs_liens = [
@@ -583,29 +575,28 @@
$spip_jobs_liens_key = [
'PRIMARY KEY' => 'id_job,id_objet,objet',
- 'KEY id_job' => 'id_job'
+ 'KEY id_job' => 'id_job',
];
$tables_auxiliaires['spip_auteurs_liens'] = [
'field' => &$spip_auteurs_liens,
- 'key' => &$spip_auteurs_liens_key
+ 'key' => &$spip_auteurs_liens_key,
];
$tables_auxiliaires['spip_meta'] = [
'field' => &$spip_meta,
- 'key' => &$spip_meta_key
+ 'key' => &$spip_meta_key,
];
$tables_auxiliaires['spip_resultats'] = [
'field' => &$spip_resultats,
- 'key' => &$spip_resultats_key
+ 'key' => &$spip_resultats_key,
];
$tables_auxiliaires['spip_jobs_liens'] = [
'field' => &$spip_jobs_liens,
- 'key' => &$spip_jobs_liens_key
+ 'key' => &$spip_jobs_liens_key,
];
}
-
/**
* Auto remplissage des informations non explicites
* sur un objet d'une table sql
@@ -671,118 +662,58 @@
$infos['type'] = preg_replace(',^spip_|s$,', '', $table_sql);
}
}
- if (!isset($infos['type_surnoms'])) {
- $infos['type_surnoms'] = [];
- }
+ $infos['type_surnoms'] ??= [];
- if (!isset($infos['table_objet_sql'])) {
- $infos['table_objet_sql'] = $table_sql;
- }
- if (!isset($infos['table_objet'])) {
- $infos['table_objet'] = preg_replace(',^spip_,', '', $table_sql);
- }
- if (!isset($infos['table_objet_surnoms'])) {
- $infos['table_objet_surnoms'] = [];
- }
+ $infos['table_objet_sql'] ??= $table_sql;
+ $infos['table_objet'] ??= preg_replace(',^spip_,', '', $table_sql);
+ $infos['table_objet_surnoms'] ??= [];
- if (!isset($infos['principale'])) {
- $infos['principale'] = (isset($GLOBALS['tables_principales'][$table_sql]) ? 'oui' : false);
- }
+ $infos['principale'] ??= isset($GLOBALS['tables_principales'][$table_sql]) ? 'oui' : false;
// normaliser pour pouvoir tester en php $infos['principale']?
// et dans une boucle {principale=oui}
- $infos['principale'] = (($infos['principale'] and $infos['principale'] != 'non') ? 'oui' : false);
+ $infos['principale'] = (($infos['principale'] && $infos['principale'] != 'non') ? 'oui' : false);
// declarer et normaliser pour pouvoir tester en php $infos['editable']?
// et dans une boucle {editable=oui}
- if (!isset($infos['editable'])) {
- $infos['editable'] = 'oui';
- }
+ $infos['editable'] ??= 'oui';
- $infos['editable'] = (($infos['editable'] and $infos['editable'] != 'non') ? 'oui' : false);
+ $infos['editable'] = (($infos['editable'] && $infos['editable'] != 'non') ? 'oui' : false);
// les urls publiques sont par defaut page=type pour les tables principales, et rien pour les autres
// seules les exceptions sont donc a declarer
- if (!isset($infos['page'])) {
- $infos['page'] = ($infos['principale'] ? $infos['type'] : '');
- }
+ $infos['page'] ??= $infos['principale'] ? $infos['type'] : '';
- if (!isset($infos['url_voir'])) {
- $infos['url_voir'] = $infos['type'];
- }
- if (!isset($infos['url_edit'])) {
- $infos['url_edit'] = $infos['url_voir'] . ($infos['editable'] ? '_edit' : '');
- }
- if (!isset($infos['icone_objet'])) {
- $infos['icone_objet'] = $infos['type'];
- }
+ $infos['url_voir'] ??= $infos['type'];
+ $infos['url_edit'] ??= $infos['url_voir'] . ($infos['editable'] ? '_edit' : '');
+ $infos['icone_objet'] ??= $infos['type'];
// chaines de langue
// par defaut : objet:icone_xxx_objet
- if (!isset($infos['texte_retour'])) {
- $infos['texte_retour'] = 'icone_retour';
- }
- if (!isset($infos['texte_modifier'])) {
- $infos['texte_modifier'] = $infos['type'] . ':' . 'icone_modifier_' . $infos['type'];
- }
- if (!isset($infos['texte_creer'])) {
- $infos['texte_creer'] = $infos['type'] . ':' . 'icone_creer_' . $infos['type'];
- }
- if (!isset($infos['texte_creer_associer'])) {
- $infos['texte_creer_associer'] = $infos['type'] . ':' . 'texte_creer_associer_' . $infos['type'];
- }
- if (!isset($infos['texte_ajouter'])) {
- // Ajouter un X
- $infos['texte_ajouter'] = $infos['type'] . ':' . 'texte_ajouter_' . $infos['type'];
- }
- if (!isset($infos['texte_objets'])) {
- $infos['texte_objets'] = $infos['type'] . ':' . 'titre_' . $infos['table_objet'];
- }
- if (!isset($infos['texte_objet'])) {
- $infos['texte_objet'] = $infos['type'] . ':' . 'titre_' . $infos['type'];
- }
- if (!isset($infos['texte_logo_objet'])) {
- // objet:titre_logo_objet "Logo de ce X"
- $infos['texte_logo_objet'] = $infos['type'] . ':' . 'titre_logo_' . $infos['type'];
- }
- if (!isset($infos['texte_langue_objet'])) {
- // objet:texte_langue_objet "Langue de ce X"
- $infos['texte_langue_objet'] = $infos['type'] . ':' . 'titre_langue_' . $infos['type'];
- }
- if (!isset($infos['texte_definir_comme_traduction_objet'])) {
- // "Ce X est une traduction du X numéro :"
- $infos['texte_definir_comme_traduction_objet'] = $infos['type'] . ':' . 'texte_definir_comme_traduction_' . $infos['type'];
- }
+ $infos['texte_retour'] ??= 'icone_retour';
+ $infos['texte_modifier'] ??= $infos['type'] . ':icone_modifier_' . $infos['type'];
+ $infos['texte_creer'] ??= $infos['type'] . ':icone_creer_' . $infos['type'];
+ $infos['texte_creer_associer'] ??= $infos['type'] . ':texte_creer_associer_' . $infos['type'];
+ $infos['texte_ajouter'] ??= $infos['type'] . ':texte_ajouter_' . $infos['type'];
+ $infos['texte_objets'] ??= $infos['type'] . ':titre_' . $infos['table_objet'];
+ $infos['texte_objet'] ??= $infos['type'] . ':titre_' . $infos['type'];
+ $infos['texte_logo_objet'] ??= $infos['type'] . ':titre_logo_' . $infos['type'];
+ $infos['texte_langue_objet'] ??= $infos['type'] . ':titre_langue_' . $infos['type'];
+ $infos['texte_definir_comme_traduction_objet'] ??= $infos['type'] . ':texte_definir_comme_traduction_' . $infos['type'];
// objet:info_aucun_objet
- if (!isset($infos['info_aucun_objet'])) {
- $infos['info_aucun_objet'] = $infos['type'] . ':' . 'info_aucun_' . $infos['type'];
- }
+ $infos['info_aucun_objet'] ??= $infos['type'] . ':info_aucun_' . $infos['type'];
// objet:info_1_objet
- if (!isset($infos['info_1_objet'])) {
- $infos['info_1_objet'] = $infos['type'] . ':' . 'info_1_' . $infos['type'];
- }
+ $infos['info_1_objet'] ??= $infos['type'] . ':info_1_' . $infos['type'];
// objet:info_nb_objets
- if (!isset($infos['info_nb_objets'])) {
- $infos['info_nb_objets'] = $infos['type'] . ':' . 'info_nb_' . $infos['table_objet'];
- }
+ $infos['info_nb_objets'] ??= $infos['type'] . ':info_nb_' . $infos['table_objet'];
- if (!isset($infos['champs_editables'])) {
- $infos['champs_editables'] = [];
- }
- if (!isset($infos['champs_versionnes'])) {
- $infos['champs_versionnes'] = [];
- }
- if (!isset($infos['rechercher_champs'])) {
- $infos['rechercher_champs'] = [];
- }
- if (!isset($infos['rechercher_jointures'])) {
- $infos['rechercher_jointures'] = [];
- }
+ $infos['champs_editables'] ??= [];
+ $infos['champs_versionnes'] ??= [];
+ $infos['rechercher_champs'] ??= [];
+ $infos['rechercher_jointures'] ??= [];
- if (!isset($infos['modeles'])) {
- $infos['modeles'] = [$infos['type']];
- }
+ $infos['modeles'] ??= [$infos['type']];
return $infos;
}
@@ -796,13 +727,11 @@
* statut
* tables_jointures
*
- * @param $table_sql
- * @param $infos
* @return array
*/
function renseigner_table_objet_interfaces($table_sql, &$infos) {
if (!isset($infos['titre'])) {
- if (isset($infos['table_objet']) and isset($GLOBALS['table_titre'][$infos['table_objet']])) {
+ if (isset($infos['table_objet']) && isset($GLOBALS['table_titre'][$infos['table_objet']])) {
$infos['titre'] = $GLOBALS['table_titre'][$infos['table_objet']];
} else {
$infos['titre'] = ((isset($infos['field']['titre'])) ? 'titre,' : "'' as titre,");
@@ -810,7 +739,7 @@
}
}
if (!isset($infos['date'])) {
- if (isset($infos['table_objet']) and isset($GLOBALS['table_date'][$infos['table_objet']])) {
+ if (isset($infos['table_objet']) && isset($GLOBALS['table_date'][$infos['table_objet']])) {
$infos['date'] = $GLOBALS['table_date'][$infos['table_objet']];
} else {
$infos['date'] = ((isset($infos['field']['date'])) ? 'date' : '');
@@ -833,10 +762,10 @@
* @api
* @return array
* Liste et descriptions des tables principales
- **/
+ */
function lister_tables_principales() {
static $done = false;
- if (!$done or !(is_countable($GLOBALS['tables_principales']) ? count($GLOBALS['tables_principales']) : 0)) {
+ if (!$done || !(is_countable($GLOBALS['tables_principales']) ? count($GLOBALS['tables_principales']) : 0)) {
lister_tables_objets_sql();
$done = true;
}
@@ -850,10 +779,10 @@
* @api
* @return array
* Liste et descriptions des tables auxiliaires
- **/
+ */
function lister_tables_auxiliaires() {
static $done = false;
- if (!$done or !(is_countable($GLOBALS['tables_auxiliaires']) ? count($GLOBALS['tables_auxiliaires']) : 0)) {
+ if (!$done || !(is_countable($GLOBALS['tables_auxiliaires']) ? count($GLOBALS['tables_auxiliaires']) : 0)) {
lister_tables_objets_sql();
$done = true;
}
@@ -871,7 +800,7 @@
static $md5 = null;
if (
!$surnoms
- or $md5 != lister_tables_objets_sql('::md5')
+ || $md5 != lister_tables_objets_sql('::md5')
) {
// passer dans un pipeline qui permet aux plugins de declarer leurs exceptions
// pour compatibilite, car il faut dorenavent utiliser
@@ -892,10 +821,10 @@
// et preg_replace(',^spip_|^id_|s$,',table)=>table
if ($infos['table_objet']) { // securite, si la fonction est appelee trop tot, c'est vide
// optimisations pour table_objet
- //$surnoms[$infos['type']] = $infos['table_objet'];
+ // $surnoms[$infos['type']] = $infos['table_objet'];
$surnoms[preg_replace(',^spip_|^id_|s$,', '', $infos['table_objet'])] = $infos['table_objet'];
$surnoms[preg_replace(',^spip_|^id_|s$,', '', $infos['type'])] = $infos['table_objet'];
- if (is_array($infos['table_objet_surnoms']) and count($infos['table_objet_surnoms'])) {
+ if (is_array($infos['table_objet_surnoms']) && count($infos['table_objet_surnoms'])) {
foreach ($infos['table_objet_surnoms'] as $surnom) {
$surnoms[$surnom] = $infos['table_objet'];
}
@@ -918,7 +847,7 @@
static $md5 = null;
if (
!$surnoms
- or $md5 != lister_tables_objets_sql('::md5')
+ || $md5 != lister_tables_objets_sql('::md5')
) {
// passer dans un pipeline qui permet aux plugins de declarer leurs exceptions
// pour compatibilite, car il faut dorenavent utiliser
@@ -928,11 +857,11 @@
foreach ($infos_tables as $t => $infos) {
if ($infos['type']) { // securite, si la fonction est appelee trop tot, c'est vide
// optimisations pour objet_type
- //$surnoms[$infos['type']] = $infos['type'];
+ // $surnoms[$infos['type']] = $infos['type'];
$surnoms[preg_replace(',^spip_|^id_|s$,', '', $infos['table_objet'])] = $infos['type'];
$surnoms[preg_replace(',^spip_|^id_|s$,', '', $infos['type'])] = $infos['type'];
// surnoms declares
- if (is_array($infos['type_surnoms']) and count($infos['type_surnoms'])) {
+ if (is_array($infos['type_surnoms']) && count($infos['type_surnoms'])) {
foreach ($infos['type_surnoms'] as $surnom) {
$surnoms[$surnom] = $infos['type'];
}
@@ -954,7 +883,7 @@
* Nom du fichier de connexion à la base de données
* @return array
* Couples (nom de la table SQL => même nom, sans 'spip_' devant)
- **/
+ */
function lister_tables_spip($serveur = '') {
static $tables = [];
if (!isset($tables[$serveur])) {
@@ -974,7 +903,6 @@
return $tables[$serveur];
}
-
/**
* Retourne la liste des tables SQL, Spip ou autres
*
@@ -984,7 +912,7 @@
* Nom du fichier de connexion à la base de données
* @return array
* Couples (nom de la table SQL => même nom)
- **/
+ */
function lister_toutes_tables($serveur) {
static $tables = [];
if (!isset($tables[$serveur])) {
@@ -1016,7 +944,7 @@
* - false: Pas de recherche en bdd
* @return string
* Nom de l'objet
- **/
+ */
function table_objet(string $type, $serveur = ''): string {
if ($type) {
@@ -1037,19 +965,20 @@
$trouver_table = charger_fonction('trouver_table', 'base');
$typetrim = rtrim($type, 's') . 's';
if (
- (isset($t[$typetrim]) or in_array($typetrim, $t))
- and ($desc = $trouver_table(rtrim($type, 's') . 's', $serveur))
+ (isset($t[$typetrim]) || in_array($typetrim, $t))
+ && ($desc = $trouver_table(rtrim($type, 's') . 's', $serveur))
) {
return $desc['id_table'];
- } elseif (
- (isset($t[$type]) or in_array($type, $t))
- and ($desc = $trouver_table($type, $serveur))
+ }
+ if (
+ (isset($t[$type]) || in_array($type, $t))
+ && ($desc = $trouver_table($type, $serveur))
) {
return $desc['id_table'];
}
spip_log('table_objet(' . $type . ') calculee sans verification');
- #spip_log(debug_backtrace(),'db');
+ # spip_log(debug_backtrace(),'db');
}
return rtrim($type, 's') . 's'; # cas historique ne devant plus servir, sauf si $serveur=false
@@ -1071,7 +1000,7 @@
* - false: Pas de recherche en bdd
* @return string
* Nom de la table SQL
- **/
+ */
function table_objet_sql(string $type, $serveur = ''): string {
$nom = table_objet($type, $serveur);
if (!strlen($nom)) {
@@ -1091,7 +1020,7 @@
} elseif ($serveur !== false) {
$serveur = (string) $serveur;
$t = lister_tables_spip($serveur);
- if (isset($t[$nom]) or in_array($nom, $t)) {
+ if (isset($t[$nom]) || in_array($nom, $t)) {
$trouver_table = charger_fonction('trouver_table', 'base');
if ($desc = $trouver_table($nom, $serveur)) {
return $desc['table_sql'];
@@ -1117,7 +1046,7 @@
* Nom du connecteur
* @return string|null
* Nom de la clé primaire
- **/
+ */
function id_table_objet(string $type, string $serveur = ''): ?string {
static $trouver_table = null;
$type = objet_type($type, $serveur);
@@ -1131,14 +1060,13 @@
$ts = lister_tables_spip($serveur);
if (
- in_array($t, $ts)
- or in_array($t, lister_toutes_tables($serveur))
+ in_array($t, $ts) || in_array($t, lister_toutes_tables($serveur))
) {
$desc = $trouver_table($t, $serveur);
if (isset($desc['key']['PRIMARY KEY'])) {
return $desc['key']['PRIMARY KEY'];
}
- if (!$desc or isset($desc['field']["id_$type"])) {
+ if (!$desc || isset($desc['field']["id_$type"])) {
return "id_$type";
}
// sinon renvoyer le premier champ de la table...
@@ -1165,7 +1093,7 @@
* - false: Pas de recherche en bdd
* @return string|null
* Type de l'objet
- **/
+ */
function objet_type(string $table_objet, $serveur = ''): ?string {
if (!$table_objet) {
return null;
@@ -1188,8 +1116,8 @@
// oui si table_objet ressemblait deja a un type
if (
$type == $table_objet
- or (table_objet($type, $serveur) == $table_objet)
- or (table_objet_sql($type, $serveur) == $table_objet)
+ || table_objet($type, $serveur) == $table_objet
+ || table_objet_sql($type, $serveur) == $table_objet
) {
return $type;
}
@@ -1212,11 +1140,11 @@
if (in_array($table_objet, $ts)) {
$desc = $trouver_table($table_objet);
}
- if (!$desc and in_array($table_objet = table_objet($type, $serveur), $ts)) {
+ if (!$desc && in_array($table_objet = table_objet($type, $serveur), $ts)) {
$desc = $trouver_table($table_objet, $serveur);
}
// si le type est declare : bingo !
- if ($desc and isset($desc['type'])) {
+ if ($desc && isset($desc['type'])) {
return $desc['type'];
}
@@ -1248,9 +1176,9 @@
$id_table_objet = id_table_objet($objet, $serveur);
$trouver_table = charger_fonction('trouver_table', 'base');
if (
- $desc = $trouver_table($table_objet, $serveur)
- and isset($desc['statut'])
- and $desc['statut']
+ ($desc = $trouver_table($table_objet, $serveur))
+ && isset($desc['statut'])
+ && $desc['statut']
) {
$boucle = new Boucle();
$boucle->show = $desc;
@@ -1295,7 +1223,6 @@
return true;
}
-
/**
* Cherche les contenus parent d'un contenu précis.
*
@@ -1369,7 +1296,7 @@
if (isset($parent_methode['condition'])) {
$where = [
"$cle_objet = $id_objet",
- $parent_methode['condition']
+ $parent_methode['condition'],
];
if (!sql_countsel($table_objet, $where)) {
$condition_objet_invalide = true;
@@ -1398,29 +1325,28 @@
}
// On lance la requête de récupération du parent
- $is_table_lien = (strpos($table, '_liens') !== false and substr($table, -6) === '_liens');
+ $is_table_lien = (str_contains($table, '_liens') && str_ends_with($table, '_liens'));
if (
!$condition_objet_invalide
- and $where
- and ($lignes = sql_allfetsel($is_table_lien ? '*' : $select, $table, $where))
+ && $where
+ && ($lignes = sql_allfetsel($is_table_lien ? '*' : $select, $table, $where))
) {
foreach ($lignes as $ligne) {
// Si le type est fixe
if (isset($parent_methode['type'])) {
$parent = [
- 'objet' => $parent_methode['type'],
- 'id_objet' => intval($ligne[$parent_methode['champ']]),
- 'champ' => $parent_methode['champ'],
- 'table' => $table,
+ 'objet' => $parent_methode['type'],
+ 'id_objet' => intval($ligne[$parent_methode['champ']]),
+ 'champ' => $parent_methode['champ'],
+ 'table' => $table,
];
- }
- elseif (isset($parent_methode['champ_type'])) {
+ } elseif (isset($parent_methode['champ_type'])) {
$parent = [
- 'objet' => $ligne[$parent_methode['champ_type']],
- 'id_objet' => intval($ligne[$parent_methode['champ']]),
- 'champ' => $parent_methode['champ'],
+ 'objet' => $ligne[$parent_methode['champ_type']],
+ 'id_objet' => intval($ligne[$parent_methode['champ']]),
+ 'champ' => $parent_methode['champ'],
'champ_type' => $parent_methode['champ_type'],
- 'table' => $table,
+ 'table' => $table,
];
}
if ($is_table_lien) {
@@ -1451,8 +1377,6 @@
* Fonction helper qui permet de récupérer une liste simplifiée des parents, regroupés par objet
* [ 'objet1' => [ids...], 'objet2' => [ids...] ]
*
- * @param $objet
- * @param $id_objet
* @return array
*/
function objet_lister_parents_par_type($objet, $id_objet) {
@@ -1460,16 +1384,13 @@
$parents_par_type = [];
foreach ($parents as $parent) {
- if (!isset($parents_par_type[$parent['objet']])) {
- $parents_par_type[$parent['objet']] = [];
- }
+ $parents_par_type[$parent['objet']] ??= [];
$parents_par_type[$parent['objet']][] = $parent['id_objet'];
}
return $parents_par_type;
}
-
/**
* Cherche tous les contenus enfants d'un contenu précis
*
@@ -1491,9 +1412,7 @@
* le tableau contient en plus en entrée 'lien' qui contient les informations complètes du lien (rang, role...)
*
* @api
- * @param $objet
* Type de l'objet dont on cherche les enfants
- * @param $id_objet
* Identifiant de l'objet dont on cherche les enfants
* @return array
* Retourne un tableau de tableaux, avec comme clés les types des objets, et dans chacun un tableau des identifiants trouvés
@@ -1541,12 +1460,12 @@
}
// On lance la requête
- $is_table_lien = (strpos($table_enfant, '_liens') !== false and substr($table_enfant, -6) === '_liens');
+ $is_table_lien = (str_contains($table_enfant, '_liens') && str_ends_with($table_enfant, '_liens'));
if ($rows = sql_allfetsel($is_table_lien ? '*' : $cle_objet_enfant, $table_enfant, $where)) {
$enfant = [
'objet' => $objet_enfant,
'id_objet' => 0,
- 'table' => $table_enfant
+ 'table' => $table_enfant,
];
if (isset($_methode_parent['champ'])) {
$enfant['champ'] = $_methode_parent['champ'];
@@ -1584,8 +1503,6 @@
* Fonction helper qui permet de récupérer une liste simplifiée des enfants, regroupés par objet
* [ 'objet1' => [ids...], 'objet2' => [ids...] ]
*
- * @param $objet
- * @param $id_objet
* @return array
*/
function objet_lister_enfants_par_type($objet, $id_objet) {
@@ -1593,9 +1510,7 @@
$enfants_par_type = [];
foreach ($enfants as $enfant) {
- if (!isset($enfants_par_type[$enfant['objet']])) {
- $enfants_par_type[$enfant['objet']] = [];
- }
+ $enfants_par_type[$enfant['objet']] ??= [];
$enfants_par_type[$enfant['objet']][] = $enfant['id_objet'];
}
@@ -1605,7 +1520,6 @@
/**
* Donne les informations de parenté directe d'un type d'objet si on en trouve
*
- * @param $objet
* Type de l'objet dont on cherche les informations de parent
* @return array|false
* Retourne un tableau de tableau contenant les informations de type et de champ pour trouver le parent ou false sinon
@@ -1620,7 +1534,7 @@
// Si on trouve bien la description de cet objet
if ($infos = lister_tables_objets_sql($table)) {
- if (isset($infos['parent']) and is_array($infos['parent'])) {
+ if (isset($infos['parent']) && is_array($infos['parent'])) {
// S'il y a une description explicite de parent, c'est prioritaire
// -- on traite les cas où il y a une ou plusieurs description mais on renvoie toujours un tableau
// de description
@@ -1645,7 +1559,6 @@
/**
* Donne les informations des enfants directs d'un type d'objet si on en trouve
*
- * @param $objet
* Type de l'objet dont on cherche les informations des enfants
* @return array
* Retourne un tableau de tableaux contenant chacun les informations d'un type d'enfant
@@ -1667,13 +1580,13 @@
// On parcourt les différents cas possible, si certains peuvent concerner l'objet demandé
foreach ($parent_methodes as $parent_methode) {
// Si la méthode qu'on teste n'exclut pas le parent demandé
- if (!isset($parent_methode['exclus']) or !in_array($objet, $parent_methode['exclus'])) {
+ if (!isset($parent_methode['exclus']) || !in_array($objet, $parent_methode['exclus'])) {
// Si le type du parent est fixe et directement l'objet demandé
- if (isset($parent_methode['type']) and isset($parent_methode['champ']) and $parent_methode['type'] == $objet) {
+ if (isset($parent_methode['type']) && isset($parent_methode['champ']) && $parent_methode['type'] == $objet) {
$enfants[$objet][$objet_enfant] = $parent_methode;
}
// Si le type est variable, alors l'objet demandé peut forcément être parent
- elseif (isset($parent_methode['champ_type']) and isset($parent_methode['champ'])) {
+ elseif (isset($parent_methode['champ_type']) && isset($parent_methode['champ'])) {
$enfants[$objet][$objet_enfant] = $parent_methode;
}
}
diff -Nru spip-4.4.23+dfsg/ecrire/base/repair.php spip-4.4.28+dfsg/ecrire/base/repair.php
--- spip-4.4.23+dfsg/ecrire/base/repair.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/base/repair.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,22 +1,19 @@
' . spip_htmlentities($msg) . "\n";
diff -Nru spip-4.4.23+dfsg/ecrire/base/serial.php spip-4.4.28+dfsg/ecrire/base/serial.php
--- spip-4.4.23+dfsg/ecrire/base/serial.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/base/serial.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,13 +1,13 @@
true,
];
@@ -118,7 +114,7 @@
// base sous SPIP: gerer les abreviations explicites des noms de table
if ($connexion['spip_connect_version']) {
- if ($table_spip and isset($GLOBALS['table_des_tables'][$nom])) {
+ if ($table_spip && isset($GLOBALS['table_des_tables'][$nom])) {
$nom = $GLOBALS['table_des_tables'][$nom];
$nom_sql = 'spip_' . $nom;
}
@@ -130,29 +126,30 @@
// dans le fichier cache
if (
!isset($connexion['tables'][$nom_sql])
- and defined('_VAR_MODE') and _VAR_MODE !== 'recalcul'
- and (!isset($connexion['tables']) or !$connexion['tables'])
+ && defined('_VAR_MODE')
+ && _VAR_MODE !== 'recalcul'
+ && (!isset($connexion['tables']) || !$connexion['tables'])
) {
if (
lire_fichier($nom_cache_desc_sql[$serveur][$objets_sql], $desc_cache)
- and $desc_cache = unserialize($desc_cache)
+ && ($desc_cache = unserialize($desc_cache))
) {
$connexion['tables'] = $desc_cache;
}
}
- if ($table_spip and !isset($connexion['tables'][$nom_sql])) {
+ if ($table_spip && !isset($connexion['tables'][$nom_sql])) {
if (isset($GLOBALS['tables_principales'][$nom_sql])) {
$fdesc = $GLOBALS['tables_principales'][$nom_sql];
}
// meme si pas d'abreviation declaree, trouver la table spip_$nom
// si c'est une table principale,
// puisqu'on le fait aussi pour les tables auxiliaires
- elseif ($nom_sql == $nom and isset($GLOBALS['tables_principales']['spip_' . $nom])) {
+ elseif ($nom_sql == $nom && isset($GLOBALS['tables_principales']['spip_' . $nom])) {
$nom_sql = 'spip_' . $nom;
$fdesc = &$GLOBALS['tables_principales'][$nom_sql];
} elseif (
isset($GLOBALS['tables_auxiliaires'][$n = $nom])
- or isset($GLOBALS['tables_auxiliaires'][$n = 'spip_' . $nom])
+ || isset($GLOBALS['tables_auxiliaires'][$n = 'spip_' . $nom])
) {
$nom_sql = $n;
$fdesc = &$GLOBALS['tables_auxiliaires'][$n];
@@ -163,8 +160,8 @@
$exists = sql_table_exists($nom_sql, $table_spip, $serveur);
if (
!$exists
- or !$desc = sql_showtable($nom_sql, $table_spip, $serveur)
- or !$desc['field']
+ || !($desc = sql_showtable($nom_sql, $table_spip, $serveur))
+ || !$desc['field']
) {
if (!$fdesc) {
$log_level = $options['log_missing'] ? _LOG_INFO_IMPORTANTE : _LOG_DEBUG;
@@ -197,9 +194,7 @@
if (!isset($desc['key']) && !empty($fdesc['key'])) {
$desc['key'] = $fdesc['key'];
}
- if (! isset($desc['key'])) {
- $desc['key'] = [];
- }
+ $desc['key'] ??= [];
// si tables_objets_sql est bien fini d'init, on peut cacher
$connexion['tables'][$nom_sql] = $desc;
diff -Nru spip-4.4.23+dfsg/ecrire/base/upgrade.php spip-4.4.28+dfsg/ecrire/base/upgrade.php
--- spip-4.4.23+dfsg/ecrire/base/upgrade.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/base/upgrade.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,22 +1,19 @@
'version_installee',
'valeur' => $GLOBALS['spip_version_base'],
- 'impt' => 'non'
+ 'impt' => 'non',
]
);
}
@@ -211,7 +207,6 @@
* ```
* @param string $table_meta
* Nom de la table meta (sans le prefixe spip_) dans laquelle trouver la meta $nom_meta_base_version
- * @return void
*/
function maj_plugin($nom_meta_base_version, $version_cible, $maj, $table_meta = 'meta') {
@@ -275,7 +270,6 @@
* @param string $meta
* @param string $table
* @param string $redirect
- * @return void
*/
function relance_maj($meta, $table, $redirect = '') {
include_spip('inc/headers');
@@ -298,7 +292,6 @@
* @param string $installee
* @param string $meta
* @param string $table
- * @return void
*/
function maj_debut_page($installee, $meta, $table) {
static $done = false;
@@ -329,7 +322,6 @@
$done = true;
}
-
/**
* Gestion des mises à jour de SPIP et des plugins
*
@@ -393,9 +385,7 @@
foreach ($maj as $v => $operations) {
// si une maj pour cette version
if (
- $v == 'init' or
- (spip_version_compare($v, $installee, '>')
- and spip_version_compare($v, $cible, '<='))
+ $v == 'init' || spip_version_compare($v, $installee, '>') && spip_version_compare($v, $cible, '<=')
) {
if ($debut_page) {
maj_debut_page($v, $meta, $table);
@@ -413,7 +403,7 @@
if ($meta) {
ecrire_meta($meta, $installee = $v, 'oui', $table);
}
- echo (_IS_CLI ? "\n" : ' ');
+ echo _IS_CLI ? "\n" : ' ';
}
if (time() >= _TIME_OUT) {
relance_maj($meta, $table, $redirect);
@@ -459,8 +449,7 @@
if ($i >= $etape) {
$msg = "maj $table $meta2 etape $i";
if (
- is_array($r)
- and function_exists($f = array_shift($r))
+ is_array($r) && function_exists($f = array_shift($r))
) {
// note: $r (arguments de la fonction $f) peut avoir des données tabulaires
spip_log("$msg: $f " . @join(',', $r), 'maj.' . _LOG_INFO_IMPORTANTE);
@@ -470,10 +459,10 @@
// mais pour les fonctions complexes,
// il faut les rejouer jusqu'a achevement.
// C'est a elle d'assurer qu'elles progressent a chaque rappel
- if (strncmp($f, 'sql_', 4) == 0) {
+ if (str_starts_with($f, 'sql_')) {
ecrire_meta($meta2, $i + 1, 'non', $table);
}
- echo (_IS_CLI ? '.' : " . ");
+ echo _IS_CLI ? '.' : " . ";
$f(...$r);
// si temps imparti depasse, on relance sans ecrire en meta
// car on est peut etre sorti sur timeout si c'est une fonction longue
@@ -503,7 +492,7 @@
* Vérifie qu'il est possible d'ajouter une colonne à une table SQL
*
* @return bool True si possible.
- **/
+ */
function upgrade_test() {
sql_drop_table('spip_test', true);
sql_create('spip_test', ['a' => 'int']);
diff -Nru spip-4.4.23+dfsg/ecrire/charsets/cp1250.php spip-4.4.28+dfsg/ecrire/charsets/cp1250.php
--- spip-4.4.23+dfsg/ecrire/charsets/cp1250.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/charsets/cp1250.php 2026-10-07 13:48:22.000000000 +0000
@@ -4,11 +4,8 @@
* Déclaration des correspondances entre charsets cp1250 (europe centrale et de l'est) et unicode
*
* @author Mathieu Lutfy
- * @link http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1250.TXT
- *
- * @package SPIP\Core\Charsets
- **/
-
+ * @see http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1250.TXT
+ */
$GLOBALS['CHARSET']['cp1250'] = [
0x80 => 0x20AC,
0x82 => 0x201A,
@@ -132,5 +129,5 @@
0xFC => 0x00FC,
0xFD => 0x00FD,
0xFE => 0x0163,
- 0xFF => 0x02D9
+ 0xFF => 0x02D9,
];
diff -Nru spip-4.4.23+dfsg/ecrire/charsets/cp1251.php spip-4.4.28+dfsg/ecrire/charsets/cp1251.php
--- spip-4.4.23+dfsg/ecrire/charsets/cp1251.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/charsets/cp1251.php 2026-10-07 13:48:22.000000000 +0000
@@ -3,11 +3,8 @@
/**
* Déclaration des correspondances entre charsets cp1251 (cyrillic) et unicode
*
- * @link http://czyborra.com/charsets/cyrillic.html
- *
- * @package SPIP\Core\Charsets
- **/
-
+ * @see http://czyborra.com/charsets/cyrillic.html
+ */
$GLOBALS['CHARSET']['cp1251'] = [
0x80 => 0x0402,
0x81 => 0x0403,
@@ -135,5 +132,5 @@
0xFC => 0x044C,
0xFD => 0x044D,
0xFE => 0x044E,
- 0xFF => 0x044F
+ 0xFF => 0x044F,
];
diff -Nru spip-4.4.23+dfsg/ecrire/charsets/cp1256.php spip-4.4.28+dfsg/ecrire/charsets/cp1256.php
--- spip-4.4.23+dfsg/ecrire/charsets/cp1256.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/charsets/cp1256.php 2026-10-07 13:48:22.000000000 +0000
@@ -4,11 +4,8 @@
* Déclaration des correspondances entre charsets cp1256 (arabic) et unicode
*
* @author george kandalaft
- * @link http://www.microsoft.com/typography/unicode/1256.htm
- *
- * @package SPIP\Core\Charsets
- **/
-
+ * @see http://www.microsoft.com/typography/unicode/1256.htm
+ */
$GLOBALS['CHARSET']['cp1256'] = [
0x80 => 0x20AC,
0x81 => 0x067E,
@@ -137,5 +134,5 @@
0xFC => 0x00FC,
0xFD => 0x200E,
0xFE => 0x200F,
- 0xFF => 0x06D2
+ 0xFF => 0x06D2,
];
diff -Nru spip-4.4.23+dfsg/ecrire/charsets/html.php spip-4.4.28+dfsg/ecrire/charsets/html.php
--- spip-4.4.23+dfsg/ecrire/charsets/html.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/charsets/html.php 2026-10-07 13:48:22.000000000 +0000
@@ -3,10 +3,7 @@
/**
* Déclaration des entités HTML (à completer éventuellement) et leur correspondances
* en écriture unicode
- *
- * @package SPIP\Core\Charsets
- **/
-
+ */
$GLOBALS['CHARSET']['html'] = [
'ldquo' => '“',
'rdquo' => '”',
@@ -121,10 +118,8 @@
'euro' => '€',
'OElig' => 'Œ',
'oelig' => 'œ',
- 'iexcl' => '¡'
-
+ 'iexcl' => '¡',
];
-## caracteres tres speciaux a ne pas convertir
-#'amp' => '&', 'quot' => '"', 'lt' => '<', 'gt' => '>',
-;
+# # caracteres tres speciaux a ne pas convertir
+# 'amp' => '&', 'quot' => '"', 'lt' => '<', 'gt' => '>',
diff -Nru spip-4.4.23+dfsg/ecrire/charsets/iso-8859-1.php spip-4.4.28+dfsg/ecrire/charsets/iso-8859-1.php
--- spip-4.4.23+dfsg/ecrire/charsets/iso-8859-1.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/charsets/iso-8859-1.php 2026-10-07 13:48:22.000000000 +0000
@@ -2,15 +2,11 @@
/**
* Déclaration des correspondances entre charsets iso-8859-1 et unicode
- *
- * @package SPIP\Core\Charsets
- **/
-
+ */
$GLOBALS['CHARSET']['iso-8859-1'] = [
-
-// plage invalide en iso-8859-1 mais souvent utilisee quand meme (windows)
-// cf. http://openweb.eu.org/articles/caracteres_illegaux/
-// voir aussi copie de ces valeurs dans inc/charsets.php
+ // plage invalide en iso-8859-1 mais souvent utilisee quand meme (windows)
+ // cf. http://openweb.eu.org/articles/caracteres_illegaux/
+ // voir aussi copie de ces valeurs dans inc/charsets.php
128 => 8364,
129 => 129 /* ?? */,
130 => 8218,
@@ -139,6 +135,5 @@
252 => 252,
253 => 253,
254 => 254,
- 255 => 255
-
+ 255 => 255,
];
diff -Nru spip-4.4.23+dfsg/ecrire/charsets/iso-8859-15.php spip-4.4.28+dfsg/ecrire/charsets/iso-8859-15.php
--- spip-4.4.23+dfsg/ecrire/charsets/iso-8859-15.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/charsets/iso-8859-15.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,22 +1,19 @@
- *
- * @package SPIP\Core\Charsets
- **/
-
+ */
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
diff -Nru spip-4.4.23+dfsg/ecrire/charsets/iso-8859-6.php spip-4.4.28+dfsg/ecrire/charsets/iso-8859-6.php
--- spip-4.4.23+dfsg/ecrire/charsets/iso-8859-6.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/charsets/iso-8859-6.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,22 +1,19 @@
0x064F,
0xF0 => 0x0650,
0xF1 => 0x0651,
- 0xF2 => 0x0652
+ 0xF2 => 0x0652,
];
foreach ($mod as $num => $val) {
diff -Nru spip-4.4.23+dfsg/ecrire/charsets/iso-8859-9.php spip-4.4.28+dfsg/ecrire/charsets/iso-8859-9.php
--- spip-4.4.23+dfsg/ecrire/charsets/iso-8859-9.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/charsets/iso-8859-9.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,22 +1,19 @@
- *
- * @package SPIP\Core\Charsets
- **/
-
+ */
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
@@ -24,11 +21,11 @@
load_charset('iso-8859-1');
$trans = $GLOBALS['CHARSET']['iso-8859-1'];
-$trans[240] = 287; //gbreve
-$trans[208] = 286; //Gbreve
-$trans[221] = 304; //Idot
-$trans[253] = 305; //inodot
-$trans[254] = 351; //scedil
-$trans[222] = 350; //Scedil
+$trans[240] = 287; // gbreve
+$trans[208] = 286; // Gbreve
+$trans[221] = 304; // Idot
+$trans[253] = 305; // inodot
+$trans[254] = 351; // scedil
+$trans[222] = 350; // Scedil
$GLOBALS['CHARSET']['iso-8859-9'] = $trans;
diff -Nru spip-4.4.23+dfsg/ecrire/charsets/mathml.php spip-4.4.28+dfsg/ecrire/charsets/mathml.php
--- spip-4.4.23+dfsg/ecrire/charsets/mathml.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/charsets/mathml.php 2026-10-07 13:48:22.000000000 +0000
@@ -2,12 +2,8 @@
/**
* Déclaration des entités MathML et leur correspondances en écriture unicode
- *
- * @package SPIP\Core\Charsets
- **/
-
+ */
$GLOBALS['CHARSET']['mathml'] = [
-
'ac' => '',
'acd' => '',
'acE' => '&E#290;',
@@ -1690,6 +1686,5 @@
'zigrarr' => '',
'Zopf' => '',
'Zscr' => '',
- 'zscr' => ''
-
+ 'zscr' => '',
];
diff -Nru spip-4.4.23+dfsg/ecrire/charsets/translit.php spip-4.4.28+dfsg/ecrire/charsets/translit.php
--- spip-4.4.23+dfsg/ecrire/charsets/translit.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/charsets/translit.php 2026-10-07 13:48:22.000000000 +0000
@@ -3,12 +3,9 @@
/**
* Déclaration pour la translitteration simple des correspondances entre
* caractères unicodes spécifiques et caractères simples la plage ASCII
- *
- * @package SPIP\Core\Charsets
- **/
-
+ */
$GLOBALS['CHARSET']['translit'] = [
-// latin [fausse plage]
+ // latin [fausse plage]
128 => 'EUR',
131 => 'f',
140 => 'OE',
@@ -18,7 +15,7 @@
156 => 'oe',
159 => 'Y',
-// latin [legal]
+ // latin [legal]
160 => ' ',
161 => '!',
162 => 'c',
@@ -97,13 +94,13 @@
252 => 'u',
255 => 'y',
-// turc
+ // turc
286 => 'G',
287 => 'g',
304 => 'I',
305 => 'i',
-// esperanto
+ // esperanto
264 => 'Cx',
265 => 'cx',
284 => 'Gx',
@@ -117,8 +114,7 @@
364 => 'Ux',
365 => 'ux',
-
-// latin2 [Czech]
+ // latin2 [Czech]
283 => 'e',
353 => 's',
269 => 'c',
@@ -140,13 +136,13 @@
270 => 'D',
467 => 'O',
-// francais
+ // francais
338 => 'OE',
339 => 'oe',
376 => 'Y',
402 => 'f',
-//polskie
+ // polskie
260 => 'A',
261 => 'a',
262 => 'C',
@@ -164,17 +160,17 @@
379 => 'Z',
380 => 'z',
-//roumain
+ // roumain
258 => 'A',
259 => 'a',
354 => 'T',
355 => 't',
-//turc & roumain
+ // turc & roumain
350 => 'S',
351 => 's',
-// cyrillique
+ // cyrillique
1026 => 'D%',
1027 => 'G%',
8218 => '\'',
@@ -288,7 +284,7 @@
1102 => 'yu',
1103 => 'ya',
-// vietnamien en translitteration de base
+ // vietnamien en translitteration de base
7843 => 'a',
7841 => 'a',
7845 => 'a',
@@ -387,6 +383,5 @@
7926 => 'Y',
7928 => 'Y',
7924 => 'Y',
- 273 => 'd'
-
+ 273 => 'd',
];
diff -Nru spip-4.4.23+dfsg/ecrire/charsets/translitcomplexe.php spip-4.4.28+dfsg/ecrire/charsets/translitcomplexe.php
--- spip-4.4.23+dfsg/ecrire/charsets/translitcomplexe.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/charsets/translitcomplexe.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,23 +1,20 @@
"a'",
224 => 'a`',
7843 => 'a?',
@@ -162,13 +159,13 @@
273 => 'd-',
208 => 'D-',
-// allemand
+ // allemand
228 => 'ae',
246 => 'oe',
252 => 'ue',
196 => 'Ae',
214 => 'Oe',
- 220 => 'Ue'
+ 220 => 'Ue',
];
foreach ($translit_c as $u => $t) {
diff -Nru spip-4.4.23+dfsg/ecrire/composer.json spip-4.4.28+dfsg/ecrire/composer.json
--- spip-4.4.23+dfsg/ecrire/composer.json 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/composer.json 2026-10-07 13:48:22.000000000 +0000
@@ -17,10 +17,11 @@
"symfony/polyfill-php81": "^1.31",
"symfony/polyfill-php82": "^1.31",
"symfony/polyfill-php83": "^1.31",
- "symfony/polyfill-php84": "^1.31"
+ "symfony/polyfill-php84": "^1.31",
+ "symfony/polyfill-php85": "^1.31"
},
"require-dev": {
- "symplify/easy-coding-standard": "^12.3"
+ "spip-league/qa-tools": "^1.0"
},
"repositories": {
"spip": {
@@ -40,5 +41,13 @@
"platform": {
"php": "7.4.33"
}
+ },
+ "scripts": {
+ "analyse": "phpstan --memory-limit=1G",
+ "baseline": "phpstan --memory-limit=1G --generate-baseline --allow-empty-baseline",
+ "check-cs": "ecs check --ansi",
+ "fix-cs": "ecs check --fix --ansi",
+ "rector": "rector process --ansi",
+ "rector-dry-run": "rector process --dry-run --ansi"
}
}
diff -Nru spip-4.4.23+dfsg/ecrire/exec/403.php spip-4.4.28+dfsg/ecrire/exec/403.php
--- spip-4.4.23+dfsg/ecrire/exec/403.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/exec/403.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,20 +1,17 @@
['exec' => '404', 'exec_erreur' => $exec], 'data' => '']);
+ echo pipeline('affiche_gauche', [
+ 'args' => [
+ 'exec' => '404',
+ 'exec_erreur' => $exec,
+ ],
+ 'data' => '',
+ ]);
echo creer_colonne_droite();
- echo pipeline('affiche_droite', ['args' => ['exec' => '404', 'exec_erreur' => $exec], 'data' => '']);
+ echo pipeline('affiche_droite', [
+ 'args' => [
+ 'exec' => '404',
+ 'exec_erreur' => $exec,
+ ],
+ 'data' => '',
+ ]);
echo debut_droite();
echo "" . _T('fichier_introuvable', ['fichier' => $exec]) . ' ';
diff -Nru spip-4.4.23+dfsg/ecrire/exec/admin_plugin.php spip-4.4.28+dfsg/ecrire/exec/admin_plugin.php
--- spip-4.4.23+dfsg/ecrire/exec/admin_plugin.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/exec/admin_plugin.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,22 +1,19 @@
['exec' => 'admin_plugin'],
- 'data' => afficher_librairies()
+ 'data' => afficher_librairies(),
]
);
@@ -168,7 +165,7 @@
}
}
- if ($quoi == 'actifs' or $lpf) {
+ if ($quoi == 'actifs' || $lpf) {
$nb = is_countable($lcpa) ? count($lcpa) : 0;
if (defined('_DIR_PLUGINS_SUPPL')) {
$nb += is_countable($lcpas) ? count($lcpas) : 0;
@@ -237,7 +234,7 @@
'affiche_milieu',
[
'args' => ['exec' => 'admin_plugin'],
- 'data' => ''
+ 'data' => '',
]
);
@@ -253,7 +250,7 @@
* Liste des plugins actifs
* @return string
* Code HTML
- **/
+ */
function affiche_les_plugins_verrouilles($actifs) {
if ((!$liste = liste_plugin_files(_DIR_PLUGINS_DIST))) {
return '';
@@ -298,7 +295,6 @@
return $res;
}
-
/**
* Faire la liste des librairies disponibles
*
@@ -309,13 +305,11 @@
$libs = [];
foreach (array_reverse(creer_chemin()) as $d) {
if (
- is_dir($dir = $d . 'lib/')
- and $t = opendir($dir)
+ is_dir($dir = $d . 'lib/') && $t = opendir($dir)
) {
while (($f = readdir($t)) !== false) {
if (
- $f[0] != '.'
- and is_dir("$dir/$f")
+ $f[0] != '.' && is_dir("$dir/$f")
) {
$libs[$f] = $dir;
}
diff -Nru spip-4.4.23+dfsg/ecrire/exec/base_delete_all.php spip-4.4.28+dfsg/ecrire/exec/base_delete_all.php
--- spip-4.4.23+dfsg/ecrire/exec/base_delete_all.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/exec/base_delete_all.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,29 +1,26 @@
'._T('info_version_base_plus_recente').'
';
+ echo '' . _T('info_version_base_plus_recente') . '
';
echo boite_fermer();
} else {
echo boite_ouvrir(_T('info_message_technique'), 'notice');
echo '' . _T('info_procedure_maj_version') . '
',
- '' . _T('info_administrateur_site_01') . '
';
+ '' . _T('info_administrateur_site_01') . '
';
echo bouton_action(_T('bouton_mettre_a_jour_base'), generer_url_ecrire('upgrade', 'reinstall=non'));
echo boite_fermer();
}
diff -Nru spip-4.4.23+dfsg/ecrire/exec/fond.php spip-4.4.28+dfsg/ecrire/exec/fond.php
--- spip-4.4.23+dfsg/ecrire/exec/fond.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/exec/fond.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,13 +1,13 @@
page();
@@ -49,23 +44,21 @@
* Fonction appelée en cas d'arrêt de php sur une erreur
*
* @todo supprimer cette fonction vide ?
- **/
+ */
function shutdown_error() {
// si on arrive ici avec un tampon non ferme : erreur fatale
/* if (ob_get_level()){
- // envoyer tous les tampons
- while (ob_get_level())
- ob_end_flush();
-
- var_dump(error_get_last());
- #echo " "."Erreur fatale (memoire ?) ";
- @flush();
- }*/
+ * // envoyer tous les tampons
+ * while (ob_get_level())
+ * ob_end_flush();
+ * var_dump(error_get_last());
+ * #echo " "."Erreur fatale (memoire ?) ";
+ * @flush();
+ * }*/
}
register_shutdown_function('shutdown_error');
-
// on retient l'envoi de html pour pouvoir tout jeter et generer une 403
// si on tombe sur un filtre sinon_interdire_acces
// il faudrait etre capable de flusher cela des que le contenu principal est genere
diff -Nru spip-4.4.23+dfsg/ecrire/exec/info_plugin.php spip-4.4.28+dfsg/ecrire/exec/info_plugin.php
--- spip-4.4.23+dfsg/ecrire/exec/info_plugin.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/exec/info_plugin.php 2026-10-07 13:48:22.000000000 +0000
@@ -4,10 +4,7 @@
/**
* Gestion d'affichage d'un descriptif de plugin en ajax
- *
- * @package SPIP\Core\Exec
*/
-
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
@@ -30,9 +27,9 @@
$plug = _DIR_RACINE . htmlspecialchars(_request('plugin'));
$get_infos = charger_fonction('get_infos', 'plugins');
$dir = '';
- if (strncmp($plug, _DIR_PLUGINS, strlen(_DIR_PLUGINS)) == 0) {
+ if (str_starts_with($plug, _DIR_PLUGINS)) {
$dir = _DIR_PLUGINS;
- } elseif (strncmp($plug, _DIR_PLUGINS_DIST, strlen(_DIR_PLUGINS_DIST)) == 0) {
+ } elseif (str_starts_with($plug, _DIR_PLUGINS_DIST)) {
$dir = _DIR_PLUGINS_DIST;
}
if ($dir) {
diff -Nru spip-4.4.23+dfsg/ecrire/exec/informer.php spip-4.4.28+dfsg/ecrire/exec/informer.php
--- spip-4.4.23+dfsg/ecrire/exec/informer.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/exec/informer.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,20 +1,17 @@
$GLOBALS['meta']['dernier_envoi_neuf'], 'jours_neuf' => $jours_neuf],
+ [
+ 'date' => $GLOBALS['meta']['dernier_envoi_neuf'],
+ 'jours_neuf' => $jours_neuf,
+ ],
['raw' => true]
);
if (strlen(trim($page['texte']))) {
// recuperer les entetes envoyes par #HTTP_HEADER
$headers = '';
- if (isset($page['entetes']) and is_countable($page['entetes']) ? count($page['entetes']) : 0) {
+ if (isset($page['entetes']) && (is_countable($page['entetes']) ? count($page['entetes']) : 0)) {
foreach ($page['entetes'] as $k => $v) {
$headers .= (strlen($v) ? "$k: $v" : $k) . "\n";
}
diff -Nru spip-4.4.23+dfsg/ecrire/genie/maintenance.php spip-4.4.28+dfsg/ecrire/genie/maintenance.php
--- spip-4.4.23+dfsg/ecrire/genie/maintenance.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/genie/maintenance.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,20 +1,17 @@
$desc) {
if (
!sql_select('*', $table, '', '', '', 1)
- and !defined('spip_interdire_cache')
+ && !defined('spip_interdire_cache')
) { # cas "LOST CONNECTION"
- $crash[] = $table;
+ $crash[] = $table;
}
}
}
- #$crash[] = 'test';
+ # $crash[] = 'test';
if ($crash) {
ecrire_meta('message_crash_tables', serialize($crash));
spip_log('crash des tables', 'err');
diff -Nru spip-4.4.23+dfsg/ecrire/genie/mise_a_jour.php spip-4.4.28+dfsg/ecrire/genie/mise_a_jour.php
--- spip-4.4.23+dfsg/ecrire/genie/mise_a_jour.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/genie/mise_a_jour.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,20 +1,17 @@
$last_modified,
- 'file' => $tmp_file
+ 'file' => $tmp_file,
]);
// si il y a une version plus recente que l'on a recu correctement
if (
$res['status'] == 200
- and $res['length']
- and $tmp_file = $res['file']
+ && $res['length']
+ && ($tmp_file = $res['file'])
) {
if ($md5 !== md5_file($tmp_file)) {
// on essaye de l'inclure pour verifier que ca ne fait pas erreur fatale
@@ -167,7 +163,7 @@
$res = recuperer_url_cache(_VERSIONS_SERVEUR, $options);
// Si rien de neuf (ou inaccessible), garder l'ancienne
- if ($res and $res['page']) {
+ if ($res && $res['page']) {
$contenu = $res['page'];
ecrire_fichier($nom, $contenu);
}
@@ -222,17 +218,17 @@
// d'abord les mises à jour de la même branche (version mineure)
if (
spip_version_compare($version, $version_maj, '<')
- and spip_version_compare($maj['mineure'], $version_maj, '<')
- and spip_version_compare($branche, $branche_maj, '=')
+ && spip_version_compare($maj['mineure'], $version_maj, '<')
+ && spip_version_compare($branche, $branche_maj, '=')
) {
$maj['mineure'] = $version_maj;
}
// puis les mises à jours majeures
if (
$is_version_stable
- and spip_version_compare($version, $version_maj, '<')
- and spip_version_compare($maj['majeure'], $version_maj, '<')
- and spip_version_compare($branche, $branche_maj, '<')
+ && spip_version_compare($version, $version_maj, '<')
+ && spip_version_compare($maj['majeure'], $version_maj, '<')
+ && spip_version_compare($branche, $branche_maj, '<')
) {
$maj['majeure'] = $version_maj;
}
@@ -241,7 +237,6 @@
return $maj;
}
-
/**
* Notifier les webmestre d’une nouvelle version existante (pour mettre à jour)
*
@@ -268,7 +263,7 @@
notifications_envoyer_mails(
$destinataires,
$texte,
- '['. $GLOBALS['meta']['nom_site'] .'] '. _T('nouvelle_version_spip', ['version' => $version])
+ '[' . $GLOBALS['meta']['nom_site'] . '] ' . _T('nouvelle_version_spip', ['version' => $version])
);
}
}
diff -Nru spip-4.4.23+dfsg/ecrire/genie/optimiser.php spip-4.4.28+dfsg/ecrire/genie/optimiser.php
--- spip-4.4.23+dfsg/ecrire/genie/optimiser.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/genie/optimiser.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,20 +1,17 @@
time() - 48 * 3600, 'limit' => 10000]);
+ purger_repertoire($d, [
+ 'mtime' => time() - 48 * 3600,
+ 'limit' => 10000,
+ ]);
}
}
@@ -65,13 +65,11 @@
* Heure de référence pour le garbage collector = 24h auparavant
* @param int $attente
* Attente entre 2 exécutions de la tache en secondes
- * @return void
- **/
+ */
function optimiser_base($attente = 86400) {
optimiser_base_disparus($attente);
}
-
/**
* Lance une requête d'optimisation sur une des tables SQL de la
* base de données.
@@ -82,7 +80,7 @@
* @see sql_optimize()
*
* @global int $GLOBALS ['meta']['optimiser_table']
- **/
+ */
function optimiser_base_une_table() {
$tables = [];
@@ -109,7 +107,6 @@
}
}
-
/**
* Supprime des enregistrements d'une table SQL dont les ids à supprimer
* se trouvent dans les résultats de ressource SQL transmise, sous la colonne 'id'
@@ -123,14 +120,14 @@
* Nom de la table SQL, exemple : spip_articles
* @param string $id
* Nom de la clé primaire de la table, exemple : id_article
- * @param Object $sel
+ * @param object $sel
* Ressource SQL issue d'une sélection (sql_select) et contenant une
* colonne 'id' ayant l'identifiant de la clé primaire à supprimer
* @param string $and
* Condition AND à appliquer en plus sur la requête de suppression
* @return int
* Nombre de suppressions
- **/
+ */
function optimiser_sansref($table, $id, $sel, $and = '') {
$in = [];
while ($row = sql_fetch($sel)) {
@@ -146,7 +143,6 @@
return count($in);
}
-
/**
* Suppression des liens morts entre tables
*
@@ -161,8 +157,7 @@
*
* @param int $attente
* Attente entre 2 exécutions de la tache en secondes
- * @return void
- **/
+ */
function optimiser_base_disparus($attente = 86400) {
# format = 20060610110141, si on veut forcer une optimisation tout de suite
@@ -235,11 +230,10 @@
$n = pipeline('optimiser_base_disparus', [
'args' => [
'attente' => $attente,
- 'date' => $mydate
+ 'date' => $mydate,
],
- 'data' => $n
+ 'data' => $n,
]);
-
spip_log("optimiser_base_disparus : {$n} lien(s) mort(s)", 'genie' . _LOG_DEBUG);
}
diff -Nru spip-4.4.23+dfsg/ecrire/inc/acces.php spip-4.4.28+dfsg/ecrire/inc/acces.php
--- spip-4.4.23+dfsg/ecrire/inc/acces.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/inc/acces.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,20 +1,17 @@
$var) {
if ($var) {
- if ($val <> 'statut') {
+ if ($val != 'statut') {
$a .= ':' . $val . '-' . $var;
}
$b .= $val . '=' . $var . '&';
@@ -291,7 +278,7 @@
* Action désirée
* @return string
* Clé
- **/
+ */
function afficher_low_sec($id_auteur, $action = '') {
return substr(md5($action . low_sec($id_auteur)), 0, 8);
}
@@ -309,7 +296,7 @@
* Action désirée
* @return bool
* true si les clés corresponde, false sinon
- **/
+ */
function verifier_low_sec(
$id_auteur,
#[\SensitiveParameter]
@@ -324,7 +311,7 @@
*
* @param int $id_auteur
* Identifiant de l'auteur
- **/
+ */
function effacer_low_sec($id_auteur) {
if (!$id_auteur = intval($id_auteur)) {
return;
@@ -332,7 +319,6 @@
sql_updateq('spip_auteurs', ['low_sec' => ''], 'id_auteur = ' . intval($id_auteur));
}
-
/**
* Créer un fichier htpasswd
*
@@ -345,7 +331,7 @@
* @return null|void
* - null si pas de htpasswd à créer, ou si LDAP
* - void sinon.
- **/
+ */
function ecrire_acces() {
$htaccess = _DIR_RESTREINT . _ACCESS_FILE_NAME;
$htpasswd = _DIR_TMP . _AUTH_USER_FILE;
@@ -354,9 +340,8 @@
// par exemple acces_restreint ;
// si .htaccess existe, outrepasser spip_meta
if (
- (!isset($GLOBALS['meta']['creer_htpasswd'])
- or ($GLOBALS['meta']['creer_htpasswd'] != 'oui'))
- and !@file_exists($htaccess)
+ (!isset($GLOBALS['meta']['creer_htpasswd']) || $GLOBALS['meta']['creer_htpasswd'] != 'oui')
+ && !@file_exists($htaccess)
) {
spip_unlink($htpasswd);
spip_unlink($htpasswd . '-admin');
@@ -367,7 +352,7 @@
# de devenir redacteur le cas echeant (auth http)... a nettoyer
// attention, il faut au prealable se connecter a la base (necessaire car utilise par install)
// TODO: factoriser avec auth/spip qui fait deja ce job et generaliser le test auth_ldap_connect()
- if (include_spip('auth/ldap') and auth_ldap_connect()) {
+ if (include_spip('auth/ldap') && auth_ldap_connect()) {
return;
}
@@ -376,8 +361,6 @@
/**
* Generer le fichier de htpasswd contenant les htpass
- * @param $htpasswd
- * @param $htpasswd_admin
*/
function generer_htpasswd_files($htpasswd, $htpasswd_admin) {
if ($generer_htpasswd = charger_fonction('generer_htpasswd_files', 'inc', true)) {
@@ -389,7 +372,7 @@
$res = sql_select('login, htpass, statut', 'spip_auteurs', "htpass!='' AND login!='' AND " . sql_in('statut', ['1comite', '0minirezo', 'nouveau']));
while ($row = sql_fetch($res)) {
- if (strlen($row['login']) and strlen($row['htpass'])) {
+ if (strlen($row['login']) && strlen($row['htpass'])) {
$ligne = $row['login'] . ':' . $row['htpass'] . "\n";
$pwd_all .= $ligne;
if ($row['statut'] == '0minirezo') {
@@ -408,7 +391,7 @@
/**
* Créer un password htaccess
*
- * @link http://docs.php.net/manual/fr/function.crypt.php Documentation de `crypt()`
+ * @see http://docs.php.net/manual/fr/function.crypt.php Documentation de `crypt()`
*
* @param string $pass
* Le mot de passe
@@ -433,11 +416,11 @@
* @param string $rep
* Nom du répertoire où SPIP doit vérifier l'existence d'un fichier .htaccess
* @param bool $force
- * @return boolean
+ * @return bool
*/
function verifier_htaccess($rep, $force = false) {
$htaccess = rtrim($rep, '/') . '/' . _ACCESS_FILE_NAME;
- if (((@file_exists($htaccess)) or defined('_TEST_DIRS')) and !$force) {
+ if ((@file_exists($htaccess) || defined('_TEST_DIRS')) && !$force) {
return true;
}
@@ -454,9 +437,7 @@
';
// support des vieilles versions Apache 1.x mais uniquement si elles l'annoncent (pas en mode PROD)
if (
- function_exists('apache_get_version')
- and $v = apache_get_version()
- and strncmp($v, 'Apache/1.', 9) == 0
+ function_exists('apache_get_version') && ($v = apache_get_version()) && str_starts_with($v, 'Apache/1.')
) {
$deny = "deny from all\n";
}
@@ -497,7 +478,7 @@
function gerer_htaccess() {
// Cette variable de configuration peut etre posee par un plugin
// par exemple acces_restreint
- $f = (isset($GLOBALS['meta']['creer_htaccess']) and ($GLOBALS['meta']['creer_htaccess'] === 'oui'));
+ $f = (isset($GLOBALS['meta']['creer_htaccess']) && $GLOBALS['meta']['creer_htaccess'] === 'oui');
$dirs = sql_allfetsel('extension', 'spip_types_documents');
$dirs[] = ['extension' => 'distant'];
foreach ($dirs as $e) {
diff -Nru spip-4.4.23+dfsg/ecrire/inc/actions.php spip-4.4.28+dfsg/ecrire/inc/actions.php
--- spip-4.4.23+dfsg/ecrire/inc/actions.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/inc/actions.php 2026-10-07 13:48:22.000000000 +0000
@@ -13,10 +13,7 @@
/**
* Gestion des actions sécurisées
- *
- * @package SPIP\Core\Actions
- **/
-
+ */
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
@@ -111,7 +108,6 @@
return generer_action_auteur($action, $arg, $r, $corps, $att . " method='post'");
}
-
/**
* Fonction de formatage du contenu renvoyé en ajax
*
@@ -126,24 +122,24 @@
*/
function ajax_retour($corps, $content_type = null): void {
$xml = false;
- if (is_null($content_type) or $content_type === true) {
+ if ($content_type === null || $content_type === true) {
$xml = true;
$content_type = 'text/html';
- } elseif (!$content_type or !is_string($content_type) or !str_contains($content_type, '/')) {
+ } elseif (!$content_type || !is_string($content_type) || !str_contains($content_type, '/')) {
$content_type = 'text/html';
}
$e = '';
if (
isset($_COOKIE['spip_admin'])
- and ((_request('var_mode') == 'debug') or !empty($GLOBALS['tableau_des_temps']))
+ && (_request('var_mode') == 'debug' || !empty($GLOBALS['tableau_des_temps']))
) {
$e = erreur_squelette();
}
$c = $GLOBALS['meta']['charset'];
header('Content-Type: ' . $content_type . '; charset=' . $c);
- $debut = (($xml and strlen(trim($corps))) ? '<' . "?xml version='1.0' encoding='" . $c . "'?" . ">\n" : '');
+ $debut = (($xml && strlen(trim($corps))) ? '<' . "?xml version='1.0' encoding='" . $c . "'?>\n" : '');
$fin = '';
echo $debut, $corps, $fin, $e;
diff -Nru spip-4.4.23+dfsg/ecrire/inc/admin.php spip-4.4.28+dfsg/ecrire/inc/admin.php
--- spip-4.4.23+dfsg/ecrire/inc/admin.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/inc/admin.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,22 +1,19 @@
page('', ['titre' => _T('info_travaux_texte'), 'status' => 503]);
+ return $minipage->page('', [
+ 'titre' => _T('info_travaux_texte'),
+ 'status' => 503,
+ ]);
}
}
}
@@ -138,7 +138,7 @@
*
* @return string
* Chemin du répertoire.
- **/
+ */
function dir_admin() {
if (autoriser('configurer')) {
return _DIR_TMP;
@@ -159,7 +159,7 @@
* Préfixe au nom du fichier calculé
* @return string
* Nom du fichier
- **/
+ */
function fichier_admin($action, $pref = 'admin_') {
return $pref .
substr(md5($action . (time() & ~2047) . $GLOBALS['visiteur_session']['login']), 0, 10);
@@ -186,9 +186,9 @@
* @return string
* Code HTML de la page (pour vérifier les droits),
* sinon chaîne vide si déjà fait.
- **/
+ */
function debut_admin($script, $action = '', $corps = '') {
- if ((!$action) || !(autoriser('webmestre') or autoriser('chargerftp'))) {
+ if ((!$action) || !(autoriser('webmestre') || autoriser('chargerftp'))) {
$minipage = new MinipageAdmin();
return $minipage->page();
@@ -204,8 +204,8 @@
// Si on est un super-admin, un bouton de validation suffit
// sauf dans les cas destroy
if (
- (autoriser('webmestre') or $script === 'repair')
- and $script != 'delete_all'
+ (autoriser('webmestre') || $script === 'repair')
+ && $script != 'delete_all'
) {
if (_request('validation_admin') == $signal) {
spip_log("Action super-admin: $action");
@@ -263,7 +263,7 @@
*
* @param string $action
* Nom de l'action (en base) qui a été exécutée
- **/
+ */
function fin_admin($action) {
$signal = dir_admin() . fichier_admin($action);
spip_unlink($signal);
@@ -288,11 +288,11 @@
* texte du bouton de validation
* @return string
* Code HTML du formulaire
- **/
+ */
function copy_request($script, $suite, $submit = '') {
include_spip('inc/filtres');
foreach (array_merge($_POST, $_GET) as $n => $c) {
- if (!in_array($n, ['fichier', 'exec', 'validation_admin']) and !is_array($c)) {
+ if (!in_array($n, ['fichier', 'exec', 'validation_admin']) && !is_array($c)) {
$suite .= "\n ";
diff -Nru spip-4.4.23+dfsg/ecrire/inc/auth.php spip-4.4.28+dfsg/ecrire/inc/auth.php
--- spip-4.4.23+dfsg/ecrire/inc/auth.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/inc/auth.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,22 +1,19 @@
$GLOBALS['connect_login'],
- 'site' => generer_url_public('', 'action=logout&logout=prive')
+ 'site' => generer_url_public('', 'action=logout&logout=prive'),
];
}
@@ -67,8 +64,6 @@
/**
* Vérifier qu'un mot de passe saisi pour confirmer une action est bien celui de l'auteur connecté
- * @param string $password
- * @return bool
*/
function auth_controler_password_auteur_connecte(
#[\SensitiveParameter]
@@ -77,7 +72,7 @@
if (
empty($GLOBALS['visiteur_session']['id_auteur'])
- or empty($GLOBALS['visiteur_session']['login'])
+ || empty($GLOBALS['visiteur_session']['login'])
) {
return false;
}
@@ -85,7 +80,7 @@
$auth = auth_identifier_login($GLOBALS['visiteur_session']['login'], $password, '', true);
if (
is_array($auth)
- and $auth['id_auteur'] == $GLOBALS['visiteur_session']['id_auteur']
+ && $auth['id_auteur'] == $GLOBALS['visiteur_session']['id_auteur']
) {
return true;
}
@@ -98,7 +93,6 @@
* en cas de refus de connexion.
* Retourne un message a afficher ou redirige illico.
*
- * @param $raison
* @return array|string
*/
function auth_echec($raison) {
@@ -121,14 +115,14 @@
} elseif (@$raison['statut']) {
// un simple visiteur n'a pas acces a l'espace prive
spip_log('connexion refusee a ' . @$raison['id_auteur']);
- $est_connecte = (!empty($GLOBALS['visiteur_session']['login']) and !empty($GLOBALS['visiteur_session']['statut'])); // idem test balise #URL_LOGOUT
+ $est_connecte = (!empty($GLOBALS['visiteur_session']['login']) && !empty($GLOBALS['visiteur_session']['statut'])); // idem test balise #URL_LOGOUT
$raison = $minipage->page(
_T('avis_erreur_visiteur')
// Lien vers le site public
. '' . _T('login_retour_public') . ' '
// Si la personne est connectée, lien de déconnexion ramenant vers la page de login
. ($est_connecte ? ' | ' . _T('icone_deconnecter') . ' ' : ''),
- ['titre' => _T('avis_erreur_connexion')]
+ ['titre' => _T('avis_erreur_connexion')]
);
} else {
// auteur en fin de droits ...
@@ -183,15 +177,12 @@
// (ignorer les login d'intranet independants de spip)
if (!$GLOBALS['ignore_auth_http']) {
if (
- (isset($_SERVER['PHP_AUTH_USER']) and isset($_SERVER['PHP_AUTH_PW'])
- and $r = lire_php_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']))
- or
- // Si auth http differtente de basic, PHP_AUTH_PW
- // est indisponible mais tentons quand meme pour
- // autocreation via LDAP
- (isset($_SERVER['REMOTE_USER'])
- and $_SERVER['REMOTE_USER'] !== ''
- and $r = lire_php_auth($_SERVER['PHP_AUTH_USER'] = $_SERVER['REMOTE_USER'], ''))
+ isset($_SERVER['PHP_AUTH_USER'])
+ && isset($_SERVER['PHP_AUTH_PW'])
+ && ($r = lire_php_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']))
+ || isset($_SERVER['REMOTE_USER'])
+ && $_SERVER['REMOTE_USER'] !== ''
+ && ($r = lire_php_auth($_SERVER['PHP_AUTH_USER'] = $_SERVER['REMOTE_USER'], ''))
) {
if (!$id_auteur) {
$_SERVER['PHP_AUTH_PW'] = '';
@@ -216,8 +207,9 @@
}
}
- $where = (is_numeric($id_auteur)
- /*AND $id_auteur>0*/ // reprise lors des restaurations
+ $where = (
+ is_numeric($id_auteur)
+ /* AND $id_auteur>0 */ // reprise lors des restaurations
) ?
"id_auteur=$id_auteur" :
(!strlen($GLOBALS['connect_login']) ? '' : 'login=' . sql_quote($GLOBALS['connect_login'], '', 'text'));
@@ -252,7 +244,6 @@
return false;
}
-
if ($row['statut'] == 'nouveau') {
include_spip('action/inscrire_auteur');
$row = confirmer_statut_inscription($row);
@@ -278,14 +269,12 @@
$r = @unserialize($row['prefs']);
$GLOBALS['visiteur_session']['prefs'] = ($r ?: []);
// si prefs pas definies, les definir par defaut
- if (!isset($GLOBALS['visiteur_session']['prefs']['couleur'])) {
- $GLOBALS['visiteur_session']['prefs']['couleur'] = 2;
- }
+ $GLOBALS['visiteur_session']['prefs']['couleur'] ??= 2;
$GLOBALS['visiteur_session'] = pipeline(
'preparer_visiteur_session',
['args' => ['row' => $row],
- 'data' => $GLOBALS['visiteur_session']]
+ 'data' => $GLOBALS['visiteur_session']]
);
// Etablir les droits selon le codage attendu
@@ -308,7 +297,7 @@
if (in_array($GLOBALS['connect_statut'], explode(',', _STATUT_AUTEUR_RUBRIQUE))) {
if (
isset($GLOBALS['visiteur_session']['restreint'])
- and is_array($GLOBALS['visiteur_session']['restreint'])
+ && is_array($GLOBALS['visiteur_session']['restreint'])
) {
$GLOBALS['connect_id_rubrique'] = $GLOBALS['visiteur_session']['restreint'];
}
@@ -350,7 +339,8 @@
$redirect = parametre_url(
$redirect,
'var_erreur',
- (!isset($GLOBALS['visiteur_session']['statut'])
+ (
+ !isset($GLOBALS['visiteur_session']['statut'])
? 'cookie'
: 'statut'
),
@@ -385,7 +375,6 @@
pipeline('trig_auth_trace', ['args' => ['row' => $row, 'date' => $date]]);
}
-
/** ----------------------------------------------------------------------------
* API Authentification, gestion des identites centralisees
*/
@@ -424,9 +413,9 @@
'args' => [
'fonction' => $fonction,
'methode' => $auth_methode,
- 'args' => $args
+ 'args' => $args,
],
- 'data' => $res
+ 'data' => $res,
]
);
return $res;
@@ -446,7 +435,6 @@
return $flux;
}
-
/**
* Retrouver le login interne lie a une info login saisie
* la saisie peut correspondre a un login delegue
@@ -489,8 +477,8 @@
function auth_informer_login($login, $serveur = '') {
if (
!$login
- or !$login_base = auth_retrouver_login($login, $serveur)
- or !$row = sql_fetsel('*', 'spip_auteurs', 'login=' . sql_quote($login_base, $serveur, 'text'), '', '', '', '', $serveur)
+ || !($login_base = auth_retrouver_login($login, $serveur))
+ || !($row = sql_fetsel('*', 'spip_auteurs', 'login=' . sql_quote($login_base, $serveur, 'text'), '', '', '', '', $serveur))
) {
// generer de fausses infos, mais credibles, pour eviter une attaque
// https://core.spip.net/issues/1758 + https://core.spip.net/issues/3691
@@ -509,7 +497,7 @@
$infos = [
'id_auteur' => $row['id_auteur'],
'login' => $row['login'],
- 'cnx' => (isset($prefs['cnx']) and $prefs['cnx'] === 'perma') ? '1' : '0',
+ 'cnx' => (isset($prefs['cnx']) && $prefs['cnx'] === 'perma') ? '1' : '0',
'logo' => recuperer_fond('formulaires/inc-logo_auteur', $row),
];
@@ -518,7 +506,6 @@
return auth_administrer('informer_login', [$row['source'], $infos, $row, $serveur], $infos);
}
-
/**
* Essayer les differentes sources d'authenfication dans l'ordre specifie.
* S'en souvenir dans visiteur_session['auth']
@@ -539,11 +526,12 @@
foreach ($GLOBALS['liste_des_authentifications'] as $methode) {
if ($auth = charger_fonction($methode, 'auth', true)) {
$auteur = $auth($login, $password, $serveur, $phpauth);
- if (is_array($auteur) and count($auteur)) {
+ if (is_array($auteur) && count($auteur)) {
spip_log("connexion de $login par methode $methode");
$auteur['auth'] = $methode;
return $auteur;
- } elseif (is_string($auteur)) {
+ }
+ if (is_string($auteur)) {
$erreur .= "$auteur ";
}
}
@@ -590,7 +578,7 @@
* @return bool
*/
function auth_loger($auteur) {
- if (!is_array($auteur) or !count($auteur)) {
+ if (!is_array($auteur) || !count($auteur)) {
return false;
}
@@ -602,7 +590,7 @@
// initialiser les prefs
$p = $GLOBALS['visiteur_session']['prefs'];
- $p['cnx'] = (isset($auteur['cookie']) and $auteur['cookie'] == 'oui') ? 'perma' : '';
+ $p['cnx'] = (isset($auteur['cookie']) && $auteur['cookie'] == 'oui') ? 'perma' : '';
sql_updateq(
'spip_auteurs',
@@ -620,7 +608,7 @@
*
* @uses action_logout_dist()
* return void
- **/
+ */
function auth_deloger() {
$logout = charger_fonction('logout', 'action');
$logout();
@@ -700,7 +688,8 @@
* message d'erreur ou chaine vide si pas d'erreur
*/
function auth_verifier_pass(
- $auth_methode, $login,
+ $auth_methode,
+ $login,
#[\SensitiveParameter]
$new_pass,
$id_auteur = 0,
@@ -744,7 +733,6 @@
* @param array $champs
* @param array $options
* @param string $serveur
- * @return void
*/
function auth_synchroniser_distant(
$auth_methode = true,
@@ -754,7 +742,7 @@
$serveur = ''
) {
$args = func_get_args();
- if ($auth_methode === true or (isset($options['all']) and $options['all'] == true)) {
+ if ($auth_methode === true || isset($options['all']) && $options['all'] == true) {
$options['all'] = true; // ajouter une option all=>true pour chaque auth
$args = [true, $id_auteur, $champs, $options, $serveur];
foreach ($GLOBALS['liste_des_authentifications'] as $methode) {
@@ -767,7 +755,6 @@
}
}
-
/**
* Vérifier si l'auteur est bien authentifié
*
@@ -784,7 +771,7 @@
) {
if (
!$login
- or !$login_base = auth_retrouver_login($login, $serveur)
+ || !($login_base = auth_retrouver_login($login, $serveur))
) {
return false;
}
@@ -794,8 +781,8 @@
if (!$row) {
if (
include_spip('inc/auth')
- and auth_ldap_connect($serveur)
- and $auth_ldap = charger_fonction('ldap', 'auth', true)
+ && auth_ldap_connect($serveur)
+ && ($auth_ldap = charger_fonction('ldap', 'auth', true))
) {
return $auth_ldap($login_base, $pw, $serveur, true);
}
@@ -806,8 +793,8 @@
// si pas de source definie
// ou auth/xxx introuvable, utiliser 'spip' ou autre et avec le login passé par PHP_AUTH_USER
if (
- !$auth_methode = $row['source']
- or !$auth = charger_fonction($auth_methode, 'auth', true)
+ !($auth_methode = $row['source'])
+ || !($auth = charger_fonction($auth_methode, 'auth', true))
) {
$auth = charger_fonction('spip', 'auth', true);
}
@@ -817,7 +804,7 @@
$auteur = $auth($login, $pw, $serveur, true);
}
// verifier que ce n'est pas un message d'erreur
- if (is_array($auteur) and count($auteur)) {
+ if (is_array($auteur) && count($auteur)) {
return $auteur;
}
@@ -835,8 +822,8 @@
* @param string $lien
*/
function ask_php_auth($pb, $raison, $retour = '', $url = '', $re = '', $lien = '') {
- @Header('WWW-Authenticate: Basic realm="espace prive"');
- @Header('HTTP/1.0 401 Unauthorized');
+ @header('WWW-Authenticate: Basic realm="espace prive"');
+ @header('HTTP/1.0 401 Unauthorized');
$corps = '';
$public = generer_url_public();
$ecrire = generer_url_ecrire();
diff -Nru spip-4.4.23+dfsg/ecrire/inc/autoriser.php spip-4.4.28+dfsg/ecrire/inc/autoriser.php
--- spip-4.4.23+dfsg/ecrire/inc/autoriser.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/inc/autoriser.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,21 +1,19 @@
getCwd() . DIRECTORY_SEPARATOR . $f);
+ include_once app()
+ ->getCwd() . DIRECTORY_SEPARATOR . $f;
}
-
/**
* Autoriser une action
*
@@ -152,13 +148,11 @@
*/
function autoriser_dist(string $faire, ?string $type = '', $id = null, $qui = null, array $opt = []): bool {
- if ($type === null) {
- $type = '';
- }
+ $type ??= '';
// Qui ? visiteur_session ?
// si null ou '' (appel depuis #AUTORISER) on prend l'auteur loge
- if ($qui === null or $qui === '') {
+ if ($qui === null || $qui === '') {
$qui = $GLOBALS['visiteur_session'] ?: [];
$qui = array_merge(['statut' => '', 'id_auteur' => 0, 'webmestre' => 'non'], $qui);
} elseif (is_numeric($qui)) {
@@ -170,7 +164,7 @@
// Admins restreints, on construit ici (pas generique mais...)
// le tableau de toutes leurs rubriques (y compris les sous-rubriques)
- if (_ADMINS_RESTREINTS and is_array($qui)) {
+ if (_ADMINS_RESTREINTS && is_array($qui)) {
$qui['restreint'] = isset($qui['id_auteur']) ? liste_rubriques_auteur($qui['id_auteur']) : [];
}
@@ -179,16 +173,17 @@
'autoriser' . _LOG_DEBUG
);
- $type = autoriser_type($type);
+ $type_normalise = autoriser_type($type);
// Si une exception a ete decretee plus haut dans le code, l'appliquer
if (
- (isset($GLOBALS['autoriser_exception'][$faire][$type][$id]) and autoriser_exception($faire, $type, $id, 'verifier'))
- or (isset($GLOBALS['autoriser_exception'][$faire][$type]['*']) and autoriser_exception($faire, $type, '*', 'verifier'))
+ isset($GLOBALS['autoriser_exception'][$faire][$type_normalise][$id]) && autoriser_exception($faire, $type, $id, 'verifier')
+ || isset($GLOBALS['autoriser_exception'][$faire][$type_normalise]['*']) && autoriser_exception($faire, $type, '*', 'verifier')
) {
spip_log("autoriser ($faire, $type, $id, " . ($qui['nom'] ?? '') . ') : OK Exception', 'autoriser' . _LOG_DEBUG);
return true;
}
+ $type = $type_normalise;
// Chercher une fonction d'autorisation
// Dans l'ordre on va chercher autoriser_type_faire[_dist], autoriser_type[_dist],
@@ -197,18 +192,18 @@
? [
'autoriser_' . $type . '_' . $faire,
'autoriser_' . $type . '_' . $faire . '_dist',
- 'autoriser_' . $type,
- 'autoriser_' . $type . '_dist',
+ 'autoriser_' . $type . '_faire',
+ 'autoriser_' . $type . '_faire_dist',
'autoriser_' . $faire,
'autoriser_' . $faire . '_dist',
'autoriser_defaut',
- 'autoriser_defaut_dist'
+ 'autoriser_defaut_dist',
]
: [
'autoriser_' . $faire,
'autoriser_' . $faire . '_dist',
'autoriser_defaut',
- 'autoriser_defaut_dist'
+ 'autoriser_defaut_dist',
];
$a = false;
@@ -225,8 +220,8 @@
);
if (!is_bool($a)) {
- trigger_error(sprintf("Function %s should returns a boolean instead of %s (casts as boolean). This will trigger fatal error in future versions.", $f, gettype($a)), \E_USER_DEPRECATED);
- $a = (bool) $a;
+ trigger_error(sprintf('Function %s should returns a boolean instead of %s (casts as boolean). This will trigger fatal error in future versions.', $f, gettype($a)), \E_USER_DEPRECATED);
+ $a = (bool) $a;
}
return $a;
@@ -246,15 +241,12 @@
* @param string|bool $autoriser accorder (true) ou revoquer (false)
* - bool Accorder ou révoquer
* - 'verifier' : test si une exception existe
- * @return bool
*/
function autoriser_exception(string $faire, ?string $type = '', $id = null, $autoriser = true): bool {
// une static innaccessible par url pour verifier que la globale est positionnee a bon escient
static $autorisation;
// Tolérance avec certains appels
- if ($id === null) {
- $id = 0;
- }
+ $id ??= 0;
$type = autoriser_type($type);
if ($autoriser === 'verifier') {
return isset($autorisation[$faire][$type][$id]);
@@ -266,8 +258,7 @@
if ($id === '*') {
unset($GLOBALS['autoriser_exception'][$faire][$type]);
unset($autorisation[$faire][$type]);
- }
- else {
+ } else {
unset($GLOBALS['autoriser_exception'][$faire][$type][$id]);
unset($autorisation[$faire][$type][$id]);
}
@@ -295,7 +286,6 @@
return str_replace('_', '', (string) $type);
}
-
/**
* Autorisation par defaut
*
@@ -309,11 +299,9 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_defaut_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
- return
- $qui['statut'] === '0minirezo'
- and !$qui['restreint'];
+ return $qui['statut'] === '0minirezo' && !$qui['restreint'];
}
/**
@@ -350,9 +338,9 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_ecrire_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
- return isset($qui['statut']) and in_array($qui['statut'], ['0minirezo', '1comite']);
+ return isset($qui['statut']) && in_array($qui['statut'], ['0minirezo', '1comite']);
}
/**
@@ -369,7 +357,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_creer_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
return in_array($qui['statut'], ['0minirezo', '1comite']);
}
@@ -388,11 +376,11 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_previsualiser_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
// Le visiteur a-t-il un statut prevu par la config ?
- if (strpos($GLOBALS['meta']['preview'], ',' . $qui['statut'] . ',') !== false) {
+ if (str_contains($GLOBALS['meta']['preview'], ',' . $qui['statut'] . ',')) {
return test_previsualiser_objet_champ($type, $id, $qui, $opt);
}
@@ -422,7 +410,6 @@
*
* @uses lister_tables_objets_sql()
*
- * @param string $faire Action demandée
* @param string $type Type d'objet ou élément
* @param int|string|null $id Identifiant
* @param array $qui Description de l'auteur demandant l'autorisation
@@ -464,7 +451,8 @@
if (!$id_auteur) {
return false;
- } elseif (autoriser('previsualiser' . $opt[$champ], $type, 0, $id_auteur)) {
+ }
+ if (autoriser('previsualiser' . $opt[$champ], $type, 0, $id_auteur)) {
// dans ce cas (admin en general), pas de filtrage sur ce statut
} elseif (
!sql_countsel(
@@ -496,20 +484,20 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_changerlangue_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
$multi_objets = explode(',', lire_config('multi_objets'));
$gerer_trad_objets = explode(',', lire_config('gerer_trad_objets'));
$table = table_objet_sql($type);
if (
in_array($table, $multi_objets)
- or in_array($table, $gerer_trad_objets)
+ || in_array($table, $gerer_trad_objets)
) { // affichage du formulaire si la configuration l'accepte
$multi_secteurs = lire_config('multi_secteurs');
$champs = objet_info($type, 'field');
if (
$multi_secteurs === 'oui'
- and array_key_exists('id_rubrique', $champs)
+ && array_key_exists('id_rubrique', $champs)
) {
// multilinguisme par secteur et objet rattaché à une rubrique
$primary = id_table_objet($type);
@@ -556,7 +544,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_changertraduction_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
return autoriser('modifier', $type, $id, $qui, $opt);
}
@@ -572,7 +560,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_dater_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
$table = table_objet($type);
$trouver_table = charger_fonction('trouver_table', 'base');
@@ -603,7 +591,7 @@
if (
in_array($statut, $statuts_publies)
// Ou cas particulier géré en dur ici pour les articles
- or ($statut === 'prop' and $type === 'article' and $GLOBALS['meta']['post_dates'] === 'non')
+ || $statut === 'prop' && $type === 'article' && $GLOBALS['meta']['post_dates'] === 'non'
) {
return autoriser('modifier', $type, $id);
}
@@ -625,7 +613,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_instituer_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
return autoriser('modifier', $type, $id, $qui, $opt);
}
@@ -643,14 +631,9 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_rubrique_publierdans_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
- return
- ($qui['statut'] === '0minirezo')
- and (
- !$qui['restreint'] or !$id
- or in_array($id, $qui['restreint'])
- );
+ return $qui['statut'] === '0minirezo' && (!$qui['restreint'] || !$id || in_array($id, $qui['restreint']));
}
/**
@@ -666,12 +649,11 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_rubrique_creer_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
if (!empty($opt['id_parent'])) {
return autoriser('creerrubriquedans', 'rubrique', $opt['id_parent'], $qui);
- }
- else {
+ } else {
return autoriser('defaut', null, 0, $qui, $opt);
}
}
@@ -689,12 +671,11 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_rubrique_creerrubriquedans_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
- return
- ($id or ($qui['statut'] === '0minirezo' and !$qui['restreint']))
- and autoriser('voir', 'rubrique', $id)
- and autoriser('publierdans', 'rubrique', $id);
+ return ($id || $qui['statut'] === '0minirezo' && !$qui['restreint'])
+ && autoriser('voir', 'rubrique', $id)
+ && autoriser('publierdans', 'rubrique', $id);
}
/**
@@ -710,15 +691,11 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_rubrique_creerarticledans_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
- return
- $id
- and autoriser('voir', 'rubrique', $id)
- and autoriser('creer', 'article');
+ return $id && autoriser('voir', 'rubrique', $id) && autoriser('creer', 'article');
}
-
/**
* Autorisation de modifier une rubrique $id
*
@@ -732,10 +709,9 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_rubrique_modifier_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
- return
- autoriser('publierdans', 'rubrique', $id, $qui, $opt);
+ return autoriser('publierdans', 'rubrique', $id, $qui, $opt);
}
/**
@@ -751,7 +727,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_rubrique_supprimer_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
if (!$id = intval($id)) {
return false;
@@ -778,7 +754,6 @@
return autoriser('modifier', 'rubrique', $id);
}
-
/**
* Autorisation de modifier un article $id
*
@@ -793,7 +768,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_article_modifier_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
if (!$id) {
return false;
@@ -801,17 +776,11 @@
$r = sql_fetsel('id_rubrique,statut', 'spip_articles', 'id_article=' . sql_quote($id));
return
- $r
- and
- (
- autoriser('publierdans', 'rubrique', $r['id_rubrique'], $qui, $opt)
- or (
- (!isset($opt['statut']) or !in_array($opt['statut'], ['publie', 'refuse'], true))
- and in_array($qui['statut'], ['0minirezo', '1comite'])
- and in_array($r['statut'], ['prop', 'prepa', 'poubelle'])
- and auteurs_objet('article', $id, 'id_auteur=' . $qui['id_auteur'])
- )
- );
+ $r && (autoriser('publierdans', 'rubrique', $r['id_rubrique'], $qui, $opt)
+ || (!isset($opt['statut']) || !in_array($opt['statut'], ['publie', 'refuse'], true))
+ && in_array($qui['statut'], ['0minirezo', '1comite'])
+ && in_array($r['statut'], ['prop', 'prepa', 'poubelle'])
+ && auteurs_objet('article', $id, 'id_auteur=' . $qui['id_auteur']));
}
/**
@@ -827,14 +796,13 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_article_creer_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
if (!empty($opt['id_parent'])) {
// creerarticledans rappelle autoriser(creer,article) sans id, donc on verifiera condition du else aussi
return autoriser('creerarticledans', 'rubrique', $opt['id_parent'], $qui);
- }
- else {
- return (sql_countsel('spip_rubriques') > 0 and in_array($qui['statut'], ['0minirezo', '1comite']));
+ } else {
+ return sql_countsel('spip_rubriques') > 0 && in_array($qui['statut'], ['0minirezo', '1comite']);
}
}
@@ -874,14 +842,9 @@
// si on est pas auteur de l'article,
// seuls les propose et publies sont visibles
in_array($statut, ['prop', 'publie'])
- // sinon si on est auteur, on a le droit de le voir, evidemment !
- or
- ($id
- and $qui['id_auteur']
- and auteurs_objet('article', $id, 'id_auteur=' . $qui['id_auteur']));
+ || $id && $qui['id_auteur'] && auteurs_objet('article', $id, 'id_auteur=' . $qui['id_auteur']);
}
-
/**
* Autorisation de voir un objet
*
@@ -895,12 +858,12 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_voir_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
# securite, mais on aurait pas du arriver ici !
if (
function_exists($f = 'autoriser_' . $type . '_voir')
- or function_exists($f = 'autoriser_' . $type . '_voir_dist')
+ || function_exists($f = 'autoriser_' . $type . '_voir_dist')
) {
return $f($faire, $type, $id, $qui, $opt);
}
@@ -917,7 +880,6 @@
return true;
}
-
/**
* Autorisation de webmestre
*
@@ -935,14 +897,13 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_webmestre_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
- return
- (defined('_ID_WEBMESTRES') ?
- in_array($qui['id_auteur'], explode(':', _ID_WEBMESTRES))
+ return (defined('_ID_WEBMESTRES')
+ ? in_array($qui['id_auteur'], explode(':', _ID_WEBMESTRES))
: $qui['webmestre'] === 'oui')
- and $qui['statut'] === '0minirezo'
- and !$qui['restreint'];
+ && $qui['statut'] === '0minirezo'
+ && !$qui['restreint'];
}
/**
@@ -958,11 +919,9 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_configurer_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
- return
- $qui['statut'] === '0minirezo'
- and !$qui['restreint'];
+ return $qui['statut'] === '0minirezo' && !$qui['restreint'];
}
/**
@@ -978,10 +937,9 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_sauvegarder_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
- return
- $qui['statut'] === '0minirezo';
+ return $qui['statut'] === '0minirezo';
}
/**
@@ -997,7 +955,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_detruire_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
return autoriser('webmestre', null, 0, $qui, $opt);
}
@@ -1016,15 +974,15 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_auteur_previsualiser_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
// les admins peuvent "previsualiser" une page auteur
if (
- $qui['statut'] === '0minirezo'
- and !$qui['restreint']
+ $qui['statut'] === '0minirezo' && !$qui['restreint']
) {
return true;
- } elseif ($id === 0) {
+ }
+ if ($id === 0) {
return false;
}
// "Voir en ligne" si l'auteur a un article publie
@@ -1037,7 +995,6 @@
return $n ? true : false;
}
-
/**
* Autorisation de créer un auteur
*
@@ -1061,12 +1018,11 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_auteur_creer_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
- return ($qui['statut'] === '0minirezo');
+ return $qui['statut'] === '0minirezo';
}
-
/**
* Autorisation de modifier un auteur
*
@@ -1082,7 +1038,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_auteur_modifier_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
$id = intval($id);
@@ -1104,16 +1060,17 @@
// Un admin restreint peut modifier/creer un auteur non-admin mais il
// n'a le droit ni de le promouvoir admin, ni de changer les rubriques
if ($qui['restreint']) {
- if (isset($opt['webmestre']) and $opt['webmestre']) {
+ if (isset($opt['webmestre']) && $opt['webmestre']) {
return false;
- } elseif (
- (isset($opt['statut']) and ($opt['statut'] === '0minirezo'))
- or (isset($opt['restreintes']) and $opt['restreintes'])
+ }
+ if (
+ isset($opt['statut']) && $opt['statut'] === '0minirezo'
+ || isset($opt['restreintes']) && $opt['restreintes']
) {
return false;
} else {
if ($id == $qui['id_auteur']) {
- if (isset($opt['statut']) and $opt['statut']) {
+ if (isset($opt['statut']) && $opt['statut']) {
return false;
} else {
return true;
@@ -1121,7 +1078,7 @@
} else {
if ($id_auteur = intval($id)) {
$t = sql_fetsel('statut', 'spip_auteurs', "id_auteur=$id_auteur");
- if ($t and $t['statut'] != '0minirezo') {
+ if ($t && $t['statut'] != '0minirezo') {
return true;
} else {
return false;
@@ -1136,26 +1093,33 @@
// Un admin complet fait ce qu'il veut
// sauf se degrader
- if ($id == $qui['id_auteur'] && (isset($opt['statut']) and $opt['statut'])) {
+ if ($id == $qui['id_auteur']
+ && (
+ !empty($opt['statut'])
+ || !empty($opt['webmestre'])
+ || !empty($opt['restreintes'])
+ )
+ ) {
return false;
- } elseif (
+ }
+
+ if (
isset($opt['webmestre'])
- and $opt['webmestre']
- and (defined('_ID_WEBMESTRES')
- or !autoriser('webmestre'))
+ && $opt['webmestre']
+ && (defined('_ID_WEBMESTRES') || !autoriser('webmestre'))
) {
// et toucher au statut webmestre si il ne l'est pas lui meme
// ou si les webmestres sont fixes par constante (securite)
return false;
- } // et modifier un webmestre si il ne l'est pas lui meme
- elseif (intval($id) and !autoriser('webmestre') and autoriser('webmestre', '', 0, $id)) {
+ }
+ // et modifier un webmestre si il ne l'est pas lui meme
+ if (intval($id) && !autoriser('webmestre') && autoriser('webmestre', '', 0, $id)) {
return false;
} else {
return true;
}
}
-
/**
* Autorisation d'associer un auteur sur un objet
*
@@ -1169,12 +1133,11 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_associerauteurs_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
return autoriser('modifier', $type, $id, $qui, $opt);
}
-
/**
* Autorisation d'upload FTP
*
@@ -1188,7 +1151,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_chargerftp_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
return $qui['statut'] === '0minirezo';
}
@@ -1206,7 +1169,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_debug_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
return $qui['statut'] === '0minirezo';
}
@@ -1223,7 +1186,7 @@
* @param int $id_auteur Identifiant de l'auteur
* @param bool $raz Recalculer le résultat connu pour cet auteur
* @return array Liste des rubriques
- **/
+ */
function liste_rubriques_auteur($id_auteur, $raz = false) {
static $restreint = [];
@@ -1238,14 +1201,9 @@
$rubriques = [];
if (
- (!isset($GLOBALS['meta']['version_installee'])
- or $GLOBALS['meta']['version_installee'] > 16428)
- and $r = sql_allfetsel(
- 'id_objet',
- 'spip_auteurs_liens',
- 'id_auteur=' . intval($id_auteur) . " AND objet='rubrique' AND id_objet!=0"
- )
- and is_countable($r) ? count($r) : 0
+ (!isset($GLOBALS['meta']['version_installee']) || $GLOBALS['meta']['version_installee'] > 16428)
+ && ($r = sql_allfetsel('id_objet', 'spip_auteurs_liens', 'id_auteur=' . intval($id_auteur) . " AND objet='rubrique' AND id_objet!=0"))
+ && (is_countable($r) ? count($r) : 0)
) {
$r = array_column($r, 'id_objet');
@@ -1265,13 +1223,11 @@
// Affecter l'auteur session le cas echeant
if (
- isset($GLOBALS['visiteur_session']['id_auteur'])
- and $GLOBALS['visiteur_session']['id_auteur'] == $id_auteur
+ isset($GLOBALS['visiteur_session']['id_auteur']) && $GLOBALS['visiteur_session']['id_auteur'] == $id_auteur
) {
$GLOBALS['visiteur_session']['restreint'] = $rubriques;
}
-
return $restreint[$id_auteur] = $rubriques;
}
@@ -1288,7 +1244,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_rubrique_previsualiser_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
return autoriser('previsualiser');
}
@@ -1306,7 +1262,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_rubrique_iconifier_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
return autoriser('publierdans', 'rubrique', $id, $qui, $opt);
}
@@ -1324,11 +1280,10 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_auteur_iconifier_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
$id = intval($id);
- return (($id == $qui['id_auteur']) or
- (($qui['statut'] === '0minirezo') and !$qui['restreint']));
+ return $id == $qui['id_auteur'] || $qui['statut'] === '0minirezo' && !$qui['restreint'];
}
/**
@@ -1344,13 +1299,12 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_iconifier_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
// par defaut, on a le droit d'iconifier si on a le droit de modifier
return autoriser('modifier', $type, $id, $qui, $opt);
}
-
/**
* Autorisation OK
*
@@ -1365,7 +1319,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return true
- **/
+ */
function autoriser_ok_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
return true;
}
@@ -1384,7 +1338,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return false
- **/
+ */
function autoriser_niet_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
return false;
}
@@ -1402,9 +1356,9 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_base_reparer_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
- if (!autoriser('detruire') or _request('reinstall')) {
+ if (!autoriser('detruire') || _request('reinstall')) {
return false;
}
@@ -1424,7 +1378,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return true
- **/
+ */
function autoriser_infosperso_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
return true;
}
@@ -1442,7 +1396,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return true
- **/
+ */
function autoriser_langage_configurer_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
return true;
}
@@ -1460,7 +1414,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_configurerlangage_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
return autoriser('configurer', '_langage', $id, $qui, $opt);
}
@@ -1478,7 +1432,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return true
- **/
+ */
function autoriser_preferences_configurer_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
return true;
}
@@ -1514,7 +1468,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_configurerpreferences_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
return autoriser('configurer', '_preferences', $id, $qui, $opt);
}
@@ -1532,10 +1486,9 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_menudeveloppement_menugrandeentree_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
- return (isset($GLOBALS['visiteur_session']['prefs']['activer_menudev'])
- and $GLOBALS['visiteur_session']['prefs']['activer_menudev'] === 'oui');
+ return isset($GLOBALS['visiteur_session']['prefs']['activer_menudev']) && $GLOBALS['visiteur_session']['prefs']['activer_menudev'] === 'oui';
}
/**
@@ -1552,7 +1505,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return true
- **/
+ */
function autoriser_menugrandeentree_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
return true;
}
@@ -1570,7 +1523,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return true
- **/
+ */
function autoriser_auteurs_voir_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
return true;
}
@@ -1604,7 +1557,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_auteurs_menu_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
return autoriser('voir', '_auteurs', $id, $qui, $opt);
}
@@ -1622,7 +1575,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return true
- **/
+ */
function autoriser_articles_voir_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
return true;
}
@@ -1640,7 +1593,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_articles_menu_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
return autoriser('voir', '_articles', $id, $qui, $opt);
}
@@ -1658,7 +1611,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return true
- **/
+ */
function autoriser_rubriques_voir_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
return true;
}
@@ -1676,7 +1629,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_rubriques_menu_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
return autoriser('voir', '_rubriques', $id, $qui, $opt);
}
@@ -1694,12 +1647,11 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_articlecreer_menu_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
return verifier_table_non_vide();
}
-
/**
* Autorisation de voir le menu auteurcreer
*
@@ -1715,7 +1667,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_auteurcreer_menu_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
return autoriser('creer', 'auteur', $id, $qui, $opt);
}
@@ -1733,15 +1685,12 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_visiteurs_menu_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
include_spip('base/abstract_sql');
- return
- $qui['statut'] === '0minirezo' and !$qui['restreint']
- and (
- $GLOBALS['meta']['accepter_visiteurs'] != 'non'
- or sql_countsel('spip_auteurs', 'statut in ("6forum", "nouveau")') > 0
- );
+ return $qui['statut'] === '0minirezo'
+ && !$qui['restreint']
+ && ($GLOBALS['meta']['accepter_visiteurs'] != 'non' || sql_countsel('spip_auteurs', 'statut in ("6forum", "nouveau")') > 0);
}
/**
@@ -1757,7 +1706,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_suiviedito_menu_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
return $qui['statut'] === '0minirezo';
}
@@ -1775,7 +1724,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_synchro_menu_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
return $qui['statut'] === '0minirezo';
}
@@ -1793,7 +1742,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_configurerinteractions_menu_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
return autoriser('configurer', '_interactions', $id, $qui, $opt);
}
@@ -1811,7 +1760,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_configurerlangue_menu_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
return autoriser('configurer', '_langue', $id, $qui, $opt);
}
@@ -1829,7 +1778,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_configurermultilinguisme_menu_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
return autoriser('configurer', '_multilinguisme', $id, $qui, $opt);
}
@@ -1847,7 +1796,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_configurercontenu_menu_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
return autoriser('configurer', '_contenu', $id, $qui, $opt);
}
@@ -1865,7 +1814,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_configureravancees_menu_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
return autoriser('configurer', '_avancees', $id, $qui, $opt);
}
@@ -1883,7 +1832,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_adminplugin_menu_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
return autoriser('configurer', '_plugins', $id, $qui, $opt);
}
@@ -1901,7 +1850,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_admintech_menu_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
return autoriser('detruire', $type, $id, $qui, $opt);
}
@@ -1919,12 +1868,11 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_queue_purger_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
return autoriser('webmestre');
}
-
/**
* Autorisation l'échafaudage de squelettes en Z
*
@@ -1939,7 +1887,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_echafauder_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
if (test_espace_prive()) {
return intval($qui['id_auteur']) ? true : false;
@@ -1948,7 +1896,6 @@
}
}
-
/**
* Retourne les identifiants d'auteurs liés à un objet
*
@@ -1963,7 +1910,7 @@
$objet = objet_type($objet);
$where = [
'objet=' . sql_quote($objet),
- 'id_objet=' . intval($id_objet)
+ 'id_objet=' . intval($id_objet),
];
if (!empty($cond)) {
if (is_array($cond)) {
@@ -2003,7 +1950,6 @@
);
}
-
/**
* Tester si on est admin restreint sur une rubrique donnée
*
@@ -2014,10 +1960,9 @@
*/
function acces_restreint_rubrique($id_rubrique) {
- return (isset($GLOBALS['connect_id_rubrique'][$id_rubrique]));
+ return isset($GLOBALS['connect_id_rubrique'][$id_rubrique]);
}
-
/**
* Verifier qu'il existe au moins un parent
*
@@ -2028,9 +1973,7 @@
*/
function verifier_table_non_vide($table = 'spip_rubriques') {
static $done = [];
- if (!isset($done[$table])) {
- $done[$table] = sql_countsel($table) > 0;
- }
+ $done[$table] ??= sql_countsel($table) > 0;
return $done[$table];
}
@@ -2051,7 +1994,6 @@
* @see autoriser()
*
* @param string $faire Action demandée
- * @param string $type Type d'objet ou élément
* @param int|string|null $id Identifiant
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
@@ -2062,9 +2004,9 @@
$s = array_search($quoi, $GLOBALS['liste_des_statuts']);
switch ($s) {
case 'info_redacteurs':
- return ($GLOBALS['meta']['accepter_inscriptions'] === 'oui');
+ return $GLOBALS['meta']['accepter_inscriptions'] === 'oui';
case 'info_visiteurs':
- return ($GLOBALS['meta']['accepter_visiteurs'] === 'oui' or $GLOBALS['meta']['forums_publics'] === 'abo');
+ return $GLOBALS['meta']['accepter_visiteurs'] === 'oui' || $GLOBALS['meta']['forums_publics'] === 'abo';
}
return false;
@@ -2083,9 +2025,9 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_inscription_relancer_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
- return $qui['statut'] === '0minirezo' and !$qui['restreint'];
+ return $qui['statut'] === '0minirezo' && !$qui['restreint'];
}
/**
@@ -2101,7 +2043,7 @@
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
- **/
+ */
function autoriser_phpinfos_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
return autoriser('webmestre');
}
diff -Nru spip-4.4.23+dfsg/ecrire/inc/bandeau.php spip-4.4.28+dfsg/ecrire/inc/bandeau.php
--- spip-4.4.23+dfsg/ecrire/inc/bandeau.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/inc/bandeau.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,22 +1,19 @@
$contexte])
+ || !($parent = $infos['parent'])
+ || !$autorise
+ || autoriser('menu', "_$id", 0, null, ['contexte' => $contexte])
) {
if (
$parent
- and $parent = preg_replace(',^bando_,', 'menu_', $parent)
- and isset($boutons_admin[$parent])
+ && ($parent = preg_replace(',^bando_,', 'menu_', $parent))
+ && isset($boutons_admin[$parent])
) {
- $position = (isset($infos['position']) and strlen($infos['position'])) ? intval($infos['position']) : count($boutons_admin[$parent]->sousmenu);
+ $position = (isset($infos['position']) && strlen($infos['position'])) ? intval($infos['position']) : count($boutons_admin[$parent]->sousmenu);
if ($position < 0) {
$position = count($boutons_admin[$parent]->sousmenu) + 1 + $position;
}
$boutons_admin[$parent]->sousmenu = array_slice($boutons_admin[$parent]->sousmenu, 0, $position)
+ [
$id => new Bouton(
- ($icones and !empty($infos['icone'])) ? find_in_theme($infos['icone']) : '', // icone
+ ($icones && !empty($infos['icone'])) ? find_in_theme($infos['icone']) : '', // icone
$infos['titre'], // titre
- (isset($infos['action']) and $infos['action']) ? $infos['action'] : null,
- (isset($infos['parametres']) and $infos['parametres']) ? $infos['parametres'] : null
- )
+ (isset($infos['action']) && $infos['action']) ? $infos['action'] : null,
+ (isset($infos['parametres']) && $infos['parametres']) ? $infos['parametres'] : null
+ ),
]
+ array_slice($boutons_admin[$parent]->sousmenu, $position, 100);
}
if (
!$parent
- // provisoire, eviter les vieux boutons
- and (!in_array($id, ['forum', 'statistiques_visites']))
- and (!$autorise or autoriser('menugrandeentree', "_$id", 0, null, ['contexte' => $contexte]))
+ && !in_array($id, ['forum', 'statistiques_visites'])
+ && (!$autorise || autoriser('menugrandeentree', "_$id", 0, null, ['contexte' => $contexte]))
) {
- $position = (isset($infos['position']) and $infos['position']) ? $infos['position'] : count($boutons_admin);
+ $position = (isset($infos['position']) && $infos['position']) ? $infos['position'] : count($boutons_admin);
$boutons_admin = array_slice($boutons_admin, 0, $position)
+ [
$id => new Bouton(
- ($icones and isset($infos['icone']) and $infos['icone']) ? find_in_theme($infos['icone']) : '', // icone
+ ($icones && isset($infos['icone']) && $infos['icone']) ? find_in_theme($infos['icone']) : '', // icone
$infos['titre'], // titre
- (isset($infos['action']) and $infos['action']) ? $infos['action'] : null,
- (isset($infos['parametres']) and $infos['parametres']) ? $infos['parametres'] : null
- )
+ (isset($infos['action']) && $infos['action']) ? $infos['action'] : null,
+ (isset($infos['parametres']) && $infos['parametres']) ? $infos['parametres'] : null
+ ),
]
+ array_slice($boutons_admin, $position, 100);
}
@@ -151,9 +147,9 @@
'args' => [
'contexte' => $contexte,
'icones' => $icones,
- 'autorise' => $autorise
+ 'autorise' => $autorise,
],
- 'data' => $boutons_admin
+ 'data' => $boutons_admin,
]
);
@@ -215,7 +211,6 @@
return trier_boutons_enfants_par_alpha($menus, true);
}
-
/**
* Créer l'URL à partir de exec et args, sauf si c'est déjà une url formatée
*
@@ -232,7 +227,7 @@
// @machin@ etant remplace par _request('machin')
$url = str_replace('&', '&', $url);
while (preg_match(',[&?]([a-z_]+)=@([a-z_]+)@,i', $url, $matches)) {
- if ($matches[2] == 'id_secteur' and !isset($contexte['id_secteur']) and isset($contexte['id_rubrique'])) {
+ if ($matches[2] == 'id_secteur' && !isset($contexte['id_secteur']) && isset($contexte['id_rubrique'])) {
$contexte['id_secteur'] = sql_getfetsel('id_secteur', 'spip_rubriques', 'id_rubrique=' . intval($contexte['id_rubrique']));
}
$val = _request($matches[2], $contexte);
@@ -254,7 +249,6 @@
return recuperer_fond('prive/squelettes/inclure/barre-nav', $_GET);
}
-
/**
* Retourne la liste des noms d'entrées de menus favoris de l'auteur connecté
* @return array
@@ -262,8 +256,8 @@
function obtenir_menus_favoris() {
if (
isset($GLOBALS['visiteur_session']['prefs']['menus_favoris'])
- and is_array($GLOBALS['visiteur_session']['prefs']['menus_favoris'])
- and $GLOBALS['visiteur_session']['prefs']['menus_favoris']
+ && is_array($GLOBALS['visiteur_session']['prefs']['menus_favoris'])
+ && $GLOBALS['visiteur_session']['prefs']['menus_favoris']
) {
return $GLOBALS['visiteur_session']['prefs']['menus_favoris'];
}
diff -Nru spip-4.4.23+dfsg/ecrire/inc/boutons.php spip-4.4.28+dfsg/ecrire/inc/boutons.php
--- spip-4.4.23+dfsg/ecrire/inc/boutons.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/inc/boutons.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,22 +1,19 @@
$infos) {
if (
($parent = $infos['parent'])
@@ -55,7 +51,7 @@
(!empty($infos['action']))
? generer_url_ecrire(
$infos['action'],
- (isset($infos['parametres']) and $infos['parametres']) ? $infos['parametres'] : ''
+ (isset($infos['parametres']) && $infos['parametres']) ? $infos['parametres'] : ''
)
: null
);
@@ -66,7 +62,6 @@
}
/**
- *
* Création de la barre d'onglets
*
* @uses definir_barre_onglets()
diff -Nru spip-4.4.23+dfsg/ecrire/inc/charsets.php spip-4.4.28+dfsg/ecrire/inc/charsets.php
--- spip-4.4.23+dfsg/ecrire/inc/charsets.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/inc/charsets.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,13 +1,13 @@
127 and !isset($vu[$reg[0]])) {
+ if ($reg[1] > 127 && !isset($vu[$reg[0]])) {
$vu[$reg[0]] = caractere_utf_8($reg[1]);
}
}
}
- //$texte = str_replace(array_keys($vu), array_values($vu), $texte);
+ // $texte = str_replace(array_keys($vu), array_values($vu), $texte);
// 2. Entites > ÿ
- //$vu = array();
+ // $vu = array();
if (
preg_match_all(
',*([1-9a-f][0-9a-f][0-9a-f]+);,iS',
@@ -719,9 +708,7 @@
)
) {
foreach ($regs as $reg) {
- if (!isset($vu[$reg[0]])) {
- $vu[$reg[0]] = caractere_utf_8(hexdec($reg[1]));
- }
+ $vu[$reg[0]] ??= caractere_utf_8(hexdec($reg[1]));
}
}
@@ -735,10 +722,10 @@
* texte à convertir
* @return string
* texte converti
- **/
+ */
function unicode_to_javascript($texte) {
$vu = [];
- while (preg_match(',*([0-9]+);,S', $texte, $regs) and !isset($vu[$regs[1]])) {
+ while (preg_match(',*([0-9]+);,S', $texte, $regs) && !isset($vu[$regs[1]])) {
$num = $regs[1];
$vu[$num] = true;
$s = '\u' . sprintf('%04x', $num);
@@ -755,7 +742,7 @@
* texte à convertir
* @return string
* texte converti
- **/
+ */
function javascript_to_unicode($texte) {
while (preg_match(',%u([0-9A-F][0-9A-F][0-9A-F][0-9A-F]),', $texte, $regs)) {
$texte = str_replace($regs[0], '' . hexdec($regs[1]) . ';', $texte);
@@ -771,7 +758,7 @@
* texte à convertir
* @return string
* texte converti
- **/
+ */
function javascript_to_binary($texte) {
while (preg_match(',%([0-9A-F][0-9A-F]),', $texte, $regs)) {
$texte = str_replace($regs[0], chr(hexdec($regs[1])), $texte);
@@ -780,7 +767,6 @@
return $texte;
}
-
/**
* Substition rapide de chaque graphème selon le charset sélectionné.
*
@@ -792,7 +778,6 @@
* @param string $texte
* @param string $charset
* @param string $complexe
- * @return string
*/
function translitteration_rapide($texte, $charset = 'AUTO', $complexe = ''): string {
static $trans = [];
@@ -834,7 +819,6 @@
* @param string $texte
* @param string $charset
* @param string $complexe
- * @return string
*/
function translitteration($texte, $charset = 'AUTO', $complexe = ''): string {
if ($texte === null || $texte === '') {
@@ -859,7 +843,6 @@
* @uses translitteration()
* @param string $texte
* @param bool $chiffres
- * @return string
*/
function translitteration_complexe($texte, $chiffres = false): string {
$texte = translitteration($texte, 'AUTO', 'complexe');
@@ -867,7 +850,7 @@
if ($chiffres) {
$texte = preg_replace_callback(
"/[aeiuoyd]['`?~.^+(-]{1,2}/S",
- fn($m) => translitteration_chiffree($m[0]),
+ fn ($m) => translitteration_chiffree($m[0]),
$texte
);
}
@@ -881,13 +864,11 @@
* Remplace des caractères dans une chaîne par des chiffres
*
* @param string $car
- * @return string
*/
function translitteration_chiffree($car): string {
return strtr($car, "'`?~.^+(-", '123456789');
}
-
/**
* Reconnaitre le BOM utf-8 (0xEFBBBF)
*
@@ -895,9 +876,9 @@
* texte dont on vérifie la présence du BOM
* @return bool
* true s'il a un BOM
- **/
+ */
function bom_utf8($texte): bool {
- return (substr($texte, 0, 3) === chr(0xEF) . chr(0xBB) . chr(0xBF));
+ return substr($texte, 0, 3) === chr(0xEF) . chr(0xBB) . chr(0xBF);
}
/**
@@ -912,7 +893,7 @@
* texte dont on vérifie qu'il est de l'utf-8
* @return bool
* true si c'est le cas
- **/
+ */
function is_utf8($string): bool {
return !strlen(
preg_replace(
@@ -938,7 +919,7 @@
* texte dont on vérifie qu'il est de l'ascii
* @return bool
* true si c'est le cas
- **/
+ */
function is_ascii($string): bool {
return !strlen(
preg_replace(
@@ -962,12 +943,12 @@
* Éventuels headers HTTP liés à cette page
* @return string
* texte transcodé dans le charset du site
- **/
+ */
function transcoder_page($texte, $headers = ''): string {
// Si tout est < 128 pas la peine d'aller plus loin
if (is_ascii($texte)) {
- #spip_log('charset: ascii');
+ # spip_log('charset: ascii');
return $texte;
}
@@ -982,8 +963,8 @@
// charset precise par le contenu (html)
preg_match(',<(meta|html|body)[^>]*charset[^>]*=[^>]*([#-_a-z0-9]+?),UimsS', $texte, $regs)
# eviter toute balise SPIP tel que #CHARSET ou #CONFIG d'un squelette
- and !str_contains($regs[2], '#')
- and $tmp = trim(strtolower($regs[2]))
+ && !str_contains($regs[2], '#')
+ && ($tmp = trim(strtolower($regs[2])))
) {
$charset = $tmp;
} elseif (preg_match(',charset=([-_a-z0-9]+),i', $headers, $regs)) {
@@ -993,7 +974,6 @@
$charset = '';
}
-
// normaliser les noms du shif-jis japonais
if (preg_match(',^(x|shift)[_-]s?jis$,i', $charset)) {
$charset = 'shift-jis';
@@ -1014,7 +994,6 @@
return importer_charset($texte, $charset);
}
-
//
// Gerer les outils mb_string
//
@@ -1024,8 +1003,8 @@
*
* Coupe une chaîne en utilisant les outils mb* lorsque le site est en utf8
*
- * @link http://fr.php.net/manual/fr/function.mb-substr.php
- * @link http://www.php.net/manual/fr/function.substr.php
+ * @see http://fr.php.net/manual/fr/function.mb-substr.php
+ * @see http://www.php.net/manual/fr/function.substr.php
* @uses spip_substr_manuelle() si les fonctions php mb sont absentes
*
* @param string $c Le texte
@@ -1033,7 +1012,7 @@
* @param null|int $length Longueur ou fin
* @return string
* Le texte coupé
- **/
+ */
function spip_substr($c, $start = 0, $length = null) {
if ($GLOBALS['meta']['charset'] !== 'utf-8') {
if ($length) {
diff -Nru spip-4.4.23+dfsg/ecrire/inc/chercher_logo.php spip-4.4.28+dfsg/ecrire/inc/chercher_logo.php
--- spip-4.4.23+dfsg/ecrire/inc/chercher_logo.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/inc/chercher_logo.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,19 +1,17 @@
0
- and $root == $exclus
+ $exclus > 0 && $root == $exclus
) {
return '';
}
@@ -143,9 +139,9 @@
// creer l' pour la rubrique $root
if (isset($data[$root])) { # pas de racine sauf pour les rubriques
- $r = " $espace"
- . $data[$root]
- . ' ' . "\n";
+ $r = "$espace"
+ . $data[$root]
+ . ' ' . "\n";
} else {
$r = '';
}
@@ -168,7 +164,7 @@
}
// si l'objet a deplacer est publie, verifier qu'on a acces aux rubriques
- if ($restreint and $root != $id_rubrique and !autoriser('publierdans', 'rubrique', $root)) {
+ if ($restreint && $root != $id_rubrique && !autoriser('publierdans', 'rubrique', $root)) {
return $sous;
}
@@ -192,17 +188,17 @@
* En mode rubrique, identifiant de soi-même
* @return string
* Code HTML du sélecteur
- **/
+ */
function selecteur_rubrique_html($id_rubrique, $type, $restreint, $idem = 0) {
$enfants = [];
$data = [];
- if ($type == 'rubrique' and autoriser('publierdans', 'rubrique', 0)) {
+ if ($type == 'rubrique' && autoriser('publierdans', 'rubrique', 0)) {
$data[0] = _T('info_racine_site');
}
# premier choix = neant
# si auteur (rubriques restreintes)
# ou si creation avec id_rubrique=0
- elseif ($type == 'auteur' or !$id_rubrique) {
+ elseif ($type == 'auteur' || !$id_rubrique) {
$data[0] = ' ';
}
@@ -224,7 +220,7 @@
$titre = couper(supprimer_tags(typo($r['titre'])) . ' ', 50);
if (
$GLOBALS['meta']['multi_rubriques'] == 'oui'
- and ($r['langue_choisie'] == 'oui' or $r['id_parent'] == 0)
+ && ($r['langue_choisie'] == 'oui' || $r['id_parent'] == 0)
) {
$titre .= ' [' . traduire_nom_langue($r['lang']) . ']';
}
@@ -241,14 +237,13 @@
// sauf si le selecteur s'adresse a une rubrique puisque on peut la mettre a la racine dans ce cas
if (
count($data) == 2
- and isset($data[0])
- and !in_array($type, ['auteur', 'rubrique'])
- and !$id_rubrique
+ && isset($data[0])
+ && !in_array($type, ['auteur', 'rubrique'])
+ && !$id_rubrique
) {
unset($data[0]);
}
-
$opt = sous_menu_rubriques($id_rubrique, 0, 0, $data, $enfants, $idem, $restreint, $type);
$att = " id='id_parent' name='id_parent'\nclass='selecteur_parent verdana1'";
@@ -259,8 +254,8 @@
}
# message pour neuneus (a supprimer ?)
-# if ($type != 'auteur' AND $type != 'breve')
-# $r .= "\n "._T('texte_rappel_selection_champs');
+ # if ($type != 'auteur' AND $type != 'breve')
+ # $r .= "\n "._T('texte_rappel_selection_champs');
return $r;
}
@@ -314,7 +309,6 @@
. ($restreint ? '' : '&racine=oui')
. (isset($GLOBALS['var_profile']) ? '&var_profile=1' : ''));
-
return construire_selecteur($url, '', 'selection_rubrique', 'id_parent', $init, $id_rubrique);
}
@@ -343,9 +337,9 @@
* Valeur actuelle du champ
* @return string
* Code HTML du sélecteur de rubrique AJAX
- **/
+ */
function construire_selecteur($url, $js, $idom, $name, $init = '', $id = 0) {
- $icone = (strpos($idom, 'auteur') !== false) ? 'auteur-24.png' : 'rechercher-20.png';
+ $icone = (str_contains($idom, 'auteur')) ? 'auteur-24.png' : 'rechercher-20.png';
// si icone de recherche on embed le svg
$balise = ($icone === 'rechercher-20.png' ? chercher_filtre('balise_svg') : chercher_filtre('balise_img'));
$img_icone = $balise(chemin_image($icone), _T('titre_image_selecteur'));
diff -Nru spip-4.4.23+dfsg/ecrire/inc/commencer_page.php spip-4.4.28+dfsg/ecrire/inc/commencer_page.php
--- spip-4.4.23+dfsg/ecrire/inc/commencer_page.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/inc/commencer_page.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,20 +1,17 @@
$titre, 'minipres' => $minipres ? ' ' : '']);
+ return recuperer_fond('prive/squelettes/head/dist', [
+ 'titre' => $titre,
+ 'minipres' => $minipres ? ' ' : '',
+ ]);
}
/**
@@ -125,7 +125,7 @@
*
* @param string $rubrique
* @param string $sous_rubrique
- * @param integer $id_rubrique
+ * @param int $id_rubrique
* @param bool $menu
* @return string
*/
@@ -140,7 +140,6 @@
return $res;
}
-
$bandeau = charger_fonction('bandeau', 'inc');
return $res
@@ -165,11 +164,10 @@
return spip_sanitize_classname($classes);
}
-
/**
* Afficher la liste des auteurs connectés à l'espace privé
*
- * @param integer $id_auteur
+ * @param int $id_auteur
* @return string
*/
function auteurs_recemment_connectes($id_auteur) {
diff -Nru spip-4.4.23+dfsg/ecrire/inc/completer_traduction.php spip-4.4.28+dfsg/ecrire/inc/completer_traduction.php
--- spip-4.4.23+dfsg/ecrire/inc/completer_traduction.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/inc/completer_traduction.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,20 +1,17 @@
1) {
+ if (!reset($cfg) && count($cfg) > 1) {
array_shift($cfg);
$table = array_shift($cfg);
if (!isset($GLOBALS[$table])) {
@@ -92,7 +86,7 @@
* Clé de configuration
* @param mixed $def
* Valeur par défaut
- * @param boolean $unserialize
+ * @param bool $unserialize
* N'affecte que le dépôt 'meta' :
* True pour désérialiser automatiquement la valeur
* @return mixed
@@ -105,21 +99,21 @@
// traiter en priorite le cas simple et frequent
// de lecture direct $GLOBALS['meta']['truc'], si $cfg ne contient ni / ni :
- if ($cfg and strpbrk($cfg, '/:') === false) {
+ if ($cfg && strpbrk($cfg, '/:') === false) {
$r = isset($GLOBALS['meta'][$cfg]) ?
- ((!$unserialize
- // ne pas essayer de deserialiser autre chose qu'une chaine
- or !is_string($GLOBALS['meta'][$cfg])
- // ne pas essayer de deserialiser si ce n'est visiblement pas une chaine serializee
- or !str_contains($GLOBALS['meta'][$cfg], ':')
- or ($t = @unserialize($GLOBALS['meta'][$cfg])) === false) ? $GLOBALS['meta'][$cfg] : $t)
+ ((!$unserialize
+ // ne pas essayer de deserialiser autre chose qu'une chaine
+ || !is_string($GLOBALS['meta'][$cfg])
+ // ne pas essayer de deserialiser si ce n'est visiblement pas une chaine serializee
+ || !str_contains($GLOBALS['meta'][$cfg], ':')
+ || ($t = @unserialize($GLOBALS['meta'][$cfg])) === false) ? $GLOBALS['meta'][$cfg] : $t)
: $def;
return $r;
}
// Brancher sur methodes externes si besoin
- if ($cfg and $p = strpos($cfg, '::')) {
+ if ($cfg && $p = strpos($cfg, '::')) {
$methode = substr($cfg, 0, $p);
$lire_config = charger_fonction($methode, 'lire_config');
@@ -144,16 +138,16 @@
// ou si on a besoin
// d'un sous casier
$r = $r[$casier] ?? null;
- if (($unserialize or is_countable($sous_casier) ? count($sous_casier) : 0) and $r and is_string($r)) {
+ if (($unserialize || (is_countable($sous_casier) ? count($sous_casier) : 0)) && $r && is_string($r)) {
$r = (($t = @unserialize($r)) === false ? $r : $t);
}
// aller chercher le sous_casier
- while (!is_null($r) and $casier = array_shift($sous_casier)) {
+ while ($r !== null && ($casier = array_shift($sous_casier))) {
$r = $r[$casier] ?? null;
}
- if (is_null($r)) {
+ if ($r === null) {
return $def;
}
@@ -174,7 +168,6 @@
return lire_config($cfg, $def, $unserialize);
}
-
/**
* Ecrire une configuration
*
@@ -184,7 +177,7 @@
*/
function ecrire_config($cfg, $store) {
// Brancher sur methodes externes si besoin
- if ($cfg and $p = strpos($cfg, '::')) {
+ if ($cfg && ($p = strpos($cfg, '::'))) {
$methode = substr($cfg, 0, $p);
$ecrire_config = charger_fonction($methode, 'ecrire_config');
@@ -199,7 +192,7 @@
// trouvons ou creons le pointeur sur le casier
$st = $GLOBALS[$table][$casier] ?? null;
- if (!is_array($st) and ($sous_casier or is_array($store))) {
+ if (!is_array($st) && ($sous_casier || is_array($store))) {
if ($st === null) {
// ne rien creer si c'est une demande d'effacement
if ($store === null) {
@@ -224,12 +217,12 @@
if ($c = $sous_casier) {
$sc = &$st;
$pointeurs = [];
- while (is_countable($c) ? count($c) : 0 and $cc = array_shift($c)) {
+ while ((is_countable($c) ? count($c) : 0) && $cc = array_shift($c)) {
// creer l'entree si elle n'existe pas
if (!isset($sc[$cc])) {
// si on essaye d'effacer une config qui n'existe pas
// ne rien creer mais sortir
- if (is_null($store)) {
+ if ($store === null) {
return false;
}
$sc[$cc] = [];
@@ -239,7 +232,7 @@
}
// si c'est une demande d'effacement
- if (is_null($store)) {
+ if ($store === null) {
$c = $sous_casier;
$sous = array_pop($c);
// effacer, et remonter pour effacer les parents vides
@@ -250,16 +243,16 @@
// si on a vide tous les sous casiers,
// et que le casier est vide
// vider aussi la meta
- if (!$sous and !(is_countable($st) ? count($st) : 0)) {
+ if (!$sous && !(is_countable($st) ? count($st) : 0)) {
$st = null;
}
} // dans tous les autres cas, on ecrase
else {
if (
- defined('_MYSQL_NOPLANES')
- and _MYSQL_NOPLANES
- and !empty($GLOBALS['meta']['charset_sql_connexion'])
- and $GLOBALS['meta']['charset_sql_connexion'] == 'utf8'
+ defined('_MYSQL_NOPLANES')
+ && _MYSQL_NOPLANES
+ && !empty($GLOBALS['meta']['charset_sql_connexion'])
+ && $GLOBALS['meta']['charset_sql_connexion'] == 'utf8'
) {
// detecter si la valeur qu'on veut ecrire a des planes
// @see utf8_noplanes
@@ -283,8 +276,8 @@
$store = $st;
}
- if (is_null($store)) {
- if (is_null($st) and !$sous_casier) {
+ if ($store === null) {
+ if ($st === null && !$sous_casier) {
return false;
} // la config n'existait deja pas !
effacer_meta($casier, $table);
@@ -313,8 +306,7 @@
ecrire_meta($casier, $serialized_store, null, $table);
}
}
- }
- else {
+ } else {
ecrire_meta($casier, $store, null, $table);
}
}
@@ -323,7 +315,6 @@
return true;
}
-
/**
* metapack est inclue dans ecrire_config, mais on traite le cas ou il est explicite
* metapack:: dans le $cfg de ecrire_config.
@@ -337,7 +328,7 @@
// cas particulier en metapack::
// si on ecrit une chaine deja serializee, il faut la reserializer pour la rendre
// intacte en sortie ...
- if (is_string($store) and strpos($store, ':') and unserialize($store)) {
+ if (is_string($store) && strpos($store, ':') && unserialize($store)) {
$store = serialize($store);
}
@@ -429,7 +420,6 @@
* et recalcule les langues
*
* @param array $liste_meta
- * @return void
*/
function actualise_metas($liste_meta) {
$meta_serveur =
@@ -455,7 +445,7 @@
'formats_graphiques',
'image_process',
'plugin_header',
- 'plugin'
+ 'plugin',
];
// verifier le impt=non
sql_updateq('spip_meta', ['impt' => 'non'], sql_in('nom', $meta_serveur));
@@ -471,7 +461,6 @@
ecrire_meta('langues_utilisees', $langues);
}
-
//
// Gestion des modifs
//
@@ -486,7 +475,6 @@
* @uses purger_repertoire()
*
* @param bool $purger_skel
- * @return void
*/
function appliquer_modifs_config($purger_skel = false) {
diff -Nru spip-4.4.23+dfsg/ecrire/inc/cookie.php spip-4.4.28+dfsg/ecrire/inc/cookie.php
--- spip-4.4.23+dfsg/ecrire/inc/cookie.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/inc/cookie.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,30 +1,26 @@
true`) */
- if (defined('_COOKIE_SECURE_LIST') and is_array(constant('_COOKIE_SECURE_LIST'))) {
+ if (defined('_COOKIE_SECURE_LIST') && is_array(constant('_COOKIE_SECURE_LIST'))) {
$to_secure_list = array_merge($to_secure_list, constant('_COOKIE_SECURE_LIST'));
}
@@ -103,11 +99,11 @@
}
// in fine renommer le prefixe si besoin
- if (strpos($name, 'spip_') === 0) {
+ if (str_starts_with($name, 'spip_')) {
$name = $GLOBALS['cookie_prefix'] . '_' . substr($name, 5);
}
- #spip_log("cookie('$name', '$value', " . json_encode($options, true) . ")", "cookies");
+ # spip_log("cookie('$name', '$value', " . json_encode($options, true) . ")", "cookies");
$a = @setcookie($name, $value, $options);
spip_cookie_envoye(true);
@@ -126,7 +122,7 @@
* @param bool|string $set
* true pour déclarer les cookies comme envoyés
* @return bool
- **/
+ */
function spip_cookie_envoye($set = '') {
static $envoye = false;
if ($set) {
@@ -150,7 +146,7 @@
*
* @param string $cookie_prefix
* Préfixe des cookies de SPIP
- **/
+ */
function recuperer_cookies_spip($cookie_prefix) {
$cookie_prefix .= '_';
$prefix_long = strlen($cookie_prefix);
@@ -168,7 +164,6 @@
}
}
-
/**
* Teste si javascript est supporté par le navigateur et pose un cookie en conséquence
*
@@ -181,8 +176,7 @@
*
* @see html_tests_js()
* @uses spip_setcookie()
- *
- **/
+ */
function exec_test_ajax_dist() {
switch (_request('js')) {
// on est appele par
@@ -192,7 +186,7 @@
redirige_par_entete(chemin_image('erreur-xx.svg'));
break;
- // ou par ajax
+ // ou par ajax
case 1:
default:
spip_setcookie('spip_accepte_ajax', 1);
diff -Nru spip-4.4.23+dfsg/ecrire/inc/couleurs.php spip-4.4.28+dfsg/ecrire/inc/couleurs.php
--- spip-4.4.23+dfsg/ecrire/inc/couleurs.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/inc/couleurs.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,20 +1,17 @@
['couleur_theme' => '#9a6ef2'],
+ 9 => [
+ 'couleur_theme' => '#9a6ef2',
+ ],
// Violet rosé
- 4 => ['couleur_theme' => '#c464cb'],
+ 4 => [
+ 'couleur_theme' => '#c464cb',
+ ],
// Rose interface SPIP
- 2 => ['couleur_theme' => '#F02364'],
+ 2 => [
+ 'couleur_theme' => '#F02364',
+ ],
// Rouge
- 8 => ['couleur_theme' => '#ff4524'],
+ 8 => [
+ 'couleur_theme' => '#ff4524',
+ ],
// Orange
- 3 => ['couleur_theme' => '#c97500'],
+ 3 => [
+ 'couleur_theme' => '#c97500',
+ ],
// Vert SPIP
- 1 => ['couleur_theme' => '#9dba00'],
+ 1 => [
+ 'couleur_theme' => '#9dba00',
+ ],
// Vert Troglo
- 7 => ['couleur_theme' => '#419a2c'],
+ 7 => [
+ 'couleur_theme' => '#419a2c',
+ ],
// Bleu-vert
- 12 => ['couleur_theme' => '#269681'],
+ 12 => [
+ 'couleur_theme' => '#269681',
+ ],
// Bleu pastel
- 5 => ['couleur_theme' => '#3190ae'],
+ 5 => [
+ 'couleur_theme' => '#3190ae',
+ ],
// Bleu Kermesse
- 11 => ['couleur_theme' => '#288bdd'],
+ 11 => [
+ 'couleur_theme' => '#288bdd',
+ ],
// Gris bleuté
- 6 => ['couleur_theme' => '#7d90a2'],
+ 6 => [
+ 'couleur_theme' => '#7d90a2',
+ ],
// Gris
- 10 => ['couleur_theme' => '#909090'],
+ 10 => [
+ 'couleur_theme' => '#909090',
+ ],
];
if (is_numeric($choix)) {
diff -Nru spip-4.4.23+dfsg/ecrire/inc/csv.php spip-4.4.28+dfsg/ecrire/inc/csv.php
--- spip-4.4.23+dfsg/ecrire/inc/csv.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/inc/csv.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,20 +1,17 @@
0
- and preg_match("/^$sep*$/", $lignes[count($lignes) - 1])
+ && preg_match("/^$sep*$/", $lignes[count($lignes) - 1])
) {
unset($lignes[count($lignes) - 1]);
}
@@ -107,7 +104,7 @@
$nbcols = [];
$max = $mil = substr_count($entete, $sep);
foreach ($lignes as $k => $v) {
- if ($max <> ($nbcols[$k] = substr_count($v, $sep))) {
+ if ($max != ($nbcols[$k] = substr_count($v, $sep))) {
if ($max > $nbcols[$k]) {
$mil = $nbcols[$k];
} else {
@@ -117,7 +114,7 @@
}
}
// Si pas le meme nombre, cadrer au nombre max
- if ($mil <> $max) {
+ if ($mil != $max) {
foreach ($nbcols as $k => $v) {
if ($v < $max) {
$lignes[$k] .= str_repeat($sep, $max - $v);
diff -Nru spip-4.4.23+dfsg/ecrire/inc/cvt_autosave.php spip-4.4.28+dfsg/ecrire/inc/cvt_autosave.php
--- spip-4.4.23+dfsg/ecrire/inc/cvt_autosave.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/inc/cvt_autosave.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,20 +1,17 @@
$val) {
if (isset($flux['data'][$key]) && !str_starts_with($key, '_')) {
@@ -67,7 +63,7 @@
// si on est dans le charger() qui suit le traiter(), l'autosave a normalement ete vide
// mais si il y a plusieurs sessions il peut y avoir concurrence et un retour de l'autosave
- if ($je_suis_poste and _request('autosave') === $cle_autosave and function_exists('terminer_actualiser_sessions')) {
+ if ($je_suis_poste && _request('autosave') === $cle_autosave && function_exists('terminer_actualiser_sessions')) {
terminer_actualiser_sessions();
// et verifions si jamais l'autosave a fait un come back, dans ce cas on le revide
if (isset($GLOBALS['visiteur_session']['session_autosave_' . $cle_autosave])) {
@@ -78,7 +74,6 @@
}
}
-
/**
* Envoyer le input hidden et le bout de js qui l'utilisera
*/
@@ -109,7 +104,7 @@
session_set('session_autosave_' . $cle_autosave, null);
}
- if (isset($GLOBALS['visiteur_session']) and $GLOBALS['visiteur_session']) {
+ if (isset($GLOBALS['visiteur_session']) && $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);
@@ -118,7 +113,7 @@
// purger aussi toutes les vieilles autosave
$session = $GLOBALS['visiteur_session'];
foreach ($session as $k => $v) {
- if (strncmp($k, 'session_autosave_', 17) == 0) {
+ if (str_starts_with($k, 'session_autosave_')) {
$timestamp = 0;
if (preg_match(',&__timestamp=(\d+)$,', $v, $m)) {
$timestamp = intval($m[1]);
diff -Nru spip-4.4.23+dfsg/ecrire/inc/cvt_configurer.php spip-4.4.28+dfsg/ecrire/inc/cvt_configurer.php
--- spip-4.4.23+dfsg/ecrire/inc/cvt_configurer.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/inc/cvt_configurer.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,23 +1,20 @@
_T('config_info_enregistree') . $trace, 'editable' => true];
+ $flux['data'] = [
+ 'message_ok' => _T('config_info_enregistree') . $trace,
+ 'editable' => true,
+ ];
}
return $flux;
@@ -102,7 +102,7 @@
'formulaire_charger',
[
'args' => ['form' => $form, 'args' => $args, 'je_suis_poste' => false],
- 'data' => $valeurs
+ 'data' => $valeurs,
]
);
// ne pas stocker editable !
@@ -111,7 +111,7 @@
// recuperer les valeurs postees
$store = [];
foreach ($valeurs as $k => $v) {
- if (substr($k, 0, 1) !== '_') {
+ if (!str_starts_with($k, '_')) {
$store[$k] = _request($k);
}
}
@@ -189,15 +189,15 @@
foreach ($balises as $b) {
if (
- $n = extraire_attribut($b, 'name')
- and preg_match(',^([\w\-]+)(\[\w*\])?$,', $n, $r)
- and !in_array($n, ['formulaire_action', 'formulaire_action_args', 'formulaire_action_sign'])
- and extraire_attribut($b, 'type') !== 'submit'
+ ($n = extraire_attribut($b, 'name'))
+ && preg_match(',^([\w\-]+)(\[\w*\])?$,', $n, $r)
+ && !in_array($n, ['formulaire_action', 'formulaire_action_args', 'formulaire_action_sign'])
+ && extraire_attribut($b, 'type') !== 'submit'
) {
$valeurs[$r[1]] = '';
// recuperer les valeurs _meta_xx qui peuvent etre fournies
// en input hidden dans le squelette
- if (strncmp($r[1], '_meta_', 6) == 0) {
+ if (str_starts_with($r[1], '_meta_')) {
$valeurs[$r[1]] = extraire_attribut($b, 'value');
}
}
@@ -205,7 +205,6 @@
}
}
-
cvtconf_configurer_lire_meta($form, $valeurs);
return $valeurs;
@@ -234,7 +233,7 @@
foreach ($store as $k => $v) {
ecrire_config("$stockage$table$prefixe$casier$k", $v);
- if (_request('var_mode') == 'configurer' and autoriser('webmestre')) {
+ if (_request('var_mode') == 'configurer' && autoriser('webmestre')) {
$trace .= " table $table : " . $prefixe . $k . " = $v;";
}
}
@@ -262,7 +261,7 @@
}
foreach ($valeurs as $k => $v) {
- if (substr($k, 0, 1) !== '_') {
+ if (!str_starts_with($k, '_')) {
$valeurs[$k] = ($meta[$prefixe . $k] ?? null);
}
}
diff -Nru spip-4.4.23+dfsg/ecrire/inc/cvt_multietapes.php spip-4.4.28+dfsg/ecrire/inc/cvt_multietapes.php
--- spip-4.4.23+dfsg/ecrire/inc/cvt_multietapes.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/inc/cvt_multietapes.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,13 +1,13 @@
$v) { // on ecrase pas si saisi a nouveau !
- if (!isset($store[$k])) {
+ if (!isset($store[$k])) {
$_REQUEST[$k] = $store[$k] = $v;
- } // mais si tableau des deux cotes, on merge avec priorite a la derniere saisie
+ } // mais si tableau des deux cotes, on merge avec priorite a la derniere saisie
elseif (
is_array($store[$k])
- and is_array($v)
- and $z = array_keys($v)
- and !is_numeric(reset($z))
- and $z = array_keys($store[$k])
- and !is_numeric(reset($z))
+ && is_array($v)
+ && ($z = array_keys($v))
+ && !is_numeric(reset($z))
+ && ($z = array_keys($store[$k]))
+ && !is_numeric(reset($z))
) {
$_REQUEST[$k] = $store[$k] = array_merge($v, $store[$k]);
}
@@ -131,7 +130,7 @@
if (!isset($valeurs['_cvtm_prev_post'])) {
$post = ['_etape' => $valeurs['_etape'], '_etapes' => $valeurs['_etapes']];
foreach (array_keys($valeurs) as $champ) {
- if (substr($champ, 0, 1) !== '_') {
+ if (!str_starts_with($champ, '_')) {
if ($je_suis_poste || (isset($valeurs['_forcer_request']) && $valeurs['_forcer_request'])) {
if (($v = _request($champ)) !== null) {
$post[$champ] = $v;
@@ -141,9 +140,7 @@
}
include_spip('inc/filtres');
$c = encoder_contexte_ajax($post, $form);
- if (!isset($valeurs['_hidden'])) {
- $valeurs['_hidden'] = '';
- }
+ $valeurs['_hidden'] ??= '';
$valeurs['_hidden'] .= " ";
// marquer comme fait, pour eviter double encodage (unipotence)
$valeurs['_cvtm_prev_post'] = true;
@@ -152,7 +149,6 @@
return $valeurs;
}
-
/**
* Reperer une demande de formulaire CVT multi page
* et la reformater
@@ -165,8 +161,7 @@
function cvtmulti_formulaire_charger($flux) {
trigger_deprecation('spip', '3.2', 'Using "%s" is deprecated, use "%s" instead', __FUNCTION__, 'cvtmulti_formulaire_charger_etapes');
if (
- is_array($flux['data'])
- and isset($flux['data']['_etapes'])
+ is_array($flux['data']) && isset($flux['data']['_etapes'])
) {
$flux['data'] = cvtmulti_formulaire_charger_etapes($flux['args'], $flux['data']);
}
@@ -176,8 +171,6 @@
/**
* Charger une etape du cvt multi
- * @param $args
- * @param $valeurs
* @return array
*/
function cvtmulti_formulaire_charger_etapes($args, $valeurs) {
@@ -196,7 +189,6 @@
return $valeurs;
}
-
/**
* Verifier les etapes de saisie
*
@@ -215,11 +207,10 @@
* Verifier les etapes de saisie
*
* @param array $args
- * @param $erreurs
* @return array
*/
function cvtmulti_formulaire_verifier_etapes($args, $erreurs) {
- #var_dump('Pipe verifier');
+ # var_dump('Pipe verifier');
if (
$form = $args['form']
@@ -235,7 +226,7 @@
$erreurs_etapes = [];
$derniere_etape_ok = 0;
$e = 0;
- while ($e < max($etape, $etape_demandee - 1) and $e < $etapes) {
+ while ($e < max($etape, $etape_demandee - 1) && $e < $etapes) {
$e++;
$erreurs_etapes[$e] = [];
if ($verifier = charger_fonction("verifier_$e", "formulaires/$form/", true)) {
@@ -252,15 +243,15 @@
'formulaire_verifier_etape',
[
'args' => $args,
- 'data' => $erreurs_etapes[$e]
+ 'data' => $erreurs_etapes[$e],
]
);
- if ($derniere_etape_ok == $e - 1 and !(is_countable($erreurs_etapes[$e]) ? count($erreurs_etapes[$e]) : 0)) {
+ if ($derniere_etape_ok == $e - 1 && !(is_countable($erreurs_etapes[$e]) ? count($erreurs_etapes[$e]) : 0)) {
$derniere_etape_ok = $e;
}
// possibilite de poster dans _retour_etape_x ou aller_a_etape
- if (!is_null(_request("_retour_etape_$e"))) {
+ if (_request("_retour_etape_$e") !== null) {
$etape_demandee = $e;
}
// Il se peut que les verifications ait décidé de faire sauter des étapes
@@ -269,28 +260,24 @@
}
}
-
// si la derniere etape OK etait la derniere
// on renvoie le flux inchange et ca declenche traiter
if (
- $derniere_etape_ok == $etapes
- and (!$etape_demandee or $etape_demandee >= $etapes)
+ $derniere_etape_ok == $etapes && (!$etape_demandee || $etape_demandee >= $etapes)
) {
return $erreurs;
} else {
$etape = $derniere_etape_ok + 1;
- if ($etape_demandee > 0 and $etape_demandee < $etape) {
+ if ($etape_demandee > 0 && $etape_demandee < $etape) {
$etape = $etape_demandee;
}
$etape = min($etape, $etapes);
- #var_dump("prochaine etape $etape");
+ # var_dump("prochaine etape $etape");
// retourner les erreurs de l'etape ciblee
$erreurs = $erreurs_etapes[$etape] ?? [];
// Ne pas se tromper dans le texte du message d'erreur : la clé '_etapes' n'est pas une erreur !
if ($erreurs) {
- if (!isset($erreurs['message_erreur'])) {
- $erreurs['message_erreur'] = singulier_ou_pluriel(is_countable($erreurs) ? count($erreurs) : 0, 'avis_1_erreur_saisie', 'avis_nb_erreurs_saisie');
- }
+ $erreurs['message_erreur'] ??= singulier_ou_pluriel(is_countable($erreurs) ? count($erreurs) : 0, 'avis_1_erreur_saisie', 'avis_nb_erreurs_saisie');
} else {
$erreurs['message_erreur'] = '';
}
@@ -312,13 +299,13 @@
*/
function cvtmulti_styliser($flux) {
if (
- strncmp($flux['args']['fond'], 'formulaires/', 12) == 0
- and isset($flux['args']['contexte']['_etapes'])
- and isset($flux['args']['contexte']['_etape'])
- and ($e = $flux['args']['contexte']['_etape']) > 1
- and $ext = $flux['args']['ext']
- and $f = $flux['data']
- and file_exists($f . "_$e.$ext")
+ str_starts_with($flux['args']['fond'], 'formulaires/')
+ && isset($flux['args']['contexte']['_etapes'])
+ && isset($flux['args']['contexte']['_etape'])
+ && ($e = $flux['args']['contexte']['_etape']) > 1
+ && ($ext = $flux['args']['ext'])
+ && ($f = $flux['data'])
+ && file_exists($f . "_$e.$ext")
) {
$flux['data'] = $f . "_$e";
}
diff -Nru spip-4.4.23+dfsg/ecrire/inc/definir_menus_favoris.php spip-4.4.28+dfsg/ecrire/inc/definir_menus_favoris.php
--- spip-4.4.23+dfsg/ecrire/inc/definir_menus_favoris.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/inc/definir_menus_favoris.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,26 +1,23 @@
1,
'rubriques' => 2,
@@ -32,7 +29,6 @@
// Menu Configurations
'configurer_identite' => 1,
'admin_plugin' => 2,
-
];
return $liste;
diff -Nru spip-4.4.23+dfsg/ecrire/inc/distant.php spip-4.4.28+dfsg/ecrire/inc/distant.php
--- spip-4.4.23+dfsg/ecrire/inc/distant.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/inc/distant.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,21 +1,19 @@
$localrac_tmp,
'taille_max' => $taille_max,
'if_modified_since' => $t ? filemtime($localrac) : '',
- 'callback_valider_url' => $callback_valider_url
+ 'callback_valider_url' => $callback_valider_url,
]
);
- if (!$res or (!$res['length'] and $res['status'] != 304)) {
+ if (!$res || !$res['length'] && $res['status'] != 304) {
spip_log("copie_locale : Echec recuperation $source sur $localrac_tmp status : " . ($res ? $res['status'] : '-'), 'distant' . _LOG_INFO_IMPORTANTE);
@unlink($localrac_tmp);
- }
- else {
+ } else {
spip_log("copie_locale : recuperation $source sur $localrac_tmp OK | taille " . $res['length'] . ' status ' . $res['status'], 'distant');
}
- if (!$res or !$res['length']) {
+ if (!$res || !$res['length']) {
// si $t c'est sans doute juste un not-modified-since
return $t ? $local : false;
}
@@ -139,8 +177,8 @@
// si option valider url, verifions que l'URL finale est acceptable
if (
$callback_valider_url
- and is_callable($callback_valider_url)
- and !$callback_valider_url($res['url'])
+ && is_callable($callback_valider_url)
+ && !$callback_valider_url($res['url'])
) {
spip_log('copie_locale : url finale ' . $res['url'] . " non valide, on refuse le fichier $localrac_tmp", 'distant' . _LOG_INFO_IMPORTANTE);
@unlink($localrac_tmp);
@@ -153,10 +191,13 @@
// si on retrouve l'extension
if (
!empty($res['headers'])
- and $extension = distant_trouver_extension_selon_headers($source, $res['headers'])
+ && ($extension = distant_trouver_extension_selon_headers($source, $res['headers']))
) {
if ($sanitizer = charger_fonction($extension, 'sanitizer', true)) {
- $sanitizer($localrac);
+ if ($sanitizer($localrac) === false) {
+ @unlink($localrac);
+ return false;
+ }
}
}
@@ -172,7 +213,7 @@
'http_res' => $res['length'],
'url' => $res['url'],
],
- 'data' => null
+ 'data' => null,
]
);
}
@@ -201,15 +242,15 @@
}
$parsed_url = parse_url($url);
- if (!$parsed_url or empty($parsed_url['host'])) {
+ if (!$parsed_url || empty($parsed_url['host'])) {
return false;
}
- if (isset($parsed_url['user']) or isset($parsed_url['pass'])) {
+ if (isset($parsed_url['user']) || isset($parsed_url['pass'])) {
return false;
}
- if (false !== strpbrk($parsed_url['host'], ':#?[]')) {
+ if (strpbrk($parsed_url['host'], ':#?[]') !== false) {
return false;
}
@@ -224,8 +265,7 @@
foreach ($known_hosts as $known_host) {
$parse_known = parse_url($known_host);
if (
- $parse_known
- and strtolower($parse_known['host']) === strtolower($parsed_url['host'])
+ $parse_known && strtolower($parse_known['host']) === strtolower($parsed_url['host'])
) {
$is_known_host = true;
break;
@@ -249,8 +289,7 @@
break;
}
}
- }
- else {
+ } else {
$ip = false;
}
}
@@ -266,7 +305,7 @@
}
$port = $parsed_url['port'];
- if ($port === 80 or $port === 443 or $port === 8080) {
+ if ($port === 80 || $port === 443 || $port === 8080) {
return $url;
}
@@ -275,9 +314,9 @@
$parse_known = parse_url($known_host);
if (
$parse_known
- and !empty($parse_known['port'])
- and strtolower($parse_known['host']) === strtolower($parsed_url['host'])
- and $parse_known['port'] == $port
+ && !empty($parse_known['port'])
+ && strtolower($parse_known['host']) === strtolower($parsed_url['host'])
+ && $parse_known['port'] == $port
) {
return $url;
}
@@ -340,7 +379,7 @@
}
}
- if (is_string($boundary) and strlen($boundary)) {
+ if (is_string($boundary) && strlen($boundary)) {
// fabrique une chaine HTTP pour un POST avec boundary
$entete = "Content-Type: multipart/form-data; boundary=$boundary\r\n";
$chaine = '';
@@ -403,7 +442,7 @@
$url_idn = implode($host_ascii, $url_idn);
}
// et on urlencode les char utf si besoin dans le path
- $url_idn = preg_replace_callback('/[^\x20-\x7f]/', fn($match) => urlencode($match[0]), $url_idn);
+ $url_idn = preg_replace_callback('/[^\x20-\x7f]/', fn ($match) => urlencode($match[0]), $url_idn);
}
return $url_idn;
@@ -473,9 +512,7 @@
if ($options['methode'] == 'HEAD') {
$options['taille_max'] = 0;
}
- if (is_null($options['taille_max'])) {
- $options['taille_max'] = $copy ? _COPIE_LOCALE_MAX_SIZE : _INC_DISTANT_MAX_SIZE;
- }
+ $options['taille_max'] ??= $copy ? _COPIE_LOCALE_MAX_SIZE : _INC_DISTANT_MAX_SIZE;
spip_log('recuperer_url ' . $options['methode'] . " sur $url", 'distant' . _LOG_DEBUG);
@@ -495,8 +532,7 @@
}
$formatted_data = $head . "\r\n" . $postdata;
if (
- strlen($postdata)
- and !$methode_demandee
+ strlen($postdata) && !$methode_demandee
) {
$options['methode'] = 'POST';
}
@@ -508,7 +544,7 @@
$url = preg_replace(',^feed://,i', 'http://', $url);
if (!tester_url_absolue($url)) {
$url = 'http://' . $url;
- } elseif (strncmp($url, '//', 2) == 0) {
+ } elseif (str_starts_with($url, '//')) {
$url = 'http:' . $url;
}
@@ -528,11 +564,11 @@
'length' => 0,
'last_modified' => '',
'location' => '',
- 'url' => $url
+ 'url' => $url,
];
// si on ecrit directement dans un fichier, pour ne pas manipuler en memoire refuser gz
- $refuser_gz = (($options['refuser_gz'] or $copy) ? true : false);
+ $refuser_gz = (($options['refuser_gz'] || $copy) ? true : false);
// ouvrir la connexion et envoyer la requete et ses en-tetes
[$handle, $fopen] = init_http(
@@ -562,7 +598,7 @@
// les actions liberticides de l'empire du milieu
if (
!need_proxy($host)
- and $res = @file_get_contents($url)
+ && ($res = @file_get_contents($url))
) {
$result['length'] = strlen($res);
if ($copy) {
@@ -578,7 +614,7 @@
spip_log("ECHEC chinoiserie $url", 'distant' . _LOG_ERREUR);
return false;
}
- } elseif ($res['location'] and $options['follow_location']) {
+ } elseif ($res['location'] && $options['follow_location']) {
$options['follow_location']--;
fclose($handle);
include_spip('inc/filtres');
@@ -616,12 +652,11 @@
}
// on ne veut que les entetes
- if (!$options['taille_max'] or $options['methode'] == 'HEAD' or $result['status'] == '304') {
+ if (!$options['taille_max'] || $options['methode'] == 'HEAD' || $result['status'] == '304') {
spip_log('RESULTAT recuperer_url ' . $options['methode'] . " sur $url : " . json_encode($result), 'distant' . _LOG_DEBUG);
return $result;
}
-
// s'il faut deballer, le faire via un fichier temporaire
// sinon la memoire explose pour les gros flux
@@ -712,7 +747,7 @@
$options = array_merge($default, $options);
// cas ou il n'est pas possible de cacher
- if (!empty($options['data']) or $options['methode'] == 'POST') {
+ if (!empty($options['data']) || $options['methode'] == 'POST') {
return recuperer_url($url, $options);
}
@@ -735,8 +770,7 @@
$res = false;
$is_cached = file_exists($cache);
if (
- $is_cached
- and (filemtime($cache) > $_SERVER['REQUEST_TIME'] - $options['delai_cache'])
+ $is_cached && filemtime($cache) > $_SERVER['REQUEST_TIME'] - $options['delai_cache']
) {
lire_fichier($cache, $res);
if ($res = unserialize($res)) {
@@ -784,7 +818,7 @@
include_spip('inc/acces');
$tmpfile = "$fichier." . creer_uniqid() . '.tmp';
$fp = spip_fopen_lock($tmpfile, 'w', LOCK_EX);
- if (!$fp and file_exists($fichier)) {
+ if (!$fp && file_exists($fichier)) {
return filesize($fichier);
}
if (!$fp) {
@@ -903,7 +937,7 @@
* Extension du fichier
* @return string
* Nom du fichier pour copie locale
- **/
+ */
function nom_fichier_copie_locale($source, $extension) {
include_spip('inc/documents');
@@ -951,7 +985,7 @@
* @return string|null
* - string: Nom du fichier calculé
* - null: Copie locale impossible
- **/
+ */
function fichier_copie_locale($source) {
// Si c'est deja local pas de souci
if (!tester_url_absolue($source)) {
@@ -966,20 +1000,17 @@
// a deja ete copie en local avec cette extension
// dans ce cas elle est fiable, pas la peine de requeter en base
$path_parts = pathinfo($source);
- if (!isset($path_parts['extension'])) {
- $path_parts['extension'] = '';
- }
+ $path_parts['extension'] ??= '';
$ext = $path_parts ? $path_parts['extension'] : '';
if (
$ext
- and preg_match(',^\w+$,', $ext) // pas de php?truc=1&...
- and $f = nom_fichier_copie_locale($source, $ext)
- and file_exists(_DIR_RACINE . $f)
+ && preg_match(',^\w+$,', $ext)
+ && ($f = nom_fichier_copie_locale($source, $ext))
+ && file_exists(_DIR_RACINE . $f)
) {
return $f;
}
-
// Si c'est deja dans la table des documents,
// ramener le nom de sa copie potentielle
$ext = sql_getfetsel('extension', 'spip_documents', 'fichier=' . sql_quote($source) . " AND distant='oui' AND extension <> ''");
@@ -993,7 +1024,7 @@
$ext = $path_parts ? $path_parts['extension'] : '';
- if ($ext and sql_getfetsel('extension', 'spip_types_documents', 'extension=' . sql_quote($ext))) {
+ if ($ext && sql_getfetsel('extension', 'spip_types_documents', 'extension=' . sql_quote($ext))) {
$f = nom_fichier_copie_locale($source, $ext);
if (file_exists(_DIR_RACINE . $f)) {
return $f;
@@ -1006,14 +1037,14 @@
$cache = sous_repertoire(_DIR_CACHE, 'rid') . md5($source);
if (
!@file_exists($cache)
- or !$path_parts = @unserialize(spip_file_get_contents($cache))
- or _request('var_mode') === 'recalcul'
+ || !($path_parts = @unserialize(spip_file_get_contents($cache)))
+ || _request('var_mode') === 'recalcul'
) {
$path_parts = recuperer_infos_distantes($source, ['charger_si_petite_image' => false]);
ecrire_fichier($cache, serialize($path_parts));
}
$ext = !empty($path_parts['extension']) ? $path_parts['extension'] : '';
- if ($ext and sql_getfetsel('extension', 'spip_types_documents', 'extension=' . sql_quote($ext))) {
+ if ($ext && sql_getfetsel('extension', 'spip_types_documents', 'extension=' . sql_quote($ext))) {
return nom_fichier_copie_locale($source, $ext);
}
@@ -1021,7 +1052,6 @@
return null;
}
-
/**
* Récupérer les infos d'un document distant, sans trop le télécharger
*
@@ -1044,7 +1074,7 @@
* - 'extension' = chaine
* - 'fichier' = chaine
* - 'mime_type' = chaine
- **/
+ */
function recuperer_infos_distantes($source, $options = []) {
// pas la peine de perdre son temps
@@ -1053,7 +1083,7 @@
}
$taille_max = $options['taille_max'] ?? 0;
- $charger_si_petite_image = !!($options['charger_si_petite_image'] ?? true);
+ $charger_si_petite_image = (bool) ($options['charger_si_petite_image'] ?? true);
$callback_valider_url = $options['callback_valider_url'] ?? null;
# charger les alias des types mime
@@ -1070,8 +1100,8 @@
}
if (
$callback_valider_url
- and is_callable($callback_valider_url)
- and !$callback_valider_url($reponse['url'])
+ && is_callable($callback_valider_url)
+ && !$callback_valider_url($reponse['url'])
) {
return false;
}
@@ -1092,7 +1122,7 @@
}
// Echec avec HEAD, on tente avec GET
- if (!$a and !$taille_max) {
+ if (!$a && !$taille_max) {
spip_log("tenter GET $source", 'distant');
$options['taille_max'] = _INC_DISTANT_MAX_SIZE;
$a = recuperer_infos_distantes($source, $options);
@@ -1108,14 +1138,14 @@
include_spip('inc/filtres_images_lib_mini');
include_spip('inc/documents');
if (
- strpos($mime_type, 'image/') === 0
- and $extension = _image_trouver_extension_depuis_mime($mime_type)
+ str_starts_with($mime_type, 'image/')
+ && ($extension = _image_trouver_extension_depuis_mime($mime_type))
) {
if (
$taille_max == 0
- and (empty($a['taille']) or $a['taille'] < _INC_DISTANT_MAX_SIZE)
- and in_array($extension, formats_image_acceptables())
- and $charger_si_petite_image
+ && (empty($a['taille']) || $a['taille'] < _INC_DISTANT_MAX_SIZE)
+ && in_array($extension, formats_image_acceptables())
+ && $charger_si_petite_image
) {
$options['taille_max'] = _INC_DISTANT_MAX_SIZE;
$a = recuperer_infos_distantes($source, $options);
@@ -1136,8 +1166,7 @@
// ce sera mieux que 0x0
// Flash is dead!
if (
- $a and isset($a['extension']) and $a['extension'] == 'swf'
- and empty($a['largeur'])
+ $a && isset($a['extension']) && $a['extension'] == 'swf' && empty($a['largeur'])
) {
$a['largeur'] = 425;
$a['hauteur'] = 350;
@@ -1150,7 +1179,7 @@
if (preg_match(',(.*?) ,ims', $page, $regs)) {
$a['titre'] = corriger_caracteres(trim($regs[1]));
}
- if (!isset($a['taille']) or !$a['taille']) {
+ if (!isset($a['taille']) || !$a['taille']) {
$a['taille'] = strlen($page); # a peu pres
}
}
@@ -1278,15 +1307,13 @@
$http_proxy ??= $GLOBALS['meta']['http_proxy'] ?? null;
// rien a faire si pas de proxy :)
- if (is_null($http_proxy) or !$http_proxy = trim($http_proxy)) {
+ if ($http_proxy === null || !($http_proxy = trim($http_proxy))) {
return '';
}
- if (is_null($http_noproxy)) {
- $http_noproxy = $GLOBALS['meta']['http_noproxy'] ?? null;
- }
+ $http_noproxy ??= $GLOBALS['meta']['http_noproxy'] ?? null;
// si pas d'exception, on retourne le proxy
- if (is_null($http_noproxy) or !$http_noproxy = trim($http_noproxy)) {
+ if ($http_noproxy === null || !($http_noproxy = trim($http_noproxy))) {
return $http_proxy;
}
@@ -1297,17 +1324,17 @@
$http_noproxy = " $http_noproxy ";
$domain = $host;
// si le domaine exact www.example.org est dans les exceptions
- if (strpos($http_noproxy, (string) " $domain ") !== false) {
+ if (str_contains($http_noproxy, (string) " $domain ")) {
return '';
}
- while (strpos($domain, '.') !== false) {
+ while (str_contains($domain, '.')) {
$domain = explode('.', $domain);
array_shift($domain);
$domain = implode('.', $domain);
// ou si un domaine parent commencant par un . est dans les exceptions (indiquant qu'il couvre tous les sous-domaines)
- if (strpos($http_noproxy, (string) " .$domain ") !== false) {
+ if (str_contains($http_noproxy, (string) " .$domain ")) {
return '';
}
}
@@ -1316,7 +1343,6 @@
return $http_proxy;
}
-
/**
* Initialise une requete HTTP avec entetes
*
@@ -1359,7 +1385,7 @@
}
if (isset($t['user'])) {
// user et pass doivent être passés en urlencodé dans l'URL, on redecode ici
- $user = [urldecode($t['user']), urldecode($t['pass'])];
+ $user = [urldecode($t['user']), urldecode($t['pass'] ?? '')];
}
if (!isset($t['port']) || !($port = $t['port'])) {
@@ -1374,14 +1400,14 @@
}
$f = lance_requete($method, $scheme, $user, $host, $path, $port, $noproxy, $refuse_gz, $referer, $datas, $vers, $date);
- if (!$f or !is_resource($f)) {
+ if (!$f || !is_resource($f)) {
// fallback : fopen si on a pas fait timeout dans lance_requete
// ce qui correspond a $f===110
if (
$f !== 110
- and !need_proxy($host)
- and !_request('tester_proxy')
- and (!isset($GLOBALS['inc_distant_allow_fopen']) or $GLOBALS['inc_distant_allow_fopen'])
+ && !need_proxy($host)
+ && !_request('tester_proxy')
+ && (!isset($GLOBALS['inc_distant_allow_fopen']) || $GLOBALS['inc_distant_allow_fopen'])
) {
$f = @fopen($url, 'rb');
spip_log("connexion vers $url par simple fopen", 'distant');
@@ -1449,13 +1475,13 @@
$connect = '';
if ($http_proxy) {
- if (!defined('_PROXY_HTTPS_NOT_VIA_CONNECT') and in_array($scheme, ['tls','ssl'])) {
+ if (!defined('_PROXY_HTTPS_NOT_VIA_CONNECT') && in_array($scheme, ['tls', 'ssl'])) {
$path_host = (!$user ? '' : "$user@") . $host . (($port != 80) ? ":$port" : '');
$connect = 'CONNECT ' . $path_host . " $vers\r\n"
. "Host: $path_host\r\n"
. "Proxy-Connection: Keep-Alive\r\n";
} else {
- $path = (in_array($scheme, ['tls','ssl']) ? 'https://' : "$scheme://")
+ $path = (in_array($scheme, ['tls', 'ssl']) ? 'https://' : "$scheme://")
. (!$user ? '' : "$user@")
. "$host" . (($port != 80) ? ":$port" : '') . $path;
}
@@ -1477,7 +1503,7 @@
'allow_self_signed' => true,
'SNI_enabled' => true,
'peer_name' => $host,
- ]
+ ],
]);
$f = @stream_socket_client(
"tcp://$first_host:$first_port",
@@ -1498,9 +1524,7 @@
fputs($f, "\r\n");
$res = fread($f, 1024);
if (
- !$res
- or !count($res = explode(' ', $res))
- or $res[1] !== '200'
+ !$res || !count($res = explode(' ', $res)) || $res[1] !== '200'
) {
spip_log("Echec CONNECT sur $first_host:$first_port", 'connect' . _LOG_INFO_IMPORTANTE);
fclose($f);
@@ -1516,7 +1540,7 @@
$ntry = 3;
do {
$f = @fsockopen($first_host, $first_port, $errno, $errstr, _INC_DISTANT_CONNECT_TIMEOUT);
- } while (!$f and $ntry-- and $errno !== 110 and sleep(1));
+ } while (!$f && $ntry-- && $errno !== 110 && sleep(1));
spip_log("Recuperer $path sur $first_host:$first_port par $f");
if (!$f) {
spip_log("Erreur connexion $errno $errstr", 'distant' . _LOG_ERREUR);
@@ -1529,7 +1553,7 @@
$site = $GLOBALS['meta']['adresse_site'] ?? '';
$host_port = $host;
- if ($port != (in_array($scheme, ['tls','ssl']) ? 443 : 80)) {
+ if ($port != (in_array($scheme, ['tls', 'ssl']) ? 443 : 80)) {
$host_port .= ":$port";
}
$req = "$method $path $vers\r\n"
@@ -1542,7 +1566,7 @@
. ($proxy_user ? "Proxy-Authorization: Basic $proxy_user\r\n" : '')
. (strpos($vers, '1.1') ? "Keep-Alive: 300\r\nConnection: keep-alive\r\n" : '');
-# spip_log("Requete\n$req", 'distant');
+ # spip_log("Requete\n$req", 'distant');
fputs($f, $req);
fputs($f, $datas ?: "\r\n");
diff -Nru spip-4.4.23+dfsg/ecrire/inc/documents.php spip-4.4.28+dfsg/ecrire/inc/documents.php
--- spip-4.4.23+dfsg/ecrire/inc/documents.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/inc/documents.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,22 +1,19 @@
['fichier' => $fichier_demande], 'data' => $fichier]);
+ $fichier = _DIR_IMG . $fichier;
+
+ $fichier = pipeline('get_spip_doc', [
+ 'args' => [
+ 'fichier' => $fichier_demande,
+ ],
+ 'data' => $fichier,
+ ]);
// fichier normal
return $fichier;
@@ -87,7 +100,7 @@
function creer_repertoire_documents($ext) {
$rep = sous_repertoire(_DIR_IMG, $ext);
- if (!$ext or !$rep) {
+ if (!$ext || !$rep) {
spip_log("creer_repertoire_documents '$rep' interdit");
exit;
}
@@ -97,8 +110,8 @@
// sauf pour logo/ utilise pour stocker les logoon et logooff
if (
isset($GLOBALS['meta']['creer_htaccess'])
- and $GLOBALS['meta']['creer_htaccess'] == 'oui'
- and $ext !== 'logo'
+ && $GLOBALS['meta']['creer_htaccess'] == 'oui'
+ && $ext !== 'logo'
) {
include_spip('inc/acces');
verifier_htaccess($rep);
@@ -119,8 +132,7 @@
spip_unlink("$nom/$f");
} else {
if (
- $f <> '.' and $f <> '..'
- and is_dir("$nom/$f")
+ $f != '.' && $f != '..' && is_dir("$nom/$f")
) {
effacer_repertoire_temporaire("$nom/$f");
}
@@ -131,7 +143,6 @@
@rmdir($nom);
}
-//
/**
* Copier un document `$source`
* dans un dossier `IMG/$ext/$orig.$ext` ou `IMG/$subdir/$orig.$ext` si `$subdir` est fourni
@@ -160,13 +171,12 @@
while (preg_match(',\.(\w+)$,', $dest, $m)) {
if (
!function_exists('verifier_upload_autorise')
- or !$r = verifier_upload_autorise($dest)
- or (!empty($r['autozip']))
+ || !($r = verifier_upload_autorise($dest))
+ || !empty($r['autozip'])
) {
$dest = substr($dest, 0, -strlen($m[0])) . '_' . $m[1];
break;
- }
- else {
+ } else {
$dest = substr($dest, 0, -strlen($m[0]));
$ext = $m[1] . '.' . $ext;
}
@@ -180,7 +190,7 @@
// sinon tourner jusqu'a trouver un numero correct
$n = 0;
while (@file_exists($newFile = $dir . $dest . ($n++ ? ('-' . $n) : '') . '.' . $ext)) {
- ;
+
}
return deplacer_fichier_upload($source, $newFile);
@@ -204,9 +214,9 @@
if (
!autoriser('chargerftp')
- or $type == 'logos'
+ || $type == 'logos'
) { # on ne le permet pas pour les logos
- return false;
+ return false;
}
$repertoire = _DIR_TRANSFERT;
@@ -239,7 +249,7 @@
*/
function deplacer_fichier_upload($source, $dest, $move = false) {
// Securite
- if (substr($dest, 0, strlen(_DIR_RACINE)) == _DIR_RACINE) {
+ if (str_starts_with($dest, _DIR_RACINE)) {
$dest = _DIR_RACINE . preg_replace(',\.\.+,', '.', substr($dest, strlen(_DIR_RACINE)));
} else {
$dest = preg_replace(',\.\.+,', '.', $dest);
@@ -269,7 +279,6 @@
return $ok ? $dest : false;
}
-
/**
* Erreurs d'upload
*
@@ -281,10 +290,10 @@
* Explication sur les messages d'erreurs de chargement de fichiers.
* @uses propre()
* @global string $spip_lang_right
- * @param integer $error
+ * @param int $error
* @param string $msg
* @param bool $return
- * @return boolean|string
+ * @return bool|string
*/
function check_upload_error($error, $msg = '', $return = false) {
@@ -298,7 +307,7 @@
case 4: /* UPLOAD_ERR_NO_FILE */
return true;
- # on peut affiner les differents messages d'erreur
+ # on peut affiner les differents messages d'erreur
case 1: /* UPLOAD_ERR_INI_SIZE */
$msg = _T(
'upload_limit',
@@ -311,7 +320,7 @@
['max' => ini_get('upload_max_filesize')]
);
break;
- case 3: /* UPLOAD_ERR_PARTIAL */
+ case 3: /* UPLOAD_ERR_PARTIAL */
$msg = _T(
'upload_limit',
['max' => ini_get('upload_max_filesize')]
diff -Nru spip-4.4.23+dfsg/ecrire/inc/drapeau_edition.php spip-4.4.28+dfsg/ecrire/inc/drapeau_edition.php
--- spip-4.4.23+dfsg/ecrire/inc/drapeau_edition.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/inc/drapeau_edition.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,13 +1,13 @@
join(' | ', $auteurs),
- 'date_diff' => ceil((time() - $quand) / 60)
+ 'date_diff' => ceil((time() - $quand) / 60),
];
}
return [];
@@ -201,8 +198,8 @@
foreach ($data as $id => $auteurs) {
if (
isset($auteurs[$id_auteur])
- and is_array($auteurs[$id_auteur]) // precaution
- and (array_pop($auteurs[$id_auteur]) > time() - 3600)
+ && is_array($auteurs[$id_auteur])
+ && array_pop($auteurs[$id_auteur]) > time() - 3600
) {
$objets_ouverts[] = [
'objet' => $objet,
@@ -221,8 +218,7 @@
* @uses lire_tableau_edition()
* @uses ecrire_tableau_edition()
*
- * @param integer $id_auteur
- * @return void
+ * @param int $id_auteur
*/
function debloquer_tous($id_auteur): void {
$edition = lire_tableau_edition();
@@ -242,13 +238,12 @@
* @uses lire_tableau_edition()
* @uses ecrire_tableau_edition()
*
- * @param integer $id_auteur
+ * @param int $id_auteur
* Identifiant de l'auteur
- * @param integer $id_objet
+ * @param int $id_objet
* Identifiant de l'objet édité
* @param string $type
* Type de l'objet
- * @return void
*/
function debloquer_edition($id_auteur, $id_objet, $type = 'article'): void {
$edition = lire_tableau_edition();
@@ -257,8 +252,7 @@
if ($objet == $type) {
foreach ($data as $id => $auteurs) {
if (
- $id == $id_objet
- and isset($auteurs[$id_auteur])
+ $id == $id_objet && isset($auteurs[$id_auteur])
) {
unset($edition[$objet][$id][$id_auteur]);
ecrire_tableau_edition($edition);
diff -Nru spip-4.4.23+dfsg/ecrire/inc/editer.php spip-4.4.28+dfsg/ecrire/inc/editer.php
--- spip-4.4.23+dfsg/ecrire/inc/editer.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/inc/editer.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,20 +1,17 @@
' . substr($retour, 11) . '';
$res['editable'] = true;
} else {
@@ -129,26 +126,22 @@
* Liste de champs obligatoires : ils doivent avoir un contenu posté.
* @return array
* Tableau des erreurs
- **/
+ */
function formulaires_editer_objet_verifier($type, $id = 'new', $oblis = []) {
$erreurs = [];
if (intval($id)) {
$conflits = controler_contenu($type, $id);
- if ($conflits and is_countable($conflits) ? count($conflits) : 0) {
+ if ($conflits && (is_countable($conflits) ? count($conflits) : 0)) {
foreach ($conflits as $champ => $conflit) {
- if (!isset($erreurs[$champ])) {
- $erreurs[$champ] = '';
- }
+ $erreurs[$champ] ??= '';
$erreurs[$champ] .= _T('alerte_modif_info_concourante') . " ';
}
}
}
foreach ($oblis as $obli) {
$value = _request($obli);
- if (is_null($value) or !(is_array($value) ? count($value) : strlen($value))) {
- if (!isset($erreurs[$obli])) {
- $erreurs[$obli] = '';
- }
+ if ($value === null || !(is_array($value) ? count($value) : strlen($value))) {
+ $erreurs[$obli] ??= '';
$erreurs[$obli] .= _T('info_obligatoire');
}
}
@@ -196,7 +189,7 @@
* du formulaire.
* @return array
* Environnement du formulaire.
- **/
+ */
function formulaires_editer_objet_charger(
$type,
$id = 'new',
@@ -218,12 +211,12 @@
// on accepte pas une fonction de config inconnue si elle vient d'un modele
if (
$config_fonc
- and !in_array($config_fonc, ['articles_edit_config', 'rubriques_edit_config', 'auteurs_edit_config'])
- and $config_fonc !== $table_objet . '_edit_config'
+ && !in_array($config_fonc, ['articles_edit_config', 'rubriques_edit_config', 'auteurs_edit_config'])
+ && $config_fonc !== $table_objet . '_edit_config'
) {
if (
- $args = test_formulaire_inclus_par_modele()
- and in_array($config_fonc, $args)
+ ($args = test_formulaire_inclus_par_modele())
+ && in_array($config_fonc, $args)
) {
$config_fonc = '';
}
@@ -233,7 +226,7 @@
$lang_default = '';
// Appel direct dans un squelette
if (!$row) {
- if (!$new or $lier_trad) {
+ if (!$new || $lier_trad) {
if ($select = charger_fonction('precharger_' . $type, 'inc', true)) {
$row = $select($id, $id_parent, $lier_trad);
// si on a une fonction precharger, elle pu faire un reglage de langue
@@ -258,13 +251,13 @@
// Gaffe: sans ceci, on ecrase systematiquement l'article d'origine
// (et donc: pas de lien de traduction)
- $id = ($new or $lier_trad)
+ $id = ($new || $lier_trad)
? 'oui'
: $row[$id_table_objet];
$row[$id_table_objet] = $id;
$contexte = $row;
- if (is_numeric($id_parent) && strlen($id_parent) && (!isset($contexte['id_parent']) or $new)) {
+ if (is_numeric($id_parent) && strlen($id_parent) && (!isset($contexte['id_parent']) || $new)) {
if (!isset($contexte['id_parent'])) {
unset($contexte['id_rubrique']);
}
@@ -279,7 +272,7 @@
}
if (
!$contexte['id_parent']
- and $preselectionner_parent_nouvel_objet = charger_fonction('preselectionner_parent_nouvel_objet', 'inc', true)
+ && ($preselectionner_parent_nouvel_objet = charger_fonction('preselectionner_parent_nouvel_objet', 'inc', true))
) {
$contexte['id_parent'] = $preselectionner_parent_nouvel_objet($type, $row);
}
@@ -290,10 +283,10 @@
$contexte['config'] = $config = $config_fonc($contexte);
if (!$lang_default) {
include_spip('inc/session');
- $lang_default = $config['langue'] ?? session_get('lang') ;
+ $lang_default = $config['langue'] ?? session_get('lang');
}
}
- $config = $config + [
+ $config += [
'lignes' => 0,
'langue' => '',
];
@@ -303,7 +296,6 @@
. ($config['lignes'] + 15)
. "' cols='40'";
-
// on veut conserver la langue de l'interface ;
// on passe cette donnee sous un autre nom, au cas ou le squelette
// voudrait l'exploiter
@@ -337,8 +329,7 @@
if (!autoriser('modifier', $type, intval($id))) {
$contexte['editable'] = '';
}
- }
- else {
+ } else {
if (!autoriser('creer', $type, 0, null, ['id_parent' => $id_parent])) {
$contexte['editable'] = '';
}
@@ -359,12 +350,12 @@
if (strlen($texte) > 28 * 1024) {
$texte = str_replace("\r\n", "\n", $texte);
$pos = strpos($texte, "\n\n", 28 * 1024); // coupe para > 28 ko
- if ($pos > 0 and $pos < 32 * 1024) {
+ if ($pos > 0 && $pos < 32 * 1024) {
$debut = substr($texte, 0, $pos) . "\n\n\n";
$suite = substr($texte, $pos + 2);
} else {
$pos = strpos($texte, ' ', 28 * 1024); // sinon coupe espace
- if (!($pos > 0 and $pos < 32 * 1024)) {
+ if (!($pos > 0 && $pos < 32 * 1024)) {
$pos = 28 * 1024; // au pire (pas d'espace trouv'e)
$decalage = 0; // si y'a pas d'espace, il ne faut pas perdre le caract`ere
} else {
@@ -374,23 +365,21 @@
$suite = substr($texte, $pos + $decalage);
}
- return ([$debut, $suite]);
+ return [$debut, $suite];
} else {
- return ([$texte, '']);
+ return [$texte, ''];
}
}
/**
* auto-renseigner le titre si il n'existe pas
*
- * @param $champ_titre
- * @param $champs_contenu
* @param int $longueur
*/
function titre_automatique($champ_titre, $champs_contenu, $longueur = null) {
if (!_request($champ_titre)) {
$titrer_contenu = charger_fonction('titrer_contenu', 'inc');
- if (!is_null($longueur)) {
+ if ($longueur !== null) {
$t = $titrer_contenu($champs_contenu, null, $longueur);
} else {
$t = $titrer_contenu($champs_contenu);
@@ -451,7 +440,7 @@
* @return string|array
* - string (avec format html) : contrôles dans des input hidden
* - array sinon couples ('$prefixe$colonne => md5)
- **/
+ */
function controles_md5(array $data, string $prefixe = 'ctr_', string $format = 'html') {
$ctr = [];
foreach ($data as $key => $val) {
@@ -509,7 +498,7 @@
* la valeur un tableau avec 2 index :
* - base : le contenu du champ en base
* - post : le contenu posté
- **/
+ */
function controler_contenu($type, $id, $options = [], $c = false, $serveur = '') {
include_spip('inc/filtres');
@@ -539,7 +528,7 @@
unset($c['id_secteur']);
// Gerer les champs non vides
- if (isset($options['nonvide']) and is_array($options['nonvide'])) {
+ if (isset($options['nonvide']) && is_array($options['nonvide'])) {
foreach ($options['nonvide'] as $champ => $sinon) {
if ($c[$champ] === '') {
$c[$champ] = $sinon;
@@ -574,7 +563,7 @@
'action' => 'controler',
'serveur' => $serveur,
],
- 'data' => $champs
+ 'data' => $champs,
]
);
@@ -588,7 +577,6 @@
return $conflits;
}
-
/**
* Contrôle la liste des md5 envoyés, supprime les inchangés,
* signale les modifiés depuis telle date
@@ -613,7 +601,7 @@
* la valeur un tableau avec 2 index :
* - base : le contenu du champ en base
* - post : le contenu posté
- **/
+ */
function controler_md5(&$champs, $ctr, $type, $id, $serveur, $prefix = 'ctr_') {
$spip_table_objet = table_objet_sql($type);
$id_table_objet = id_table_objet($type);
@@ -622,8 +610,8 @@
// On elimine les donnees non modifiees par le formulaire (mais
// potentiellement modifiees entre temps par un autre utilisateur)
foreach ($champs as $key => $val) {
- if (isset($ctr[$prefix . $key]) and $m = $ctr[$prefix . $key]) {
- if (is_scalar($val) and $m == md5($val)) {
+ if (isset($ctr[$prefix . $key]) && ($m = $ctr[$prefix . $key])) {
+ if (is_scalar($val) && $m == md5($val)) {
unset($champs[$key]);
}
}
@@ -651,7 +639,7 @@
// de conflit.
$ctrh = $ctrq = $conflits = [];
foreach (array_keys($champs) as $key) {
- if (isset($ctr[$prefix . $key]) and $m = $ctr[$prefix . $key]) {
+ if (isset($ctr[$prefix . $key]) && ($m = $ctr[$prefix . $key])) {
$ctrh[$key] = $m;
$ctrq[] = $key;
}
@@ -660,12 +648,11 @@
$ctrq = sql_fetsel($ctrq, $spip_table_objet, "$id_table_objet=$id", $serveur);
foreach ($ctrh as $key => $m) {
if (
- $m != md5($ctrq[$key])
- and $champs[$key] !== $ctrq[$key]
+ $m != md5($ctrq[$key]) && $champs[$key] !== $ctrq[$key]
) {
$conflits[$key] = [
'base' => $ctrq[$key],
- 'post' => $champs[$key]
+ 'post' => $champs[$key],
];
unset($champs[$key]); # stocker quand meme les modifs ?
}
@@ -681,12 +668,12 @@
*
* @param string $x
* texte à afficher
- * @return string
*/
-function display_conflit_champ($x) {
- if (strstr($x, "\n") or strlen($x) > 80) {
+function display_conflit_champ($x): string {
+ $x = (string) $x;
+ if (str_contains($x, "\n") || strlen($x) > 80) {
return "\n";
- } else {
- return " \n";
}
+
+ return " \n";
}
diff -Nru spip-4.4.23+dfsg/ecrire/inc/email_valide.php spip-4.4.28+dfsg/ecrire/inc/email_valide.php
--- spip-4.4.23+dfsg/ecrire/inc/email_valide.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/inc/email_valide.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,25 +1,21 @@
"
- $adresse = trim(preg_replace(',^[^<>"]*<([^<>"]+)>$,i', "\\1", $v));
+ $adresse = trim(preg_replace(',^[^<>"]*<([^<>"]+)>$,i', '\\1', $v));
// RFC 822
if (!preg_match('#^[^()<>@,;:\\"/[:space:]]+(@([-_0-9a-z]+\.)*[-_0-9a-z]+)$#i', $adresse)) {
return false;
diff -Nru spip-4.4.23+dfsg/ecrire/inc/envoyer_mail.php spip-4.4.28+dfsg/ecrire/inc/envoyer_mail.php
--- spip-4.4.23+dfsg/ecrire/inc/envoyer_mail.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/inc/envoyer_mail.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,19 +1,17 @@
'utf-8') {
+ if ($GLOBALS['meta']['charset'] != 'utf-8') {
$t = str_replace(
['’', '“', '”'],
["'", '"', '"'],
@@ -120,7 +118,7 @@
if (is_array($headers)) {
$headers = implode("\n", $headers);
}
- if (isset($corps['pieces_jointes']) and function_exists('mail_embarquer_pieces_jointes')) {
+ if (isset($corps['pieces_jointes']) && function_exists('mail_embarquer_pieces_jointes')) {
$parts = mail_embarquer_pieces_jointes($corps['pieces_jointes']);
}
} else {
@@ -152,7 +150,7 @@
mb_internal_encoding('utf-8');
}
- $headers = $headers ?? '';
+ $headers ??= '';
if (function_exists('wordwrap') && (preg_match(',multipart/mixed,', $headers) == 0)) {
$texte = wordwrap($texte);
}
@@ -193,7 +191,7 @@
$charset = $GLOBALS['meta']['charset'];
// Ajouter le Content-Type et consort s'il n'y est pas deja
- if (strpos($headers, 'Content-Type: ') === false) {
+ if (!str_contains($headers, 'Content-Type: ')) {
$type =
"Content-Type: text/plain;charset=\"$charset\";\n" .
"Content-Transfer-Encoding: 8bit\n";
@@ -205,8 +203,7 @@
// Marie Toto => @toto.com
if (preg_match('/@[^\s>]+/', $from, $domain)) {
$domain = $domain[0];
- }
- else {
+ } else {
$domain = '@unknown-' . md5($from) . '.org';
}
$uniq = random_int(0, mt_getrandmax()) . '_' . md5($to . $texte) . $domain;
@@ -231,7 +228,7 @@
// indispensable pour les sites qui collent d'office From: serveur-http
// sauf si deja mis par l'envoyeur
- $rep = (strpos($headers, 'Reply-To:') !== false) ? '' : "Reply-To: $from\n";
+ $rep = (str_contains($headers, 'Reply-To:')) ? '' : "Reply-To: $from\n";
// Nettoyer les en-tetes envoyees
// Ajouter le \n final
diff -Nru spip-4.4.23+dfsg/ecrire/inc/exif.php spip-4.4.28+dfsg/ecrire/inc/exif.php
--- spip-4.4.23+dfsg/ecrire/inc/exif.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/inc/exif.php 2026-10-07 13:48:22.000000000 +0000
@@ -13,10 +13,7 @@
* Fonctions utilitaires liées aux données EXIF accompagnant certaines images JPEG ou TIFF.
* On se limite aux seuls fichiers supportés à ce jour — octobre 2024 — par le module EXIF de PHP
* même si l'on peut trouver des données EXIF dans d'autres formats, notamment le PNG — cf. https://bugs.php.net/bug.php?id=76279)
- *
- * @package SPIP\Core\Exif
*/
-
function exif_lire(string $fichier): ?array {
include_spip('inc/filtres_images_lib_mini');
diff -Nru spip-4.4.23+dfsg/ecrire/inc/exporter_csv.php spip-4.4.28+dfsg/ecrire/inc/exporter_csv.php
--- spip-4.4.23+dfsg/ecrire/inc/exporter_csv.php 2026-09-02 11:56:18.000000000 +0000
+++ spip-4.4.28+dfsg/ecrire/inc/exporter_csv.php 2026-10-07 13:48:22.000000000 +0000
@@ -1,20 +1,17 @@
xx, 'commit' => yy] sinon.
- **/
+ */
function decrire_version_git($dir) {
if (!$dir) {
$dir = '.';
@@ -266,12 +263,12 @@
// La matrice est necessaire pour ne filtrer _que_ des fonctions definies dans filtres_images
// et laisser passer les fonctions personnelles baptisees image_...
-$GLOBALS['spip_matrice']['image_graver'] = true;//'inc/filtres_images_mini.php';
-$GLOBALS['spip_matrice']['image_select'] = true;//'inc/filtres_images_mini.php';
-$GLOBALS['spip_matrice']['image_reduire'] = true;//'inc/filtres_images_mini.php';
-$GLOBALS['spip_matrice']['image_reduire_par'] = true;//'inc/filtres_images_mini.php';
-$GLOBALS['spip_matrice']['image_passe_partout'] = true;//'inc/filtres_images_mini.php';
-$GLOBALS['spip_matrice']['image_recadre_avec_fallback'] = true;//'inc/filtres_images_mini.php';
+$GLOBALS['spip_matrice']['image_graver'] = true; // 'inc/filtres_images_mini.php';
+$GLOBALS['spip_matrice']['image_select'] = true; // 'inc/filtres_images_mini.php';
+$GLOBALS['spip_matrice']['image_reduire'] = true; // 'inc/filtres_images_mini.php';
+$GLOBALS['spip_matrice']['image_reduire_par'] = true; // 'inc/filtres_images_mini.php';
+$GLOBALS['spip_matrice']['image_passe_partout'] = true; // 'inc/filtres_images_mini.php';
+$GLOBALS['spip_matrice']['image_recadre_avec_fallback'] = true; // 'inc/filtres_images_mini.php';
$GLOBALS['spip_matrice']['couleur_html_to_hex'] = 'inc/filtres_images_mini.php';
$GLOBALS['spip_matrice']['couleur_hex_to_hsl'] = 'inc/filtres_images_mini.php';
@@ -291,7 +288,6 @@
$GLOBALS['spip_matrice']['filtre_text_html_dist'] = 'inc/filtres_mime.php';
$GLOBALS['spip_matrice']['filtre_audio_x_pn_realaudio'] = 'inc/filtres_mime.php';
-
/**
* Charge et exécute un filtre (graphique ou non)
*
@@ -306,12 +302,13 @@
* Nom du filtre à appliquer
* @return string
* Code HTML retourné par le filtre
- **/
+ */
function filtrer($filtre) {
$tous = func_get_args();
- if (trouver_filtre_matrice($filtre) and substr($filtre, 0, 6) == 'image_') {
+ if (trouver_filtre_matrice($filtre) && str_starts_with($filtre, 'image_')) {
return image_filtrer($tous);
- } elseif ($f = chercher_filtre($filtre)) {
+ }
+ if ($f = chercher_filtre($filtre)) {
array_shift($tous);
return $f(...$tous);
} else {
@@ -336,14 +333,13 @@
* @return bool true si on trouve le filtre dans la matrice, false sinon.
*/
function trouver_filtre_matrice($filtre) {
- if (isset($GLOBALS['spip_matrice'][$filtre]) and is_string($f = $GLOBALS['spip_matrice'][$filtre])) {
+ if (isset($GLOBALS['spip_matrice'][$filtre]) && is_string($f = $GLOBALS['spip_matrice'][$filtre])) {
find_in_path($f, '', true);
$GLOBALS['spip_matrice'][$filtre] = true;
}
return !empty($GLOBALS['spip_matrice'][$filtre]);
}
-
/**
* Filtre `set` qui sauve la valeur en entrée dans une variable
*
@@ -409,7 +405,6 @@
return '';
}
-
/**
* Filtre `debug` qui affiche un debug de la valeur en entrée
*
@@ -430,8 +425,8 @@
*/
function filtre_debug($val, $key = null) {
$debug = (
- is_null($key) ? '' : (var_export($key, true) . ' = ')
- ) . var_export($val, true);
+ $key === null ? '' : (var_export($key, true) . ' = ')
+ ) . var_export($val, true);
include_spip('inc/autoriser');
if (autoriser('webmestre')) {
@@ -443,7 +438,6 @@
return $val;
}
-
/**
* Exécute un filtre image
*
@@ -458,8 +452,6 @@
*
* Applique le filtre demande à chacune des occurrences
*
- * @param string $filtre
- * @param string|null $texte
* @param array $args
* Liste des arguments :
*
@@ -468,7 +460,7 @@
* - les suivants sont les arguments du filtre image souhaité.
* @return string
* texte qui a reçu les filtres
- **/
+ */
function image_filtrer($args) {
$filtre = array_shift($args); # enlever $filtre
$texte = array_shift($args);
@@ -480,15 +472,15 @@
// Cas du nom de fichier local
$is_file = trim($texte);
if (
- strpos(substr($is_file, strlen(_DIR_RACINE)), '..') !== false
- or strpbrk($is_file, "<>\n\r\t") !== false
- or strpos($is_file, '/') === 0
+ str_contains(substr($is_file, strlen(_DIR_RACINE)), '..')
+ || strpbrk($is_file, "<>\n\r\t") !== false
+ || str_starts_with($is_file, '/')
) {
$is_file = false;
}
if ($is_file) {
$is_local_file = function ($path) {
- if (strpos($path, '?') !== false) {
+ if (str_contains($path, '?')) {
$path = supprimer_timestamp($path);
// remove ?24px added by find_in_theme on .svg files
$path = preg_replace(',\?[[:digit:]]+(px)$,', '', $path);
@@ -517,19 +509,19 @@
trigger_deprecation('spip', '3.2', 'Using "%s" class is deprecated, use "%s" class instead', 'no_image_filtrer', 'filtre_inactif');
}
if (
- !$class or
- (!str_contains($class, 'filtre_inactif')
+ !$class
+ || !str_contains($class, 'filtre_inactif')
// compat historique a virer en 3.2
- and !str_contains($class, 'no_image_filtrer'))
+ && !str_contains($class, 'no_image_filtrer')
) {
if ($reduit = $filtre($tag[3], ...$args)) {
// En cas de span spip_documents, modifier le style=...width:
if ($tag[1]) {
$w = extraire_attribut($reduit, 'width');
- if (!$w and preg_match(',width:\s*(\d+)px,S', extraire_attribut($reduit, 'style'), $regs)) {
+ if (!$w && preg_match(',width:\s*(\d+)px,S', extraire_attribut($reduit, 'style'), $regs)) {
$w = $regs[1];
}
- if ($w and ($style = extraire_attribut($tag[1], 'style'))) {
+ if ($w && $style = extraire_attribut($tag[1], 'style')) {
$style = preg_replace(',width:\s*\d+px,S', "width:{$w}px", $style);
$replace = inserer_attribut($tag[1], 'style', $style);
$texte = str_replace($tag[1], $replace, $texte);
@@ -564,7 +556,7 @@
* largeur
* hauteur
* poids
- **/
+ */
function infos_image($img, $force_refresh = false) {
static $largeur_img = [], $hauteur_img = [], $poids_img = [];
@@ -579,7 +571,7 @@
} else {
$srcWidth = extraire_attribut($img, 'width');
$srcHeight = extraire_attribut($img, 'height');
- if (!ctype_digit(strval($srcWidth)) or !ctype_digit(strval($srcHeight))) {
+ if (!ctype_digit(strval($srcWidth)) || !ctype_digit(strval($srcHeight))) {
$srcWidth = $srcHeight = 0;
}
}
@@ -596,19 +588,19 @@
}
$imagesize = false;
- if (isset($largeur_img[$src]) and !$force_refresh) {
+ if (isset($largeur_img[$src]) && !$force_refresh) {
$srcWidth = $largeur_img[$src];
}
- if (isset($hauteur_img[$src]) and !$force_refresh) {
+ if (isset($hauteur_img[$src]) && !$force_refresh) {
$srcHeight = $hauteur_img[$src];
}
- if (isset($poids_img[$src]) and !$force_refresh) {
+ if (isset($poids_img[$src]) && !$force_refresh) {
$srcSize = $poids_img[$src];
}
- if (!$srcWidth or !$srcHeight or is_null($srcSize)) {
+ if (!$srcWidth || !$srcHeight || $srcSize === null) {
if (
file_exists($src)
- and $imagesize = spip_getimagesize($src)
+ && ($imagesize = spip_getimagesize($src))
) {
if (!$srcWidth) {
$largeur_img[$src] = $srcWidth = $imagesize[0];
@@ -619,8 +611,7 @@
if (!$srcSize) {
$poids_img[$src] = filesize($src);
}
- }
- elseif (strpos($src, '` ou chemin de l'image (qui peut être une URL distante).
* @return int|null
* Largeur en pixels, NULL ou 0 si aucune image.
- **/
+ */
function largeur($img) {
if (!$img) {
return;
@@ -713,7 +704,7 @@
* Balise HTML ` ` ou chemin de l'image (qui peut être une URL distante).
* @return int|null
* Hauteur en pixels, NULL ou 0 si aucune image.
- **/
+ */
function hauteur($img) {
if (!$img) {
return;
@@ -723,7 +714,6 @@
return $h;
}
-
/**
* Échappement des entités HTML avec correction des entités « brutes »
*
@@ -738,9 +728,9 @@
* @see corriger_toutes_entites_html()
* @param string $texte
* @return string
- **/
+ */
function corriger_entites_html($texte) {
- if (strpos($texte, '&') === false) {
+ if (!str_contains($texte, '&')) {
return $texte;
}
@@ -757,9 +747,9 @@
* @see corriger_entites_html()
* @param string $texte
* @return string
- **/
+ */
function corriger_toutes_entites_html($texte) {
- if (strpos($texte, '&') === false) {
+ if (!str_contains($texte, '&')) {
return $texte;
}
@@ -771,12 +761,11 @@
*
* @param string $texte
* @return string
- **/
+ */
function proteger_amp($texte) {
return str_replace('&', '&', $texte);
}
-
/**
* Échappe en entités HTML certains caractères d'un texte
*
@@ -787,7 +776,7 @@
* sans dommages.
*
* @filtre
- * @link https://www.spip.net/4280
+ * @see https://www.spip.net/4280
*
* @uses echappe_html()
* @uses echappe_retour()
@@ -805,8 +794,7 @@
*/
function entites_html($texte, $tout = false, $quote = true) {
if (
- !is_string($texte) or !$texte
- or strpbrk($texte, "&\"'<>") == false
+ !is_string($texte) || !$texte || strpbrk($texte, "&\"'<>") == false
) {
return $texte;
}
@@ -829,16 +817,16 @@
* sera transformé en `é`
*
* @filtre
- * @link https://www.spip.net/5513
+ * @see https://www.spip.net/5513
*
* @param string $texte
* texte à convertir
* @return string
* texte converti
- **/
+ */
function filtrer_entites(?string $texte): string {
$texte ??= '';
- if (strpos($texte, '&') === false) {
+ if (!str_contains($texte, '&')) {
return $texte;
}
// filtrer
@@ -847,14 +835,13 @@
$texte = unicode2charset($texte);
// cas particulier des " et ' qu'il faut filtrer aussi
// (on le faisait deja avec un ")
- if (strpos($texte, '') !== false) {
+ if (str_contains($texte, '')) {
$texte = str_replace([''', ''', '"', '"'], ["'", "'", '"', '"'], $texte);
}
return $texte;
}
-
if (!function_exists('filtre_filtrer_entites_dist')) {
/**
* Version sécurisée de filtrer_entites
@@ -871,17 +858,16 @@
}
}
-
/**
* Supprime des caractères illégaux
*
* Remplace les caractères de controle par le caractère `-`
*
- * @link http://www.w3.org/TR/REC-xml/#charsets
+ * @see http://www.w3.org/TR/REC-xml/#charsets
*
* @param string|array $texte
* @return string|array
- **/
+ */
function supprimer_caracteres_illegaux($texte) {
static $from = "\x0\x1\x2\x3\x4\x5\x6\x7\x8\xB\xC\xE\xF\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F";
static $to = null;
@@ -904,7 +890,7 @@
*
* @param string|array $texte
* @return string|array
- **/
+ */
function corriger_caracteres($texte) {
$texte = corriger_caracteres_windows($texte);
$texte = supprimer_caracteres_illegaux($texte);
@@ -918,7 +904,7 @@
* Ce filtre transforme les liens en liens absolus, importe les entitées html et échappe les tags html.
*
* @filtre
- * @link https://www.spip.net/4287
+ * @see https://www.spip.net/4287
*
* @param string|null $texte
* texte à transformer
@@ -954,7 +940,7 @@
$texte = charset2unicode($texte);
// Caracteres problematiques en iso-latin 1
- if (isset($GLOBALS['meta']['charset']) and $GLOBALS['meta']['charset'] == 'iso-8859-1') {
+ if (isset($GLOBALS['meta']['charset']) && $GLOBALS['meta']['charset'] == 'iso-8859-1') {
$texte = str_replace(chr(156), '', $texte);
$texte = str_replace(chr(140), '', $texte);
$texte = str_replace(chr(159), '', $texte);
@@ -983,14 +969,13 @@
return addslashes(texte_backend($texte));
}
-
/**
* Enlève un numéro préfixant un texte
*
* Supprime `10. ` dans la chaine `10. Titre`
*
* @filtre
- * @link https://www.spip.net/4314
+ * @see https://www.spip.net/4314
* @see recuperer_numero() Pour obtenir le numéro
* @example
* ```
@@ -1000,7 +985,7 @@
* Texte
* @return string
* Texte sans son numéro éventuel
- **/
+ */
function supprimer_numero(?string $texte): string {
if ($texte === null || $texte === '') {
return '';
@@ -1018,7 +1003,7 @@
* Récupère le numéro `10` dans la chaine `10. Titre`
*
* @filtre
- * @link https://www.spip.net/5514
+ * @see https://www.spip.net/5514
* @see supprimer_numero() Pour supprimer le numéro
* @see balise_RANG_dist() Pour obtenir un numéro de titre
* @example
@@ -1030,16 +1015,16 @@
* Texte
* @return string
* Numéro de titre, sinon chaîne vide
- **/
+ */
function recuperer_numero(?string $texte): string {
if ($texte === null || $texte === '') {
return '';
}
if (preg_match(
- ',^[[:space:]]*([0-9]+)([.)]|' . chr(194) . '?' . chr(176) . ')[[:space:]]+,S',
- $texte,
- $regs
- )
+ ',^[[:space:]]*([0-9]+)([.)]|' . chr(194) . '?' . chr(176) . ')[[:space:]]+,S',
+ $texte,
+ $regs
+ )
) {
return (string) $regs[1];
}
@@ -1054,7 +1039,7 @@
* Utilisé fréquemment pour écrire des RSS.
*
* @filtre
- * @link https://www.spip.net/4315
+ * @see https://www.spip.net/4315
* @example
* ```
* [(#TITRE|supprimer_tags|texte_backend)]
@@ -1069,7 +1054,7 @@
* Inutilisé.
* @return string|array
* texte ou tableau de textes converti
- **/
+ */
function supprimer_tags($texte, $rempl = '') {
if ($texte === null || $texte === '') {
return '';
@@ -1089,7 +1074,7 @@
* Transforme les chevrons de tag `<...>` en entité HTML.
*
* @filtre
- * @link https://www.spip.net/5515
+ * @see https://www.spip.net/5515
* @example
* ```
* [(#TEXTE|echapper_tags)]
@@ -1101,9 +1086,9 @@
* Inutilisé.
* @return string
* texte converti
- **/
+ */
function echapper_tags($texte, $rempl = '') {
- $texte = preg_replace('/<([^>]*)>/', "<\\1>", $texte);
+ $texte = preg_replace('/<([^>]*)>/', '<\\1>', $texte);
return $texte;
}
@@ -1114,7 +1099,7 @@
* Enlève les tags d'un code HTML, élimine les doubles espaces.
*
* @filtre
- * @link https://www.spip.net/4317
+ * @see https://www.spip.net/4317
* @example
* ```
* [(#TITRE|textebrut) - ][(#NOM_SITE_SPIP|textebrut)]
@@ -1124,14 +1109,14 @@
* texte à convertir
* @return string
* texte converti
- **/
+ */
function textebrut($texte) {
if ($texte === null || $texte === '') {
return '';
}
$u = $GLOBALS['meta']['pcre_u'];
$texte = preg_replace('/\s+/S' . $u, ' ', $texte);
- $texte = preg_replace('/<(p|br)( [^>]*)?' . '>/iS', "\n\n", $texte);
+ $texte = preg_replace('/<(p|br)( [^>]*)?>/iS', "\n\n", $texte);
$texte = preg_replace("/^\n+/", '', $texte);
$texte = preg_replace("/\n+$/", '', $texte);
$texte = preg_replace("/\n +/", "\n", $texte);
@@ -1143,18 +1128,17 @@
return $texte;
}
-
/**
* Remplace les liens SPIP en liens ouvrant dans une nouvelle fenetre (target=blank)
*
* @filtre
- * @link https://www.spip.net/4297
+ * @see https://www.spip.net/4297
*
* @param string $texte
* texte avec des liens
* @return string
* texte avec liens ouvrants
- **/
+ */
function liens_ouvrants($texte) {
if ($texte === null || $texte === '') {
return '';
@@ -1195,7 +1179,7 @@
if (preg_match_all(",]*>,UimsS", $texte, $regs, PREG_PATTERN_ORDER)) {
foreach ($regs[0] as $a) {
$rel = extraire_attribut($a, 'rel') ?? '';
- if (strpos($rel, 'nofollow') === false) {
+ if (!str_contains($rel, 'nofollow')) {
$rel = 'nofollow' . ($rel ? " $rel" : '');
$anofollow = inserer_attribut($a, 'rel', $rel);
$texte = str_replace($a, $anofollow, $texte);
@@ -1210,7 +1194,7 @@
* Transforme les sauts de paragraphe HTML `p` en simples passages à la ligne `br`
*
* @filtre
- * @link https://www.spip.net/4308
+ * @see https://www.spip.net/4308
* @example
* ```
* [(#DESCRIPTIF|PtoBR)[(#NOTES|PtoBR)]
]
@@ -1220,7 +1204,7 @@
* texte à transformer
* @return string
* texte sans paraghaphes
- **/
+ */
function PtoBR($texte) {
if ($texte === null || $texte === '') {
return '';
@@ -1231,7 +1215,6 @@
return preg_replace('@^\s* @S' . $u, '', $texte);
}
-
/**
* Assure qu'un texte ne vas pas déborder d'un bloc
* par la faute d'un mot trop long (souvent des URLs)
@@ -1244,12 +1227,12 @@
* un `div` ou `span` portant ce style CSS inline.
*
* @filtre
- * @link https://www.spip.net/4298
- * @link http://www.alsacreations.com/tuto/lire/1038-gerer-debordement-contenu-css.html
+ * @see https://www.spip.net/4298
+ * @see http://www.alsacreations.com/tuto/lire/1038-gerer-debordement-contenu-css.html
* @deprecated 3.1
* @see Utiliser le style CSS `word-wrap:break-word;`
*
- * @param string $texte texte
+ * @param string $texte
* @return string texte encadré du style CSS
*/
function lignes_longues($texte) {
@@ -1277,7 +1260,7 @@
* [(#EXTENSION|majuscules)]
* ```
*
- * @param string $texte texte
+ * @param string $texte
* @return string texte en majuscule
*/
function majuscules($texte) {
@@ -1352,7 +1335,7 @@
$affichage = _T(
'spip:taille_' . $unites[$puissance] . $suffixe_item,
[
- 'taille' => round($octets / pow($kilo, $puissance), $precisions[$puissance])
+ 'taille' => round($octets / $kilo ** $puissance, $precisions[$puissance]),
]
);
}
@@ -1360,14 +1343,13 @@
return $affichage;
}
-
/**
* Rend une chaine utilisable sans dommage comme attribut HTML
*
* @example ` #TITRE `
*
* @filtre
- * @link https://www.spip.net/4282
+ * @see https://www.spip.net/4282
* @uses textebrut()
* @uses texte_backend()
*
@@ -1377,7 +1359,7 @@
* Passe le texte en texte brut (enlève les balises html) ?
* @return string
* texte prêt pour être utilisé en attribut HTML
- **/
+ */
function attribut_html(?string $texte, $textebrut = true): string {
if ($texte === null || $texte === '') {
return '';
@@ -1410,7 +1392,7 @@
* `true` pour échapper les entités HTML.
* @return string
* URL ou chaîne vide
- **/
+ */
function vider_url(?string $url, $entites = true): string {
if ($url === null || $url === '') {
return '';
@@ -1423,7 +1405,6 @@
return preg_match($r, $url) ? '' : ($entites ? entites_html($url) : $url);
}
-
/**
* Maquiller une adresse e-mail
*
@@ -1433,7 +1414,7 @@
*
* @param string $texte Adresse email
* @return string Adresse email maquillée
- **/
+ */
function antispam($texte) {
include_spip('inc/acces');
$masque = creer_pass_aleatoire(3);
@@ -1468,7 +1449,7 @@
* Nom de l'argument calculé
* @return bool
* True si on a le droit d'accès, false sinon.
- **/
+ */
function filtre_securiser_acces_dist($id_auteur, $cle, $dir, $op = '', $args = '') {
include_spip('inc/acces');
return securiser_acces_low_sec($id_auteur, $cle, $op ? "$dir $op $args" : $dir);
@@ -1493,11 +1474,12 @@
* Contenu a retourner si le contenu de reference est vide
* @return mixed
* Retourne $texte, sinon $sinon.
- **/
+ */
function sinon($texte, $sinon = '') {
if ($texte) {
return $texte;
- } elseif (is_scalar($texte) and strlen($texte)) {
+ }
+ if (is_scalar($texte) && strlen($texte)) {
return $texte;
}
@@ -1514,7 +1496,7 @@
*
* @filtre
* @see choixsiegal()
- * @link https://www.spip.net/4189
+ * @see https://www.spip.net/4189
*
* @param mixed $a
* La valeur à tester
@@ -1523,7 +1505,7 @@
* @param mixed $pasvide
* Ce qui est retourné sinon
* @return mixed
- **/
+ */
function choixsivide($a, $vide, $pasvide) {
return $a ? $pasvide : $vide;
}
@@ -1536,7 +1518,7 @@
* `#LANG_DIR` vaut `ltr` et `right` sinon.
*
* @filtre
- * @link https://www.spip.net/4148
+ * @see https://www.spip.net/4148
*
* @param mixed $a1
* La valeur à tester
@@ -1547,7 +1529,7 @@
* @param mixed $f
* Ce qui est retourné sinon
* @return mixed
- **/
+ */
function choixsiegal($a1, $a2, $v, $f) {
return ($a1 == $a2) ? $v : $f;
}
@@ -1566,12 +1548,12 @@
*
* @param string $texte
* @return string
- **/
+ */
function filtrer_ical($texte) {
if ($texte === null || $texte === '') {
return '';
}
- #include_spip('inc/charsets');
+ # include_spip('inc/charsets');
$texte = html2unicode($texte);
$texte = unicode2charset(charset2unicode($texte, $GLOBALS['meta']['charset']), 'utf-8');
$texte = preg_replace("/\n/", ' ', $texte);
@@ -1580,7 +1562,6 @@
return $texte;
}
-
/**
* Transforme les sauts de ligne simples en sauts forcés avec `_ `
*
@@ -1600,7 +1581,7 @@
* @param string $delim
* Ce par quoi sont remplacés les sauts
* @return string
- **/
+ */
function post_autobr($texte, $delim = "\n_ ") {
if (!function_exists('echappe_html')) {
include_spip('inc/texte_mini');
@@ -1618,9 +1599,9 @@
// echapper les modeles
$collecteurModeles = null;
- if (strpos($texte, '<') !== false) {
- include_spip("src/Texte/Collecteur/AbstractCollecteur");
- include_spip("src/Texte/Collecteur/Modeles");
+ if (str_contains($texte, '<')) {
+ include_spip('src/Texte/Collecteur/AbstractCollecteur');
+ include_spip('src/Texte/Collecteur/Modeles');
$collecteurModeles = new Spip\Texte\Collecteur\Modeles();
$texte = $collecteurModeles->echapper($texte);
}
@@ -1632,9 +1613,9 @@
$suite = substr($suite, $t);
$car = substr($suite, 0, 1);
if (
- ($car <> '-') and ($car <> '_') and ($car <> "\n") and ($car <> '|') and ($car <> '}')
- and !preg_match(',^\s*(\n|?(quote|div|dl|dt|dd)|$),S', ($suite))
- and !preg_match(',?(quote|div|dl|dt|dd)> *$,iS', $debut)
+ $car != '-' && $car != '_' && $car != "\n" && $car != '|' && $car != '}'
+ && !preg_match(',^\s*(\n|?(quote|div|dl|dt|dd)|$),S', ($suite))
+ && !preg_match(',?(quote|div|dl|dt|dd)> *$,iS', $debut)
) {
$debut .= $delim;
} else {
@@ -1656,7 +1637,6 @@
return $texte . $fin;
}
-
/**
* Extrait une langue des extraits idiomes (`<:module:cle_de_langue:>`)
*
@@ -1675,9 +1655,9 @@
* @param string $lang
* Langue à retrouver (si vide, utilise la langue en cours).
* @param array $options Options {
- * @type bool $echappe_span
+ * @var bool $echappe_span
* True pour échapper les balises span (false par défaut)
- * @type string $lang_defaut
+ * @var string $lang_defaut
* Code de langue : permet de définir la langue utilisée par défaut,
* en cas d'absence de traduction dans la langue demandée.
* Par défaut la langue du site.
@@ -1685,12 +1665,11 @@
* exacte n'a pas été trouvée.
* }
* @return string
- **/
+ */
function extraire_idiome($letexte, $lang = null, $options = []) {
if (
- $letexte
- and strpos($letexte, '<:') !== false
+ $letexte && str_contains($letexte, '<:')
) {
if (!$lang) {
$lang = $GLOBALS['spip_lang'];
@@ -1704,8 +1683,8 @@
}
$options['lang'] = $lang;
- include_spip("src/Texte/Collecteur/AbstractCollecteur");
- include_spip("src/Texte/Collecteur/Idiomes");
+ include_spip('src/Texte/Collecteur/AbstractCollecteur');
+ include_spip('src/Texte/Collecteur/Idiomes');
$collecteurIdiomes = new Spip\Texte\Collecteur\Idiomes();
$letexte = $collecteurIdiomes->traiter($letexte, $options);
@@ -1736,9 +1715,9 @@
* @param string $lang
* Langue à retrouver (si vide, utilise la langue en cours).
* @param array $options Options {
- * @type bool $echappe_span
+ * @var bool $echappe_span
* True pour échapper les balises span (false par défaut)
- * @type string $lang_defaut
+ * @var string $lang_defaut
* Code de langue : permet de définir la langue utilisée par défaut,
* en cas d'absence de traduction dans la langue demandée.
* Par défaut la langue du site.
@@ -1746,12 +1725,11 @@
* exacte n'a pas été trouvée.
* }
* @return string
- **/
+ */
function extraire_multi($letexte, $lang = null, $options = []) {
if (
- $letexte
- and stripos($letexte, 'traiter($letexte, $options);
@@ -1789,7 +1767,6 @@
return spip_substr(trim(strtoupper(extraire_multi($nom))), 0, 1);
}
-
/**
* Retourne la donnée si c'est la première fois qu'il la voit
*
@@ -1829,7 +1806,7 @@
* - int : si l'on demande le nombre d'éléments
* - array (interne) : si on dépile
* - null (interne) : si on empile
- **/
+ */
function unique($donnee, $famille = '', $cpt = false) {
static $mem = [];
// permettre de vider la pile et de la restaurer
@@ -1839,28 +1816,24 @@
$mem = [];
return $tmp;
- } elseif ($famille == '_spip_set_') {
+ }
+ if ($famille == '_spip_set_') {
$mem = $donnee;
return;
}
// eviter une notice
- if (!isset($mem[$famille])) {
- $mem[$famille] = [];
- }
+ $mem[$famille] ??= [];
if ($cpt) {
return is_countable($mem[$famille]) ? count($mem[$famille]) : 0;
}
// eviter une notice
- if (!isset($mem[$famille][$donnee])) {
- $mem[$famille][$donnee] = 0;
- }
+ $mem[$famille][$donnee] ??= 0;
if (!($mem[$famille][$donnee]++)) {
return $donnee;
}
}
-
/**
* Filtre qui alterne des valeurs en fonction d'un compteur
*
@@ -1877,7 +1850,7 @@
* - `[(#COMPTEUR_BOUCLE|alterner{#LISTE{bleu,vert,rouge}})]`
*
* @filtre
- * @link https://www.spip.net/4145
+ * @see https://www.spip.net/4145
*
* @param int $i
* Le compteur
@@ -1885,7 +1858,7 @@
* Liste des éléments à alterner
* @return mixed
* Une des valeurs en fonction du compteur.
- **/
+ */
function alterner($i, ...$args) {
// recuperer les arguments (attention fonctions un peu space)
$num = count($args);
@@ -1903,7 +1876,6 @@
return $args[$i];
}
-
/**
* Récupérer un attribut d'une balise HTML
*
@@ -1924,7 +1896,7 @@
* (si 1er argument tableau)
* - Tableau complet (si 2e argument)
* - null lorsque l’attribut n’existe pas.
- **/
+ */
function extraire_attribut($balise, $attribut, $complet = false) {
if (is_array($balise)) {
array_walk(
@@ -1948,7 +1920,7 @@
$r
)
) {
- if (isset($r[3][0]) and ($r[3][0] == '"' || $r[3][0] == "'")) {
+ if (isset($r[3][0]) && ($r[3][0] == '"' || $r[3][0] == "'")) {
$r[4] = substr($r[3], 1, -1);
$r[3] = $r[3][0];
} elseif ($r[3] !== '') {
@@ -1958,7 +1930,7 @@
$r[4] = trim($r[2]);
}
$att = $r[4];
- if (strpos($att, '') !== false) {
+ if (str_contains($att, '')) {
$att = str_replace([''', ''', '"', '"'], ["'", "'", '"', '"'], $att);
}
$att = filtrer_entites($att);
@@ -2001,10 +1973,10 @@
* True pour vider l'attribut. Une chaîne vide pour `$val` fera pareil.
* @return string
* Code html modifié
- **/
+ */
function inserer_attribut(?string $balise, string $attribut, ?string $val, bool $proteger = true, bool $vider = false): string {
- if ($balise === null or $balise === '') {
+ if ($balise === null || $balise === '') {
return '';
}
@@ -2013,7 +1985,7 @@
// qui ont un sens dans un attribut value d'un input
if ($proteger) {
if (in_array($attribut, ['href', 'src'])) {
- $val = attribut_url($val, false);
+ $val = attribut_url($val);
} else {
$val = attribut_html($val, false);
}
@@ -2021,7 +1993,7 @@
// echapper les ' pour eviter tout bug
$val = str_replace("'", ''', $val ?? '');
- if ($vider and strlen($val) === 0) {
+ if ($vider && strlen($val) === 0) {
$insert = '';
} else {
$insert = " $attribut='$val'";
@@ -2050,22 +2022,20 @@
return $balise;
}
-
-
/**
* Supprime un attribut HTML
*
* @example `[(#LOGO_ARTICLE|vider_attribut{class})]`
*
* @filtre
- * @link https://www.spip.net/4142
+ * @see https://www.spip.net/4142
* @uses inserer_attribut()
* @see extraire_attribut()
*
* @param ?string $balise Code HTML de l'élément
* @param string $attribut Nom de l'attribut à enlever
* @return string Code HTML sans l'attribut
- **/
+ */
function vider_attribut(?string $balise, string $attribut): string {
return inserer_attribut($balise, $attribut, '', false, true);
}
@@ -2094,19 +2064,19 @@
$is_class_presente = false;
if (
$class_courante
- and str_contains($class_courante, (string) $c)
- and in_array($c, preg_split(",\s+,", $class_courante))
+ && str_contains($class_courante, (string) $c)
+ && in_array($c, preg_split(",\s+,", $class_courante))
) {
$is_class_presente = true;
}
if (
in_array($operation, ['ajouter', 'commuter'])
- and !$is_class_presente
+ && !$is_class_presente
) {
$class_new = ltrim(rtrim($class_new ?? '') . ' ' . $c);
} elseif (
in_array($operation, ['supprimer', 'commuter'])
- and $is_class_presente
+ && $is_class_presente
) {
$class_new = preg_split(",\s+,", $class_new);
$class_new = array_diff($class_new, [$c]);
@@ -2173,17 +2143,17 @@
// Quelques fonctions de calcul arithmetique
//
function floatstr($a) {
- return str_replace(',', '.', (string)floatval($a));
+ return str_replace(',', '.', (string) floatval($a));
}
function strize($f, $a, $b) {
- return floatstr($f(floatstr($a), floatstr($b)));
+ return floatstr($f(floatstr($a), floatstr($b)));
}
/**
* Additionne 2 nombres
*
* @filtre
- * @link https://www.spip.net/4307
+ * @see https://www.spip.net/4307
* @see moins()
* @example
* ```
@@ -2193,7 +2163,7 @@
* @param int $a
* @param int $b
* @return int $a+$b
- **/
+ */
function plus($a, $b) {
return $a + $b;
}
@@ -2206,7 +2176,7 @@
* Soustrait 2 nombres
*
* @filtre
- * @link https://www.spip.net/4302
+ * @see https://www.spip.net/4302
* @see plus()
* @example
* ```
@@ -2216,7 +2186,7 @@
* @param int $a
* @param int $b
* @return int $a-$b
- **/
+ */
function moins($a, $b) {
return $a - $b;
}
@@ -2229,7 +2199,7 @@
* Multiplie 2 nombres
*
* @filtre
- * @link https://www.spip.net/4304
+ * @see https://www.spip.net/4304
* @see div()
* @see modulo()
* @example
@@ -2240,7 +2210,7 @@
* @param int $a
* @param int $b
* @return int $a*$b
- **/
+ */
function mult($a, $b) {
return $a * $b;
}
@@ -2253,7 +2223,7 @@
* Divise 2 nombres
*
* @filtre
- * @link https://www.spip.net/4279
+ * @see https://www.spip.net/4279
* @see mult()
* @see modulo()
* @example
@@ -2264,7 +2234,7 @@
* @param int $a
* @param int $b
* @return int $a/$b (ou 0 si $b est nul)
- **/
+ */
function div($a, $b) {
return $b ? $a / $b : 0;
}
@@ -2277,7 +2247,7 @@
* Retourne le modulo 2 nombres
*
* @filtre
- * @link https://www.spip.net/4301
+ * @see https://www.spip.net/4301
* @see mult()
* @see div()
* @example
@@ -2289,12 +2259,11 @@
* @param int $mod
* @param int $add
* @return int ($nb % $mod) + $add
- **/
+ */
function modulo($nb, $mod, $add = 0) {
return ($mod ? $nb % $mod : 0) + $add;
}
-
/**
* Vérifie qu'un nom (d'auteur) ne comporte pas d'autres tags que
* et ceux volontairement spécifiés dans la constante
@@ -2304,7 +2273,7 @@
* @return bool
* - false si pas conforme,
* - true sinon
- **/
+ */
function nom_acceptable($nom) {
$remp2 = [];
$remp1 = [];
@@ -2328,7 +2297,6 @@
return str_replace('<', '<', $v_nom) == $nom;
}
-
/**
* Vérifier la conformité d'une ou plusieurs adresses email (suivant RFC 822)
*
@@ -2339,7 +2307,7 @@
* - false si une des adresses n'est pas conforme,
* - la normalisation de la dernière adresse donnée sinon
* - renvoie un tableau si l'entree est un tableau
- **/
+ */
function email_valide($adresses) {
if (is_array($adresses)) {
$adresses = array_map('email_valide', $adresses);
@@ -2356,17 +2324,17 @@
* documents attachés d'un article (liens ayant `rel=enclosure`).
*
* @filtre
- * @link https://www.spip.net/4134
+ * @see https://www.spip.net/4134
*
* @param string $tags texte
* @return string texte
- **/
+ */
function afficher_enclosures($tags) {
$s = [];
foreach (extraire_balises($tags, 'a') as $tag) {
if (
extraire_attribut($tag, 'rel') == 'enclosure'
- and $t = extraire_attribut($tag, 'href')
+ && ($t = extraire_attribut($tag, 'href'))
) {
$s[] = preg_replace(
',>[^<]+,S',
@@ -2392,12 +2360,12 @@
* et ne retourne que ceux là.
*
* @filtre
- * @link https://www.spip.net/4187
+ * @see https://www.spip.net/4187
*
* @param string $tags texte
* @param string $rels Attribut `rel` à capturer (ou plusieurs séparés par des virgules)
* @return string Liens trouvés
- **/
+ */
function afficher_tags($tags, $rels = 'tag,directory') {
$s = [];
foreach (extraire_balises($tags, 'a') as $tag) {
@@ -2410,7 +2378,6 @@
return join(', ', $s);
}
-
/**
* Convertir les médias fournis par un flux RSS (podcasts)
* en liens conformes aux microformats
@@ -2427,7 +2394,7 @@
*
* @param string $e Tag RSS ``
* @return string Tag HTML `` avec microformat.
- **/
+ */
function enclosure2microformat($e) {
if (!$url = filtrer_entites(extraire_attribut($e, 'url') ?? '')) {
$url = filtrer_entites(extraire_attribut($e, 'href') ?? '');
@@ -2459,7 +2426,7 @@
*
* @param string $tags texte HTML ayant des tag ` ` avec microformat
* @return string Tags RSS ``.
- **/
+ */
function microformat2enclosure($tags) {
$enclosures = [];
foreach (extraire_balises($tags, 'a') as $e) {
@@ -2481,7 +2448,6 @@
return join("\n", $enclosures);
}
-
/**
* Créer les éléments ATOM `` à partir des tags
*
@@ -2492,7 +2458,7 @@
*
* @param string $tags texte
* @return string Tags RSS Atom ``.
- **/
+ */
function tags2dcsubject($tags) {
$subjects = '';
foreach (extraire_balises($tags, 'a') as $e) {
@@ -2516,7 +2482,7 @@
* @example `[(#DESCRIPTIF|extraire_balise{img})]`
*
* @filtre
- * @link https://www.spip.net/4289
+ * @see https://www.spip.net/4289
* @see extraire_balises()
* @note
* Attention : les résultats peuvent être incohérents sur des balises imbricables,
@@ -2530,14 +2496,14 @@
* @return string|array
* - Code html de la première occurence de la balise trouvée, sinon chaine vide
* - Tableau de résultats, si tableau en entrée.
- **/
+ */
function extraire_balise($texte, $tag = 'a', $profondeur = 1) {
$balises = extraire_balises($texte, $tag, ['nb_max' => 1, 'profondeur' => $profondeur]);
if (is_array($texte)) {
- return array_map(function(array $a) {return (empty($a) ? '' : reset($a));}, $balises);
+ return array_map(fn (array $a) => empty($a) ? '' : reset($a), $balises);
}
- return (empty($balises) ? '' : reset($balises));
+ return empty($balises) ? '' : reset($balises);
}
/**
@@ -2563,7 +2529,7 @@
* @return array
* - Liste des codes html des occurrences de la balise, sinon tableau vide
* - Tableau de résultats, si tableau en entrée.
- **/
+ */
function extraire_balises($texte, $tag = 'a', $options = []) {
if (is_array($texte)) {
array_walk(
@@ -2610,16 +2576,15 @@
* - ' ' si la valeur cherchée est dans le tableau
* - '' si la valeur n'est pas dans le tableau
* - `$def` si on n'a pas transmis de tableau
- **/
+ */
function in_any($val, $vals, $def = '') {
- if (!is_array($vals) and $vals and $v = unserialize($vals)) {
+ if (!is_array($vals) && $vals && ($v = unserialize($vals))) {
$vals = $v;
}
- return (!is_array($vals) ? $def : (in_array($val, $vals) ? ' ' : ''));
+ return !is_array($vals) ? $def : (in_array($val, $vals) ? ' ' : '');
}
-
/**
* Retourne le résultat d'une expression mathématique simple
*
@@ -2635,7 +2600,7 @@
* Expression mathématique `nombre operateur nombre` comme `3*2`
* @return int
* Résultat du calcul
- **/
+ */
function valeur_numerique($expr) {
$a = 0;
if (preg_match(',^[0-9]+(\s*[+*-]\s*[0-9]+)*$,S', trim($expr))) {
@@ -2659,12 +2624,11 @@
* @param int $c
* @return int
* Retourne `$a*$b/$c`
- **/
+ */
function regledetrois($a, $b, $c) {
return round($a * $b / $c);
}
-
/**
* Crée des tags HTML input hidden pour chaque paramètre et valeur d'une URL
*
@@ -2672,7 +2636,7 @@
* l'URL donnée en argument, compatible avec les types_urls
*
* @filtre
- * @link https://www.spip.net/4286
+ * @see https://www.spip.net/4286
* @see balise_ACTION_FORMULAIRE()
* Également pour transmettre les actions à un formulaire
* @example
@@ -2682,7 +2646,7 @@
*
* @param ?string $action URL
* @return string Suite de champs input hidden
- **/
+ */
function form_hidden(?string $action = ''): string {
$action ??= '';
@@ -2700,10 +2664,10 @@
}
}
// defaire ce qu'a injecte urls_decoder_url : a revoir en modifiant la signature de urls_decoder_url
- if (defined('_DEFINIR_CONTEXTE_TYPE') and _DEFINIR_CONTEXTE_TYPE) {
+ if (defined('_DEFINIR_CONTEXTE_TYPE') && _DEFINIR_CONTEXTE_TYPE) {
unset($contexte['type']);
}
- if (!defined('_DEFINIR_CONTEXTE_TYPE_PAGE') or _DEFINIR_CONTEXTE_TYPE_PAGE) {
+ if (!defined('_DEFINIR_CONTEXTE_TYPE_PAGE') || _DEFINIR_CONTEXTE_TYPE_PAGE) {
unset($contexte['type-page']);
}
@@ -2723,9 +2687,7 @@
if (preg_match(',\[\]$,S', $var)) {
$values[] = [$var, $val];
} else {
- if (!isset($values[$var])) {
- $values[$var] = [$var, $val];
- }
+ $values[$var] ??= [$var, $val];
}
}
}
@@ -2736,9 +2698,7 @@
if (preg_match(',\[\]$,S', $var)) {
$values[] = [$var, $val];
} else {
- if (!isset($values[$var])) {
- $values[$var] = [$var, $val];
- }
+ $values[$var] ??= [$var, $val];
}
}
@@ -2749,7 +2709,8 @@
$hidden[] = ' "url('" . suivre_lien($path, $x[1]) . "')",
+ fn ($x) => "url('" . suivre_lien($path, $x[1]) . "')",
$contenu
);
}
-
/**
* Inverse le code CSS (left <--> right) d'une feuille de style CSS
*
@@ -2892,7 +2849,7 @@
*
* @return string
* Chemin du fichier CSS inversé
- **/
+ */
function direction_css($css, $voulue = '') {
if (!preg_match(',(_rtl)?\.css$,i', $css, $r)) {
return $css;
@@ -2900,7 +2857,7 @@
include_spip('inc/lang');
// si on a precise le sens voulu en argument, le prendre en compte
if ($voulue = strtolower($voulue)) {
- if ($voulue != 'rtl' and $voulue != 'ltr') {
+ if ($voulue != 'rtl' && $voulue != 'ltr') {
$voulue = lang_dir($voulue);
}
} else {
@@ -2920,7 +2877,7 @@
// url absolue
preg_match(',^https?:,i', $css)
// ou qui contient un ?
- or (($p = strpos($css, '?')) !== false)
+ || ($p = strpos($css, '?')) !== false
) {
$distant = true;
$cssf = parse_url($css);
@@ -2930,7 +2887,7 @@
$distant = false;
$cssf = $css;
// 1. regarder d'abord si un fichier avec la bonne direction n'est pas aussi
- //propose (rien a faire dans ce cas)
+ // propose (rien a faire dans ce cas)
$f = preg_replace(',(_rtl)?\.css$,i', '_' . $ndir . '.css', $css);
if (@file_exists($f)) {
return $f;
@@ -2947,13 +2904,13 @@
if ($distant) {
include_spip('inc/distant');
$res = recuperer_url($css);
- if (!$res or !$contenu = $res['page']) {
+ if (!$res || !($contenu = $res['page'])) {
return $css;
}
} else {
if (
- (@filemtime($f) > @filemtime($css))
- and (_VAR_MODE != 'recalcul')
+ @filemtime($f) > @filemtime($css)
+ && _VAR_MODE != 'recalcul'
) {
return $f;
}
@@ -2962,7 +2919,6 @@
}
}
-
// Inverser la direction gauche-droite en utilisant CSSTidy qui gere aussi les shorthands
include_spip('lib/csstidy/class.csstidy');
$parser = new csstidy();
@@ -2972,7 +2928,6 @@
$contenu = $parser->print->plain();
-
// reperer les @import auxquels il faut propager le direction_css
preg_match_all(",\@import\s*url\s*\(\s*['\"]?([^'\"/][^:]*)['\"]?\s*\),Uims", $contenu, $regs);
$src = [];
@@ -2985,7 +2940,7 @@
if (substr($css_direction, 0, strlen($d) + 1) == "$d/") {
$css_direction = substr($css_direction, strlen($d) + 1);
} // si la css_direction commence par $dir_var on la fait passer pour une absolue
- elseif (substr($css_direction, 0, strlen($dir_var)) == $dir_var) {
+ elseif (str_starts_with($css_direction, $dir_var)) {
$css_direction = substr($css_direction, strlen($dir_var));
$src_faux_abs['/@@@@@@/' . $css_direction] = $css_direction;
$css_direction = '/@@@@@@/' . $css_direction;
@@ -3009,7 +2964,6 @@
return $f;
}
-
/**
* Transforme les urls relatives d'un fichier CSS en absolues
*
@@ -3027,7 +2981,7 @@
* @return string
* - Chemin du fichier CSS transformé (si source lisible et mise en cache réussie)
* - Chemin ou URL du fichier CSS source sinon.
- **/
+ */
function url_absolue_css($css) {
if (!preg_match(',\.css$,i', $css, $r)) {
return $css;
@@ -3037,17 +2991,17 @@
$f = basename($css, '.css');
$f = sous_repertoire(_DIR_VAR, 'cache-css')
- . preg_replace(',(.*?)(_rtl|_ltr)?$,', "\\1-urlabs-" . substr(md5("$css-urlabs"), 0, 4) . "\\2", $f)
+ . preg_replace(',(.*?)(_rtl|_ltr)?$,', '\\1-urlabs-' . substr(md5("$css-urlabs"), 0, 4) . '\\2', $f)
. '.css';
- if ((@filemtime($f) > @filemtime($css)) and (_VAR_MODE != 'recalcul')) {
+ if (@filemtime($f) > @filemtime($css) && _VAR_MODE != 'recalcul') {
return $f;
}
if ($url_absolue_css == $css) {
if (
strncmp($GLOBALS['meta']['adresse_site'], $css, $l = strlen($GLOBALS['meta']['adresse_site'])) != 0
- or !lire_fichier(_DIR_RACINE . substr($css, $l), $contenu)
+ || !lire_fichier(_DIR_RACINE . substr($css, $l), $contenu)
) {
include_spip('inc/distant');
$contenu = recuperer_url($css);
@@ -3071,7 +3025,6 @@
return $f;
}
-
/**
* Récupère la valeur d'une clé donnée
* dans un tableau (ou un objet).
@@ -3100,7 +3053,7 @@
*
* @return mixed
* Valeur trouvée ou valeur par défaut.
- **/
+ */
function table_valeur($table, $cle, $defaut = '', $conserver_null = false) {
foreach (explode('/', $cle) as $k) {
if (is_string($table)) {
@@ -3130,12 +3083,12 @@
'Using serialized data in "%s" filter %s is deprecated',
__FUNCTION__,
$info
- )
+ )
);
}
if (is_object($table)) {
- $table = (($k !== '') and isset($table->$k)) ? $table->$k : $defaut;
+ $table = ($k !== '' && isset($table->{$k})) ? $table->{$k} : $defaut;
} elseif (is_array($table)) {
if ($conserver_null) {
$table = array_key_exists($k, $table) ? $table[$k] : $defaut;
@@ -3179,9 +3132,9 @@
* - false : l'expression n'a pas été trouvée
* - true : expression trouvée, mais pas la parenthèse capturante
* - string : expression trouvée.
- **/
+ */
function filtre_match_dist(?string $texte, $expression, $modif = 'UuimsS', $capte = 0) {
- if (intval($modif) and $capte == 0) {
+ if (intval($modif) && $capte == 0) {
$capte = $modif;
$modif = 'UuimsS';
}
@@ -3199,7 +3152,6 @@
return false;
}
-
/**
* Remplacement de texte à base d'expression régulière
*
@@ -3221,9 +3173,9 @@
* Modificateurs pour l'expression régulière.
* @return string
* Texte
- **/
+ */
function replace(?string $texte, string $expression, string $replace = '', string $modif = 'UimsS'): string {
- if (null === $texte) {
+ if ($texte === null) {
return '';
}
@@ -3233,7 +3185,6 @@
return (string) preg_replace('/' . $expression . '/' . $modif, $replace, $texte);
}
-
/**
* Cherche les documents numerotés dans un texte traite par `propre()`
*
@@ -3245,24 +3196,23 @@
* Le texte
* @return string
* Le texte
- **/
+ */
function traiter_doublons_documents(&$doublons, $letexte) {
// Verifier dans le texte & les notes (pas beau, helas)
$t = $letexte . $GLOBALS['les_notes'];
if (
- strstr($t, 'spip_document_') // evite le preg_match_all si inutile
- and preg_match_all(
+ // evite le preg_match_all si inutile
+ strstr($t, 'spip_document_')
+ && preg_match_all(
',<[^>]+\sclass=["\']spip_document_([0-9]+)[\s"\'],imsS',
$t,
$matches,
PREG_PATTERN_ORDER
)
) {
- if (!isset($doublons['documents'])) {
- $doublons['documents'] = '';
- }
+ $doublons['documents'] ??= '';
$doublons['documents'] .= ',' . join(',', $matches[1]);
}
@@ -3278,7 +3228,7 @@
*
* @param mixed $texte
* @return string Chaîne vide
- **/
+ */
function vide($texte) {
return '';
}
@@ -3299,7 +3249,7 @@
* @example `[(#ENV*|env_to_params)]`
*
* @filtre
- * @link https://www.spip.net/4005
+ * @see https://www.spip.net/4005
*
* @param array|string $env
* Tableau cle => valeur des paramètres à écrire, ou chaine sérialisée de ce tableau
@@ -3307,7 +3257,7 @@
* Permet de compléter les clés ignorées du tableau.
* @return string
* Code HTML résultant
- **/
+ */
function env_to_params($env, $ignore_params = []) {
$ignore_params = array_merge(
['id', 'lang', 'id_document', 'date', 'date_redac', 'align', 'fond', '', 'recurs', 'emb', 'dir_racine'],
@@ -3346,7 +3296,7 @@
* Permet de compléter les clés ignorées du tableau.
* @return string
* Code HTML résultant
- **/
+ */
function env_to_attributs($env, $ignore_params = []) {
$ignore_params = array_merge(
['id', 'lang', 'id_document', 'date', 'date_redac', 'align', 'fond', '', 'recurs', 'emb', 'dir_racine'],
@@ -3358,7 +3308,7 @@
$texte = '';
if ($env) {
foreach ($env as $i => $j) {
- if (is_string($j) and !in_array($i, $ignore_params)) {
+ if (is_string($j) && !in_array($i, $ignore_params)) {
$texte .= attribut_html($i) . "='" . attribut_html($j) . "' ";
}
}
@@ -3367,12 +3317,11 @@
return $texte;
}
-
/**
* Concatène des chaînes
*
* @filtre
- * @link https://www.spip.net/4150
+ * @see https://www.spip.net/4150
* @example
* ```
* #TEXTE|concat{texte1,texte2,...}
@@ -3380,12 +3329,11 @@
*
* @param array $args
* @return string Chaînes concaténés
- **/
+ */
function concat(...$args): string {
return join('', $args);
}
-
/**
* Retourne le contenu d'un ou plusieurs fichiers
*
@@ -3400,7 +3348,7 @@
* - si true, considère que c'est un fichier js à chercher `javascript/`
* @return string
* Contenu du ou des fichiers, concaténé
- **/
+ */
function charge_scripts($files, $script = true) {
$flux = '';
foreach (is_array($files) ? $files : explode('|', $files) as $file) {
@@ -3433,13 +3381,15 @@
// si il y a un .svg a la bonne taille (-16.svg) a cote, on l'utilise en remplacement du -16.png
if (
preg_match(',-(\d+)[.](png|gif|svg)$,', $img_file, $m)
- and $variante_svg_generique = substr($img_file, 0, -strlen($m[0])) . '-xx.svg'
- and file_exists($variante_svg_generique)
+ && ($variante_svg_generique = substr($img_file, 0, -strlen($m[0])) . '-xx.svg')
+ && file_exists($variante_svg_generique)
) {
- if ($variante_svg_size = substr($variante_svg_generique, 0, -6) . $m[1] . '.svg' and file_exists($variante_svg_size)) {
+ if (
+ ($variante_svg_size = substr($variante_svg_generique, 0, -6) . $m[1] . '.svg')
+ && file_exists($variante_svg_size)
+ ) {
$img_file = $variante_svg_size;
- }
- else {
+ } else {
$img_file = $variante_svg_generique;
}
}
@@ -3469,28 +3419,24 @@
if ($p = strpos($img_file, '?')) {
$img_file = substr($img_file, 0, $p);
}
- if (!isset($options['chemin_image']) or $options['chemin_image'] == true) {
+ if (!isset($options['chemin_image']) || $options['chemin_image'] == true) {
$img_file = chemin_image($img);
- }
- else {
- if (!isset($options['variante_svg_si_possible']) or $options['variante_svg_si_possible'] == true) {
+ } else {
+ if (!isset($options['variante_svg_si_possible']) || $options['variante_svg_si_possible'] == true) {
$img_file = http_img_variante_svg_si_possible($img_file);
}
}
if (stripos($atts, 'width') === false) {
// utiliser directement l'info de taille presente dans le nom
if (
- (!isset($options['utiliser_suffixe_size'])
- or $options['utiliser_suffixe_size'] == true
- or str_contains($img_file, '-xx.svg'))
- and (preg_match(',-([0-9]+)[.](png|gif|svg)$,', $img, $regs)
- or preg_match(',\?([0-9]+)px$,', $img, $regs))
+ (!isset($options['utiliser_suffixe_size']) || $options['utiliser_suffixe_size'] == true || str_contains($img_file, '-xx.svg'))
+ && (preg_match(',-([0-9]+)[.](png|gif|svg)$,', $img, $regs) || preg_match(',\?([0-9]+)px$,', $img, $regs))
) {
$largeur = $hauteur = intval($regs[1]);
} else {
$taille = taille_image($img_file);
[$hauteur, $largeur] = $taille;
- if (!$hauteur or !$largeur) {
+ if (!$hauteur || !$largeur) {
return '';
}
}
@@ -3502,11 +3448,9 @@
}
if ($alt === false) {
$alt = '';
- }
- elseif ($alt or $alt === '') {
+ } elseif ($alt || $alt === '') {
$alt = " alt='" . attribut_html($alt) . "'";
- }
- else {
+ } else {
$alt = " alt='" . attribut_html($title) . "'";
}
return " false, 'utiliser_suffixe_size' => false]
);
- if (is_null($alt)) {
+ if ($alt === null) {
$img = vider_attribut($img, 'alt');
}
}
- if ($img and !is_null($size) and strlen($size = trim($size))) {
+ if ($img && $size !== null && strlen($size = trim($size))) {
[$width, $height] = helper_filtre_balise_img_svg_size($img, $size);
$img = inserer_attribut($img, 'width', $width);
@@ -3662,7 +3602,6 @@
return $img;
}
-
/**
* Inserer un svg inline
* http://www.accede-web.com/notices/html-css-javascript/6-images-icones/6-2-svg-images-vectorielles/
@@ -3708,15 +3647,21 @@
}
if (
- !$img_file
- or !file_exists($img_file)
- or !$svg = file_get_contents($img_file)
+ !$img_file || !file_exists($img_file) || !($svg = file_get_contents($img_file))
) {
return '';
}
}
- if (!preg_match(",]*>,UimsS", $svg, $match)) {
+ $sanitizer_svg = charger_fonction('svg', 'sanitizer', true);
+ if ($sanitizer_svg) {
+ $svg = $sanitizer_svg($svg);
+ if (!$svg) {
+ return '';
+ }
+ }
+
+ if (!preg_match(",]*>,UmsS", $svg, $match)) {
return '';
}
@@ -3732,11 +3677,10 @@
$balise_svg = inserer_attribut($balise_svg, 'focusable', 'false');
// regler la classe
- if (!is_null($class)) {
+ if ($class !== null) {
if (strlen($class)) {
$balise_svg = inserer_attribut($balise_svg, 'class', $class);
- }
- else {
+ } else {
$balise_svg = vider_attribut($balise_svg, 'class');
}
}
@@ -3748,14 +3692,13 @@
$balise_svg = inserer_attribut($balise_svg, 'aria-labelledby', $id);
$title = "" . entites_html($alt) . " \n";
$balise_svg .= $title;
- }
- else {
+ } else {
$balise_svg = inserer_attribut($balise_svg, 'aria-hidden', 'true');
}
$svg = str_replace($balise_svg_source, $balise_svg, $svg);
- if (!is_null($size) and strlen($size = trim($size))) {
+ if ($size !== null && strlen($size = trim($size))) {
[$width, $height] = helper_filtre_balise_img_svg_size($svg, $size);
if (!function_exists('svg_redimensionner')) {
@@ -3767,8 +3710,6 @@
return $svg;
}
-
-
/**
* Affiche chaque valeur d'un tableau associatif en utilisant un modèle
*
@@ -3780,7 +3721,7 @@
* - `[(#ARRAY{a,un,b,deux}|foreach)]`
*
* @filtre
- * @link https://www.spip.net/4248
+ * @see https://www.spip.net/4248
*
* @param array $tableau
* Tableau de données à afficher
@@ -3788,7 +3729,7 @@
* Nom du modèle à utiliser
* @return string
* Code HTML résultant
- **/
+ */
function filtre_foreach_dist($tableau, $modele = 'foreach') {
trigger_deprecation('spip', '4.0', 'Using "%s" filter is deprecated, use "%s" instead', 'foreach', '');
$texte = '';
@@ -3805,15 +3746,12 @@
return $texte;
}
-
/**
* Génère une balise HTML `img` ou un `svg` inline suivant le nom du fichier.
*
* @uses filtre_balise_img_dist()
* @uses filtre_balise_svg_dist()
*
- * @param string $img
- * chemin vers un fichier ou balise ` ` (generee par un filtre image par exemple)
* @param string $alt
* texte alternatif ; une valeur nulle pour explicitement ne pas avoir de balise alt sur l'image (au lieu d'un alt vide)
* @param string $class
@@ -3849,7 +3787,7 @@
// Si c'est un svg, en code ou en chemin, on embed
if ($deja_svg || $extension === 'svg') {
$balise = filtrer('balise_svg', $src, $alt, $class, $size);
- // Sinon, balise_img pour tous les autres cas
+ // Sinon, balise_img pour tous les autres cas
} else {
$balise = filtrer('balise_img', $src, $alt, $class, $size);
}
@@ -3857,7 +3795,6 @@
return $balise;
}
-
/**
* Obtient des informations sur les plugins actifs
*
@@ -3877,7 +3814,7 @@
* - est_actif : renvoie true s'il est actif, false sinon
* - x : retourne l'information x du plugin si présente (et plugin actif)
* - tout : retourne toutes les informations du plugin actif
- **/
+ */
function filtre_info_plugin_dist($plugin, $type_info, $reload = false) {
include_spip('inc/plugin');
$plugin = strtoupper($plugin);
@@ -3885,11 +3822,14 @@
if (!$plugin) {
return serialize(array_keys($plugins_actifs));
- } elseif (empty($plugins_actifs[$plugin]) and !$reload) {
+ }
+ if (empty($plugins_actifs[$plugin]) && !$reload) {
return '';
- } elseif (($type_info == 'est_actif') and !$reload) {
+ }
+ if ($type_info == 'est_actif' && !$reload) {
return $plugins_actifs[$plugin] ? 1 : 0;
- } elseif (isset($plugins_actifs[$plugin][$type_info]) and !$reload) {
+ }
+ if (isset($plugins_actifs[$plugin][$type_info]) && !$reload) {
return $plugins_actifs[$plugin][$type_info];
} else {
$get_infos = charger_fonction('get_infos', 'plugins');
@@ -3904,7 +3844,8 @@
}
if ($type_info == 'tout') {
return $infos;
- } elseif ($type_info == 'est_actif') {
+ }
+ if ($type_info == 'est_actif') {
return $infos ? 1 : 0;
} else {
return strval($infos[$type_info]);
@@ -3912,7 +3853,6 @@
}
}
-
/**
* Affiche la puce statut d'un objet, avec un menu rapide pour changer
* de statut si possibilité de l'avoir
@@ -3941,7 +3881,6 @@
return $puce_statut($id_objet, $statut, $id_rubrique, $type, $ajax);
}
-
/**
* Affiche la puce statut d'un objet, avec un menu rapide pour changer
* de statut si possibilité de l'avoir
@@ -3983,7 +3922,6 @@
);
}
-
/**
* Encoder un contexte pour l'ajax
*
@@ -4009,8 +3947,7 @@
function encoder_contexte_ajax($c, $form = '', $emboite = null, $ajaxid = '') {
$env = null;
if (
- is_string($c)
- and @unserialize($c) !== false
+ is_string($c) && @unserialize($c) !== false
) {
$c = unserialize($c);
}
@@ -4021,7 +3958,7 @@
// le debut_x=0 n'existe pas, et on resterait sur 1
if (is_array($c)) {
foreach ($c as $k => $v) {
- if (strpos($k, 'debut_') === 0) {
+ if (str_starts_with($k, 'debut_')) {
unset($c[$k]);
}
}
@@ -4035,12 +3972,13 @@
$cle = calculer_cle_action($form . $c);
$c = "$cle:$c";
- // on ne stocke pas les contextes dans des fichiers en cache
- // par defaut, sauf si cette configuration a été forcée
- // OU que la longueur de l’argument géneré est plus long
+ // Par défaut, on stocke les contextes dans des fichiers en cache
+ // Exception : si la constante '_CACHE_CONTEXTES_AJAX' == false ET
+ // que la longueur de l’argument géneré n'est PAS plus long
// que ce qui est toléré.
- $cache_contextes_ajax = (defined('_CACHE_CONTEXTES_AJAX') and _CACHE_CONTEXTES_AJAX);
+ $cache_contextes_ajax = (!defined('_CACHE_CONTEXTES_AJAX') || _CACHE_CONTEXTES_AJAX);
if (!$cache_contextes_ajax) {
+ // uniquement si _CACHE_CONTEXTES_AJAX == false
$env = $c;
if (function_exists('gzdeflate') && function_exists('gzinflate')) {
$env = gzdeflate($env);
@@ -4092,13 +4030,13 @@
$r = self();
$r = ' data-origin="' . $r . '"';
$class = 'ajaxbloc';
- if ($ajaxid and is_string($ajaxid)) {
+ if ($ajaxid && is_string($ajaxid)) {
// ajaxid est normalement conforme a un nom de classe css
// on ne verifie pas la conformite, mais on passe entites_html par dessus par precaution
$class .= ' ajax-id-' . entites_html($ajaxid);
}
- return "\n$emboite
\n";
+ return "\n$emboite
\n";
}
/**
@@ -4121,13 +4059,22 @@
if (!function_exists('calculer_cle_action')) {
include_spip('inc/securiser_action');
}
- 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)
- ) {
+ $cache_contextes_ajax = (!defined('_CACHE_CONTEXTES_AJAX') || _CACHE_CONTEXTES_AJAX);
+ // si $cache_contextes_ajax on accepte que des md5(contexte) et on doit trouver un fichier sur le disque avec ce md5
+ if ($cache_contextes_ajax || strlen($c) == 32) {
+ if (!is_dir($dir = _DIR_CACHE . 'contextes')) {
+ return false;
+ }
+ if (!file_exists("$dir/c$c")) {
+ return false;
+ }
+ $contexte = file_get_contents("$dir/c$c");
+ if (!$contexte) {
+ return false;
+ }
$c = $contexte;
} else {
+ // uniquement si _CACHE_CONTEXTES_AJAX == false
$c = @base64_decode($c);
$c = _xor($c);
if (function_exists('gzdeflate') && function_exists('gzinflate')) {
@@ -4151,11 +4098,10 @@
return false;
}
-
/**
* Encrypte ou décrypte un message
*
- * @link http://www.php.net/manual/fr/language.operators.bitwise.php#81358
+ * @see http://www.php.net/manual/fr/language.operators.bitwise.php#81358
*
* @param string $message
* Message à encrypter ou décrypter
@@ -4164,9 +4110,9 @@
* Une clé sera calculée si non transmise
* @return string
* Message décrypté ou encrypté
- **/
+ */
function _xor($message, $key = null) {
- if (is_null($key)) {
+ if ($key === null) {
if (!function_exists('calculer_cle_action')) {
include_spip('inc/securiser_action');
}
@@ -4193,7 +4139,7 @@
* @return string
*/
function url_reponse_forum($texte) {
- return $texte;
+ return $texte;
}
/**
@@ -4207,10 +4153,9 @@
* @return string
*/
function url_rss_forum($texte) {
- return $texte;
+ return $texte;
}
-
/**
* Génère des menus avec liens ou `` non clicable lorsque
* l'item est sélectionné
@@ -4225,7 +4170,6 @@
* [(#URL_RUBRIQUE|lien_ou_expose{#TITRE, #ENV{test}|=={en_cours}|?{a.monlien.active}, 'monlien'})]
* ```
*
- *
* @param string $url
* URL du lien
* @param string $libelle
@@ -4252,7 +4196,7 @@
$att = '';
// si $on passe la balise et optionnelement une ou ++classe
// a.active span.selected.active etc....
- if (is_string($on) and (strncmp($on, 'a', 1) == 0 or strncmp($on, 'span', 4) == 0 or strncmp($on, 'strong', 6) == 0)) {
+ if (is_string($on) && (str_starts_with($on, 'a') || str_starts_with($on, 'span') || str_starts_with($on, 'strong'))) {
$on = explode('.', $on);
// on verifie que c'est exactement une des 3 balises a, span ou strong
if (in_array(reset($on), ['a', 'span', 'strong'])) {
@@ -4272,14 +4216,11 @@
. ($rel ? " rel='" . attribut_html($rel) . "'" : '')
. $evt;
}
- if ($libelle === null) {
- $libelle = $url;
- }
+ $libelle ??= $url;
return "<$bal $att>$libelle$bal>";
}
-
/**
* Afficher un message "un truc"/"N trucs"
* Les items sont à indiquer comme pour la fonction _T() sous la forme :
@@ -4296,7 +4237,7 @@
static $local_singulier_ou_pluriel = [];
// si nb=0 ou pas de $vars valide on retourne une chaine vide, a traiter par un |sinon
- if (!is_numeric($nb) or $nb == 0) {
+ if (!is_numeric($nb) || $nb == 0) {
return '';
}
if (!is_array($vars)) {
@@ -4328,7 +4269,6 @@
}
}
-
/**
* Fonction de base pour une icone dans un squelette.
* Il peut s'agir soit d'un simple lien, structure html : `texte `,
@@ -4383,12 +4323,12 @@
// Liens : préparer les classes ajax
$ajax = '';
if ($type === 'lien') {
- if (strpos($class_lien, 'ajax') !== false) {
+ if (str_contains($class_lien, 'ajax')) {
$ajax = 'ajax';
- if (strpos($class_lien, 'preload') !== false) {
+ if (str_contains($class_lien, 'preload')) {
$ajax .= ' preload';
}
- if (strpos($class_lien, 'nocache') !== false) {
+ if (str_contains($class_lien, 'nocache')) {
$ajax .= ' nocache';
}
$ajax = " class='$ajax'";
@@ -4399,7 +4339,7 @@
$size = 24;
if (
preg_match('/-([0-9]{1,3})[.](gif|png|svg)$/i', $fond, $match)
- or preg_match('/-([0-9]{1,3})([.](gif|png|svg))?$/i', $fond_origine, $match)
+ || preg_match('/-([0-9]{1,3})([.](gif|png|svg))?$/i', $fond_origine, $match)
) {
$size = $match[1];
}
@@ -4441,7 +4381,7 @@
* Javascript ajouté sur le lien
* @return string
* Code HTML du lien
- **/
+ */
function icone_base($lien, $texte, $fond, $fonction = '', $class = '', $javascript = '') {
return prepare_icone_base('lien', $lien, $texte, $fond, $fonction, $class, $javascript);
}
@@ -4476,7 +4416,7 @@
* Javascript ajouté sur le lien
* @return string
* Code HTML du lien
- **/
+ */
function filtre_icone_verticale_dist($lien, $texte, $fond, $fonction = '', $class = '', $javascript = '') {
return icone_base($lien, $texte, $fond, $fonction, "verticale $class", $javascript);
}
@@ -4521,7 +4461,7 @@
* Javascript ajouté sur le lien
* @return string
* Code HTML du lien
- **/
+ */
function filtre_icone_horizontale_dist($lien, $texte, $fond, $fonction = '', $class = '', $javascript = '') {
return icone_base($lien, $texte, $fond, $fonction, "horizontale $class", $javascript);
}
@@ -4552,7 +4492,7 @@
* Message de confirmation à ajouter en javascript sur le bouton
* @return string
* Code HTML du lien
- **/
+ */
function filtre_bouton_action_horizontal_dist($lien, $texte, $fond, $fonction = '', $class = '', $confirm = '') {
return prepare_icone_base('bouton', $lien, $texte, $fond, $fonction, $class, $confirm);
}
@@ -4589,7 +4529,6 @@
return icone_base($lien, $texte, $fond, $fonction, "verticale $align $class", $javascript);
}
-
/**
* Explose un texte en tableau suivant un séparateur
*
@@ -4645,7 +4584,7 @@
$res = '';
foreach ($boutons as $page => $detail) {
foreach ($detail->sousmenu as $souspage => $sousdetail) {
- if ($sousdetail->icone and strlen(trim($sousdetail->icone))) {
+ if ($sousdetail->icone && strlen(trim($sousdetail->icone))) {
$img = http_img_variante_svg_si_possible($sousdetail->icone);
$res .= "\n.bando2_$souspage {background-image:url($img);}";
}
@@ -4679,7 +4618,7 @@
// Classes : dispatcher `ajax` sur le formulaire
$class_form = '';
- if (strpos($class, 'ajax') !== false) {
+ if (str_contains($class, 'ajax')) {
$class_form = 'ajax';
$class = str_replace('ajax', '', $class);
}
@@ -4694,10 +4633,10 @@
}
}
$onclick = $callback ? " onclick='return " . addcslashes($callback, "'") . "'" : '';
- $title = $title ? " title='".attribut_html($title) . "'" : '';
+ $title = $title ? " title='" . attribut_html($title) . "'" : '';
return "