Mise en route du suivi.
[aidenligne_francais_universite.git] / plugins / couteau_suisse / inc / cs_outils.php
1 <?php
2 #-----------------------------------------------------#
3 # Plugin : Couteau Suisse - Licence : GPL #
4 # Auteur : Patrice Vanneufville, 2007 #
5 # Contact : patrice¡.!vanneufville¡@!laposte¡.!net #
6 # Infos : http://www.spip-contrib.net/?article2166 #
7 #-----------------------------------------------------#
8 # Fichier contenant les fonctions concernant la #
9 # description des outils. #
10 #-----------------------------------------------------#
11
12 if (!defined("_ECRIRE_INC_VERSION")) return;
13
14 @define('_DIV_CS_INFOS', '<div id="cs_infos" class="cs_infos">');
15 @define('_URL_CONTRIB', 'http://www.spip-contrib.net/?article');
16
17 // TODO : revoir tout ca avec la syntaxe de <necessite>
18 function cs_version_erreur($outil) {
19 return (isset($outil['version-min']) && version_compare($GLOBALS['spip_version_code'], $outil['version-min'], '<'))
20 || (isset($outil['version-max']) && version_compare($GLOBALS['spip_version_code'], $outil['version-max'], '>'));
21 }
22
23 // initialise un outil, ses variables, et en renvoie la description compilee
24 function cs_initialisation_d_un_outil($outil_, $description_outil, $modif) {
25 global $outils, $metas_outils;
26 $outil = &$outils[$outil_];
27 if (!isset($outil['categorie'])) $outil['categorie'] = 'divers';
28 if (!isset($outil['nom'])) $outil['nom'] = _T('couteauprive:'.$outil['id'].':nom');
29 if (isset($outil['code:jq'])) $outil['jquery']='oui';
30 $outil['actif'] = isset($metas_outils[$outil['id']])?$metas_outils[$outil['id']]['actif']:0;
31 // Si Spip est trop ancien ou trop recent...
32 if (cs_version_erreur($outil)) $outil['actif'] = 0;
33 // au cas ou des variables sont presentes dans le code
34 $outil['variables'] = array(); $outil['nb_variables'] = 0;
35 // ces 2 lignes peuvent initialiser des variables dans $metas_vars ou $metas_vars_code
36 if (isset($outil['code:options'])) $outil['code:options'] = cs_parse_code_php($outil['code:options']);
37 if (isset($outil['code:fonctions'])) $outil['code:fonctions'] = cs_parse_code_php($outil['code:fonctions']);
38 // cette ligne peut utiliser des variables dans $metas_vars ou $metas_vars_code
39 return $description_outil($outil_, 'admin_couteau_suisse', $modif);
40 }
41
42 // renvoie le configuration du pack actuel
43 function cs_description_pack() {
44 if(!isset($GLOBALS['cs_pack_actuel'])) return '';
45 return _DIV_CS_INFOS . debut_cadre_relief('', true)
46 . "<h3 class='titrem'><img src='"._DIR_IMG_PACK."puce-verte.gif' width='9' height='9' style='border:0;' alt='-' />&nbsp;" . _T('couteauprive:pack_titre') . '</h3>'
47 . propre(_T('couteauprive:pack_descrip') . "\n\n" . _T('couteauprive:contrib', array('url'=>'[->'._URL_CONTRIB.'2552]')))
48 . '<br/><textarea rows=30 cols=200 style="width:520px; font-size:90%;">'.htmlentities($GLOBALS[cs_pack_actuel], ENT_QUOTES, $GLOBALS['meta']['charset']).'</textarea>'
49 . fin_cadre_relief(true) . '</div>';
50 }
51
52 // renvoie (pour la nouvelle interface) la description d'un outil
53 function description_outil2($outil_id) {
54 if(!strlen($outil_id)) return _DIV_CS_INFOS . _T('couteauprive:outils_cliquez') . '</div>';
55 global $outils, $metas_vars, $metas_outils;
56 include_spip('cout_utils');
57 // remplir $outils (et aussi $cs_variables qu'on n'utilise pas ici);
58 include_spip('config_outils');
59 cs_log(" -- exec_charger_description_outil_dist() - Appel de config_outils.php : nb_outils = ".count($outils));
60
61 cs_log(" -- appel de charger_fonction('description_outil', 'inc') et de description_outil($outil_id) :");
62 $description_outil = charger_fonction('description_outil', 'inc');
63 $descrip = cs_initialisation_d_un_outil($outil_id, $description_outil, true);
64
65 include_spip('inc/presentation');
66 $s = /*debut_cadre_relief('', true).'toto</div>'.*/'<div class="cs-cadre">';
67 $outil = $outils[$outil_id]; unset($outils);
68 $actif = $outil['actif'];
69 $puce = $actif?'puce-verte.gif':'puce-rouge.gif';
70 $titre_etat = _T('couteauprive:outil_'.($actif?'actif':'inactif'));
71 $nb_var = intval($outil['nb_variables']);
72
73 $s .= "<h3 class='titrem'><img src='"._DIR_IMG_PACK."$puce' name='puce_$id_input' width='9' height='9' style='border:0;' alt=\"$titre_etat\" title=\"$titre_etat\" />&nbsp;" . $outil['nom'] . '</h3>';
74 $s .= '<div style="text-align:right; font-size:85%; margin-bottom:0.8em;">';
75 if ($nb_var)
76 $s .= '<a href="'.generer_url_ecrire(_request('source'),'cmd=reset&outil='.$outil_id).'" title="' . _T('couteauprive:par_defaut') . '">' . _T('couteauprive:par_defaut') . '</a>&nbsp;|&nbsp;';
77 if (!$actif)
78 $s .= '<a href="'.generer_url_ecrire(_request('source'),'cmd=hide&outil='.$outil_id).'" title="' . _T('couteauprive:outil_cacher') . '">' . _T('couteauprive:outil_cacher') . '</a>&nbsp;|&nbsp;';
79 $act = $actif?'des':'';
80 $s .= '<a href="'.generer_url_ecrire(_request('source'),'cmd=toggle&outil='.$outil_id).'" title="'._T("couteauprive:outil_{$act}activer_le").'">'._T("couteauprive:outil_{$act}activer")."</a></div>";
81 include_spip('inc/texte');
82 $s .= propre($descrip);
83
84 $serial = serialize(array_keys($outil));
85 if (preg_match_all(',traitement:([A-Z_]+),', $serial, $regs, PREG_PATTERN_ORDER))
86 $p .= _T('couteauprive:detail_balise_etoilee', array('bal' => '#'.join('*, #', array_unique($regs[1])).'*'));
87 if (isset($outil['jquery']) && $outil['jquery']=='oui') $p .= '<p>' . _T(defined('_SPIP19100')?'couteauprive:detail_jquery1':'couteauprive:detail_jquery2') . '</p>';
88 if (isset($outil['auteur']) && strlen($outil['auteur'])) $p .= '<p>' . _T('auteur') .' '. ($outil['auteur']) . '</p>';
89 if (isset($outil['contrib']) && strlen($outil['contrib'])) $p .= '<p>' . _T('couteauprive:contrib', array('url'=>'[->'._URL_CONTRIB.$outil['contrib'].']')) . '</p>';
90 $s .= propre($p);
91 $s .= detail_outil($outil_id);
92
93 return _DIV_CS_INFOS . $s . '</div></div>';
94 }
95
96 // renvoie simplement deux liste des outils actifs/inactifs
97 function liste_outils() {
98 global $outils;
99 $id = 0;
100 $metas_caches = isset($GLOBALS['meta']['tweaks_caches'])?unserialize($GLOBALS['meta']['tweaks_caches']):array();
101 foreach($outils as $outil) $categ[_T('couteauprive:categ:'.$outil['categorie'])] = $outil['categorie']; ksort($categ);
102 $result_actifs = $result_inactifs = '';
103 foreach($categ as $c=>$i) {
104 $s_actifs = $s_inactifs = array();
105 foreach($outils as $outil) if ($outil['categorie']==$i) {
106 $test = $outil['actif']?'s_actifs':'s_inactifs';
107 $hide = cs_version_erreur($outil) || (!$outil['actif'] && isset($metas_caches[$outil['id']]['cache']));
108 if (!$hide)
109 ${$test}[] .= $outil['nom'] . '|' . $outil['index'] . '|' . $outil['id'];
110 }
111 foreach(array('s_actifs', 's_inactifs') as $temp) {
112 sort(${$temp});
113 $reset=_request('cmd')=='resetjs'?"\ncs_EffaceCookie('sous_liste_$id');":'';
114 $titre = "<script type=\"text/javascript\"><!--$reset
115 document.write('<span class=\"light'+cs_Titre('sous_liste_$id')+'\">');
116 //--></script><noscript><span class='light cs_hidden'></noscript>"
117 ." (".count(${$temp}).")</span>";
118 preg_match(',([0-9]+)\.?\s*(.*),', _T('couteauprive:'.$c), $reg);
119 $titre = "<div class='titrem categorie'>$reg[2]$titre</div>";
120 $href = generer_url_ecrire(_request('exec'),"cmd=descrip&outil=");
121 foreach(${$temp} as $j=>$v)
122 ${$temp}[$j] = preg_replace(',^(.*)\|(.*)\|(.*)$,', '<a class="cs_href" id="href_$3" name="$3" href="'.$href.'$3">$1</a>', $v);
123 ${$temp} = join("<br/>\n", ${$temp});
124 if (strlen(${$temp})) ${'result'.$temp} .= $titre
125 . "<script type=\"text/javascript\"><!--
126 document.write('<div id=\"sous_liste_$id\" class=\"'+cs_Categorie('sous_liste_$id')+'\">');
127 //--></script><noscript><div id=\"sous_liste_$id\"></noscript>" . ${$temp} . '</div>';
128 $id++;
129 }
130 }
131
132 $fieldset = '<fieldset style="width:92%; margin:0; padding:0.6em;" class="cadre-trait-couleur liste_outils"><legend style="font-weight:bold; color:';
133 return '<div id="cs_outils" class="cs_outils">'
134 . '<div class="cs_liste cs_inactifs">' . $fieldset . 'red;">' . _T('couteauprive:outils_inactifs') . '</legend>'
135 . $results_inactifs . '</fieldset></div>'
136 . '<form id="csform" name="csform" method="post" action="'.generer_url_ecrire(_request('exec'),"cmd=toggle").'">'
137 . '<input type="hidden" value="test" name="cs_selection" id="cs_selection"/>'
138 . '<div class="cs_toggle"><div style="display:none;">'
139 . '<a id="cs_toggle_a" title="'._T('couteauprive:outils_permuter_gras1').'" href="'.generer_url_ecrire(_request('exec'),"cmd=toggle").'">'
140 . '<img alt="<->" src="'.find_in_path('img/permute.gif').'"/></a>'
141 . '<p id="cs_toggle_p">(0)</p>'
142 . '<a id="cs_reset_a" title="'._T('couteauprive:outils_resetselection').'" href="#">'
143 . '&nbsp;<img alt="X" class="class_png" src="'.find_in_path('img/nosel.gif').'"/>&nbsp;</a>'
144 . '</div></div></form>'
145 . '<div class="cs_liste cs_actifs">' . $fieldset . '#22BB22;">' . _T('couteauprive:outils_actifs') . '</legend>'
146 . $results_actifs . '</fieldset>'
147 . '<div style="text-align: right;"><a id="cs_tous_a" title="'._T('couteauprive:outils_selectionactifs').'" href="#">'._T('couteauprive:outils_selectiontous').'</a></div>'
148 . '</div></div>';
149 }
150
151 // renvoie les details techniques d'un outil
152 function detail_outil($outil_id) {
153 global $outils;
154 $outil = &$outils[$outil_id];
155 $hr = '<!hr style="margin:6pt 0 0 0;"/><div style="font-size:85%; margin-top:0.8em; border-top:solid 1px;">';
156 if (cs_version_erreur($outil)) return $hr . _T('couteauprive:erreur:version') . '</div>';
157 $details = array();
158 if ($erreur_version) $details[] = _T('couteauprive:erreur:version');
159 $a = array();
160 foreach(array('options', 'fonctions', 'js', 'jq', 'css') as $in)
161 if(isset($outil['code:'.$in])) $a[] = _T('couteauprive:code_'.$in);
162 if(count($a)) $details[] = _T('couteauprive:detail_inline') . ' ' . join(', ', $a);
163 $a = array();
164 foreach(array('.php', '_options.php', '_fonctions.php', '.js', '.js.html', '.css', '.css.html') as $ext)
165 if (find_in_path('outils/'.($temp=$outil_id.$ext))) $a[] = $temp;
166 if(count($a)) $details[] = _T('couteauprive:detail_fichiers') . ' ' . join(', ', $a);
167 $serial = serialize(array_keys($outil));
168 if (preg_match_all(',traitement:([A-Z_]+),', $serial, $regs, PREG_PATTERN_ORDER))
169 $details[] = _T('couteauprive:detail_traitements') . ' #' . join(', #', array_unique($regs[1]));
170 if (preg_match_all(',(pipeline|pipelinecode):([a-z_]+),', serialize(array_keys($outil)), $regs, PREG_PATTERN_ORDER))
171 $details[] = _T('couteauprive:detail_pipelines') . ' ' . join(', ', array_unique($regs[2]));
172 if(count($details)) return $hr . join('<br />', $details) . '</div>';
173 return '';
174 }
175 ?>