1,14 → 1,12 |
<?php |
/** |
* Service fournissant la liste des structures et leurs informations. |
* Encodage en entrée : utf8 |
* Encodage en sortie : utf8 |
* |
* @author Raphaël Droz <raphael@tela-botanica.org> |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @Copyright (c) 2009, 2013 Tela Botanica (accueil@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 CoelStructure extends Coel { |
|
16,11 → 14,12 |
'cs_nbre_personne', |
'csc_mark_formation', 'csc_mark_formation_interet', |
/*'csc_mark_collection_commune',*/ 'csc_mark_acces_controle', 'csc_mark_restauration', 'csc_mark_traitement', |
'csc_mark_acquisition_collection', 'csc_mark_acquisition_echantillon' |
'csc_mark_acquisition_collection', 'csc_mark_acquisition_echantillon', |
'cs_latitude', 'cs_longitude', |
); |
|
// ATTENTION : tjrs garder la table principale en premier, puis mettre les tables spécialisées. |
protected $tables = array( 120 => array( |
static $tables = array( 120 => array( |
'nom' => 'coel_structure', |
'prefixe' => 'cs', |
'id' => array('cs_id_structure')), |
138,14 → 137,13 |
* Si un des paramêtres est abscent, il prendre la valeur * |
*/ |
public function getElementParZoneGeo($param) { |
// Initialisation des variables |
$info = array(); |
|
// Pré traitement des paramêtres |
$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."; |
} else { |
return array(); |
} |
|
// Construction de la requête |
$requete = (($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' '. |
' IF ( SUBSTRING( cs_code_postal FROM 1 FOR 2 ) >= 96, '. |
159,20 → 157,23 |
' SUBSTRING( cs_code_postal FROM 1 FOR 3 ), '. |
' SUBSTRING( cs_code_postal FROM 1 FOR 2 ) ) '. |
'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby : 'id ASC').' '; |
|
// Récupération des résultats |
try { |
$donnees = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC); |
} catch (PDOException $e) { |
$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage()); |
} |
|
if ($donnees === false) { |
$this->messages[] = "La requête a retourné aucun résultat."; |
} else { |
return array(); |
} |
|
$info = array(); |
foreach ($donnees as $donnee) { |
$info[$donnee['id']] = $donnee['nbre']; |
} |
} |
} catch (PDOException $e) { |
$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage()); |
} |
} |
return $info; |
} |
|
198,18 → 199,11 |
return; |
} |
try { |
// Vérification des tables à vraiment mettre à jour en fonction des données passées. |
if( (! @$params['cs_latitude'] || ! @$params['cs_longitude']) && |
(@$params['cs_adresse_01'] || @$params['cs_code_postal'] || @$params['cs_ville']) ) { |
$lonlat = array(); |
if(Coel::coordGuess(Coel::addrReStruct($params), $lonlat)) { |
$params['cs_latitude'] = $lonlat['lat']; |
$params['cs_longitude'] = $lonlat['lon']; |
} |
} |
$form_needs_refresh = self::callNominatim($params); |
|
self::NULLifNotNum($params, self::$optional_bool_fields); |
|
// Vérification des tables à vraiment mettre à jour en fonction des données passées. |
$tables_a_modifier = $this->recupererTablesAModifier($params); |
reset($tables_a_modifier); |
|
275,16 → 269,7 |
return; |
} |
try { |
$form_needs_refresh = FALSE; |
if( (! @$params['cs_latitude'] || ! @$params['cs_longitude']) && |
(@$params['cs_adresse_01'] || @$params['cs_code_postal'] || @$params['cs_ville']) ) { |
$lonlat = array(); |
if(Coel::coordGuess(Coel::addrReStruct($params), $lonlat)) { |
$params['cs_latitude'] = $lonlat['lat']; |
$params['cs_longitude'] = $lonlat['lon']; |
$form_needs_refresh = TRUE; |
} |
} |
$form_needs_refresh = self::callNominatim($params); |
|
self::NULLifNotNum($params, self::$optional_bool_fields); |
|
319,29 → 304,42 |
// Vérification de la présence des id passés par l'url |
if (!isset($uid[0]) || !isset($uid[1])) { |
$this->messages[] = "Identifiant de structure ou d'utilisateur manquant. Vous ne devriez pas avoir accès à ce service."; |
} else { |
$this->envoyer(); |
return; |
} |
|
// 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)) { |
$this->envoyer(); |
return; |
} |
|
// 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 { |
$this->envoyer(); |
return; |
} |
|
try { |
foreach ($identifiants as $id_structure) { |
// Vérification que la structure ne possède pas de collections liées |
if ($this->verifierPresenceCollection($id_structure) === false) { |
if (self::verifierPresenceCollection($this->bdd, $id_structure)) { |
$this->messages[] = "La structure '$id_structure' ne peut pas être supprimée car elle possède des collections liées."; |
continue; |
} |
|
$params = array('cs_id_structure' => $id_structure, 'csc_id_structure' => $id_structure, 'csv_id_structure' => $id_structure); |
$tables_a_modifier = $this->recupererTablesAModifier($params); |
|
foreach ($tables_a_modifier as $table_id => $table) { |
if ($this->avoirEnregistrement($table)) { |
$resultat = $this->supprimer($table); |
if ($resultat === true) { |
if (! $this->avoirEnregistrement($table)) continue; |
|
if ($this->supprimer($table) === true) { |
// Historisation (Ajout des méta-données) |
$cle = $this->recupererCle($table); |
$this->historiser($table_id, $cle, 'NULL', $id_utilisateur, 3, $id_session); |
348,40 → 346,38 |
} |
} |
} |
} else { |
$this->messages[] = "La structure '$id_structure' ne peut pas être supprimée car elle possède des collections liées."; |
} |
} |
} |
} catch (PDOException $e) { |
$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage(), $requete); |
} |
} |
} |
|
// Envoie sur la sortie standard |
$this->envoyer(); |
} |
|
private function verifierPresenceCollection($id_structure) { |
$requete = 'SELECT COUNT(cc_id_collection) AS nbre_collection '. |
'FROM coel_collection '. |
"WHERE cc_ce_structure = '$id_structure' ". |
'GROUP BY cc_ce_structure '; |
|
static function verifierPresenceCollection($db, $id_structure) { |
// Vérification que la structure ne possède pas de collections liées |
$nbre_collection = $this->bdd->query($requete)->fetchColumn(); |
return ($db->query(sprintf( |
'SELECT COUNT(cc_id_collection) AS nbre_collection FROM coel_collection ' . |
' WHERE cc_ce_structure = %d GROUP BY cc_ce_structure ', |
$id_structure))->fetchColumn() != 0); |
} |
|
$presence = false; |
if ($nbre_collection != 0) { |
$presence = true; |
static function callNominatim(&$params) { |
if ( (! @$params['cs_latitude'] || ! @$params['cs_longitude']) && |
(@$params['cs_adresse_01'] || @$params['cs_code_postal'] || @$params['cs_ville']) ) { |
$lonlat = array(); |
if(Coel::coordGuess(Coel::addrReStruct($params), $lonlat)) { |
$params['cs_latitude'] = $lonlat['lat']; |
$params['cs_longitude'] = $lonlat['lon']; |
$form_needs_refresh = TRUE; |
} |
return $presence; |
} |
return FALSE; |
} |
|
private function ajouterGuid($abr_projet, $id_structure) { |
if ($id_structure !== false) { |
$table_guid = $this->tables[120]; |
$table_guid = self::$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'], $abr_projet, 'str'.$id_structure)); |
$this->modifier($table_guid); |
388,4 → 384,3 |
} |
} |
} |
?> |