/**
 * Chargement des donnees du formulaire
 *
 * @param string $type
 * @param int $id
 * @return array
 */
function formulaires_editer_composition_objet_charger($type,$id){
	$valeurs = array();
	$table_objet_sql = table_objet_sql($type);
	$id_table_objet = id_table_objet($type);
	$valeurs[$id_table_objet] = intval($id);

	$valeurs['editable'] = true;
	$valeurs['id'] = "$type-$id";
	$valeurs['id_objet'] = $id;
	$valeurs['objet'] = $type;

	$row = sql_fetsel('composition,composition_lock',$table_objet_sql,"$id_table_objet=".intval($id));
	$valeurs['composition'] = $row['composition'];
	$valeurs['composition_lock'] = $row['composition_lock'];
	
	if ($type=='rubrique')
		$valeurs['composition_branche_lock'] = sql_getfetsel('composition_branche_lock',$table_objet_sql,"$id_table_objet=".intval($id));
	
	$valeurs['composition_heritee'] = compositions_heriter($type, $id);
	$valeurs['verrou_branche'] = compositions_verrou_branche($type, $id);
	$valeurs['verrou_branche'] = false;
	$valeurs['composition_verrouillee'] = compositions_verrouiller($type, $id);

	$valeurs['compositions'] = compositions_lister_disponibles($type);
	$valeurs['_compositions'] = reset($valeurs['compositions']); // on ne regarde qu'un seul type
	if (is_array($valeurs['_compositions']) AND !isset($valeurs['_compositions'][''])){
		$valeurs['_compositions'] = array_merge(
			array(''=>array('nom'=>_T('compositions:composition_defaut'),'description'=>'','icon'=>'','configuration'=>'')),
			$valeurs['_compositions']
		);
	}
	
	// Si on herite d'une composition
	// On modifie le tableau des compositions
	if ($valeurs['composition_heritee'] AND $valeurs['composition_heritee'] != '-') {
		$compo_defaut = $valeurs['_compositions'][$valeurs['composition_heritee']];
		$compo_vide = $valeurs['_compositions'][''];
		unset($valeurs['_compositions'][$valeurs['composition_heritee']]);
		unset($valeurs['_compositions']['']);
		$valeurs['_compositions'] = array_merge(
			array('' => $compo_defaut,'-' => $compo_vide),
			$valeurs['_compositions']
		);
	}
	
	$valeurs['_hidden'] = "<input type='hidden' name='$id_table_objet' value='$id' />";

	if (!autoriser('styliser',$type,$id))
		$valeurs['editable'] = false;

	return $valeurs;
}
/**
 * Affichage du formulaire de selection de la composition
 *
 * @param array $flux
 * @return array
 */
function compositions_affiche_milieu($flux){
	$e = trouver_objet_exec($flux['args']['exec']);
	$objets = compositions_objets_actives();
	if (in_array($e['type'],$objets)
	  AND $e['edition']===false){
		$type = $e['type'];
		if ($id = $flux['args'][$e['id_table_objet']]) {
			$config = (isset($GLOBALS['meta']['compositions']) ? unserialize($GLOBALS['meta']['compositions']) : array());
			$aut = autoriser('styliser',$type,$id);
			if ((!isset($config['masquer_formulaire']) OR $config['masquer_formulaire'] != 'oui' OR $aut)
				AND (
					($c=compositions_lister_disponibles($type) AND is_array(reset($c)))
					OR ($type == 'rubrique' AND (!isset($config['tout_verrouiller']) OR $config['tout_verrouiller'] != 'oui'))
				  )
				) {
				$ids = 'formulaire_editer_composition_objet-' . "$type-$id";
				$texte = recuperer_fond(
					'prive/editer/compositions',
					array(
						'type'=>$type,
						'id'=>$id,
					)
				);

				if (($p = strpos($flux['data'],'<!--affiche_milieu-->'))!==false)
					$flux['data'] = substr_replace($flux['data'],$texte,$p,0);
				else
					$flux['data'] .= $texte;
			}
		}
	}

	return $flux;
}
Example #3
0
/**
 * Ecrire dans une meta la liste des objets qui sont sous le regime des
 * compositions
 * La fonction est appelee
 * - lors de la stylisation si la meta n'est pas encore definie
 * - a chaque fois qu'on selectionne un composition dans l'espace prive
 * - si var_mode=recalcul
 * On est sur ainsi que toute nouvelle composition selectionnee est dedans
 * Si une composition est retiree du file system sans etre deselectionnee
 * l'erreur sera evitee par la verification d'existence au moment de styliser
 *
 * @param array $liste
 */
function compositions_cacher($liste=null){
	// lister les compositions vraiment utilisees
	if (!is_array($liste)){
		include_spip('compositions_fonctions');
		$liste = compositions_lister_disponibles('',false);
	}
	// lister les objets dont on a active la composition dans la configuration
	$config = compositions_objets_actives();

	$liste = array_intersect($config,array_keys($liste));
	ecrire_meta('compositions_types',implode(',',$liste));
	spip_log('compositions: maj des compositions_types ['.$GLOBALS['meta']['compositions_types'].']');
}
/**
 * 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 '';
}