Overview
Comment:Patch de @freepius ré-adapté pour permettre la réinitialisation des squelettes modifiés
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 163573d69f9cd0c9c0779547663d5682917dc37d
User & Date: bohwaz on 2016-04-25 13:52:30
Other Links: manifest | tags
Context
2016-04-25
14:37
Cacher les membres des catégories cachées dans la liste des cotisations check-in: 85db5abb1b user: bohwaz tags: trunk
13:52
Patch de @freepius ré-adapté pour permettre la réinitialisation des squelettes modifiés check-in: 163573d69f user: bohwaz tags: trunk
13:08
Patch de @freepius pour rester en mode plein écran après enregistrement sur l'édition de squelette check-in: 88db127d21 user: bohwaz tags: trunk
Changes

Modified src/include/lib/Garradin/Squelette.php from [65f564084a] to [67661ea4c3].

   889    889           {
   890    890               return null;
   891    891           }
   892    892       }
   893    893   
   894    894       static public function getSource($template)
   895    895       {
   896         -        if (!preg_match('!^[\w\d_-]+(?:\.[\w\d_-]+)*$!', $template))
          896  +        if (!preg_match('!^[\w\d_-]+(?:\.[\w\d_-]+)*$!i', $template))
   897    897               return false;
   898    898   
   899    899           $path = file_exists(DATA_ROOT . '/www/squelettes/' . $template)
   900    900               ? DATA_ROOT . '/www/squelettes/' . $template
   901    901               : ROOT . '/www/squelettes-dist/' . $template;
   902    902   
   903    903           if (!file_exists($path))
................................................................................
   904    904               return false;
   905    905   
   906    906           return file_get_contents($path);
   907    907       }
   908    908   
   909    909       static public function editSource($template, $content)
   910    910       {
   911         -        if (!preg_match('!^[\w\d_-]+(?:\.[\w\d_-]+)*$!', $template))
          911  +        if (!preg_match('!^[\w\d_-]+(?:\.[\w\d_-]+)*$!i', $template))
   912    912               return false;
   913    913   
   914    914           $path = DATA_ROOT . '/www/squelettes/' . $template;
   915    915   
   916    916           return file_put_contents($path, $content);
   917    917       }
   918    918   
   919    919       static public function resetSource($template)
   920    920       {
   921         -        if (!preg_match('!^[\w\d_-]+(?:\.[\w\d_-]+)*$!', $template))
          921  +        if (!preg_match('!^[\w\d_-]+(?:\.[\w\d_-]+)*$!i', $template))
   922    922               return false;
   923    923   
   924    924           if (file_exists(DATA_ROOT . '/www/squelettes/' . $template))
   925    925           {
   926         -            unlink(DATA_ROOT . '/www/squelettes/' . $template);
          926  +            return unlink(DATA_ROOT . '/www/squelettes/' . $template);
   927    927           }
   928    928   
   929         -        return true;
          929  +        return false;
   930    930       }
   931    931   
   932    932       static public function listSources()
   933    933       {
   934    934           if (!file_exists(DATA_ROOT . '/www/squelettes'))
   935    935           {
   936    936               mkdir(DATA_ROOT . '/www/squelettes');
................................................................................
   943    943           while ($file = $dir->read())
   944    944           {
   945    945               if ($file[0] == '.')
   946    946                   continue;
   947    947   
   948    948               if (!preg_match('/\.(?:css|x?html?|atom|rss|xml|svg|txt)$/i', $file))
   949    949                   continue;
   950         -            
   951         -            $sources[] = $file;
          950  +
          951  +            $sources[$file] = false;
   952    952           }
   953    953   
   954    954           $dir->close();
   955    955   
   956    956           $dir = dir(DATA_ROOT . '/www/squelettes');
   957    957   
   958    958           while ($file = $dir->read())
................................................................................
   959    959           {
   960    960               if ($file[0] == '.')
   961    961                   continue;
   962    962   
   963    963               if (!preg_match('/\.(?:css|x?html?|atom|rss|xml|svg|txt)$/i', $file))
   964    964                   continue;
   965    965   
   966         -            $sources[] = $file;
          966  +            $sources[$file] = [
          967  +                // Est-ce que le fichier fait partie de la distribution de Garradin?
          968  +                // (Si non pas possible de faire un reset)
          969  +                'dist'  =>  array_key_exists($file, $sources),
          970  +                'mtime' =>  filemtime($dir->path.'/'.$file),
          971  +            ];
   967    972           }
   968    973   
   969    974           $dir->close();
   970    975   
   971         -        $sources = array_unique($sources);
   972         -        sort($sources);
          976  +        ksort($sources);
   973    977   
   974    978           return $sources;
   975    979       }
   976    980   
   977    981   }

