Пример #1
0
/**
 * 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 '';
}