Subversion Repositories eFlore/Applications.del

Compare Revisions

Ignore whitespace Rev 1167 → Rev 1168

/trunk/services/configurations/config_determinations.ini
4,6 → 4,7
nom_projet = "del"
masques_possibles = "protocole,valeur_vote_min";
protocoles_possibles = "1,2,3,4";
mots_cles_cel_affiches = "fleur,fleurs,feuille,feuilles,ecorce,fruit,fruits,port,plantnet,plantscan_new";
 
[images]
; URL de base des services de ce projet
/trunk/services/configurations/config_images.ini
3,7 → 3,8
; Nom du projet
nom_projet = "del"
masques_possibles = "masque,famille,genre,ns,nn,auteur,date,commune,departement,tag,espece";
tris_possibles = "date_observation,votes"
tris_possibles = "date_observation,votes,tags"
mots_cles_cel_affiches = "fleur,fleurs,feuille,feuilles,ecorce,fruit,fruits,port,defiphoto,plantnet";
 
[images]
; URL de base des services de ce projet
/trunk/services/modules/0.1/images/ListeImages.php
391,6 → 391,11
', IF(dvote.ce_protocole = '.$this->parametres['protocole'].', SUM(dvote.valeur), 0) as total_votes ' :
''
).
($this->doitJoindreTableTags() ?
// attention le DISTINCT est indispensable !
', (COUNT(DISTINCT dtag.id_tag) + '.$this->assemblercomptageOccurencesMotsClesCel().') as total_tags ' :
''
).
'FROM '.$this->gestionBdd->formaterTable('del_obs_image', 'doi').
'INNER JOIN del_image di '.
'ON doi.id_image = di.id_image '.
398,6 → 403,11
'ON doi.id_observation = dob.id_observation '.
'INNER JOIN del_utilisateur du '.
'ON du.id_utilisateur = di.ce_utilisateur '.
($this->doitJoindreTableTags() ?
'LEFT JOIN del_image_tag dtag '.
'ON doi.id_image = dtag.ce_image AND dtag.actif = 1 ' :
''
).
($this->doitJoindreTableVotes() ?
'LEFT JOIN del_image_vote dvote '.
'ON doi.id_image = dvote.ce_image AND dvote.ce_protocole = '.$this->parametres['protocole'] :
406,18 → 416,40
$requeteLiaisons .= $this->chargerClauseWhere();
$requeteLiaisons .= $this->getTri();
$requeteLiaisons .= $this->gestionBdd->getLimitSql();
 
//echo $requeteLiaisons;exit;
return $this->bdd->recupererTous($requeteLiaisons);
}
private function assemblercomptageOccurencesMotsClesCel() {
$chaineMotsClesAffiches = $this->conteneur->getParametre('mots_cles_cel_affiches');
$tabMotsClesAffiches = explode(',',$chaineMotsClesAffiches);
$chaineSql = '';
// Comptage du nombre de mots clés officiels présents dans la chaine mots clés texte
foreach ($tabMotsClesAffiches as $motCle) {
if($chaineSql != '') {
$chaineSql .= ' + ';
}
$chaineSql .= 'IF(FIND_IN_SET('.$this->proteger($motCle).',di.mots_cles_texte) != 0, 1, 0)';
}
return '('.$chaineSql.')';
}
private function doitJoindreTableVotes() {
return ($this->tri == 'votes');
}
private function doitJoindreTableTags() {
return ($this->tri == 'tags');
}
private function getTri() {
$order = '';
if($this->doitJoindreTableVotes()) {
$order = ' GROUP BY dvote.ce_image, dob.id_observation ORDER BY total_votes '.$this->directionTri.', date_transmission desc ';
} else if($this->doitJoindreTableTags()) {
$order = ' GROUP BY doi.id_image ORDER BY total_tags '.$this->directionTri.', date_transmission desc ';
} else {
$order = ' ORDER BY '.$this->tri.' '.$this->directionTri.' ';
}
/trunk/services/modules/0.1/determinations/ListeImagesDeterminationsProbables.php
18,7 → 18,7
 
class ListeImagesDeterminationsProbables {
private $imageIds = array();
private $indexImagesIds = array();
private $conteneur;
private $navigation;
private $masque;
196,6 → 196,7
($this->parametres['masque.valeur_vote_min'] != null ? 'HAVING AVG(dvote.valeur) >= '.$this->parametres['masque.valeur_vote_min'].' ' : ' ').
'ORDER BY moyenne_votes';
$requeteLiaisons .= $this->gestionBdd->getLimitSql();
 
return $this->bdd->recupererTous($requeteLiaisons);
}
227,6 → 228,8
* @param $liaisons les liaisons de la table del_obs_images
* */
private function chargerImage($liaisons) {
//echo '<pre>'.print_r($liaisons,true).'</pre>';exit;
$images = array();
foreach ($liaisons as $liaison) {
$idObs = $liaison['id_observation'];
234,6 → 237,7
// On enregistre l'ID de l'obs pour n'effectuer qu'une seule requête par la suite
$this->obsIds[] = $idObs;
$index = $liaison['id_image'].'-'.$liaison['id_observation'];
$this->indexImagesIds[$idImage] = $index;
$images[$index] = array(
'id_image' => $idImage,
'id_observation' => $idObs,
244,7 → 248,9
'determination.nn' => $liaison['nom_ret_nn'],
'determination.nt' => $liaison['nt'],
'date_observation' => $liaison['date_observation'],
'localite' => $this->formaterLieu($liaison)
'localite' => $this->formaterLieu($liaison),
'mots_cles_image_cel' => $this->formaterMotsClesCel($liaison['mots_cles_texte_image']),
'mots_cles_image_del' => ""
);
}
return $images;
270,8 → 276,14
') '.
'ORDER BY ce_proposition';
$requeteMotsCles = 'SELECT tag, ce_image '.
'FROM del_image_tag '.
'WHERE ce_image IN ('.implode(',', array_keys($this->indexImagesIds)).') '.
'AND actif = 1 ';
$resultatsPropositions = $this->bdd->recupererTous($requetePropositions);
$resultatsVotes = $this->bdd->recupererTous($requeteVotes);
$resultatsMotsCles = $this->bdd->recupererTous($requeteMotsCles);
$propositions = array();
$votes = array();
304,7 → 316,16
$proposition : $propositions[$id_obs];
}
}
foreach ($resultatsMotsCles as $motCle) {
$tag = $motCle['tag'];
$index = $this->indexImagesIds[$motCle['ce_image']];
if($images[$index]['mots_cles_image_del'] != "") {
$tag = ",".$tag;
}
$images[$index]['mots_cles_image_del'] .= $tag ;
}
 
