

-- Supprime le champ «publiable_eflore»
ALTER TABLE `cel_images` DROP `publiable_eflore` ;

-- Ajoute le champ «transmission»  dans «cel_images»
ALTER TABLE `cel_images` ADD `transmission` TINYINT(1) NOT NULL DEFAULT '0' AFTER `meta_autres`;

-- Ajoute le champ «date_liaison» dans «cel_images»
ALTER TABLE `cel_images` ADD `date_liaison` DATETIME NULL AFTER `date_creation`;

-- Ajoute le champ «date_transmission» dans «cel_images»
ALTER TABLE `cel_images` ADD `date_transmission` DATETIME NULL AFTER `date_liaison`;

-- Ajoute le champ «ce_observation» dans «cel_images»
ALTER TABLE `cel_images` ADD `ce_observation` BIGINT NULL AFTER `id_image`;

-- Met à jour la table cel_image avec les données de cel_obs_images
START TRANSACTION;
UPDATE cel_images AS ci, cel_obs_images AS coi
SET ci.ce_observation = coi.id_observation, 
	ci.date_liaison = coi.date_liaison 
WHERE  ci.id_image = coi.id_image 
AND coi.id_image != '0';
COMMIT;

-- Ajout index sur ce_observation
CREATE INDEX ce_observation ON cel_images (ce_observation);
-- Ajout index sur transmission
CREATE INDEX transmission ON cel_images(transmission);

-- Mise à jour du champ «transmission» de la table «cel_images» à partir des données de «cel_obs»
START TRANSACTION;
UPDATE cel_images AS ci, cel_obs AS co 
SET ci.transmission = co.transmission, 
	ci.date_transmission = co.date_transmission 
WHERE  ci.ce_observation = co.id_observation 
AND (ci.ce_observation IS NOT NULL OR ci.ce_observation != 0);
COMMIT;

-- Suppression de la table cel_obs_image inutile
RENAME TABLE cel_obs_images TO cel_obs_images_obsolete;

-- -----------------------------------------------------

-- Champs ce_utilisateur de cel_obs peut être NULL
ALTER TABLE cel_obs CHANGE ce_utilisateur ce_utilisateur VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL;

-- Suppression index id_obs
ALTER TABLE cel_obs DROP INDEX id_obs;

-- Correction du champ ce_utilisateur pour la table cel_images
START TRANSACTION;
UPDATE cel_obs SET ce_utilisateur = NULL 
WHERE ce_utilisateur LIKE '%@%' OR ce_utilisateur = '';
COMMIT;

-- Correction index id_obs
CREATE UNIQUE INDEX id_obs ON cel_obs (ordre, ce_utilisateur, courriel_utilisateur);

-- Correction index date_creation
ALTER TABLE cel_obs DROP INDEX date_creation;
CREATE INDEX utilisateur_date_creation ON cel_obs (ce_utilisateur, date_creation, id_observation);

-- -----------------------------------------------------
-- CORRECTIONS des CHAMPS ce_utilisateur & INDEX

-- Correction données en erreurs (bloque la génération des index)
START TRANSACTION;
SET @ordre = 1;
UPDATE cel_images SET ordre = @ordre := @ordre+1 
WHERE ce_utilisateur = 20207 AND courriel_utilisateur = 'jardin-de-claire@orange.fr';
COMMIT;

START TRANSACTION;
SET @ordre = 1;
UPDATE cel_images SET ordre = @ordre := @ordre+1 
WHERE ce_utilisateur = 16501 AND courriel_utilisateur = 'alexis.joly@inria.fr';
COMMIT;

START TRANSACTION;
SET @ordre = 1;
UPDATE cel_images SET ordre = @ordre := @ordre+1 
WHERE ce_utilisateur = 10261 AND courriel_utilisateur = 'kti-moreau@orange.fr';
COMMIT;

START TRANSACTION;
SET @ordre = 1;
UPDATE cel_images SET ordre = @ordre := @ordre+1 
WHERE ce_utilisateur = 18989 AND courriel_utilisateur = 'laetitia.goeau@free.fr';
COMMIT;

START TRANSACTION;
SET @ordre = 1;
UPDATE cel_images SET ordre = @ordre := @ordre+1 
WHERE ce_utilisateur = 20667 AND courriel_utilisateur = 'catalina20@hotmail.fr';
COMMIT;

