Refactoring : sécurité (XSS), découpage en modules inc/* et js/admin/*, IDs résolus par slug, perf (caches, cron Gravatar, assets auto-hébergés), tests
This commit is contained in:
90
inc/config.php
Normal file
90
inc/config.php
Normal file
@@ -0,0 +1,90 @@
|
||||
<?php
|
||||
/**
|
||||
* Configuration centralisée des identifiants du site.
|
||||
*
|
||||
* Les term_ids auto-incrémentés peuvent changer lors d'une réimportation de
|
||||
* base ; partout où c'est possible on résout par slug (stable) avec cache
|
||||
* statique par requête. Les quelques maps indexées par term_id documentent
|
||||
* explicitement leur dépendance à l'installation.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Résout un term_id par slug (catégories, rôles, etc.), avec cache statique.
|
||||
* Renvoie 0 si le terme n'existe pas — les appelants doivent tolérer 0
|
||||
* (clause tax_query vide, comparaison toujours fausse…).
|
||||
*/
|
||||
function thalim_term_id_by_slug( string $slug, string $taxonomy = 'category' ): int {
|
||||
static $cache = [];
|
||||
$key = $taxonomy . ':' . $slug;
|
||||
if ( ! isset( $cache[ $key ] ) ) {
|
||||
$term = get_term_by( 'slug', $slug, $taxonomy );
|
||||
$cache[ $key ] = ( $term && ! is_wp_error( $term ) ) ? (int) $term->term_id : 0;
|
||||
}
|
||||
return $cache[ $key ];
|
||||
}
|
||||
|
||||
/**
|
||||
* Catégories « structurelles » du site, résolues par slug.
|
||||
* Clés logiques → slug en base. Utiliser thalim_cat_id('seance') etc.
|
||||
*/
|
||||
function thalim_cat_id( string $key ): int {
|
||||
static $slugs = [
|
||||
// racines / rubriques
|
||||
'laboratoire' => 'le-laboratoire',
|
||||
'manifestations' => 'manifestations-scientifiques',
|
||||
'publications' => 'publications-et-productions',
|
||||
'mediation' => 'mediation-scientifique',
|
||||
'ressources' => 'ressources',
|
||||
// catégories techniques
|
||||
'seance' => 'seance-de-seminaire',
|
||||
'non-classe' => 'non-classe',
|
||||
'vie-du-labo' => 'vie-du-labo-intranet',
|
||||
'newsletter' => 'newsletter',
|
||||
'message-labo' => 'message-du-laboratoire',
|
||||
// sous-catégories utilisées dans la logique métier
|
||||
'seminaires' => 'seminaires',
|
||||
'colloques' => 'colloques-et-journees-detudes',
|
||||
'communications' => 'communications',
|
||||
'soutenances' => 'soutenances',
|
||||
'ouvrages' => 'ouvrages',
|
||||
'articles' => 'articles',
|
||||
'revues' => 'revues-et-collections',
|
||||
'multimedia' => 'multimedia',
|
||||
'evenements-culturels' => 'evenements-culturels',
|
||||
'medias' => 'medias',
|
||||
'gazette' => 'gazette',
|
||||
'podcast' => 'podcast-de-thalim',
|
||||
'captations' => 'captations',
|
||||
'appels' => 'appels-a-contribution',
|
||||
];
|
||||
if ( ! isset( $slugs[ $key ] ) ) return 0;
|
||||
return thalim_term_id_by_slug( $slugs[ $key ], 'category' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Rôles (taxonomy `role`) techniques, exclus de la recherche de membres.
|
||||
*/
|
||||
function thalim_excluded_role_ids(): array {
|
||||
return array_values( array_filter( [
|
||||
thalim_term_id_by_slug( 'a-ranger', 'role' ),
|
||||
thalim_term_id_by_slug( 'archive', 'role' ),
|
||||
] ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Clé couleur stable d'une catégorie racine, indexée sur le term_id (immuable)
|
||||
* plutôt que sur le slug (que l'admin peut régénérer en renommant la catégorie).
|
||||
* Renvoie la clé canonique attendue par les classes CSS .gradient--{clé} /
|
||||
* .category--{clé} (_postcard.scss, _single.scss, _category.scss).
|
||||
* Fallback sur le slug live pour toute racine hors des 5 rubriques connues.
|
||||
*/
|
||||
function thalim_category_color_slug( $root_term_id, $fallback_slug = '' ) {
|
||||
$map = [
|
||||
1 => 'le-laboratoire',
|
||||
3 => 'manifestations-scientifiques',
|
||||
4 => 'publications-et-productions',
|
||||
5 => 'mediation-scientifique',
|
||||
6 => 'ressources',
|
||||
];
|
||||
return $map[ (int) $root_term_id ] ?? $fallback_slug;
|
||||
}
|
||||
Reference in New Issue
Block a user