/trunk/jrest/services/CelWidgetExport.php |
---|
63,6 → 63,8 |
private $format = 'csv'; |
public $id_utilisateur = null; |
public $export_prive = false; |
// un cache, initialisé par certaines fonctions de préchargement, à la manière |
// de ce qui est fait par FormateurGroupeColonne |
91,9 → 93,11 |
private function getCalcul() { |
$criteres = $this->traiterParametresAutorises($_GET); |
$criteres['transmission'] = 1; |
if($this->doitEtPeutExporterObsPrivees($criteres)) { |
// Définit si l'on exporte les obs privées ainsi que les champs étendus privés |
$this->export_prive = $this->doitEtPeutExporterObsPrivees($criteres); |
if($this->export_prive) { |
unset($criteres['transmission']); |
$this->id_utilisateur = $criteres['id_utilisateur']; |
} |
155,7 → 159,9 |
if(!in_array($this->format, array('pdf','csv','xls'))) die('erreur: format invalide'); |
$criteres['transmission'] = 1; |
if($this->doitEtPeutExporterObsPrivees($criteres)) { |
// Définit si l'on exporte les obs privées ainsi que les champs étendus privés |
$this->export_prive = $this->doitEtPeutExporterObsPrivees($criteres); |
if($this->export_prive) { |
unset($criteres['transmission']); |
$this->id_utilisateur = $criteres['ce_utilisateur']; |
} |
/trunk/jrest/services/CelSyndicationObservation.php |
---|
425,6 → 425,8 |
$champs_etendus = $gestion_champs_etendus->consulterParLots($ids_observations); |
if(!empty($champs_etendus)) { |
$this->catalogue_cles_labels_champs_etendus = $gestion_champs_etendus->consulterCatalogueChampsEtendusPredefinis(true); |
// afin de simplifier les erreurs de majuscules et minuscules |
$this->catalogue_cles_labels_champs_etendus = array_change_key_case($this->catalogue_cles_labels_champs_etendus); |
} |
$this->auteurs = $this->creerAuteurs($identifiants); |
foreach ($elements as $element) { |
545,21 → 547,38 |
private function creerDescriptionChampsEtendus($obs, $item) { |
$champs_etendus = ''; |
foreach($obs['obs_etendue'] as $cle => &$champ) { |
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 = trim($label); |
$label = $label; |
if($this->doitAfficherChampEtendu($champ->cle, $this->catalogue_cles_labels_champs_etendus)) { |
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 = trim($label); |
$label = $label; |
} |
$champs_etendus .= '<li>'.$this->nePasInterpreterXml($label.' : '.$champ->valeur).' </li>'; |
} |
$champs_etendus .= '<li>'.$this->nePasInterpreterXml($label.' : '.$champ->valeur).' </li>'; |
} |
if($champs_etendus != '') { |
$champs_etendus = '<li> Champs supplémentaires : <ul>'.$champs_etendus.'</ul></li>'; |
} |
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; |
} |
private function creerCategorie($element) { |
$categorie = ''; |
/trunk/jrest/lib/GestionChampsEtendus.php |
---|
245,7 → 245,7 |
*/ |
public function consulterGroupesChampsEtendusPredefinis() { |
$groupes = array(); |
$requete = "SELECT cc.cle as cle_groupe, cc.label as nom_groupe, ccc.cle as cle_champ, ccc.label as label_champ, ccc.invisible ". |
$requete = "SELECT cc.cle as cle_groupe, cc.label as nom_groupe, ccc.cle as cle_champ, ccc.label as label_champ, ccc.invisible, ccc.prive ". |
"FROM `cel_catalogue_champs_etendus` cc ". |
"INNER JOIN cel_catalogue_champs_etendus_liaison cl ON cc.cle = cl.groupe ". |
"INNER JOIN cel_catalogue_champs_etendus ccc ON ccc.cle = cl.champ"; |
278,7 → 278,9 |
$infos_groupe['champs'][] = array( |
'cle' => $groupe_champ['cle_champ'], |
'label' => $groupe_champ['label_champ'], |
'options' => array('invisible' => $groupe_champ['invisible']) |
'options' => array('invisible' => $groupe_champ['invisible'], |
'prive' => $groupe_champ['prive'] |
) |
); |
} |
296,7 → 298,7 |
* Renvoie le catalogue des champs étendus |
*/ |
public function consulterCatalogueChampsEtendusPredefinis($ordonner_par_cle = false) { |
$requete = "SELECT cle, label, invisible ". |
$requete = "SELECT cle, label, invisible, prive ". |
"FROM cel_catalogue_champs_etendus cc "; |
$catalogue = Cel::db()->executerRequete($requete); |
306,7 → 308,9 |
$champ_fmt = array( |
'cle' => $champ['cle'], |
'label' => $champ['label'], |
'options' => array('invisible' => $champ['invisible']) |
'options' => array('invisible' => $champ['invisible'], |
'prive' => $champ['prive'] |
) |
); |
if($ordonner_par_cle) { |
$infos_champs[$champ_fmt['cle']] = $champ_fmt; |
326,6 → 330,8 |
* @return string la clé correspondante |
*/ |
public function transformerLabelEnCle($label) { |
//TODO: cette fonction est elle encore pertinente |
// maintenant que la notion de label est supprimée ? |
$cle = strtolower(trim($label)); |
// Suppression des mots inutiles |
/trunk/jrest/lib/FormateurGroupeColonne.php |
---|
742,10 → 742,32 |
// Quand les données sont prêtes, on les fusionne |
$ligne = array_merge($ligne, $donneesBF); |
} |
static function champsEtendus_preload($cel, $obsids) { |
$gestion_champs_etendus = new GestionChampsEtendus($cel->config, 'obs'); |
$gestion_champs_etendus = new GestionChampsEtendus($cel->config, 'obs'); |
$colonnes_champs_supp_par_obs = $gestion_champs_etendus->consulterClesParLots($obsids); |
// Supprime les champs étendus considérés comme privés dans le cas de l'export public en chargeant |
// le catalogue et en excluant ceux qui sont explicitement privés |
if(!$cel->export_prive) { |
$indices_a_supprimer = array(); |
$catalogue_champs_etendus = $gestion_champs_etendus->consulterCatalogueChampsEtendusPredefinis(); |
foreach($catalogue_champs_etendus as $champ_catalogue) { |
if($champ_catalogue['options']['prive'] == 1) { |
// supprime les ":" suivis de nombres dans le cas de champs étendus multiples |
// (ils sont de la forme maCleDeChamp:1, maCleDeChamp:2 etc...) |
$entrees = preg_grep("/:\d+$/", $colonnes_champs_supp_par_obs); |
$indices_a_supprimer = array_merge($indices_a_supprimer, array_keys($entrees)); |
} |
} |
// les champs étendus sont renvoyés dans l'export suivant les colonnes présentes dans ce tableau |
// les éliminer de la liste des colonnes suffit à les faire ignorer par l'export |
foreach($indices_a_supprimer as $indice_supp) { |
unset($colonnes_champs_supp_par_obs[$indice_supp]); |
} |
} |
// ces deux lignes réordonnent l'ordre des colonnes des champs étendus en fonction de l'ordre (très spécifique) |
// de self::$ordre_champ_etendus_Florileges, les champs non-mentionnés sont ajoutés à la fin. |
$colonnes_champs_supp_par_obs = self::sortArrayByArray(array_flip($colonnes_champs_supp_par_obs), |