[SPIP] ~maj v2.1.25-->2.1.26
[velocampus/web/www.git] / www / plugins / auto / compositions_v2 / inc / compositions.php
1 <?php
2 /*
3 * Plugin Compositions
4 * (c) 2007-2009 Cedric Morin
5 * Distribue sous licence GPL
6 *
7 */
8
9 if (!defined("_ECRIRE_INC_VERSION")) return;
10
11 include_spip('compositions_fonctions');
12
13 /**
14 * Separer le type et le nom de la composition dans un nom de fichier
15 *
16 * @param string $nom
17 * @return array
18 */
19 function compositions_decomposer_nom($nom){
20 $reg = ",^([a-z][^-.]*)("._COMPOSITIONS_MATCH.")?$,i";
21 if (
22 // recuperer le type et la composition
23 preg_match($reg,$nom,$matches)
24 // il y a bien un type
25 AND $type=$matches[1]
26 ){
27 $composition = isset($matches[3])?$matches[3]:'';
28 return array($type,$composition);
29 }
30 return array($nom,"");
31 }
32
33 /**
34 * Charger les informations contenues dans le xml d'une composition
35 *
36 * @param string $nom
37 * @param string $info
38 * @return array|string
39 */
40 function compositions_charger_infos($nom,$info=""){
41 // on peut appeller avec le nom du squelette
42 $nom = preg_replace(',[.]html$,i','',$nom).".xml";
43 include_spip('inc/xml');
44 $composition = array();
45 if ($xml = spip_xml_load($nom,false)){
46 if (count($xml['composition'])){
47 $xml = reset($xml['composition']);
48 $composition['nom'] = _T_ou_typo(spip_xml_aplatit($xml['nom']));
49 $composition['description'] = isset($xml['description'])?_T_ou_typo(spip_xml_aplatit($xml['description'])):'';
50 $composition['icon'] = isset($xml['icon'])?find_in_path(reset($xml['icon'])):'';
51 $composition['class'] = isset($xml['class'])?trim(reset($xml['class'])):'';
52 $composition['configuration'] = isset($xml['configuration'])?spip_xml_aplatit($xml['configuration']):'';
53 $composition['branche'] = array();
54 if (spip_xml_match_nodes(',^branche,', $xml, $branches)){
55 foreach (array_keys($branches) as $branche){
56 list($balise, $attributs) = spip_xml_decompose_tag($branche);
57 $composition['branche'][$attributs['type']] = $attributs['composition'];
58 }
59 }
60 }
61 }
62 if (!$info)
63 return $composition;
64 else
65 return isset($composition[$info])?$composition[$info]:"";
66 }
67
68
69 /**
70 * Ecrire dans une meta la liste des objets qui sont sous le regime des
71 * compositions
72 * La fonction est appelee
73 * - lors de la stylisation si la meta n'est pas encore definie
74 * - a chaque fois qu'on selectionne un composition dans l'espace prive
75 * - si var_mode=recalcul
76 * On est sur ainsi que toute nouvelle composition selectionnee est dedans
77 * Si une composition est retiree du file system sans etre deselectionnee
78 * l'erreur sera evitee par la verification d'existence au moment de styliser
79 *
80 * @param array $liste
81 */
82 function compositions_cacher($liste=null){
83 if (!is_array($liste)){
84 include_spip('compositions_fonctions');
85 $liste = compositions_lister_disponibles('',false);
86 }
87 include_spip('inc/meta');
88 ecrire_meta('compositions_types',implode(',',array_keys($liste)));
89 spip_log('compositions: maj des compositions_types ['.$GLOBALS['meta']['compositions_types'].']');
90 }
91
92 ?>