/** * 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; }
/** * 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 ''; }