Subversion Repositories eFlore/Applications.del

Rev

Rev 1528 | Rev 1666 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1528 Rev 1618
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
		}