Changeset 66997 in spip-zone


Ignore:
Timestamp:
Oct 21, 2012, 7:02:53 PM (7 years ago)
Author:
eric@…
Message:

Grosses modifications des traitements des lectures et commentaire qui justifient le passage en 1.4.0 ; la compatibilité ascendante est toutefois assurée.

  • ajout de classe autour de chaque item des modèle afin de pouvoir les styler ; cependant le plugin ne propose aucun style par défaut.
  • refactoring des traitements des lectures et du commentaire afin d'améliorer sa généricité et son extensibilité.
  • amélioration de la détection des langues et de leur support
  • amélioration de l'extraction des crédit et copyright.

Il reste néanmoins à reprendre le saint et à y rajouter la fête du jour. Le support de l'arabe et l'arménien pose encore pas mal de soucis.

Location:
_plugins_/spiperipsum
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/spiperipsum/inc/spiperipsum_utils.php

    r66767 r66997  
    11<?php
     2
     3
    24// Convertir le code de langue SPIP en code langue du serveur
    3 function langue2code($langue){
     5function langue2code($langue) {
    46        switch(strtolower($langue))
    57        {
     8                case 'br':
     9                case 'co':
     10                case 'cpf':
     11                case 'cpf_hat':
    612                case 'fr':
    7                 case 'co':
     13                case 'fr_sc':
     14                case 'fr_lpc':
     15                case 'fr_lsf':
     16                case 'fr_spl':
    817                case 'fr_tu':
     18                case 'lb':
    919                case 'oc':
    1020                case 'oc_lnc':
     
    1626                case 'oc_auv':
    1727                case 'oc_va':
     28                case 'rm':
    1829                case 'roa':
     30                case 'wa':
    1931                case 'ty':
    2032                        $code = 'FR'; break;
    2133                case 'en':
    2234                case 'en_hx':
     35                case 'en_sm':
    2336                case 'ga':
    2437                case 'gd':
    2538                        $code = 'AM'; break;
    2639                case 'de':
     40                case 'fy':
    2741                        $code = 'DE'; break;
    28                 case 'es':
    2942                case 'an':
    3043                case 'ast':
    3144                case 'ca':
     45                case 'cpf_dom':
     46                case 'es':
     47                case 'es_mx_pop':
    3248                case 'es_co':
    3349                case 'eu':
    3450                case 'gl':
    35                 case 'la':
    3651                        $code = 'SP'; break;
    3752                case 'pt':
    3853                case 'pt_br':
    3954                        $code = 'PT'; break;
     55                case 'el':
     56                case 'grc':
     57                        $code = 'GR'; break;
    4058                case 'it':
    4159                case 'it_fem':
    4260                case 'nap':
    43                 case 'ro':
     61                case 'la':
    4462                case 'sc':
    4563                case 'scn':
     
    4765                case 'sro':
    4866                        $code = 'IT'; break;
     67                case 'ar':
     68                case 'ber_tam':
     69                case 'ber_tam_tfng':
     70                        $code = 'AR'; break;
     71                case 'mg':
     72                        $code = 'MG'; break;
    4973                case 'nl':
    5074                        $code = 'NL'; break;
    51                 case 'trf':  $code = 'TRF'; break;
    52                 case 'maa':  $code = 'MAA'; break;
    53                 default:
     75                case 'pl':
     76                        $code = 'PL'; break;
     77                case 'hy':
     78                        $code = 'ARM'; break;
     79                default:
    5480                        $code = _SPIPERIPSUM_LANGUE_DEFAUT; break;
    5581        }
     
    5783}
    5884
     85function code2charset($code_langue) {
     86        switch(strtoupper($code_langue))
     87        {
     88                case 'FR':
     89                case 'PT':
     90                case 'IT':
     91                case 'NL':
     92                case 'AM':
     93                case 'DE':
     94                case 'SP':
     95                case 'TRF':
     96                case 'TRA':
     97                        $charset = 'iso-8859-1'; break;
     98                case 'PL':
     99                        $charset = 'iso-8859-2'; break;
     100                case 'GR':
     101                        $charset = 'iso-8859-7'; break;
     102                case 'AR':
     103                case 'MAA':
     104                case 'BYA':
     105                        $charset = 'windows-1256'; break;
     106                case 'ARM':
     107                        $charset = 'utf-8'; break;
     108                default:
     109                        $charset = 'iso-8859-1'; break;
     110        }
     111        return $charset;
     112}
     113
     114function lecture2code($lecture) {
     115        switch($lecture)
     116        {
     117                case _SPIPERIPSUM_LECTURE_EVANGILE:
     118                        $code = 'GSP'; break;
     119                case _SPIPERIPSUM_LECTURE_PREMIERE:
     120                        $code = 'FR'; break;
     121                case _SPIPERIPSUM_LECTURE_SECONDE:
     122                        $code = 'SR'; break;
     123                case _SPIPERIPSUM_LECTURE_PSAUME:
     124                        $code = 'PS'; break;
     125                default:
     126                        $code = 'GSP'; break;
     127        }
     128        return $code;
     129}
     130
     131
    59132// Convertir la date Y-m-d en url avec l'annee, le mois et le jour
    60 function date2url_date($date){
     133function date2url_date($date) {
    61134        $url = '';
    62135        $infos = getdate(strtotime($date));
     
    66139
    67140// Determine le jour de la semaine a partir de la date fournie (0=dimanche)
    68 function date2jour_semaine($date){
     141function date2jour_semaine($date) {
    69142        $infos = getdate(strtotime($date));
    70143        return $infos['wday'];
    71144}
     145
     146
     147// Determine le jour de la semaine a partir de la date fournie (0=dimanche)
     148function page2page_propre($page, $charset, $no_tag=false) {
     149        static $nettoyage_commun = array(
     150                                'regexp' => array('#(<|&lt;)/?br\b.*(>|&gt;)#UimsS', '#(&nbsp;){2,}#UimsS'),
     151                                'replace' => array('<br />', '')
     152        );
     153        static $nettoyage_charset = array(
     154                                'iso-8859-1' => array(
     155                                                'regexp' => array('#Å#UimsS'),
     156                                                'replace' => array('&oelig;')),
     157        );
     158
     159        $regexp = $nettoyage_commun['regexp'];
     160        $replace = $nettoyage_commun['replace'];
     161        if (isset($nettoyage_charset[$charset])) {
     162                $regexp = array_merge($regexp, $nettoyage_charset[$charset]['regexp']);
     163                $replace = array_merge($replace, $nettoyage_charset[$charset]['replace']);
     164        }
     165
     166        if ($no_tag) {
     167                $regexp = array_merge($regexp, array('#<p\b.*>.*</p>#UimsS', '#(<br />)+$#UimS', '#</?font\b.*>#UimsS'));
     168                $replace = array_merge($replace, array('', '', ''));
     169        }
     170
     171        $page = preg_replace($regexp, $replace, $page);
     172
     173        return trim($page);
     174}
     175
     176function flux2element($url, $charset, $no_tag=false) {
     177        $element = '';
     178
     179        $page = recuperer_page($url);
     180        if (strpos($page, 'Error : ') === false) {
     181                $page = page2page_propre(importer_charset($page, $charset), $charset, $no_tag);
     182                $element = $page;
     183        }
     184
     185        return $element;
     186}
     187
     188function flux2texte($url, $charset, $lettrine=false) {
     189        $texte = array('texte' => '', 'copyright' => '', 'credit' => '');
     190
     191        $page = recuperer_page($url);
     192        if (strpos($page, 'Error : ') === false) {
     193                $page = page2page_propre(importer_charset($page, $charset), $charset, false);
     194                $segments = explode('<br />', $page);
     195
     196                $index = count($segments) - 1;
     197                $texte['credit'] = trim(extraire_balise($segments[$index], 'a'));
     198                unset($segments[$index]);
     199
     200                $index = $index - 1;
     201                $texte['copyright'] = trim($segments[$index]);
     202                unset($segments[$index]);
     203
     204                $index = $index - 1;
     205                if (preg_match('#<script\b.*>.*</script\b.*>#UimsS', $segments[$index], $t)) {
     206                        unset($segments[$index]);
     207                        $index = $index - 1;
     208                }
     209                while (!$segments[$index] AND $index>0) {
     210                        unset($segments[$index]);
     211                        $index = $index - 1;
     212                }
     213                $page = trim(implode('<br />', $segments));
     214                if ($lettrine) {
     215                        $lettre = mb_substr($page, 0, 1, $GLOBALS['meta']['charset']);
     216                        $texte['texte'] = '<span class="lettrine">' . $lettre . '</span>' . mb_substr($page, 1);
     217                }
     218                else
     219                        $texte['texte'] = $page;
     220
     221        }
     222        return $texte;
     223}
     224
     225
     226function flux2lecture($lecture, $url_base, $charset, $lettrine=false) {
     227        $tableau = array();
     228
     229        // -- Titre court de l'evangile : on extrait la reference du verset uniquement
     230        //    Ce titre court est de la forme "Lc 11,25-23"
     231        $no_tag = false;
     232        $url = $url_base . '&type=reading_st&content=' . lecture2code($lecture);
     233        $tableau['verset'] = flux2element($url, $charset, $no_tag);
     234
     235        // -- Titre long de l'evangile : on extrait le titre uniquement sans le verset
     236        //    Ce titre long est de la forme "bla bla 11,25-23."
     237        $url = $url_base . '&type=reading_lt&content=' . lecture2code($lecture);
     238        $tableau['titre'] = flux2element($url, $charset, $no_tag);
     239
     240        // -- Texte de la lecture
     241        //    On decoupe le texte en 3 parties : le texte proprement dit, sa reference de traduction et un credit
     242        $url = $url_base . '&type=reading&content=' . lecture2code($lecture);
     243        $texte = flux2texte($url, $charset, $lettrine);
     244        $tableau = array_merge($tableau, $texte);
     245
     246        return $tableau;
     247}
     248
    72249
    73250// Charger le fichier des lectures et du saint du jour j
    74251// - si le fichier existe on retourne directement son nom complet
    75252// - sinon on le cree dans le cache du plugin
    76 function charger_lectures($langue, $jour){
     253function charger_lectures($langue, $jour) {
     254
     255        include_spip('inc/charsets');
    77256
    78257        $date = ($jour == _SPIPERIPSUM_JOUR_DEFAUT) ? date('Y-m-d') : $jour;
     258//      $date = '2012-10-20';
    79259        $code_langue = langue2code($langue);
    80        
     260//      $code_langue = 'MG';
     261        $charset = code2charset($code_langue);
     262        $lettrine = ($code_langue == 'AR' OR $code_langue == 'ARM') ? false : true;
     263
    81264        $dir = sous_repertoire(_DIR_CACHE,"spiperipsum");
    82265        $dir = sous_repertoire($dir,substr(md5($code_langue),0,1));
     
    88271                // Date du jour
    89272                $tableau['date'] = $date;
     273                // Url de base de tous les flux
     274                $url_base = 'http://feed.evangelizo.org/reader.php?lang=' . $code_langue . '&date=' . date('Ymd', strtotime($date));
     275
    90276                // Traitement de l'evangile
    91                 $url = "http://www.levangileauquotidien.org/ind-gospel-d.php?language=".$code_langue.$url_date;
    92                 $textes = extraire_balises(recuperer_page($url), 'font');
    93                 $tableau['evangile']['titre'] = $textes[0];
    94                 $tableau['evangile']['verset'] = $textes[1];
    95                 $tableau['evangile']['texte'] = $textes[2];
    96                 $tableau['evangile'] = preg_replace(',</?font\b.*>,UimsS', '', $tableau['evangile']);
    97                 $tableau['evangile'] = preg_replace(',</?br\b.*>,UimsS', '<br />', $tableau['evangile']);
    98                 $tableau['evangile'] = str_replace('©', '&copy;', $tableau['evangile']);
     277                $tableau['evangile'] = flux2lecture(_SPIPERIPSUM_LECTURE_EVANGILE, $url_base, $charset, $lettrine);
     278
    99279                // Traitement de la premiere lecture
    100                 $url = "http://www.levangileauquotidien.org/ind-gospel-d.php?language=".$code_langue."&typeRead=FR".$url_date;
    101                 $textes = extraire_balises(recuperer_page($url), 'font');
    102                 $tableau['premiere']['titre'] = $textes[0];
    103                 $tableau['premiere']['verset'] = $textes[1];
    104                 $tableau['premiere']['texte'] = $textes[2];
    105                 $tableau['premiere'] = preg_replace(',</?font\b.*>,UimsS', '', $tableau['premiere']);
    106                 $tableau['premiere'] = preg_replace(',</?br\b.*>,UimsS', '<br />', $tableau['premiere']);
    107                 $tableau['premiere'] = str_replace('©', '&copy;', $tableau['premiere']);
     280                $tableau['premiere'] = flux2lecture(_SPIPERIPSUM_LECTURE_PREMIERE, $url_base, $charset, $lettrine);
     281
    108282                // Traitement de la seconde lecture - uniquement le dimanche
    109283                if (date2jour_semaine($date) == 0) {
    110                         $url = "http://www.levangileauquotidien.org/ind-gospel-d.php?language=".$code_langue."&typeRead=SR".$url_date;
    111                         $textes = extraire_balises(recuperer_page($url), 'font');
    112                         $tableau['seconde']['titre'] = $textes[0];
    113                         $tableau['seconde']['verset'] = $textes[1];
    114                         $tableau['seconde']['texte'] = $textes[2];
    115                         $tableau['seconde'] = preg_replace(',</?font\b.*>,UimsS', '', $tableau['seconde']);
    116                         $tableau['seconde'] = preg_replace(',</?br\b.*>,UimsS', '<br />', $tableau['seconde']);
    117                         $tableau['seconde'] = str_replace('©', '&copy;', $tableau['seconde']);
    118                 }
     284                        $tableau['seconde'] = flux2lecture(_SPIPERIPSUM_LECTURE_SECONDE, $url_base, $charset, $lettrine);
     285                }
     286
    119287                // Traitement du psaume
    120                 $url = "http://www.levangileauquotidien.org/ind-gospel-d.php?language=".$code_langue."&typeRead=PS".$url_date;
    121                 $page = recuperer_page($url);
    122                 // -- on traite façon particuliere les numéros de verset du psaume
    123                 preg_match('/,[0-9\.\-]*\./', $page, $fin_verset);
    124                 $textes = extraire_balises($page, 'font');
    125                 $tableau['psaume']['titre'] = $textes[0];
    126                 $tableau['psaume']['verset'] = $textes[1] . $fin_verset[0];
    127                 $tableau['psaume']['texte'] = $textes[2];
    128                 $tableau['psaume'] = preg_replace(',</?font\b.*>,UimsS', '', $tableau['psaume']);
    129                 $tableau['psaume'] = preg_replace(',</?br\b.*>,UimsS', '<br />', $tableau['psaume']);
    130                 $tableau['psaume'] = str_replace('©', '&copy;', $tableau['psaume']);
     288                $tableau['psaume'] = flux2lecture(_SPIPERIPSUM_LECTURE_PSAUME, $url_base, $charset, $lettrine);
     289
    131290                // Traitement du commentaire
     291                $no_tag = true;
    132292                // -- titre du commentaire
    133                 $url = "http://feed.evangelizo.org/reader.php?lang=".$code_langue."&type=comment_t&date=".date("Ymd", strtotime($date));
    134                 $page = recuperer_page($url);
    135                 $tableau['commentaire']['titre'] = $page;
     293                $tableau['commentaire']['titre'] = flux2element($url_base.'&type=comment_t', $charset, $no_tag);
    136294                // -- auteur du commentaire
    137                 $url = "http://feed.evangelizo.org/reader.php?lang=".$code_langue."&type=comment_a&date=".date("Ymd", strtotime($date));
    138                 $page = recuperer_page($url);
    139                 $tableau['commentaire']['auteur'] = $page;
     295                $tableau['commentaire']['auteur'] = flux2element($url_base.'&type=comment_a', $charset, $no_tag);
    140296                // -- source du commentaire
    141                 $url = "http://feed.evangelizo.org/reader.php?lang=".$code_langue."&type=comment_s&date=".date("Ymd", strtotime($date));
    142                 $page = recuperer_page($url);
    143                 $tableau['commentaire']['source'] = $page;
    144                 $tableau['commentaire'] = preg_replace(',</?br\b.*>,UimsS', '', $tableau['commentaire']);
    145                 $tableau['commentaire'] = preg_replace(',<p\b.*>.*</p\b.*>,UimsS', '', $tableau['commentaire']);
    146                 // -- texte du commentaire
    147                 $url = "http://feed.evangelizo.org/reader.php?lang=".$code_langue."&type=comment&date=".date("Ymd", strtotime($date));
    148                 $page = recuperer_page($url);
    149                 $tableau['commentaire']['texte'] = $page;
    150                 $tableau['commentaire']['texte'] = preg_replace('#(</?br\b.*>)#UimsS', '<br />', $tableau['commentaire']['texte']);
    151                 $tableau['commentaire']['texte'] = preg_replace('#(&nbsp;){2,}#UimsS', '', $tableau['commentaire']['texte']);
    152                 $tableau['commentaire']['texte'] = preg_replace(',<p\b.*>.*</p\b.*>,UimsS', '', $tableau['commentaire']['texte']);
    153                 $tableau['commentaire']['texte'] = preg_replace(',ú,UimsS', '&oelig;', $tableau['commentaire']['texte']);
    154                 $tableau['commentaire']['texte'] = trim($tableau['commentaire']['texte']);
     297                $tableau['commentaire']['source'] = flux2element($url_base.'&type=comment_s', $charset, $no_tag);
     298                // -- texte du commentaire : on n'insere jamais de lettrine
     299                $texte = flux2texte($url_base.'&type=comment', $charset, false);
     300                $tableau['commentaire'] = array_merge($tableau['commentaire'], $texte);
    155301
    156302                // Traitement du saint du jour
     
    176322                $tableau['saint']['url'] = $url_texte[1];
    177323
     324//              var_dump($tableau);
    178325                ecrire_fichier($f, serialize($tableau));
    179326        }
  • _plugins_/spiperipsum/modeles/lecture.html

    r66789 r66997  
    88<div class="lecture[ (#ENV{lecture, evangile})]">
    99        [(#ENV{mode}|=={#EVAL{_SPIPERIPSUM_MODE_ARTICLE}}|oui)
    10                 [<h3 class="spip titre">(#ENV{titre})[&nbsp;-&nbsp;<span class="verset">(#ENV{verset})</span>]</h3>]
     10                [<h3 class="spip titre">(#ENV{titre})</h3>]
    1111        ]
    1212        [(#ENV{mode}|=={#EVAL{_SPIPERIPSUM_MODE_PAGE}}|oui)
    13                 [<h2 class="h2 titre">(#ENV{titre})[&nbsp;-&nbsp;<span class="verset">(#ENV{verset})</span>]</h2>]
     13                [<h2 class="h2 titre">(#ENV{titre})</h2>]
    1414        ]
    1515        [<p class="texte">(#ENV*{texte})</p>]
    16         [<p class="reference">(#ENV*{reference})</p>]
     16        [<p class="copyright">(#ENV*{copyright})</p>]
    1717</div>
  • _plugins_/spiperipsum/plugin.xml

    r66770 r66997  
    22        <nom>SPIPer Ipsum</nom>
    33        <auteur>Eric Lupinacci, Gwen (id&#233;e et ic&#244;ne du plugin)</auteur>
    4         <version>1.3.1</version>
     4        <version>1.4.0</version>
    55        <etat>stable</etat>
    66        <licence>GNU/GPL</licence>
Note: See TracChangeset for help on using the changeset viewer.