Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 1159 → Rev 1160

/trunk/jrest/services/MigrationImages.php
1,10 → 1,12
<?php
 
class MigrationImages extends Cel {
 
const bdd_cel_migration = 'cel';
const bdd_utilisateurs = 'cel_old';
public static $bdd_cel_migration;
public static $bdd_utilisateurs;
const truncate = true; //Doit on vider les tables de destination ?
const separateur_champs_metadonnees = ';';
const separateur_valeurs_metadonnees = ':';
16,7 → 18,7
*/
private static $avancement = array();
const dry_run = true;
const dry_run = false;
private $tableau_utilisateurs = array();
private $tableau_observations = array();
113,25 → 115,25
* @return void le message est affiché dans la console.
*/
protected function afficherAvancement($message, $depart = 0) {
if (! isset(self::$avancement[$message])) {
self::$avancement[$message] = $depart;
echo "$message : ";
$actuel =& self::$avancement[$message];
echo $actuel++;
} else {
$actuel =& self::$avancement[$message];
// Cas du passage de 99 (= 2 caractères) à 100 (= 3 caractères)
$passage = 0;
if (strlen((string) ($actuel - 1)) < strlen((string) ($actuel))) {
$passage = 1;
if (! isset(self::$avancement[$message])) {
self::$avancement[$message] = $depart;
echo "$message : ";
$actuel =& self::$avancement[$message];
echo $actuel++;
} else {
$actuel =& self::$avancement[$message];
// Cas du passage de 99 (= 2 caractères) à 100 (= 3 caractères)
$passage = 0;
if (strlen((string) ($actuel - 1)) < strlen((string) ($actuel))) {
$passage = 1;
}
echo str_repeat(chr(8), (strlen((string) $actuel) - $passage));
echo $actuel++;
}
}
echo str_repeat(chr(8), (strlen((string) $actuel) - $passage));
echo $actuel++;
}
}
/**
* Méthode appelée avec une requête de type GET.
138,24 → 140,63
*/
public function getElement($params) {
if(!isset($this->config['database_cel']['database_migration']) || $this->config['database_cel']['database_migration'] == '') {
echo 'Attention la variable de configuration database_migration dans la section database_cel, contenant la base de données d\'arrivée, doit être remplie '."\n";
exit;
}
if(!isset($this->config['database_ident']['database']) || $this->config['database_ident']['database'] == '') {
echo 'Attention la variable de configuration database dans la section database_ident, contenant la base de données utilisateurs, doit être remplie '."\n";
exit;
}
self::$bdd_cel_migration = $this->config['database_cel']['database_migration'];
self::$bdd_utilisateurs = $this->config['database_ident']['database'];
$this->id_cle_metadonnees = array_merge($this->tableau_ids_tags_exif, $this->tableau_ids_tags_iptc);
 
echo "--MIGRATION DES IMAGES --------------------------------------\n";
//1. TEMPORAIRE : vider les tables de destinations
if (self::truncate) {
echo "-------------------------------------------------------------------\n\n";
echo " ETAPE 0. Vider les tables ... \n\n";
echo "-------------------------------------------------------------------\n\n";
$nouvellesTables = array('`cel_images`', '`cel_obs_images`');
foreach ($nouvellesTables as $nomTable) {
echo 'Vider la table '.$nomTable.'...';
$requeteTruncate = 'TRUNCATE TABLE '.self::$bdd_cel_migration.'.'.$nomTable;
$resultatTruncate = $this->executerRequete($requeteTruncate);
echo "ok \n";
}
echo "\n---------------------------------------------------------------- OK\n\n";
}
echo "-------------------------------------------------------------------\n\n";
echo " ETAPE 1. Paramétrage ... \n\n";
echo "-------------------------------------------------------------------\n\n";
$this->getUtilisateurs();
$this->getMotsCles();
$this->getObservations();
echo '|| Migration des images ||'."\n";
//$this->migrerImages();
echo "-------------------------------------------------------------------\n\n";
echo " ETAPE 2. Migration des images ... \n\n";
echo "-------------------------------------------------------------------\n\n";
$this->migrerImages();
echo "\n"."\n"."\n";
echo '|| Migration des liaisons obs images ||'."\n";
$this->migrerLiaisonsObsImages();
echo "-------------------------------------------------------------------\n\n";
echo " ETAPE 3. migration des liaisons obs images ... \n\n";
echo "-------------------------------------------------------------------\n\n";
//$this->migrerLiaisonsObsImages();
echo "\n"."\n"."\n";
}
private function getUtilisateurs() {
echo "\n-------------------------------------------------------------------\n";
echo "--SELECTION DES UTILISATEURS---------------------------------------\n\n";
$requete_selection_utilisateurs = 'SELECT U_ID as id, U_MAIL as mail, U_NAME as nom, U_SURNAME as prenom FROM '.self::bdd_utilisateurs.'.annuaire_tela';
$requete_selection_utilisateurs = 'SELECT U_ID as id, U_MAIL as mail, U_NAME as nom, U_SURNAME as prenom, U_PASSWD as pass FROM '.self::$bdd_utilisateurs.'.annuaire_tela';
$tableau_utilisateurs = $this->executerRequete($requete_selection_utilisateurs);
foreach( $tableau_utilisateurs as &$utilisateur) {
162,19 → 203,28
$this->tableau_utilisateurs[$utilisateur['mail']] = $utilisateur;
}
echo sizeof($this->tableau_utilisateurs)." utilisateurs sélectionnés";
echo "\n-----------------------------------------------------------------OK\n";
}
private function getMotsCles() {
echo "\n-------------------------------------------------------------------\n";
echo "--SELECTION DES MOTS-CLES -----------------------------------------\n\n";
$requete_selection_mots_cles = 'SELECT cmc_id_proprietaire as id_utilisateur, cmc_id_mot_cle_utilisateur as id_mot_cle, cmc_mot_cle as mot_cle FROM cel_mots_cles_images';
$requete_selection_mots_cles = 'SELECT cmc_id_proprietaire as id_utilisateur, cmc_id_mot_cle_utilisateur as id_mot_cle, cmc_mot_cle as mot_cle FROM cel_mots_cles_obs';
$tableau_mots_cles = $this->executerRequete($requete_selection_mots_cles);
 
foreach($tableau_mots_cles as &$mot_cle) {
foreach( $tableau_mots_cles as &$mot_cle) {
$this->tableau_mots_cles[$mot_cle['id_utilisateur']][$mot_cle['id_mot_cle']] = $mot_cle;
}
echo sizeof($this->tableau_mots_cles)." mots-clés sélectionnés";
echo "\n-----------------------------------------------------------------OK\n";
}
private function getObservations() {
$pas = 5000;
$nObs = "SELECT COUNT(*) AS nb FROM cel_inventory";
188,12 → 238,10
$this->tableau_observations[$obs['identifiant']][$obs['ordre']] = $obs['id'];
}
//$this->afficherAvancement('Selection des observations (par '.$pas.' )', $i);
echo "\n obs : ".$i;
$this->afficherAvancement('Selection des observations (par '.$pas.' )', $nbObs);
}
echo "\n\n";
}
public function executerRequeteSimple($requete) {
212,13 → 260,18
$pas = 200;
$fin = 150000;
//Selectionner le nombre d'images
$requeteNbImg = "SELECT COUNT(*) as nb FROM cel_images";
$resultatNbImg = $this->executerRequete($requeteNbImg);
$fin = $resultatNbImg[0]['nb'];
for ($i = $debut; $i <= $fin ; $i += $pas) {
$requete_selection_images = 'SELECT * FROM cel_images '.
'ORDER BY ci_id_image ASC LIMIT '.$i.','.$pas;
$images = $this->requeter($requete_selection_images);
$images = @$this->requeter($requete_selection_images);
$requete_insertion_images = 'INSERT INTO '.self::bdd_cel_migration.'.cel_images (';
$requete_insertion_images = 'INSERT INTO '.self::$bdd_cel_migration.'.cel_images (';
foreach ($this->tableau_nouveau_ancien as $nouveau_champ => $ancien_champ) {
$requete_insertion_images .= $nouveau_champ.',';
}
244,12 → 297,12
if (!$migration_images) {
echo 'la migration des images '.$i.' à '.($i+$nb_images_a_traiter).' a échoué '."\n";
} else {
echo 'migration des images '.$i.' à '.($i+$nb_images_a_traiter).' effectuée '."\n";
$this->afficherAvancement('Migration des images (par '.$pas.' )', $fin);
}
}
if(count($images) < $pas) {
echo 'Fin de la migration des images '."\n";
echo "\n---------------------------------------------------------------- OK\n\n";
return;
}
}
257,54 → 310,73
private function migrerLiaisonsObsImages() {
$debut = 0;
$pas = 200;
$pas = 500;
$fin = 50000;
$liaisons_obs_inexistantes = 0;
//Selectionner le nombre de liaisons
$requeteNbImgObs = "SELECT COUNT(*) as nb FROM cel_obs_images";
$resultatNbImgObs = $this->executerRequete($requeteNbImgObs);
$fin = $resultatNbImgObs[0]['nb'];
for ($i = $debut; $i <= $fin ; $i += $pas) {
if($i > $fin) {
$i = $fin;
}
$requete_selection_liaisons = 'SELECT * FROM cel_obs_images LIMIT '.$i.','.$pas;
$tableau_liaisons = $this->executerRequete($requete_selection_liaisons);
$requete_migration_liaison = 'INSERT INTO '.self::bdd_cel_migration.'.cel_obs_images '.
'(ce_image, ce_utilisateur, ce_observation, date_liaison) '.
$requete_migration_liaison = 'INSERT INTO '.self::$bdd_cel_migration.'.cel_obs_images '.
'(id_image, id_utilisateur, id_observation, date_liaison) '.
'VALUES ';
$sous_requete_insertion = '';
foreach($tableau_liaisons as &$liaison) {
if(is_array($tableau_liaisons)) {
foreach($tableau_liaisons as &$liaison) {
$mail_utilisateur = $liaison['coi_ce_utilisateur'];
$utilisateur = $mail_utilisateur;
$mail_utilisateur = $liaison['coi_ce_utilisateur'];
$utilisateur = $mail_utilisateur;
if (isset($this->tableau_utilisateurs[$mail_utilisateur])) {
$utilisateur = $this->tableau_utilisateurs[$mail_utilisateur]['id'];
if (isset($this->tableau_utilisateurs[$mail_utilisateur])) {
$utilisateur = $this->tableau_utilisateurs[$mail_utilisateur]['id'];
}
$id_obs = $liaison['coi_ce_observation'];
if (isset($this->tableau_observations[$mail_utilisateur][$id_obs])) {
$id_obs = $this->tableau_observations[$mail_utilisateur][$id_obs];
$sous_requete_insertion .= '('.$this->proteger($liaison['coi_ce_image']).','.
$this->proteger($utilisateur).','.
$this->proteger($id_obs).','.
$this->proteger($liaison['coi_date_liaison']).
'),';
} else {
// cas d'une observation inexistante, la liaison est ignorée
$liaisons_obs_inexistantes++;
}
}
$id_obs = $liaison['coi_ce_observation'];
if (isset($this->tableau_observations[$mail_utilisateur][$id_obs])) {
$id_obs = $this->tableau_observations[$mail_utilisateur][$id_obs];
$sous_requete_insertion .= '('.$this->proteger($liaison['coi_ce_image']).','.
$this->proteger($utilisateur).','.
$this->proteger($id_obs).','.
$this->proteger($liaison['coi_date_liaison']).
'),';
$sous_requete_insertion = rtrim($sous_requete_insertion,',');
$requete_migration_liaison = $requete_migration_liaison.$sous_requete_insertion;
$migration_liaison = $this->executerRequeteSimple($requete_migration_liaison);
if (!$migration_liaison) {
echo 'la migration des liaisons obs images de '.$i.' à '.($i+$pas).' a échoué ! '."\n<br />";
} else {
echo 'l\'obs '.$id_obs.' n\'existe pas pour l\'utilisateur '.$mail_utilisateur."\n";
}
$this->afficherAvancement('Migration des liaisons obs images (par '.$pas.' )', $fin);
}
}
$sous_requete_insertion = rtrim($sous_requete_insertion,',');
$requete_migration_liaison = $requete_migration_liaison.$sous_requete_insertion;
$migration_liaison = $this->executerRequeteSimple($requete_migration_liaison);
if (!$migration_liaison) {
echo 'la migration des liaisons obs images a échoué ! ';
} else {
echo 'migration des liaisons obs images réussie ';
}
}
echo "\n\n";
echo $liaisons_obs_inexistantes ? $liaisons_obs_inexistantes." liaisons image obs ont été ignorées car les obs sont absentes" : '' ;
echo "\n";
echo "\n---------------------------------------------------------------- OK\n\n";
}
private function traiterLigneImage($image) {
373,7 → 445,9
} else {
// on met le mot clé dans sa propre case afin d'éviter
// facilement les doublons provoqués par de mauvais formatages
$tableau_mots_cles_formates[$mot_cle] = $this->tableau_mots_cles[$utilisateur][$mot_cle]['mot_cle'];
if(isset($this->tableau_mots_cles[$utilisateur][$mot_cle])) {
$tableau_mots_cles_formates[$mot_cle] = $this->tableau_mots_cles[$utilisateur][$mot_cle]['mot_cle'];
}
}
 
}
445,7 → 519,7
$xml = '';
/*foreach($tableau as $cle => $valeur) {
foreach($tableau as $cle => $valeur) {
 
$cle = str_replace('ci_meta_exif_','',$cle);
$cle = str_replace('ci_meta_iptc_','',$cle);
453,8 → 527,9
$cle = str_replace('_',' ',$cle);
$cle = str_replace(' ','',ucwords($cle));
$valeur = str_replace("\0",'',$valeur);
$xml .= '<'.$cle.' id="'.$this->id_cle_metadonnees[$cle].'">'.$valeur.'</'.$cle.'>'."\n";
}*/
$id = isset($this->id_cle_metadonnees[$cle]) ? $this->id_cle_metadonnees[$cle] : $cle;
$xml .= '<'.$cle.' id="'.$id.'">'.$valeur.'</'.$cle.'>'."\n";
}
return $xml;
}
566,6 → 641,7
private function traiterXmp($ligne_image) {
$chemin = $this->obtenirCheminImageOriginale($ligne_image['ci_id_image']);
// TODO décommenté car pour le moment ça n'est pas necessaire, à éxécuter à part
//$res = $this->decoderMetadonneesExifTool($chemin);
$xml = '<?xml version="1.0" encoding="UTF-8" ?>';
$xml .= '<xmp>';