* @return string
*/
function compositions_determiner($type, $id, $serveur = '', $etoile = false) {
+ // le compilateur produi(sait) des occurences de compositions_determiner('',...)
+ // qui provoquent un appel a $trouver_table('')
+ // qui vide le cache des descriptions SQL
+ // evitons ce cas
+ if (!$type) return '';
+
static $composition = array();
$id = intval($id);
$select = 'composition';
$heritage = compositions_recuperer_heritage($type);
- if (isset($desc['field'][$heritage['nom_id_parent']])) {
+ if ($heritage and isset($desc['field'][$heritage['nom_id_parent']])) {
$select .= ', '.$heritage['nom_id_parent'].' as id_parent';
}
if (strlen($compo_parent) and is_null($infos)) {
$infos = compositions_lister_disponibles('');
}
- } while ($id_parent = $row['id_parent']
+ } while (
+ isset($row['id_parent'])
+ and $id_parent = $row['id_parent']
and
- (!strlen($compo_parent) or !isset($infos[$type_parent][$compo_parent]['branche'][$type])));
+ (!strlen($compo_parent) or !isset($infos[$type_parent][$compo_parent]['branche'][$type]))
+ );
if (strlen($compo_parent) and isset($infos[$type_parent][$compo_parent]['branche'][$type])) {
return $infos[$type_parent][$compo_parent]['branche'][$type];
*/
function balise_COMPOSITION_dist($p) {
$_composition = '';
+ $_objet = '';
if ($_objet = interprete_argument_balise(1, $p)) {
$_id_objet = interprete_argument_balise(2, $p);
} else {
$_composition = champ_sql('composition', $p);
- $_id_objet = champ_sql($p->boucles[$p->id_boucle]->primary, $p);
- $_objet = "objet_type('" . $p->boucles[$p->id_boucle]->id_table . "')";
+ if($p->id_boucle) {
+ $_id_objet = champ_sql($p->boucles[$p->id_boucle]->primary, $p);
+ $_objet = "objet_type('" . $p->boucles[$p->id_boucle]->id_table . "')";
+ }
}
// si on veut le champ brut, et qu'on l'a sous la main, inutile d'invoquer toute la machinerie
- if ($_composition and $p->etoile) {
+ if ($_composition and (!$_objet or $p->etoile)) {
$p->code = $_composition;
} else {
$connect = $p->boucles[$p->id_boucle]->sql_serveur;