WP File Manager
Current Path:
/
home
/
translil
/
www
/
amitram
/
tmp
/
couteau-suisse
/
Name
Action
..
.ok
Edit
b9e228d98bde0ce50db0ee2ddb9bdfc4.html
Edit
config.php
Edit
header_js.html
Edit
header_js_prive.html
Edit
mes_fonctions.php
Edit
mes_options.php
Edit
mes_outils.php
Edit
mes_spip_options.php
Edit
pipelines.php
Edit
Editing: mes_fonctions.php
<?php // Code d'inclusion pour le plugin 'Couteau Suisse' ++$GLOBALS['cs_fonctions']; // Ce fichier contient des fonctions toujours compilees dans tmp/couteau-suisse/mes_fonctions.php if (!defined("_ECRIRE_INC_VERSION")) return; // compatibilite SPIP < 2.00 if(!defined('_SPIP19300')) { // #VAL{x} renvoie 'x' (permet d'appliquer un filtre a une chaine) // Attention #VAL{1,2} renvoie '1', indiquer #VAL{'1,2'} function balise_VAL($p){ $p->code = interprete_argument_balise(1,$p); if (!strlen($p->code)) $p->code = "''"; $p->interdire_scripts = false; return $p; } if(!function_exists('oui')) { function oui($code) { return $code?' ':''; } } if(!function_exists('non')) { function non($code) { return $code?'':' '; } } } // fonction appelant une liste de fonctions qui permettent de nettoyer un texte original de ses raccourcis indesirables function cs_introduire($texte) { // liste de filtres qui sert a la balise #INTRODUCTION if(!is_array($GLOBALS['cs_introduire'])) return $texte; $liste = array_unique($GLOBALS['cs_introduire']); foreach($liste as $f) if (function_exists($f)) $texte = $f($texte); return $texte; } // Fonction propre() sans paragraphage function cs_propre($texte) { include_spip('inc/texte'); return trim(PtoBR(propre($texte))); } // Filtre creant un lien <a> sur un texte // Exemple d'utilisation : [(#EMAIL*|cs_lien{#NOM})] function cs_lien($lien, $texte='') { if(!$lien) return $texte; return cs_propre("[{$texte}->{$lien}]"); } // filtre pour ajouter un <span> autour d'un texte function cs_span($texte, $attr='') { return "<span $attr>$texte</span>"; } // Controle (basique!) des 3 balises usuelles p|div|span eventuellement coupees // Attention : simple traitement pour des balises non imbriquees function cs_safebalises($texte) { $texte = trim($texte); // ouvre/supprime la premiere balise trouvee fermee (attention aux modeles SPIP) if(preg_match(',^(.*)</([a-z]+)>,Ums', $texte, $m) && !preg_match(",<$m[2][ >],", $m[1])) $texte = strlen($m[1])?"<$m[2]>$texte":trim(substr($texte, strlen($m[2])+3)); // referme/supprime la derniere balise laissee ouverte (attention aux modeles SPIP) if(preg_match(',^(.*)[ >]([a-z]+)<,Ums', $rev = strrev($texte), $m) && !preg_match(",>$m[2]/<,", $m[1])) $texte = strrev(strlen($m[1])?">$m[2]/<$rev":trim(substr($rev, strlen($m[2])+2))); // balises <p|span|div> a traiter foreach(array('span', 'div', 'p') as $b) { // ouvrante manquante if(($fin = strpos($texte, "</$b>")) !== false) if(!preg_match(",<{$b}[ >],", substr($texte, 0, $fin))) $texte = "<$b>$texte"; // fermante manquante $texte = strrev($texte); if(preg_match(',[ >]'.strrev("<{$b}").',', $texte, $reg)) { $fin = strpos(substr($texte, 0, $deb = strpos($texte, $reg[0])), strrev("</$b>")); if($fin===false || $fin>$deb) $texte = strrev("</$b>").$texte; } $texte = strrev($texte); } return $texte; } // fonction de suppression de notes. Utile pour #CS_SOMMAIRE ou #CS_DECOUPE function cs_supprime_notes($texte) { return preg_replace(', *\[\[(.*?)\]\],msS', '', $texte); } // filtre appliquant les traitements SPIP d'un champ (et eventuellement d'un type d'objet) sur un texte // (voir la fonction champs_traitements($p) dans : public/references.php) // => permet d'utiliser les balises etoilees : #TEXTE*|mon_filtre|cs_traitements{TEXTE,articles} // ce mecanisme est a preferer au traditionnel #TEXTE*|mon_filtre|propre // cs_traitements() consulte simplement la globale $table_des_traitements et applique le traitement adequat // $exclusions est une chaine ou un tableau de filtres a exclure du traitement function cs_traitements($texte, $nom_champ='NULL', $type_objet='NULL', $exclusions=NULL) { global $table_des_traitements; if(!isset($table_des_traitements[$nom_champ])) return $texte; $ps = $table_des_traitements[$nom_champ]; if(is_array($ps)) $ps = $ps[isset($ps[$type_objet]) ? $type_objet : 0]; if(!$ps) return $texte; // retirer les filtres a exclure if($exclusions!==NULL) $ps = str_replace($exclusions, 'cs_noop', $ps); // remplacer le placeholder %s par le texte fourni eval('$texte=' . str_replace('%s', '$texte', $ps) . ';'); return $texte; } function cs_noop($t='',$a=NULL,$b=NULL,$c=NULL) { return $t; } // liste des docs sur spip-contrib (outils actifs) function cs_liste_contribs($coupe = 999, $join = "</li><li>") { global $metas_outils; $contribs = array(); foreach($metas_outils as $o=>$v) if(isset($v['contrib']) && isset($v['actif']) && $v['actif']) $contribs[] = '[' . couper(couteauprive_T($o.':nom'), $coupe) . '->' . (is_numeric($v['contrib']) ?_URL_CONTRIB.$v['contrib']:$v['contrib']) . ']'; sort($contribs); return '[{{' . couteauprive_T('docgen') . '}}->' . _URL_CONTRIB . '2166]' . $join . '[{{' . couteauprive_T('docwiki') . '}}->' . _URL_CONTRIB . '2793]' . $join . join($join, $contribs); } // renvoie un champ d'un objet en base function cs_champ_sql($id, $champ='texte', $objet='article') { // Utiliser la bonne requete en fonction de la version de SPIP if(function_exists('sql_getfetsel')) { // SPIP 2.0 // TODO : fonctions SPIP pour trouver la table et l'id_objet if($r = sql_getfetsel($champ, 'spip_'.$objet.'s', 'id_'.$objet.'='.intval($id))) return $r; } else { if($r = spip_query('SELECT '.$champ.' FROM spip_'.$objet.'s WHERE id_'.$objet.'='.intval($id))) // s'il existe un champ, on le retourne if($row = spip_fetch_array($r)) return $row[$champ]; } // sinon rien ! return ''; } @define('_INTRODUCTION_CODE', '@@CS_SUITE@@'); // compatibilite avec SPIP 1.92 et anterieurs $GLOBALS['cs_couper_intro'] = 'couper_intro'; if (!defined('_SPIP19300')) { $GLOBALS['cs_couper_intro'] = 'couper_intro2'; function couper_intro2($texte, $long, $suite) { $texte = couper_intro($texte, $long); $i = strpos($texte, ' (...)'); if (strlen($texte) - $i == 11) $texte = substr($texte, 0, $i) . _INTRODUCTION_CODE; return $texte; } function chapo_redirigetil($chapo) { return $chapo && $chapo[0] == '='; } function objet_type($table_objet){ return preg_replace(',^spip_|s$,', '', $table_objet); } } // compatibilite avec SPIP 2.0 : la balise a fortement change !! >> TODO // la fonction couper_intro a disparu. // voir function filtre_introduction_dist if (defined('_SPIP19300')) { $GLOBALS['cs_couper_intro'] = 'couper_intro3'; function couper_intro3($texte, $long, $suite) { $texte = extraire_multi(preg_replace(",(</?)intro>,i", "\\1intro>", $texte)); // minuscules $intro = ''; while ($fin = strpos($texte, "</intro>")) { $zone = substr($texte, 0, $fin); $texte = substr($texte, $fin + strlen("</intro>")); if ($deb = strpos($zone, "<intro>") OR substr($zone, 0, 7) == "<intro>") $zone = substr($zone, $deb + 7); $intro .= $zone; } $texte = nettoyer_raccourcis_typo($intro ? $intro : $texte); return PtoBR(traiter_raccourcis(preg_replace(',([|]\s*)+,S', '; ', couper($texte, $long, _INTRODUCTION_CODE)))); } } function remplace_points_de_suite($texte, $id, $racc) { if (strpos($texte, _INTRODUCTION_CODE) === false) return $texte; // des points de suite bien propres @define('_INTRODUCTION_SUITE', ' (...)'); $intro_suite = cs_propre(_INTRODUCTION_SUITE); // si les points de suite sont cliquables if ($id && _INTRODUCTION_LIEN == 1) { $url = (defined('_SPIP19300') && test_espace_prive()) ?generer_url_entite_absolue($id, $racc, '', '', true):"$racc$id"; $intro_suite = strncmp($intro_suite, '<br />', 6)===0 ?'<br />'.cs_lien($url, substr($intro_suite, 6)) :' '.cs_lien($url, $intro_suite); $intro_suite = inserer_attribut($intro_suite, 'class', extraire_attribut($intro_suite,'class') . ' pts_suite'); } return str_replace(_INTRODUCTION_CODE, $intro_suite, $texte); } // lgr>0 : aucun parametre, donc lgr par defaut // lgr<0 : parametre #INTRODUCTION{longeur} // lgr=0 : pas possible // TODO : $connect est pour SPIP 2.0 function cs_introduction($texte, $descriptif, $lgr, $id, $racc, $connect) { @define('_INTRODUCTION_LGR', 100); // fonction couper_intro $couper = $GLOBALS['cs_couper_intro']; if (strlen($descriptif)) # si descriptif contient juste des espaces ca produit une intro vide, # c'est une fonctionnalite, pas un bug // ici le descriptif est coupe s'il est trop long $texte = $lgr<0?propre($couper($descriptif, -$lgr, _INTRODUCTION_CODE)):propre($descriptif); else { // pas de maths dans l'intro... $texte = preg_replace(',<math>.*</math>,imsU', '', $texte); // on coupe proprement... $lgr = $lgr>0?round($lgr*_INTRODUCTION_LGR/100):-$lgr; $texte = cs_propre(supprimer_tags($couper(cs_introduire($texte), $lgr, _INTRODUCTION_CODE))); } // si les points de suite ont ete ajoutes return remplace_points_de_suite($texte, $id, $racc); } // introduction() if (!function_exists('balise_INTRODUCTION')) { // #INTRODUCTION_SPIP (pour tests) function balise_INTRODUCTION_SPIP($p) { return balise_INTRODUCTION_dist($p); } include_spip('public/interfaces'); global $table_des_traitements; // INTRODUCTION_SPIP est une INTRODUCTION ! if (!isset($table_des_traitements['INTRODUCTION_SPIP'])) $table_des_traitements['INTRODUCTION_SPIP'] = $table_des_traitements['INTRODUCTION']; // #INTRODUCTION function balise_INTRODUCTION($p) { $type = $p->type_requete; $_texte = champ_sql('texte', $p); $_descriptif = "''"; $_id = 0; $_lgr = "600"; switch ($type) { case 'articles': $_chapo = champ_sql('chapo', $p); $_descriptif = champ_sql('descriptif', $p); $_texte = defined('_SPIP30000') ?"strlen($_descriptif) ? '' : $_chapo . \"\\n\\n\" . $_texte" :"(strlen($_descriptif) OR chapo_redirigetil($_chapo)) ? '' : $_chapo . \"\\n\\n\" . $_texte"; $_lgr = "500"; break; case 'rubriques': $_descriptif = champ_sql('descriptif', $p); break; case 'breves': $_lgr = "300"; break; } // longueur en parametre ? if(($v = interprete_argument_balise(1,$p))!==NULL) $_lgr = "-intval($v)" ; $_id = champ_sql(id_table_objet($racc = objet_type($type)), $p); $p->code = "cs_introduction($_texte, $_descriptif, $_lgr, $_id, '$racc', \$connect)"; #$p->interdire_scripts = true; $p->etoile = '*'; // propre est deja fait dans le calcul de l'intro return $p; } } //!function_exists('balise_INTRODUCTION') else spip_log("Erreur - balise_INTRODUCTION() existe deja et ne peut pas etre surchargee par le Couteau Suisse !"); // filtre 'titre_rubrique' a utiliser sur #ID_RUBRIQUE d'un objet ou #ID_PARENT d'une rubrique // Ex : : <BOUCLE_a(ARTICLES)>[(#ID_RUBRIQUE|titre_rubrique)]</BOUCLE_a> // Ex : : <BOUCLE_b(BREVES)>[(#ID_RUBRIQUE|titre_rubrique)]</BOUCLE_b> // Ex : : <BOUCLE_r(RUBRIQUES)>[(#ID_PARENT|titre_rubrique)]</BOUCLE_r> // // filtre 'titre_groupe' a utiliser sur #ID_GROUPE d'un mot-clef // Ex : : <BOUCLE_m(MOTS)>[(#ID_GROUPE|titre_groupe)]</BOUCLE_m> if(defined('_SPIP19300')) { function filtre_titre_rubrique($id_rubrique, $table='rubriques', $id='id_rubrique') { return cs_titre_id($id_rubrique, $table, $id); } function filtre_titre_groupe($id_mot, $table='groupes_mots', $id='id_groupe') { return cs_titre_id($id_mot, $table, $id); } } else { function titre_rubrique($id_rubrique, $table='rubriques', $id='id_rubrique') { return cs_titre_id($id_rubrique, $table, $id); } function titre_groupe($id_mot, $table='groupes_mots', $id='id_groupe') { return cs_titre_id($id_mot, $table, $id); } } // filtre 'titre_id', s'applique aux #ID_OBJET // Renvoie le titre trouve dans la $table_parent, la ou $champ_id = $id function cs_titre_id($id, $table_parent='rubriques', $champ_id='id_rubrique') { // spip_log("#TITRE_PARENT SELECTED FROM spip_$table_parent WHERE $champ_id=$id".(!$id?' : requete non executee':'')); // retour nul si pas de parent a priori if(!$id) return ''; return cs_titre_sql($table_parent, "$champ_id=$id"); } // choix du champ qui correspond a un titre function cs_titre_champ($table) { return $table=='auteurs'?'nom':'titre'; } // cherche le titre/nom d'un objet en base function cs_titre_sql($table, $where) { $titre = cs_titre_champ($table); // Utiliser la bonne requete en fonction de la version de SPIP if(function_exists('sql_getfetsel') && function_exists('table_objet_sql')) { // SPIP 2.0 if($r = sql_getfetsel($titre, table_objet_sql($table), $where)) return $r; } else { if($r = spip_query("SELECT $titre FROM spip_$table WHERE $where")) // s'il existe un champ, on le retourne if($row = spip_fetch_array($r)) return $row[$titre]; } // sinon, rien ! return ''; } // Rubrique parente de tout objet possedant un 'id_rubrique' ou groupe de mot-clef function balise_TITRE_PARENT_dist($p) { // examen du contexte switch ($p->type_requete) { case 'rubriques': $table_parent = 'rubriques'; $champ_parent = 'id_rubrique'; $id = 'id_parent'; break; case 'mots': $table_parent = 'groupes_mots'; $id = $champ_parent = 'id_groupe'; break; default: $table_parent = 'rubriques'; $id = $champ_parent = 'id_rubrique'; break; } // id de l'objet a trouver pour retourner son titre $id = champ_sql($id, $p); // le code php a executer $p->code = "cs_titre_id(intval($id), '$table_parent', '$champ_parent')"; $p->interdire_scripts = false; return $p; } // juste le groupe d'un mot-clef function balise_TITRE_GROUPE_dist($p) { $p->code = "''"; $p->interdire_scripts = false; return $p->type_requete=='mots'?balise_TITRE_PARENT_dist($p):$p; } if(defined('_SPIP19300') && defined('_PARENTS_ETENDUS')) { // recherche de la table associee a l'objet function cs_table_objet($objet) { switch($objet) { case 'trad': return 'articles'; case 'thread': /*case 'forum':*/ return 'forum'; case 'secteur': return 'rubriques'; # case 'import': return ''; // a quoi ca sert ? } return table_objet($objet); } // balise #TITRE_QQCHOSE // voire #TITRE_QQCHOSE{id_qqchose} function balise_TITRE__dist($p) { $champ = $p->nom_champ; if ($f = charger_fonction($champ, 'balise', true)) return $f($p); $code = champ_sql($champ, $p); if (strpos($code, '@$Pile[0]') !== false) { // le champ est absent de la base, on peut calculer la balise preg_match(",^TITRE_([A-Z_]+)?$,i", $champ, $regs); $objet = strtolower($regs[1]); $table = cs_table_objet($objet); $champ_parent = id_table_objet($table); // id de l'objet a trouver pour retourner son titre $id = ($v = interprete_argument_balise(1,$p))!==NULL ? $v : champ_sql('id_'.$objet, $p); // le code php a executer, avant de le passer aux traitements $p->code = cs_titre_traitements("cs_titre_id(intval($id), '$table', '$champ_parent')", $table); } else // puisque le champ est present dans la base, on le renvoie $p->code = champ_sql($champ, $p); $p->interdire_scripts = false; return $p; } // voir la fonction champs_traitements($p) dans : public/refereces.php function cs_titre_traitements($code, $table) { global $table_des_traitements; $ps = $table_des_traitements[strtoupper(cs_titre_champ($table))]; if (is_array($ps)) $ps = $ps[isset($ps[$table])?$table:0]; if (!$ps) return $code; // champs sensibles if(in_array($table, array('messages', 'forums', 'signatures', 'syndic_articles'))) $ps = "safehtml($ps)"; // remplacement final return str_replace('%s', $code, $ps); } } // if(defined('_SPIP19300')) include_spip('public/interfaces'); global $table_des_traitements; // TITRE_PARENT et TITRE_GROUPE sont des TITREs ! if (!isset($table_des_traitements['TITRE_PARENT'])) $table_des_traitements['TITRE_PARENT'] = $table_des_traitements['TITRE']; if (!isset($table_des_traitements['TITRE_GROUPE'])) $table_des_traitements['TITRE_GROUPE'] = $table_des_traitements['TITRE']; function balise_SET__dist($p) { $champ = $p->nom_champ; preg_match(",^SET_([A-Z_]+)?$,i", $champ, $filtre); $filtre = strtolower($filtre[1]); $filtre2 = chercher_filtre($filtre); if (!$filtre2) { $err_b_s_a = array('zbug_erreur_filtre', array('filtre' => $filtre)); erreur_squelette($err_b_s_a, $p); } else { $nom = interprete_argument_balise(1,$p); if (!$nom) { $err_b_s_a = array('zbug_balise_sans_argument', array('balise' => $champ)); erreur_squelette($err_b_s_a, $p); } else { $i = 1; $args = array(); while(($a = interprete_argument_balise(++$i,$p)) != NULL) $args[] = $a; $get = function_exists('balise_GET') ? 'balise_GET' : 'balise_GET_dist'; $q = $p; $q->param[0] = array($q->param[0][0], $q->param[0][1]); $get = $get($q); $filtre2 .= '('.$get->code.','.join(",", $args).')'; $p->code = "vide(\$Pile['vars'][$nom] = $filtre2)"; } } $p->interdire_scripts = false; // la balise ne renvoie rien return $p; } ?>