X-Git-Url: http://git.cyclocoop.org/?p=velocampus%2Fweb%2Fwww.git;a=blobdiff_plain;f=www%2Fplugins%2Fauto%2Fcouteau_suisse%2Fcouteau_suisse%2Finc%2Fcs_outils.php;fp=www%2Fplugins%2Fauto%2Fcouteau_suisse%2Fcouteau_suisse%2Finc%2Fcs_outils.php;h=12a190dc882cd5f5613ed4871eebf5c361ab5d44;hp=0000000000000000000000000000000000000000;hb=80b4d3e85f78d402ed2e73f8f5d1bf4c19962eed;hpb=aaf970bf4cdaf76689ecc10609048e18d073820c diff --git a/www/plugins/auto/couteau_suisse/couteau_suisse/inc/cs_outils.php b/www/plugins/auto/couteau_suisse/couteau_suisse/inc/cs_outils.php new file mode 100644 index 0000000..12a190d --- /dev/null +++ b/www/plugins/auto/couteau_suisse/couteau_suisse/inc/cs_outils.php @@ -0,0 +1,301 @@ +,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); + +} + +?> \ No newline at end of file