Modified src/templates/admin/config/site.tpl from [3d710490c2] to [75296b729d].

    37     37       var skel_list = {$sources_json};
    38     38       var skel_current = "{$edit.file|escape}";
    39     39       </script>
    40     40       <script type="text/javascript" src="{$admin_url}static/scripts/skel_editor.js"></script>
    41     41   {else}
    42     42       <div class="templatesList">
    43     43           <h3>Squelettes du site</h3>
    44         -        <ul>
    45         -        {foreach from=$sources item="source"}
    46         -            <li><a href="?edit={$source|escape:'url'}">{$source|escape}</a></li>
    47         -        {/foreach}
    48         -        </ul>
           44  +
           45  +        {if $reset_ok}
           46  +        <p class="confirm">
           47  +            Réinitialisation effectuée. Les squelettes ont été remis à jour
           48  +        </p>
           49  +        {/if}
           50  +
           51  +        <form method="post" action="{$self_url|escape}">
           52  +            <table class="list">
           53  +                <thead>
           54  +                    <tr>
           55  +                        <td class="check"></td>
           56  +                        <th>Fichier</th>
           57  +                        <td>Dernière modification</td>
           58  +                        <td></td>
           59  +                    </tr>
           60  +                </thead>
           61  +                <tbody>
           62  +                {foreach from=$sources key="source" item="local"}
           63  +                    <tr>
           64  +                        <td>{if $local && $local.dist}<input type="checkbox" name="select[]" value="{$source|escape}" />{/if}</td>
           65  +                        <th><a href="{$admin_url}config/site.php?edit={$source|escape:'url'}" title="Éditer">{$source|escape}</a></th>
           66  +                        <td>{if $local}{$local.mtime|date_fr:'d/m/Y à H:i:s'}{else}<em>(fichier non modifié)</em>{/if}</td>
           67  +                        <td class="actions">
           68  +                            <a class="icn" href="{$admin_url}config/site.php?edit={$source|escape:'url'}" title="Éditer">✎</a>
           69  +                        </td>
           70  +                    </tr>
           71  +                {/foreach}
           72  +                </tbody>
           73  +            </table>
           74  +
           75  +            <p class="actions">
           76  +                Pour les squelettes sélectionnés&nbsp;:
           77  +                <input type="submit" name="reset" value="Réinitialiser" onclick="return confirm('Effacer toute modification locale et restaurer les squelettes d\'installation ?');" />
           78  +                {csrf_field key="squelettes"}
           79  +            </p>
           80  +        </form>
           81  +
    49     82       </div>
    50     83   {/if}
    51     84   
    52     85   {include file="admin/_foot.tpl"}

Modified src/www/admin/config/site.php from [44d976285c] to [0869dac1c0].

     1      1   <?php
     2      2   namespace Garradin;
     3      3   
     4      4   require_once __DIR__ . '/_inc.php';
     5      5   
     6      6   $error = false;
     7      7   
     8         -if (isset($_GET['ok']))
     9         -{
    10         -    $error = 'OK';
    11         -}
    12         -
    13      8   if (!empty($_POST['save']))
    14      9   {
    15     10       if (!Utils::CSRF_check('config_site'))
    16     11       {
    17     12           $error = 'Une erreur est survenue, merci de renvoyer le formulaire.';
    18     13       }
    19     14       else
................................................................................
    28     23           }
    29     24           catch (UserException $e)
    30     25           {
    31     26               $error = $e->getMessage();
    32     27           }
    33     28       }
    34     29   }
           30  +
           31  +if (Utils::post('select') && Utils::post('reset'))
           32  +{
           33  +    if (!Utils::CSRF_check('squelettes'))
           34  +    {
           35  +        $error = 'Une erreur est survenue, merci de renvoyer le formulaire.';
           36  +    }
           37  +    else
           38  +    {
           39  +        try {
           40  +            foreach (Utils::post('select') as $source)
           41  +            {
           42  +                if (!Squelette::resetSource($source))
           43  +                {
           44  +                    throw new UserException('Impossible de réinitialiser le squelette.');
           45  +                }
           46  +            }
           47  +        
           48  +            Utils::redirect('/admin/config/site.php?reset_ok');
           49  +        }
           50  +        catch (UserException $e)
           51  +        {
           52  +            $error = $e->getMessage();
           53  +        }
           54  +    }
           55  +}
           56  +
    35     57   
    36     58   if (Utils::get('edit'))
    37     59   {
    38     60       $source = Squelette::getSource(Utils::get('edit'));
    39     61   
    40     62       if (!$source)
    41     63       {
................................................................................
    69     91       $tpl->assign('sources_json', json_encode(Squelette::listSources()));
    70     92   }
    71     93   else
    72     94   {
    73     95       $tpl->assign('sources', Squelette::listSources());
    74     96   }
    75     97   
           98  +$tpl->assign('reset_ok', Utils::get('reset_ok'));
    76     99   $tpl->assign('error', $error);
    77    100   $tpl->display('admin/config/site.tpl');
    78         -
    79         -?>

Modified src/www/admin/static/scripts/skel_editor.js from [f59b7095aa] to [0e1522caf5].

   164    164   		sel.onchange = code.loadFile;
   165    165   
   166    166   		for (var i in skel_list)
   167    167   		{
   168    168   			if (!skel_list.hasOwnProperty(i))
   169    169   				continue;
   170    170   
   171         -			var skel = skel_list[i];
          171  +			var skel = i;
   172    172   			var opt = document.createElement('option');
   173    173   			opt.value = skel;
   174    174   			opt.innerHTML = skel;
   175    175   			opt.selected = (skel == skel_current) ? true : false;
   176    176   			sel.appendChild(opt);
   177    177   		}
   178    178