Comment: | Configuration : sauvegardes et restauration |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
e95cd814fb43561da1d3bae13bb950ad |
User & Date: | bohwaz on 2013-01-31 18:09:44 |
Other Links: | manifest | tags |
2013-02-01
| ||
00:25 | Fix [072d4d7af7] saisie de décimales dans chrome check-in: 24bcfcad7b user: bohwaz tags: trunk | |
2013-01-31
| ||
18:09 | Configuration : sauvegardes et restauration check-in: e95cd814fb user: bohwaz tags: trunk | |
16:33 | Ne pas faire de recherche quand on ne cherche rien + utilisation correcte de trim grumpf check-in: 6fc285dd46 user: bohwaz tags: trunk | |
Added include/class.sauvegarde.php version [be28d1c4fd].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
<?php namespace Garradin; class Sauvegarde { const NEED_UPGRADE = 'nu'; public function getList() { $out = array(); $dir = dir(GARRADIN_ROOT); while ($file = $dir->read()) { if ($file[0] != '.' && is_file(GARRADIN_ROOT . '/' . $file) && preg_match('![\w\d._-]+\.sqlite$!i', $file)) { $out[] = $file; } } $dir->close(); return $out; } public function create() { $this->syncDB(); $backup = str_replace('.sqlite', date('.Y-m-d-H-i') . '.sqlite', GARRADIN_DB_FILE); copy(GARRADIN_DB_FILE, $backup); return basename($backup); } protected function syncDB() { $db = DB::getInstance(); $db->exec('END;'); return true; } public function remove($file) { if (preg_match('!\.\.+|/!', $file) || !preg_match('!^[\w\d._-]+$!i', $file)) { throw new UserException('Nom de fichier non valide.'); } return unlink(GARRADIN_ROOT . '/' . $file); } public function dump() { $this->syncDB(); $in = fopen(GARRADIN_DB_FILE, 'r'); $out = fopen('php://output', 'w'); while (!feof($in)) { fwrite($out, fread($in, 8192)); } fclose($in); fclose($out); return true; } public function restoreFromLocal($file) { if (preg_match('!\.\.+|/!', $file) || !preg_match('!^[\w\d._-]+$!i', $file)) { throw new UserException('Nom de fichier non valide.'); } return $this->restoreDB(GARRADIN_ROOT . '/' . $file); } public function restoreFromUpload($file) { if (empty($file['size']) || empty($file['tmp_name']) || !empty($file['error'])) { throw new UserException('Le fichier n\'a pas été correctement envoyé. Essayer de le renvoyer à nouveau.'); } $r = $this->restoreDB($file['tmp_name']); if ($r) { unlink($file['tmp_name']); } return $r; } protected function restoreDB($file) { try { $db = new SQLite3($file, SQLITE3_OPEN_READONLY); } catch (Exception $e) { throw new UserException('Le fichier fourni n\'est pas une base de données valide. ' . 'Message d\'erreur de SQLite : ' . $e->getMessage()); } $check = $db->querySingle('PRAGMA integrity_check;'); if (strtolower(trim($check)) != 'ok') { throw new UserException('Le fichier fourni est corrompu. SQLite a trouvé ' . $check . ' erreurs.'); } // Une vérification de base quand même $table = $db->querySingle('SELECT 1 FROM sqlite_master WHERE type=\'table\';'); if (!$table) { throw new UserException('Le fichier fourni ne semble pas contenir de données liées à Garradin.'); } $version = $db->querySingle('SELECT version FROM config;'); $db->close(); $backup = str_replace('.sqlite', date('.Y-m-d-H-i') . '.pre-restore.sqlite', GARRADIN_DB_FILE); if (!rename(GARRADIN_DB_FILE, $backup)) { throw new \RuntimeException('Unable to backup current DB file.'); } if (!copy($file, GARRADIN_DB_FILE)) { throw new \RuntimeException('Unable to copy backup DB to main location.'); } if ($version != garradin_version()) { return self::NEED_UPGRADE; } return true; } } ?> |
Added templates/admin/config/_menu.tpl version [52ebd9d657].
> > > > > > > |
1 2 3 4 5 6 7 |
<ul class="actions"> <li{if $current == 'index'} class="current"{/if}><a href="{$www_url}admin/config/">Général</a></li> <li{if $current == 'membres'} class="current"{/if}><a href="{$www_url}admin/config/membres.php">Fiche des membres</a></li> <li{if $current == 'site'} class="current"{/if}><a href="{$www_url}admin/config/site.php">Site public</a></li> <li{if $current == 'donnees'} class="current"{/if}><a href="{$www_url}admin/config/donnees.php">Données : sauvegarde et restauration</a></li> <li{if $current == 'import'} class="current"{/if}><a href="{$www_url}admin/config/import.php">Import & export</a></li> </ul> |
Added templates/admin/config/donnees.tpl version [241063d7b5].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
{include file="admin/_head.tpl" title="Données — Sauvegarde et restauration" current="config"} {include file="admin/config/_menu.tpl" current="donnees"} <form method="post" action="{$self_url|escape}"> <fieldset> <legend>Sauvegarde automatique</legend> <p class="help"> En activant cette option une sauvegarde sera automatiquement créée à chaque intervalle donné. Par exemple en activant une sauvegarde hebdomadaire, une copie des données sera réalisée une fois par semaine, sauf si aucune modification n'a été effectuée sur les données ou que personne ne s'est connecté. </p> <dl> <dt><label for="f_frequency">Intervalle de sauvegarde</label></dt> <dd> <select name="frequency" id="f_frequency"> <option value="0">Aucun — les sauvegardes automatiques sont désactivées</option> <option value="1">Quotidien</option> <option value="7">Hebdomadaire</option> <option value="15">Bi-hebdomadaire</option> <option value="30">Mensuel</option> <option value="90">Trimestriel</option> <option value="365">Annuel</option> </select> </dd> <dt><label for="f_max_backups">Nombre de sauvegardes conservées</label></dt> <dd class="help"> Par exemple avec l'intervalle mensuel, en indiquant de conserver 12 sauvegardes, vous pourrez garder un an d'historique de sauvegardes. </dd> <dd class="help"> <strong>Attention :</strong> si vous choisissez un nombre important et un intervalle réduit, l'espace disque occupé par vos sauvegardes va rapidement augmenter. </dd> <dd><input type="number" name="keep_max" if="f_max_backups" min="1" max="90" /></dd> </dl> <p> <input type="submit" name="backup" value="Créer une nouvelle sauvegarde des données" /> </p> </fieldset> </form> <form method="post" action="{$self_url|escape}"> <fieldset> <legend>Copies de sauvegarde disponibles</legend> {if empty($liste)} <p class="help">Aucune copie de sauvegarde disponible.</p> {else} <dl> {foreach from=$liste item="f"} <dd> <label> <input type="radio" name="file" value="{$f|escape}" /> {$f|escape} </label> </dd> {/foreach} </dl> <p> <input type="submit" name="restore" value="Restaurer cette sauvegarde" /> <input type="submit" name="remove" value="Supprimer cette sauvegarde" /> </p> {/if} </fieldset> </form> <form method="post" action="{$self_url|escape}"> <fieldset> <legend>Sauvegarde</legend> <p> <input type="submit" name="backup" value="Créer une nouvelle sauvegarde des données" /> </p> </fieldset> </form> <form method="post" action="{$self_url|escape}"> <fieldset> <legend>Téléchargement</legend> <p> <input type="submit" name="download" value="Télécharger une copie des données sur mon ordinateur" /> </p> </fieldset> <form method="post" action="{$self_url|escape}"> </form> <fieldset> <legend><label for="f_file">Restaurer depuis un fichier</label></legend> <p class="alert"> Attention, l'intégralité des données courantes seront effacées et remplacées par celles contenues dans le fichier fourni. </p> <p class="help"> Une sauvegarde des données courantes sera effectuée avant le remplacement, en cas de besoin d'annuler cette restauration. </p> <p> <input type="file" name="file" id="f_file" /> <input type="submit" name="restore_file" value="Restaurer depuis le fichier sélectionné" /> </p> </fieldset> </form> {include file="admin/_foot.tpl"} |
Added templates/admin/config/import.tpl version [8a9bbe0a3f].
> > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
{include file="admin/_head.tpl" title="Import & export" current="config"} {include file="admin/config/_menu.tpl" current="import"} <fieldset> <dl> <dt>Membres</dt> <dd><a href="{$admin_url}membres/export.php">Export de la liste des membres en CSV (pour tableurs)</a></dd> <dt>Comptabilité</dt> <dd><a href="{$admin_url}compta/import.php">Import des données comptables</a></dd> <dd><a href="{$admin_url}compta/export.php">Export des données comptables en CSV</a></dd> </dl> </fieldset> {include file="admin/_foot.tpl"} |
Modified templates/admin/config/index.tpl from [d3a9ce1c4b] to [ac7341eb6b].
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
{else} <p class="error"> {$error|escape} </p> {/if} {/if} <ul class="actions"> <li class="current"><a href="{$www_url}admin/config/">Général</a></li> <li><a href="{$www_url}admin/config/membres.php">Fiche des membres</a></li> <li><a href="{$www_url}admin/config/site.php">Site public</a></li> </ul> <form method="post" action="{$self_url|escape}"> <fieldset> <legend>Garradin</legend> <dl> <dt>Version installée</dt> |
| < < < < |
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
{else}
<p class="error">
{$error|escape}
</p>
{/if}
{/if}
{include file="admin/config/_menu.tpl" current="index"}
<form method="post" action="{$self_url|escape}">
<fieldset>
<legend>Garradin</legend>
<dl>
<dt>Version installée</dt>
|
Modified templates/admin/config/membres.tpl from [eb401f2a70] to [00ff0a0698].
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
{include file="admin/_head.tpl" title="Configuration — Fiche membres" current="config"} <ul class="actions"> <li><a href="{$www_url}admin/config/">Général</a></li> <li class="current"><a href="{$www_url}admin/config/membres.php">Fiche des membres</a></li> <li><a href="{$www_url}admin/config/site.php">Site public</a></li> </ul> {if $error} {if $error == 'OK'} <p class="confirm"> La configuration a bien été enregistrée. </p> {elseif $error == 'ADD_OK'} |
| < < < < |
1 2 3 4 5 6 7 8 9 10 |
{include file="admin/_head.tpl" title="Configuration — Fiche membres" current="config"}
{include file="admin/config/_menu.tpl" current="membres"}
{if $error}
{if $error == 'OK'}
<p class="confirm">
La configuration a bien été enregistrée.
</p>
{elseif $error == 'ADD_OK'}
|
Modified templates/admin/config/site.tpl from [c187de18fa] to [758d7caa10].
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
{include file="admin/_head.tpl" title="Configuration" current="config"} {if $error && $error != 'OK'} <p class="error"> {$error|escape} </p> {/if} <ul class="actions"> <li><a href="{$www_url}admin/config/">Général</a></li> <li><a href="{$www_url}admin/config/membres.php">Membres</a></li> <li class="current"><a href="{$www_url}admin/config/site.php">Site public</a></li> </ul> {if isset($edit)} <form method="post" action="{$self_url|escape}"> <h3>Éditer un squelette</h3> {if $error == 'OK'} <p class="confirm"> |
| | < < < < |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
{include file="admin/_head.tpl" title="Configuration — Site public" current="config"} {if $error && $error != 'OK'} <p class="error"> {$error|escape} </p> {/if} {include file="admin/config/_menu.tpl" current="site"} {if isset($edit)} <form method="post" action="{$self_url|escape}"> <h3>Éditer un squelette</h3> {if $error == 'OK'} <p class="confirm"> |
Added www/admin/config/_inc.php version [04e5b052de].
> > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php namespace Garradin; require_once __DIR__ . '/../_inc.php'; if ($user['droits']['config'] < Membres::DROIT_ADMIN) { throw new UserException("Vous n'avez pas le droit d'accéder à cette page."); } ?> |
Added www/admin/config/donnees.php version [828cf46bd2].
> > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php namespace Garradin; require_once __DIR__ . '/_inc.php'; $s = new Sauvegarde; if (utils::get('sauvegarde')) { } $tpl->assign('liste', $s->getList()); $tpl->display('admin/config/donnees.tpl'); ?> |
Added www/admin/config/import.php version [84fe620fc0].
> > > > > > > > |
1 2 3 4 5 6 7 8 |
<?php namespace Garradin; require_once __DIR__ . '/_inc.php'; $tpl->display('admin/config/import.tpl'); ?> |
Modified www/admin/config/index.php from [62753fd222] to [b039079021].
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php namespace Garradin; require_once __DIR__ . '/../_inc.php'; if ($user['droits']['config'] < Membres::DROIT_ADMIN) { throw new UserException("Vous n'avez pas le droit d'accéder à cette page."); } $error = false; if (isset($_GET['ok'])) { $error = 'OK'; } |
| < < < < < |
1 2 3 4 5 6 7 8 9 10 11 |
<?php namespace Garradin; require_once __DIR__ . '/_inc.php'; $error = false; if (isset($_GET['ok'])) { $error = 'OK'; } |
Modified www/admin/config/membres.php from [b2a837546b] to [7233ffcadf].
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
...
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
<?php namespace Garradin; require_once __DIR__ . '/../_inc.php'; if ($user['droits']['config'] < Membres::DROIT_ADMIN) { throw new UserException("Vous n'avez pas le droit d'accéder à cette page."); } $error = false; // Restauration de ce qui était en session if ($champs = $membres->sessionGet('champs_membres')) { $champs = new Champs_Membres($champs); ................................................................................ { $error = $e->getMessage(); } } } } function tpl_get_type($type) { global $types; return $types[$type]; } $tpl->assign('error', $error); $tpl->assign('review', isset($_GET['review']) ? true : false); $types = $champs->getTypes(); $tpl->assign('champs', $champs->getAll()); $tpl->assign('types', $types); $tpl->assign('presets', Champs_Membres::listUnusedPresets($champs)); $tpl->assign('new', utils::post('new')); $tpl->register_modifier('get_type', 'Garradin\tpl_get_type'); $tpl->display('admin/config/membres.tpl'); ?> |
|
<
<
<
<
<
<
<
<
<
<
<
|
>
>
|
1
2
3
4
5
6
7
8
9
10
11
...
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
<?php namespace Garradin; require_once __DIR__ . '/_inc.php'; $error = false; // Restauration de ce qui était en session if ($champs = $membres->sessionGet('champs_membres')) { $champs = new Champs_Membres($champs); ................................................................................ { $error = $e->getMessage(); } } } } $tpl->assign('error', $error); $tpl->assign('review', isset($_GET['review']) ? true : false); $types = $champs->getTypes(); $tpl->assign('champs', $champs->getAll()); $tpl->assign('types', $types); $tpl->assign('presets', Champs_Membres::listUnusedPresets($champs)); $tpl->assign('new', utils::post('new')); $tpl->register_modifier('get_type', function ($type) use ($types) { return $types[$type]; }); $tpl->display('admin/config/membres.tpl'); ?> |
Modified www/admin/config/site.php from [280581e919] to [3f77107fc4].
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php namespace Garradin; require_once __DIR__ . '/../_inc.php'; if ($user['droits']['config'] < Membres::DROIT_ADMIN) { throw new UserException("Vous n'avez pas le droit d'accéder à cette page."); } $error = false; if (isset($_GET['ok'])) { $error = 'OK'; } |
| < < < < < |
1 2 3 4 5 6 7 8 9 10 11 |
<?php namespace Garradin; require_once __DIR__ . '/_inc.php'; $error = false; if (isset($_GET['ok'])) { $error = 'OK'; } |