X-Git-Url: https://git.cyclocoop.org/%7B%24www_url%7Dadmin/compta/comptes/ajouter.php?a=blobdiff_plain;f=www%2Fplugins%2Fauto%2Fcouteau_suisse%2Fcouteau_suisse%2Finc%2Fdescription_outil.php;fp=www%2Fplugins%2Fauto%2Fcouteau_suisse%2Fcouteau_suisse%2Finc%2Fdescription_outil.php;h=270f4cafbc7876d39a775c12abe179c3f22ec261;hb=80b4d3e85f78d402ed2e73f8f5d1bf4c19962eed;hp=0000000000000000000000000000000000000000;hpb=aaf970bf4cdaf76689ecc10609048e18d073820c;p=velocampus%2Fweb%2Fwww.git diff --git a/www/plugins/auto/couteau_suisse/couteau_suisse/inc/description_outil.php b/www/plugins/auto/couteau_suisse/couteau_suisse/inc/description_outil.php new file mode 100644 index 0000000..270f4ca --- /dev/null +++ b/www/plugins/auto/couteau_suisse/couteau_suisse/inc/description_outil.php @@ -0,0 +1,271 @@ +> '._T('couteauprive:vars_modifiees')." <$corps" + :"\n
$corps\n
\n"; +} + +// initialise une variable et ne retourne rien si !$modif +// sinon, cette fonction retourne le code html qu'il faut pour fabriquer le formulaire de l'outil proprietaire +function description_outil_une_variable($index, &$outil, &$variable, &$label, &$modif) { + global $cs_variables, $metas_vars; + $actif = $outil['actif']; + // la valeur de la variable n'est stockee dans les metas qu'au premier post + $valeur = isset($metas_vars[$variable])?$metas_vars[$variable]:cs_get_defaut($variable); + $valeur = cs_retire_guillemets($valeur); +//cs_log(" -- description_outil_une_variable($index) - Traite %$variable% = $valeur"); + $cs_variable = &$cs_variables[$variable]; + // autorisations de variables + include_spip('inc/autoriser'); + $cs_variable['disabled'] = $disab + = autoriser('configurer', 'variable', 0, NULL, array('nom'=>$cs_variable['nom'], 'outil'=>$outil))?'':' disabled="disabled"'; + // si ce n'est qu'une simple initialisation, on sort + if(!$modif) return ''; + $nombre = @$cs_variable['format']==_format_NOMBRE; + // calcul du commentaire + if($actif && isset($cs_variable['commentaire'])) { + eval('$comment = '.str_replace('%s',cs_php_format($valeur, !$nombre),$cs_variable['commentaire']).';'); + if($comment) $comment = "

$comment

