Implement superadmin login redirection and session handling improvements

This commit introduces a new function, `fxSuperadmRedirectToLoginIfNeeded`, to streamline the login redirection process for superadmin users. It enhances session management by checking for user authentication and allowing legacy account access under specific conditions. Additionally, the login flow is updated to ensure users are redirected appropriately after login, improving the overall security and user experience in the superadmin interface. These changes aim to enhance maintainability and clarity in session handling across various superadmin pages.
This commit is contained in:
2026-07-07 14:15:48 -04:00
parent 20ab5a8f08
commit c7482016ce
14 changed files with 408 additions and 4 deletions

View File

@ -8,6 +8,10 @@ require_once('inc_start_time.php');
require_once('inc_fonctions.php');
require_once('inc_fx_messages.php');
if (empty($_SESSION['usa_id'])) {
fxAdminRequireSuperadmLogin();
}
if (!fxAdminCanUseTextEditTools()) {
header('HTTP/1.1 403 Forbidden');
echo 'Accès refusé.';

View File

@ -168,6 +168,18 @@ function fxAdminCanUseTextEditTools() {
return !empty($_SESSION['usa_id']) && fxAdminIsDevPreprod();
}
/** Outils admin /php/* sans usa_id → login superadm (pas « Accès refusé »). */
function fxAdminRequireSuperadmLogin() {
if (!empty($_SESSION['usa_id'])) {
return;
}
global $vDomaine;
$_SESSION['superadm_redirect_after_login'] = $_SERVER['REQUEST_URI'];
header('Location: ' . rtrim((string)$vDomaine, '/') . '/superadm/login.php');
exit;
}
/** Sync tables statiques (sync_static_db.php) — superadm, préprod dev seulement. */
function fxAdminStaticSyncAllowed() {
return !empty($_SESSION['usa_id']) && fxAdminIsDevPreprod();

View File

@ -10,6 +10,10 @@ require_once('inc_fonctions.php');
require_once('inc_fx_messages.php');
require_once('inc_fx_static_sync.php');
if (empty($_SESSION['usa_id'])) {
fxAdminRequireSuperadmLogin();
}
if (!fxAdminStaticSyncAllowed()) {
header('HTTP/1.1 403 Forbidden');
echo 'Accès refusé.';

View File

@ -8,6 +8,10 @@ require_once('inc_start_time.php');
require_once('inc_fonctions.php');
require_once('inc_fx_messages.php');
if (empty($_SESSION['usa_id'])) {
fxAdminRequireSuperadmLogin();
}
if (!fxAdminCanUseTextEditTools()) {
header('HTTP/1.1 403 Forbidden');
echo 'Accès refusé.';

View File

@ -0,0 +1,28 @@
-- MSIN-info — Inventaire table info (exécuter sur CHAQUE base : backup d'avant sync, prod actuelle, dev)
-- Exporter les résultats (CSV) et comparer dans Navicat ou Excel.
-- Ne modifie rien.
-- 1) Volume global
SELECT 'info_total' AS k, COUNT(*) AS v FROM info
UNION ALL
SELECT 'info_poubelle', COUNT(*) FROM info WHERE info_texte = info_clef
UNION ALL
SELECT 'info_promoteur_hub', COUNT(*) FROM info WHERE info_clef LIKE 'promoteur_hub_%';
-- 2) Clés hub promoteur (souvent les premières manquantes)
SELECT info_clef, info_langue, info_actif,
CASE WHEN info_texte = info_clef THEN 'POUBELLE' ELSE 'OK' END AS etat,
LEFT(info_texte, 80) AS extrait
FROM info
WHERE info_clef LIKE 'promoteur_hub_%'
ORDER BY info_clef, info_langue;
-- 3) Lignes poubelle restantes (auto-créées par afficheTexte pendant fenêtre vide)
SELECT info_clef, info_langue, info_prg, info_texte
FROM info
WHERE info_texte = info_clef
ORDER BY info_prg, info_clef, info_langue
LIMIT 500;
-- 4) Export complet pour diff externe (décommenter si besoin — peut être gros)
-- SELECT info_clef, info_langue, info_prg, info_texte, info_actif FROM info ORDER BY info_clef, info_langue, info_prg;

View File

@ -0,0 +1,85 @@
-- MSIN-info — Diagnostic comparatif table info (cible vs backup)
-- Contexte : sync_static_db a écrasé / corrompu info ; clés brutes dans l'UI (info_texte = info_clef)
-- Prérequis : importer la backup sur le MÊME serveur MySQL sous un nom dédié (ex. devinscription_bak)
-- Notes prod : lecture seule — ne pas exécuter les DELETE/UPDATE du script restore sans validation
--
-- 1) Remplacer les deux noms ci-dessous
-- 2) Exécuter section par section dans Navicat
-- 3) Exporter les SELECT « manquants / corrompus » en CSV si besoin
SET NAMES utf8mb4;
-- === CONFIG — modifier avant exécution ===
SET @db_cible = 'devinscription_preprod';
SET @db_backup = 'devinscription_bak'; -- backup d'avant incident sync / import prod
-- === A) Volumes ===
SELECT 'cible_total' AS metrique, COUNT(*) AS v FROM devinscription_preprod.info
UNION ALL SELECT 'backup_total', COUNT(*) FROM devinscription_bak.info
UNION ALL SELECT 'cible_poubelle', COUNT(*) FROM devinscription_preprod.info WHERE info_texte = info_clef
UNION ALL SELECT 'backup_poubelle', COUNT(*) FROM devinscription_bak.info WHERE info_texte = info_clef;
-- === B) Lignes manquantes dans la cible (présentes en backup, absentes en cible) ===
SELECT b.info_clef, b.info_langue, b.info_prg,
LEFT(b.info_texte, 100) AS texte_backup
FROM devinscription_bak.info b
LEFT JOIN devinscription_preprod.info c
ON c.info_clef = b.info_clef AND c.info_langue = b.info_langue AND c.info_prg = b.info_prg
WHERE c.pk_info IS NULL
ORDER BY b.info_prg, b.info_clef, b.info_langue;
-- === C) Lignes corrompues en cible (poubelle auto-créée par afficheTexte) réparables depuis backup ===
SELECT c.pk_info, c.info_clef, c.info_langue, c.info_prg,
c.info_texte AS texte_cible,
LEFT(b.info_texte, 100) AS texte_backup
FROM devinscription_preprod.info c
INNER JOIN devinscription_bak.info b
ON b.info_clef = c.info_clef AND b.info_langue = c.info_langue AND b.info_prg = c.info_prg
WHERE c.info_texte = c.info_clef
AND b.info_texte <> b.info_clef
AND TRIM(b.info_texte) <> ''
ORDER BY c.info_prg, c.info_clef, c.info_langue;
-- === D) Texte différent (backup OK, cible pas poubelle) — revue manuelle avant UPDATE massif ===
SELECT c.pk_info, c.info_clef, c.info_langue, c.info_prg,
LEFT(c.info_texte, 80) AS texte_cible,
LEFT(b.info_texte, 80) AS texte_backup
FROM devinscription_preprod.info c
INNER JOIN devinscription_bak.info b
ON b.info_clef = c.info_clef AND b.info_langue = c.info_langue AND b.info_prg = c.info_prg
WHERE c.info_texte <> b.info_texte
AND c.info_texte <> c.info_clef
AND b.info_texte <> b.info_clef
ORDER BY c.info_prg, c.info_clef, c.info_langue
LIMIT 500;
-- === E) Poubelle en cible SANS équivalent backup (créées après incident — souvent supprimables) ===
SELECT c.pk_info, c.info_clef, c.info_langue, c.info_prg, c.info_texte
FROM devinscription_preprod.info c
LEFT JOIN devinscription_bak.info b
ON b.info_clef = c.info_clef AND b.info_langue = c.info_langue AND b.info_prg = c.info_prg
WHERE c.info_texte = c.info_clef
AND b.pk_info IS NULL
ORDER BY c.info_creation DESC, c.info_prg, c.info_clef
LIMIT 500;
-- === F) Modules les plus touchés (prioriser la relecture UI) ===
SELECT c.info_prg,
SUM(c.info_texte = c.info_clef) AS nb_poubelle,
COUNT(*) AS nb_total
FROM devinscription_preprod.info c
GROUP BY c.info_prg
HAVING nb_poubelle > 0
ORDER BY nb_poubelle DESC;
-- === G) Clés inscr_gestion_* / promoteur_hub_* (capture écran typique) ===
SELECT c.info_clef, c.info_langue, c.info_prg,
CASE WHEN c.info_texte = c.info_clef THEN 'POUBELLE' ELSE 'OK' END AS etat_cible,
CASE WHEN b.pk_info IS NULL THEN 'ABSENT_BACKUP' ELSE 'OK_BACKUP' END AS etat_backup,
LEFT(COALESCE(b.info_texte, c.info_texte), 80) AS extrait
FROM devinscription_preprod.info c
LEFT JOIN devinscription_bak.info b
ON b.info_clef = c.info_clef AND b.info_langue = c.info_langue AND b.info_prg = c.info_prg
WHERE c.info_clef LIKE 'inscr_gestion_%'
OR c.info_clef LIKE 'promoteur_hub_%'
ORDER BY c.info_clef, c.info_langue, c.info_prg;

