,ie', '_T("$1")', $outil['nom']); // $outil['surcharge'] n'est pas encore renseigne si la fonction d'installation est surchargee if(isset($outil['surcharge']) || (function_exists($outil_.'_installe') && $outil['surcharge']=1)) $outil['nom'] = $outil['nom'].' *'; if(isset($outil['perso'])) $outil['nom'] = ''.$outil['nom'].''; if(isset($outil['code:jq'])) $outil['jquery']='oui'; $outil['actif'] = isset($metas_outils[$outil['id']])?@$metas_outils[$outil['id']]['actif']:0; if(isset($outil['contrib']) && $outil['contrib']) $metas_outils[$outil['id']]['contrib'] = $outil['contrib']; // si SPIP est trop ancien ou trop recent... if(cs_version_erreur($outil)) { $metas_outils[$outil['id']]['actif'] = $outil['actif'] = 0; } // au cas ou des variables sont presentes dans le code $outil['variables'] = array(); $outil['nb_variables'] = 0; // ces 2 lignes peuvent initialiser des variables dans $metas_vars ou $metas_vars_code if(isset($outil['code:spip_options'])) $outil['code:spip_options'] = cs_parse_code_php($outil['code:spip_options']); if(isset($outil['code:options'])) $outil['code:options'] = cs_parse_code_php($outil['code:options']); if(isset($outil['code:fonctions'])) $outil['code:fonctions'] = cs_parse_code_php($outil['code:fonctions']); } // cette ligne peut utiliser des variables dans $metas_vars ou $metas_vars_code return $description_outil($outil_, 'admin_couteau_suisse', $modif); } // renvoie la configuration du pack actuel function cs_description_pack() { if(!isset($GLOBALS['cs_pack_actuel'])) return ''; return debut_cadre_relief('', true) . "

- " . _T('couteauprive:pack_titre') . '

