1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2024-12-19 20:00:29 +01:00
openstamanager/include/init/update.php
Thomas Zilio 0a911a877a Generalizzazione gestione errori
Aggiunta di un sistema standard per la gestione degli errori in caso di debug disattivato.
Sostituzione di alcuni metodi della classe Database con il corrispettivo Eloquent.
2019-01-06 14:18:48 +01:00

244 lines
9.3 KiB
PHP

<?php
include_once __DIR__.'/../../core.php';
$updateRate = 20;
$scriptValue = $updateRate * 5;
/*
* Aggiornamento tramite AJAX
*/
if (filter('action') == 'do_update') {
// Aggiornamento in progresso
if (Update::isUpdateAvailable()) {
$update = Update::getCurrentUpdate();
$result = Update::doUpdate($updateRate);
if (!empty($result)) {
// Aggiunta del messaggio generico riguardante l'aggiornamento
echo '
<script>
addVersion("'.$update['name'].'");
</script>';
if (is_array($result)) {
// Aggiunta del messaggio riguardante la conclusione dell'aggiornamento del database
if (!empty($update['sql']) && $result[1] == $result[2]) {
echo '
<script>
$("#progress .info").html($("#progress .info").html() + "<p>&nbsp;&nbsp;&nbsp;&nbsp;<i class=\"fa fa-check\"></i> '.tr('Aggiornamento del database (_FILENAME_)', [
'_FILENAME_' => '<i>'.$update['filename'].'.sql</i>',
]).'</p>");
</script>';
}
$rate = $result[1] - $result[0];
} elseif (!empty($update['script'])) {
// Aggiunta del messaggio riguardante la conclusione dello script
echo '
<script>
$("#progress .info").html($("#progress .info").html() + "<p>&nbsp;&nbsp;&nbsp;&nbsp;<i class=\"fa fa-check\"></i> '.tr('Esecuzione dello script di aggiornamento (_FILENAME_)', [
'_FILENAME_' => '<i>'.$update['filename'].'.php</i>',
]).'</p>");
</script>';
$rate = $scriptValue;
}
// Aumento della percentuale di completamento totale
if (!empty($rate)) {
echo '
<script>
addProgress('.$rate.');
</script>';
}
echo '
<script>
$("#result").load("index.php?action=do_update&firstuse='.$_GET['firstuse'].'");
</script>';
} else {
// Fallimento
echo '
<div class="alert alert-danger">
<i class="fa fa-times"></i> '.tr("Errore durante l'esecuzione dell'aggiornamento alla versione _VERSION_", [
'_VERSION_' => $update['version'],
]).'
</div>';
}
}
// Aggiornamento completato
elseif (Update::isUpdateCompleted()) {
Update::updateCleanup();
echo '
<p><strong>'.tr('Aggiornamento completato').'</strong> <i class="fa fa-smile-o"></i></p>
<script>
setPercent(100);
</script>';
// Istruzioni per la prima installazione
if ($_GET['firstuse'] == 'true') {
echo '
<p class="text-danger">'.tr("E' fortemente consigliato rimuovere i permessi di scrittura dal file _FILE_", [
'_FILE_' => '<b>config.inc.php</b>',
]).'.</p>';
}
echo '
<a class="btn btn-success btn-block" href="'.ROOTDIR.'">
<i class="fa fa-check"></i> '.tr('Continua').'
</a>';
}
exit();
} elseif (Update::isUpdateAvailable()) {
// Controllo se l'aggiornamento è in esecuzione
if (Update::isUpdateLocked() && filter('force') === null) {
$pageTitle = tr('Aggiornamento in corso!');
include_once App::filepath('include|custom|', 'top.php');
echo '
<div class="box box-center box-danger box-solid text-center">
<div class="box-header with-border">
<h3 class="box-title">'.tr('Aggiornamento in corso!').'</h3>
</div>
<div class="box-body">
<p>'.tr("E' attualmente in corso la procedura di aggiornamento del software, e pertanto siete pregati di attendere fino alla sua conclusione").'.</p>
<p>'.tr("Nel caso il problema persista, rivolgersi all'amministratore o all'assistenza ufficiale").'.</p>
<a class="btn btn-info" href="'.$rootdir.'/index.php"><i class="fa fa-repeat"></i> '.tr('Riprova').'</a>
</div>
</div>';
include_once App::filepath('include|custom|', 'bottom.php');
exit();
}
$firstuse = !$dbo->isInstalled() ? 'true' : 'false';
$button = !$dbo->isInstalled() ? tr('Installa!') : tr('Aggiorna!');
$pageTitle = !$dbo->isInstalled() ? tr('Installazione') : tr('Aggiornamento');
include_once App::filepath('include|custom|', 'top.php');
echo '
<div class="box box-center-large box-warning text-center">
<div class="box-header with-border">
<h3 class="box-title">'.(!$dbo->isInstalled() ? tr('Installazione') : tr('Aggiornamento')).'</h3>
</div>
<div class="box-body">';
if (!$dbo->isInstalled()) {
echo '
<p><strong>'.tr("E' la prima volta che avvii OpenSTAManager e non hai ancora installato il database").'.</strong></p>';
} else {
echo '
<p>'.tr("E' necessario aggiornare il database a una nuova versione").'.</p>';
}
echo '
<p>'.tr("Premi il tasto _BUTTON_ per procedere con l'".(!$dbo->isInstalled() ? tr('installazione') : tr('aggiornamento')).'!', [
'_BUTTON_' => '<b>"'.$button.'"</b>',
]).'</p>
<input type="button" class="btn btn-primary" value="'.$button.'" onclick="continue_update()" id="contine_button">
<script>
function continue_update(){
swal({
title: "'.(!$dbo->isInstalled() ? tr('Procedere con l\'installazione?') : tr('Procedere l\'aggiornamento?')).'",
text: "",
type: "warning",
showCancelButton: true,
confirmButtonClass: "btn btn-lg btn-success",
confirmButtonText: "'.tr('Procedi').'",
}).then(
function(){
$("#progress").show();
$("#result").load("index.php?action=do_update&firstuse='.$firstuse.'");
$("#contine_button").remove();
}, function(){});
}
</script>
<div id="progress">
<div class="progress">
<div class="progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width:0%">
<span>0%</span>
</div>
</div>
<hr>
<div class="box box-info text-center collapsed-box">
<div class="box-header with-border">
<h3 class="box-title"><a class="clickable" data-widget="collapse">'.tr('Log').'</a></h3>
<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-plus"></i></button>
</div>
</div>
<div class="box-body info text-left"></div>
</div>
</div>
<div id="result"></div>';
$total = 0;
$updates = Update::getTodoUpdates();
foreach ($updates as $update) {
if ($update['sql'] && (!empty($update['done']) || is_null($update['done']))) {
$queries = readSQLFile(DOCROOT.$update['directory'].$update['filename'].'.sql', ';');
$total += count($queries);
if (intval($update['done']) > 1) {
$total -= intval($update['done']) - 2;
}
}
if ($update['script']) {
$total += $scriptValue;
}
}
echo '
<script>
$(document).ready(function(){
$(".login-box").fadeOut();
count = '.count($updates).';
current = 0;
versions = [];
progress = 0;
total = '.$total.';
});
function addProgress(rate){
progress += rate;
percent = progress / total * 100;
percent = Math.round(percent);
percent = percent > 100 ? 100 : percent;
setPercent(percent);
}
function setPercent(percent){
$("#progress .progress-bar").width(percent + "%");
$("#progress .progress-bar span").text(percent + "%");
}
function addVersion(version){
if(versions.indexOf(version) === -1){
versions.push(version);
current += 1;
$("#progress .info").html($("#progress .info").html() + "<p><strong>'.tr('Aggiornamento _DONE_ di _TODO_ (_VERSION_)', [
'_DONE_' => '" + current + "',
'_TODO_' => '" + count + "',
'_VERSION_' => '" + version + "',
]).'</strong></p>");
}
}
</script>
</div>
</div>';
}