/trunk/jrest/bibliotheque/GestionChampsEtendus2.php |
---|
43,7 → 43,7 |
$requete = 'SELECT COUNT(*) >= 1 AS existe '. |
"FROM {$this->table_champs_etendus} ". |
"WHERE {$this->champ_id} = $id ". |
" AND cle = $cle ". |
" AND cle = $ce.field_id ". |
' -- '.__FILE__.':'.__LINE__;; |
$resultat = Cel::db()->requeter($requete); |
69,30 → 69,13 |
} |
/** |
* Ajoute un champ étendu. |
* Si la clé existe déjà, seule valeur du champ est mise à jour |
* A créer voir ajouterParProjet |
* |
* @param ChampEtendu $champ_etendu |
* @return bool true si l'ajout a eu lieu |
* |
* |
* |
*/ |
public function ajouter($parametres) { |
$id = Cel::db()->proteger($champ_etendu->id); |
$cle = Cel::db()->proteger($champ_etendu->cle); |
$valeur = Cel::db()->proteger($champ_etendu->valeur); |
$requete = "INSERT INTO {$this->table_champs_etendus} ". |
"( {$this->champ_id}, cle, valeur) ". |
"VALUES ($id, $cle, $valeur) ". |
"ON DUPLICATE KEY UPDATE valeur = VALUES(valeur) ". |
' -- '.__FILE__.':'.__LINE__; |
// la partie on duplicate key est spécifique mysql mais il sera facile de s'en passer le jour |
// où l'on change de sgbd |
$ajout = Cel::db()->executer($requete); |
return ($ajout !== false); |
return false; |
} |
/** |
202,8 → 185,87 |
return $groupes_champs; |
} |
/** |
* Formate de la même façon que l'ancien service les données de consulterProjetChampsEtendus |
*/ |
public function consulterGroupesChampsEtendusPredefinis($groupe = "", $langue = 'fr') { |
$groupes = array(); |
$groupes_champs = $this->consulterProjetChampsEtendus($groupe, $langue); |
$cle_groupe = ''; |
$infos_groupe = null; |
foreach ($groupes_champs as $groupe_champ) { |
// les champs sont ordonnés par groupe, ce qui permet de les assembler |
// séquentiellement en créeant un nouveau groupe lorsque la clé |
// de groupe du champ actuel est différénte de la précédente |
if ($cle_groupe != $groupe_champ['ce.`project`']) { |
if($infos_groupe != null) { |
$groupes[] = $infos_groupe; |
} |
$infos_groupe = array(); |
$cle_groupe = $groupe_champ['ce.`project`']; |
} |
if (empty($infos_groupe)) { |
$infos_groupe = array( |
'cle' => $groupe_champ['ce.`project`'], |
'nom' => $groupe_champ['ce.`project`'], |
'champs' => array() |
); |
} |
$infos_groupe['champs'][] = array( |
'cle' => $groupe_champ['ce.field_id'], |
'label' => $groupe_champ['cet.`label`'], |
'type' => $groupe_champ['type_champ'], |
'valeur' => $groupe_champ['valeur_champ'], |
'options' => array( |
'invisible' => $groupe_champ['invisible'], |
'prive' => $groupe_champ['prive']) |
); |
} |
// Ajout du dernier groupe, qui serait ignoré sinon, étant donné que l'ajout |
// au tableau se fait au début de la boucle |
//TODO: voir si on ne peut pas simplifier ça |
if (!empty($infos_groupe)) { |
$groupes[] = $infos_groupe; |
} |
return $groupes; |
} |
/** |
* Renvoie le catalogue des champs étendus |
*/ |
public function consulterCatalogueChampsEtendusPredefinis($ordonner_par_cle = false, $groupe = "") { |
$requete = 'SELECT cle, label, invisible, prive '. |
'FROM cel_catalogue_champs_etendus AS cc '; |
if ($groupe !== "") $requete .= " WHERE groupe = ".$groupe; |
$requete .= ' -- '.__FILE__.':'.__LINE__; |
$catalogue = Cel::db()->executerRequete($requete); |
$infos_champs = array(); |
if ($catalogue != false) { |
foreach ($catalogue as $champ) { |
$champ_fmt = array( |
'cle' => $champ['cle'], |
'label' => $champ['label'], |
'options' => array( |
'invisible' => $champ['invisible'], |
'prive' => $champ['prive']) |
); |
if ($ordonner_par_cle) { |
$infos_champs[$champ_fmt['cle']] = $champ_fmt; |
} else { |
$infos_champs[] = $champ_fmt; |
} |
} |
} |
return $infos_champs; |
} |
/** |
* Transforme un label en clé. |
* Supprime tous les accents et caractères spéciaux. |
/trunk/jrest/bibliotheque/GestionChampsEtendus.php |
---|
233,9 → 233,8 |
$cles_fmt = array(); |
if(!empty($ids_elements_lies)) { |
$ids = $this->protegerTableau($ids_elements_lies); |
$requete = 'SELECT extended_field_id as cle '. |
"FROM {$this->table_champs_etendus} ". |
"WHERE {$this->champ_id} IN (".implode(',',$ids).") ". |
$requete = "SELECT `field_id`as cle FROM `extended_field` f join extended_field_occurrence o |
on f.`id` = extended_field_id WHERE `occurrence_id` in (".implode(',',$ids).") ". |
' -- '.__FILE__.':'.__LINE__; |
$cles = Cel::db()->requeter($requete); |
$i = 0; |
246,95 → 245,9 |
return array_values(array_flip($cles_fmt)); |
} |
/** |
* Renvoie la liste des groupes de champs étendus |
*/ |
public function consulterGroupesChampsEtendusPredefinis($groupe = "", $langue = 'fr') { |
$groupes = array(); |
$requete = "SELECT cc.extended_field_id as cle_groupe, cc.label as nom_groupe, ccc.cle as cle_champ, ccc.label as label_champ, ccc.type as type_champ, ccc.valeur as valeur_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 ". |
"WHERE cc.langue = '".$langue."' "; |
if ($groupe !== "") $requete .= " AND cl.groupe = '".$groupe."'"; |
$requete .= ' -- '.__FILE__.':'.__LINE__; |
$groupes_champs = Cel::db()->executerRequete($requete); |
$cle_groupe = ''; |
$infos_groupe = null; |
foreach ($groupes_champs as $groupe_champ) { |
// les champs sont ordonnés par groupe, ce qui permet de les assembler |
// séquentiellement en créeant un nouveau groupe lorsque la clé |
// de groupe du champ actuel est différénte de la précédente |
if ($cle_groupe != $groupe_champ['cle_groupe']) { |
if($infos_groupe != null) { |
$groupes[] = $infos_groupe; |
} |
$infos_groupe = array(); |
$cle_groupe = $groupe_champ['cle_groupe']; |
} |
if (empty($infos_groupe)) { |
$infos_groupe = array( |
'cle' => $groupe_champ['cle_groupe'], |
'nom' => $groupe_champ['nom_groupe'], |
'champs' => array() |
); |
} |
$infos_groupe['champs'][] = array( |
'cle' => $groupe_champ['cle_champ'], |
'label' => $groupe_champ['label_champ'], |
'type' => $groupe_champ['type_champ'], |
'valeur' => $groupe_champ['valeur_champ'], |
'options' => array( |
'invisible' => $groupe_champ['invisible'], |
'prive' => $groupe_champ['prive']) |
); |
} |
// Ajout du dernier groupe, qui serait ignoré sinon, étant donné que l'ajout |
// au tableau se fait au début de la boucle |
//TODO: voir si on ne peut pas simplifier ça |
if (!empty($infos_groupe)) { |
$groupes[] = $infos_groupe; |
} |
return $groupes; |
} |
/** |
* Renvoie le catalogue des champs étendus |
*/ |
public function consulterCatalogueChampsEtendusPredefinis($ordonner_par_cle = false, $groupe = "") { |
$requete = 'SELECT cle, label, invisible, prive '. |
'FROM cel_catalogue_champs_etendus AS cc '; |
if ($groupe !== "") $requete .= " WHERE groupe = ".$groupe; |
$requete .= ' -- '.__FILE__.':'.__LINE__; |
$catalogue = Cel::db()->executerRequete($requete); |
$infos_champs = array(); |
if ($catalogue != false) { |
foreach ($catalogue as $champ) { |
$champ_fmt = array( |
'cle' => $champ['cle'], |
'label' => $champ['label'], |
'options' => array( |
'invisible' => $champ['invisible'], |
'prive' => $champ['prive']) |
); |
if ($ordonner_par_cle) { |
$infos_champs[$champ_fmt['cle']] = $champ_fmt; |
} else { |
$infos_champs[] = $champ_fmt; |
} |
} |
} |
return $infos_champs; |
} |
/** |
* Transforme un label en clé. |
* Supprime tous les accents et caractères spéciaux. |
* Accole les mots pour créer un chatmot. |
/trunk/jrest/bibliotheque/FormateurGroupeColonne.php |
---|
799,8 → 799,11 |
} |
static function champsEtendus_preload($cel, $obsids) { |
$gestion_champs_etendus = new GestionChampsEtendus($cel->config); |
$colonnes_champs_supp_par_obs = $gestion_champs_etendus->consulterClesParLots($obsids); |
// obs étendues |
$gestion_obs_etendus = new GestionChampsEtendus($cel->config); |
// champs étendus |
$gestion_obs_etendus = new GestionChampsEtendus2($cel->config); |
$colonnes_champs_supp_par_obs = $gestion_obs_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 |
833,7 → 836,7 |
// TODO: optimize, 1 seule requête |
if(!$colonnes_champs_supp_par_obs) return Array('header' => array(), 'data' => array()); |
$champs_supp_par_obs = $gestion_champs_etendus->consulterParLots($obsids); |
$champs_supp_par_obs = $gestion_obs_etendus->consulterParLots($obsids); |
self::$cache['champsEtendus']['header'] = self::champsEtendus_prefixHeader($colonnes_champs_supp_par_obs); |