/trunk/jrest/services/ImageContribution.php |
---|
14,121 → 14,81 |
*/ |
/** |
* Classe renvoyant une liste très succinte des observations liées à une image de l'utilisateur |
* |
* Classe renvoyant une liste très succinte des observations liées à une image de l'utilisateur |
* |
*/ |
class ImageContribution extends Cel { |
/** |
* Renvoi un petit bout de html contenant les dernières obs liées à |
* Renvoi un petit bout de html contenant les dernières obs liées à |
* une image d'un utilisateur |
* |
* |
* @param string $uid[0] mail de l'utilisateur |
* @param string $uid[1] identifiant numérique de l'utilisateur |
*/ |
function getElement($uid){ |
$idUtilisateurP = Cel::db()->proteger($uid[1]); |
$requete = 'SELECT co.*, ci.id_image, ci.nom_original, ci.largeur, ci.hauteur '. |
'FROM cel_obs AS co INNER JOIN cel_images AS ci ON (id_observation = ce_observation) '. |
"WHERE co.ce_utilisateur = $idUtilisateurP ". |
'ORDER BY co.date_modification DESC '. |
'LIMIT 0,5 '. |
' -- '.__FILE__.':'.__LINE__; |
$resultats = Cel::db()->requeter($requete); |
$requete_obs_liee_images = 'SELECT * FROM cel_obs'. |
' WHERE ce_utilisateur = '.Cel::db()->proteger($uid[1]). |
' AND id_observation IN (SELECT id_observation |
FROM cel_obs_images |
WHERE id_utilisateur = '.Cel::db()->proteger($uid[1]).' )'. |
' AND transmission = 0'. |
' ORDER BY date_modification DESC LIMIT 0,5'; |
$html = '<div id="resume_cel">'; |
if ($resultats !== false && is_array($resultats)) { |
$urlImgTpl = $this->config['settings']['celImgUrlTpl']; |
foreach ($resultats as $obs) { |
$nom_ret = (!empty($obs['nom_ret'])) ? $obs['nom_ret'] : 'Indéterminée'; |
$obs['nom_original'] = htmlspecialchars($obs['nom_original']); |
$obs['id_image'] = htmlspecialchars($obs['id_image']); |
$obs['zone_geo'] = trim($obs['zone_geo'],'000null'); |
$obs['ce_zone_geo'] = trim($obs['ce_zone_geo'],'000null'); |
$obs['station'] = trim($obs['station'],'000null'); |
$obs['lieudit'] = trim($obs['lieudit'],'000null'); |
$id = $obs['id_image']; |
$html = '<div id="resume_cel">'; |
$obs_liees_images = array(); |
$resultat_obs_liees_images = Cel::db()->requeter($requete_obs_liee_images); |
if(is_array($resultat_obs_liees_images)) { |
$obs_liees_images = $resultat_obs_liees_images; |
} |
list($largeur, $hauteur) = $this->calculerDimensions($obs['largeur'], $obs['hauteur']); |
$id = sprintf('%09s', $id); |
$urlImgL = sprintf($urlImgTpl, "{$id}L"); |
$urlImgS = sprintf($urlImgTpl, "{$id}S"); |
foreach ($obs_liees_images as $obs) { |
$chemin_sur_serveur = $this->config['cel']['url_images']; |
$requete_img_liees = 'SELECT * FROM cel_images WHERE id_image '. |
'IN (SELECT id_image FROM cel_obs_images '. |
'WHERE id_observation = "'.$obs['id_observation'].'") '. |
'AND ce_utilisateur = "'.$obs['ce_utilisateur'].'"' ; |
$resultat_requete_img_liees = Cel::db()->requeter($requete_img_liees); |
if (is_array($resultat_requete_img_liees) && count($resultat_requete_img_liees) > 0) { |
$premiere_image_liee = $resultat_requete_img_liees[0]; |
$premiere_image_liee['nom_original'] = htmlspecialchars($premiere_image_liee['nom_original']); |
$premiere_image_liee['id_image'] = htmlspecialchars($premiere_image_liee['id_image']); |
$id = $premiere_image_liee['id_image']; |
$tailleXY = $this->calculerDimensions(array($premiere_image_liee['largeur'], $premiere_image_liee['hauteur'])); |
$id = sprintf('%09s', $id) ; |
$id = wordwrap($id, 3 , '_', true) ; |
$id_fichier = $id.".jpg" ; |
$niveauDossier = explode("_", $id) ; |
$dossierNiveau1 = $niveauDossier[0] ; |
$dossierNiveau2 = $niveauDossier[1] ; |
$chemin_sur_serveur_final = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2 ; |
$chemin_fichier = $chemin_sur_serveur_final.'/L/'.$id."_L.jpg" ; |
$chemin_fichier_s = $chemin_sur_serveur_final.'/M/'.$id."_M.jpg" ; |
$html .= '<div class="item_resume_cel">'; |
$html .= '<h4><a href="'.$chemin_fichier.'">'.$obs['nom_ret'].'</a></h4>'. |
'<img src="'.$chemin_fichier_s.'" alt="'.$premiere_image_liee['nom_original'].'" height="'.$tailleXY[1].'px" width="'.$tailleXY[0].'px"></img><br/>'; |
$html .= '<span>Datée du '.$obs['date_modification'].'<br/>' ; |
$html .= 'Lieu : '.trim($obs['zone_geo'],'000null').' ('.trim($obs['ce_zone_geo'],'000null').') '.trim($obs['station'],'000null').' '.trim($obs['lieudit'],'000null').'<br/></p>' ; |
$html .= '</span>'; |
$html .= '</div>'; |
$html .= '<div class="item_resume_cel">'. |
'<h4><a href="'.$urlImgL.'">'.$nom_ret.'</a></h4>'. |
'<img src="'.$urlImgS.'" alt="'.$obs['nom_original'].'" height="'.$hauteur.'px" width="'.$largeur.'px" /><br/>'. |
'<span>Datée du '.$obs['date_modification'].'<br/>'. |
'Lieu : '.$obs['zone_geo'].' ('.$obs['ce_zone_geo'].') '.$obs['station'].' '.$obs['lieudit'].'<br/></p>'. |
'</span>'. |
'</div>'; |
} |
} |
} |
$html .= '</div>'; |
$html.= '</div>'; |
header("Content-Type: text/html; charset=UTF-8"); |
print $html; |
exit; |
} |
header("Content-Type: text/html; charset=UTF-8"); |
print $html; |
exit; |
} |
private function calculerDimensions($largeur, $hauteur) { |
$tailleOr = 75 ; |
if ($hauteur == 0) { |
$hauteur = $tailleOr; |
} |
if ($largeur == 0) { |
$largeur = $tailleOr; |
} |
$maxTaille = max($hauteur, $largeur); |
private function calculerDimensions($tailleXY) { |
$tailleOr = 75 ; |
if($tailleXY[1] == 0) { |
$tailleXY[1] = $tailleOr; |
} |
if($tailleXY[0] == 0) { |
$tailleXY[0] = $tailleOr; |
} |
$maxTaille = max($tailleXY[1],$tailleXY[0]) ; |
if($maxTaille == $tailleXY[1]) { |
$rapport = $tailleXY[1]/$tailleXY[0] ; |
$tailleXY[1] = 75 ; |
$tailleXY[0] = round($tailleXY[1]/$rapport,0) ; |
}else { |
$rapport = $tailleXY[0]/$tailleXY[1] ; |
$tailleXY[0] = 75 ; |
$tailleXY[1] = round($tailleXY[0]/$rapport,0) ; |
} |
return $tailleXY ; |
} |
} |
?> |
if ($maxTaille == $hauteur) { |
$rapport = $hauteur / $largeur; |
$hauteur = 75; |
$largeur = round($hauteur / $rapport, 0); |
} else { |
$rapport = $largeur / $hauteur; |
$largeur = 75; |
$hauteur = round($largeur / $rapport, 0); |
} |
return array($largeur, $hauteur); |
} |
} |
/trunk/jrest/services/CelStatistiqueTxt.php |
---|
70,9 → 70,8 |
private function construireRequeteListeUtilisateurNbrePhoto() { |
$select = 'SELECT co.courriel_utilisateur, COUNT(DISTINCT ci.id_image) AS nbre '; |
$from = 'FROM cel_obs AS co '. |
' LEFT JOIN cel_obs_images AS coi ON (coi.id_observation = co.id_observation) '. |
' LEFT JOIN cel_images AS ci ON (coi.id_image = ci.id_image) '; |
$where = 'WHERE transmission = 1 '; |
' LEFT JOIN cel_images AS ci ON (co.id_observation = ci.ce_observation) '; |
$where = 'WHERE co.transmission = 1 '; |
$groupBy = 'GROUP BY co.courriel_utilisateur '; |
$orderBy = 'ORDER BY nbre DESC '; |
$limitSql = 'LIMIT 0,150 '; |
125,10 → 124,9 |
private function construireRequeteListeTaxonNbrePhoto() { |
$select = 'SELECT nom_ret, COUNT(DISTINCT ci.id_image) AS nbre '; |
$from = 'FROM cel_obs co '. |
' LEFT JOIN cel_obs_images coi ON (coi.id_observation = co.id_observation) '. |
' LEFT JOIN cel_images ci ON (coi.id_image = ci.id_image) '; |
$where = 'WHERE transmission = 1 '. |
" AND nom_ret != '' "; |
' LEFT JOIN cel_images ci ON (co.id_observation = ci.ce_observation) '; |
$where = 'WHERE co.transmission = 1 '. |
" AND nom_ret != '' "; |
$groupBy = 'GROUP BY nom_ret '; |
$orderBy = 'ORDER BY nbre DESC '; |
$limitSql = 'LIMIT 0,150 '; |
310,8 → 308,7 |
$filtres[] = "nom_ret LIKE $taxon "; |
} |
if (isset($num_taxon) || isset($taxon)) { |
$from .= 'LEFT JOIN cel_obs_images coi ON (coi.id_image = ci.id_image) '. |
'LEFT JOIN cel_obs co ON (coi.id_observation = co.id_observation) '; |
$from .= 'LEFT JOIN cel_obs co ON (ci.ce_observation = co.id_observation) '; |
} |
$where = ((count($filtres) > 0) ? 'WHERE '.implode(' AND ', $filtres) : ''); |
323,8 → 320,7 |
private function construireRequeteNbreImgLiees() { |
$select = 'SELECT COUNT(DISTINCT ci.id_image) AS nbre '; |
$from = 'FROM cel_obs_images coi '. |
' LEFT JOIN cel_images ci ON (coi.id_image = ci.id_image) '; |
$from = 'FROM cel_images ci '; |
if (count($this->parametres) != 0) { |
$filtres = array(); |
342,7 → 338,7 |
} |
if (isset($num_taxon) || isset($taxon)) { |
$from .= 'LEFT JOIN cel_obs ON (coi.id_observation = co.id_observation) '; |
$from .= 'LEFT JOIN cel_obs ON (ci.ce_observation = co.id_observation) '; |
} |
$where = ((count($filtres) > 0) ? 'WHERE '.implode(' AND ', $filtres) : ''); |
353,9 → 349,9 |
} |
private function construireRequeteNbreObsLiees() { |
$select = 'SELECT COUNT(DISTINCT coi.id_observation) AS nbre '; |
$from = 'FROM cel_obs_images coi '. |
' LEFT JOIN cel_obs co ON (coi.id_observation = co.id_observation) '; |
$select = 'SELECT COUNT(DISTINCT id_observation) AS nbre '; |
$from = 'FROM cel_images ci '. |
' LEFT JOIN cel_obs co ON (ci.ce_observation = co.id_observation) '; |
if (count($this->parametres) != 0) { |
$filtres = array(); |
457,25 → 453,23 |
" GROUP BY ce_utilisateur ORDER BY nombreObs DESC LIMIT $nombre;"; |
break; |
case "img": |
$req = "SELECT co.ce_utilisateur , co.prenom_utilisateur , co.nom_utilisateur , co.courriel_utilisateur , count(DISTINCT ci.id_image) as nombreImg" . |
" FROM cel_images ci" . |
" RIGHT JOIN cel_obs_images coi ON coi.id_image = ci.id_image" . |
" LEFT JOIN cel_obs co ON coi.id_observation = co.id_observation" . |
" WHERE co.transmission = 1" . |
" AND TO_DAYS(NOW()) - TO_DAYS(co.date_transmission) <= $jours" . |
" GROUP BY co.ce_utilisateur ORDER BY nombreImg DESC LIMIT $nombre;"; |
$req = "SELECT co.ce_utilisateur , co.prenom_utilisateur , co.nom_utilisateur , co.courriel_utilisateur , count(DISTINCT ci.id_image) as nombreImg ". |
"FROM cel_images ci ". |
"RIGHT JOIN cel_obs co ON ci.ce_observation = co.id_observation ". |
"WHERE co.transmission = 1 ". |
"AND TO_DAYS(NOW()) - TO_DAYS(co.date_transmission) <= $jours ". |
"GROUP BY co.ce_utilisateur ORDER BY nombreImg DESC LIMIT $nombre; "; |
break; |
default: |
$req = "SELECT co.ce_utilisateur , co.prenom_utilisateur , co.nom_utilisateur , co.courriel_utilisateur ," . |
" count(DISTINCT ci.id_image) as nombreImg, count(DISTINCT co.id_observation) as nombreObs," . |
" count(DISTINCT ci.id_image) + count(DISTINCT co.id_observation) as somme" . |
" FROM cel_images ci" . |
" RIGHT JOIN cel_obs_images coi ON coi.id_image = ci.id_image" . |
" LEFT JOIN cel_obs co ON coi.id_observation = co.id_observation" . |
" WHERE co.transmission = 1" . |
" AND TO_DAYS(NOW()) - TO_DAYS(co.date_transmission) <= $jours" . |
" GROUP BY co.ce_utilisateur" . |
" ORDER BY somme DESC LIMIT $nombre;"; |
$req = "SELECT co.ce_utilisateur, co.prenom_utilisateur, co.nom_utilisateur, co.courriel_utilisateur, ". |
"COUNT(DISTINCT ci.id_image) AS nombreImg, COUNT(DISTINCT co.id_observation) AS nombreObs, ". |
"COUNT(DISTINCT ci.id_image) + COUNT(DISTINCT co.id_observation) AS somme ". |
"FROM cel_images ci ". |
"RIGHT JOIN cel_obs co ON ci.ce_observation = co.id_observation ". |
"WHERE co.transmission = 1 ". |
"AND TO_DAYS(NOW()) - TO_DAYS(co.date_transmission) <= $jours ". |
"GROUP BY co.ce_utilisateur ". |
"ORDER BY somme DESC LIMIT $nombre ; "; |
} |
return $req; |
/trunk/jrest/services/CelWidgetMap.php |
---|
62,14 → 62,14 |
public function getStations($params) { |
$json = null; |
$requete = 'SELECT utm_secteur, utm_x, utm_y, wgs84_latitude AS latitude, wgs84_longitude AS longitude '. |
'FROM cel_obs AS co '. |
' LEFT JOIN cel_zones_geo AS l '. |
' ON (l.id_zone_geo = co.ce_zone_geo) '. |
"WHERE transmission = '1' ". |
'FROM cel_obs AS co '. |
' LEFT JOIN cel_zones_geo AS l '. |
' ON (l.id_zone_geo = co.ce_zone_geo) '. |
"WHERE transmission = '1' ". |
$this->construireWhereDept(). |
$this->construireWhereCommune(). |
$this->construireWhereCommune(). |
$this->construireWherePhotosSeulement(). |
$this->construireWhereUtilisateur(). |
$this->construireWhereUtilisateur(). |
$this->construireWhereNumTaxon(). |
$this->construireWhereNomTaxon(). |
$this->construireWhereDate(). |
133,24 → 133,24 |
$total = 0; |
if (!$this->etreNull($this->parametres['station'])) { |
$requete = 'SELECT SQL_CALC_FOUND_ROWS id_observation, ce_utilisateur, courriel_utilisateur, '. |
' nom_sel, nom_ret, nom_sel_nn, nom_ret_nn, nt, famille, '. |
' lieudit, zone_geo, date_observation, milieu, commentaire, '. |
' utm_secteur, utm_x, utm_y, id_zone_geo, date_transmission, nom_referentiel '. |
'FROM cel_obs AS co '. |
' LEFT JOIN cel_zones_geo AS l '. |
" ON (l.id_zone_geo = co.ce_zone_geo) ". |
"WHERE transmission = '1' ". |
$this->construireWhereCoordonnees(). |
$this->construireWherePhotosSeulement(). |
$this->construireWhereUtilisateur(). |
$this->construireWhereNumTaxon(). |
$this->construireWhereNomTaxon(). |
$this->construireWhereDate(). |
$this->construireWhereCommentaire(). |
$this->construireWhereProjet(). |
$this->construireWhereTag(). |
'ORDER BY nom_sel ASC '. |
"LIMIT {$this->start},{$this->limit} "; |
' nom_sel, nom_ret, nom_sel_nn, nom_ret_nn, nt, famille, '. |
' lieudit, zone_geo, date_observation, milieu, commentaire, '. |
' utm_secteur, utm_x, utm_y, id_zone_geo, date_transmission, nom_referentiel '. |
'FROM cel_obs AS co '. |
' LEFT JOIN cel_zones_geo AS l '. |
" ON (l.id_zone_geo = co.ce_zone_geo) ". |
"WHERE transmission = '1' ". |
$this->construireWhereCoordonnees(). |
$this->construireWherePhotosSeulement(). |
$this->construireWhereUtilisateur(). |
$this->construireWhereNumTaxon(). |
$this->construireWhereNomTaxon(). |
$this->construireWhereDate(). |
$this->construireWhereCommentaire(). |
$this->construireWhereProjet(). |
$this->construireWhereTag(). |
'ORDER BY nom_sel ASC '. |
"LIMIT {$this->start},{$this->limit} "; |
//die($requete); |
$resultats = Cel::db()->requeter($requete, self::SQL_RETOUR_COMPLET, self::SQL_MODE_OBJET); |
352,7 → 352,7 |
switch ($type) { |
case '*' : |
$sql = $this->obtenirConditionPourCommentaires($commentaire); |
$sql = " AND (commentaire LIKE $commentaire OR ($sql)) "; |
$sql = " AND (ci.commentaire LIKE $commentaire OR ($sql)) "; |
break; |
case 'observation' : |
$sql = " AND co.commentaire LIKE $commentaire "; |
505,18 → 505,16 |
*/ |
private function obtenirObsLieesImg($type, $param) { |
// Construction de la requête |
$requete = 'SELECT DISTINCT id_observation AS id_obs, ce_utilisateur AS utilisateur '. |
'FROM cel_images ci'. |
' LEFT JOIN cel_obs_images coi '. |
' ON (coi.id_image = ci.id_image) '. |
' LEFT JOIN cel_obs AS co '. |
' ON coi.id_observation = co.id_observation '. |
$requete = 'SELECT DISTINCT id_observation AS id_obs, co.ce_utilisateur AS utilisateur '. |
'FROM cel_images ci'. |
' INNER JOIN cel_obs AS co '. |
' ON ci.ce_observation = co.id_observation '. |
' LEFT JOIN locations AS l '. |
' ON (l.id_zone_geo = co.ce_zone_geo) '. |
"WHERE transmission = '1' ". |
"WHERE co.transmission = '1' ". |
($type == 'date.photo' ? " AND (date_prise_de_vue LIKE ".str_replace('-', ':', $param).") " : ''). |
($type == 'date.ajout' ? " AND date_creation LIKE $param " : ''). |
($type == 'date.liaison' ? " AND date_liaison LIKE $param " : ''). |
($type == 'date.ajout' ? " AND ci.date_creation LIKE $param " : ''). |
($type == 'date.liaison' ? " AND ci.date_liaison LIKE $param " : ''). |
// TODO: recherche sur le xml |
//($type == 'commentaire.meta' ? " AND ci.commentaire LIKE $param " : ''). |
($type == 'commentaire.utilisateur' ? " AND ci.commentaire LIKE $param " : ''). |
599,7 → 597,7 |
private function construireWherePhotosSeulement() { |
$sql = ''; |
if (isset($this->parametres['photos']) && $this->parametres['photos'] == 1) { |
$sql = 'AND co.id_observation IN (SELECT DISTINCT id_observation FROM cel_obs_images) '; |
$sql = 'AND co.id_observation IN (SELECT DISTINCT ce_observation FROM cel_images) '; |
} |
return $sql; |
} |
667,15 → 665,13 |
if (isset($tag) && !$this->etreNull($tag)) { |
$tag_sql = $this->getSqlWhereMotsCles($tag); |
// Construction de la requête |
$requete = 'SELECT DISTINCT coi.id_observation AS id_obs, ci.ce_utilisateur AS utilisateur '. |
$requete = 'SELECT DISTINCT co.id_observation AS id_obs, ci.ce_utilisateur AS utilisateur '. |
'FROM cel_images ci'. |
' LEFT JOIN cel_obs_images coi'. |
' ON (ci.id_image = coi.id_image) '. |
' LEFT JOIN cel_obs AS co '. |
' ON (coi.id_observation = co.id_observation) '. |
' INNER JOIN cel_obs AS co '. |
' ON (ci.ce_observation = co.id_observation) '. |
' LEFT JOIN cel_zones_geo AS l '. |
" ON (l.id_zone_geo = co.ce_zone_geo) ". |
"WHERE transmission = '1' ". |
"WHERE co.transmission = '1' ". |
$this->construireWhereCoordonnees(). |
$this->construireWhereUtilisateur(). |
$this->construireWhereNumTaxon(). |
743,7 → 739,6 |
} |
private function decomposerParametreTag($tags) { |
$mots_cles = array('type' => null, 'motsCles' => null, 'motsClesEncodesProteges' => null); |
if (preg_match('/.+OU.+/', $tags)) { |
$mots_cles['type'] = 'OR'; |
/trunk/jrest/services/CelImage.php |
---|
48,7 → 48,7 |
} |
$this->envoyerJson($retour); |
} |
private function getImage() { |
$image = null; |
if (isset($_GET['imgId'])) { |
74,24 → 74,20 |
$observations = $this->traiterValeursMultiples($_GET['obsId']); |
if (! is_null($observations)) { |
$requete = 'SELECT co.id_observation, cim.id_image '. |
'FROM cel_obs AS co '. |
' LEFT JOIN cel_obs_images AS coi '. |
' ON (coi.id_observation = co.id_observation) '. |
' LEFT JOIN cel_images AS cim '. |
' ON (coi.id_image = cim.id_image) '. |
"WHERE co.id_observation IN ($observations) "; |
$requete = 'SELECT ce_observation, id_image '. |
'FROM cel_images '. |
"WHERE ce_observation IN ($observations) "; |
$resultat_requete_images = Cel::db()->requeter($requete); |
$resultats = Cel::db()->requeter($requete); |
$infos = array(); |
if(is_array($resultat_requete_images)) { |
$infos = $resultat_requete_images; |
if (is_array($resultats)) { |
$infos = $resultats; |
} |
foreach ($infos as $info) { |
if(is_numeric($info['id_image'])) { |
$ids[$info['id_observation']][] = (int) $info['id_image']; |
if (is_numeric($info['id_image'])) { |
$ids[$info['ce_observation']][] = (int) $info['id_image']; |
} |
} |
} |
/trunk/jrest/services/ImageRDF.php |
---|
3,7 → 3,7 |
/** |
* PHP Version 5 |
* |
* |
* Retourne un RDF des images pour eflore |
* |
* @category PHP |
19,106 → 19,83 |
/** |
* Recherche des images associee au numero nomenclatural |
* @param numeric $uid [0] : numero nomenclatural obligatoire , $uid[1] (optionnel) : taille image : S , M, L (default) |
*/ |
*/ |
function getElement($uid){ |
$nomSelNnP = Cel::db()->proteger($uid[0]); |
$taille = isset($uid[1]) ? $uid[1] : 'L'; |
// TODO : recherche taxon ? |
// Taille |
if (isset($uid[1])) { |
$taille = $uid[1]; // S , M ou L |
} |
else { |
$taille = 'L'; |
} |
// Recherche de toutes les observations transmises du taxon pour lesquelles une photo est associee. |
$requete_obs_publiques_images_taxon = 'SELECT * FROM cel_obs, cel_obs_images, cel_images '. |
' WHERE cel_obs.nom_sel_nn = '.Cel::db()->proteger($uid[0]). |
' AND cel_obs_images.id_observation = cel_obs.id_observation '. |
' AND cel_obs.transmission = 1 '. |
' AND cel_images.id_image = cel_obs_images.id_image'; |
// Recherche de toutes les observations transmises du taxon pour lesquelles une photo est associee. |
$requete = 'SELECT co.id_observation, co.nom_sel, co.ordre, '. |
' co.prenom_utilisateur, co.nom_utilisateur, co.courriel_utilisateur, '. |
' co.zone_geo, .co.ce_zone_geo, co.date_observation, '. |
' ci.id_image, ci.nom_original '. |
'FROM cel_obs AS co INNER JOIN cel_images AS ci ON (co.id_observation = ci.ce_observation) '. |
"WHERE co.nom_sel_nn = $nomSelNnP ". |
'AND co.transmission = 1 '. |
' -- '.__FILE__.':'.__LINE__; |
//echo $requete; |
$resultats = Cel::db()->requeter($requete); |
$resultat_requete_obs_images_taxon = Cel::db()->requeter($requete_obs_publiques_images_taxon); |
$picture_path = $this->config['cel']['url_images']; |
// Formatage du xml |
$xml = '<?xml version="1.0" encoding="utf-8"?>'."\n"; |
$xml .= '<rdf:RDF'."\n"; |
$xml .= ' xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"'."\n"; |
$xml .= ' xmlns:dc="http://purl.org/dc/elements/1.1/"'."\n"; |
$xml .= ' xmlns:dcterms="http://purl.org/dc/terms">'."\n"; |
$images_obs_taxon = array(); |
if (is_array($resultat_requete_obs_images_taxon)) { |
$images_obs_taxon = $resultat_requete_obs_images_taxon; |
$auteursEmails = array(); |
$donnees = array(); |
if ($resultats !== false && is_array($resultats)) { |
$urlImgTpl = $this->config['settings']['celImgUrlTpl']; |
foreach ($resultats as $picture) { |
$id = sprintf('%09s', $picture['id_image']) ; |
$dateObsTimestamp = $this->convertirDateHeureMysqlEnTimestamp($picture['date_observation']); |
$auteursEmails[] = $picture['courriel_utilisateur']; |
$data = array(); |
$data['url_img'] = sprintf($urlImgTpl, $id.$taille); |
$data['id_image'] = $picture['id_image']; |
$data['guid'] = 'urn:lsid:tela-botanica.org:celpic:'.$data['id_image']; |
$data['nom_original'] = $picture['nom_original']; |
$data['id_observation'] = $picture['id_observation']; |
$data['nom_sel'] = $picture['nom_sel']; |
$data['ordre'] = $picture['ordre']; |
$data['zone_geo'] = utf8_decode($picture['zone_geo']); |
$data['ce_zone_geo'] = $picture['ce_zone_geo']; |
$data['ce_zone_geo'] = $picture['ce_zone_geo']; |
$data['courriel_utilisateur'] = $picture['courriel_utilisateur']; |
$data['date_observation'] = ($dateObsTimestamp != 0) ? date('d/m/Y', $dateObsTimestamp) : null; |
$donnees[] = $data; |
} |
} |
$auteursIntitules = $this->creerAuteurs($auteursEmails); |
$xml = $this->formaterRdf($donnees, $auteursIntitules); |
// Envoi du xml au navigateur |
header("Content-Type: text/xml"); |
echo utf8_encode(str_replace(' & ', ' & ', $xml)); |
} |
foreach ($images_obs_taxon as $picture) { |
// Calcul du chemin sur le serveur en fonction de l'identifiant (id) |
$id = $picture['id_image']; |
$id = sprintf('%09s', $id) ; |
$id = wordwrap($id, 3 , '_', true) ; |
$id_fichier = $id.".jpg" ; |
$niveauDossier = explode("_", $id) ; |
$dossierNiveau1 = $niveauDossier[0] ; |
$dossierNiveau2 = $niveauDossier[1] ; |
$picture_path_with_level = $picture_path.'/'.$dossierNiveau1.'/'.$dossierNiveau2 ; |
// TODO: mettre nom prénom dans créateur ? ou mail ? |
$xml .= ' <rdf:Description about="'.$picture_path_with_level.'/'.$taille.'/'.$id.'_'.$taille.'.jpg'.'"'."\n"; |
$xml .= ' dc:identifier="'.'urn:lsid:tela-botanica.org:celpic:'.$picture['id_image'].'"'."\n"; |
$xml .= ' dc:title="'.$picture['nom_sel'].'"'."\n"; |
$xml .= ' dc:description="'.$picture['nom_sel']." - [fichier_origine:".$picture['nom_original'].'][image_identifiant:'.$picture['id_image'].']'; |
$xml .= '[image_ordre:'.$picture['ordre'].']'; |
$xml .= '[observation_identifiant:'.$picture['id_observation'].']'; |
$xml .= '[observation_ordre:'.$picture['ordre'].']'.'"'."\n"; |
$xml .= ' dc:creator="'.$picture['courriel_utilisateur'].'"'."\n"; |
$xml .= ' dc:publisher="CEL"'."\n"; |
$xml .= ' dcterms:spatial="'.utf8_decode($picture['zone_geo'])." (".$picture['ce_zone_geo'].")".'"'."\n"; |
if ($picture['date_observation'] != '0000-00-00 00:00:00') { |
$yearMonthDay = explode('-',$picture['date_observation']); |
$year = $yearMonthDay[0]; |
$month = 0; |
$day = 0; |
if (count($yearMonthDay) > 1) { |
$month = $yearMonthDay[1]; |
private function formaterRdf($donnees, $auteurs) { |
$xml = '<?xml version="1.0" encoding="utf-8"?>'."\n". |
'<rdf:RDF'."\n". |
' xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"'."\n". |
' xmlns:dc="http://purl.org/dc/elements/1.1/"'."\n". |
' xmlns:dcterms="http://purl.org/dc/terms">'."\n"; |
if (count($donnees) > 0) { |
foreach ($donnees as $data) { |
$intituleAuteur = $auteurs[$data['courriel_utilisateur']]; |
$xml .= ' <rdf:Description about="'.$data['url_img'].'"'."\n". |
' dc:identifier="'.$data['guid'].'"'."\n". |
' dc:title="'.$data['nom_sel'].'"'."\n". |
' dc:description="'.$data['nom_sel'].' - '. |
'[fichier_origine:'.$data['nom_original'].']'. |
'[image_identifiant:'.$data['id_image'].']'. |
'[image_ordre:'.$data['ordre'].']'. |
'[observation_identifiant:'.$data['id_observation'].']'. |
'[observation_ordre:'.$data['ordre'].']'.'"'."\n". |
' dc:creator="'.$intituleAuteur.'"'."\n". |
' dc:publisher="CEL"'."\n". |
' dcterms:spatial="'.$data['zone_geo']." (".$data['ce_zone_geo'].")".'"'."\n"; |
if (isset($data['date_observation'])) { |
$xml .= ' dcterms:created="'.$data['date_observation'].'"'."\n"; |
} |
if (count($yearMonthDay) > 2) { |
$day = $yearMonthDay[2]; |
} |
list($day) = explode(' ',$day); |
$created = $day.'/'.$month.'/'.$year; |
$xml .= ' dcterms:created="'.$created.'"'."\n"; |
$xml .= ' dcterms:licence="CC BY-SA"/>'."\n"; |
} |
$xml .= ' dcterms:licence="CC BY-SA"/>'."\n"; |
} |
$xml .= '</rdf:RDF>'."\n"; |
// Envoi du xml au navigateur |
header("Content-Type: text/xml"); |
echo utf8_encode(str_replace(' & ', ' & ', $xml)); |
} |
function envoyerRequete($url) { |
$contenu = false; |
$contexte = stream_context_create(array( |
'http' => array( |
'method' => 'GET', |
'header' => "Content-type: application/x-www-form-urlencoded\r\n"))); |
$flux = @fopen($url, 'r', false, $contexte); |
$contenu = json_decode(stream_get_contents($flux)); |
fclose($flux); |
return $contenu; |
} |
} |
?> |
return $xml; |
} |
} |
/trunk/jrest/services/CelWidgetMapPoint.php |
---|
15,7 → 15,7 |
* Utilisateur = identifiant (= courriel) de l'utilisateur ou * pour tous les utilisateurs. |
* Projet = mot-clé du projet |
* Plusieurs mots-clés peuvent être spécifiés: |
* machin ET bidule ET chose => observations ayant tous les mots-clés (intersection) |
* machin ET bidule ET chose => observations ayant tous les mots-clés (intersection) |
* machin OU bildule OU chose => observations ayant au moins un des mots-clés (union) |
* ATTENTION |
* machin ET bidule OU chose donne un résultat indéterminé pour l'instant |
736,21 → 736,19 |
*/ |
private function obtenirObsLieesImg($type, $param) { |
// Construction de la requête |
$requete = 'SELECT DISTINCT co.id_obs, ci.ce_utilisateur AS utilisateur '. |
'FROM cel_images '. |
' LEFT JOIN cel_obs_images coi '. |
' ON (ci.id_image = coi.id_image) '. |
$requete = 'SELECT DISTINCT co.id_obs, ci.ce_utilisateur AS utilisateur '. |
'FROM cel_images '. |
' LEFT JOIN cel_obs AS co '. |
' ON (coi.id_observation = co.id_observation) '. |
' ON (ci.ce_observation = co.id_observation) '. |
' LEFT JOIN cel_zones_geo AS l '. |
' ON (l.nom = co.zone_geo AND l.id_zone_geo = co.ce_zone_geo) '. |
"WHERE transmission = '1' ". |
($type == 'date.photo' ? " AND (ci_meta_date_time LIKE ".str_replace('-', ':', $param)." OR ci_meta_date LIKE $param) " : ''). |
($type == 'date.ajout' ? " AND ci_meta_date_ajout LIKE $param " : ''). |
($type == 'date.liaison' ? " AND coi_date_liaison LIKE $param " : ''). |
($type == 'commentaire.meta' ? " AND ci_meta_comment LIKE $param " : ''). |
($type == 'commentaire.utilisateur' ? " AND ci_meta_user_comment LIKE $param " : ''). |
($type == 'commentaire.*' ? " AND (ci_meta_comment LIKE $param OR ci_meta_user_comment LIKE $param) " : ''). |
"WHERE co.transmission = '1' ". |
($type == 'date.photo' ? " AND (ci.date_prise_de_vue LIKE ".str_replace('-', ':', $param).' ' : ''). |
($type == 'date.creation' ? " AND ci.date_creation LIKE $param " : ''). |
($type == 'date.liaison' ? " AND ci.date_liaison LIKE $param " : ''). |
($type == 'commentaire.img' ? " AND ci.commentaire LIKE $param " : ''). |
($type == 'commentaire.obs' ? " AND co.commentaire LIKE $param " : ''). |
($type == 'commentaire.*' ? " AND (co.commentaire LIKE $param OR ci.commentaire LIKE $param) " : ''). |
$this->construireWhereCoordonnees(). |
$this->construireWhereDept(). |
$this->construireWhereCommune(). |
949,7 → 947,7 |
private function construireWherePhotosSeulement() { |
$sql = ''; |
if (isset($this->parametres['photos']) && $this->parametres['photos'] == 1) { |
$sql = 'AND co.id_observation IN (SELECT DISTINCT id_observation FROM cel_obs_images) '; |
$sql = 'AND co.id_observation IN (SELECT DISTINCT ce_observation FROM cel_images) '; |
} |
return $sql; |
} |
1024,14 → 1022,14 |
/** |
* Traitement de $projet pour construction du filtre dans la requête |
* |
* |
* projet1 ET projet2 ET projet3 => intersection |
* projet1 OU projet2 OU projet3 => union |
* projet1 ET projet2 OU projet3 => ATTENTION indéfini |
* projet1 ET projet2 OU projet3 => ATTENTION indéfini |
*/ |
private function getSqlWhereProjet($projet) { |
$sql = null; |
if (isset($projet) && !$this->etreNull($projet)) { |
if (isset($projet) && !$this->etreNull($projet)) { |
if (strpos($projet, ' ET ')) { |
// intersection |
$projets = explode(' ET ', $projet); |
1096,15 → 1094,13 |
if (isset($tag) && !$this->etreNull($tag)) { |
$tag_sql = $this->getSqlWhereMotsCles($tag); |
// Construction de la requête |
$requete = 'SELECT DISTINCT coi.id_observation AS id_obs, ci.ce_utilisateur AS utilisateur '. |
$requete = 'SELECT DISTINCT co.id_observation AS id_obs, ci.ce_utilisateur AS utilisateur '. |
'FROM cel_images ci'. |
' LEFT JOIN cel_obs_images coi'. |
' ON (ci.id_image = coi.id_image) '. |
' LEFT JOIN cel_obs AS co '. |
' ON (coi.id_observation = co.id_observation) '. |
' INNER JOIN cel_obs AS co '. |
' ON (ci.ce_observation = co.id_observation) '. |
' LEFT JOIN cel_zones_geo AS l '. |
" ON (l.nom = co.zone_geo AND l.id_zone_geo = co.ce_zone_geo) ". |
"WHERE transmission = '1' ". |
"WHERE co.transmission = '1' ". |
$this->construireWhereCoordonnees(). |
$this->construireWhereUtilisateur(). |
$this->construireWhereNumTaxon(). |
/trunk/jrest/services/CelSyndicationObservation.php |
---|
351,7 → 351,7 |
} |
private function creerSousRequeteTags($tag) { |
$requete = '(id_observation IN (SELECT id_observation FROM cel_obs_images coi INNER JOIN cel_images ci ON coi.id_image = ci.id_image WHERE '; |
$requete = '(id_observation IN (SELECT ce_observation FROM cel_images ci WHERE '; |
$where = ''; |
if (preg_match('/.*OU.*/', $tag)) { |
$mots_cles_tab = explode('OU',$tag); |
551,7 → 551,7 |
if(isset($this->catalogue_cles_labels_champs_etendus[$champ->cle])) { |
$label = $this->catalogue_cles_labels_champs_etendus[$champ->cle]['label']; |
} else { |
$label = preg_replace("/(?<=\\w)(?=[A-Z])/"," $1", $champ->cle); |
$label = preg_replace("/(?<=\\w)(?=[A-Z])/"," $1", $champ->cle); |
$label = trim($label); |
$label = $label; |
} |
565,19 → 565,19 |
return $champs_etendus; |
} |
private function doitAfficherChampEtendu($cle, $catalogue) { |
// Suppression des nombres à la fin de la chaines dans le cas des clés |
// "multiples" et mise en minuscule |
$cle_simplifiee = preg_replace("/\d+$/","",$cle); |
$cle_simplifiee = strtolower(rtrim($cle_simplifiee, ":")); |
// Un champ est affichable s'il n'est pas au catalogue ou bien |
// s'il n'est pas marqué privé dans celui-ci |
$affichable = !isset($catalogue[$cle_simplifiee]) || |
$catalogue[$cle_simplifiee]['options']['prive'] != 1; |
return $affichable; |
return $affichable; |
} |
private function creerCategorie($element) { |
/trunk/jrest/services/CelImageDoublon.php |
---|
125,12 → 125,10 |
} |
if (count($images_doublons_id) > 0) { |
$requete = 'SELECT cim.id_image, nom_original, md5, co.ordre as ordre_obs '. |
$requete = 'SELECT cim.id_image, nom_original, md5, co.ordre AS ordre_obs '. |
'FROM cel_images AS cim '. |
' LEFT JOIN cel_obs_images AS coi '. |
' ON (coi.id_image = cim.id_image) '. |
' LEFT JOIN cel_obs AS co '. |
' ON (coi.id_observation = co.id_observation) '. |
' ON (cim.ce_observation = co.id_observation) '. |
"WHERE cim.ce_utilisateur = '$utilisateur' ". |
' AND cim.id_image IN ('.implode(',', $images_doublons_id).')'; |
/trunk/jrest/services/Resume.php |
---|
1,8 → 1,7 |
<?php |
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel // |
/** |
* PHP Version 5 |
* Classe renvoyant un petit bout de json contenant les dernières obs publiques d'un utilisateur |
* Utilisée par l'annuaire appelant les web services résumé de chaque application |
* |
* @category PHP |
* @package papyrus_bp |
12,118 → 11,79 |
* @version SVN: <svn_id> |
* @link /doc/papyrus_bp/ |
*/ |
/** |
* Classe renvoyant un petit bout de json contenant les dernières obs publiques d'un utilisateur |
* Utilisée par l'annuaire appelant les web services résumé de chaque application |
* |
*/ |
class Resume extends Cel { |
function getElement($uid){ |
public function getElement($uid){ |
$idUtilisateurP = Cel::db()->proteger($uid[1]); |
$requete = 'SELECT co.*, ci.id_image, ci.nom_original, ci.largeur, ci.hauteur '. |
'FROM cel_obs AS co INNER JOIN cel_images AS ci ON (id_observation = ce_observation) '. |
"WHERE co.ce_utilisateur = $idUtilisateurP ". |
'ORDER BY co.date_modification DESC '. |
'LIMIT 0,5 '. |
' -- '.__FILE__.':'.__LINE__; |
$resultats = Cel::db()->requeter($requete); |
$requete_dernieres_obs = 'SELECT * FROM cel_obs'. |
' WHERE ce_utilisateur = '.Cel::db()->proteger($uid[1]). |
' AND transmission = 0'. |
' ORDER BY date_modification DESC LIMIT 0,5'; |
$urlImgTpl = $this->config['settings']['celImgUrlTpl']; |
$urlAppliCel = $this->config['settings']['celAppliUrl']; |
$resume = array( |
'titre' => 'Vos dernières observations avec photos publiées', |
'lien_appli' => '<a href="'.$urlAppliCel.'"> Accéder au carnet en ligne </a>'); |
$resultat_dernieres_obs = Cel::db()->requeter($requete_dernieres_obs); |
$dernieres_obs = array(); |
$resume = array(); |
if ($resultats !== false && is_array($resultats) && count($resultats) == 0) { |
$resume['message'] = 'Aucune observation saisie pour le moment'; |
} else if ($resultats !== false && is_array($resultats) && count($resultats) > 0) { |
if (is_array($resultat_dernieres_obs)) { |
$dernieres_obs = $resultat_dernieres_obs; |
} |
foreach ($resultats as $obs) { |
$obs = array_filter($obs, array($this, 'nettoyerObs')); |
$resume['titre'] = 'Vos dernières observations publiées'; |
$resume['lien_appli'] = '<a href="www.tela-botanica.org/appli:cel2"> Accéder au carnet en ligne </a>'; |
$nomRetenu = isset($obs['nom_ret']) ? $obs['nom_ret'] : 'Indéterminé'; |
$date = 'Datée du '.$obs['date_modification']; |
$idZoneGeo = $this->convertirCodeZoneGeoVersDepartement($obs['ce_zone_geo']); |
$lieuMorceaux = array(); |
$lieuMorceaux[] = $obs['zone_geo'].(!empty($idZoneGeo) ? " ($idZoneGeo)" : ''); |
$lieuMorceaux[] = $obs['station']; |
$lieuMorceaux[] = $obs['lieudit']; |
$lieu = 'Lieu : '.implode(', ', $lieuMorceaux); |
$nomOriginal = htmlspecialchars($obs['nom_original']); |
list($largeur, $hauteur) = $this->calculerDimensions($obs['largeur'], $obs['hauteur']); |
$idImg = sprintf('%09s', $obs['id_image']); |
$urlImgL = sprintf($urlImgTpl, "{$idImg}L"); |
$urlImgM = sprintf($urlImgTpl, "{$idImg}M"); |
$baliseImg = '<img src="'.$urlImgM.'" alt="'.$nomOriginal.'" height="'.$hauteur.'" width="'.$largeur.'" />'; |
if (count($dernieres_obs) == 0) { |
$resume['message'] = 'Aucune observation saisie pour le moment'; |
} |
foreach ($dernieres_obs as $obs) { |
$chemin_sur_serveur = $this->config['cel']['url_images']; |
$date = 'Datée du '.$obs['date_modification'].'<br/>' ; |
$lieu = 'Lieu : '.trim($obs['zone_geo'],'000null').' ('.$this->convertirCodeZoneGeoVersDepartement(trim($obs['ce_zone_geo']),'000null').') '.trim($obs['station'],'000null').' '.trim($obs['lieudit'],'000null').'<br/>' ; |
$image =''; |
$cible_lien = ''; |
$req_liaison = 'SELECT * FROM cel_images WHERE id_image IN (SELECT id_image FROM cel_obs_images WHERE id_observation = "'.$obs['id_observation'].'") AND ce_utilisateur = "'.$obs['ce_utilisateur'].'"' ; |
$res_liaison = Cel::db()->requeter($req_liaison); |
$ligne_image = null; |
foreach ($res_liaison as $img) { |
$row = $img; |
$resume['elements'][] = array( |
'element' => "$nomRetenu<br />$date<br />$lieu<br />", |
'lien' => $urlImgL, |
'image' => $baliseImg); |
} |
} |
$this->envoyerJson($resume); |
return true; |
} |
if($row != null) { |
$row['nom_original'] = htmlspecialchars($row['nom_original']); |
$row['id_image'] = htmlspecialchars($row['id_image']); |
$id = $row['id_image']; |
$tailleXY = $this->calculerDimensions(array($row['largeur'], $row['hauteur'])); |
$id = sprintf('%09s', $id) ; |
$id = wordwrap($id, 3 , '_', true) ; |
$id_fichier = $id.".jpg" ; |
$niveauDossier = explode("_", $id) ; |
$dossierNiveau1 = $niveauDossier[0] ; |
$dossierNiveau2 = $niveauDossier[1] ; |
$chemin_sur_serveur_final = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2 ; |
$chemin_fichier = $chemin_sur_serveur_final.'/L/'.$id."_L.jpg" ; |
$chemin_fichier_s = $chemin_sur_serveur_final.'/M/'.$id."_M.jpg" ; |
$image = '<img src="'.$chemin_fichier_s.'" alt="'.$row['nom_original'].'" height="'.$tailleXY[1].'px" width="'.$tailleXY[0].'px"></img>'; |
$cible_lien = $chemin_fichier; |
} |
$resume_item = array('element' => $obs['nom_ret'].$date.$lieu, 'lien' => $cible_lien,'image' => $image); |
$resume['elements'][] = $resume_item; |
} |
protected function nettoyerObs($valeur) { |
return ($valeur == '000null') ? '' : trim($valeur); |
} |
$this->envoyerJson($resume); |
return true; |
} |
private function calculerDimensions($largeur, $hauteur) { |
$tailleOr = 75 ; |
if ($hauteur == 0) { |
$hauteur = $tailleOr; |
} |
if ($largeur == 0) { |
$largeur = $tailleOr; |
} |
$maxTaille = max($hauteur, $largeur); |
public function calculerDimensions($tailleXY) { |
$tailleOr = 75 ; |
if($tailleXY[1] == 0) { |
$tailleXY[1] = $tailleOr; |
} |
if($tailleXY[0] == 0) { |
$tailleXY[0] = $tailleOr; |
} |
$maxTaille = max($tailleXY[1],$tailleXY[0]) ; |
if($maxTaille == $tailleXY[1]) { |
$rapport = $tailleXY[1]/$tailleXY[0] ; |
$tailleXY[1] = 75 ; |
$tailleXY[0] = round($tailleXY[1]/$rapport,0) ; |
}else { |
$rapport = $tailleXY[0]/$tailleXY[1] ; |
$tailleXY[0] = 75 ; |
$tailleXY[1] = round($tailleXY[0]/$rapport,0) ; |
} |
return $tailleXY ; |
} |
} |
?> |
if ($maxTaille == $hauteur) { |
$rapport = $hauteur / $largeur; |
$hauteur = 75; |
$largeur = round($hauteur / $rapport, 0); |
} else { |
$rapport = $largeur / $hauteur; |
$largeur = 75; |
$hauteur = round($largeur / $rapport, 0); |
} |
return array($largeur, $hauteur); |
} |
} |
/trunk/jrest/services/CelStatistique.php |
---|
56,9 → 56,10 |
$utilisateur = isset($_GET['utilisateur']) ? Cel::db()->quote($_GET['utilisateur']) : null; |
// Récupération des données |
$requete = "SELECT DATE_FORMAT(date_creation, '%Y%m') AS periode, COUNT(ci.id_image) AS nbre ". |
"FROM cel_obs_images coi LEFT JOIN cel_images ci ON (coi.id_image = ci.id_image) ". |
$requete = "SELECT DATE_FORMAT(date_creation, '%Y%m') AS periode, COUNT(id_image) AS nbre ". |
"FROM cel_images ". |
"WHERE date_creation != '0000-00-00 00:00:00' ". |
' AND ce_observation IS NOT NULL AND ce_observation != 0 '. |
((isset($utilisateur)) ? " AND courriel_utilisateur = $utilisateur " : ''). |
'GROUP BY periode '. |
'ORDER BY periode '; |
/trunk/jrest/services/CelWidgetSaisie.php |
---|
164,7 → 164,7 |
// si le formulaire contient une image on la traite |
if ($img != null) { |
$this->nettoyerImagesUploades(); |
$img_a_taguer_ids = $this->stockerImagesEtLierAObs($img, $id_utilisateur, $utilisateur); |
$img_a_taguer_ids = $this->stockerImagesEtLierAObs($idNouvelleObs, $img, $utilisateur); |
if ($img_a_taguer_ids === false) { |
$erreursDurantTraitement = true; |
$this->messages[] = "Au moins une des images n'a pas pu être enregistrée."; |
316,62 → 316,40 |
return $imgAAjouter; |
} |
protected function stockerImagesEtLierAObs($img, $id_utilisateur, $utilisateur) { |
protected function stockerImagesEtLierAObs($id_obs, $img, $utilisateur) { |
if (isset($img['nom'])) { |
$imgTmp[] = $img; |
unset($img); |
$img = $imgTmp; |
} |
$img_a_taguer_ids = array(); |
if (!isset($img['nom']) && is_array($img)) { |
foreach ($img as $index => $image) { |
$nomFichierImg = $this->traiterNomFichierImage($image['nom']); |
$cheminImage = $this->config['cel']['chemin_stockage_temp']."/$nomFichierImg"; |
// Si l'image est transmise en base 64 |
if (empty($image['b64']) === false) { |
$this->transformerBase64enFichier($cheminImage, $image['b64']); |
} |
$this->debug[] = 'Nom fichier img debut :'.$nomFichierImg; |
$idImg = $this->ajouterImageSurDdEtBdd($utilisateur, $cheminImage, $nomFichierImg); |
if ($idImg !== false) { |
$liaisonOk = $this->lierObsEtImg($idImg, $id_utilisateur, $image['id_obs']); |
if ($liaisonOk === true) { |
$img_a_taguer_ids[] = $idImg; |
if (isset($image['tags'])) { |
$this->correspondanceIdImgTags[$idImg] = $image['tags']; |
} |
} |
} else { |
// L'image n'a pas pu être écrite. |
// On annule l'écriture des précédentes et on s'arrête là - la transaction |
// se chargera de les retirer de la base de données |
foreach ($img_a_taguer_ids as $idImageASupprimer) { |
$this->effacerImageDuDd($idImageASupprimer); |
} |
$img_a_taguer_ids = false; |
break; |
} |
} |
} else { |
$nomFichierImg = $this->traiterNomFichierImage($img['nom']); |
foreach ($img as $image) { |
$nomFichierImg = $this->traiterNomFichierImage($image['nom']); |
$cheminImage = $this->config['cel']['chemin_stockage_temp']."/$nomFichierImg"; |
// Si l'image est transmise en base 64 |
if (empty($img['b64']) === false) { |
$this->transformerBase64enFichier($cheminImage, $img['b64']); |
if (empty($image['b64']) === false) { |
$this->transformerBase64enFichier($cheminImage, $image['b64']); |
} |
$this->debug[] = 'Nom fichier img debut :'.$nomFichierImg; |
$idImg = $this->ajouterImageSurDdEtBdd($utilisateur, $cheminImage, $nomFichierImg); |
$idImg = $this->ajouterImageSurDdEtBdd($id_obs, $utilisateur, $cheminImage, $nomFichierImg); |
if ($idImg !== false) { |
$liaisonOk = $this->lierObsEtImg($idImg, $id_utilisateur, $img['id_obs']); |
if ($liaisonOk === true) { |
$img_a_taguer_ids[] = $idImg; |
if (isset($img['tags'])) { |
$this->correspondanceIdImgTags[$idImg] = $img['tags']; |
} |
$img_a_taguer_ids[] = $idImg; |
if (isset($image['tags'])) { |
$this->correspondanceIdImgTags[$idImg] = $image['tags']; |
} |
} else { |
// L'image n'a pas pu être écrite |
// L'image n'a pas pu être écrite. |
// On annule l'écriture des précédentes et on s'arrête là - la transaction |
// se chargera de les retirer de la base de données |
foreach ($img_a_taguer_ids as $idImageASupprimer) { |
$this->effacerImageDuDd($idImageASupprimer); |
} |
$img_a_taguer_ids = false; |
break; |
} |
} |
return $img_a_taguer_ids; |
} |
530,39 → 508,6 |
} |
} |
public function lierObsEtImg($id_image, $utilisateur, $ordre_obs) { |
$id_image = Cel::db()->proteger($id_image); |
$id_obs = Cel::db()->proteger($this->obtenirIdObsPourIdentifiantEtOrdre($utilisateur, $ordre_obs)); |
$requete = 'INSERT INTO cel_obs_images '. |
' (id_image, id_observation, date_liaison) '. |
"VALUES ($id_image, $id_obs, NOW()) ". |
' ON DUPLICATE KEY UPDATE id_image = id_image'; |
$liaison = true; |
if (Cel::db()->executer($requete) === false) { |
$this->messages[] = "La requête de liaison de l'obs $id_obs à l'image $id_image pour l'utilisateur $id_utilisateur a échouée."; |
$liaison = false; |
} |
return $liaison; |
} |
private function obtenirIdObsPourIdentifiantEtOrdre($id_utilisateur, $ordre) { |
$id_utilisateur = Cel::db()->proteger($id_utilisateur); |
$ordre = Cel::db()->proteger($ordre); |
$requete = 'SELECT id_observation '. |
'FROM cel_obs '. |
"WHERE ce_utilisateur = $id_utilisateur ". |
" AND ordre = $ordre "; |
$resultat = Cel::db()->requeter($requete); |
$id_obs = (count($resultat) > 0) ? $resultat[0]['id_observation'] : false; |
return $id_obs; |
} |
private function obtenirIdsObsPourTableauOrdres($id_utilisateur, $ordres) { |
$this->debug[] = print_r($ordres,true); |
$id_utilisateur = Cel::db()->proteger($id_utilisateur); |
624,7 → 569,7 |
* @param string $cheminImage le chemin vers le fichier original de l'image |
* @param string $nomFichierImage le nom du fichier original de l'image |
*/ |
public function ajouterImageSurDdEtBdd($utilisateur, $cheminImage, $nomFichierImage) { |
public function ajouterImageSurDdEtBdd($id_obs, $utilisateur, $cheminImage, $nomFichierImage) { |
$idImage = false; |
$idUtilisateur = $utilisateur['id_utilisateur']; |
$nouvelOrdre = $this->obtenirNouvelOrdrePourUtilisateur($idUtilisateur); |
634,8 → 579,8 |
$metadonnees = $extracteurMetadonnees->extraireMetadonnees($cheminImage) ; |
if ($metadonnees !== false) { |
$infosImage = $metadonnees; |
$infosImage['ce_observation'] = $id_obs; |
$infosImage['ordre'] = $nouvelOrdre; |
$infosImage['publiable_eflore'] = 'false'; |
$infosImage['nom_original'] = $nomFichierImage; |
$infosImage['ce_utilisateur'] = $idUtilisateur; |
$infosImage['courriel_utilisateur'] = $utilisateur['courriel']; |
642,6 → 587,11 |
$infosImage['nom_utilisateur'] = $utilisateur['nom']; |
$infosImage['prenom_utilisateur'] = $utilisateur['prenom']; |
$infosImage['md5'] = md5_file($cheminImage); |
$infosImage['date_creation'] = 'NOW()'; |
$infosImage['date_modification'] = 'NOW()'; |
$infosImage['date_liaison'] = 'NOW()'; |
$infosImage['date_transmission'] = 'NOW()'; |
$infosImage['transmission'] = '1'; |
$this->debug[] = 'Nom fichier img meta :'.$nomFichierImage; |
$requete = $this->construireRequeteInsertionImage($infosImage); |
$resultat = Cel::db()->executer($requete); |
723,23 → 673,23 |
} |
private function construireRequeteInsertionImage($informations) { |
$champs = array('date_creation'); |
$valeurs = array('CURRENT_TIMESTAMP()'); |
$champs = array(); |
$valeurs = array(); |
foreach ($informations as $champ => $valeur) { |
$champs[] = $champ; |
$valeurs[] = is_null($valeur) ? 'NULL' : Cel::db()->proteger($valeur); |
if ($champ == 'date_creation' && $valeur != 'NULL') { |
$champs[] = 'date_creation'; |
if (is_null($valeur)) { |
$valeurs[] = 'NULL'; |
} else if ($valeur === 'NOW()') { |
$valeurs[] = $valeur; |
} else { |
$valeurs[] = Cel::db()->proteger($valeur); |
} |
} |
$champs = implode(', ', $champs); |
$valeurs = implode(', ', $valeurs); |
$champsConcat = implode(', ', $champs); |
$valeursConcat = implode(', ', $valeurs); |
$requete = "INSERT INTO cel_images ($champs) VALUES ($valeurs) "; |
$requete = "INSERT INTO cel_images ($champsConcat) VALUES ($valeursConcat) ". |
' -- '.__FILE__.':'.__LINE__; |
return $requete; |
} |
} |
?> |
} |
/trunk/jrest/services/CelSyndicationImage.php |
---|
332,13 → 332,9 |
// Construction de la requête |
$requete = (isset($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' ci.*, '. |
' cim.id_image, cim.ce_utilisateur, nom_original, cim.date_creation, cim.mots_cles_texte as mots_cles_texte_images, |
ci.mots_cles_texte as mots_cles_texte_images_obs, cim.commentaire, note_qualite, nom_referentiel '. |
'FROM cel_obs_images AS coi '. |
'LEFT JOIN cel_obs AS ci '. |
'ON (coi.id_observation = ci.id_observation) '. |
'LEFT JOIN cel_images AS cim '. |
'ON (coi.id_image = cim.id_image) '. |
' cim.id_image, cim.ce_utilisateur, nom_original, cim.date_creation, cim.mots_cles_texte AS mots_cles_texte_images, '. |
' ci.mots_cles_texte AS mots_cles_texte_images_obs, cim.commentaire, note_qualite, nom_referentiel '. |
'FROM cel_obs AS ci LEFT JOIN cel_images AS cim ON (ci.id_observation = cim.ce_observation) '. |
'WHERE ci.transmission = 1 '. |
' AND ci.ce_utilisateur = cim.ce_utilisateur '. |
'ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby : 'cim.date_creation DESC').' '. |
371,14 → 367,12 |
// Construction de la requête |
$requete = (isset($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' ci.*, '. |
' cim.id_image, ci.ce_utilisateur, nom_original, cim.date_creation, cim.mots_cles_texte as mots_cles_texte_images, '. |
' ci.mots_cles_texte as mots_cles_texte_obs, cim.commentaire as commentaire_img, note_qualite, nom_referentiel, '. |
' ci.commentaire as commentaire_obs '. |
' cim.id_image, ci.ce_utilisateur, nom_original, cim.date_creation, cim.mots_cles_texte AS mots_cles_texte_images, '. |
' ci.mots_cles_texte AS mots_cles_texte_obs, cim.commentaire AS commentaire_img, note_qualite, nom_referentiel, '. |
' ci.commentaire AS commentaire_obs '. |
'FROM cel_images AS cim '. |
' LEFT JOIN cel_obs_images AS coi '. |
' ON (coi.id_image = cim.id_image) '. |
' LEFT JOIN cel_obs AS ci '. |
' ON (coi.id_observation = ci.id_observation) '. |
' ON (cim.ce_observation = ci.id_observation) '. |
(($this->etreFluxAdmin()) ? '' : 'WHERE ci.transmission = 1 '). |
'ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby : 'cim.date_creation DESC').' '. |
"LIMIT $this->start, $this->limit "; |
431,20 → 425,18 |
$sous_requete = 'SELECT * '. |
'FROM cel_images c '. |
'WHERE id_image '. |
' IN (SELECT id_image FROM cel_obs_images a '. |
(($this->etreFluxAdmin()) ? '' : 'INNER JOIN cel_obs b ON b.id_observation = a.id_observation AND b.transmission = 1 '). |
' IN (SELECT id_image FROM cel_images a '. |
(($this->etreFluxAdmin()) ? '' : 'INNER JOIN cel_obs b ON a.ce_observation = b.id_observation AND b.transmission = 1 '). |
') '; |
$sous_requete .= ' ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby : 'c.date_creation DESC').' '. |
"LIMIT $this->start,$this->limit "; |
// Construction de la requête |
$requete = 'SELECT *, b.mots_cles_texte as mots_cles_texte_obs, c.mots_cles_texte as mots_cles_texte_images, '. |
' b.commentaire as commentaire_obs, c.commentaire as commentaire_img, nom_referentiel '. |
'FROM ('.$sous_requete.') as c '. |
' INNER JOIN cel_obs_images AS a '. |
' ON (a.id_image = c.id_image) '. |
$requete = 'SELECT *, b.mots_cles_texte AS mots_cles_texte_obs, c.mots_cles_texte AS mots_cles_texte_images, '. |
' b.commentaire AS commentaire_obs, c.commentaire AS commentaire_img, nom_referentiel '. |
'FROM ('.$sous_requete.') AS c '. |
' INNER JOIN cel_obs AS b '. |
' ON (a.id_observation = b.id_observation) AND b.ce_utilisateur = c.ce_utilisateur '; |
' ON (c.ce_observation = b.id_observation) AND b.ce_utilisateur = c.ce_utilisateur '; |
//echo $requete; |
return $requete; |
} |
453,11 → 445,9 |
// Construction de la requête |
$requete = 'SELECT *, b.mots_cles_texte as mots_cles_texte_obs, c.mots_cles_texte as mots_cles_texte_images, '. |
' b.commentaire as commentaire_obs, c.commentaire as commentaire_img, nom_referentiel '. |
'FROM cel_obs_images AS a '. |
'FROM cel_images AS c '. |
' INNER JOIN cel_obs AS b '. |
' ON (a.id_observation = b.id_observation) '. |
' INNER JOIN cel_images AS c '. |
' ON (a.id_image = c.id_image) '. |
' ON (c.ce_observation = b.id_observation) '. |
'WHERE b.ce_utilisateur = c.ce_utilisateur '. |
(($this->etreFluxAdmin()) ? '' : 'AND b.transmission = 1 '). |
' AND '; |