/trunk/jrest/jrest.ini.php.defaut |
---|
9,7 → 9,7 |
password = |
hostspec = localhost |
database = tb_coel |
guid = "urn:lsid:tela-botanica.org:%s" |
guid = "urn:lsid:tela-botanica.org:%s:%s" |
editeur = "Tela Botanica" |
urlBaseCoel = "http://www.tela-botanica.org/eflore/coel/Coel.html" |
urlBaseJrest = "http://www.tela-botanica.org/eflore/coel/jrest/" |
19,5 → 19,6 |
mdpAnnuaire = |
correctionLogin = |
correctionMdp = |
idProjetUtilisateurs = 3 |
;*/?> |
/trunk/jrest/services/Coel.php |
---|
554,6 → 554,7 |
protected function chargerUtilisateur($login, $mot_de_passe = null) { |
$sortie = false; |
$cp_ce_projet = $this->config['coel']['idProjetUtilisateurs']; |
$requete = 'SELECT cp_id_personne AS id, cp_fmt_nom_complet AS nom_complet, cp_prenom AS prenom, '. |
' cp_nom AS nom, cp_login AS login, cp_mot_de_passe AS mot_de_passe, cp_parametre AS parametre, '. |
' cp_ville AS ville, cp_code_postal AS code_postal, '. |
/trunk/jrest/services/CoelStatistique.php |
---|
6,6 → 6,8 |
* |
* Cas d'utilisation : |
* /CoelStatistique/MonTypeDeStat : retourne la balise html image du graphique pour le type de statistique demandé |
* /CoelStatistique/MonTypeDeStat/MonIdProjet : retourne la balise html image du graphique pour le type de statistique |
* demandé et le projet indiqué. |
* ?html=non : ce paramètre ajouté en fin d'url, force le retour de l'url du graphique sans la balise html img |
* |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
129,9 → 131,12 |
private function executerRequeteNombre($entite, $abr) { |
$table = 'coel_'.$entite; |
$champ_id = $abr.'_id_'.$entite; |
$champ_projet = $abr.'_ce_projet'; |
$projet_id = (isset($this->parametres[0]) ? $this->bdd->quote($this->parametres[0]) : null); |
$requete = "SELECT COUNT($champ_id) AS nbre ". |
"FROM $table "; |
"FROM $table ". |
(is_null($projet_id) ? '' : "WHERE $champ_projet = $projet_id "); |
try { |
$nbre = $this->bdd->query($requete)->fetchColumn(); |
if ($nbre === false) { |
183,6 → 188,7 |
$legende = implode('|', $etats); |
$etiquettes_x = "0|$moitier|$maximum"; |
$titre = $this->existerParametre(0) ? 'Ma participation' : 'Participation'; |
$titre .= $this->existerParametre(1) ? ' au projet' : ' tous projets confondus'; |
// Paramètres du graphique |
$graph = array( |
205,13 → 211,26 |
private function executerRequeteNombreDansHistorique($tables_infos, $etat) { |
// Récupération des paramêtres |
$personne_id = (isset($this->parametres[0]) && $this->parametres[0] != '*') ? $this->bdd->quote($this->parametres[0]) : null; |
$projet_id = (isset($this->parametres[1]) && $this->parametres[1] != '*') ? $this->bdd->quote($this->parametres[1]) : null; |
// Construction du Xpath si nécessaire |
if (isset($projet_id)) { |
$squelette = '//row[1]/%s_ce_projet'; |
$abreviations = explode(',', $tables_infos['abreviations']); |
$xpath = array(); |
foreach ($abreviations as $abr) { |
$xpath[] = sprintf($squelette, $abr); |
} |
$xpath = implode(' | ', $xpath); |
} |
// Récupération des données |
$requete = "SELECT COUNT(cmhl_date_modification) AS nbre ". |
"FROM coel_meta_historique_ligne ". |
"WHERE cmhl_ce_table IN ({$tables_infos['identifiants']}) ". |
" AND cmhl_ce_etat = $etat ". |
(isset($personne_id) ? " AND cmhl_ce_modifier_par = $personne_id " : ''); |
(isset($personne_id) ? " AND cmhl_ce_modifier_par = $personne_id " : ''). |
(isset($projet_id) ? " AND ExtractValue(cmhl_enregistrement, '$xpath') = $projet_id " : ''); |
try { |
$nbre = $this->bdd->query($requete)->fetchColumn(); |
if ($nbre === false) { |
224,11 → 243,14 |
} |
private function getTypeDepot() { |
// Récupération des paramêtres |
$projet_id = (isset($this->parametres[0]) ? $this->bdd->quote($this->parametres[0]) : null); |
// Récupération des données |
$requete = 'SELECT cmlv_nom AS type, COUNT(cc_ce_type_depot) AS nbre '. |
'FROM coel_collection '. |
' LEFT JOIN coel_meta_liste_valeur ON (cc_ce_type_depot = cmlv_id_valeur) '. |
( is_null($projet_id) ? '' : "WHERE cc_ce_projet = $projet_id "). |
'GROUP BY cc_ce_type_depot'; |
try { |
$infos = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC); |
271,10 → 293,13 |
} |
private function getNombreCollectionParStructure() { |
// Récupération des paramêtres |
$projet_id = (isset($this->parametres[0]) ? $this->bdd->quote($this->parametres[0]) : null); |
// Récupération des données |
$requete = 'SELECT COUNT(cc_id_collection) AS nbre '. |
'FROM coel_collection '. |
( is_null($projet_id) ? '' : "WHERE cc_ce_projet = $projet_id "). |
'GROUP BY cc_ce_structure '; |
try { |
282,7 → 307,7 |
if ($infos === false) { |
$this->messages[] = "La requête a retourné aucun résultat."; |
} else if (count($infos) == 0) { |
$this->messages[] = "Aucune collection n'est référencée."; |
$this->messages[] = "Aucune collection n'est référencée dans ce projet."; |
} |
} catch (PDOException $e) { |
$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage()); |
336,17 → 361,21 |
} |
private function getNombrePartParStructure() { |
// Récupération des paramêtres |
$projet_id = (isset($this->parametres[0]) ? $this->bdd->quote($this->parametres[0]) : null); |
// Récupération des données |
$requete = 'SELECT cc_ce_structure, ccb_truk_unite_base '. |
'FROM coel_collection_botanique '. |
' LEFT JOIN coel_collection ON (ccb_id_collection = cc_id_collection) '; |
' LEFT JOIN coel_collection ON (ccb_id_collection = cc_id_collection) '. |
( is_null($projet_id) ? '' : "WHERE cc_ce_projet = $projet_id "); |
try { |
$infos = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC); |
if ($infos === false) { |
$this->messages[] = "La requête a retourné aucun résultat."; |
} else if (count($infos) == 0) { |
$this->messages[] = "Aucune collection n'est référencée."; |
$this->messages[] = "Aucune collection n'est référencée dans ce projet."; |
} |
} catch (PDOException $e) { |
$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage()); |
414,10 → 443,14 |
} |
private function getNombrePartParCollection() { |
// Récupération des paramêtres |
$projet_id = (isset($this->parametres[0]) ? $this->bdd->quote($this->parametres[0]) : null); |
// Récupération des données |
$requete = 'SELECT ccb_truk_unite_base '. |
'FROM coel_collection_botanique '; |
'FROM coel_collection_botanique '. |
( is_null($projet_id) ? '' : ' LEFT JOIN coel_collection ON (ccb_id_collection = cc_id_collection) '). |
( is_null($projet_id) ? '' : "WHERE cc_ce_projet = $projet_id "); |
try { |
$infos = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC); |
424,7 → 457,7 |
if ($infos === false) { |
$this->messages[] = "La requête a retourné aucun résultat."; |
} else if (count($infos) == 0) { |
$this->messages[] = "Aucune collection n'est référencée."; |
$this->messages[] = "Aucune collection n'est référencée dans ce projet."; |
$infos == false; |
} |
} catch (PDOException $e) { |
492,65 → 525,74 |
} |
private function getNombreCollectionParDepartement() { |
// Récupération des données |
$requete = 'SELECT cs_code_postal '. |
'FROM coel_collection '. |
' LEFT JOIN coel_structure ON (cc_ce_structure = cs_id_structure) '. |
'WHERE cs_ce_truk_pays = '.self::META_CODE_FRANCE.' '; |
try { |
$infos = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC); |
if ($infos === false) { |
$this->messages[] = "La requête a retourné aucun résultat."; |
} else if (count($infos) == 0) { |
$this->messages[] = "Aucune collection n'est référencée."; |
$infos == false; |
// Récupération des paramêtres |
$projet_id = (isset($this->parametres[0]) ? $this->bdd->quote($this->parametres[0]) : null); |
if ($projet_id !== null) { |
// Récupération des données |
$requete = 'SELECT cs_code_postal '. |
'FROM coel_collection '. |
' LEFT JOIN coel_structure ON (cc_ce_structure = cs_id_structure) '. |
'WHERE cs_ce_truk_pays = '.self::META_CODE_FRANCE.' '. |
( is_null($projet_id) ? '' : " AND cc_ce_projet = $projet_id "); |
try { |
$infos = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC); |
if ($infos === false) { |
$this->messages[] = "La requête a retourné aucun résultat."; |
} else if (count($infos) == 0) { |
$this->messages[] = "Aucune collection n'est référencée dans ce projet."; |
$infos == false; |
} |
} catch (PDOException $e) { |
$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage()); |
} |
} catch (PDOException $e) { |
$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage()); |
} |
$graph = null; |
if ($infos !== false) { |
// Post traitement des données de la base de données |
// Extraction du nombre de part |
$donnees = array(); |
foreach ($infos as $info) { |
if (preg_match('/^([0-8][0-9]|9[0-5]|97[1-4]|976)/', $info['cs_code_postal'], $match)) { |
if (! isset($donnees[$match[1]])) { |
$donnees[$match[1]] = 1; |
} else { |
$donnees[$match[1]]++; |
$graph = null; |
if ($infos !== false) { |
// Post traitement des données de la base de données |
// Extraction du nombre de part |
$donnees = array(); |
foreach ($infos as $info) { |
if (preg_match('/^([0-8][0-9]|9[0-5]|97[1-4]|976)/', $info['cs_code_postal'], $match)) { |
if (! isset($donnees[$match[1]])) { |
$donnees[$match[1]] = 1; |
} else { |
$donnees[$match[1]]++; |
} |
} |
} |
$donnees_tmp = $donnees; |
$donnees = array(); |
foreach ($donnees_tmp as $cle => $valeur) { |
$donnees[$cle.' ('.$valeur.' collections)'] = $valeur; |
} |
asort($donnees); |
$valeurs = implode(',', $donnees); |
$legende = implode('|', array_keys($donnees)); |
// Paramètres du graphique |
$graph = array( |
'cht' => 'p3', |
'chs' => '400x225', |
'chco' => 'EDC951|DEB0DB|DEC9B0|B0DEB3|B0C4DE|B0B0DE|927CBA', |
'chd' => "t:$valeurs", |
'chds' => '0,'.max($donnees), |
'chdl' => $legende, |
'chtt' => 'Nombre de collections conservées |par département', |
'chts' => '000000,11.5', |
'chts' => '000000,12'); |
} |
$donnees_tmp = $donnees; |
$donnees = array(); |
foreach ($donnees_tmp as $cle => $valeur) { |
$donnees[$cle.' ('.$valeur.' collections)'] = $valeur; |
} |
asort($donnees); |
$valeurs = implode(',', $donnees); |
$legende = implode('|', array_keys($donnees)); |
// Paramètres du graphique |
$graph = array( |
'cht' => 'p3', |
'chs' => '400x225', |
'chco' => 'EDC951|DEB0DB|DEC9B0|B0DEB3|B0C4DE|B0B0DE|927CBA', |
'chd' => "t:$valeurs", |
'chds' => '0,'.max($donnees), |
'chdl' => $legende, |
'chtt' => 'Nombre de collections conservées |par département', |
'chts' => '000000,11.5', |
'chts' => '000000,12'); |
} else { |
$this->messages[] = "Veuillez sélectionner un projet pour voir le graphique."; |
} |
return $graph; |
} |
private function getNombreCollectionParTypeStructure() { |
// Récupération des paramêtres |
$projet_id = (isset($this->parametres[0]) ? $this->bdd->quote($this->parametres[0]) : null); |
// Récupération des données |
$requete = 'SELECT cmlv_prive.cmlv_nom AS type_prive, cmlv_public.cmlv_nom AS type_public '. |
557,7 → 599,8 |
'FROM coel_collection '. |
' LEFT JOIN coel_structure ON (cc_ce_structure = cs_id_structure) '. |
' LEFT JOIN coel_meta_liste_valeur AS cmlv_prive ON (cs_ce_truk_type_prive = cmlv_prive.cmlv_id_valeur) '. |
' LEFT JOIN coel_meta_liste_valeur AS cmlv_public ON (cs_ce_truk_type_public = cmlv_public.cmlv_id_valeur) '; |
' LEFT JOIN coel_meta_liste_valeur AS cmlv_public ON (cs_ce_truk_type_public = cmlv_public.cmlv_id_valeur) '. |
( is_null($projet_id) ? '' : "WHERE cc_ce_projet = $projet_id "); |
try { |
$infos = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC); |
564,7 → 607,7 |
if ($infos === false) { |
$this->messages[] = "La requête a retourné aucun résultat."; |
} else if (count($infos) == 0) { |
$this->messages[] = "Aucune collection n'est référencée."; |
$this->messages[] = "Aucune collection n'est référencée dans ce projet."; |
$infos == false; |
} |
} catch (PDOException $e) { |
617,16 → 660,19 |
} |
private function getNombreCollectionParPeriode() { |
// Récupération des paramêtres |
$projet_id = (isset($this->parametres[0]) ? $this->bdd->quote($this->parametres[0]) : null); |
// Récupération des données |
$requete = 'SELECT cc_truk_periode_constitution '. |
'FROM coel_collection '; |
'FROM coel_collection '. |
( is_null($projet_id) ? '' : "WHERE cc_ce_projet = $projet_id "); |
try { |
$infos = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC); |
if ($infos === false) { |
$this->messages[] = "La requête a retourné aucun résultat."; |
} else if (count($infos) == 0) { |
$this->messages[] = "Aucune collection n'est référencée."; |
$this->messages[] = "Aucune collection n'est référencée dans ce projet."; |
$infos == false; |
} |
} catch (PDOException $e) { |
705,16 → 751,20 |
} |
private function getNombreHerbierParType() { |
// Récupération des paramêtres |
$projet_id = (isset($this->parametres[0]) ? $this->bdd->quote($this->parametres[0]) : null); |
// Récupération des données |
$requete = 'SELECT ccb_ce_truk_type '. |
'FROM coel_collection_botanique '; |
'FROM coel_collection_botanique '. |
( is_null($projet_id) ? '' : ' LEFT JOIN coel_collection ON (ccb_id_collection = cc_id_collection) '). |
( is_null($projet_id) ? '' : "WHERE cc_ce_projet = $projet_id "); |
try { |
$infos = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC); |
if ($infos === false) { |
$this->messages[] = "La requête a retourné aucun résultat."; |
} else if (count($infos) == 0) { |
$this->messages[] = "Aucune collection n'est référencée."; |
$this->messages[] = "Aucune collection n'est référencée dans ce projet."; |
$infos == false; |
} |
} catch (PDOException $e) { |
729,7 → 779,7 |
try { |
$metadonnees = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC); |
if ($metadonnees === false) { |
$this->messages[] = "La requête de recherche des métadonnées n'a retourné aucun résultat."; |
$this->messages[] = "La requête de recherche des métadonnées a retourné aucun résultat."; |
} |
} catch (PDOException $e) { |
$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage()); |
/trunk/jrest/services/CoelExport.php |
---|
31,7 → 31,7 |
// Pré traitement des paramêtres |
$pour_bdd = false; |
$this->parametres = $this->traiterParametresUrl(array('service', 'format'), $params, $pour_bdd); |
$this->parametres = $this->traiterParametresUrl(array('service', 'format', 'projet'), $params, $pour_bdd); |
// Chargement du bon type de service demandé |
if (isset($this->parametres['service'])) { |
117,6 → 117,7 |
private function getServiceStructureExpertise() { |
$donnees = array(); |
$projet_id = $this->parametres['projet']; |
// Construction de la requête |
$requete = 'SELECT '.(($this->distinct) ? 'DISTINCT' : '').' '. |
127,6 → 128,7 |
' LEFT JOIN coel_structure_a_personne ON (cs_id_structure = csap_id_structure) '. |
' LEFT JOIN coel_structure_conservation ON (cs_id_structure = csc_id_structure) '. |
' LEFT JOIN coel_structure_valorisation ON (cs_id_structure = csv_id_structure) '. |
( is_null($projet_id) ? '' : "WHERE cs_ce_projet = $projet_id "). |
'GROUP BY cs_id_structure '. |
'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby : 'cs_nom ASC').' '; |
$message_echec = "La requête a retourné aucun résultat."; |
138,6 → 140,7 |
' COUNT(cc_id_collection) AS collection_nbre '. |
'FROM coel_structure '. |
' LEFT JOIN coel_collection ON (cs_id_structure = cc_ce_structure) '. |
( is_null($projet_id) ? '' : "WHERE cs_ce_projet = $projet_id "). |
'GROUP BY cs_id_structure '; |
$message_echec = "La requête comptant le nombre de collection a retourné aucun résultat."; |
$collections_nbre = $this->executerRequete($requete, $message_echec); |
193,6 → 196,7 |
} |
private function getServiceCollectionExpertise() { |
$projet_id = $this->parametres['projet']; |
// Construction de la requête |
$requete = 'SELECT '.(($this->distinct) ? 'DISTINCT' : '').' '. |
206,6 → 210,7 |
'FROM coel_collection '. |
' LEFT JOIN coel_collection_botanique ON (cc_id_collection = ccb_id_collection) '. |
' LEFT JOIN coel_structure ON (cs_id_structure = cc_ce_structure) '. |
( is_null($projet_id) ? '' : "WHERE cc_ce_projet = $projet_id "). |
'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby : 'cc_nom ASC').' '; |
$message_echec = "La requête a retourné aucun résultat."; |
$collections = $this->executerRequete($requete, $message_echec); |
/trunk/jrest/services/CoelSyndication.php |
---|
130,6 → 130,9 |
} |
private function chargerListeDesFlux() { |
$this->setFlux('projet', 'Flux de syndication des projets', |
'Ce flux fournit des informations sur les mises à jour des projets saisis dans COEL.'); |
$this->setFlux('structure','Flux de syndication des institutions', |
'Ce flux fournit des informations sur les mises à jour des institutions saisies dans COEL.'); |
$this->setFlux('collection', 'Flux de syndication des Collections', |
146,6 → 149,34 |
return $this->flux; |
} |
private function getServiceProjet() { |
// Construction de la requête |
$requete = (($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' '. |
' h1.cmhl_id_historique_ligne, h1.cmhl_ce_table, h1.cmhl_cle_ligne, '. |
' h1.cmhl_enregistrement, '. |
' h1.cmhl_date_modification, h1.cmhl_ce_etat, h1.cmhl_ip, '. |
' h1.cmhl_cle_ligne AS guid, '. |
" 'prj' AS guid_type, ". |
' cp_fmt_nom_complet AS modifier_par '. |
'FROM coel_meta_historique_ligne AS h1 '. |
' LEFT JOIN coel_meta_historique_ligne AS h2 '. |
' ON (h1.cmhl_ce_table = h2.cmhl_ce_table '. |
' AND h1.cmhl_cle_ligne = h2.cmhl_cle_ligne '. |
' AND h1.cmhl_date_modification <= h2.cmhl_date_modification ) '. |
' LEFT JOIN coel_personne ON (h1.cmhl_ce_modifier_par = cp_id_personne) '. |
'WHERE h1.cmhl_ce_table = 115 %s '. |
'GROUP BY h1.cmhl_cle_ligne, h1.cmhl_date_modification, h1.cmhl_date_modification '. |
'HAVING COUNT(*) = %s '. |
'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby : 'h1.cmhl_date_modification DESC').' '. |
"LIMIT $this->start,$this->limit "; |
$elements = $this->executerRequeteHistorique($requete); |
// Création du contenu |
$contenu = $this->executerService('cpr_nom', $elements); |
return $contenu; |
} |
private function getServiceStructure() { |
$elements = array(); |
$elements = array_merge($elements, $this->getHistoriqueTableStructure(120)); |
/trunk/jrest/services/CoelPublicationAPersonne.php |
---|
36,7 → 36,7 |
// Construction de la requête |
$requete = (($this->distinct) ? 'SELECT DISTINCT ' : 'SELECT '). |
' cpu.*, cpuap.*, cp_id_personne, cp_prenom, cp_nom, cp_fmt_nom_complet, cp_code_postal, cp_truk_courriel, cp_ville '. |
' cpu.*, cpuap.*, cp_id_personne, cp_ce_projet, cp_prenom, cp_nom, cp_fmt_nom_complet, cp_code_postal, cp_truk_courriel, cp_ville '. |
'FROM coel_publication_a_personne AS cpuap '. |
' LEFT JOIN coel_meta_historique_ligne ON (cpuap_ce_meta = cmhl_id_historique_ligne) '. |
' LEFT JOIN coel_personne AS cp ON (cpuap_id_personne = cp_id_personne) '. |
/trunk/jrest/services/CoelRecherche.php |
---|
241,7 → 241,8 |
'p' => 'str', |
'pr' => 'int', |
'str-d' => 'frdepliste', |
'veg' => 'int' |
'veg' => 'int', |
'projets' => 'int' |
); |
return $this->pretraiterParametresUrl($param, $qs, $params_passes); |
} |
426,6 → 427,11 |
} |
} |
if (isset($p['projets'])) { |
$where[] = "cc_ce_projet IN ({$p['projets']})"; |
$where[] = "cs_ce_projet IN ({$p['projets']})"; |
} |
if (isset($p['sci'])) { |
$join[] = 'LEFT JOIN coel_structure_valorisation ON (cs_id_structure = csv_id_structure)'; |
/trunk/jrest/services/CoelPersonne.php |
---|
19,9 → 19,10 |
* Méthode appelée avec une requête de type GET. |
* |
* Liste des paramètres : |
* /Personne_Id/Nom_Complet/ |
* /Personne_Id/Projet_id/Nom_Complet/ |
* Attention : pour avoir toutes les personnes, il faut éxécuter : CoelPersonneListe |
* Pour avoir toutes les personnes dont le nom complet comment par NomComplet il faut éxécuter : CoelPersonneListe/* /NomComplet |
* Pour avoir toutes les personnes d'un projet, il faut éxécuter : CoelPersonneListe/* /projet_id |
* Pour avoir toutes les personnes d'un projet, dont le nom complet comment par NomComplet il faut éxécuter : CoelPersonneListe/* /projet_id/NomComplet |
*/ |
function getElement($param = array()) { |
// Initialisation de variables |
28,7 → 29,7 |
$info = array(); |
// Pré traitement des paramêtres |
$p = $this->traiterParametresUrl(array('id_personne', 'recherche'), $param); |
$p = $this->traiterParametresUrl(array('id_personne', 'ce_projet', 'recherche'), $param); |
// Construction de la requête |
$requete = (($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' cp.*, '. |
37,6 → 38,7 |
' LEFT JOIN coel_meta_historique_ligne ON (cp_ce_meta = cmhl_id_historique_ligne) '. |
((count($p) != 0) ? 'WHERE ' : ''). |
(isset($p['id_personne']) ? "AND cp_id_personne = {$p['id_personne']} " : ''). |
(isset($p['ce_projet']) ? "AND cp_ce_projet = {$p['ce_projet']} " : ''). |
(isset($p['recherche']) ? $this->construireWhereRecherche($p['recherche']) : ''). |
'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby : 'TRIM(cp_nom) ASC').' '; |
/trunk/jrest/services/CoelCollection.php |
---|
51,7 → 51,7 |
* Méthode par défaut pour garder la compatibilité avec Coel. |
* Appelée avec les paramêtres d'url suivant : |
* /CoelCollection/_/_/_ |
* ou les _ représentent dans l'ordre : id_collection ou nom |
* ou les _ représentent dans l'ordre : id_projet, id_collection ou nom |
* Si un des paramêtres est abscent, il prendre la valeur * |
*/ |
public function getElementParDefaut($param) { |
59,7 → 59,7 |
$info = array(); |
// Pré traitement des paramêtres |
$p = $this->traiterParametresUrl(array('id_collection', 'recherche'), $param); |
$p = $this->traiterParametresUrl(array('id_projet', 'id_collection', 'recherche'), $param); |
// Construction de la requête |
$requete = (($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' c.*, cb.*, '. |
72,6 → 72,7 |
' LEFT JOIN coel_collection AS ccm ON (c.cc_ce_mere = ccm.cc_id_collection) '. |
' LEFT JOIN coel_collection_botanique AS cb ON (c.cc_id_collection = ccb_id_collection) '. |
((count($p) != 0) ? 'WHERE ' : ''). |
((isset($p['id_projet'])) ? "AND c.cc_ce_projet = {$p['id_projet']} " : ''). |
((isset($p['id_collection'])) ? "AND c.cc_id_collection = {$p['id_collection']} " : ''). |
(isset($p['recherche']) ? $this->construireWhereRecherche($p['recherche']) : ''). |
'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby : 'c.cc_nom ASC').' '; |
322,11 → 323,11 |
$this->envoyer(); |
} |
private function ajouterGuid($id_collection) { |
private function ajouterGuid($abr_projet, $id_collection) { |
if ($id_collection !== false) { |
$table_guid = $this->tables[101]; |
$table_guid['champs_valeurs_id']['cc_id_collection'] = $id_collection; |
$table_guid['champs_valeurs_protege']['cc_guid'] = $this->bdd->quote(sprintf($this->config['coel']['guid'], 'coll'.$id_collection)); |
$table_guid['champs_valeurs_protege']['cc_guid'] = $this->bdd->quote(sprintf($this->config['coel']['guid'], $abr_projet, 'coll'.$id_collection)); |
$this->modifier($table_guid); |
} |
} |
/trunk/jrest/services/CoelStructure.php |
---|
45,7 → 45,7 |
if ($type == '*' || is_numeric($type)) { |
// Pré traitement des paramêtres |
$p = $this->traiterParametresUrl(array('id_structure', 'recherche'), $param); |
$p = $this->traiterParametresUrl(array('id_projet', 'id_structure', 'recherche'), $param); |
$info = $this->getElementParDefaut($p); |
} else { |
$methode = 'getElement'.$type; |
65,7 → 65,7 |
* Méthode par défaut pour garder la compatibilité avec Coel. |
* Appelée avec les paramêtres d'url suivant : |
* /CoelStructure/_/_/_ |
* ou les _ représentent dans l'ordre : id_structure et nom |
* ou les _ représentent dans l'ordre : id_projet, id_structure et nom |
* Si un des paramêtres est abscent, il prendre la valeur * |
*/ |
public function getElementParDefaut($p) { |
73,6 → 73,7 |
$info = array(); |
$whereClause = array(); |
if(isset($p['id_projet'])) $whereClause[] = "cs_ce_projet = {$p['id_projet']}"; |
if(isset($p['id_structure'])) $whereClause[] = "cs_id_structure = {$p['id_structure']}"; |
if(isset($p['recherche'])) { |
138,7 → 139,7 |
*/ |
public function getElementParZoneGeo($param) { |
// Pré traitement des paramêtres |
$p = $this->traiterParametresUrl(array('type'), $param); |
$p = $this->traiterParametresUrl(array('type', 'projets'), $param); |
if (!isset($p['type'])) { |
$this->messages[] = "Il est obligatoire d'indiquer type de recherche pour utiliser ce service."; |
return array(); |
152,6 → 153,7 |
' COUNT( cs_id_structure ) AS nbre '. |
'FROM coel_structure '. |
'WHERE cs_ce_truk_pays = 2654 '. |
(isset($p['projets']) ? " AND cs_ce_projet IN ({$p['projets']}) " : ''). |
'GROUP BY IF ( SUBSTRING( cs_code_postal FROM 1 FOR 2 ) >= 96, '. |
' SUBSTRING( cs_code_postal FROM 1 FOR 3 ), '. |
' SUBSTRING( cs_code_postal FROM 1 FOR 2 ) ) '. |
293,7 → 295,7 |
$this->mettreAJourAvecCle($id_utilisateur, $id_session, $table_id, $table); |
} |
} catch (PDOException $e) { |
$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage()); |
$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage(), $requete); |
} |
// Envoie sur la sortie standard |
398,11 → 400,11 |
return FALSE; |
} |
private function ajouterGuid($id_structure) { |
private function ajouterGuid($abr_projet, $id_structure) { |
if ($id_structure !== false) { |
$table_guid = $this->tables[120]; |
$table_guid['champs_valeurs_id']['cs_id_structure'] = $id_structure; |
$table_guid['champs_valeurs_protege']['cs_guid'] = $this->bdd->quote(sprintf($this->config['coel']['guid'], 'str'.$id_structure)); |
$table_guid['champs_valeurs_protege']['cs_guid'] = $this->bdd->quote(sprintf($this->config['coel']['guid'], $abr_projet, 'str'.$id_structure)); |
$this->modifier($table_guid); |
} |
} |
/trunk/jrest/services/CoelCommentaire.php |
---|
23,7 → 23,7 |
$info = array(); |
// Pré traitement des paramêtres |
$p = $this->traiterParametresUrl(array('id_commentaire', 'recherche'), $param); |
$p = $this->traiterParametresUrl(array('id_projet', 'id_commentaire', 'recherche'), $param); |
// Construction de la requête |
$requete = (($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' ccm.*, '. |
34,6 → 34,7 |
' LEFT JOIN coel_collection_a_commentaire AS ccac ON (ccm_id_commentaire = ccac_id_commentaire) '. |
' LEFT JOIN coel_collection ON (ccac_id_collection = cc_id_collection) '. |
((count($p) != 0) ? 'WHERE ' : ''). |
(isset($p['id_projet']) ? "AND ccm_ce_projet = {$p['id_projet']} " : ''). |
(isset($p['id_commentaire']) ? "AND ccm_id_commentaire = {$p['id_commentaire']} " : ''). |
(isset($p['recherche']) ? $this->construireWhereRecherche($p['recherche']) : ''). |
'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby : 'ccm_id_commentaire ASC').' '; |
/trunk/jrest/services/CoelProjet.php |
---|
New file |
0,0 → 1,249 |
<?php |
/** |
* Service fournissant la liste des projets et leurs informations |
* Encodage en entrée : utf8 |
* Encodage en sortie : utf8 |
* |
* @author Grégoire DUCHÉ <gregoire@tela-botanica.org> |
* @author Jean-Pascal MILECNT <jpm@tela-botanica.org> |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @version $Id$ |
* @copyright 2009 |
*/ |
class CoelProjet extends Coel { |
protected $tables = array(115 => array( 'nom' => 'coel_projet', |
'prefixe' => 'cpr', |
'id' => array('cpr_id_projet'))); |
/** |
* Méthode appelée avec une requête de type GET. |
*/ |
public function getElement($param = array()) { |
// Initialisation de variables |
$info = array(); |
// Pré traitement des paramêtres |
$p = $this->traiterParametresUrl(array('id_projet', 'recherche'), $param); |
// Nous avons un identifiant de projet, nous récupérons seulement les informations du projet donné |
$requete = (($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' * '. |
'FROM coel_projet '. |
((count($p) != 0) ? 'WHERE ' : ''). |
((isset($p['recherche'])) ? $this->construireWhereRecherche($p['recherche']) : ''). |
((isset($p['id_projet'])) ? "AND cpr_id_projet = {$p['id_projet']} " : ''). |
'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby : 'cpr_id_projet ASC').' '; |
$requete = str_replace('WHERE AND', 'WHERE', $requete); |
$requeteCount = $requete; |
$requete .= "LIMIT $this->start, $this->limit "; |
// Récupération des résultats |
try { |
// SPÉCIAL : |
// Lorsqu'on cherche un seul projet avec un id passé en paramêtre, nous devons renvoyer un objet |
$donnees = ($this->formatRetour == 'objet' && isset($p['id_projet'])) ? $this->bdd->query($requete)->fetch(PDO::FETCH_OBJ) : $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC); |
if ($donnees === false) { |
$this->messages[] = "La requête n'a retourné aucun résultat."; |
} |
$nbElements = $this->bdd->query($requeteCount)->rowCount(); |
$info['nbElements'] = $nbElements; |
$info['projets'] = $donnees; |
} catch (PDOException $e) { |
$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage()); |
} |
// Envoie sur la sortie standard |
$this->envoyer($info); |
} |
private function construireWhereRecherche($recherche) { |
$recherche = "AND ". |
"(". |
"cpr_nom LIKE {$recherche} OR ". |
"cpr_abreviation LIKE {$recherche} OR ". |
"cpr_resume LIKE {$recherche} OR ". |
"cpr_url LIKE {$recherche} OR ". |
"cpr_mot_cles LIKE {$recherche} ". |
")"; |
return $recherche; |
} |
/** |
* Méthode appelée pour ajouter un élément. |
*/ |
public function createElement($params) { |
// Identification de l'utilisateur |
list($id_utilisateur, $id_session) = $this->getIdentification($params); |
// Contrôle du non détournement de l'utilisateur |
if ($this->etreAutorise($id_utilisateur)) { |
try { |
// Vérification des tables à vraiment mettre à jour en fonction des données passées. |
$tables_a_modifier = $this->recupererTablesAModifier($params); |
reset($tables_a_modifier); |
$id_projet = null; |
while (list($table_id, $table) = each($tables_a_modifier)) { |
if (!is_null($table['champs'])) { |
if (!$this->avoirCleComplete($table)) { |
// Ajout des données à la table des données |
$id_projet = $this->ajouter($table); |
if ($id_projet !== false) { |
$table['champs_valeurs_id']['cpr_id_projet'] = $id_projet; |
$table['champs_valeurs_brut']['cpr_id_projet'] = $id_projet; |
// Historisation (Ajout des méta-données) |
$etat = 1; // Ajout |
$cle = $this->recupererCle($table); |
$id_projet = $cle; |
$info = $this->creerXmlHisto($table['champs_valeurs_brut']); |
$id_meta = $this->historiser($table_id, $cle, $info, $id_utilisateur, $etat, $id_session); |
// Liaison de la table des données à ses méta-données |
$champ_meta = "{$table['prefixe']}_ce_meta"; |
$table['champs_valeurs_protege'] = array($champ_meta => $id_meta); |
$this->modifier($table); |
} |
} else { |
$this->mettreAJourAvecCle($id_utilisateur, $id_session, $table_id, $table); |
} |
} |
} |
} catch (PDOException $e) { |
$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage(), $requete); |
} |
} else { |
$this->messages[] = "Il faut être identifié pour accéder à ce service"; |
} |
$this->envoyer((string)$id_projet); |
} |
/** |
* Méthode appelée pour mettre à jour un élément |
*/ |
public function updateElement($uid, $params) { |
// Vérification de la présence des id passés par l'url |
$id_projet = "0"; |
if (!isset($uid[0])) { |
$this->messages[] = "Identifiant de projet manquant. Vous ne devriez pas avoir accès à ce service."; |
} else { |
// Identification de l'utilisateur |
list($id_utilisateur, $id_session) = $this->getIdentification($params); |
// Contrôle du non détournement de l'utilisateur |
if ($this->etreAutorise($id_utilisateur)) { |
try { |
// Vérification des tables à vraiment mettre à jour en fonction des données passées. |
$tables_a_modifier = $this->recupererTablesAModifier($params); |
// Pour chaque table du module nous lançons si nécessaire l'historisation puis la mise à jour |
foreach ($tables_a_modifier as $table_id => $table) { |
$this->mettreAJourAvecCle($id_utilisateur, $id_session, $table_id, $table); |
} |
} catch (PDOException $e) { |
$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage(), $requete); |
} |
$id_projet = $uid[0] ; |
} |
} |
// Envoie sur la sortie standard |
$this->envoyer(); |
} |
/** |
* Méthode appelée pour supprimer un élément |
*/ |
public function deleteElement($uid) { |
// NOTES : un projet ne peut pas être supprimé si il possède des éléments liés. |
// Vérification de la présence des id passés par l'url |
if (!isset($uid[0]) || !isset($uid[1])) { |
$this->messages[] = "Identifiant de projet ou d'utilisateur manquant. Vous ne devriez pas avoir accès à ce service."; |
} else { |
// Identification de l'utilisateur |
list($id_utilisateur, $id_session) = $this->getIdentification($uid[0]); |
// Contrôle du non détournement de l'utilisateur |
if ($this->etreAutorise($id_utilisateur)) { |
// Récupération des id passés par l'url |
$identifiants = explode(',', rtrim($uid[1], ',')); |
try { |
if (count($identifiants) == 0) { |
$this->messages[] = "Aucun enregistrement n'a été supprimé."; |
} else { |
$idsProjetsNonSupprimes = ""; |
foreach ($identifiants as $id_projet) { |
$params = array('cpr_id_projet' => $id_projet); |
$tables_a_modifier = $this->recupererTablesAModifier($params); |
//Vérifions que le projet n'a aucune liaison |
$existeLiaisons = false; |
$i = 5; |
while (!$existeLiaisons && $i > 0) { |
switch ($i) { |
case 5 : |
$requete = "SELECT * FROM coel_collection WHERE cc_ce_projet = '{$id_projet}' "; |
break; |
case 4 : |
$requete = "SELECT * FROM coel_structure WHERE cs_ce_projet = '{$id_projet}' "; |
break; |
case 3 : |
$requete = "SELECT * FROM coel_commentaire WHERE ccm_ce_projet = '{$id_projet}' "; |
break; |
case 2 : |
$requete = "SELECT * FROM coel_publication WHERE cpu_ce_projet = '{$id_projet}' "; |
break; |
case 1 : |
$requete = "SELECT * FROM coel_personne WHERE cp_ce_projet = '{$id_projet}' "; |
break; |
} |
$resultat = $this->bdd->query($requete)->rowCount(); |
//$this->debug[] = $requete." => ".$resultat; |
if ($resultat > 0) { |
$existeLiaisons = true; |
} |
$i--; |
} |
if (!$existeLiaisons) { |
foreach ($tables_a_modifier as $table_id => $table) { |
if ($this->avoirEnregistrement($table)) { |
$resultat = $this->supprimer($table); |
if ($resultat === true) { |
// Historisation (Ajout des méta-données) |
$cle = $this->recupererCle($table); |
$this->historiser($table_id, $cle, 'NULL', $id_utilisateur, 3, $id_session); |
} |
} |
} |
} else { |
$idsProjetsNonSupprimes .= $id_projet.","; |
} |
} |
} |
} catch (PDOException $e) { |
$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage(), $requete); |
} |
} |
} |
$info = null; |
if ($idsProjetsNonSupprimes != "") { |
$info = array(); |
$info[0] = $idsProjetsNonSupprimes; |
} |
// Envoie sur la sortie standard |
$this->envoyer($info); |
} |
} |
?> |
/trunk/jrest/services/CoelCollectionAPersonne.php |
---|
32,7 → 32,7 |
$requete = (($this->distinct) ? 'SELECT DISTINCT ' : 'SELECT '). |
' ccap.*, '. |
(isset($p['id_personne']) ? ' cc_nom, ' : ''). |
' cp_fmt_nom_complet, cp_prenom, cp_nom, cp_naissance_date, cp_naissance_lieu, cp_ce_deces, cp_deces_date, cp_deces_lieu '. |
' cp_ce_projet, cp_fmt_nom_complet, cp_prenom, cp_nom, cp_naissance_date, cp_naissance_lieu, cp_ce_deces, cp_deces_date, cp_deces_lieu '. |
'FROM coel_collection_a_personne AS ccap '. |
' LEFT JOIN coel_meta_historique_ligne ON (ccap_ce_meta = cmhl_id_historique_ligne) '. |
' LEFT JOIN coel_personne ON (ccap_id_personne = cp_id_personne) '. |
/trunk/jrest/services/CoelPublication.php |
---|
24,7 → 24,7 |
$info = array(); |
// Pré traitement des paramêtres |
$p = $this->traiterParametresUrl(array('id_publication', 'recherche'), $param); |
$p = $this->traiterParametresUrl(array('id_publication', 'id_projet', 'recherche'), $param); |
// Construction de la requête |
$requete = (($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' cp.*, cmhl.*, cs_nom '. |
32,6 → 32,7 |
' LEFT JOIN coel_meta_historique_ligne AS cmhl ON (cpu_ce_meta = cmhl_id_historique_ligne) '. |
' LEFT JOIN coel_structure ON (cpu_ce_truk_editeur = cs_id_structure) '. |
((count($p) != 0) ? 'WHERE ' : ''). |
(isset($p['id_projet']) ? "AND cpu_ce_projet = {$p['id_projet']} " : ''). |
(isset($p['id_publication']) ? "AND cpu_id_publication = {$p['id_publication']} " : ''). |
(isset($p['recherche']) ? $this->construireWhereRecherche($p['recherche']) : ''). |
'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby : 'cpu_id_publication ASC').' '; |
/trunk/jrest/services/CoelUtilisateur.php |
---|
273,6 → 273,7 |
private function verifierPresenceUtilisateur($id) { |
$present = false; |
$cp_ce_projet = $this->config['coel']['idProjetUtilisateurs']; |
$requete = 'SELECT COUNT(cp_id_personne) AS nbre '. |
'FROM coel_personne '. |
"WHERE cp_ce_annuaire = {$this->bdd->quote($id)} ". |
295,6 → 296,7 |
} |
private function recupererLicenceUtilisateur($id) { |
$cp_ce_projet = $this->config['coel']['idProjetUtilisateurs']; |
$requete = 'SELECT cp_mark_licence '. |
'FROM coel_personne '. |
"WHERE cp_ce_annuaire = {$this->bdd->quote($id)} ". |
314,6 → 316,7 |
private function mettreAJourMotDePasse($login, $mot_de_passe_md5, $mot_de_passe_sha1) { |
try { |
$cp_ce_projet = $this->config['coel']['idProjetUtilisateurs']; |
$requete = 'UPDATE coel_personne '. |
"SET cp_mot_de_passe = '$mot_de_passe_sha1' ". |
"WHERE cp_login = '$login' ". |
330,6 → 333,7 |
private function mettreAJourUtilisateur($login, $mot_de_passe_sha1, $infos) { |
try { |
$cp_ce_projet = $this->config['coel']['idProjetUtilisateurs']; |
$cp_fmt_nom_complet = $infos['prenom'].' '.$infos['nom']; |
$requete = 'UPDATE coel_personne '. |
"SET cp_id_personne = '{$infos['id']}', ". |
354,12 → 358,13 |
// Construction de la requête d'ajout |
// Notes : pour rester compatibles avec l'annuaire de Tela, les utilisateurs sont ajoutés directement avec l'id |
// de l'annuaire Tela. Dans CoelPersonne, les personnes qui ne sont pas utilisateur sont ajoutés avec un id supérieur à 100 000 |
$cp_ce_projet = $this->config['coel']['idProjetUtilisateurs']; |
$cp_fmt_nom_complet = $infos['prenom'].' '.$infos['nom']; |
$cp_mark_licence = '0'; |
$requete = 'INSERT INTO coel_personne '. |
' (cp_id_personne, cp_fmt_nom_complet, cp_prenom, cp_nom, cp_code_postal, '. |
' (cp_id_personne, cp_ce_projet, cp_fmt_nom_complet, cp_prenom, cp_nom, cp_code_postal, '. |
' cp_ville, cp_truk_courriel, cp_login, cp_mot_de_passe, cp_ce_annuaire, cp_mark_licence) '. |
"VALUES ('{$infos['id']}', '$cp_fmt_nom_complet', '{$infos['prenom']}', '{$infos['nom']}', ". |
"VALUES ('{$infos['id']}', '$cp_ce_projet', '$cp_fmt_nom_complet', '{$infos['prenom']}', '{$infos['nom']}', ". |
"'{$infos['code_postal']}', '{$infos['ville']}', '{$infos['courriel']}', '{$infos['courriel']}', '".$mot_de_passe_sha1."', ". |
"'{$infos['id']}', $cp_mark_licence) "; |
//$this->debug[] = $requete; |
416,6 → 421,7 |
private function accepterLicence($login) { |
$sortie = false; |
try { |
$cp_ce_projet = $this->config['coel']['idProjetUtilisateurs']; |
$requete = 'UPDATE coel_personne '. |
'SET cp_mark_licence = 1 '. |
"WHERE cp_login = {$this->bdd->quote($login)} "; |
/trunk/jrest/services/CoelStructureAPersonne.php |
---|
35,7 → 35,7 |
$requete = (($this->distinct) ? 'SELECT DISTINCT ' : 'SELECT '). |
' csap.*, '. |
(isset($p['id_personne']) ? ' cs_nom, ' : ''). |
' cp_fmt_nom_complet, cp_prenom, cp_nom, cp_truk_telephone, cp_truk_courriel, cp_ce_truk_specialite '. |
' cp_ce_projet, cp_fmt_nom_complet, cp_prenom, cp_nom, cp_truk_telephone, cp_truk_courriel, cp_ce_truk_specialite '. |
'FROM coel_structure_a_personne AS csap '. |
' LEFT JOIN coel_meta_historique_ligne ON (csap_ce_meta = cmhl_id_historique_ligne) '. |
' LEFT JOIN coel_personne ON (csap_id_personne = cp_id_personne) '. |