2017-08-04 16:28:16 +02:00
< ? php
2018-07-03 11:12:32 +02:00
include_once __DIR__ . '/../../core.php' ;
2017-08-04 16:28:16 +02:00
$valid_config = isset ( $db_host ) && isset ( $db_name ) && isset ( $db_username ) && isset ( $db_password );
// Gestione del file di configurazione
if ( file_exists ( 'config.inc.php' ) && $valid_config && $dbo -> isConnected ()) {
return ;
}
2017-09-04 12:02:29 +02:00
$pageTitle = tr ( 'Configurazione' );
2017-08-04 16:28:16 +02:00
2018-06-26 09:41:43 +02:00
include_once App :: filepath ( 'include|custom|' , 'top.php' );
2017-08-04 16:28:16 +02:00
// Controllo sull'esistenza di nuovi parametri di configurazione
if ( post ( 'db_host' ) !== null ) {
2018-02-22 09:34:46 +01:00
$db_host = $_POST [ 'db_host' ]; // Fix per evitare la conversione in numero
2017-08-04 16:28:16 +02:00
$db_name = post ( 'db_name' );
$db_username = post ( 'db_username' );
$db_password = post ( 'db_password' );
$valid_config = isset ( $db_host ) && isset ( $db_name ) && isset ( $db_username ) && isset ( $db_password );
// Generazione di una nuova connessione al database
2018-03-30 21:27:57 +02:00
$dbo = Database :: getConnection ( true , [
'db_host' => $db_host ,
'db_name' => $db_name ,
'db_username' => $db_username ,
'db_password' => $db_password ,
]);
2017-08-04 16:28:16 +02:00
2017-08-28 16:53:14 +02:00
// Test della configurazione
if ( post ( 'test' ) !== null ) {
ob_end_clean ();
if ( $dbo -> isConnected ()) {
$requirements = [
'SELECT' ,
'INSERT' ,
'UPDATE' ,
'CREATE' ,
'ALTER' ,
'DROP' ,
];
$db_host = str_replace ( '_' , '\_' , $db_name );
$db_name = str_replace ( '_' , '\_' , $db_name );
$db_username = str_replace ( '_' , '\_' , $db_name );
$results = $dbo -> fetchArray ( 'SHOW GRANTS FOR CURRENT_USER' );
foreach ( $results as $result ) {
2018-01-17 15:47:00 +01:00
$privileges = current ( $result );
2017-08-28 16:53:14 +02:00
if (
2018-01-17 15:47:00 +01:00
str_contains ( $privileges , ' ON `' . $db_name . '`.*' ) ||
str_contains ( $privileges , ' ON *.*' )
2017-08-28 16:53:14 +02:00
) {
2018-01-17 15:47:00 +01:00
$pieces = explode ( ', ' , explode ( ' ON ' , str_replace ( 'GRANT ' , '' , $privileges ))[ 0 ]);
2017-08-28 16:53:14 +02:00
2018-01-30 20:05:12 +01:00
// Permessi generici sul database
2017-08-28 16:53:14 +02:00
if ( in_array ( 'ALL' , $pieces ) || in_array ( 'ALL PRIVILEGES' , $pieces )) {
2018-01-30 20:05:12 +01:00
$requirements = [];
2017-08-28 16:53:14 +02:00
break ;
}
2018-01-30 20:05:12 +01:00
// Permessi specifici sul database
2017-08-28 16:53:14 +02:00
foreach ( $requirements as $key => $value ) {
2018-01-30 20:05:12 +01:00
if ( in_array ( $value , $pieces )) {
2017-08-28 16:53:14 +02:00
unset ( $requirements [ $key ]);
}
}
}
}
2018-01-30 20:05:12 +01:00
// Permessi insufficienti
if ( ! empty ( $requirements )) {
$state = 1 ;
}
// Permessi completi
else {
$state = 2 ;
}
}
// Connessione fallita
else {
2017-08-28 16:53:14 +02:00
$state = 0 ;
}
echo $state ;
exit ();
}
// Creazione della configurazione
2017-08-04 16:28:16 +02:00
if ( $dbo -> isConnected ()) {
// Impostazioni di configurazione strettamente necessarie al funzionamento del progetto
$backup_config = ' < ? php
$backup_dir = __DIR__ . \ ' / backup / \ ' ;
$db_host = \ ' | host | \ ' ;
$db_username = \ ' | username | \ ' ;
$db_password = \ ' | password | \ ' ;
$db_name = \ ' | database | \ ' ;
' ;
$new_config = ( file_exists ( $docroot . '/config.example.php' )) ? file_get_contents ( $docroot . '/config.example.php' ) : $backup_config ;
$values = [
'|host|' => $db_host ,
'|username|' => $db_username ,
'|password|' => $db_password ,
'|database|' => $db_name ,
];
$new_config = str_replace ( array_keys ( $values ), $values , $new_config );
// Controlla che la scrittura del file di configurazione sia andata a buon fine
$creation = file_put_contents ( 'config.inc.php' , $new_config );
if ( ! $creation ) {
echo '
< div class = " box box-center box-danger box-solid text-center " >
< div class = " box-header with-border " >
2017-09-04 12:02:29 +02:00
< h3 class = " box-title " > '.tr(' Permessi di scrittura mancanti ').' </ h3 >
2017-08-04 16:28:16 +02:00
</ div >
< div class = " box-body " >
2017-09-10 14:35:41 +02:00
< p > '.tr(' Sembra che non ci siano i permessi di scrittura sul file _FILE_ ' , [
'_FILE_' => '<b>config.inc.php</b>' ,
]) . ' </ p >
2017-08-04 16:28:16 +02:00
< form action = " '. $rootdir .'/index.php?action=updateconfig&firstuse=true " method = " post " >
< div class = " hide " >
< input type = " hidden " name = " db_name " value = " '. $db_name .' " >
< input type = " hidden " name = " db_password " value = " '. $db_password .' " >
< input type = " hidden " name = " db_username " value = " '. $db_username .' " > ;
< input type = " hidden " name = " db_host " value = " '. $db_host .' " >
</ div >
2017-09-04 12:02:29 +02:00
< a class = " btn btn-warning " href = " '. $rootdir .'/index.php " >< i class = " fa fa-arrow-left " ></ i > '.tr(' Torna indietro ').' </ a >
< button class = " btn btn-info " >< i class = " fa fa-repeat " ></ i > '.tr(' Riprova ').' </ button >
2017-08-04 16:28:16 +02:00
</ form >
< hr >
< div class = " box box-default collapsed-box " >
< div class = " box-header with-border " >
2017-09-04 12:02:29 +02:00
< h4 class = " box-title " >< a class = " clickable " data - widget = " collapse " > '.tr(' Creazione manuale ').' ...</ a ></ h4 >
2017-08-04 16:28:16 +02:00
< 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 " >
2017-09-10 14:35:41 +02:00
< p > '.tr(' Inserire il seguente testo nel file _FILE_ ' , [
'_FILE_' => '<b>config.inc.php</b>' ,
]) . ' </ p >
2017-08-04 16:28:16 +02:00
< pre class = " text-left " > '.htmlentities($new_config).' </ pre >
</ div >
</ div >
</ div >
</ div > ' ;
}
// Continua con l'esecuzione delle operazioni previste
else {
redirect ( ROOTDIR . '/index.php' );
exit ();
}
}
}
// Controlla che i parametri di configurazione permettano l'accesso al database
if (( file_exists ( 'config.inc.php' ) || $valid_config ) && ! $dbo -> isConnected ()) {
echo '
< div class = " box box-center box-danger box-solid text-center " >
< div class = " box-header with-border " >
2017-09-04 12:02:29 +02:00
< h3 class = " box-title " > '.tr(' Impossibile connettersi al database ').' </ h3 >
2017-08-04 16:28:16 +02:00
</ div >
< div class = " box-body " >
2017-09-04 12:02:29 +02:00
< p > '.tr("Si è verificato un' errore durante la connessione al database " ).'.</p>
< p > '.tr(' Controllare di aver inserito correttamente i dati di accesso , e che il database atto ad ospitare i dati del gestionale sia esistente ').' .</ p >
< a class = " btn btn-info " href = " '. $rootdir .'/index.php " >< i class = " fa fa-repeat " ></ i > '.tr(' Riprova ').' </ a >
2017-08-04 16:28:16 +02:00
</ div >
</ div > ' ;
}
2018-02-21 19:34:03 +01:00
$img = App :: getPaths ()[ 'img' ];
2017-08-04 16:28:16 +02:00
// Visualizzazione dell'interfaccia di impostazione iniziale, nel caso il file di configurazione sia mancante oppure i paramentri non siano sufficienti
if ( empty ( $creation ) && ( ! file_exists ( 'config.inc.php' ) || ! $valid_config )) {
if ( file_exists ( 'config.inc.php' )) {
echo '
< div class = " box box-center box-danger box-solid text-center " >
< div class = " box-header with-border " >
2017-09-04 12:02:29 +02:00
< h3 class = " box-title " > '.tr(' Parametri non sufficienti ! ').' </ h3 >
2017-08-04 16:28:16 +02:00
</ div >
< div class = " box-body " >
2017-09-04 12:02:29 +02:00
< p > '.tr("L' avvio del software è fallito a causa dell 'assenza di alcuni paramentri nella configurazione di base").' .</ p >
2017-09-10 14:35:41 +02:00
< p > '.tr("Si prega di controllare che il file _FILE_ contenga tutti i dati inseriti durante la configurazione iniziale (con l' eccezione di password e indirizzo email amministrativi ) " , [
'_FILE_' => '<b>config.inc.php</b>' ,
]) . ' .</ p >
2017-09-04 12:02:29 +02:00
< p > '.tr("Nel caso il problema persista, rivolgersi all' assistenza ufficiale " ).'.</p>
< a class = " btn btn-info " href = " '. $rootdir .'/index.php " >< i class = " fa fa-repeat " ></ i > '.tr(' Riprova ').' </ a >
2017-08-04 16:28:16 +02:00
</ div >
</ div > ' ;
}
// Controlli per essere sicuro che l'utente abbia letto la licenza
echo '
< script >
$ ( document ) . ready ( function (){
$ ( " #smartwizard " ) . smartWizard ({
useURLhash : false ,
showStepURLhash : false ,
theme : " default " ,
transitionEffect : " slideLeft " ,
lang : {
2017-09-04 12:02:29 +02:00
next : " '.tr('Successivo').' " ,
previous : " '.tr('Precedente').' " ,
2017-08-04 16:28:16 +02:00
}
});
$ ( " #smartwizard " ) . on ( " leaveStep " , function ( e , anchorObject , stepNumber , stepDirection ) {
result = true ;
if ( stepDirection == " forward " && $ ( " #step- " + ( stepNumber + 1 ) + " form " ) . length ){
result = $ ( " #step- " + ( stepNumber + 1 ) + " form " ) . parsley () . validate ();
}
if ( ! result ){
2017-09-04 12:02:29 +02:00
swal ( " '.tr('Impossibile procedere').' " , " '.tr('Prima di proseguire devi completare i campi obbligatori!').' " , " error " );
2017-08-04 16:28:16 +02:00
}
$ ( " html, body " ) . animate ({ scrollTop : $ ( " #steps " ) . offset () . top }, 500 );
return result ;
});
2018-06-26 09:41:43 +02:00
2018-05-23 00:28:32 +02:00
$ ( " #install " ) . on ( " click " , function (){
if ( $ ( this ) . closest ( " form " ) . parsley () . validate ()){
prev_html = $ ( " #install " ) . html ();
2018-06-26 14:30:26 +02:00
$ ( " #install " ) . html ( " <i class= \ 'fa fa-spinner fa-pulse fa-fw \ '></i> '.tr('Attendere').'... " );
2018-05-23 00:28:32 +02:00
$ ( " #install " ) . prop ( \ ' disabled\ ' , true );
$ ( " #test " ) . prop ( \ ' disabled\ ' , true );
2018-06-26 09:41:43 +02:00
2018-07-03 11:12:32 +02:00
$ ( " #config-form " ) . submit ();
2018-05-23 00:28:32 +02:00
}
});
2017-08-28 16:53:14 +02:00
$ ( " #test " ) . on ( " click " , function (){
if ( $ ( this ) . closest ( " form " ) . parsley () . validate ()){
2018-04-03 12:10:58 +02:00
prev_html = $ ( " #test " ) . html ();
2018-06-26 14:30:26 +02:00
$ ( " #test " ) . html ( " <i class= \ 'fa fa-spinner fa-pulse fa-fw \ '></i> '.tr('Attendere').'... " );
2018-05-23 00:28:32 +02:00
$ ( " #test " ) . prop ( \ ' disabled\ ' , true );
$ ( " #install " ) . prop ( \ ' disabled\ ' , true );
2017-09-13 17:08:27 +02:00
$ ( this ) . closest ( " form " ) . ajaxSubmit ({
2017-08-28 16:53:14 +02:00
url : " '. $rootdir .'/index.php " ,
2017-09-13 17:08:27 +02:00
data : {
test : 1 ,
},
2018-06-26 09:41:43 +02:00
type : " post " ,
2017-09-13 17:08:27 +02:00
success : function ( data ){
2017-08-28 16:53:14 +02:00
data = parseFloat ( data . trim ());
2018-06-26 09:41:43 +02:00
2018-04-03 12:10:58 +02:00
$ ( " #test " ) . html ( prev_html );
2018-05-23 00:28:32 +02:00
$ ( " #test " ) . prop ( \ ' disabled\ ' , false );
$ ( " #install " ) . prop ( \ ' disabled\ ' , false );
2018-06-26 09:41:43 +02:00
2017-08-28 16:53:14 +02:00
if ( data == 0 ){
2017-09-13 17:08:27 +02:00
swal ( " '.tr('Errore della configurazione').' " , " '.tr('La configurazione non è corretta').'. " , " error " );
2017-08-28 16:53:14 +02:00
} else if ( data == 1 ){
2018-05-11 12:35:05 +02:00
swal ( " '.tr('Permessi insufficienti').' " , " '.tr( " L 'utente non possiede permessi sufficienti per il testing della connessione. Potresti rilevare problemi in fase di installazione.").' . " , " error " );
2017-09-13 17:08:27 +02:00
} else {
swal ( " '.tr('Configurazione corretta').' " , " '.tr('Ti sei connesso con successo al database').'. '.tr( " Clicca su 'Installa' per proseguire " ).'. " , " success " );
2017-08-28 16:53:14 +02:00
}
2017-09-13 17:08:27 +02:00
},
error : function ( data ) {
alert ( " '.tr('Errore').': " + data );
2017-08-28 16:53:14 +02:00
}
});
}
});
2017-08-04 16:28:16 +02:00
});
</ script > ' ;
echo '
< div class = " box box-center-large box-warning " >
< div class = " box-header with-border text-center " >
2017-09-04 12:02:29 +02:00
< img src = " '. $img .'/logo.png " alt = " '.tr('OSM Logo').' " >
< h3 class = " box-title " > '.tr(' OpenSTAManager ').' </ h3 >
2017-08-04 16:28:16 +02:00
</ div >
< div class = " box-body " id = " smartwizard " > ' ;
echo '
< ul >
< li >< a href = " #step-1 " >
2017-09-04 12:02:29 +02:00
< h3 > '.tr(' Requisiti ').' </ h3 >
2017-08-04 16:28:16 +02:00
</ a ></ li >
< li >< a href = " #step-2 " >
2017-09-04 12:02:29 +02:00
< h3 > '.tr(' Licenza ').' </ h3 >
2017-08-04 16:28:16 +02:00
</ a ></ li >
< li >< a href = " #step-3 " >
2017-09-04 12:02:29 +02:00
< h3 > '.tr(' Configurazione ').' </ h3 >
2017-08-04 16:28:16 +02:00
</ a ></ li >
</ ul >
< div id = " steps " >
2018-06-27 14:25:19 +02:00
< div id = " step-1 " > ' ;
2017-08-04 16:28:16 +02:00
2018-10-05 11:53:11 +02:00
// Introduzione
echo '
< p > '.tr(' Benvenuto in _NAME_ ! ' , [
'_NAME_' => '<strong>OpenSTAManager</strong>' ,
]) . ' </ p >
< p > '.tr("Prima di procedere alla configurazione e all' installazione del software , sono necessari alcuni accorgimenti per garantire il corretto funzionamento del gestionale " ).'.</p>
< br >
< p > '.tr(' Le estensioni e impostazioni PHP possono essere personalizzate nel file di configurazione _FILE_ ' , [
'_FILE_' => '<b>php.ini</b>' ,
]) . ' .</ p >
< hr > ' ;
2018-06-27 14:25:19 +02:00
// REQUISITI PER IL CORRETTO FUNZIONAMENTO
include __DIR__ . '/requirements.php' ;
2017-08-04 16:28:16 +02:00
echo '
</ div > ' ;
// LICENZA
echo '
< div id = " step-2 " >
2017-09-10 14:35:41 +02:00
< p > '.tr(' OpenSTAManager è tutelato dalla licenza _LICENSE_ ! ' , [
'_LICENSE_' => 'GPL 3.0' ,
]) . ' </ p >
2017-08-04 16:28:16 +02:00
< div class = " row " >
2018-02-20 16:46:23 +01:00
< div class = " col-md-8 " >
2017-09-04 12:02:29 +02:00
< span class = " pull-left " title = '.tr(' Visiona e accetta la licenza per proseguire ').' > '.tr(' Accetti la licenza GPLv3 di OpenSTAManager ? ').' *</ span >
2017-08-04 16:28:16 +02:00
</ div >
2018-02-20 16:46:23 +01:00
< form class = " col-md-4 " >
2017-08-04 16:28:16 +02:00
< input type = " checkbox " id = " agree " name = " agree " data - parsley - required = " true " >
2017-09-04 12:02:29 +02:00
< label for = " agree " > '.tr(' Ho visionato e accetto ').' .</ label >
2017-08-04 16:28:16 +02:00
</ form >
</ div >
< hr >
< textarea class = " form-control autosize " rows = " 15 " readonly > '.file_get_contents(' LICENSE ').' </ textarea >< br >
2017-09-04 12:02:29 +02:00
< a class = " pull-left " href = " https://www.gnu.org/licenses/translations.en.html#GPL " target = " _blank " > [ '.tr(' Versioni tradotte ').' ] </ a >< br >< br >
2017-08-04 16:28:16 +02:00
</ div > ' ;
$host = ! empty ( $db_host ) ? $db_host : '' ;
$username = ! empty ( $db_username ) ? $db_username : '' ;
$password = ! empty ( $db_password ) ? $db_password : '' ;
$name = ! empty ( $db_name ) ? $db_name : '' ;
// PARAMETRI
echo '
< div id = " step-3 " >
2018-05-03 12:53:30 +02:00
< a href = " https://www.openstamanager.com/contattaci/?subject=Assistenza%20installazione%20OSM " target = " _blank " >< img class = " pull-right " width = " 32 " src = " '. $img .'/help.png " alt = " '.tr('Aiuto').' " title = " '.tr('Contatta il nostro help-desk').' " /></ a >
2017-08-04 16:28:16 +02:00
2017-09-04 12:02:29 +02:00
< p > '.tr(' Non hai ancora configurato OpenSTAManager ').' .</ p >
2017-09-10 14:35:41 +02:00
< p >< small class = " help-block " > '.tr(' Configura correttamente il software con i seguenti parametri ( modificabili successivamente dal file _FILE_ ) ' , [
'_FILE_' => '<b>config.inc.php</b>' ,
]) . '</small></p>' ;
2017-08-04 16:28:16 +02:00
// Form dei parametri
echo '
2018-07-03 11:12:32 +02:00
< form action = " ?action=updateconfig&firstuse=true " method = " post " id = " config-form " >
2017-08-04 16:28:16 +02:00
< div class = " row " > ' ;
// db_host
echo '
2018-02-22 09:44:26 +01:00
< div class = " col-md-12 " >
2018-05-23 00:28:32 +02:00
{[ " type " : " text " , " label " : " '.tr('Host del database').' " , " name " : " db_host " , " placeholder " : " '.tr( " Indirizzo dell 'host del database").' " , " value " : " '.$host.' " , " help " : " '.tr(' Esempio ').' : localhost " , " show - help " : 0, " required " : 1 ]}
2017-08-04 16:28:16 +02:00
</ div >
</ div >
< div class = " row " > ' ;
// db_username
echo '
2018-02-20 16:46:23 +01:00
< div class = " col-md-4 " >
2018-05-23 00:28:32 +02:00
{[ " type " : " text " , " label " : " '.tr( " Username dell 'utente MySQL").' " , " name " : " db_username " , " placeholder " : " '.tr("Username dell' utente MySQL " ).' " , " value " : " '. $username .' " , " help " : " '.tr('Esempio').': root " , " show-help " : 0 , " required " : 1 ]}
2017-08-04 16:28:16 +02:00
</ div > ' ;
// db_password
echo '
2018-02-20 16:46:23 +01:00
< div class = " col-md-4 " >
2018-05-23 00:28:32 +02:00
{[ " type " : " password " , " label " : " '.tr( " Password dell 'utente MySQL").' " , " name " : " db_password " , " placeholder " : " '.tr("Password dell' utente MySQL " ).' " , " value " : " '. $password .' " , " help " : " '.tr('Esempio').': mysql " , " show-help " : 0 ]}
2017-08-04 16:28:16 +02:00
</ div > ' ;
// db_name
echo '
2018-02-20 16:46:23 +01:00
< div class = " col-md-4 " >
2018-05-23 00:28:32 +02:00
{[ " type " : " text " , " label " : " '.tr('Nome del database').' " , " name " : " db_name " , " placeholder " : " '.tr('Nome del database').' " , " value " : " '. $name .' " , " help " : " '.tr('Esempio').': openstamanager " , " show-help " : 0 , " required " : 1 ]}
2017-08-04 16:28:16 +02:00
</ div >
</ div > ' ;
echo '
<!-- PULSANTI -->
< div class = " row " >
< div class = " col-md-4 " >
2017-09-04 12:02:29 +02:00
< span >*< small >< small > '.tr(' Campi obbligatori ').' </ small ></ small ></ span >
2017-08-04 16:28:16 +02:00
</ div >
2017-08-28 16:53:14 +02:00
< div class = " col-md-4 text-right " >
< button type = " button " id = " test " class = " btn btn-warning btn-block " >
2017-09-04 12:02:29 +02:00
< i class = " fa fa-file-text " ></ i > '.tr(' Testa il database ').'
2017-08-28 16:53:14 +02:00
</ button >
</ div >
< div class = " col-md-4 text-right " >
2018-06-27 18:58:50 +02:00
< button type = " submit " id = " install " class = " btn btn-success btn-block " >
2017-09-04 12:02:29 +02:00
< i class = " fa fa-check " ></ i > '.tr(' Installa ').'
2017-08-04 16:28:16 +02:00
</ button >
</ div >
</ div >
</ form >
</ div >
</ div >
</ div >
</ div > ' ;
}
2018-06-26 09:41:43 +02:00
include_once App :: filepath ( 'include|custom|' , 'bottom.php' );
2017-08-04 16:28:16 +02:00
exit ();