1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2024-12-22 21:28:08 +01:00

Aggiunto ripristino da backup

This commit is contained in:
Thomas Zilio 2018-09-19 16:02:15 +02:00
parent 1e3c4bf5ae
commit d8c6f731ce
5 changed files with 119 additions and 26 deletions

2
.gitignore vendored
View File

@ -81,7 +81,9 @@ files/*
!files/my_impianti/
files/my_impianti/*
!files/my_impianti/componente.ini
tmp/
config.inc.php
database.sql
REVISION
.php_cs.cache

View File

@ -32,6 +32,7 @@ directory($extraction_dir);
// Estrazione dell'archivio
$zip->extractTo($extraction_dir);
$zip->close();
// Aggiornamento del progetto
if (file_exists($extraction_dir.'/VERSION')) {
@ -105,7 +106,6 @@ if (file_exists($extraction_dir.'/VERSION')) {
// Rimozione delle risorse inutilizzate
delete($extraction_dir);
$zip->close();
// Redirect
redirect(ROOTDIR.'/editor.php?id_module='.$id_module);

View File

@ -36,3 +36,64 @@ switch (filter('op')) {
break;
}
if (filter('op') == 'restore') {
if (!extension_loaded('zip')) {
flash()->error(tr('Estensione zip non supportata!').'<br>'.tr('Verifica e attivala sul tuo file _FILE_', [
'_FILE_' => '<b>php.ini</b>',
]));
return;
}
if (post('folder') == null) {
$file = $_FILES['blob']['tmp_name'] ?: post('zip');
// Lettura dell'archivio
$zip = new ZipArchive();
if (!$zip->open($file)) {
flash()->error(tr('File di installazione non valido!'));
flash()->error(checkZip($file));
return;
}
// Percorso di estrazione
$extraction_dir = $docroot.'/tmp';
directory($extraction_dir);
// Estrazione dell'archivio
$zip->extractTo($extraction_dir);
$zip->close();
} else {
$extraction_dir = $backup_dir.'/'.post('folder');
}
// Rimozione del database
$tables = include $docroot.'/update/tables.php';
$database->query('SET foreign_key_checks = 0');
foreach ($tables as $tables) {
$database->query('DROP TABLE `'.$tables.'`');
}
$database->query('DROP TABLE `updates`');
// Ripristino del database
$database->multiQuery($extraction_dir.'/database.sql');
$database->query('SET foreign_key_checks = 1');
// Salva il file di configurazione
$config = file_get_contents($docroot.'/config.inc.php');
// Copia i file dalla cartella temporanea alla root
copyr($extraction_dir, $docroot);
// Ripristina il file di configurazione dell'installazione
file_put_contents($docroot.'/config.inc.php', $config);
// Pulizia
if (post('folder') == null) {
delete($extraction_dir);
}
delete($docroot.'/database.sql');
}

View File

@ -27,33 +27,48 @@ if (!is_writable($backup_dir)) {
</div>';
}
echo '
<div class="callout callout-success">
<p>';
if (!empty($backup_dir)) {
echo tr('Il percorso di backup è attualmente in').': <b>'.slashes($backup_dir).'</b>';
$message = tr('Il percorso di backup è attualmente in').': <b>'.slashes($backup_dir).'</b>';
} else {
echo tr('Sembra che tu non abbia ancora specificato un percorso per il backup').'.';
$message = tr('Sembra che tu non abbia ancora specificato un percorso per il backup').'.';
}
echo '
</p>
<div class="row">
<div class="col-md-8">
<div class="callout callout-success">
<p>'.$message.'</p>
<p><small>'.tr('Puoi modificare il percorso di backup dal tuo file _FILE_', [
'_FILE_' => '<b>config.inc.php</b>',
]).'</small></p>';
echo '
</div>
<!-- PULSANTI -->
<!--div class="row">
<div class="col-md-12 text-right">
<button type="button" class="btn btn-primary pull-right" onclick="continue_backup()"><i class="fa fa-database"></i> '.tr('Crea backup').'...</button>
]).'</small></p>
</div>
</div-->';
</div>';
//Lettura file di backup
// Ripristino backup
echo '
<div class="col-md-4">
<div class="box box-success">
<div class="box-header with-border">
<h3 class="box-title">
'.tr('Ripristina backup').'
</h3>
</div>
<div class="box-body">
<form action="" method="post" enctype="multipart/form-data" id="restore">
<input type="hidden" name="op" value="restore">
<label><input type="file" name="blob"></label>
<button type="button" class="btn btn-primary pull-right" onclick="if( confirm(\''.tr('Avviare la procedura?').'\') ){ $(\'#restore\').submit(); }">
<i class="fa fa-upload"></i> '.tr('Ripristina').'...
</button>
</form>
</div>
</div>
</div>
</div>';
// Lettura file di backup
if (file_exists($backup_dir)) {
$backups_zip = [];
$backups_file = [];
@ -100,9 +115,15 @@ if (file_exists($backup_dir)) {
<a class="btn btn-primary" href="'.$rootdir.'/modules/backup/actions.php?op=getfile&file='.$name.'" target="_blank"><i class="fa fa-download"></i> '.tr('Scarica').'</a>
<a class="btn btn-danger ask pull-right" title="'.tr('Elimina backup').'" data-backto="record-list" data-op="del" data-file="'.$name.'">
<div class="pull-right">
<a class="btn btn-warning ask" data-backto="record-edit" data-method="post" data-op="restore" data-zip="'.$name.'" data-msg="'.tr('Vuoi ripristinare questo backup?').'" data-button="Ripristina" data-class="btn btn-lg btn-warning">
<i class="fa fa-upload"></i>
</a>
<a class="btn btn-danger ask" title="'.tr('Elimina backup').'" data-backto="record-list" data-op="del" data-file="'.$name.'">
<i class="fa fa-trash"></i>
</a>
</div>
</div>';
}
} else {
@ -140,9 +161,15 @@ if (file_exists($backup_dir)) {
<a class="btn btn-sm btn-warning disabled" href="javascript:;"><i class="fa fa-times"></i> '.tr('Non scaricabile').'</a>
<a class="btn btn-danger ask pull-right" title="'.tr('Elimina backup').'" data-backto="record-list" data-op="del" data-file="'.$name.'">
<div class="pull-right">
<a class="btn btn-warning ask" data-backto="record-edit" data-method="post" data-op="restore" data-folder="'.$name.'" data-msg="'.tr('Vuoi ripristinare questo backup?').'" data-button="Ripristina" data-class="btn btn-lg btn-warning">
<i class="fa fa-upload"></i>
</a>
<a class="btn btn-danger ask" title="'.tr('Elimina backup').'" data-backto="record-list" data-op="del" data-file="'.$name.'">
<i class="fa fa-trash"></i>
</a>
</div>
</div>';
}
} else {
@ -162,8 +189,11 @@ if (file_exists($backup_dir)) {
}
if (!empty($backup_dir)) {
// Creazione backup
echo '
<button type="button" class="btn btn-primary pull-right" onclick="continue_backup()"><i class="fa fa-database"></i> '.tr('Crea backup').'...</button><div class="clearfix"></div>
<button type="button" class="btn btn-primary pull-right" onclick="continue_backup()"><i class="fa fa-database"></i> '.tr('Crea backup').'...</button>
<div class="clearfix"></div>
<script>
function continue_backup(){

View File

@ -295,7 +295,7 @@ $orario_fine = $data.' '.$orario_fine;
}
//Quando modifico orario inizio, allineo anche l'orario fine
$("#orario_inizio").on("dp.change", function (e) {
$("#orario_fine").data("DateTimePicker").minDate(e.date).format('HH:mm');
$("#orario_fine").data("DateTimePicker").minDate(e.date).format(globals.timestampFormat);
});
// Refresh modulo dopo la chiusura di una pianificazione attività derivante dalle attività