"; + } else $comment = ''; + // si la variable necessite des boutons radio + if(is_array($radios = &$cs_variable['radio'])) { + if(!$actif) { + $code = _T($radios[$valeur]); + return "" + . $label . (strlen($valeur)?ucfirst($code):' -'); + } + $res = "$label '.$comment._VAR_OUTIL; + } + // si la variable necessite un select + elseif(is_array($select = &$cs_variable['select'])) { + if(!$actif) { + $code = _T($select[$valeur]); + return "" + . $label . (strlen($valeur)?ucfirst($code):' -'); + } + $res = "$label '.$comment._VAR_OUTIL; + } + // ... ou une case a cocher + elseif(isset($cs_variable['check'])) { + if(!$actif) + return $label._T($cs_variable['check'])._T($valeur?'couteauprive:2pts_oui':'couteauprive:2pts_non'); + return $label.'' + . $comment._VAR_OUTIL; + } + // ... ou un textarea ... ou une case input + if(!$actif) + return $label.''.(strlen($valeur)?nl2br(echapper_tags($valeur)):' '._T('couteauprive:variable_vide')).''; + $len = $nombre?6:0; + $width = $len?'':'style="width:98.8%;" '; + $lignes = !isset($cs_variable['lignes']) || $nombre?0:strval($cs_variable['lignes']); + return $label . + ( $lignes < 2 + // empechera SPIP de modifier le contenu des ou ' + ) . $comment._VAR_OUTIL; +} + +// callback sur les labels de zones input ; format : [[label->qq chose]] +// regexpr : ,\[\[([^][]*)->([^]]*)\]\],msS +function description_outil_input1_callback($matches) { + // pas de label : [[->qq chose]] + if(!strlen($matches[1])) return "
$matches[2]
"; + // retour a la ligne : [[-->qq chose]] + if($matches[1]=='-') return "
$matches[2]
"; + // format complet : [[label->qq chose]] + return "
$matches[1]
$matches[2]
"; +} + +// callback sur les labels de zones input en utilisant _T('couteauprive:label:variable') ; format [[qq chose %variable% qq chose]] +// regexpr : ,\[\[((.*?)%([a-zA-Z_][a-zA-Z0-9_]*)%(.*?))\]\],msS +// ici, renseignement de la globale $cs_input_variable +function description_outil_input2_callback($matches) { + global $cs_input_variable; + $cs_input_variable[] = $matches[3]; + return "
<:label:$matches[3]:>
$matches[1]
"; +} + +function description_outil_liens_callback($matches) { + global $outils; + $nom = isset($outils[$matches[1]]['nom'])?$outils[$matches[1]]['nom']:couteauprive_T($matches[1].':nom'); + if(strpos($nom, '<:')!==false) $nom = preg_replace(',<:([:a-z0-9_-]+):>,ie', '_T("$1")', $nom); + return '$nom"; +} + +function description_outil_label_callback($matches) { + global $cs_variables; + return isset($cs_variables[$matches[1]]['label'])?$cs_variables[$matches[1]]['label']:_T('couteauprive:label:'.$matches[1]); +} + +function cs_input_variable_callback($matches) { + $a = ' valeur_'.$matches[1].'_'; + $tmp = str_replace('/',$a, $matches[3]); + return "
"; +} + +// remplacement des liens vers un autre outil +function description_outil_liens($res) { + return strpos($res,'[.->')===false?$res + :preg_replace_callback(',\[\.->([a-zA-Z_][a-zA-Z0-9_-]*)\],', 'description_outil_liens_callback', $res); +} + +// renvoie la description de $outil_ : toutes les %variables% ont ete remplacees par le code adequat +function inc_description_outil_dist($outil_, $url_self, $modif=false) { + global $outils, $cs_variables, $metas_vars; + $outil = &$outils[$outil_]; + $actif = $outil['actif']; + $index = $outil['index']; +//cs_log("inc_description_outil_dist() - Parse la description de '$outil_'"); + // la description de base est a priori dans le fichier de langue + $descrip = isset($outil['description'])?$outil['description']:couteauprive_T($outil['id'].':description'); + // ajout des variables liees a la barre typo + if(defined('_DIR_PLUGIN_PORTE_PLUME') + && ( isset($outil['pipeline:porte_plume_barre_pre_charger']) || isset($outil['pipeline:porte_plume_cs_pre_charger']) + || isset($outil['pipelinecode:porte_plume_barre_pre_charger']) || isset($outil['pipelinecode:porte_plume_cs_pre_charger'])) + && count($barres = cs_pp_liste_barres())) { + $descrip .= "\n\n@puce@ "._T('couteauprive:barres_typo_intro'); + $i=0; + foreach($barres as $f=>$b) { + $nom = "pp_{$b}_$outil[id]"; + $descrip .= ($i?'[[->':'[[')."%$nom%]]"; + add_variable( array( + 'nom' => $nom, + 'check' => ($b=='edition' || $b=='forum')?'couteauprive:barres_typo_'.$b:$f, + 'defaut' => 1, // par defaut les boutons seront toujours inseres + 'label' => $i++?NULL:'@_CS_CHOIX@', + )); + } + } + if (strpos($descrip, '<:')!==false) { + if(!isset($outil['perso'])) + // lames natives : reconstitution d'une description eventuellement morcelee + // exemple : <:mon_outil:3:> est remplace par _T('couteauprive:mon_outil:description3') + $descrip = preg_replace_callback(',<:([a-z_][a-z0-9_-]*):([0-9]*):>,i', + create_function('$m','return _T("couteauprive:$m[1]:description$m[2]");'), $descrip); + // chaines de langue personnalisees + $descrip = preg_replace(',<:([:a-z0-9_-]+):>,ie', '_T("$1")', $descrip); + } + // envoi de la description en pipeline +# list(,$descrip) = pipeline('init_description_outil', array($outil_, $descrip)); + // globale pour la callback description_outil_input2_callback + global $cs_input_variable; $cs_input_variable = array(); + // remplacement des zones input de format [[label->qq chose]] + $descrip = preg_replace_callback(',\[\[([^][]*)->([^]]*)\]\],msS', 'description_outil_input1_callback' , $descrip); + // remplacement des zones input de format [[qq chose %variable% qq chose]] en utilisant _T('couteauprive:label:variable') comme label + // la fonction description_outil_input2_callback renseigne la globale $cs_input_variable + $descrip = preg_replace_callback(',\[\[((.*?)%([a-zA-Z_][a-zA-Z0-9_]*)%(.*?))\]\],msS', 'description_outil_input2_callback', $descrip); + + // initialisation et remplacement des variables de format : %variable% + $t = preg_split(',%([a-zA-Z_][a-zA-Z0-9_]*)%,', $descrip, -1, PREG_SPLIT_DELIM_CAPTURE); + $res = ''; + $nb_disabled = $nb_variables = 0; $variables = array(); + for($i=0;$i'.$a.'.

