Changeset 104863 in spip-zone


Ignore:
Timestamp:
Jun 14, 2017, 2:55:18 PM (2 years ago)
Author:
toutati@…
Message:

réorganisation des fonctions, but
pas de trou de sécu
y voir clair
passer en restreint facilement
rester compatible avec les anciens usages

Location:
_plugins_/article_pdf
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/article_pdf/article_pdf.html

    r104858 r104863  
    4747        $id_article = "#ID_ARTICLE";
    4848       
    49         $titre_article = translitteration(corriger_caracteres('[(#TITRE|supprimer_numero|pdf_first_clean|supprimer_tags|texte_script)]'));
    50         // Reprise du code de urls/propres.php (pourquoi c'est pas une fonction de l'API de SPIP ?)
     49        $files_pdf = '[(#TITRE|pdf_nommer_ancien{article, #ID_ARTICLE})]';
    5150       
    52         // on va convertir tous les caracteres de ponctuation et espaces
    53         // a l'exception de l'underscore (_), car on veut le conserver dans l'url
    54         $titre_article = str_replace('_', chr(7), $titre_article);
    55         $titre_article = @preg_replace(',[[:punct:][:space:]]+,u', ' ', $titre_article);
    56         $titre_article = str_replace(chr(7), '_', $titre_article);
    57 
    58         // S'il reste trop de caracteres non latins, les gerer comme wikipedia
    59         // avec rawurlencode :
    60         if (preg_match_all(",[^a-zA-Z0-9 _]+,", $titre_article, $r, PREG_SET_ORDER)) {
    61                 foreach ($r as $regs) {
    62                         $titre_article = substr_replace($titre_article, rawurlencode($regs[0]),
    63                                 strpos($titre_article, $regs[0]), strlen($regs[0]));
    64                 }
    65         }
    66 
    67         // S'il reste trop peu, on retombe sur article12
    68         if (strlen($titre_article) == 0 ) {
    69                 $titre_article = "article";
    70         }
    71 
    72         // Sinon couper les mots et les relier par des tirets
    73         else {
    74                 $mots = preg_split(",[^a-zA-Z0-9_%]+,", $titre_article);
    75                 $titre_article = '';
    76                 foreach ($mots as $mot) {
    77                         if (!strlen($mot)) continue;
    78                         $titre_article2 = $titre_article.'-'.$mot;
    79 
    80                         // Si on depasse _URLS_PROPRES_MAX caracteres, s'arreter
    81                         // ne pas compter 3 caracteres pour %E9 mais un seul
    82                         $long = preg_replace(',%.,', '', $titre_article2);
    83                         if (strlen($long) > _URLS_PROPRES_MAX) {
    84                                 break;
    85                         }
    86 
    87                         $titre_article = $titre_article2;
    88                 }
    89                 $titre_article = substr($titre_article, 1);
    90 
    91                 // On enregistre en utf-8 dans la base
    92                 $titre_article = rawurldecode($titre_article);
    93 
    94                 if (strlen($titre_article) == 0)
    95                         $titre_article = "article";
    96         }
    97 
    98         $files_pdf = $titre_article."_a".$id_article.".pdf";
    9951        $file_out = $path_pdf . $files_pdf ;
    10052       
  • _plugins_/article_pdf/article_pdf_fonctions.php

    r104858 r104863  
    4949        return preg_replace('`\?[0-9]*$`','',$texte);
    5050}
     51
     52/**
     53 * [(#TITRE|pdf_nommer{article, #ID_ARTICLE})]
     54 *
     55 * Fonction reprise de SPIP (plugin dist urls_etendues)
     56 * pour le filtre url_nettoyer
     57 *
     58**/
     59
     60function pdf_nommer($titre_parent, $objet, $id_parent){
     61//au choix, selon le cas (voir les avantages et les inconvéniants de chaque selon le site):
     62//      $path_pdf = sous_repertoire(_DIR_CACHE, "article_PDF"); // stockage dans le cache SPIP
     63        $path_pdf = sous_repertoire(_DIR_IMG, "article_PDF"); //stockage sous le dossier IMG
     64       
     65        include_spip('action/editer_url');
     66        $titre = url_nettoyer($titre_parent,60);
     67        $lettre = substr($objet, 0, 1);
     68        $nom_pdf = $titre."_".$lettre.$id_parent.".pdf";
     69        return $path_pdf.$nom_pdf;
     70}
     71
     72/**
     73 *
     74 * [(#TITRE|pdf_nommer_ancien{article, #ID_ARTICLE})]
     75 *
     76**/
     77function pdf_nommer_ancien($titre_parent, $objet='article', $id_article){
     78       
     79        //$titre_article = translitteration(corriger_caracteres('[(#TITRE|supprimer_numero|pdf_first_clean|supprimer_tags|texte_script)]'));
     80        $titre_article = translitteration(corriger_caracteres(texte_script(supprimer_tags(pdf_first_clean($titre_parent)))));
     81       
     82        // Reprise du code de urls/propres.php (pourquoi c'est pas une fonction de l'API de SPIP ?)
     83       
     84        // on va convertir tous les caracteres de ponctuation et espaces
     85        // a l'exception de l'underscore (_), car on veut le conserver dans l'url
     86        $titre_article = str_replace('_', chr(7), $titre_article);
     87        $titre_article = @preg_replace(',[[:punct:][:space:]]+,u', ' ', $titre_article);
     88        $titre_article = str_replace(chr(7), '_', $titre_article);
     89
     90        // S'il reste trop de caracteres non latins, les gerer comme wikipedia
     91        // avec rawurlencode :
     92        if (preg_match_all(",[^a-zA-Z0-9 _]+,", $titre_article, $r, PREG_SET_ORDER)) {
     93                foreach ($r as $regs) {
     94                        $titre_article = substr_replace($titre_article, rawurlencode($regs[0]),
     95                                strpos($titre_article, $regs[0]), strlen($regs[0]));
     96                }
     97        }
     98
     99        // S'il reste trop peu, on retombe sur article12
     100        if (strlen($titre_article) == 0 ) {
     101                $titre_article = "article";
     102        }
     103
     104        // Sinon couper les mots et les relier par des tirets
     105        else {
     106                $mots = preg_split(",[^a-zA-Z0-9_%]+,", $titre_article);
     107                $titre_article = '';
     108                foreach ($mots as $mot) {
     109                        if (!strlen($mot)) continue;
     110                        $titre_article2 = $titre_article.'-'.$mot;
     111
     112                        // Si on depasse _URLS_PROPRES_MAX caracteres, s'arreter
     113                        // ne pas compter 3 caracteres pour %E9 mais un seul
     114                        $long = preg_replace(',%.,', '', $titre_article2);
     115                        if (strlen($long) > _URLS_PROPRES_MAX) {
     116                                break;
     117                        }
     118
     119                        $titre_article = $titre_article2;
     120                }
     121                $titre_article = substr($titre_article, 1);
     122
     123                // On enregistre en utf-8 dans la base
     124                $titre_article = rawurldecode($titre_article);
     125
     126                if (strlen($titre_article) == 0)
     127                        $titre_article = "article";
     128        }
     129
     130        $files_pdf = $titre_article."_a".$id_article.".pdf";
     131        return $files_pdf;
     132       
     133}
Note: See TracChangeset for help on using the changeset viewer.