' . ((strlen($temp = cs_action_rapide('pack')))?"
$temp
":'') . propre(_T('couteauprive:pack_descrip', array('pack'=> _T('couteauprive:pack_actuel', array('date'=>cs_date())))) . "\n\n" . _T('couteauprive:contrib', array('url'=>'[->'._URL_CONTRIB.'2552]'))) . '
' . fin_cadre_relief(true); } // renvoie (pour la nouvelle interface) la description d'un outil function description_outil2($outil_id) { if(!strlen($outil_id)) return _T('couteauprive:outils_cliquez'); global $outils, $metas_vars, $metas_outils; include_spip('cout_utils'); // remplir $outils (et aussi $cs_variables qu'on n'utilise pas ici); include_spip('config_outils'); cs_log(" -- description_outil2($outil_id) - Appel de config_outils.php : nb_outils = ".count($outils)); cs_log(" -- appel de charger_fonction('description_outil', 'inc') et de description_outil($outil_id) :"); $description_outil = charger_fonction('description_outil', 'inc'); $descrip = cs_initialisation_d_un_outil($outil_id, $description_outil, true); include_spip('inc/presentation'); include_spip('inc/texte'); include_spip('public/parametrer'); // fonctions pour les pipelines $s = '
'; $outil = $outils[$outil_id]; unset($outils); $actif = $outil['actif']; $puce = $actif?'puce-verte.gif':'puce-rouge.gif'; $titre_etat = _T('couteauprive:outil_'.($actif?'actif':'inactif')); $nb_var = intval($outil['nb_variables']); // cette valeur par defaut n'est pas definie sous SPIP 1.92 // constante abandonnee sous SPIP 3.0 if(!defined('_SPIP30000')) @define('_ID_WEBMESTRES', 1); if(!strlen($outil['id']) || !autoriser('configurer', 'outil', 0, NULL, $outil)) return $s . _T('info_acces_interdit') . '
'; $s .= "

\"$titre_etat\" " . $outil['nom'] . '

'; $s .= '
'; if($nb_var) $s .= '' . _T('couteauprive:par_defaut') . ' | '; if(!$actif) $s .= '' . _T('couteauprive:outil_cacher') . ' | '; $act = $actif?'des':''; $s .= ''._T("couteauprive:outil_{$act}activer")."
"; if(strlen($temp = cs_action_fichiers_distants($outil) . cs_action_rapide($outil_id, $actif))) $s .= "
$temp
"; $s .= cs_nettoie(propre($descrip)); $serial = serialize(array_keys($outil)); $p = ''; if($b=cs_balises_traitees($outil_id, '*, #')) $p .= '

' . _T('couteauprive:detail_balise_etoilee', array('bal' => $b.'*')) . '

'; if($actif && isset($outil['code:spip_options']) && strlen($outil['code:spip_options']) && ($outil_id<>'cs_comportement')) $p .= '

' . _T('couteauprive:detail_spip_options'.(defined('_CS_SPIP_OPTIONS_OK')?'_ok':''), array('lien'=>description_outil_liens_callback(array(1=>'cs_comportement')))) . '

'; if(isset($outil['jquery']) && $outil['jquery']=='oui') $p .= '

' . _T('couteauprive:detail_jquery2') . '

'; if(isset($outil['auteur']) && strlen($outil['auteur'])) $p .= '

' . _T('auteur') .' '. ($outil['auteur']) . '

'; if(isset($outil['contrib']) && strlen($outil['contrib'])) $p .= '

' . _T('couteauprive:contrib', array('url'=>'[->'._URL_CONTRIB.$outil['contrib'].']')) . '

'; return $s . propre($p) . detail_outil($outil_id) . ''; } // met a jour les outils caches/interdits et renvoie deux listes d'outils actifs et inactifs function liste_outils() { global $outils; $id = $nb_actifs = 0; $categ = array(); $metas_caches = isset($GLOBALS['meta']['tweaks_caches'])?unserialize($GLOBALS['meta']['tweaks_caches']):array(); foreach($outils as $outil) { // liste des categories if(!isset($categ[$cat=&$outil['categorie']])) { $tmp = _T('couteauprive:categ:'.$cat); if($tmp{1}=='.') $tmp='0'.$tmp; // classement sur deux chiffres $categ[$cat] = strncmp($tmp, 'categ', 5)==0?$cat:$tmp; } // ressensement des autorisations if(!autoriser('configurer', 'outil', 0, NULL, $outil)) $outils[$outil['id']]['interdit'] = $metas_caches[$outil['id']]['cache'] = 1; } // une constante : facon rapide d'interdire des lames a la manipulation if(defined('_CS_OUTILS_CACHES')) foreach (explode(':',_CS_OUTILS_CACHES) as $o) $outils[$o]['interdit'] = $metas_caches[$o]['cache'] = 1; asort($categ); $results_actifs = $results_inactifs = ''; foreach($categ as $i=>$c) { $s_actifs = $s_inactifs = array(); foreach($outils as $outil) if($outil['categorie']==$i) { $test = $outil['actif']?'s_actifs':'s_inactifs'; $hide = !$outil['actif'] && isset($metas_caches[$outil['id']]['cache']); if(!$hide) ${$test}[] .= $outil['nom'] . '|' . $outil['index'] . '|' . $outil['id']; } $nb_actifs += count($s_actifs); foreach(array('s_actifs', 's_inactifs') as $temp) { sort(${$temp}); $reset=_request('cmd')=='resetjs'?"\ncs_EffaceCookie('sous_liste_$id');":''; $titre = " (".count(${$temp}).")"; preg_match(',[0-9. ]*(.*)$,', $c, $reg); $titre = "
$reg[1]$titre
"; $href = generer_url_ecrire(_request('exec'),"cmd=descrip&outil="); foreach(${$temp} as $j=>$v) ${$temp}[$j] = preg_replace(',^(.*)\|(.*)\|(.*)$,', '$1', $v); ${$temp} = join("
\n", ${$temp}); if(strlen(${$temp})) ${'result'.$temp} .= $titre . "
" . ${$temp} . '
'; $id++; } } $fieldset = '
' . '
' . $fieldset . 'red;">' . _T('couteauprive:outils_inactifs') . '' . $results_inactifs . '
' . '
' . '' . '
' . '' . '<->' . '

(0)

' . '' . ' X ' . '
' . '
' . $fieldset . '#22BB22;">' . _T('couteauprive:outils_actifs') . '' . $results_actifs . '' . '
'._T('couteauprive:outils_selectiontous').'
' . '
'); } // renvoie les details techniques d'un outil function detail_outil($outil_id) { global $outils; $outil = &$outils[$outil_id]; $div = '
'; if(cs_version_erreur($outil)) return $div . _T('couteauprive:erreur:version') . '
'; $details = $a = array(); foreach(array('spip_options', 'options', 'fonctions', 'js', 'jq', 'css') as $in) if(isset($outil['code:'.$in])) $a[] = _T('couteauprive:code_'.$in); if(count($a)) $details[] = _T('couteauprive:detail_inline') . ' ' . join(', ', $a); $a = array(); foreach(array('.php', '_options.php', '_fonctions.php', '.js', '.js.html', '.css', '.css.html') as $ext) if(find_in_path('outils/'.($temp=$outil_id.$ext))) $a[] = $temp; if(count($a)) $details[] = _T('couteauprive:detail_fichiers') . ' ' . join(', ', $a); if($b=cs_balises_traitees($outil_id)) $details[] = _T('couteauprive:detail_traitements') . $b; $serkeys = serialize(array_keys($outil)); if(preg_match_all(',(pipeline|pipelinecode):([a-z_]+),', $serkeys, $regs, PREG_PATTERN_ORDER)) $details[] = _T('couteauprive:detail_pipelines') . ' ' . join(', ', array_unique($regs[2])); if($outil['nb_disabled']) $details[] = _T('couteauprive:detail_disabled') . ' ' . $outil['nb_disabled']; if(isset($outil['fichiers_distants'])) { $a = array(); foreach($outil['fichiers_distants'] as $i) $a[] = basename($outil[$i]); $details[] = _T('couteauprive:detail_fichiers_distant') . ' ' . join(', ', $a); } if($outil['surcharge']) $details[] = '* ' . _T('couteauprive:detail_surcharge') . ' ' . _T('item_oui'); if(count($details)) return $div . join('
', $details) . ''; return ''; } function cs_balises_traitees($outil_id, $join=', #') { global $outils; if(preg_match_all(',traitement:([A-Z_]+),', serialize(array_keys($outils[$outil_id])), $regs, PREG_PATTERN_ORDER)) return ' #' . join($join, array_unique($regs[1])); return ''; } // renvoie les boutons eventuels d'action rapide function cs_action_rapide($outil_id, $actif=true) { include_spip('inc/texte'); $f = "{$outil_id}_action_rapide"; include_spip("outils/$f"); if(!function_exists($f)) return ''; if(strlen($f = trim($f()))) { // si inactif... if(!$actif) { if(preg_match_all(',]*>(.*?):?\s*,', $f, $regs) || preg_match_all(',]*>(.*?):?\s*

,', $f, $regs)) // on ne conserve que les ou

$f = '

  • ' . join("
  • ", $regs[1]) . '
'; } $info = '' . definir_puce() . ' ' . _T('couteauprive:action_rapide'.($actif?'':'_non')) . ""; return "
$info
$f
"; } return ''; } // gere les fichiers distants d'un outil function cs_action_fichiers_distants(&$outil, $forcer=false, $tester=false) { if(!isset($outil['fichiers_distants'])) return ''; $lib = sous_repertoire(_DIR_PLUGIN_COUTEAU_SUISSE, 'lib'); $actif = $outil['actif']; $a = array(); foreach($outil['fichiers_distants'] as $i) { $erreur = false; $res_pipe = ''; $dir = sous_repertoire($lib, $outil['id']); // retrait des arguments preg_match('/[^?]*/', basename($outil[$i]), $reg); $f = 'distant_' . $reg[0]; // 1er appel : envoi du nom du fichier $file = pipeline('fichier_distant', array('outil'=>$outil['id'], 'actif'=>$actif, 'fichier_local'=>$dir.$f)); $file = $file['fichier_local']; $f = basename($file); $size = ($forcer || @(!file_exists($file)) ? 0 : filesize($file)); if($size) $statut = _T('couteauprive:distant_present', array('date'=>cs_date_long(date('Y-m-d H:i:s', filemtime($file))))); elseif($actif || $forcer) { include_spip('inc/distant'); if($distant = recuperer_page($outil[$i])) { // 2e appel : envoi du texte $distant = pipeline('fichier_distant', array('outil'=>$outil['id'], 'fichier_local'=>$file, 'fichier_distant'=>$outil[$i], 'message'=>'', 'texte'=>$distant, 'actif'=>$actif)); $file = $distant['fichier_local']; $message = $distant['message'] . "\n_ " . _T('couteauprive:copie_vers', array('dir'=>dirname($distant['fichier_local']).'/')); $distant = $distant['texte']; if(preg_match(',\.php\d?$,', $file)) { $test = preg_replace(',^.*?\<\?php|\?\>.*?$,', '', $distant); if(!@eval("return true; $test")) $distant = false; else $distant = ecrire_fichier($file, '<'."?php\n\n".trim($test)."\n\n?".'>'); } else $distant = ecrire_fichier($file, $distant); } if($distant) $statut = ''._T('couteauprive:distant_charge').''; else $erreur = $statut = ''._T('couteauprive:distant_echoue').''; } else $erreur = $statut = _T('couteauprive:distant_inactif'); $a[] = "[{$f}->{$outil[$i]}]\n_ ".$statut.$message; } if($tester) return $a; $a = '
  • ' . join("
  • ", $a) . '
'; $b = ($actif || !$erreur)?'rss_actualiser':($erreur?'distant_charger':false); $b = $b?"\n

':''; return ajax_action_auteur('action_rapide', 'fichiers_distants', 'admin_couteau_suisse', "arg=$outil[id]|fichiers_distants&cmd=descrip#cs_action_rapide", '

' . _T('couteauprive:distant_aide') . '

' . '

' . definir_puce() . ' ' . _T('couteauprive:detail_fichiers_distant') . '

' . '
' . propre($a) . '
' . $b); } ?>