View File

@ -0,0 +1,88 @@
-- MSIN-info — Restauration MASSIVE table info depuis backup (Navicat)
-- Contexte : après sync_static_db / import prod — clés brutes partout (info_texte = info_clef)
-- Prérequis :
-- 1) Backup d'avant incident importée sur le MÊME serveur (ex. devinscription_bak)
-- 2) Exécuter MSIN-info-restore-diag-compare.sql et valider les volumes
-- 3) FAIRE UN DUMP de devinscription_preprod.info AVANT ce script
-- Idempotent : INSERT manquants + UPDATE poubelles ; ne touche pas les textes déjà OK
-- Notes prod client : attendre blocage sync info ; même procédure avec backup prod pré-sync
SET NAMES utf8mb4;
-- === CONFIG — modifier avant exécution ===
SET @db_cible = 'devinscription_preprod';
SET @db_backup = 'devinscription_bak';
-- ---------------------------------------------------------------------------
-- Étape 1 — Insérer les lignes absentes en cible (clé = info_clef + info_langue + info_prg)
-- ---------------------------------------------------------------------------
INSERT INTO devinscription_preprod.info (
info_clef, info_langue, info_texte, info_aide, info_prg,
info_description, info_trie, info_actif,
info_option1, info_option2, info_option3, info_creation
)
SELECT
b.info_clef, b.info_langue, b.info_texte, b.info_aide, b.info_prg,
b.info_description, b.info_trie, b.info_actif,
b.info_option1, b.info_option2, b.info_option3, NOW()
FROM devinscription_bak.info b
LEFT JOIN devinscription_preprod.info c
ON c.info_clef = b.info_clef AND c.info_langue = b.info_langue AND c.info_prg = b.info_prg
WHERE c.pk_info IS NULL;
-- ---------------------------------------------------------------------------
-- Étape 2 — Réparer les poubelles (info_texte = info_clef) quand backup a un vrai libellé
-- ---------------------------------------------------------------------------
UPDATE devinscription_preprod.info c
INNER JOIN devinscription_bak.info b
ON b.info_clef = c.info_clef AND b.info_langue = c.info_langue AND b.info_prg = c.info_prg
SET
c.info_texte = b.info_texte,
c.info_aide = b.info_aide,
c.info_description = b.info_description,
c.info_trie = b.info_trie,
c.info_actif = b.info_actif,
c.info_option1 = b.info_option1,
c.info_option2 = b.info_option2,
c.info_option3 = b.info_option3,
c.info_maj = NOW()
WHERE c.info_texte = c.info_clef
AND b.info_texte <> b.info_clef
AND TRIM(b.info_texte) <> '';
-- ---------------------------------------------------------------------------
-- Étape 3 — Réparer texte vide en cible (backup non vide)
-- ---------------------------------------------------------------------------
UPDATE devinscription_preprod.info c
INNER JOIN devinscription_bak.info b
ON b.info_clef = c.info_clef AND b.info_langue = c.info_langue AND b.info_prg = c.info_prg
SET
c.info_texte = b.info_texte,
c.info_aide = b.info_aide,
c.info_maj = NOW()
WHERE TRIM(c.info_texte) = ''
AND TRIM(b.info_texte) <> ''
AND b.info_texte <> b.info_clef;
-- ---------------------------------------------------------------------------
-- Étape 4 — Supprimer poubelles orphelines (absentes du backup, jamais traduites)
-- ATTENTION : exécuter seulement si section E du diag est cohérente
-- ---------------------------------------------------------------------------
DELETE c FROM devinscription_preprod.info c
LEFT JOIN devinscription_bak.info b
ON b.info_clef = c.info_clef AND b.info_langue = c.info_langue AND b.info_prg = c.info_prg
WHERE c.info_texte = c.info_clef
AND b.pk_info IS NULL;
-- ---------------------------------------------------------------------------
-- Étape 5 — Vérification post-restore (doit tendre vers 0 poubelle)
-- ---------------------------------------------------------------------------
SELECT 'post_total' AS k, COUNT(*) AS v FROM devinscription_preprod.info
UNION ALL
SELECT 'post_poubelle', COUNT(*) FROM devinscription_preprod.info WHERE info_texte = info_clef
UNION ALL
SELECT 'post_manquants_vs_backup', COUNT(*)
FROM devinscription_bak.info b
LEFT JOIN devinscription_preprod.info c
ON c.info_clef = b.info_clef AND c.info_langue = b.info_langue AND c.info_prg = b.info_prg
WHERE c.pk_info IS NULL;

