/** * callback pour la puce qui est definissable/surchargeable */ function replace_puce() { static $puce; if (!isset($puce)) { $puce = "\n<br />" . definir_puce() . " "; } return $puce; }
function definir_raccourcis_alineas() { global $ligne_horizontale; static $alineas = array(); $x = _DIR_RESTREINT ? lang_dir() : lang_dir($GLOBALS['spip_lang']); if (!isset($alineas[$x])) { $alineas[$x] = array(array("/\n(----+|____+)/S", "/\n-- */S", "/\n- */S", "/\n_ +/S"), array("\n\n" . $ligne_horizontale . "\n\n", "\n<br />— ", "\n<br />" . definir_puce() . " ", "\n<br />")); } return $alineas[$x]; }
function formulaires_ecrire_auteur_charger_dist($id_auteur, $id_article, $mail) { include_spip('inc/texte'); $puce = definir_puce(); $valeurs = array('sujet_message_auteur' => '', 'texte_message_auteur' => '', 'email_message_auteur' => isset($GLOBALS['visiteur_session']['email']) ? $GLOBALS['visiteur_session']['email'] : '', 'nobot' => ''); // id du formulaire (pour en avoir plusieurs sur une meme page) $valeurs['id'] = $id_auteur ? '_' . $id_auteur : '_ar' . $id_article; // passer l'id_auteur au squelette $valeurs['id_auteur'] = $id_auteur; $valeurs['id_article'] = $id_article; return $valeurs; }
function cs_action_fichiers_distants(&$outil, $forcer=false, $tester=false) { if(!isset($outil['fichiers_distants'])) return ''; $lib = sous_repertoire(_DIR_PLUGIN_COUTEAU_SUISSE, 'lib'); $a = array(); foreach($outil['fichiers_distants'] as $i) { $erreur = false; $res_pipe = ''; $dir = sous_repertoire($lib, $outil['id']); preg_match('/[^?]*/', basename($outil[$i]), $reg); $f = 'distant_' . $reg[0]; $file = pipeline('fichier_distant', array('outil'=>$outil['id'], '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($outil['actif'] || $forcer) { include_spip('inc/distant'); if($distant = recuperer_page($outil[$i])) { $distant = pipeline('fichier_distant', array('outil'=>$outil['id'], 'fichier_local'=>$file, 'fichier_distant'=>$outil[$i], 'message'=>'', 'texte'=>$distant, 'actif'=>$outil['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 = '<span style="color:green">'._T('couteauprive:distant_charge').'</span>'; else $erreur = $statut = '<span style="color:red">'._T('couteauprive:distant_echoue').'</span>'; } else $erreur = $statut = _T('couteauprive:distant_inactif'); $a[] = "[{$f}->{$outil[$i]}]\n_ ".$statut.$message; } if($tester) return $a; $a = '<ul style="margin:0.6em 0 0.6em 4em;"><li>' . join("</li><li style='margin-top:0.4em;'>", $a) . '</li></ul>'; $b = ($outil['actif'] || !$erreur)?'rss_actualiser':($erreur?'distant_charger':false); $b = $b?"\n<p class='cs_sobre'><input class='cs_sobre' type='submit' value=\" [" . attribut_html(_T('couteauprive:'.$b)).']" /></p>':''; return ajax_action_auteur('action_rapide', 'fichiers_distants', 'admin_couteau_suisse', "arg=$outil[id]|fichiers_distants&cmd=descrip#cs_action_rapide", '<p>' . _T('couteauprive:distant_aide') . '</p>' . '<p style="margin-top:1em"><strong>' . definir_puce() . ' ' . _T('couteauprive:detail_fichiers_distant') . '</strong></p>' . '<div>' . propre($a) . '</div>' . $b); }
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']:_T('couteauprive:'.$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'])) && 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<count($t);$i+=2) if(isset($t[$i+1]) && strlen($var=trim($t[$i+1]))) { // si la variable est presente on fabrique le input if(isset($cs_variables[$var])) { $res .= description_outil_une_variable( $index + (++$nb_variables), $outil, $var, $t[$i], $modif); $variables[] = $var; if($cs_variables[$var]['disabled']) ++$nb_disabled; } else { // probleme a regler dans config_outils.php ! $temp = $t[$i]."[$var?]"; $res .= $temp; } } else $res .= $t[$i]; $outil['variables'] = $variables; $outil['nb_variables'] = $nb_variables; $outil['nb_disabled'] = $nb_disabled; // si ce n'est qu'une simple initialisation, on sort if(!$modif) {unset($cs_input_variable); return;} // information sur les raccourcis disponibles if($a=cs_aide_raccourci($outil_)) $res .= '<p>@puce@ '._T('couteauprive:detail_raccourcis').'<br /><html>'.$a.'.</html></p>'; // 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 <variable></variable> 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("</$v>", '</div>', $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 = "<input type='submit' class='fondo' style='margin-left:1em;' value=\"".($nb_variables>1?_T('couteauprive:modifier_vars_0'):_T('bouton_modifier'))."\" />"; if($nb_variables>1) $res .= "<div class=\"cs_bouton\">$bouton</div>"; else $res = str_replace(_VAR_OUTIL, $bouton, $res); } $res = "\n<div id='cs_inner_outil-$index' >" . str_replace(array('<ul></ul>',_VAR_OUTIL),'',$res) . '</div>'; // 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<input type='hidden' value='$variables' name='variables' /><input type='hidden' value='$outil_' name='outil' />" . $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 : <q2>bla bla</q2> $res = preg_replace(',</q(\d)>,','</div>', preg_replace(',<q(\d)>,','<div class="q$1">', $res)); // remplacement des inputs successifs sans label : [[%var1%]][[->%var2%]] ou [[%var1%]][[-->%var2%]] $res = preg_replace(',(<br />)?</fieldset><fieldset>( ?<div>),', '$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'), '<sup>(*)</sup>', 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); }