'; + // envoi de la description courante en pipeline + include_spip("cout_define"); + $res = pipeline('pre_description_outil', array('outil'=>$outil_, 'texte'=>$res, 'actif'=>$actif)); + $res = $res['texte']; + // recherche des blocs eventuels associes pour du masquage/demasquage + foreach($cs_input_variable as $v) { + $res = preg_replace_callback(",<($v)\s+valeur=(['\"])(.*?)\\2\s*>,", 'cs_input_variable_callback', $res); + $res = str_replace("", '
', $res); + } + unset($cs_input_variable); + // bouton 'Modifier' : en dessous du texte s'il y a plusieurs variables, a la place de _VAR_OUTIL s'il n'y en a qu'une. + // attention : on ne peut pas modifier les variables si l'outil est inactif + if($actif) { + $bouton = "1?_T('couteauprive:modifier_vars_0'):_T('bouton_modifier'))."\" />"; + if($nb_variables>1) $res .= "
$bouton
"; + else $res = str_replace(_VAR_OUTIL, $bouton, $res); + } + $res = "\n
" . str_replace(array('',_VAR_OUTIL),'',$res) . '
'; + // si des variables sont trouvees ? + if($nb_variables) { + $variables = urlencode(serialize($variables)); + // syntaxe : ajax_action_auteur($action, $id, $script, $args='', $corps=false, $args_ajax='', $fct_ajax='') + $res = ajax_action_auteur('description_outil', $index, $url_self, "modif=oui&cmd=descrip&outil={$outil['id']}", + "\n" . $res); + } +//cs_log(" FIN : inc_description_outil_dist({$outil['id']}) - {$outil['nb_variables']} variables(s) trouvee(s)"); + // remplacement en deux passes des labels en doublon + for($i=0;$i<2;$i++) if(strpos($res,'<:label:')!==false) + $res = preg_replace_callback(',<:label:([a-zA-Z_][a-zA-Z0-9_-]*):>,', 'description_outil_label_callback', $res); + // remplacement des blocs avec style. ex : bla bla + $res = preg_replace(',,','', preg_replace(',,','
', $res)); + // remplacement des inputs successifs sans label : [[%var1%]][[->%var2%]] ou [[%var1%]][[-->%var2%]] + $res = preg_replace(',(
)?
( ?
),', '$2', $res); + // remplacement de diverses constantes + $res = str_replace(array('@puce@', '@_CS_CHOIX@','@_CS_ASTER@','@_CS_PLUGIN_JQUERY192@'), + array(definir_puce(), _T('couteauprive:votre_choix'), '(*)', defined('_SPIP19300')?'':_T('couteauprive:detail_jquery3')), $res); + // remplacement des constantes qui restent de forme @_CS_XXXX@ + if(strpos($res,'@_CS')!==false) + $res = preg_replace_callback(',@(_CS_[a-zA-Z0-9_]+)@,', + create_function('$matches','return defined($matches[1])?constant($matches[1]):(\' (\'._T(\'couteauprive:outil_inactif\').\')\');'), $res); + // remplacement des liens vers un autre outil + $res = description_outil_liens($res); + + // envoi de la description finale en pipeline +# list(,$res) = pipeline('post_description_outil', array($outil_, $res)); + return cs_ajax_outil_greffe("description_outil-$index", $res); +} +?> \ No newline at end of file