/** * Pipeline styliser pour definir le fond d'un objet en fonction de sa composition * * @param array $flux * @return array */ function compositions_styliser($flux){ // en contexte Z, c'est Z ou Z-core qui stylise (on ne n'en occupe donc pas ici) if(!defined('_DIR_PLUGIN_Z') AND !defined('_DIR_PLUGIN_ZCORE')){ include_spip('compositions_fonctions'); if (compositions_styliser_auto()){ $type = $flux['args']['fond']; // on fait l'approximation fond=type // si le type n'est pas l'objet d'une composition, ne rien faire if (in_array($type,compositions_types())){ $contexte = isset($flux['args']['contexte'])?$flux['args']['contexte']:$GLOBALS['contexte']; $serveur = $flux['args']['connect']; $ext = $flux['args']['ext']; $_id_table = id_table_objet($type); if ($id = $contexte[$_id_table] AND $composition = compositions_determiner($type,$id,$serveur)){ if ($fond = compositions_selectionner($composition, $type, '', $ext, true, "")){ $flux['data'] = substr($fond, 0, - strlen(".$ext")); } } } } } return $flux; }
/** * Fonction d'autorisation interne à la fonction restreindre_extras() * spécifique au test de la présence d'une composition * * @param string $objet * Objet possédant les extras * @param int $id_objet * Identifiant de l'objet possédant les extras * @param array $opt * Options des autorisations * @param mixed $ids * Identifiant(s) des compositions sur lesquelles s'appliquent les champs * @param bool $recursif * Inutile, la récursivité est prise en charge par compositions_determiner() * @return bool * Autorisé ou non */ function inc_restreindre_extras_objet_sur_composition_dist($objet, $id_objet, $opt, $ids, $recursif) { if (!function_exists('compositions_determiner')) { include_spip('compositions_fonctions'); } if (function_exists('compositions_determiner')) { $composition = compositions_determiner($objet, $id_objet); return in_array($composition, $ids); } return false; }
/** * Renvoie la composition heritee par un objet selon son identifiant. * Optionnellement, on peut lui transmettre directement l'id du parent s'il a ate calcule. * * @param string $type * @param integer $id * @param integer $id_parent * @param string $serveur * @return string */ function compositions_heriter($type, $id, $id_parent=NULL, $serveur=''){ if ($type=='syndic') $type='site'; //grml if (intval($id) < 1) return ''; static $infos = null; $compo_parent = ''; $heritage = compositions_recuperer_heritage($type); /* Si aucun héritage n'a été défini pour le type d'objet, ce * n'est pas la peine d'aller plus loin. */ if(count($heritage) == 0) return ''; $type_parent = $heritage['type_parent']; $table_parent = $heritage['table_parent']; $nom_id_parent = $heritage['nom_id_parent']; $nom_id_table_parent = $heritage['nom_id_table_parent']; if (is_null($id_parent)) $id_parent = sql_getfetsel($nom_id_parent, table_objet_sql($type), id_table_objet($type).'='.intval($id)); $heritages = compositions_recuperer_heritage(); do { $select = 'composition'; if ($heritages[$type_parent]==$type_parent) // S'il y a recursivite sur le parent $select .= ', id_parent'; $row = sql_fetsel($select, $table_parent, $nom_id_table_parent.'='.intval($id_parent),'','','','',$serveur); if (strlen($row['composition']) AND $row['composition']!='-') $compo_parent = $row['composition']; elseif (strlen($row['composition'])==0 AND isset($heritages[$type_parent])) // Si le parent peut heriter, il faut verifier s'il y a heritage $compo_parent = compositions_determiner($type_parent, $id_parent, $serveur=''); if (strlen($compo_parent) AND is_null($infos)) $infos = compositions_lister_disponibles(''); } while ($id_parent = $row['id_parent'] AND (!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]; return ''; }