Comment: | Redécoupage de la partie "Sauvegarde et restauration" de la configuration, ajout d'une constante permettant de désactiver les sauvegardes automatiques |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | dev |
Files: | files | file ages | folders |
SHA1: |
1365430651520fd757ca489779a77a51 |
User & Date: | bohwaz on 2018-08-03 14:56:45 |
Other Links: | branch diff | manifest | tags |
2018-08-04
| ||
00:41 | Ajout contraintes sur les champs de type date dans la table membres check-in: f41f7b540e user: bohwaz tags: dev | |
2018-08-03
| ||
14:56 | Redécoupage de la partie "Sauvegarde et restauration" de la configuration, ajout d'une constante permettant de désactiver les sauvegardes automatiques check-in: 1365430651 user: bohwaz tags: dev | |
14:03 | Corrections diverses sous menu configuration check-in: a5c1d5d229 user: bohwaz tags: dev | |
Modified src/config.dist.php from [1f09233dd8] to [705b238773].
︙ | ︙ | |||
247 248 249 250 251 252 253 | * Utile pour les services d'envoi SMTP tiers comme Amazon SES. * Si activé le "From" sera : "Nom de l'association" <adresse@email.tld> * avec le Reply-To positionné sur l'adresse de l'association * * Défaut : false */ const FORCE_EMAIL_FROM = false; | > > > > > > > > > > > > > > > | 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 | * Utile pour les services d'envoi SMTP tiers comme Amazon SES. * Si activé le "From" sera : "Nom de l'association" <adresse@email.tld> * avec le Reply-To positionné sur l'adresse de l'association * * Défaut : false */ const FORCE_EMAIL_FROM = false; /** * Activer les sauvegardes automatiques * * Utile à désactiver si vous avez déjà des sauvegardes effectuées * automatiquement au niveau du système. * * Sinon les sauvegardes seront effectuées soit par la tâche cron * soit à l'affichage de la page d'accueil (si nécessaire). * * Voir paramètre USE_CRON aussi * * Défaut : true */ const ENABLE_AUTOMATIC_BACKUPS = true; |
Modified src/cron.php from [12f97b4850] to [3bfc0d1c2d].
1 2 3 4 5 6 7 8 | <?php namespace Garradin; require_once __DIR__ . '/include/init.php'; // Exécution des tâches automatiques | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php namespace Garradin; require_once __DIR__ . '/include/init.php'; // Exécution des tâches automatiques if (ENABLE_AUTOMATIC_BACKUPS && $config->get('frequence_sauvegardes') && $config->get('nombre_sauvegardes')) { $s = new Sauvegarde; $s->auto(); } // Exécution des rappels automatiques $rappels = new Rappels; |
︙ | ︙ |
Modified src/include/init.php from [5ff1d716c3] to [da50a8b3c5].
︙ | ︙ | |||
106 107 108 109 110 111 112 113 114 115 116 117 118 119 | 'SMTP_USER' => null, 'SMTP_PASSWORD' => null, 'SMTP_PORT' => 587, 'SMTP_SECURITY' => 'STARTTLS', 'ADMIN_URL' => WWW_URL . 'admin/', 'NTP_SERVER' => 'fr.pool.ntp.org', 'FORCE_EMAIL_FROM' => false, ]; foreach ($default_config as $const => $value) { $const = sprintf('Garradin\\%s', $const); if (!defined($const)) | > | 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | 'SMTP_USER' => null, 'SMTP_PASSWORD' => null, 'SMTP_PORT' => 587, 'SMTP_SECURITY' => 'STARTTLS', 'ADMIN_URL' => WWW_URL . 'admin/', 'NTP_SERVER' => 'fr.pool.ntp.org', 'FORCE_EMAIL_FROM' => false, 'ENABLE_AUTOMATIC_BACKUPS' => true, ]; foreach ($default_config as $const => $value) { $const = sprintf('Garradin\\%s', $const); if (!defined($const)) |
︙ | ︙ |
Modified src/templates/admin/config/_menu.tpl from [f5431a24f4] to [53db92aa96].
1 | <ul class="actions"> | | | | | | < | | 1 2 3 4 5 6 7 8 | <ul class="actions"> <li{if $current == 'index'} class="current"{/if}><a href="{$admin_url}config/">Général</a></li> <li{if $current == 'categories'} class="current"{/if}><a href="{$admin_url}config/categories/">Catégories de membres</a></li> <li{if $current == 'fiches_membres'} class="current"{/if}><a href="{$admin_url}config/membres.php">Fiche des membres</a></li> <li{if $current == 'site'} class="current"{/if}><a href="{$admin_url}config/site.php">Site public</a></li> <li{if $current == 'donnees'} class="current"{/if}><a href="{$admin_url}config/donnees/">Sauvegarde et restauration</a></li> <li{if $current == 'plugins'} class="current"{/if}><a href="{$admin_url}config/plugins.php">Extensions</a></li> </ul> |
Deleted src/templates/admin/config/donnees.tpl version [bbe16924a5].
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Added src/templates/admin/config/donnees/_menu.tpl version [5c0a10d272].
> > > > > > > > | 1 2 3 4 5 6 7 8 | <ul class="actions sub"> <li{if $current == 'index'} class="current"{/if}><a href="{$admin_url}config/donnees/">Sauvegarder et restaurer</a></li> <li{if $current == 'import'} class="current"{/if}><a href="{$admin_url}config/donnees/import.php">Import et export</a></li> {if ENABLE_AUTOMATIC_BACKUPS} <li{if $current == 'local'} class="current"{/if}><a href="{$admin_url}config/donnees/local.php">Gestion des sauvegardes</a></li> <li{if $current == 'automatique'} class="current"{/if}><a href="{$admin_url}config/donnees/automatique.php">Configuration de la sauvegarde automatique</a></li> {/if} </ul> |
Added src/templates/admin/config/donnees/automatique.tpl version [1804eff257].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | {include file="admin/_head.tpl" title="Sauvegarde et restauration" current="config"} {include file="admin/config/_menu.tpl" current="donnees"} {include file="admin/config/donnees/_menu.tpl" current="automatique"} {form_errors} {if $ok == 'config'} <p class="confirm">La configuration a bien été enregistrée.</p> {/if} <form method="post" action="{$self_url_no_qs}"> <fieldset> <legend>Configuration de la 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> <b title="(Champ obligatoire)">obligatoire</b></dt> <dd> <select name="frequence_sauvegardes" required="required" id="f_frequency"> <option value="0"{form_field name=frequence_sauvegardes data=$config selected=0}>Aucun — les sauvegardes automatiques sont désactivées</option> <option value="1"{form_field name=frequence_sauvegardes data=$config selected=1}>Quotidien, tous les jours</option> <option value="7"{form_field name=frequence_sauvegardes data=$config selected=7}>Hebdomadaire, tous les 7 jours</option> <option value="15"{form_field name=frequence_sauvegardes data=$config selected=15}>Bimensuel, tous les 15 jours</option> <option value="30"{form_field name=frequence_sauvegardes data=$config selected=30}>Mensuel</option> <option value="90"{form_field name=frequence_sauvegardes data=$config selected=90}>Trimestriel</option> <option value="365{form_field name=frequence_sauvegardes data=$config selected=365}">Annuel</option> </select> </dd> <dt><label for="f_max_backups">Nombre de sauvegardes conservées</label> <b title="(Champ obligatoire)">obligatoire</b></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="nombre_sauvegardes" value="{form_field name=nombre_sauvegardes data=$config}" if="f_max_backups" min="1" max="90" required="required" /></dd> </dl> <p> {csrf_field key="backup_config"} <input type="submit" name="config" value="Enregistrer →" /> </p> </fieldset> </form> {include file="admin/_foot.tpl"} |
Modified src/templates/admin/config/donnees/import.tpl from [e2b6c250be] to [79252f8a0f].
1 2 | {include file="admin/_head.tpl" title="Import & export" current="config"} | | > > | > | | | > | | 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="Import & export" current="config"} {include file="admin/config/_menu.tpl" current="donnees"} {include file="admin/config/donnees/_menu.tpl" current="import"} <fieldset> <dl> <dt>Membres</dt> <dd><a href="{$admin_url}membres/import.php">Import de la liste des membres</a></dd> <dd><a href="{$admin_url}membres/import.php?export=ods">Export de la liste des membres au format tableur Calc / Excel</a></dd> <dd><a href="{$admin_url}membres/import.php?export=csv">Export de la liste des membres au format CSV</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/import.php?export=ods">Export des données comptables au format tableur Calc / Excel</a></dd> <dd><a href="{$admin_url}compta/import.php?export=csv">Export des données comptables au format CSV</a></dd> </dl> </fieldset> {include file="admin/_foot.tpl"} |
Added src/templates/admin/config/donnees/index.tpl version [734344c866].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | {include file="admin/_head.tpl" title="Sauvegarde et restauration" current="config"} {include file="admin/config/_menu.tpl" current="donnees"} {include file="admin/config/donnees/_menu.tpl" current="index"} {form_errors} {if $code == Garradin\Sauvegarde::INTEGRITY_FAIL && Garradin\ALLOW_MODIFIED_IMPORT} <p class="alert">Pour passer outre, renvoyez le fichier en cochant la case « Ignorer les erreurs ». Attention, si vous avez effectué des modifications dans la base de données, cela peut créer des bugs !</p> {/if} {if $ok} <p class="confirm"> {if $ok == 'restore'}La restauration a bien été effectuée. Si vous désirez revenir en arrière, vous pouvez utiliser la sauvegarde automatique nommée <em>{$now_date}.avant_restauration.sqlite</em>, sinon vous pouvez l'effacer. {if $ok_code & Garradin\Sauvegarde::NOT_AN_ADMIN} </p> <p class="alert"> <strong>Vous n'êtes pas administrateur dans cette sauvegarde.</strong> Garradin a donné les droits d'administration à toutes les catégories afin d'empêcher de ne plus pouvoir se connecter. Merci de corriger les droits des catégories maintenant. {/if} {elseif $ok == 'remove'}La sauvegarde a été supprimée. {/if} </p> {/if} <form method="post" action="{$self_url_no_qs}"> <fieldset> <legend>Téléchargement d'une sauvegarde</legend> <p class="help"> Info : la base de données fait actuellement {$db_size|format_bytes} (dont {$files_size|format_bytes} pour les documents et images). </p> <p> {csrf_field key="backup_download"} <input type="submit" name="download" value="Télécharger une copie de la base de données sur mon ordinateur →" /> </p> </fieldset> </form> <form method="post" action="{$self_url_no_qs}" enctype="multipart/form-data"> <fieldset> <legend><label for="f_file">Restaurer depuis un fichier de sauvegarde</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> {csrf_field key="backup_restore"} <input type="hidden" name="MAX_FILE_SIZE" value="{$max_file_size}" /> <input type="file" name="file" id="f_file" required="required" /> (maximum {$max_file_size|format_bytes}) <input type="submit" name="restore_file" value="Restaurer depuis le fichier sélectionné →" /> </p> {if $code && ($code == Garradin\Sauvegarde::INTEGRITY_FAIL && Garradin\ALLOW_MODIFIED_IMPORT)} <p> <label><input type="checkbox" name="force_import" value="1" /> Ignorer les erreurs, je sais ce que je fait</label> </p> {/if} </fieldset> </form> {include file="admin/_foot.tpl"} |
Added src/templates/admin/config/donnees/local.tpl version [422efd646c].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | {include file="admin/_head.tpl" title="Gestion des sauvegardes" current="config"} {include file="admin/config/_menu.tpl" current="donnees"} {include file="admin/config/donnees/_menu.tpl" current="local"} {form_errors} {if $ok} <p class="confirm"> {if $ok == 'create'}Une nouvelle sauvegarde a été créée. {elseif $ok == 'restore'}La restauration a bien été effectuée. Si vous désirez revenir en arrière, vous pouvez utiliser la sauvegarde automatique nommée <em>date-du-jour.avant_restauration.sqlite</em>, sinon vous pouvez l'effacer. {if $ok_code & Garradin\Sauvegarde::NOT_AN_ADMIN} </p> <p class="alert"> <strong>Vous n'êtes pas administrateur dans cette sauvegarde.</strong> Garradin a donné les droits d'administration à toutes les catégories afin d'empêcher de ne plus pouvoir se connecter. Merci de corriger les droits des catégories maintenant. {/if} {elseif $ok == 'remove'}La sauvegarde a été supprimée. {/if} </p> {/if} <form method="post" action="{$self_url_no_qs}"> <fieldset> <legend>Copies de sauvegarde disponibles</legend> {if empty($liste)} <p class="help">Aucune copie de sauvegarde disponible.</p> {else} <dl> <dt><label for="f_select">Sélectionner une sauvegarde</label></dt> <dd> <select name="file" id="f_select"> {foreach from=$liste key="f" item="d"} <option value="{$f}">{$f} — {$d|date_fr:'d/m/Y à H:i'}</option> {/foreach} </select> </dd> <dd class="help"> Attention, en cas de restauration, l'intégralité des données courantes seront effacées et remplacées par celles contenues dans la sauvegarde sélectionnée. Cependant, afin de prévenir toute erreur une sauvegarde des données sera réalisée avant la restauration. </dd> </dl> <p> {csrf_field key="backup_manage"} <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_no_qs}"> <fieldset> <legend>Sauvegarde manuelle</legend> <p> {csrf_field key="backup_create"} <input type="submit" name="create" value="Créer une nouvelle sauvegarde des données →" /> </p> </fieldset> </form> {include file="admin/_foot.tpl"} |
Deleted src/www/admin/config/donnees.php version [37588fe983].
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Added src/www/admin/config/donnees/automatique.php version [05a939d15b].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | <?php namespace Garradin; require_once __DIR__ . '/../_inc.php'; if (!ENABLE_AUTOMATIC_BACKUPS) { throw new UserException('Les sauvegardes automatiques sont désactivées.'); } if (f('config')) { $form->check('backup_config', [ 'frequence_sauvegardes' => 'present|numeric|min:0|max:365', 'nombre_sauvegardes' => 'present|numeric|min:1|max:90', ]); if (!$form->hasErrors()) { try { $config->set('frequence_sauvegardes', f('frequence_sauvegardes')); $config->set('nombre_sauvegardes', f('nombre_sauvegardes')); $config->save(); Utils::redirect(ADMIN_URL . 'config/donnees/automatique.php?ok=config'); } catch (UserException $e) { $form->addError($e->getMessage()); } } } $tpl->assign('ok', qg('ok')); $tpl->display('admin/config/donnees/automatique.tpl'); |
Modified src/www/admin/config/donnees/import.php from [0d90db7427] to [f13c6c5a62].
1 2 3 | <?php namespace Garradin; | | | | 1 2 3 4 5 6 | <?php namespace Garradin; require_once __DIR__ . '/../_inc.php'; $tpl->display('admin/config/donnees/import.tpl'); |
Added src/www/admin/config/donnees/index.php version [ef2538f8fe].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | <?php namespace Garradin; require_once __DIR__ . '/../_inc.php'; $s = new Sauvegarde; if (f('download')) { $form->check('backup_download'); if (!$form->hasErrors()) { header('Content-type: application/octet-stream'); header('Content-Disposition: attachment; filename="' . $config->get('nom_asso') . ' - Sauvegarde données - ' . date('Y-m-d') . '.sqlite"'); header('Content-Length: ' . $s->getDBSize(true)); $s->dump(); exit; } } elseif (f('restore_file')) { $form->check('backup_restore'); if (!$form->hasErrors()) { // Ignorer la vérification d'intégrité si autorisé et demandé $check = (ALLOW_MODIFIED_IMPORT && f('force_import')) ? false : true; try { $r = $s->restoreFromUpload($_FILES['file'], $user->id, $check); Utils::redirect(ADMIN_URL . 'config/donnees/?ok=restore&code=' . (int)$r); } catch (UserException $e) { $form->addError($e->getMessage()); $code = $e->getCode(); } } } $tpl->assign('db_size', $s->getDBSize()); $tpl->assign('files_size', $s->getDBFilesSize()); $tpl->assign('code', $code); $tpl->assign('ok_code', qg('code')); $tpl->assign('ok', qg('ok')); $tpl->assign('now_date', date('Y-m-d')); $tpl->assign('max_file_size', Utils::getMaxUploadSize()); $tpl->display('admin/config/donnees/index.tpl'); |
Added src/www/admin/config/donnees/local.php version [26c48b632d].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | <?php namespace Garradin; require_once __DIR__ . '/../_inc.php'; $s = new Sauvegarde; if (f('create')) { $form->check('backup_create'); if (!$form->hasErrors()) { try { $s->create(); Utils::redirect(ADMIN_URL . 'config/donnees/local.php?ok=create'); } catch (UserException $e) { $form->addError($e->getMessage()); } } } if (f('restore')) { $form->check('backup_manage'); if (!$form->hasErrors()) { try { $r = $s->restoreFromLocal(f('file')); Utils::redirect(ADMIN_URL . 'config/donnees/local.php?ok=restore&code=' . (int)$r); } catch (UserException $e) { $form->addError($e->getMessage()); } } } elseif (f('remove')) { $form->check('backup_manage'); if (!$form->hasErrors()) { try { $s->remove(f('file')); Utils::redirect(ADMIN_URL . 'config/donnees/local.php?ok=remove'); } catch (UserException $e) { $form->addError($e->getMessage()); } } } $tpl->assign('code', $code); $tpl->assign('ok_code', qg('code')); $tpl->assign('ok', qg('ok')); $tpl->assign('liste', $s->getList()); $tpl->display('admin/config/donnees/local.tpl'); |
Modified src/www/admin/static/admin.css from [ac3a89353d] to [b7ae410275].
︙ | ︙ | |||
409 410 411 412 413 414 415 | float: right; } ul.actions { list-style-type: none; margin: 1em 0; border-bottom: .1em solid #9c4f15; | | > > > > > > > > > | | 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 | float: right; } ul.actions { list-style-type: none; margin: 1em 0; border-bottom: .1em solid #9c4f15; border-bottom-color: rgb(var(--gMainColor)); padding: 0 1em; z-index: 100; } ul.actions.sub { margin: -1em 2em 1em 0; padding-top: 1em; border-right: .1em solid #9c4f15; border-right-color: rgb(var(--gMainColor)); border-bottom-right-radius: .5em; } ul.actions li { display: inline-block; margin: 0 0.2em; } ul.actions li a, ul.actions li label { display: inline-block; background: rgb(217, 134, 40); background: rgba(217, 134, 40, .5); background: rgba(var(--gSecondColor), .5); border-radius: .5em .5em 0 0; padding: .1em .5em; color: #000; text-decoration: none; transition: background-color .2s, color .2s; } ul.actions li input { display: none; } ul.actions li.current a, ul.actions li input:checked + label { background: #9c4f15; background: rgb(var(--gMainColor)); color: #fff; color: rgb(var(--gBgColor)); } ul.actions li a:hover, ul.actions li label:hover { color: #fff; background-color: rgb(var(--gMainColor)); text-decoration: underline; border-bottom: none; } h3.warning { margin: 1em; color: red; |
︙ | ︙ |