Réglages UL CGT * * Toutes les options sont pré-remplies par défaut via wp_parse_args() * afin que le thème soit immédiatement fonctionnel dès son activation. * * @package CGT_FHA */ if ( ! defined( 'ABSPATH' ) ) { exit; } const CGT_FHA_OPTION_KEY = 'cgt_fha_options'; const CGT_FHA_SCHEMA_VERSION = '1.2.0'; /** * Valeurs par défaut complètes de toutes les options du thème. * * @return array */ function cgt_fha_get_defaults(): array { return array( // Onglet 1 : Identité & Coordonnées. 'phone' => '07 60 49 64 69', 'email' => 'union-locale@cgt-fha.fr', 'address' => "Espace Sabart, 10 Av. de l'Ayroule, 09400 Tarascon-sur-Ariège", 'hours' => "Permanences d'accueil et juridiques : Mardi et Jeudi de 9h30 à 12h30, et sur rendez-vous.", 'facebook_url' => 'https://www.facebook.com/profile.php?id=61552410568856', 'instagram_url' => '', 'youtube_url' => '', 'header_logo_url' => CGT_FHA_URI . '/assets/img/banniere-ul-noir.png', 'footer_logo_url' => CGT_FHA_URI . '/assets/img/banniere-ul-blanc.png', 'footer_desc' => "L'Union Locale CGT de Foix et de la Haute-Ariège rassemble tous les syndicats CGT de son périmètre et rattache directement les salarié·e·s isolé·e·s au sein de son syndicat multiprofessionnel (Multipros).", 'footer_call' => "Une lutte dans votre entreprise, une info à partager ? Contactez l'UL", 'news_url' => home_url( '/actualites/' ), 'calendar_url' => home_url( '/calendrier/' ), 'contact_url' => home_url( '/contact/' ), 'join_url' => home_url( '/syndiquez-vous/' ), 'legal_url' => home_url( '/mentions-legales/' ), // Onglet 2 : Bandeau Mobilisation auto-expirant. 'banner_enabled' => 0, 'banner_text' => 'MOBILISATION : Grève et manifestation à Foix - Allées de Villote', 'banner_url' => '', 'banner_expires' => wp_date( 'Y-m-d\TH:i', time() + 7 * DAY_IN_SECONDS ), // Onglet 3 : Page d'accueil — Hero. 'hero_bg_url' => CGT_FHA_URI . '/assets/img/hero-ariege.jpg', 'hero_title_line1' => 'Union Locale CGT Foix Haute-Ariège', 'hero_title_line2' => 'Votre syndicat de proximité !', 'hero_quote' => '« La régression sociale ne se négocie pas, elle se combat ! » — Henri Krasucki, Secrétaire Général de la CGT de 1982 à 1992', 'hero_btn1_label' => "J'ai besoin d'aide", 'hero_btn1_url' => home_url( '/contact/' ), 'hero_btn2_label' => 'Rejoindre la CGT', 'hero_btn2_url' => home_url( '/syndiquez-vous/' ), // Onglet 3 : Section 2 — À quoi nous servons ? 'missions_title' => 'À QUOI NOUS SERVONS ?', 'missions_subtitle' => "L'Union Locale fédère l'ensemble des syndicats CGT du bassin de Foix et de la Haute-Ariège, et accueille directement les salarié·e·s sans syndicat d'entreprise grâce à son syndicat multiprofessionnel (Multipros).", 'mission_1_icon' => 'fist', 'mission_1_title' => "S'ORGANISER", 'mission_1_text' => "Unir tous les syndicats CGT de Foix et de la Haute-Ariège, créer une section dans votre entreprise ou vous syndiquer directement via le syndicat Multipros de l'Union Locale.", 'mission_2_icon' => 'shield', 'mission_2_title' => 'SE DÉFENDRE', 'mission_2_text' => "Faire respecter vos droits, vos salaires et vos conditions de travail à Foix comme en Haute-Ariège, avec l'appui solidaire de nos syndicats, conseillers du salarié et défenseurs.", 'mission_3_icon' => 'chat', 'mission_3_title' => "S'INFORMER & SE FORMER", 'mission_3_text' => "Partager l'actualité des luttes à Foix et en Haute-Ariège et exercer votre droit légal à la formation syndicale (CFESES) pour agir collectivement.", // Onglet 3 : Titres Actualités locales & confédérales. 'local_news_title' => 'SUR LE TERRAIN À FOIX ET EN HAUTE-ARIÈGE', 'local_news_more' => 'Voir toutes les actualités locales →', 'confederal_title' => 'ACTUALITÉ CONFÉDÉRALE', // Onglet 3 : Section 5 — Salariés isolés & TPE (Multipros). 'tpe_enabled' => 1, 'tpe_badge' => "Syndicat Multipros de l'UL · TPE, PME & Isolé·e·s", 'tpe_title' => "SALARIÉS ISOLÉS & TPE : VOUS N'ÊTES PAS SEULS", 'tpe_text' => "À Foix comme en Haute-Ariège, même sans section syndicale ni CSE dans votre entreprise (TPE, commerce, artisanat, chantier, association…), l'Union Locale est votre maison commune : vous êtes rattaché·e directement au syndicat multiprofessionnel (Multipros) de l'UL.", 'tpe_point_1' => "Rattachement au syndicat Multipros de l'UL : ne restez plus isolé·e et rejoignez la solidarité de tous les syndicats CGT de Foix et de la Haute-Ariège.", 'tpe_point_2' => "Confidentialité absolue : aucune prise de contact ni adhésion n'est portée à la connaissance de votre employeur sans votre accord.", 'tpe_point_3' => "Conseillers du Salarié : accompagnement gratuit et défense à vos côtés lors d'un entretien préalable à licenciement ou d'un litige.", 'tpe_btn_label' => "Contacter l'UL en toute confidentialité", 'tpe_btn_url' => home_url( '/contact/' ), // Onglet 3 : Section 6 — Formation Syndicale (CFESES) & Appli Mobile (désactivée par défaut). 'cfeses_enabled' => 1, 'cfeses_eyebrow' => 'Droit individuel & vie militante', 'cfeses_title' => 'Formation Syndicale (CFESES)', 'cfeses_text' => "Tout·e salarié·e a droit au Congé de Formation Économique, Sociale, Environnementale et Syndicale : jusqu'à 12 jours par an avec maintien intégral de salaire. Remettez votre demande à l'employeur au moins 30 jours avant le stage.", 'cfeses_btn_label' => 'Demander une formation syndicale', 'cfeses_btn_url' => home_url( '/contact/' ), 'app_enabled' => 0, 'app_eyebrow' => 'Outil militant 100 % hors-ligne', 'app_title' => "L'Application Mobile UL CGT Foix Haute-Ariège", 'app_text' => 'Suivez les actualités locales, recevez les alertes mobilisation en temps réel et gardez votre carte de syndiqué virtuelle & vos 13 timbres toujours sur vous (Android / KMP).', 'app_btn_label' => "Télécharger l'application (.apk / Store)", 'app_download_url' => 'https://cgt-fha.fr/', 'app_qr_url' => CGT_FHA_URI . '/assets/img/qr-placeholder.svg', // Onglet 3 : Section 7 — Réseau syndical CGT (5 cartes verticales). 'network_enabled' => 1, 'network_title' => 'RÉSEAU SYNDICAL CGT', 'network_1_enabled' => 1, 'network_1_logo' => CGT_FHA_URI . '/assets/img/logo-cgt-09.jpg', 'network_1_label' => 'UD CGT 09', 'network_1_desc' => "Union Départementale des syndicats CGT de l'Ariège : coordination départementale des luttes et solidarité interprofessionnelle.", 'network_1_btn' => 'Visiter le site ↗', 'network_1_url' => 'https://ariege.cgt.fr/', 'network_2_enabled' => 1, 'network_2_logo' => CGT_FHA_URI . '/assets/img/logo-cgt.png', 'network_2_label' => 'Confédération CGT', 'network_2_desc' => 'Site national de la CGT : actualités confédérales, campagnes interprofessionnelles, analyses et repères revendicatifs.', 'network_2_btn' => 'Visiter le site ↗', 'network_2_url' => 'https://www.cgt.fr/', 'network_3_enabled' => 1, 'network_3_logo' => CGT_FHA_URI . '/assets/img/logo-nvo.png', 'network_3_label' => 'La NVO', 'network_3_desc' => "La Nouvelle Vie Ouvrière : le média d'information sociale et syndicale de la CGT au service du monde du travail.", 'network_3_btn' => 'Visiter le site ↗', 'network_3_url' => 'https://www.nvo.fr/', 'network_4_enabled' => 1, 'network_4_logo' => CGT_FHA_URI . '/assets/img/logo-ihs.jpg', 'network_4_label' => 'IHS CGT', 'network_4_desc' => "Institut CGT d'Histoire Sociale : mémoire vivante des luttes sociales, archives et recherches sur le mouvement ouvrier.", 'network_4_btn' => 'Visiter le site ↗', 'network_4_url' => 'https://www.ihs.cgt.fr/', 'network_5_enabled' => 1, 'network_5_logo' => CGT_FHA_URI . '/assets/img/logo-indecosa.png', 'network_5_label' => 'INDECOSA-CGT', 'network_5_desc' => 'Association de la CGT pour l\'information et la défense des consommateurs salarié·e·s (logement, énergie, consommation).', 'network_5_btn' => 'Visiter le site ↗', 'network_5_url' => 'https://www.indecosa-cgt.fr/', ); } /** * Retourne les options fusionnées avec les valeurs par défaut (mise en cache mémoire par requête). * * @param bool $fresh Force la relecture depuis la base de données. * @return array */ function cgt_fha_get_options( bool $fresh = false ): array { static $cached = null; if ( null !== $cached && ! $fresh ) { return $cached; } $saved = get_option( CGT_FHA_OPTION_KEY, array() ); $saved = is_array( $saved ) ? $saved : array(); $merged = wp_parse_args( $saved, cgt_fha_get_defaults() ); $media_keys = array( 'hero_bg_url', 'header_logo_url', 'footer_logo_url', 'app_qr_url', 'network_1_logo', 'network_2_logo', 'network_3_logo', 'network_4_logo', 'network_5_logo', ); // Garantit que les visuels critiques vidés par erreur retombent sur le défaut. $defaults = cgt_fha_get_defaults(); foreach ( $media_keys as $media_key ) { if ( empty( $merged[ $media_key ] ) ) { $merged[ $media_key ] = $defaults[ $media_key ]; } } $cached = $merged; return $cached; } /** * Migration automatique 1.0.0 -> 1.1.0 pour les sites où le thème est déjà activé. */ add_action( 'init', 'cgt_fha_maybe_upgrade_options', 5 ); function cgt_fha_maybe_upgrade_options(): void { if ( CGT_FHA_SCHEMA_VERSION === get_option( 'cgt_fha_schema_version', '1.0.0' ) ) { return; } $defaults = cgt_fha_get_defaults(); $saved = get_option( CGT_FHA_OPTION_KEY, array() ); if ( is_array( $saved ) && ! empty( $saved ) ) { // Bascule du logo de pied de page vers la bannière texte blanc si ancien défaut ou vide. if ( empty( $saved['footer_logo_url'] ) || false !== strpos( (string) $saved['footer_logo_url'], 'logo-ul-light.svg' ) ) { $saved['footer_logo_url'] = $defaults['footer_logo_url']; } // Désactive le bloc Application Mobile par défaut tant que le contenu n'est pas prêt. $saved['app_enabled'] = 0; // Remplace les anciennes chaînes par défaut 1.0.0 si elles n'ont pas été personnalisées. $old_v1_defaults = array( 'local_news_title' => 'SUR LE TERRAIN EN HAUTE-ARIÈGE', 'footer_desc' => "Syndicat interprofessionnel de proximité au service des salarié·e·s, privé·e·s d'emploi et retraité·e·s de Foix et de la Haute-Ariège.", 'mission_1_text' => "Construire le syndicat dans votre entreprise, préparer les élections CSE et ne plus rester isolé face à l'employeur.", 'mission_2_text' => "Faire respecter vos droits, vos salaires et vos conditions de travail, avec l'appui de nos conseillers du salarié et juristes.", 'mission_3_text' => 'Connaître les actualités des luttes en Haute-Ariège et bénéficier de vos droits à la formation syndicale (CFESES).', 'tpe_badge' => 'Salariés sans CSE · TPE / PME', 'tpe_text' => "Vous travaillez dans une petite entreprise (< 11 salariés), un commerce, l'artisanat ou sur un chantier sans représentant du personnel ? L'Union Locale CGT vous accueille et vous défend.", 'tpe_point_1' => "Confidentialité absolue : aucune démarche n'est portée à la connaissance de votre employeur sans votre accord explicite.", 'tpe_point_2' => "Syndicat Multipros : adhérez et organisez-vous collectivement même dans une très petite entreprise dépourvue de section syndicale.", 'tpe_point_3' => 'Conseillers du Salarié : accompagnement gratuit lors des entretiens préalables à un licenciement ou une rupture.', 'network_2_label' => 'Confédération CGT (cgt.fr)', 'network_3_label' => 'La NVO (nvo.fr)', ); foreach ( $old_v1_defaults as $key => $old_val ) { if ( isset( $saved[ $key ] ) && $saved[ $key ] === $old_val ) { $saved[ $key ] = $defaults[ $key ]; } } // Remplace les anciens placeholders SVG du Réseau CGT par les 5 logos officiels (1.2.0). for ( $i = 1; $i <= 5; $i++ ) { $logo_key = 'network_' . $i . '_logo'; $cur_logo = (string) ( $saved[ $logo_key ] ?? '' ); if ( '' === $cur_logo || ( false !== strpos( $cur_logo, 'network-' ) && false !== strpos( $cur_logo, '.svg' ) ) ) { $saved[ $logo_key ] = $defaults[ $logo_key ]; } } $saved = wp_parse_args( $saved, $defaults ); update_option( CGT_FHA_OPTION_KEY, $saved ); cgt_fha_get_options( true ); } // Purge le cache confédéral pour forcer le nouvel extracteur sur la page d'accueil. delete_transient( 'cgt_fha_confederal_feed' ); delete_transient( 'cgt_fha_confederal_feed_lock' ); delete_option( 'cgt_fha_confederal_feed_backup' ); update_option( 'cgt_fha_schema_version', CGT_FHA_SCHEMA_VERSION, true ); } /** * Vérifie si le bandeau d'alerte mobilisation doit être affiché. */ function cgt_fha_is_banner_active(): bool { $opts = cgt_fha_get_options(); if ( empty( $opts['banner_enabled'] ) || empty( $opts['banner_text'] ) || empty( $opts['banner_expires'] ) ) { return false; } $tz = wp_timezone(); $expire_dt = DateTimeImmutable::createFromFormat( 'Y-m-d\TH:i', (string) $opts['banner_expires'], $tz ); if ( ! $expire_dt ) { return false; } $now_ts = (int) current_time( 'timestamp' ); return $now_ts < $expire_dt->getTimestamp(); } /** * Enregistrement du réglage et de la page d'administration. */ add_action( 'admin_menu', 'cgt_fha_register_admin_page' ); function cgt_fha_register_admin_page(): void { add_theme_page( 'Réglages UL CGT Foix Haute-Ariège', 'Réglages UL CGT', 'manage_options', 'cgt-fha-settings', 'cgt_fha_render_admin_page' ); } add_action( 'admin_init', 'cgt_fha_register_settings' ); function cgt_fha_register_settings(): void { register_setting( 'cgt_fha_settings_group', CGT_FHA_OPTION_KEY, array( 'type' => 'array', 'sanitize_callback' => 'cgt_fha_sanitize_options', 'default' => cgt_fha_get_defaults(), ) ); } /** * Pré-remplit l'option en base lors de l'activation du thème (autoload = true, taille ~5 Ko). */ add_action( 'after_switch_theme', 'cgt_fha_seed_default_options' ); function cgt_fha_seed_default_options(): void { if ( false === get_option( CGT_FHA_OPTION_KEY, false ) ) { add_option( CGT_FHA_OPTION_KEY, cgt_fha_get_defaults(), '', 'yes' ); } update_option( 'cgt_fha_schema_version', CGT_FHA_SCHEMA_VERSION, true ); } /** * Nettoyage et validation de toutes les options soumises dans l'admin. * * @param mixed $input Données brutes du formulaire. * @return array */ function cgt_fha_sanitize_options( $input ): array { $input = is_array( $input ) ? $input : array(); $defaults = cgt_fha_get_defaults(); $existing = cgt_fha_get_options( true ); $clean = array(); $text_fields = array( 'phone', 'address', 'footer_call', 'banner_text', 'hero_title_line1', 'hero_title_line2', 'hero_btn1_label', 'hero_btn2_label', 'missions_title', 'mission_1_title', 'mission_2_title', 'mission_3_title', 'local_news_title', 'local_news_more', 'confederal_title', 'tpe_badge', 'tpe_title', 'tpe_btn_label', 'cfeses_eyebrow', 'cfeses_title', 'cfeses_btn_label', 'app_eyebrow', 'app_title', 'app_btn_label', 'network_title', 'network_1_label', 'network_1_btn', 'network_2_label', 'network_2_btn', 'network_3_label', 'network_3_btn', 'network_4_label', 'network_4_btn', 'network_5_label', 'network_5_btn', ); foreach ( $text_fields as $field ) { $val = isset( $input[ $field ] ) ? sanitize_text_field( wp_unslash( (string) $input[ $field ] ) ) : ( $existing[ $field ] ?? $defaults[ $field ] ); $clean[ $field ] = $val; } $textarea_fields = array( 'hours', 'footer_desc', 'hero_quote', 'missions_subtitle', 'mission_1_text', 'mission_2_text', 'mission_3_text', 'tpe_text', 'tpe_point_1', 'tpe_point_2', 'tpe_point_3', 'cfeses_text', 'app_text', 'network_1_desc', 'network_2_desc', 'network_3_desc', 'network_4_desc', 'network_5_desc', ); foreach ( $textarea_fields as $field ) { $val = isset( $input[ $field ] ) ? sanitize_textarea_field( wp_unslash( (string) $input[ $field ] ) ) : ( $existing[ $field ] ?? $defaults[ $field ] ); $clean[ $field ] = $val; } $clean['email'] = isset( $input['email'] ) ? sanitize_email( wp_unslash( (string) $input['email'] ) ) : $defaults['email']; $url_fields = array( 'facebook_url', 'instagram_url', 'youtube_url', 'header_logo_url', 'footer_logo_url', 'news_url', 'calendar_url', 'contact_url', 'join_url', 'legal_url', 'banner_url', 'hero_bg_url', 'hero_btn1_url', 'hero_btn2_url', 'tpe_btn_url', 'cfeses_btn_url', 'app_download_url', 'app_qr_url', 'network_1_logo', 'network_1_url', 'network_2_logo', 'network_2_url', 'network_3_logo', 'network_3_url', 'network_4_logo', 'network_4_url', 'network_5_logo', 'network_5_url', ); foreach ( $url_fields as $field ) { $raw = isset( $input[ $field ] ) ? trim( (string) wp_unslash( $input[ $field ] ) ) : ( $existing[ $field ] ?? $defaults[ $field ] ); $clean[ $field ] = '' === $raw ? '' : esc_url_raw( $raw ); } $checkbox_fields = array( 'banner_enabled', 'tpe_enabled', 'cfeses_enabled', 'app_enabled', 'network_enabled', 'network_1_enabled', 'network_2_enabled', 'network_3_enabled', 'network_4_enabled', 'network_5_enabled', ); foreach ( $checkbox_fields as $field ) { $clean[ $field ] = ! empty( $input[ $field ] ) ? 1 : 0; } // Validation datetime-local (YYYY-MM-DDTHH:MM). $raw_expires = isset( $input['banner_expires'] ) ? sanitize_text_field( wp_unslash( (string) $input['banner_expires'] ) ) : $defaults['banner_expires']; $clean['banner_expires'] = preg_match( '/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}$/', $raw_expires ) ? $raw_expires : $defaults['banner_expires']; // Validation des icônes de mission. $valid_icons = array_keys( cgt_fha_get_mission_icon_choices() ); foreach ( array( 'mission_1_icon', 'mission_2_icon', 'mission_3_icon' ) as $icon_key ) { $chosen = isset( $input[ $icon_key ] ) ? sanitize_key( (string) $input[ $icon_key ] ) : $defaults[ $icon_key ]; $clean[ $icon_key ] = in_array( $chosen, $valid_icons, true ) ? $chosen : $defaults[ $icon_key ]; } return $clean; } /** * Liste des icônes disponibles dans le sélecteur admin des 3 cartes de mission. * * @return array */ function cgt_fha_get_mission_icon_choices(): array { return array( 'fist' => 'Poing levé / Collectif', 'shield' => 'Bouclier / Défense des droits', 'chat' => 'Bulles d\'échange / Information & Formation', 'megaphone' => 'Mégaphone / Mobilisation', 'scale' => 'Balance / Prud\'hommes & Juridique', 'users' => 'Collectif salarié·e·s', 'book' => 'Livre / Formation CFESES', ); } /** * Helper d'affichage d'un champ texte/URL/textarea dans l'admin. */ function cgt_fha_admin_field_row( string $key, string $label, string $type = 'text', string $desc = '' ): void { $opts = cgt_fha_get_options(); $val = $opts[ $key ] ?? ''; $id = 'cgt_fha_' . $key; $name = CGT_FHA_OPTION_KEY . '[' . $key . ']'; ?>

Réglages UL CGT. */ function cgt_fha_render_admin_page(): void { if ( ! current_user_can( 'manage_options' ) ) { return; } $defaults = cgt_fha_get_defaults(); $opts = cgt_fha_get_options( true ); $active_tab = isset( $_GET['tab'] ) ? sanitize_key( (string) $_GET['tab'] ) : 'identity'; if ( ! in_array( $active_tab, array( 'identity', 'banner', 'homepage', 'confederal' ), true ) ) { $active_tab = 'identity'; } $feed_status = class_exists( 'CGT_FHA_Confederal_Feed' ) ? CGT_FHA_Confederal_Feed::get_cache_status() : array(); ?>

Réglages de l'Union Locale CGT Foix Haute-Ariège

Tous les textes, images, icônes, coordonnées et liens du thème sont modifiables ici sans toucher au code.

Actualités confédérales (`cgt.fr`) synchronisées avec succès.

>

Coordonnées & Identité visuelle

Pages clés de l'Union Locale

>

Bandeau d'Alerte Mobilisation Auto-Expirant

Le bandeau rouge CGT s'affiche uniquement si la case Activer le bandeau est cochée ET que l'heure actuelle du site () est antérieure à la date d'expiration.

>

Section 1 — Bannière Hero Plein Écran


Section 2 — « À QUOI NOUS SERVONS ? » (3 Cartes)


Sections 3 & 4 — Titres Actualités


Section 5 — Salariés isolés & TPE (Syndicat Multipros)


Section 6 — Formation Syndicale (CFESES) & Application Mobile


Section 7 — Réseau Syndical CGT (Cartes avec logo, description et bouton)

style="margin-top:20px;">

État du flux automatique « Actualité Confédérale » (`cgt.fr`)

Statut du cache : Actif (Transient valide)' : 'Expiré ou en attente de synchronisation'; ?>

Dernière synchronisation :

Source utilisée :

Article « À la une » en cache :