Import initial de Vivier depuis l'hebergement OVH
This commit is contained in:
commit
839e5e57c5
126 files changed
+22447
No files matched your search
@@ -0,0 +1,149 @@
|
||||
-- Vivier : migration 1.7 vers 1.8
|
||||
-- À passer une fois, dans phpMyAdmin, base de Vivier, onglet SQL. Faire d'abord une sauvegarde (onglet Exporter).
|
||||
--
|
||||
-- Contenu :
|
||||
-- 1. Sécurité des accès : double authentification, invitations, sessions, journal des connexions.
|
||||
-- 2. Profils : disponibilité en liste fixe, nationalités, permis de travail, champs du CV Europass.
|
||||
-- 3. Traduction des profils dans la langue de l'interface : file d'attente.
|
||||
-- 4. Reprise des disponibilités déjà saisies.
|
||||
--
|
||||
-- Après la migration, chaque compte active la double authentification à sa prochaine connexion.
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- ---------------------------------------------------------------
|
||||
-- 1. Comptes : double authentification, version de session, mot de passe à changer
|
||||
-- ---------------------------------------------------------------
|
||||
ALTER TABLE utilisateurs
|
||||
ADD COLUMN totp_secret VARCHAR(255) NULL AFTER mot_de_passe, -- clé de l'application d'authentification, chiffrée
|
||||
ADD COLUMN totp_active_le DATETIME NULL AFTER totp_secret, -- NULL : double authentification à activer
|
||||
ADD COLUMN totp_dernier_pas BIGINT NULL AFTER totp_active_le, -- dernier code accepté : un code ne sert qu'une fois
|
||||
ADD COLUMN codes_secours TEXT NULL AFTER totp_dernier_pas, -- empreintes des codes de secours restants (JSON)
|
||||
ADD COLUMN session_version INT UNSIGNED NOT NULL DEFAULT 1 AFTER codes_secours, -- +1 ferme toutes les sessions du compte
|
||||
ADD COLUMN changer_mot_de_passe TINYINT(1) NOT NULL DEFAULT 0 AFTER session_version; -- mot de passe donné par le gestionnaire
|
||||
|
||||
-- Invitations : un lien à usage unique, valable 48 heures, remplace la page publique de demande de compte
|
||||
CREATE TABLE IF NOT EXISTS invitations (
|
||||
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
||||
jeton CHAR(64) CHARACTER SET ascii NOT NULL, -- empreinte SHA-256 du jeton : le lien lui-même n'est jamais enregistré
|
||||
nom_affiche VARCHAR(120) NULL, -- nom proposé par le gestionnaire, modifiable par la personne
|
||||
cree_par INT UNSIGNED NOT NULL,
|
||||
cree_le DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
expire_le DATETIME NOT NULL,
|
||||
utilise_le DATETIME NULL,
|
||||
annule_le DATETIME NULL,
|
||||
utilisateur_id INT UNSIGNED NULL, -- compte créé avec ce lien
|
||||
UNIQUE KEY uq_invitation_jeton (jeton),
|
||||
CONSTRAINT fk_invitation_cree_par FOREIGN KEY (cree_par) REFERENCES utilisateurs(id),
|
||||
CONSTRAINT fk_invitation_utilisateur FOREIGN KEY (utilisateur_id) REFERENCES utilisateurs(id) ON DELETE SET NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- Journal des connexions : chaque essai, réussi ou non. Gardé 12 mois.
|
||||
CREATE TABLE IF NOT EXISTS connexions (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
||||
moment DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
utilisateur_id INT UNSIGNED NULL,
|
||||
identifiant VARCHAR(190) NOT NULL,
|
||||
ip VARCHAR(45) NOT NULL,
|
||||
reseau VARCHAR(45) NOT NULL, -- réseau de l'adresse (IPv4 /24, IPv6 /48) : sert à repérer un lieu nouveau
|
||||
navigateur VARCHAR(255) NOT NULL DEFAULT '',
|
||||
resultat VARCHAR(20) NOT NULL, -- reussie, mot_de_passe, code, bloquee, desactive, attente
|
||||
KEY idx_connexion_moment (moment),
|
||||
KEY idx_connexion_compte (utilisateur_id, reseau),
|
||||
CONSTRAINT fk_connexion_utilisateur FOREIGN KEY (utilisateur_id) REFERENCES utilisateurs(id) ON DELETE SET NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- ---------------------------------------------------------------
|
||||
-- 2. Profils
|
||||
-- ---------------------------------------------------------------
|
||||
ALTER TABLE candidats
|
||||
ADD COLUMN disponibilite_code ENUM('immediate','1_mois','2_mois','3_mois','date','a_preciser') NULL AFTER disponibilite,
|
||||
ADD COLUMN nationalites VARCHAR(60) NULL AFTER pays, -- codes ISO 3166-1 séparés par des virgules : FR,MA
|
||||
ADD COLUMN hors_ue TINYINT(1) NULL AFTER nationalites, -- 0 : au moins une nationalité UE, EEE ou suisse ; 1 : aucune ; NULL : inconnu
|
||||
ADD COLUMN permis_travail VARCHAR(300) NULL AFTER hors_ue, -- statut du permis de travail au Luxembourg, texte libre
|
||||
ADD COLUMN permis_expire_le DATE NULL AFTER permis_travail, -- fin de validité du titre
|
||||
ADD COLUMN benevolat TEXT NULL AFTER encadrement, -- une activité par ligne (CV Europass)
|
||||
ADD COLUMN permis_conduire VARCHAR(100) NULL AFTER benevolat, -- catégories : B, A1
|
||||
ADD KEY idx_hors_ue (hors_ue),
|
||||
ADD KEY idx_permis_expire (permis_expire_le);
|
||||
|
||||
ALTER TABLE experiences
|
||||
ADD COLUMN projet VARCHAR(200) NULL AFTER client,
|
||||
ADD COLUMN mission TEXT NULL AFTER projet,
|
||||
ADD COLUMN charge VARCHAR(300) NULL AFTER mission; -- charge en jours-homme, avec sa répartition
|
||||
|
||||
ALTER TABLE formations
|
||||
ADD COLUMN date_debut VARCHAR(7) CHARACTER SET ascii NULL AFTER etablissement, -- AAAA-MM ou AAAA
|
||||
ADD COLUMN date_fin VARCHAR(7) CHARACTER SET ascii NULL AFTER date_debut,
|
||||
ADD COLUMN lieu VARCHAR(150) NULL AFTER date_fin;
|
||||
|
||||
-- Niveaux de la grille européenne (CECRL), quand le CV les donne
|
||||
ALTER TABLE langues
|
||||
ADD COLUMN ecoute ENUM('A1','A2','B1','B2','C1','C2') NULL AFTER niveau,
|
||||
ADD COLUMN lecture ENUM('A1','A2','B1','B2','C1','C2') NULL AFTER ecoute,
|
||||
ADD COLUMN production_orale ENUM('A1','A2','B1','B2','C1','C2') NULL AFTER lecture,
|
||||
ADD COLUMN interaction_orale ENUM('A1','A2','B1','B2','C1','C2') NULL AFTER production_orale,
|
||||
ADD COLUMN ecriture ENUM('A1','A2','B1','B2','C1','C2') NULL AFTER interaction_orale;
|
||||
|
||||
-- Relance créée par Vivier (renouvellement du titre de séjour) : Vivier la met à jour quand la date change
|
||||
ALTER TABLE relances
|
||||
ADD COLUMN auto VARCHAR(20) NULL AFTER objet,
|
||||
ADD KEY idx_relance_auto (candidat_id, auto);
|
||||
|
||||
-- ---------------------------------------------------------------
|
||||
-- 3. Traductions à faire : profils à traduire dans les langues de l'interface
|
||||
-- ---------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS traductions_a_faire (
|
||||
candidat_id INT UNSIGNED NOT NULL,
|
||||
langue CHAR(2) NOT NULL,
|
||||
ajoute_le DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
essais TINYINT UNSIGNED NOT NULL DEFAULT 0,
|
||||
erreur VARCHAR(500) NULL,
|
||||
verrou_le DATETIME NULL, -- traduction en cours : un seul poste la fait
|
||||
PRIMARY KEY (candidat_id, langue),
|
||||
CONSTRAINT fk_afaire_candidat FOREIGN KEY (candidat_id) REFERENCES candidats(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- ---------------------------------------------------------------
|
||||
-- 4. Reprise des disponibilités
|
||||
-- Une date déjà saisie par IT Club devient « Date précise ».
|
||||
-- Le texte du CV est classé par règles simples ; le reste passe en « À préciser ».
|
||||
-- Le texte d'origine reste en note sous la valeur, pour être corrigé à la main.
|
||||
-- « Sous N mois » reçoit une date estimée : date de l'import + N mois.
|
||||
-- ---------------------------------------------------------------
|
||||
UPDATE candidats SET disponibilite_code = 'date'
|
||||
WHERE disponibilite_code IS NULL AND disponible_le IS NOT NULL;
|
||||
|
||||
UPDATE candidats
|
||||
SET disponible_le = STR_TO_DATE(REGEXP_SUBSTR(disponibilite, '[0-9]{2}/[0-9]{2}/[0-9]{4}'), '%d/%m/%Y'),
|
||||
disponibilite_code = 'date'
|
||||
WHERE disponibilite_code IS NULL AND disponibilite REGEXP '[0-9]{2}/[0-9]{2}/[0-9]{4}';
|
||||
|
||||
UPDATE candidats
|
||||
SET disponible_le = STR_TO_DATE(REGEXP_SUBSTR(disponibilite, '[0-9]{4}-[0-9]{2}-[0-9]{2}'), '%Y-%m-%d'),
|
||||
disponibilite_code = 'date'
|
||||
WHERE disponibilite_code IS NULL AND disponibilite REGEXP '[0-9]{4}-[0-9]{2}-[0-9]{2}';
|
||||
|
||||
UPDATE candidats SET disponibilite_code = 'immediate'
|
||||
WHERE disponibilite_code IS NULL
|
||||
AND LOWER(disponibilite) REGEXP 'imm.{1,2}diat|tout de suite|sans pr.{1,2}avis|available now|right away|sofort|^ *disponible *\\.? *$';
|
||||
|
||||
UPDATE candidats SET disponibilite_code = '1_mois', disponible_le = DATE_ADD(DATE(cree_le), INTERVAL 1 MONTH)
|
||||
WHERE disponibilite_code IS NULL
|
||||
AND LOWER(disponibilite) REGEXP '(^|[^0-9])(1|un|one) (mois|month)|4 semaines|4 weeks|30 jours|30 days|1 monat';
|
||||
|
||||
UPDATE candidats SET disponibilite_code = '2_mois', disponible_le = DATE_ADD(DATE(cree_le), INTERVAL 2 MONTH)
|
||||
WHERE disponibilite_code IS NULL
|
||||
AND LOWER(disponibilite) REGEXP '(^|[^0-9])(2|deux|two) (mois|months)|8 semaines|8 weeks|60 jours|60 days|2 monate';
|
||||
|
||||
UPDATE candidats SET disponibilite_code = '3_mois', disponible_le = DATE_ADD(DATE(cree_le), INTERVAL 3 MONTH)
|
||||
WHERE disponibilite_code IS NULL
|
||||
AND LOWER(disponibilite) REGEXP '(^|[^0-9])(3|trois|three) (mois|months)|12 semaines|12 weeks|90 jours|90 days|3 monate';
|
||||
|
||||
UPDATE candidats SET disponibilite_code = 'a_preciser'
|
||||
WHERE disponibilite_code IS NULL AND disponibilite IS NOT NULL AND TRIM(disponibilite) <> '';
|
||||
|
||||
-- ---------------------------------------------------------------
|
||||
-- Les demandes de compte encore en attente restent visibles dans Comptes, pour être acceptées ou refusées.
|
||||
-- Les nouvelles personnes rejoignent Vivier par un lien d'invitation.
|
||||
-- ---------------------------------------------------------------
|
||||
Reference in new issue
Block a user