START TRANSACTION;
SET @ordre = 1;
UPDATE cel_images SET ordre = @ordre := @ordre+1 
WHERE ce_utilisateur = 11785 AND courriel_utilisateur = 'pierre.bonnet@cirad.fr';
COMMIT;

-- Champ ce_utilisateur de cel_images peut être NULL
ALTER TABLE cel_images CHANGE ce_utilisateur ce_utilisateur VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL;

-- Correction index id_image
ALTER TABLE cel_images DROP INDEX id_image;

-- Correction du champ ce_utilisateur pour la table cel_images
START TRANSACTION;
UPDATE cel_images SET ce_utilisateur = NULL 
WHERE ce_utilisateur LIKE '%@%' OR ce_utilisateur = '';
COMMIT;

-- Correction index id_image
CREATE UNIQUE INDEX id_img ON cel_images (ordre, ce_utilisateur, courriel_utilisateur);

-- Correction index ce_utilisateur_2
ALTER TABLE cel_images DROP INDEX ce_utilisateur_2;
CREATE INDEX utilisateur_date_creation ON cel_images (ce_utilisateur, date_creation, id_image);

-- Correction du champ date_modification dans la table cel_images
START TRANSACTION;
UPDATE cel_images 
SET date_modification = GREATEST(
		IFNULL(date_creation, '0000-00-00 00:00:00'), 
		IFNULL(date_transmission, '0000-00-00 00:00:00'), 
		IFNULL(date_modification, '0000-00-00 00:00:00'), 
		IFNULL(date_liaison, '0000-00-00 00:00:00')
	);
COMMIT;

-- Correction du champ date_modification dans la table cel_obs
START TRANSACTION;
UPDATE cel_obs AS co, cel_images AS ci 
SET co.date_modification = GREATEST(
		IFNULL(co.date_creation, '0000-00-00 00:00:00'), 
		IFNULL(co.date_transmission, '0000-00-00 00:00:00'), 
		IFNULL(co.date_modification, '0000-00-00 00:00:00'),
		IFNULL(ci.date_liaison, '0000-00-00 00:00:00')
	) 
WHERE co.id_observation = ci.ce_observation ;
COMMIT;

-- -----------------------------------------------------
-- CORRECTIONS des DATES

ALTER TABLE cel_obs CHANGE date_creation date_creation DATETIME NOT NULL;

ALTER TABLE cel_obs CHANGE date_modification date_modification DATETIME NOT NULL;

START TRANSACTION;
UPDATE cel_obs AS co, cel_images AS ci 
SET co.date_creation = LEAST(
		IFNULL(co.date_modification, '0000-00-00 00:00:00'), 
		IFNULL(co.date_transmission, '0000-00-00 00:00:00'), 
		IFNULL(ci.date_creation, '0000-00-00 00:00:00'), 
		IFNULL(ci.date_modification, '0000-00-00 00:00:00'),
		IFNULL(ci.date_transmission, '0000-00-00 00:00:00'), 
		IFNULL(ci.date_liaison, '0000-00-00 00:00:00')
	) 
WHERE co.id_observation = ci.ce_observation 
AND co.date_creation = '0000-00-00 00:00:00' OR co.date_creation = NULL;
COMMIT;

START TRANSACTION;
UPDATE cel_images 
SET date_creation = LEAST(
		IFNULL(date_modification, '0000-00-00 00:00:00'), 
		IFNULL(date_transmission, '0000-00-00 00:00:00'), 
		IFNULL(date_liaison, '0000-00-00 00:00:00')
	) 
WHERE date_creation = '0000-00-00 00:00:00' OR date_creation = NULL;
COMMIT;

START TRANSACTION;
UPDATE cel_images AS ci, cel_obs AS co 
SET ci.date_creation = LEAST(
		IFNULL(ci.date_modification, '0000-00-00 00:00:00'), 
		IFNULL(ci.date_transmission, '0000-00-00 00:00:00'), 
		IFNULL(ci.date_liaison, '0000-00-00 00:00:00'),
		IFNULL(co.date_creation, '0000-00-00 00:00:00'), 
		IFNULL(co.date_modification, '0000-00-00 00:00:00'), 
		IFNULL(co.date_transmission, '0000-00-00 00:00:00') 
	) 
WHERE ci.ce_observation = co.id_observation 
AND ci.date_creation = '0000-00-00 00:00:00' OR ci.date_creation = NULL;
COMMIT;

-- -----------------------------------------------------