View File

@ -0,0 +1,117 @@
-- MSIN-promoteur-hub — Restaurer libellés hub (table info)
-- Contexte : clés promoteur_hub_* absentes ou info_texte = info_clef après sync / ménage
-- Idempotent : n'écrase pas une traduction déjà personnalisée (info_texte <> info_clef)
-- Prérequis : aucun. Exécuter sur dev préprod (serveur).
SET NAMES utf8mb4;
INSERT INTO info (info_clef, info_langue, info_texte, info_aide, info_prg, info_description, info_trie, info_actif, info_option1, info_option2, info_option3, info_creation)
SELECT 'promoteur_hub_intro', 'fr', 'Acces a vos tableaux de bord par evenement.', '', 'compte.php', '', 0, 1, '', '', '', NOW()
WHERE NOT EXISTS (SELECT 1 FROM info WHERE info_clef = 'promoteur_hub_intro' AND info_langue = 'fr' AND info_prg = 'compte.php');
INSERT INTO info (info_clef, info_langue, info_texte, info_aide, info_prg, info_description, info_trie, info_actif, info_option1, info_option2, info_option3, info_creation)
SELECT 'promoteur_hub_intro', 'en', 'Access your event dashboards.', '', 'compte.php', '', 0, 1, '', '', '', NOW()
WHERE NOT EXISTS (SELECT 1 FROM info WHERE info_clef = 'promoteur_hub_intro' AND info_langue = 'en' AND info_prg = 'compte.php');
INSERT INTO info (info_clef, info_langue, info_texte, info_aide, info_prg, info_description, info_trie, info_actif, info_option1, info_option2, info_option3, info_creation)
SELECT 'promoteur_hub_link_participant', 'fr', 'Mon espace client MS1', '', 'compte.php', '', 0, 1, '', '', '', NOW()
WHERE NOT EXISTS (SELECT 1 FROM info WHERE info_clef = 'promoteur_hub_link_participant' AND info_langue = 'fr' AND info_prg = 'compte.php');
INSERT INTO info (info_clef, info_langue, info_texte, info_aide, info_prg, info_description, info_trie, info_actif, info_option1, info_option2, info_option3, info_creation)
SELECT 'promoteur_hub_link_participant', 'en', 'My MS1 client space', '', 'compte.php', '', 0, 1, '', '', '', NOW()
WHERE NOT EXISTS (SELECT 1 FROM info WHERE info_clef = 'promoteur_hub_link_participant' AND info_langue = 'en' AND info_prg = 'compte.php');
INSERT INTO info (info_clef, info_langue, info_texte, info_aide, info_prg, info_description, info_trie, info_actif, info_option1, info_option2, info_option3, info_creation)
SELECT 'promoteur_hub_annonces_titre', 'fr', 'Nouveautes MS1', '', 'compte.php', '', 0, 1, '', '', '', NOW()
WHERE NOT EXISTS (SELECT 1 FROM info WHERE info_clef = 'promoteur_hub_annonces_titre' AND info_langue = 'fr' AND info_prg = 'compte.php');
INSERT INTO info (info_clef, info_langue, info_texte, info_aide, info_prg, info_description, info_trie, info_actif, info_option1, info_option2, info_option3, info_creation)
SELECT 'promoteur_hub_annonces_titre', 'en', 'MS1 updates', '', 'compte.php', '', 0, 1, '', '', '', NOW()
WHERE NOT EXISTS (SELECT 1 FROM info WHERE info_clef = 'promoteur_hub_annonces_titre' AND info_langue = 'en' AND info_prg = 'compte.php');
INSERT INTO info (info_clef, info_langue, info_texte, info_aide, info_prg, info_description, info_trie, info_actif, info_option1, info_option2, info_option3, info_creation)
SELECT 'promoteur_hub_section_highlight', 'fr', 'En vedette', '', 'compte.php', '', 0, 1, '', '', '', NOW()
WHERE NOT EXISTS (SELECT 1 FROM info WHERE info_clef = 'promoteur_hub_section_highlight' AND info_langue = 'fr' AND info_prg = 'compte.php');
INSERT INTO info (info_clef, info_langue, info_texte, info_aide, info_prg, info_description, info_trie, info_actif, info_option1, info_option2, info_option3, info_creation)
SELECT 'promoteur_hub_section_highlight', 'en', 'Highlights', '', 'compte.php', '', 0, 1, '', '', '', NOW()
WHERE NOT EXISTS (SELECT 1 FROM info WHERE info_clef = 'promoteur_hub_section_highlight' AND info_langue = 'en' AND info_prg = 'compte.php');
INSERT INTO info (info_clef, info_langue, info_texte, info_aide, info_prg, info_description, info_trie, info_actif, info_option1, info_option2, info_option3, info_creation)
SELECT 'promoteur_hub_section_archived', 'fr', 'Evenements passes', '', 'compte.php', '', 0, 1, '', '', '', NOW()
WHERE NOT EXISTS (SELECT 1 FROM info WHERE info_clef = 'promoteur_hub_section_archived' AND info_langue = 'fr' AND info_prg = 'compte.php');
INSERT INTO info (info_clef, info_langue, info_texte, info_aide, info_prg, info_description, info_trie, info_actif, info_option1, info_option2, info_option3, info_creation)
SELECT 'promoteur_hub_section_archived', 'en', 'Past events', '', 'compte.php', '', 0, 1, '', '', '', NOW()
WHERE NOT EXISTS (SELECT 1 FROM info WHERE info_clef = 'promoteur_hub_section_archived' AND info_langue = 'en' AND info_prg = 'compte.php');
INSERT INTO info (info_clef, info_langue, info_texte, info_aide, info_prg, info_description, info_trie, info_actif, info_option1, info_option2, info_option3, info_creation)
SELECT 'promoteur_hub_section_gestion', 'fr', 'Gestion', '', 'compte.php', '', 0, 1, '', '', '', NOW()
WHERE NOT EXISTS (SELECT 1 FROM info WHERE info_clef = 'promoteur_hub_section_gestion' AND info_langue = 'fr' AND info_prg = 'compte.php');
INSERT INTO info (info_clef, info_langue, info_texte, info_aide, info_prg, info_description, info_trie, info_actif, info_option1, info_option2, info_option3, info_creation)
SELECT 'promoteur_hub_section_gestion', 'en', 'Management', '', 'compte.php', '', 0, 1, '', '', '', NOW()
WHERE NOT EXISTS (SELECT 1 FROM info WHERE info_clef = 'promoteur_hub_section_gestion' AND info_langue = 'en' AND info_prg = 'compte.php');
INSERT INTO info (info_clef, info_langue, info_texte, info_aide, info_prg, info_description, info_trie, info_actif, info_option1, info_option2, info_option3, info_creation)
SELECT 'promoteur_hub_btn_tableau', 'fr', 'Tableau de bord', '', 'compte.php', '', 0, 1, '', '', '', NOW()
WHERE NOT EXISTS (SELECT 1 FROM info WHERE info_clef = 'promoteur_hub_btn_tableau' AND info_langue = 'fr' AND info_prg = 'compte.php');
INSERT INTO info (info_clef, info_langue, info_texte, info_aide, info_prg, info_description, info_trie, info_actif, info_option1, info_option2, info_option3, info_creation)
SELECT 'promoteur_hub_btn_tableau', 'en', 'Dashboard', '', 'compte.php', '', 0, 1, '', '', '', NOW()
WHERE NOT EXISTS (SELECT 1 FROM info WHERE info_clef = 'promoteur_hub_btn_tableau' AND info_langue = 'en' AND info_prg = 'compte.php');
INSERT INTO info (info_clef, info_langue, info_texte, info_aide, info_prg, info_description, info_trie, info_actif, info_option1, info_option2, info_option3, info_creation)
SELECT 'promoteur_hub_btn_mobile', 'fr', 'Inscriptions mobile', '', 'compte.php', '', 0, 1, '', '', '', NOW()
WHERE NOT EXISTS (SELECT 1 FROM info WHERE info_clef = 'promoteur_hub_btn_mobile' AND info_langue = 'fr' AND info_prg = 'compte.php');
INSERT INTO info (info_clef, info_langue, info_texte, info_aide, info_prg, info_description, info_trie, info_actif, info_option1, info_option2, info_option3, info_creation)
SELECT 'promoteur_hub_btn_mobile', 'en', 'Mobile registrations', '', 'compte.php', '', 0, 1, '', '', '', NOW()
WHERE NOT EXISTS (SELECT 1 FROM info WHERE info_clef = 'promoteur_hub_btn_mobile' AND info_langue = 'en' AND info_prg = 'compte.php');
INSERT INTO info (info_clef, info_langue, info_texte, info_aide, info_prg, info_description, info_trie, info_actif, info_option1, info_option2, info_option3, info_creation)
SELECT 'promoteur_hub_menu', 'fr', 'Mes evenements (promoteur)', '', 'compte.php', '', 0, 1, '', '', '', NOW()
WHERE NOT EXISTS (SELECT 1 FROM info WHERE info_clef = 'promoteur_hub_menu' AND info_langue = 'fr' AND info_prg = 'compte.php');
INSERT INTO info (info_clef, info_langue, info_texte, info_aide, info_prg, info_description, info_trie, info_actif, info_option1, info_option2, info_option3, info_creation)
SELECT 'promoteur_hub_menu', 'en', 'My events (promoter)', '', 'compte.php', '', 0, 1, '', '', '', NOW()
WHERE NOT EXISTS (SELECT 1 FROM info WHERE info_clef = 'promoteur_hub_menu' AND info_langue = 'en' AND info_prg = 'compte.php');
INSERT INTO info (info_clef, info_langue, info_texte, info_aide, info_prg, info_description, info_trie, info_actif, info_option1, info_option2, info_option3, info_creation)
SELECT 'promoteur_hub_empty', 'fr', 'Aucun evenement accessible pour le moment.', '', 'compte.php', '', 0, 1, '', '', '', NOW()
WHERE NOT EXISTS (SELECT 1 FROM info WHERE info_clef = 'promoteur_hub_empty' AND info_langue = 'fr' AND info_prg = 'compte.php');
INSERT INTO info (info_clef, info_langue, info_texte, info_aide, info_prg, info_description, info_trie, info_actif, info_option1, info_option2, info_option3, info_creation)
SELECT 'promoteur_hub_empty', 'en', 'No accessible events at this time.', '', 'compte.php', '', 0, 1, '', '', '', NOW()
WHERE NOT EXISTS (SELECT 1 FROM info WHERE info_clef = 'promoteur_hub_empty' AND info_langue = 'en' AND info_prg = 'compte.php');
-- Lignes poubelle (auto-créées par afficheTexte) : remettre le libellé par défaut
UPDATE info SET info_texte = 'Acces a vos tableaux de bord par evenement.'
WHERE info_clef = 'promoteur_hub_intro' AND info_langue = 'fr' AND info_prg = 'compte.php' AND info_texte = info_clef;
UPDATE info SET info_texte = 'Access your event dashboards.'
WHERE info_clef = 'promoteur_hub_intro' AND info_langue = 'en' AND info_prg = 'compte.php' AND info_texte = info_clef;
UPDATE info SET info_texte = 'Mon espace client MS1'
WHERE info_clef = 'promoteur_hub_link_participant' AND info_langue = 'fr' AND info_prg = 'compte.php' AND info_texte = info_clef;
UPDATE info SET info_texte = 'My MS1 client space'
WHERE info_clef = 'promoteur_hub_link_participant' AND info_langue = 'en' AND info_prg = 'compte.php' AND info_texte = info_clef;
UPDATE info SET info_texte = 'Nouveautes MS1'
WHERE info_clef = 'promoteur_hub_annonces_titre' AND info_langue = 'fr' AND info_prg = 'compte.php' AND info_texte = info_clef;
UPDATE info SET info_texte = 'MS1 updates'
WHERE info_clef = 'promoteur_hub_annonces_titre' AND info_langue = 'en' AND info_prg = 'compte.php' AND info_texte = info_clef;
UPDATE info SET info_texte = 'En vedette'
WHERE info_clef = 'promoteur_hub_section_highlight' AND info_langue = 'fr' AND info_prg = 'compte.php' AND info_texte = info_clef;
UPDATE info SET info_texte = 'Highlights'
WHERE info_clef = 'promoteur_hub_section_highlight' AND info_langue = 'en' AND info_prg = 'compte.php' AND info_texte = info_clef;
UPDATE info SET info_texte = 'Tableau de bord'
WHERE info_clef = 'promoteur_hub_btn_tableau' AND info_langue = 'fr' AND info_prg = 'compte.php' AND info_texte = info_clef;
UPDATE info SET info_texte = 'Dashboard'
WHERE info_clef = 'promoteur_hub_btn_tableau' AND info_langue = 'en' AND info_prg = 'compte.php' AND info_texte = info_clef;

