Changeset 31382 in spip-zone


Ignore:
Timestamp:
Sep 7, 2009, 12:59:47 PM (10 years ago)
Author:
patfr@…
Message:

Mises à jour automatiques : davantage de précisions et prise en compte de install.log posé par chargeur.
Le résultat de l'interrogation de spip.org est mis en cache pendant 24h (au lieu de 2h)

Location:
_plugins_/couteau_suisse
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/couteau_suisse/cout_options.php

    r31339 r31382  
    180180        return _T('couteau:stats_date', array('jour'=>$jour, 'mois'=>$mois, 'annee'=>substr($annee,2), 'h'=>$heures, 'm'=>$minutes, 's'=>$sec));
    181181}
     182function cs_date_court($numdate) {
     183        $date_array = recup_date($numdate);
     184        if (!$date_array) return '?';
     185        list($annee, $mois, $jour) = $date_array;
     186        return _T('couteau:date_court', array('jour'=>$jour, 'mois'=>$mois, 'annee'=>substr($annee,2)));
     187}
    182188
    183189
  • _plugins_/couteau_suisse/outils/maj_auto_action_rapide.php

    r31378 r31382  
    1616        $plugins_actifs = liste_chemin_plugin_actifs();
    1717        $html_actifs = $html_inactifs = array();
    18         $checked = 0;
    1918        foreach ($plugins as $p) /*if(preg_match(',^auto/,', $p))*/ {
    2019                $actif = array_search($p, $plugins_actifs, true);
    2120                $auto = preg_match(',^auto/,', $p);
    22                 list($zip, $rev_local, $rev_rss, $maj_dispo) = plugin_get_infos_maj($p);
    23                 $maj_lib = '';
    24                 if($maj_dispo) {
    25                         $maj_lib = _T('La révision @revision@ est disponible.', array('revision' => $rev_rss));
    26                         $checked++; }
    27                 elseif($rev_rss>0 && $rev_local)
    28                         $maj_lib = _T('Ce plugin semble à jour.');
     21                $infos = plugin_get_infos_maj($p);
     22                $maj_lib = $checked = '';
     23                if($infos['maj_dispo']) {
     24                        $maj_lib = _T('La [révision @revision@->url] est disponible.',
     25                                array('revision' => $infos['rev_rss'], 'url'=>$infos['url_origine']));
     26                        $checked = " class='maj_checked'"; }
     27                elseif($infos['rev_rss']>0 && $infos['rev_local'])
     28                        $maj_lib = _T('Ce [plugin->@zip@] semble [à jour->@url@].',
     29                                array('zip'=>$infos['zip_trac'], 'url'=>$infos['url_origine']));
    2930                elseif($auto) {
    30                         $maj_lib = _L("La révision distante n'a pas pu être trouvée.");
    31                         $checked++; }
    32                 elseif($rev_local && $rev_rss<=0)
    33                         $maj_lib = _L("La r&eacute;vision distante n'a pas pu &ecirc;tre trouv&eacute;e.").' '._L("Veuillez proc&eacute;der manuellement &agrave; la mise &agrave; jour de ce plugin.");
    34                 $infos = plugin_get_infos($p);
    35                 $nom = trim($infos['nom']) . '.' . ($maj_lib?"\n_ {{".$maj_lib.'}}':'') . '|'
    36                         . ($rev_local?_L("R&eacute;v.&nbsp;@revision@", array('revision' => $rev_local)):'&nbsp;');
     31                        $maj_lib = _L("La [r&eacute;vision distante->@url@] n'a pas pu &ecirc;tre trouv&eacute;e.",
     32                                array('url'=>$infos['url_origine']));
     33                        $checked = " class='maj_checked'"; }
     34                elseif($infos['rev_local'] && $infos['rev_rss']<=0)
     35                        $maj_lib = _L("La [r&eacute;vision distante->@url@] n'a pas pu &ecirc;tre trouv&eacute;e.",
     36                                array('url'=>$infos['url_origine']))
     37                                .' '._L("Veuillez proc&eacute;der manuellement &agrave; la mise &agrave; jour de ce plugin.");
     38                $nom = trim($infos['nom']). '&nbsp;(v' .$infos['version'] . ')' . ($maj_lib?"\n_ {{".$maj_lib.'}}':'');
     39                $rev = $infos['rev_local']?_L("R&eacute;v.&nbsp;@revision@", array('revision' => $infos['rev_local'])):'';
     40                if(strlen($infos['commit'])) $rev .= (strlen($rev)?'<br/>':'') . cs_date_court($infos['commit']);
     41                if(!strlen($rev)) $rev = '&nbsp;';
     42                $zip_log = (strlen($infos['zip_log']) && $infos['zip_log']!=$infos['zip_trac'])
     43                        ?"<label><input type='radio' value='$infos[zip_log]'$checked name='url_zip_plugin'/>[->$infos[zip_log]]</label>":'';
    3744                $bouton = $auto                 
    38 //                      ?"<input type='checkbox' value='$p'".($maj_dispo?" checked='checked'":"").($rev_rss<=0?" disabled='disabled'":"")." name='plugins[]'/>"
    39                         ?"<input type='radio' value='$zip'".($checked==1?" checked='checked'":'')./*($rev_rss<=0?" disabled='disabled'":"").*/" name='url_zip_plugin'/>"
     45                        ?"<input type='radio' value='$infos[zip_trac]'$checked name='url_zip_plugin'/>"
    4046                        :'&nbsp;';
    41                 ${$actif?'html_actifs':'html_inactifs'}[] = "|$bouton|$nom|";
     47                if(strlen($zip_log)) {
     48                        $nom .= "\n_ "._L('V&eacute;rifiez pr&eacute;alablement le plugin qui vous convient :')
     49                                . "\n_ $zip_log\n_ {$bouton}[->$infos[zip_trac]]<label>";
     50                        $bouton = '&nbsp;';
     51                }
     52                ${$actif?'html_actifs':'html_inactifs'}[] = "|$bouton|$nom|$rev|";
    4253        }
    4354
     
    5061                . "<div style='text-align: right;'><input class='fondo' type='submit' value=\""
    5162                . attribut_html(_L('Mettre &agrave; jour le plugin s&eacute;lectionn&eacute;'))
    52                 . '" /></div></fieldset></div>'
     63                . '" /><p><i>'._L('Attention : apr&egrave;s avoir cliqu&eacute; sur le bouton ci-dessus, v&eacute;rifiez bien que l\'archive t&eacute;l&eacute;charg&eacute;e correspond bien au plugin qu\'il vous faut mettre &agrave;jour.').'</i></p></div></fieldset></div>'
    5364                . http_script("
    5465jQuery(document).ready(function() {
     66        jQuery('#maj_auto_div .maj_checked')[0].checked = true;
    5567        if(!jQuery('#maj_auto_div :radio:checked').length)
    5668                jQuery('#maj_auto_div :radio:first')[0].checked = true;
    5769});");
    5870        $html2 = "\n<div class='cs_sobre'><input class='cs_sobre' type='submit' value=\"["
    59                 . attribut_html(_L('Acualiser cette liste'))
     71                . attribut_html(_L('Forcer l\'actualisation'))
    6072                . ']" /></div>';
    6173
     
    6678}
    6779
    68 
    69 function maj_auto_rev_distante_rss($url, $lastmodified = 0, $force = false) {
     80// renvoie le pattern present dans la page distante
     81function maj_auto_rev_distante($url, $pattern, $lastmodified = 0, $force = false) {
    7082        $force |= in_array(_request('var_mode'), array('calcul', 'recalcul'));
    7183
    72         // pour la version distante, on regarde toutes les 2h00 (meme en cas d'echec)
     84        // pour la version distante, on regarde toutes les 24h00 (meme en cas d'echec)
    7385        $maj_ = isset($GLOBALS['meta']['tweaks_maj_auto'])?unserialize($GLOBALS['meta']['tweaks_maj_auto']):array();
    7486        if(!isset($maj_[$url])) $maj_[$url] = array(0, false);
    7587        $maj = &$maj_[$url];
    76         // prendre le cache si svn.revision n'est pas modifie recemment, si les 4h ne sont pas ecoulee, et si on ne force pas
    77         if (!$force && $maj[1]!==false && ($lastmodified<$maj[0]) && (time()-$maj[0] < 2*3600)) $distant = $maj[1];
     88        // prendre le cache si svn.revision n'est pas modifie recemment, si les 24h ne sont pas ecoulee, et si on ne force pas
     89        if (!$force && $maj[1]!==false && ($lastmodified<$maj[0]) && (time()-$maj[0] < 24*3600)) $distant = $maj[1];
    7890        else {
    7991                include_spip('inc/distant');
    8092                $distant = recuperer_page($url);
    81                 $distant = $maj[1] = $distant?(preg_match(', \[(\d+)\],', $distant, $regs)?$regs[1]:'-2'):'-1';
     93                $distant = $maj[1] = $distant?(preg_match($pattern, $distant, $regs)?$regs[1]:'-2'):'-1';
    8294                $maj[0] = time();
    8395                ecrire_meta('tweaks_maj_auto', serialize($maj_));
     
    88100
    89101function plugin_get_infos_maj($p, $force = false) {
    90         $zip = preg_match(',^auto/(.*)$,', $p, $regs)?$regs[1]:'';
    91         if(strlen($zip)) $zip = _MAJ_ZIP . $zip. '.zip';
     102        $infos = plugin_get_infos($p);
     103        $p2 = preg_match(',^auto/(.*)$,', $p, $regs)?$regs[1]:'';
     104        if(strlen($p2)) {
     105                // supposition du nom d'archive sur files.spip.org
     106                $infos['zip_trac'] = _MAJ_ZIP . $p2. '.zip';
     107                // nom de l'archive recemment installee par chargeur
     108                lire_fichier(sous_repertoire(_DIR_CACHE, 'chargeur').$p2.'/install.log', $log);
     109                $infos['zip_log'] = (strlen($log) && preg_match(',[\n\r]source: *(.*)(?:[\n\r]|$),i', $log, $regs))?$regs[1]:'';
     110        } else $infos['zip_log'] = $infos['zip_trac'] = '';
     111        // fichier svn.revision
    92112        lire_fichier($svn_rev = _DIR_PLUGINS.$p.'/svn.revision', $svn);
    93113        $lastmodified = @file_exists($svn_rev)?@filemtime($svn_rev):0;
    94         $origine = (strlen($svn) && preg_match(',<origine>(.+)</origine>,', $svn, $regs))
     114        $infos['url_origine'] = (strlen($svn) && preg_match(',<origine>(.+)</origine>,', $svn, $regs))
    95115                ?str_replace(_MAJ_SVN_DEBUT, _MAJ_LOG_DEBUT, $regs[1]) . _MAJ_LOG_FIN
    96116                :'';
    97         $rev_local = (strlen($svn) && preg_match(',<revision>(.+)</revision>,', $svn, $regs))?intval($regs[1]):0;
    98         $rev_rss = maj_auto_rev_distante_rss($origine, $lastmodified, $force);
    99         return array(
    100                 $zip,
    101                 $rev_local, $rev_rss,
    102                 $rev_rss>0 && $rev_local && $rev_rss>$rev_local);
     117        $infos['commit'] = (strlen($svn) && preg_match(',<commit>(.+)</commit>,', $svn, $regs))?$regs[1]:'';
     118        $infos['rev_local'] = (strlen($svn) && preg_match(',<revision>(.+)</revision>,', $svn, $regs))?intval($regs[1]):0;
     119        $infos['rev_rss'] = maj_auto_rev_distante($infos['url_origine'], ', \[(\d+)\],', $lastmodified, $force);
     120        $infos['maj_dispo'] = $infos['rev_rss']>0 && $infos['rev_local']>0 && $infos['rev_rss']>$infos['rev_local'];
     121        return $infos;
    103122}
    104123
Note: See TracChangeset for help on using the changeset viewer.