X-Git-Url: http://git.cyclocoop.org/?p=velocampus%2Fweb%2Fwww.git;a=blobdiff_plain;f=www%2Fplugins%2Fauto%2Fcouteau_suisse%2Fcouteau_suisse%2Foutils%2Fdecoupe_fonctions.php;fp=www%2Fplugins%2Fauto%2Fcouteau_suisse%2Fcouteau_suisse%2Foutils%2Fdecoupe_fonctions.php;h=70532109ba75efa54a89b7058d981bc4d127ec45;hp=0000000000000000000000000000000000000000;hb=80b4d3e85f78d402ed2e73f8f5d1bf4c19962eed;hpb=aaf970bf4cdaf76689ecc10609048e18d073820c diff --git a/www/plugins/auto/couteau_suisse/couteau_suisse/outils/decoupe_fonctions.php b/www/plugins/auto/couteau_suisse/couteau_suisse/outils/decoupe_fonctions.php new file mode 100644 index 0000000..7053210 --- /dev/null +++ b/www/plugins/auto/couteau_suisse/couteau_suisse/outils/decoupe_fonctions.php @@ -0,0 +1,269 @@ +

'); +define('_onglets_CONTENU2', '

'); // sans le ! +define('_onglets_DEBUT', '
'); +define('_onglets_REGEXPR', ',(.*?),ms'); + +// aide le Couteau Suisse a calculer la balise #INTRODUCTION +$GLOBALS['cs_introduire'][] = 'decoupe_nettoyer_raccourcis'; + +// filtre ajoutant 'artpage' a l'url +function decoupe_url($url, $page, $num_pages) { + return parametre_url($url, 'artpage',$page>1?"{$page}-{$num_pages}":''); +} + +function onglets_callback($matches) { + // cas des onglets imbriques + if (strpos($matches[2], '   

'); + $t = preg_split(',(\n\n|\r\n\r\n|\r\r),', $matches[2], 2); + $texte = preg_replace(','.preg_quote(_decoupe_SEPARATEUR, ',').'(.*?)(\n\n|\r\n\r\n|\r\r),ms', _decoupe_FILET."

$1

\n\n", $t[1]); + // on sait jamais... + str_replace(_decoupe_SEPARATEUR, _decoupe_FILET, $texte); + return '

' . textebrut(echappe_retour($t[0],'CS')) . "

\n\n$texte\n\n
"; + } + $onglets = $contenus = array(); + $pages = explode(_decoupe_SEPARATEUR, $matches[2]); + foreach ($pages as $p) { + $t = preg_split(',(\n\n|\r\n\r\n|\r\r),', $p, 2); + $t = array(trim(textebrut(nettoyer_raccourcis_typo(echappe_retour($t[0],'CS')))), cs_safebalises($t[1])); + if(strlen($t[0].$t[1])) $contenus[] = _onglets_CONTENU.$t[0]._onglets_CONTENU2."
\n\n".$t[1]."\n\n
"; + } + return _onglets_DEBUT.join('', $contenus).''._onglets_FIN; +} + +// fonction appellee sur les parties du texte non comprises entre les balises : html|code|cadre|frame|script|acronym|cite +function decouper_en_onglets_rempl(&$texte) { + // compatibilite avec la syntaxe de Pierre Troll + if (strpos($texte, '', '', $texte); + $texte = preg_replace(',]*\|titre=([^>]*)>\s*,', "\\1\n\n", $texte); + $texte = preg_replace(',\s*]*)>\s*,', "\n\n++++\\1\n\n", $texte); + } + // il faut un callback pour analyser l'interieur du texte + return preg_replace_callback(_onglets_REGEXPR, 'onglets_callback', $texte); +} + +// fonction appellee sur les parties du textes non comprises entre les balises : html|code|cadre|frame|script|acronym|cite +function decouper_en_pages_rempl($texte, $pagination_seule=false) { + // un seul id par page... + static $id_decoupe = ''; + + // si pas de separateur, on sort + if (strpos($texte, _decoupe_SEPARATEUR)===false) return $pagination_seule?'':$texte; + + // au cas ou on ne veuille pas de decoupe, on remplace les '++++' par un filet. + if (defined('_CS_PRINT') && !$pagination_seule) { + @define(_decoupe_FILET, '

   

'); + return str_replace(_decoupe_SEPARATEUR, _decoupe_FILET, $texte); + } + // recherche du sommaire s'il existe + if (defined('_sommaire_REM') && (substr_count($texte, _sommaire_REM)==2)) { + $pages = explode(_sommaire_REM, $texte); + $sommaire = $pages[0].$pages[1]; + $texte = $pages[2]; + } else $sommaire = ''; + + // traitement des pages + $pages = explode(_decoupe_SEPARATEUR, $texte); + $num_pages = count($pages); + if ($num_pages == 1) return $pagination_seule?'':$texte; + $artpage = max(intval(artpage()), 1); + $artpage = min($artpage, $num_pages); +/* + // si numero illegal ou si var_recherche existe, alors renvoyer toutes les pages, separees par une ligne
. + // la surbrillance pourra alors fonctionner correctement. + if (strlen($_GET['var_recherche']) || $artpage < 1 || $artpage > $num_pages) + return join("
", $pages); +*/ + + // si la balise #CS_DECOUPE est utilisee on renvoie le texte sans pagination + if (!$pagination_seule) { + // page demandee + $page = cs_safebalises($pages[$artpage-1]); + if (isset($_GET['decoupe_recherche'])) { + include_spip('inc/surligne'); + $page = surligner_mots($page, $_GET['decoupe_recherche']); + } + if (defined('_decoupe_BALISE')) return $sommaire.$page; + } + + $self = nettoyer_uri();//self();//$GLOBALS['REQUEST_URI']; + + // liens des differentes pages sous forme : 1 2 3 4 + $milieu = ''; + for ($i = 1; $i <= $num_pages; $i++) { + $page_ = supprimer_tags(cs_safebalises(cs_introduire(echappe_retour($pages[$i-1],'CS')))); + $title = preg_split("/[\r\n]+/", trim($page_), 2); + $title = attribut_html(/*propre*/(couper($title[0], _decoupe_NB_CARACTERES)));//.' (...)'; + $milieu .= recuperer_fond('fonds/decoupe_item', array( + 'page'=>$i, 'artpage'=>$artpage, 'derniere_page'=>$num_pages, + 'title_page'=>_T('couteau:page_lien', array('page' => $i, 'title' => $title)), + 'self' =>$self, + )); + } + + // pagination finale + $pagination = recuperer_fond('fonds/decoupe', array( + 'artpage'=>$artpage, 'derniere_page'=>$num_pages, + 'items'=>$milieu, + 'self' =>$self, + )); + if ($pagination_seule) { + if(trim($pagination)=="") return ""; + $pagination = "\n"; + return $pagination; + } + // ici $pagination_seule est false, $page est definie + $pagination1 = "\n"; + $pagination2 = "\n"; + $id_decoupe++; + return $sommaire.$pagination1.$page.$pagination2; +} + +// supprime les notes devenues orphelines +function decoupe_notes_orphelines(&$texte) { + if($GLOBALS['les_notes']=='') return; + $notes = $GLOBALS['les_notes']; +/* if(function_exists('tester_variable')) tester_variable('ouvre_note', '['); // tester_variable() depreciee sous SPIP 2.0 + else*/ if (!isset($GLOBALS['ouvre_note'])) $GLOBALS['ouvre_note'] = '['; + $ouvre = preg_quote($GLOBALS['ouvre_note'],','); + $appel = ",]*>.*?$ouvre]*(?:name|id)=[\"']nb([0-9]+)[\"'] class=[\"']spip_note[\"'] [^>]+>[^<]+.*?

,s"; + preg_match_all($appel, $GLOBALS['les_notes'], $tableau); + for($i=0;$icode = "calcul_balise_onglet($arg,1)"; + $p->interdire_scripts = false; + return $p; +} +function balise_ONGLETS_TITRE($p) { + $arg = sinon(interprete_argument_balise(1,$p),'??'); + $p->code = "calcul_balise_onglet($arg,2)"; + $p->interdire_scripts = false; + return $p; +} +function balise_ONGLETS_FIN($p) { + $p->code = "calcul_balise_onglet('',3)"; + $p->interdire_scripts = false; + return $p; +} +function calcul_balise_onglet($arg, $type) { + /* dans un onglet principal (non imbrique), on peut omettre #ONGLETS_DEBUT : pratique a l'interieur d'une boucle + Sinon il faut jouer avec #COMPTEUR_BOUCLE : + + [(#COMPTEUR_BOUCLE|=={1}|?{' '})#ONGLETS_DEBUT{#NOM_SITE}] + [(#COMPTEUR_BOUCLE|>{1}|?{' '})#ONGLETS_TITRE{#NOM_SITE}] + (...) + + */ + static $onglets_stade; + if($type==2 && !isset($onglets_stade)) $type = 1; + switch($type) { + // #ONGLETS_DEBUT + case 1:$onglets_stade=1; return _onglets_DEBUT._onglets_CONTENU.$arg._onglets_CONTENU2; + // #ONGLETS_TITRE + case 2:$onglets_stade=1; return ''._onglets_CONTENU.$arg._onglets_CONTENU2; + // #ONGLETS_FIN + case 3:unset($onglets_stade); return ''; + } +} + +// decode le parametre artpage=page-total +// attention, artpage n'est pas toujours present +function artpage($t=false, $index=0) { + if($t===false) $t=_request('artpage'); + $t=strlen($t)?explode('-', $t, 2):array('1','0'); + return $t[$index]; +} +function artpage_fin($t=false) { + if($t===false) $t=_request('artpage'); + $t=strlen($t)?explode('-', $t, 2):array('1','0'); + return $t[0]>0 && $t[0]==$t[1]; +} +function artpage_debut($t=false) { + return artpage($t)==1; +} + +// si on veut la balise #CS_DECOUPE (pagination uniquement) +if (defined('_decoupe_BALISE')) { + function balise_CS_DECOUPE_dist($p) { + // id de l'article a trouver pour retourner son texte + $texte = ($v = interprete_argument_balise(1,$p))!==NULL ? 'cs_champ_sql('.$v.')' : champ_sql('texte', $p); + if ($p->type_requete == 'articles' || $v!==NULL) { + $p->code = 'cs_decoupe(propre(cs_onglets(cs_supprime_notes('.$texte.'))), true)'; + } else { + $p->code = "''"; + } + $p->interdire_scripts = true; + return $p; + } +} + +/* + filtre |decoupe_type_pagination qui renvoie : + 1 si le nombre doit etre affiche + 2 si le nombre ne doit pas etre affiche + 3 s'il faut afficher '...' + voir le modele : modeles/decoupe_item.html +*/ +function decoupe_type_pagination($page, $artpage, $page_fin, $rayon=4, $extremes=2) { + $diametre = $rayon*2; + if($page_fin<=$diametre+$extremes+1 || $page<=$extremes || $page>$page_fin-$extremes) return 1; + $depart = max(1, $artpage - $rayon); + $arrivee = $artpage + $rayon; + if($arrivee-$depart<$diametre) $arrivee=$depart+$diametre; + if($arrivee>$page_fin) $arrivee = $page_fin; + if($arrivee-$depart<$diametre) $depart=$arrivee-$diametre; + if($depart<=$extremes+1) $depart = 1; + if($arrivee>=$page_fin-$extremes) $arrivee = $page_fin; + if($page<$depart-1 || $page>$arrivee+1) return 2; + if($page==$depart-1 || $page==$arrivee+1) return 3; + return 1; +} +?> \ No newline at end of file