View File

@ -10,7 +10,8 @@ require_once('php/inc_fx_doc_admin.php');
global $objDatabase, $vDomaine, $vblnEnvironementDev, $vblnEnvironementPreProd;
$blnLogged = !empty($_SESSION['usa_id']);
fxSuperadmRedirectToLoginIfNeeded(false);
$blnLogged = fxSuperadmIsLoggedIn();
$strFlash = '';
$strError = '';

View File

@ -198,8 +198,10 @@ if (isset($_GET['action']) && $_GET['action'] == 'migrateveacceslegacyall') {
require_once('php/inc_start_time.php');
if ($strAction != 'report') {
$blnLogged = fxSuperadmIsLoggedIn();
fxSuperadmRedirectToLoginIfNeeded(false);
$blnLogged = true;
} else {
fxSuperadmRedirectToLoginIfNeeded(true);
$intMenu2 = base64_decode(urldecode($intMenu));
$blnLogged = fxSuperadmReportMenuAllowed(intval($intMenu2));
}

View File

@ -2,7 +2,7 @@
session_start();
if (!empty($_SESSION['usa_id'])) {
header('Location: index.php');
header('Location: ' . fxSuperadmConsumeRedirectAfterLogin('index.php'));
exit;
}
@ -30,7 +30,7 @@ $qryUpdate = $db->fxQuery($sqlUpdate); */
$_SESSION['usa_info'] = $recLogin;
$_SESSION['logged'] = time();
header('Location: index.php');
header('Location: ' . fxSuperadmConsumeRedirectAfterLogin('index.php'));
exit;
} else {
$_SESSION['msg'] = 1;

View File

@ -1325,6 +1325,53 @@ function fxSuperadmIsLoggedIn() {
return !empty($_SESSION['usa_id']);
}
/**
* Session superadm absente → login (pas « Accès refusé »).
* Rapports legacy : session compte public (com_info) suffit pour la vérif droits ensuite.
*/
function fxSuperadmRedirectToLoginIfNeeded($blnAllowCompteLegacy = false) {
if (fxSuperadmIsLoggedIn()) {
return;
}
if ($blnAllowCompteLegacy && !empty($_SESSION['com_info']['com_id'])) {
return;
}
$_SESSION['superadm_redirect_after_login'] = $_SERVER['REQUEST_URI'];
global $vDomaine;
$strLogin = 'login.php';
if (!empty($vDomaine)) {
$strLogin = rtrim((string)$vDomaine, '/') . '/superadm/login.php';
}
header('Location: ' . $strLogin);
exit;
}
/** URL cible après login superadm (évite redirection ouverte). */
function fxSuperadmConsumeRedirectAfterLogin($strDefault = 'index.php') {
if (empty($_SESSION['superadm_redirect_after_login'])) {
return $strDefault;
}
$strUrl = (string)$_SESSION['superadm_redirect_after_login'];
unset($_SESSION['superadm_redirect_after_login']);
if (strpos($strUrl, '/superadm/') === false) {
return $strDefault;
}
if (strpos($strUrl, '://') !== false) {
$strHost = parse_url($strUrl, PHP_URL_HOST);
if ($strHost !== ($_SERVER['HTTP_HOST'] ?? '')) {
return $strDefault;
}
}
return $strUrl;
}
/**
* Accès rapports superadm — super admin = tout ; sinon promoteur legacy (com_eve_promoteur / com_rapports).
*/

View File

@ -18,3 +18,13 @@ if ($intUsaId > 0) {
}
$_SESSION['logged'] = time();
}
// Session absente → login superadm (pas « Accès refusé »). Rapports legacy : com_info suffit.
$strScript = basename($_SERVER['SCRIPT_NAME'] ?? '');
$tabPublicScripts = array('login.php', 'perdu.php', 'logout.php');
$blnAllowCompteLegacy = ($strScript === 'rapport_new.php')
|| ($strScript === 'index.php' && (($_GET['a'] ?? '') === 'report'));
if (!in_array($strScript, $tabPublicScripts, true)) {
fxSuperadmRedirectToLoginIfNeeded($blnAllowCompteLegacy);
}

View File

@ -21,6 +21,8 @@ require_once('php/inc_fx_messages.php');
require_once('../php/inc_fx_memberships.php');
global $db, $objDatabasePreProd,$objDatabasecrm,$objDatabaseProd ;
fxSuperadmRedirectToLoginIfNeeded(true);
$blnLogged = fxSuperadmReportsAllowed(intval($intEvenement));
$strWhere = fxSetWhere($strReport, $_GET);