Changeset 95540 in spip-zone


Ignore:
Timestamp:
Feb 27, 2016, 12:19:00 PM (3 years ago)
Author:
fil@…
Message:

on se calque sur var_mode=images plutôt que var_mode=reload ; on fait systematiquement une copie locale de la ressource demandée, comme ça si le répertoire git est réorganisé les vieilles ressources restent disponibles

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/ressource/inc/ressource.php

    r95407 r95540  
    114114
    115115        /* un lien github */
    116         if (preg_match(",^https://(github\.com)/([^/]+/[^/]+)/blob/([^/]+)/(.*)$,",
     116        if (preg_match(",^https://(github\.com)/([^/]+/[^/]+)/blob/([^/]+)/(.*\.([^.?]+))([?].*)?$,",
    117117        $src, $r)) {
    118                 # 1. calculer l'url avec ?raw=true pour un access https
    119                 $src = parametre_url($src, 'raw', 'true');
    120 
    121                 # 2. recuperer le repo, la branche et le chemin du fichier
     118
     119                # 1. recuperer le repo, la branche et le chemin du fichier
    122120                $server = $r[1];
    123121                $repo = $r[2];
    124122                $branch = $r[3];
    125123                $file = $r[4];
     124                $ext = str_replace('jpeg', 'jpg', $r[5]);
     125                $qs = $r[6];
     126
     127                # 2. calculer l'url avec ?raw=true pour un access https
     128                #    et l'url de la copie locale
     129                $src = parametre_url($src, 'raw', 'true');
     130                $local = _DIR_RACINE . nom_fichier_copie_locale($src, $ext);
    126131
    127132                # 3. regarder si on a un clone en local
     
    139144                                        spip_log("$cmd: $b", 'distant');
    140145
    141                                         # 5. si pas de fichier, ou demande de ?var_mode=reload,
     146                                        # 5. si pas de fichier, ou demande de ?var_mode=images,
    142147                                        #    mettre à jour le repo
    143148                                        if (!file_exists($dir.'/'.$file)
    144                                         || (_request('var_mode') == 'reload' && autoriser('reload', 'images') && (filemtime($dir.'/.git') < time() - 60))
     149                                        || (_request('var_mode') == 'images' && autoriser('reload', 'images') && (filemtime($dir.'/.git/FETCH_HEAD') < time() - 60))
    145150                                        ) {
    146151                                                $cmd = "cd $_dir && git pull && git checkout $_branch";
     
    149154
    150155                                                # 6. Si ca ne marche toujours pas on est déçu
    151                                                 #   et on va quand même tenter un accès https
    152                                                 if (!file_exists($dir.'/'.$file)) {
     156                                                #   on regarde si on a déjà une copie locale,
     157                                                #   sinon on va quand même tenter un accès https
     158                                                if (!file_exists($local)
     159                                                and !file_exists($dir.'/'.$file)) {
    153160                                                        throw new Exception('github: pas de version locale, on essaiera par https');
    154161                                                }
    155162                                        }
    156                                         $fichier = $src = $dir.'/'.$file;
     163
     164                                        if (file_exists($dir.'/'.$file)
     165                                        and ( !file_exists($local)
     166                                                OR filemtime($local) < filemtime($dir.'/'.$file) )
     167                                        ) {
     168                                                @copy($dir.'/'.$file, $local);
     169                                        }
     170                                        $fichier = $src = $local;
    157171                                        $meta['local'] = $fichier;
    158172                                        $meta['href'] = $fichier;
     
    164178                }
    165179        }
     180        /* fin github */
    166181
    167182        if (preg_match(',^https?://,', $src)) {
     
    282297                $meta['type_document'] = ressource_mime($meta['extension']);
    283298
    284         // demander le reload du contenu (?var_mode=reload)
    285         if (_request('var_mode') == 'reload'
     299        // demander le reload du contenu (?var_mode=images)
     300        if (_request('var_mode') == 'images'
    286301        && preg_match(',^https?://,', $src)
    287302        && autoriser('reload', 'distant')) {
Note: See TracChangeset for help on using the changeset viewer.