[SPIP] +2.1.12
[velocampus/web/www.git] / www / plugins / auto / couteau_suisse / couteau_suisse / outils / filets_sep.php
1 <?php
2 /*
3 * +----------------------------------+
4 * Nom de l'outil : Filets de Separation
5 * Idee originale : FredoMkb
6 * Serieuse refonte et integration au Couteau Suisse : Patrice Vanneufville
7 * +-------------------------------------+
8 * Toutes les infos sur : http://www.spip-contrib.net/?article1564
9 */
10
11 // Constantes surchargeables
12 //@define('_FILETS_SEP_BALISE_DEBUT', '<hr');
13 //@define('_FILETS_SEP_BALISE_FIN', '/>');
14 @define('_FILETS_SEP_BALISE_DEBUT', '<p');
15 @define('_FILETS_SEP_BALISE_FIN', '></p>');
16 @define('_FILETS_SEP_MAX_CSS', 7);
17 @define('_FILETS_REG_DEBUT', '#(?:\s*[\n\r]\s*)__(');
18 @define('_FILETS_REG_FIN', ')__(?=\s*[\n\r]\s*)#iU');
19 @define('_FILETS_REG_EXT', '\.(?:png|gif|jpg)');
20
21 // cette fonction appelee automatiquement a chaque affichage de la page privee du Couteau Suisse renvoie un tableau
22 function filets_sep_installe_dist() {
23 //cs_log('filets_sep_installe_dist()');
24 include_spip('inc/texte');
25 // Tester si on echappe en span ou en div
26 $mode = ($bmode=preg_match(',<('._BALISES_BLOCS.'|p)(\W|$),iS', _FILETS_SEP_BALISE_DEBUT))?'div':'span';
27 $bt = defined('_DIR_PLUGIN_PORTE_PLUME');
28 $filets = array();
29 // filets numeriques
30 for($i=0; $i<=_FILETS_SEP_MAX_CSS; $i++) {
31 $filets[6][] = $i;
32 $f = cs_code_echappement(_FILETS_SEP_BALISE_DEBUT." class='filet_sep filet_sep_$i'"._FILETS_SEP_BALISE_FIN, '', $mode);
33 $filets[1]["$i"] = $bmode?"\n\n".$f."\n\n":$f;
34 }
35 // filets image
36 $path = find_in_path('img/filets');
37 $dossier = opendir($path);
38 if($path) while ($image = readdir($dossier)) {
39 if (preg_match(',^(([a-z0-9_-]+)'._FILETS_REG_EXT.'),', $image, $reg)) {
40 $filets[0][] = '__'.$reg[1].'__';
41 $filets[6][] = preg_quote($reg[1]);
42 $filets[2][] = $reg[2];
43 list(,$haut) = @getimagesize($path.'/'.$reg[1]);
44 if ($haut) $haut="height:{$haut}px;";
45 $f = url_absolue($path).'/'.$reg[1];
46 $f = cs_code_echappement(_FILETS_SEP_BALISE_DEBUT." class=\"filet_sep filet_sep_image\" style=\"$haut background-image: url($f);\""._FILETS_SEP_BALISE_FIN, '', $mode);
47 $filets[1][$reg[1]] = $bmode?"\n\n".$f."\n\n":$f;
48 if($bt)
49 $filets[4]['filet_'.str_replace('.','_',$reg[1])] = $reg[1];
50 }
51 }
52 // RegExpr finale
53 $filets[6] = _FILETS_REG_DEBUT . join('|', $filets[6]) . _FILETS_REG_FIN;
54 if($bt) for($i=0; $i<=_FILETS_SEP_MAX_CSS; $i++)
55 $filets[5]['filet_'.$i] = $i;
56 return array($filets);
57 }
58
59 // liste des nouveaux raccourcis ajoutes par l'outil
60 // si cette fonction n'existe pas, le plugin cherche alors _T('couteauprive:un_outil:aide');
61 function filets_sep_raccourcis() {
62 $filets = cs_lire_data_outil('filets_sep');
63 return _T('couteauprive:filets_sep:aide',
64 array('liste' => '<b>'.join('</b>, <b>', $filets[0]).'</b>', 'max'=>_FILETS_SEP_MAX_CSS));
65 }
66
67 function filets_sep_callback($matches) {
68 global $filets_tmp;
69 return $filets_tmp[1][$matches[1]];
70 }
71
72 // Fonction pour generer des filets de separation selon les balises presentes dans le texte fourni.
73 // Cette fonction n'est pas appelee dans les balises html : html|code|cadre|frame|script
74 function filets_sep_rempl($texte) {
75 if (strpos($texte, '__')===false) return $texte;
76
77 global $filets_tmp;
78 $filets_tmp = cs_lire_data_outil('filets_sep');
79
80 // On remplace les balises filets dans le texte par le code HTML correspondant
81 // le resultat a ete protege pour eviter que la typo de SPIP y touche
82 $texte = preg_replace_callback($filets_tmp[6], 'filets_sep_callback', $texte);
83
84 // Nettoyage et retour
85 unset($filets_tmp);
86 return $texte;
87 }
88
89 // fonction pipeline pre_typo
90 function filets_sep($texte) {
91 if (strpos($texte, '__')===false) return $texte;
92 return cs_echappe_balises('', 'filets_sep_rempl', $texte);
93 }
94
95 // cette fonction renvoie une ligne de tableau entre <tr></tr> afin de l'inserer dans la Barre Typo V2, si elle est presente
96 function filets_sep_BarreTypo($tr) {
97 $filets = cs_lire_data_outil('filets_sep');
98 $res = array();
99 for($i=0; $i<=_FILETS_SEP_MAX_CSS; $i++)
100 $res[] = "<a title=\"__{$i}__\" href=\"javascript:barre_inserer('\\n\\n__{$i}__\\n\\n',@@champ@@)\"><span class=\"cs_BT\">CSS {$i}</span></a>";
101 $max = count($filets[0]);
102 for($i=0; $i<$max; $i++)
103 $res[] = "<a title=\"{$filets[0][$i]}\" href=\"javascript:barre_inserer('\\n\\n{$filets[0][$i]}\\n\\n',@@champ@@)\"><span class=\"cs_BT\">{$filets[0][$i]}</span></a>";
104 $res = join(' ', $res);
105 return $tr.'<tr><td><p style="margin:0; line-height:1.8em;">'._T('couteauprive:filets_sep:nom')."&nbsp;$res</p></td></tr>";
106 }
107
108 // les 2 fonctions suivantes inserent les boutons pour le plugin Porte Plume, s'il est present (SPIP>=2.0)
109 function filets_PP_pre_charger($flux) {
110 $filets = cs_lire_data_outil('filets_sep');
111 $max = count($filets[0]);
112 $r = array();
113 for ($i=0; $i<=_FILETS_SEP_MAX_CSS; $i++) {
114 $r[] = array(
115 "id" => 'filet_'.$i,
116 "name" => _T('couteau:pp_filets_inserer', array('filet'=>$i)),
117 "className" => 'filet_'.$i,
118 "replaceWith" => "\n__{$i}__\n",
119 "display" => true);
120 }
121 for ($i=0; $i<$max; $i++) {
122 $c = &$filets[0][$i];
123 $id = 'filet_'.str_replace('.', '_', trim($c, '_'));
124 $r[] = array(
125 "id" => $id,
126 "name" => _T('couteau:pp_filets_inserer', array('filet'=>$filets[2][$i])),
127 "className" => $id,
128 "replaceWith" => "\n$c\n",
129 "display" => true);
130 }
131 $r = array(
132 "id" => 'cs_filets_drop',
133 "name" => _T('couteau:pp_filets_inserer_drop'),
134 "className" => 'cs_filets_drop',
135 "replaceWith" => '',
136 "display" => true,
137 "dropMenu" => $r,
138 );
139 foreach(cs_pp_liste_barres('filets_sep') as $b)
140 $flux[$b]->ajouterApres('grpCaracteres', $r);
141 return $flux;
142 }
143 function filets_PP_icones($flux) {
144 $filets = cs_lire_data_outil('filets_sep');
145 // icones utilisees. Attention : mettre les drop-boutons en premier !!
146 $flux['cs_filets_drop'] = filets_creer_icone_barre(find_in_path('img/filets/ornement.png'));
147 $path = find_in_path('img/filets').'/';
148 foreach($filets[4] as $i=>$v) $flux[$i] = filets_creer_icone_barre($path.$v);
149 foreach($filets[5] as $i=>$v) $flux[$i] = filets_creer_icone_barre('', $v);
150 return $flux;
151 }
152 // creation d'icone pour le plugin porte-plume
153 function filets_creer_icone_barre($file, $num=-1) {
154 static $icones_barre;
155 rep_icones_barre($icones_barre);
156 define_IMG_GD_MAX_PIXELS();
157 // la config "Methode de fabrication des vignettes" doit etre renseignee pour 'image_reduire'
158 if($num<0) {
159 list($w) = @getimagesize($file);
160 $file = filtrer('image_recadre', $file, floor($w/4), 40, '');
161 $file = filtrer('image_reduire', $file, 19, 19);
162 $file = filtrer('image_recadre', $file, 16, 16, 'left');
163 } else {
164 $file = image_typo("_{$num}_", 'couleur=00BFFF', 'taille=9', 'police=dustismo.ttf');
165 $file = filtrer('image_recadre', $file, 16, 10, 'bottom');
166 }
167 $nom = basename($src = extraire_attribut($file, 'src'));
168 @copy($src, $icones_barre.$nom);
169 return $nom;
170 }
171 ?>