Line 51... |
Line 51... |
51 |
'dc' => array('commentaire')
|
51 |
'dc' => array('commentaire')
|
52 |
);
|
52 |
);
|
Line 53... |
Line 53... |
53 |
|
53 |
|
54 |
|
54 |
|
55 |
public function __construct(Conteneur $conteneur = null) {
|
55 |
public function __construct(Conteneur $conteneur = null) {
|
56 |
$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
|
56 |
$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
|
57 |
$this->conteneur->chargerConfiguration('config_departements_bruts.ini');
|
57 |
$this->conteneur->chargerConfiguration('config_departements_bruts.ini');
|
58 |
$this->conteneur->chargerConfiguration('config_observations.ini');
|
58 |
$this->conteneur->chargerConfiguration('config_observations.ini');
|
59 |
$this->conteneur->chargerConfiguration('config_mapping_votes.ini');
|
59 |
$this->conteneur->chargerConfiguration('config_mapping_votes.ini');
|
60 |
$this->conteneur->chargerConfiguration('config_mapping_commentaires.ini');
|
60 |
$this->conteneur->chargerConfiguration('config_mapping_commentaires.ini');
|
61 |
$this->navigation = $conteneur->getNavigation();
|
61 |
$this->navigation = $conteneur->getNavigation();
|
62 |
$this->masque = $conteneur->getMasque();
|
62 |
$this->masque = $conteneur->getMasque();
|
63 |
$this->gestionBdd = $conteneur->getGestionBdd();
|
63 |
$this->gestionBdd = $conteneur->getGestionBdd();
|
Line 64... |
Line 64... |
64 |
$this->bdd = $this->gestionBdd->getBdd();
|
64 |
$this->bdd = $this->gestionBdd->getBdd();
|
65 |
}
|
65 |
}
|
66 |
|
66 |
|
67 |
static function reformateObservation($obs, $url_pattern = '') {
|
67 |
static function reformateObservation($obs, $url_pattern = '') {
|
68 |
$obs = array_map('array_filter', $obs);
|
68 |
$obs = array_map('array_filter', $obs);
|
69 |
$obs_merged = array();
|
69 |
$obs_merged = array();
|
70 |
foreach($obs as $o) {
|
70 |
foreach($obs as $o) {
|
71 |
$id = $o['id_observation'];
|
71 |
$id = $o['id_observation'];
|
72 |
|
72 |
|
73 |
// car auteur.id peut être un email, un hash, ou un annuaire_tela.U_ID
|
73 |
// car auteur.id peut être un email, un hash, ou un annuaire_tela.U_ID
|
74 |
// mais dans les deux premiers cas SELECT courriel AS observateur fait déjà l'affaire
|
74 |
// mais dans les deux premiers cas SELECT courriel AS observateur fait déjà l'affaire
|
75 |
if(!isset($o['auteur.id']) || !is_numeric($o['auteur.id'])) $o['auteur.id'] = "0";
|
75 |
if(!isset($o['auteur.id']) || !is_numeric($o['auteur.id'])) $o['auteur.id'] = "0";
|
76 |
if(!isset($o['auteur.nom'])) $o['auteur.nom'] = '[inconnu]';
|
76 |
if(!isset($o['auteur.nom'])) $o['auteur.nom'] = '[inconnu]';
|
77 |
|
77 |
|
78 |
$image = array_intersect_key($o, array_flip(array('id_image', 'date', 'hauteur' , 'largeur', 'nom_original')));
|
78 |
$image = array_intersect_key($o, array_flip(array('id_image', 'date', 'hauteur' , 'largeur', 'nom_original')));
|
79 |
$image['binaire.href'] = sprintf($url_pattern, $image['id_image']);
|
79 |
$image['binaire.href'] = sprintf($url_pattern, $image['id_image']);
|
80 |
unset($o['id_image'], $o['date'], $o['hauteur'], $o['largeur'], $o['nom_original']);
|
80 |
unset($o['id_image'], $o['date'], $o['hauteur'], $o['largeur'], $o['nom_original']);
|
81 |
if(!isset($obs_merged['"' . $id . '"'])) $obs_merged['"' . $id . '"'] = $o;
|
81 |
if(!isset($obs_merged['"' . $id . '"'])) $obs_merged['"' . $id . '"'] = $o;
|
82 |
$obs_merged['"' . $id . '"']['images'][] = $image;
|
82 |
$obs_merged['"' . $id . '"']['images'][] = $image;
|
Line 83... |
Line 83... |
83 |
}
|
83 |
}
|
84 |
return $obs_merged;
|
84 |
return $obs_merged;
|
85 |
}
|
85 |
}
|
86 |
|
86 |
|
87 |
/**
|
87 |
/**
|
88 |
* Méthode principale de la classe.
|
88 |
* Méthode principale de la classe.
|
89 |
* Lance la récupération des images dans la base et les place dans un objet ResultatService
|
89 |
* Lance la récupération des images dans la base et les place dans un objet ResultatService
|
90 |
* pour l'afficher.
|
90 |
* pour l'afficher.
|
91 |
* @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2)
|
91 |
* @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2)
|
92 |
* @param array $parametres les paramètres situés après le ? dans l'url
|
92 |
* @param array $parametres les paramètres situés après le ? dans l'url
|
93 |
**/
|
93 |
**/
|
94 |
public function consulter($ressources, $parametres) {
|
94 |
public function consulter($ressources, $parametres) {
|
95 |
// SELECT, à terme, pourrait affecter getInfos(), mais en aucune manière getIdObs()
|
95 |
// SELECT, à terme, pourrait affecter getInfos(), mais en aucune manière getIdObs()
|
96 |
$req = array('select' => array(), 'join' => array(), 'where' => array(), 'groupby' => array(), 'having' => array());
|
96 |
$req = array('select' => array(), 'join' => array(), 'where' => array(), 'groupby' => array(), 'having' => array());
|
97 |
|
97 |
|
98 |
// toujours nécessaire puisque nous tapons sur v_del_image qui INNER JOIN cel_images, or nous voulons certes
|
98 |
// toujours nécessaire puisque nous tapons sur v_del_image qui INNER JOIN cel_images, or nous voulons certes
|
99 |
// toutes les images, mais nous voulons $limite observations uniques.
|
99 |
// toutes les images, mais nous voulons $limite observations uniques.
|
100 |
$req['groupby'][] = 'vdi.id_observation';
|
100 |
$req['groupby'][] = 'vdi.id_observation';
|
101 |
|
101 |
|
102 |
$db = $this->bdd;
|
102 |
$db = $this->bdd;
|
103 |
|
103 |
|
104 |
// filtrage de l'INPUT
|
104 |
// filtrage de l'INPUT
|
105 |
$params = DelTk::requestFilterParams($parametres, DelTk::$parametres_autorises, $this->conteneur);
|
105 |
$params = DelTk::requestFilterParams($parametres, DelTk::$parametres_autorises, $this->conteneur);
|
106 |
|
106 |
|
107 |
$params['masque.tag'] = DelTk::buildTagsAST(@$parametres['masque.tag'], 'OR', ',');
|
107 |
$params['masque.tag'] = DelTk::buildTagsAST(@$parametres['masque.tag'], 'OR', ',');
|
108 |
|
108 |
|
109 |
// ... et paramètres par défaut
|
109 |
// ... et paramètres par défaut
|
110 |
$params = array_merge(DelTk::$default_params, $params);
|
110 |
$params = array_merge(DelTk::$default_params, $params);
|
111 |
|
111 |
|
112 |
// création des contraintes (masques)
|
112 |
// création des contraintes (masques)
|
113 |
DelTk::sqlAddConstraint($params, $db, $req);
|
113 |
DelTk::sqlAddConstraint($params, $db, $req);
|
114 |
self::sqlAddConstraint($params, $db, $req, $this->conteneur);
|
114 |
self::sqlAddConstraint($params, $db, $req, $this->conteneur);
|
115 |
self::sqlAddMasqueConstraint($params, $db, $req, $this->conteneur);
|
115 |
self::sqlAddMasqueConstraint($params, $db, $req, $this->conteneur);
|
116 |
|
116 |
|
117 |
// 1) grunt-work: *la* requête de récupération des id valides (+ SQL_CALC_FOUND_ROWS)
|
117 |
// 1) grunt-work: *la* requête de récupération des id valides (+ SQL_CALC_FOUND_ROWS)
|
118 |
$idobs_tab = self::getIdObs($params, $req, $db);
|
118 |
$idobs_tab = self::getIdObs($params, $req, $db);
|
119 |
// idobs est une liste (toujours ordonnée) des id d'observations recherchées
|
119 |
// idobs est une liste (toujours ordonnée) des id d'observations recherchées
|
120 |
$idobs = array_values(array_map(create_function('$a', 'return $a["id_observation"];'), $idobs_tab));
|
120 |
$idobs = array_values(array_map(create_function('$a', 'return $a["id_observation"];'), $idobs_tab));
|
121 |
|
121 |
|
122 |
if($idobs) {
|
122 |
if($idobs) {
|
123 |
$total = $db->recuperer('SELECT FOUND_ROWS() AS c'); $total = intval($total['c']);
|
123 |
$total = $db->recuperer('SELECT FOUND_ROWS() AS c'); $total = intval($total['c']);
|
124 |
|
124 |
|
125 |
// 2) récupération des données nécessaires pour ces observations (obs + images)
|
125 |
// 2) récupération des données nécessaires pour ces observations (obs + images)
|
126 |
// ici les champs récupérés sont issus de self::$sql_fields_liaisons mais sans préfixes
|
126 |
// ici les champs récupérés sont issus de self::$sql_fields_liaisons mais sans préfixes
|
127 |
// car tout provient de v_del_image
|
127 |
// car tout provient de v_del_image
|
128 |
$obs_unfmt = self::getInfos($idobs, $db);
|
128 |
$obs_unfmt = self::getInfos($idobs, $db);
|
129 |
|
129 |
|
130 |
// 3) suppression, merge des données en tableau assez représentatif du futur JSON en output
|
130 |
// 3) suppression, merge des données en tableau assez représentatif du futur JSON en output
|
131 |
$observations = self::reformateObservation($obs_unfmt, $this->conteneur->getParametre('url_images'));
|
131 |
$observations = self::reformateObservation($obs_unfmt, $this->conteneur->getParametre('url_images'));
|
132 |
|
132 |
|
133 |
// 4) récupération des données nécessaires pour ces observations (commentaires + votes)
|
133 |
// 4) récupération des données nécessaires pour ces observations (commentaires + votes)
|
134 |
// modifie $observations
|
134 |
// modifie $observations
|
135 |
$this->configurer();
|
135 |
$this->configurer();
|
136 |
$this->chargerDeterminations($observations);
|
136 |
$this->chargerDeterminations($observations);
|
137 |
|
137 |
|
138 |
// 5) restauration de l'ordre souhaité initialement
|
138 |
// 5) restauration de l'ordre souhaité initialement
|
139 |
$observations = self::sortArrayByArray($observations, $idobs);
|
139 |
$observations = self::sortArrayByArray($observations, $idobs);
|
140 |
} else {
|
140 |
} else {
|
141 |
$observations = array();
|
141 |
$observations = array();
|
142 |
$total = 0;
|
142 |
$total = 0;
|
143 |
}
|
143 |
}
|
144 |
|
144 |
|
145 |
// 6) JSON output
|
145 |
// 6) JSON output
|
146 |
$resultat = new ResultatService();
|
146 |
$resultat = new ResultatService();
|
147 |
$resultat->corps = array('entete' => DelTk::makeJSONHeader($total, $params, Config::get('url_service')),
|
147 |
$resultat->corps = array('entete' => DelTk::makeJSONHeader($total, $params, Config::get('url_service')),
|
Line 148... |
Line 148... |
148 |
'resultats' => $observations);
|
148 |
'resultats' => $observations);
|
149 |
|
149 |
|
150 |
return $resultat;
|
150 |
return $resultat;
|
151 |
}
|
151 |
}
|
152 |
|
152 |
|
153 |
static function sortArrayByArray($array, $orderArray) {
|
153 |
static function sortArrayByArray($array, $orderArray) {
|
154 |
$ordered = array();
|
154 |
$ordered = array();
|
155 |
foreach($orderArray as $key) {
|
155 |
foreach($orderArray as $key) {
|
156 |
if(array_key_exists('"' . $key . '"', $array)) {
|
156 |
if(array_key_exists('"' . $key . '"', $array)) {
|
157 |
$ordered['"' . $key . '"'] = $array['"' . $key . '"'];
|
157 |
$ordered['"' . $key . '"'] = $array['"' . $key . '"'];
|
Line 158... |
Line 158... |
158 |
unset($array['"' . $key . '"']);
|
158 |
unset($array['"' . $key . '"']);
|
159 |
}
|
159 |
}
|
160 |
}
|
160 |
}
|