Subversion Repositories eFlore/Applications.cel

Rev

Rev 2095 | Rev 2102 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2094 mathias 1
<?php
2
class Maintenance extends Script {
3
 
4
	protected $bdd;
5
 
6
	public function __construct($script_nom, $parametres_cli) {
7
		parent::__construct($script_nom, $parametres_cli);
8
		$this->bdd = new Bdd();
9
	}
10
 
11
	public function executer() {
12
		$cmd = $this->getParametre('a');
13
		try {
14
			switch ($cmd) {
15
				case 'regenererMotsClesTexteObs' :
16
					$this->regenererMotsClesTexteObs();
17
					break;
18
				case 'regenererMotsClesTexteImages' :
19
					$this->regenererMotsClesTexteImages();
20
					break;
2095 mathias 21
				case 'viderMotsClesTexteImagesSansMotsCles' :
22
					$this->viderMotsClesTexteImagesSansMotsCles();
23
					break;
24
				case 'viderMotsClesTexteObsSansMotsCles' :
25
					$this->viderMotsClesTexteObsSansMotsCles();
26
					break;
2100 aurelien 27
				case 'regenererChampsTailleImage' :
28
					$this->regenererChampsTailleImage();
29
					break;
2094 mathias 30
				default :
31
					$msg = "Erreur : la commande '$cmd' n'existe pas!\n".
32
						"Commandes existantes : regenererMotsClesTexteImages, regenererMotsClesTexteObs";
33
					throw new Exception($msg);
34
			}
35
		} catch (Exception $e) {
36
			$this->traiterErreur($e->getMessage());
37
		}
38
	}
39
 
40
	// Régénère le champ "mots_cles_texte" pour toutes les images ayant des mots clés mais ayant ce champ
41
	// vide, suite à une erreur
42
	protected function regenererMotsClesTexteImages() {
43
		$req = "SELECT id_image FROM cel_images WHERE (mots_cles_texte IS NULL OR mots_cles_texte='') "
44
			. "AND id_image IN (SELECT id_element_lie FROM cel_mots_cles_images_liaison)";
45
		$res = $this->bdd->recupererTous($req);
46
		echo count($res) . " images trouvées\n";
47
		foreach ($res as $image) {
48
			$req = "UPDATE cel_images SET mots_cles_texte = (SELECT GROUP_CONCAT(mot_cle) FROM cel_arbre_mots_cles_images cm "
49
				. "INNER JOIN cel_mots_cles_images_liaison cml ON cml.id_mot_cle = cm.id_mot_cle AND cml.id_element_lie = '" . $image['id_image'] . "') "
50
				. "WHERE id_image = '" . $image['id_image'] . "'";
51
			$this->bdd->requeter($req);
52
		}
53
	}
54
 
55
	// Régénère le champ "mots_cles_texte" pour toutes les observations ayant des mots clés mais ayant ce champ
56
	// vide, suite à une erreur
57
	protected function regenererMotsClesTexteObs() {
58
		$req = "SELECT id_observation FROM cel_obs WHERE (mots_cles_texte IS NULL OR mots_cles_texte='') "
59
			. "AND id_observation IN (SELECT id_element_lie FROM cel_mots_cles_obs_liaison)";
60
		$res = $this->bdd->recupererTous($req);
61
		echo count($res) . " observations trouvées\n";
62
		foreach ($res as $image) {
63
			$req = "UPDATE cel_obs SET mots_cles_texte = (SELECT GROUP_CONCAT(mot_cle) FROM cel_arbre_mots_cles_obs cm "
64
			. "INNER JOIN cel_mots_cles_obs_liaison cml ON cml.id_mot_cle = cm.id_mot_cle AND cml.id_element_lie = '" . $image['id_observation'] . "') "
65
				. "WHERE id_observation = '" . $image['id_observation'] . "'";
66
			$this->bdd->requeter($req);
67
		}
68
	}
2095 mathias 69
 
70
	// Vide le champ "mots_cles_texte" pour toutes les images n'ayant aucun mot clé
71
	protected function viderMotsClesTexteImagesSansMotsCles() {
72
		$req = "UPDATE cel_images SET mots_cles_texte = NULL WHERE id_image NOT IN (SELECT id_element_lie FROM cel_mots_cles_images_liaison)";
73
		$res = $this->bdd->requeter($req);
74
		echo "$res images mises à jour\n";
75
	}
76
 
77
	// Vide le champ "mots_cles_texte" pour toutes les obs n'ayant aucun mot clé
78
	protected function viderMotsClesTexteObsSansMotsCles() {
79
		$req = "UPDATE cel_obs SET mots_cles_texte = NULL WHERE id_observation NOT IN (SELECT id_element_lie FROM cel_mots_cles_obs_liaison)";
80
		$res = $this->bdd->requeter($req);
81
		echo "$res observations mises à jour\n";
82
	}
2100 aurelien 83
 
84
	protected function regenererChampsTailleImage() {
85
		$req = "SELECT id_image FROM cel_images WHERE hauteur = 0 OR largeur = 0";
86
		$res = $this->bdd->recupererTous($req);
87
 
88
		echo count($res)." images concernees \n";
89
		echo "Début du traitement \n";
90
		$images_maj = 0;
91
		$image_meta_ratees = 0;
92
		$images_inexistantes = 0;
93
 
94
		foreach($res as $image) {
95
			$chemin = $this->getCheminImage($image['id_image']);
96
			if(file_exists($chemin)) {
97
				list($largeur, $hauteur) = @getimagesize($chemin);
98
				if(is_numeric($largeur) && is_numeric($hauteur)) {
99
					$req_maj = "UPDATE cel_images SET hauteur = '".$hauteur."', largeur = '".$largeur."' ".
100
					           "WHERE id_image = '".$image['id_image']."'";
101
					$maj_taille_image = $this->bdd->requeter($req_maj);
102
					if($maj_taille_image) {
103
						$images_maj++;
104
					}
105
				} else {
106
					$image_meta_ratees++;
107
				}
108
			} else {
109
				$images_inexistantes++;
110
			}
111
			$this->afficherAvancement("\tImages traitées : ", 1);
112
		}
113
		echo "\n";
114
		echo "Fin de la régénération des tailles des images à partir des metadonnées \n";
115
		echo $images_maj." images ont vu leur infos de taille régénérées \n";
116
		echo $image_meta_ratees." images ont raté l'extraction de metadonnées \n";
117
		echo $images_inexistantes." images n'existent pas en tant que fichier \n";
118
	}
119
 
120
	private function getCheminImage($id) {
121
		$chemin_base = Config::get('dossierImages');
122
 
123
		$id = sprintf('%09s', $id);
124
		$id = wordwrap($id, 3 , '_', true);
125
 
126
		list($dossierNiveau1, $dossierNiveau2) = explode('_', $id);
127
 
128
		$chemin = $chemin_base.$dossierNiveau1.'/'.$dossierNiveau2.'/O/'.$id.'_O.jpg';
129
 
130
		return $chemin;
131
	}
2094 mathias 132
}
133
?>