foreach ($images as $id => $image) {
if ($this->doitRemplacerObservationParProposition($propositions, $image)) {
$id_obs = $image['id_observation'];
314,7 → 335,9
$images[$id]['determination.nt'] = $propositions[$id_obs]['nt'];
}
$images[$id]['url_fiche_eflore'] = $this->formaterUrlFicheEflore($images[$id]['determination.nn']);
if(isset($images[$id]['determination.nn'])) {
$images[$id]['url_fiche_eflore'] = $this->formaterUrlFicheEflore($images[$id]['determination.nn']);
}
}
return $images;
332,6 → 355,19
/*-------------------------------------------------------------------------------
FORMATER ET METTRE EN FORME
--------------------------------------------------------------------------------*/
/**
* Formater les mots clés du cel en n'affichant que ceux faisant partie
* d'une liste définie dans le fichier de configuration
* @param $chaineMotCleCel la chaine de mots clés du cel
* @return string la chaine filtrée
* */
private function formaterMotsClesCel($chaineMotCleCel) {
$tabMotsClesCel = explode(',', $chaineMotCleCel);
$chaineMotsClesAffiches = $this->conteneur->getParametre('mots_cles_cel_affiches');
$tabMotsClesAffiches = explode(',',$chaineMotsClesAffiches);
return implode(',', array_intersect($tabMotsClesAffiches, $tabMotsClesCel));
}
/**
* Formater une observation depuis une ligne liaison