This commit is contained in:
Esteban
2026-07-03 02:02:13 +02:00
parent 88c10ee5b0
commit a19c5c8381
42 changed files with 578 additions and 129 deletions
+62 -1
View File
@@ -179,4 +179,65 @@ ADD COLUMN pdf_filename VARCHAR(255) NULL;
-- (validé côté PHP), pour les outils absents de Devicon (Proxmox, GLPI, FOG...)
ALTER TABLE logo_banners
ADD COLUMN icon VARCHAR(100) NULL AFTER name,
MODIFY COLUMN logo_url VARCHAR(255) NULL;
MODIFY COLUMN logo_url VARCHAR(255) NULL;
-- ============================================================
-- Juillet 2026 (6) : sortie des PDF des tables projects/experiences/schools
-- vers des tables associées dédiées, pour que les pages qui LISTENT ces
-- éléments (admin.php, xp.php, projects.php...) n'aient plus à charger les
-- PDF (jusqu'à 15 Mo chacun) en mémoire à chaque affichage. C'était la
-- cause du ralentissement d'admin.php et de xp.php : ces pages faisaient
-- un SELECT * qui remontait aussi tout le contenu binaire des PDF alors
-- que seul le nom de fichier est utilisé dans les listes.
--
-- ÉTAPE 1/2 (non destructive) : crée les nouvelles tables et copie les PDF
-- existants dedans. Les colonnes pdf_data / pdf_filename des tables
-- d'origine ne sont PAS touchées à cette étape : aucune perte de donnée
-- possible, elles restent en place comme copie de sécurité.
-- ============================================================
CREATE TABLE IF NOT EXISTS project_pdfs (
project_id INT UNSIGNED NOT NULL,
pdf_filename VARCHAR(255) NOT NULL,
pdf_data LONGBLOB NOT NULL,
PRIMARY KEY (project_id),
CONSTRAINT fk_project_pdfs_project FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS experience_pdfs (
experience_id INT UNSIGNED NOT NULL,
pdf_filename VARCHAR(255) NOT NULL,
pdf_data LONGBLOB NOT NULL,
PRIMARY KEY (experience_id),
CONSTRAINT fk_experience_pdfs_experience FOREIGN KEY (experience_id) REFERENCES experiences(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS school_pdfs (
school_id INT UNSIGNED NOT NULL,
pdf_filename VARCHAR(255) NOT NULL,
pdf_data LONGBLOB NOT NULL,
PRIMARY KEY (school_id),
CONSTRAINT fk_school_pdfs_school FOREIGN KEY (school_id) REFERENCES schools(id) ON DELETE CASCADE
);
-- Copie des PDF déjà en base vers les nouvelles tables (ne copie que les lignes qui ont
-- effectivement un PDF ; ré-exécutable sans doublon grâce à la clé primaire = id du parent)
INSERT IGNORE INTO project_pdfs (project_id, pdf_filename, pdf_data)
SELECT id, pdf_filename, pdf_data FROM projects WHERE pdf_data IS NOT NULL;
INSERT IGNORE INTO experience_pdfs (experience_id, pdf_filename, pdf_data)
SELECT id, pdf_filename, pdf_data FROM experiences WHERE pdf_data IS NOT NULL;
INSERT IGNORE INTO school_pdfs (school_id, pdf_filename, pdf_data)
SELECT id, pdf_filename, pdf_data FROM schools WHERE pdf_data IS NOT NULL;
-- ============================================================
-- ÉTAPE 2/2 (destructive, À NE PAS EXÉCUTER MAINTENANT) : à lancer plus
-- tard, une fois que le site a été vérifié (listes, modification, suppression,
-- lecteur PDF) et qu'on est sûr à 100% que tout fonctionne avec les
-- nouvelles tables. Supprime les anciennes colonnes devenues inutiles.
-- ============================================================
-- ALTER TABLE projects DROP COLUMN pdf_data, DROP COLUMN pdf_filename;
-- ALTER TABLE experiences DROP COLUMN pdf_data, DROP COLUMN pdf_filename;
-- ALTER TABLE schools DROP COLUMN pdf_data, DROP COLUMN pdf_filename;