2006-02-26 16:31:11 +01:00
< ? php
2016-02-22 18:45:00 +01:00
/* Copyright ( C ) 2004 Rodolphe Quiedeville < rodolphe @ quiedeville . org >
2018-07-09 13:02:01 +02:00
* Copyright ( C ) 2004 - 2018 Laurent Destailleur < eldy @ users . sourceforge . net >
2016-02-22 18:45:00 +01:00
* Copyright ( C ) 2005 - 2010 Regis Houssin < regis . houssin @ capnetworks . com >
* Copyright ( C ) 2015 - 2016 Raphaël Doursenaud < rdoursenaud @ gpcsolutions . fr >
2006-02-26 16:31:11 +01:00
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
2013-01-16 15:36:08 +01:00
* the Free Software Foundation ; either version 3 of the License , or
2006-02-26 16:31:11 +01:00
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
2011-08-01 01:24:38 +02:00
* along with this program . If not , see < http :// www . gnu . org / licenses />.
2014-01-15 19:12:55 +01:00
*
* Upgrade scripts can be ran from command line with syntax :
*
* cd htdocs / install
2015-03-20 17:57:40 +01:00
* php upgrade . php 3.4 . 0 3.5 . 0 [ dirmodule | ignoredbversion ]
2018-07-09 13:02:01 +02:00
* php upgrade2 . php 3.4 . 0 3.5 . 0 [ MODULE_NAME1_TO_ENABLE , MODULE_NAME2_TO_ENABLE ]
2014-01-15 19:12:55 +01:00
*
2018-07-09 13:02:01 +02:00
* And for final step :
* php step5 . php 3.4 . 0 3.5 . 0
*
* Option 'dirmodule' allows to provide a path for an external module , so we migrate from command line using a script from a module .
* Option 'ignoredbversion' allows to run migration even if database version does not match start version of migration
2014-01-15 19:12:55 +01:00
* Return code is 0 if OK , > 0 if error
2006-02-26 16:31:11 +01:00
*/
/**
2009-06-15 20:16:22 +02:00
* \file htdocs / install / upgrade . php
* \brief Run migration script
*/
2006-02-26 16:31:11 +01:00
2012-08-23 02:46:16 +02:00
include_once 'inc.php' ;
2009-09-11 17:23:42 +02:00
if ( ! file_exists ( $conffile ))
{
2011-09-29 22:21:57 +02:00
print 'Error: Dolibarr config file was not found. This may means that Dolibarr is not installed yet. Please call the page "/install/index.php" instead of "/install/upgrade.php").' ;
2009-09-11 17:23:42 +02:00
}
2016-04-17 15:39:46 +02:00
require_once $conffile ;
2012-08-22 23:11:24 +02:00
require_once $dolibarr_main_document_root . '/core/lib/admin.lib.php' ;
2008-01-12 19:00:48 +01:00
2016-02-22 18:45:00 +01:00
global $langs ;
2006-02-26 16:31:11 +01:00
$grant_query = '' ;
2015-07-06 15:29:58 +02:00
$step = 2 ;
2006-02-26 16:31:11 +01:00
$ok = 0 ;
2009-04-28 08:08:19 +02:00
// Cette page peut etre longue. On augmente le delai autorise.
2006-02-26 16:31:11 +01:00
// Ne fonctionne que si on est pas en safe_mode.
$err = error_reporting ();
error_reporting ( 0 );
2015-03-17 15:43:11 +01:00
@ set_time_limit ( 300 );
2006-02-26 16:31:11 +01:00
error_reporting ( $err );
2014-11-06 13:46:12 +01:00
2017-10-26 18:40:12 +02:00
$setuplang = GETPOST ( " selectlang " , 'aZ09' , 3 ) ? GETPOST ( " selectlang " , 'aZ09' , 3 ) : 'auto' ;
2005-10-30 02:07:00 +01:00
$langs -> setDefaultLang ( $setuplang );
2017-10-26 18:40:12 +02:00
$versionfrom = GETPOST ( " versionfrom " , 'alpha' , 3 ) ? GETPOST ( " versionfrom " , 'alpha' , 3 ) : ( empty ( $argv [ 1 ]) ? '' : $argv [ 1 ]);
$versionto = GETPOST ( " versionto " , 'alpha' , 3 ) ? GETPOST ( " versionto " , '' , 3 ) : ( empty ( $argv [ 2 ]) ? '' : $argv [ 2 ]);
$dirmodule = (( GETPOST ( " dirmodule " , 'alpha' , 3 ) && GETPOST ( " dirmodule " , 'alpha' , 3 ) != 'ignoredbversion' )) ? GETPOST ( " dirmodule " , 'alpha' , 3 ) : (( empty ( $argv [ 3 ]) || $argv [ 3 ] == 'ignoredbversion' ) ? '' : $argv [ 3 ]);
2018-04-16 12:23:24 +02:00
$ignoredbversion = ( GETPOST ( 'ignoredbversion' , 'alpha' , 3 ) == 'ignoredbversion' ) ? GETPOST ( 'ignoredbversion' , 'alpha' , 3 ) : (( empty ( $argv [ 3 ]) || $argv [ 3 ] != 'ignoredbversion' ) ? '' : $argv [ 3 ]);
2006-02-26 16:31:11 +01:00
$langs -> load ( " admin " );
2012-09-07 17:23:16 +02:00
$langs -> load ( " install " );
2015-07-20 13:55:43 +02:00
$langs -> load ( " other " );
2012-09-07 17:23:16 +02:00
$langs -> load ( " errors " );
2006-02-26 16:31:11 +01:00
2006-08-06 01:55:10 +02:00
if ( $dolibarr_main_db_type == " mysqli " ) $choix = 1 ;
if ( $dolibarr_main_db_type == " pgsql " ) $choix = 2 ;
2007-09-01 13:23:34 +02:00
if ( $dolibarr_main_db_type == " mssql " ) $choix = 3 ;
2006-08-06 01:55:10 +02:00
2006-02-26 16:31:11 +01:00
2015-07-06 16:33:45 +02:00
dolibarr_install_syslog ( " --- upgrade: Entering upgrade.php page " );
if ( ! is_object ( $conf )) dolibarr_install_syslog ( " upgrade2: conf file not initialized " , LOG_ERR );
2006-06-17 16:13:49 +02:00
2009-06-15 20:16:22 +02:00
/*
* View
*/
2014-11-18 19:03:02 +01:00
if ( ! $versionfrom && ! $versionto )
{
2014-11-06 13:46:12 +01:00
print 'Error: Parameter versionfrom or versionto missing.' . " \n " ;
2018-07-09 13:02:01 +02:00
print 'Upgrade must be ran from command line with parameters or called from page install/index.php (like a first install)' . " \n " ;
2014-11-06 13:46:12 +01:00
// Test if batch mode
$sapi_type = php_sapi_name ();
2014-11-18 19:03:02 +01:00
$script_file = basename ( __FILE__ );
2014-11-06 13:46:12 +01:00
$path = dirname ( __FILE__ ) . '/' ;
2015-02-14 12:24:16 +01:00
if ( substr ( $sapi_type , 0 , 3 ) == 'cli' )
2014-11-06 13:46:12 +01:00
{
print 'Syntax from command line: ' . $script_file . " x.y.z a.b.c \n " ;
2014-11-18 19:03:02 +01:00
}
exit ;
}
2014-11-06 13:46:12 +01:00
2017-05-16 13:27:32 +02:00
pHeader ( '' , " upgrade2 " , GETPOST ( 'action' , 'aZ09' ), 'versionfrom=' . $versionfrom . '&versionto=' . $versionto );
2006-02-26 16:31:11 +01:00
2009-06-15 20:16:22 +02:00
$actiondone = 0 ;
2007-10-04 19:07:15 +02:00
2012-04-04 20:37:16 +02:00
// Action to launch the migrate script
2017-05-16 13:27:32 +02:00
if ( ! GETPOST ( 'action' , 'aZ09' ) || preg_match ( '/upgrade/i' , GETPOST ( 'action' , 'aZ09' )))
2006-02-26 16:31:11 +01:00
{
2011-09-29 22:21:57 +02:00
$actiondone = 1 ;
2018-04-15 11:27:12 +02:00
print '<h3><img class="valigntextbottom" src="../theme/common/octicons/build/svg/database.svg" width="20" alt="Database"> ' . $langs -> trans ( " DatabaseMigration " ) . '</h3>' ;
2011-09-29 22:21:57 +02:00
print '<table cellspacing="0" cellpadding="1" border="0" width="100%">' ;
$error = 0 ;
// If password is encoded, we decode it
if ( preg_match ( '/crypted:/i' , $dolibarr_main_db_pass ) || ! empty ( $dolibarr_main_db_encrypted_pass ))
{
2012-08-22 23:11:24 +02:00
require_once $dolibarr_main_document_root . '/core/lib/security.lib.php' ;
2011-09-29 22:21:57 +02:00
if ( preg_match ( '/crypted:/i' , $dolibarr_main_db_pass ))
{
$dolibarr_main_db_pass = preg_replace ( '/crypted:/i' , '' , $dolibarr_main_db_pass );
$dolibarr_main_db_pass = dol_decode ( $dolibarr_main_db_pass );
$dolibarr_main_db_encrypted_pass = $dolibarr_main_db_pass ; // We need to set this as it is used to know the password was initially crypted
}
else $dolibarr_main_db_pass = dol_decode ( $dolibarr_main_db_encrypted_pass );
}
// $conf is already instancied inside inc.php
$conf -> db -> type = $dolibarr_main_db_type ;
$conf -> db -> host = $dolibarr_main_db_host ;
$conf -> db -> port = $dolibarr_main_db_port ;
$conf -> db -> name = $dolibarr_main_db_name ;
$conf -> db -> user = $dolibarr_main_db_user ;
$conf -> db -> pass = $dolibarr_main_db_pass ;
// Load type and crypt key
if ( empty ( $dolibarr_main_db_encryption )) $dolibarr_main_db_encryption = 0 ;
$conf -> db -> dolibarr_main_db_encryption = $dolibarr_main_db_encryption ;
if ( empty ( $dolibarr_main_db_cryptkey )) $dolibarr_main_db_cryptkey = '' ;
$conf -> db -> dolibarr_main_db_cryptkey = $dolibarr_main_db_cryptkey ;
2007-05-10 20:58:52 +02:00
2011-09-28 16:26:49 +02:00
$db = getDoliDBInstance ( $conf -> db -> type , $conf -> db -> host , $conf -> db -> user , $conf -> db -> pass , $conf -> db -> name , $conf -> db -> port );
2011-09-28 19:41:08 +02:00
2013-03-06 17:21:51 +01:00
// Create the global $hookmanager object
include_once DOL_DOCUMENT_ROOT . '/core/class/hookmanager.class.php' ;
$hookmanager = new HookManager ( $db );
2015-05-12 19:01:01 +02:00
if ( $db -> connected )
2011-09-29 22:21:57 +02:00
{
2013-04-25 01:13:13 +02:00
print '<tr><td class="nowrap">' ;
2011-09-29 22:21:57 +02:00
print $langs -> trans ( " ServerConnection " ) . " : $dolibarr_main_db_host </td><td align= \" right \" > " . $langs -> trans ( " OK " ) . " </td></tr> \n " ;
2015-07-06 16:33:45 +02:00
dolibarr_install_syslog ( " upgrade: " . $langs -> transnoentities ( " ServerConnection " ) . " : $dolibarr_main_db_host " . $langs -> transnoentities ( " OK " ));
2011-09-29 22:21:57 +02:00
$ok = 1 ;
}
else
{
print " <tr><td> " . $langs -> trans ( " ErrorFailedToConnectToDatabase " , $dolibarr_main_db_name ) . " </td><td align= \" right \" > " . $langs -> transnoentities ( " Error " ) . " </td></tr> \n " ;
2015-07-06 16:33:45 +02:00
dolibarr_install_syslog ( " upgrade: " . $langs -> transnoentities ( " ErrorFailedToConnectToDatabase " , $dolibarr_main_db_name ));
2011-09-29 22:21:57 +02:00
$ok = 0 ;
}
if ( $ok )
{
2015-05-12 19:01:01 +02:00
if ( $db -> database_selected )
2011-09-29 22:21:57 +02:00
{
2013-04-25 01:13:13 +02:00
print '<tr><td class="nowrap">' ;
2011-09-29 22:21:57 +02:00
print $langs -> trans ( " DatabaseConnection " ) . " : " . $dolibarr_main_db_name . " </td><td align= \" right \" > " . $langs -> trans ( " OK " ) . " </td></tr> \n " ;
2015-07-06 16:33:45 +02:00
dolibarr_install_syslog ( " upgrade: Database connection successful: " . $dolibarr_main_db_name );
2011-09-29 22:21:57 +02:00
$ok = 1 ;
}
else
{
print " <tr><td> " . $langs -> trans ( " ErrorFailedToConnectToDatabase " , $dolibarr_main_db_name ) . " </td><td align= \" right \" > " . $langs -> trans ( " Error " ) . " </td></tr> \n " ;
2015-07-06 16:33:45 +02:00
dolibarr_install_syslog ( " upgrade: " . $langs -> transnoentities ( " ErrorFailedToConnectToDatabase " , $dolibarr_main_db_name ));
2011-09-29 22:21:57 +02:00
$ok = 0 ;
}
}
// Affiche version
if ( $ok )
{
$version = $db -> getVersion ();
$versionarray = $db -> getVersionArray ();
print '<tr><td>' . $langs -> trans ( " ServerVersion " ) . '</td>' ;
print '<td align="right">' . $version . '</td></tr>' ;
2015-07-06 16:33:45 +02:00
dolibarr_install_syslog ( " upgrade: " . $langs -> transnoentities ( " ServerVersion " ) . " : " . $version );
2018-04-09 12:53:03 +02:00
if ( $db -> type == 'mysqli' && function_exists ( 'mysqli_get_charset' ))
2017-11-27 21:53:22 +01:00
{
$tmparray = $db -> db -> get_charset ();
print '<tr><td>' . $langs -> trans ( " ClientCharset " ) . '</td>' ;
print '<td align="right">' . $tmparray -> charset . '</td></tr>' ;
dolibarr_install_syslog ( " upgrade: " . $langs -> transnoentities ( " ClientCharset " ) . " : " . $tmparray -> charset );
print '<tr><td>' . $langs -> trans ( " ClientSortingCharset " ) . '</td>' ;
print '<td align="right">' . $tmparray -> collation . '</td></tr>' ;
dolibarr_install_syslog ( " upgrade: " . $langs -> transnoentities ( " ClientCollation " ) . " : " . $tmparray -> collation );
2018-04-09 12:53:03 +02:00
}
2012-09-02 01:47:21 +02:00
2015-02-14 12:24:16 +01:00
// Test database version requirement
2017-06-20 02:36:13 +02:00
$versionmindb = explode ( '.' , $db :: VERSIONMIN );
2012-09-02 01:47:21 +02:00
//print join('.',$versionarray).' - '.join('.',$versionmindb);
2012-09-07 17:23:16 +02:00
if ( count ( $versionmindb ) && count ( $versionarray )
2017-06-20 02:36:13 +02:00
&& versioncompare ( $versionarray , $versionmindb ) < 0 )
2012-09-02 01:47:21 +02:00
{
// Warning: database version too low.
2012-09-07 17:23:16 +02:00
print " <tr><td> " . $langs -> trans ( " ErrorDatabaseVersionTooLow " , join ( '.' , $versionarray ), join ( '.' , $versionmindb )) . " </td><td align= \" right \" > " . $langs -> trans ( " Error " ) . " </td></tr> \n " ;
2015-07-06 16:33:45 +02:00
dolibarr_install_syslog ( " upgrade: " . $langs -> transnoentities ( " ErrorDatabaseVersionTooLow " , join ( '.' , $versionarray ), join ( '.' , $versionmindb )));
2012-09-07 17:23:16 +02:00
$ok = 0 ;
}
2012-09-02 01:47:21 +02:00
2015-02-14 12:24:16 +01:00
// Test database version is not forbidden for migration
2015-03-20 17:57:40 +01:00
if ( empty ( $ignoredbversion ))
{
$dbversion_disallowed = array (
array ( 'type' => 'mysql' , 'version' => array ( 5 , 5 , 40 )),
2015-03-22 12:13:26 +01:00
array ( 'type' => 'mysqli' , 'version' => array ( 5 , 5 , 40 )) //,
//array('type'=>'mysql','version'=>array(5,5,41)),
//array('type'=>'mysqli','version'=>array(5,5,41))
2015-03-20 17:57:40 +01:00
);
$listofforbiddenversion = '' ;
foreach ( $dbversion_disallowed as $dbversion_totest )
{
if ( $dbversion_totest [ 'type' ] == $db -> type ) $listofforbiddenversion .= ( $listofforbiddenversion ? ', ' : '' ) . join ( '.' , $dbversion_totest [ 'version' ]);
}
foreach ( $dbversion_disallowed as $dbversion_totest )
{
//print $db->type.' - '.join('.',$versionarray).' - '.versioncompare($dbversion_totest['version'],$versionarray)."<br>\n";
if ( $dbversion_totest [ 'type' ] == $db -> type
&& ( versioncompare ( $dbversion_totest [ 'version' ], $versionarray ) == 0 || versioncompare ( $dbversion_totest [ 'version' ], $versionarray ) <=- 4 || versioncompare ( $dbversion_totest [ 'version' ], $versionarray ) >= 4 )
)
{
// Warning: database version too low.
print '<tr><td><div class="warning">' . $langs -> trans ( " ErrorDatabaseVersionForbiddenForMigration " , join ( '.' , $versionarray ), $listofforbiddenversion ) . " </div></td><td align= \" right \" > " . $langs -> trans ( " Error " ) . " </td></tr> \n " ;
2015-07-06 16:33:45 +02:00
dolibarr_install_syslog ( " upgrade: " . $langs -> transnoentities ( " ErrorDatabaseVersionForbiddenForMigration " , join ( '.' , $versionarray ), $listofforbiddenversion ));
2015-03-20 17:57:40 +01:00
$ok = 0 ;
break ;
}
}
}
2011-09-29 22:21:57 +02:00
}
// Force l'affichage de la progression
2012-09-02 01:47:21 +02:00
if ( $ok )
{
print '<tr><td colspan="2">' . $langs -> trans ( " PleaseBePatient " ) . '</td></tr>' ;
flush ();
}
2011-09-29 22:21:57 +02:00
2014-01-15 19:12:55 +01:00
2012-01-07 08:28:52 +01:00
/*
* Remove deprecated indexes and constraints for Mysql
*/
2011-09-29 22:21:57 +02:00
if ( $ok && preg_match ( '/mysql/' , $db -> type ))
{
2012-09-02 01:47:21 +02:00
$versioncommande = array ( 4 , 0 , 0 );
2011-09-29 22:21:57 +02:00
if ( count ( $versioncommande ) && count ( $versionarray )
&& versioncompare ( $versioncommande , $versionarray ) <= 0 ) // Si mysql >= 4.0
{
2018-04-16 12:23:24 +02:00
dolibarr_install_syslog ( " Clean database from bad named constraints " );
2011-09-29 22:21:57 +02:00
// Suppression vieilles contraintes sans noms et en doubles
// Les contraintes indesirables ont un nom qui commence par 0_ ou se termine par ibfk_999
2012-01-07 08:28:52 +01:00
$listtables = array (
MAIN_DB_PREFIX . 'adherent_options' ,
MAIN_DB_PREFIX . 'bank_class' ,
MAIN_DB_PREFIX . 'c_ecotaxe' ,
MAIN_DB_PREFIX . 'c_methode_commande_fournisseur' , // table renamed
MAIN_DB_PREFIX . 'c_input_method'
);
2012-04-04 20:37:16 +02:00
2011-09-29 22:21:57 +02:00
$listtables = $db -> DDLListTables ( $conf -> db -> name , '' );
foreach ( $listtables as $val )
{
2012-01-07 08:28:52 +01:00
// Database prefix filter
if ( preg_match ( '/^' . MAIN_DB_PREFIX . '/' , $val ))
{
//print "x".$val."<br>";
$sql = " SHOW CREATE TABLE " . $val ;
$resql = $db -> query ( $sql );
if ( $resql )
{
$values = $db -> fetch_array ( $resql );
$i = 0 ;
$createsql = $values [ 1 ];
while ( preg_match ( '/CONSTRAINT `(0_[0-9a-zA-Z]+|[_0-9a-zA-Z]+_ibfk_[0-9]+)`/i' , $createsql , $reg ) && $i < 100 )
{
$sqldrop = " ALTER TABLE " . $val . " DROP FOREIGN KEY " . $reg [ 1 ];
$resqldrop = $db -> query ( $sqldrop );
if ( $resqldrop )
{
print '<tr><td colspan="2">' . $sqldrop . " ;</td></tr> \n " ;
}
$createsql = preg_replace ( '/CONSTRAINT `' . $reg [ 1 ] . '`/i' , 'XXX' , $createsql );
$i ++ ;
}
$db -> free ( $resql );
}
else
{
if ( $db -> lasterrno () != 'DB_ERROR_NOSUCHTABLE' )
{
print '<tr><td colspan="2"><font class="error">' . $sql . ' : ' . $db -> lasterror () . " </font></td></tr> \n " ;
}
}
}
2011-09-29 22:21:57 +02:00
}
}
}
/*
* Load sql files
*/
if ( $ok )
{
$dir = " mysql/migration/ " ; // We use mysql migration scripts whatever is database driver
2015-03-20 17:57:40 +01:00
if ( ! empty ( $dirmodule )) $dir = dol_buildpath ( '/' . $dirmodule . '/sql/' , 0 );
2018-04-16 12:23:24 +02:00
dolibarr_install_syslog ( " Scan sql files for migration files in " . $dir );
2011-09-29 22:21:57 +02:00
2013-03-13 11:06:28 +01:00
// Clean last part to exclude minor version x.y.z -> x.y
2012-09-07 17:23:16 +02:00
$newversionfrom = preg_replace ( '/(\.[0-9]+)$/i' , '.0' , $versionfrom );
2012-09-03 16:27:16 +02:00
$newversionto = preg_replace ( '/(\.[0-9]+)$/i' , '.0' , $versionto );
2011-09-29 22:21:57 +02:00
$filelist = array ();
$i = 0 ;
$ok = 0 ;
2012-09-03 16:27:16 +02:00
$from = '^' . $newversionfrom ;
$to = $newversionto . '\.sql$' ;
2011-09-29 22:21:57 +02:00
// Get files list
$filesindir = array ();
$handle = opendir ( $dir );
if ( is_resource ( $handle ))
{
while (( $file = readdir ( $handle )) !== false )
{
2014-01-15 19:12:55 +01:00
if ( preg_match ( '/\.sql$/i' , $file )) $filesindir [] = $file ;
2011-09-29 22:21:57 +02:00
}
sort ( $filesindir );
}
else
2014-01-15 19:12:55 +01:00
{
2011-09-29 22:21:57 +02:00
print '<div class="error">' . $langs -> trans ( " ErrorCanNotReadDir " , $dir ) . '</div>' ;
}
// Define which file to run
foreach ( $filesindir as $file )
{
if ( preg_match ( '/' . $from . '/i' , $file ))
{
$filelist [] = $file ;
}
else if ( preg_match ( '/' . $to . '/i' , $file )) // First test may be false if we migrate from x.y.* to x.y.*
{
$filelist [] = $file ;
}
}
2014-01-15 19:23:33 +01:00
if ( count ( $filelist ) == 0 )
2011-09-29 22:21:57 +02:00
{
2014-01-15 19:23:33 +01:00
print '<div class="error">' . $langs -> trans ( " ErrorNoMigrationFilesFoundForParameters " ) . '</div>' ;
}
else
{
2018-01-24 20:00:27 +01:00
$listoffileprocessed = array (); // Protection to avoid to process twice the same file
2014-01-15 19:23:33 +01:00
// Loop on each migrate files
foreach ( $filelist as $file )
{
2018-01-24 20:00:27 +01:00
if ( in_array ( $dir . $file , $listoffileprocessed )) continue ;
2014-01-15 19:23:33 +01:00
print '<tr><td colspan="2"><hr></td></tr>' ;
print '<tr><td class="nowrap">' . $langs -> trans ( " ChoosedMigrateScript " ) . '</td><td align="right">' . $file . '</td></tr>' . " \n " ;
2013-03-13 11:06:28 +01:00
// Run sql script
2014-01-15 19:23:33 +01:00
$ok = run_sql ( $dir . $file , 0 , '' , 1 );
2018-01-24 20:00:27 +01:00
$listoffileprocessed [ $dir . $file ] = $dir . $file ;
2014-01-15 19:23:33 +01:00
2018-01-24 20:00:27 +01:00
// Scan if there is migration scripts that depends of Dolibarr version
// for modules htdocs/module/sql or htdocs/custom/module/sql (files called "dolibarr_x.y.z-a.b.c.sql")
2014-01-15 19:23:33 +01:00
$modulesfile = array ();
foreach ( $conf -> file -> dol_document_root as $type => $dirroot )
{
$handlemodule =@ opendir ( $dirroot ); // $dirroot may be '..'
if ( is_resource ( $handlemodule ))
{
while (( $filemodule = readdir ( $handlemodule )) !== false )
{
if ( ! preg_match ( '/\./' , $filemodule ) && is_dir ( $dirroot . '/' . $filemodule . '/sql' )) // We exclude filemodule that contains . (are not directories) and are not directories.
{
//print "Scan for ".$dirroot . '/' . $filemodule . '/sql/'.$file;
2018-01-24 20:00:27 +01:00
if ( is_file ( $dirroot . '/' . $filemodule . '/sql/dolibarr_' . $file ))
2014-01-15 19:23:33 +01:00
{
2018-01-24 20:00:27 +01:00
$modulesfile [ $dirroot . '/' . $filemodule . '/sql/dolibarr_' . $file ] = '/' . $filemodule . '/sql/dolibarr_' . $file ;
2014-01-15 19:23:33 +01:00
}
}
}
closedir ( $handlemodule );
}
}
foreach ( $modulesfile as $modulefilelong => $modulefileshort )
{
2018-01-24 20:00:27 +01:00
if ( in_array ( $modulefilelong , $listoffileprocessed )) continue ;
2014-01-15 19:23:33 +01:00
print '<tr><td colspan="2"><hr></td></tr>' ;
print '<tr><td class="nowrap">' . $langs -> trans ( " ChoosedMigrateScript " ) . ' (external modules)</td><td align="right">' . $modulefileshort . '</td></tr>' . " \n " ;
// Run sql script
$okmodule = run_sql ( $modulefilelong , 0 , '' , 1 ); // Note: Result of migration of external module should not decide if we continue migration of Dolibarr or not.
2018-01-24 20:00:27 +01:00
$listoffileprocessed [ $modulefilelong ] = $modulefilelong ;
2014-01-15 19:23:33 +01:00
}
}
}
2011-09-29 22:21:57 +02:00
}
print '</table>' ;
if ( $db -> connected ) $db -> close ();
2006-02-26 16:31:11 +01:00
}
2009-06-15 20:16:22 +02:00
if ( empty ( $actiondone ))
2006-02-26 16:31:11 +01:00
{
print '<div class="error">' . $langs -> trans ( " ErrorWrongParameters " ) . '</div>' ;
}
2012-08-05 00:46:10 +02:00
$ret = 0 ;
if ( ! $ok && isset ( $argv [ 1 ])) $ret = 1 ;
2018-04-12 19:13:06 +02:00
dolibarr_install_syslog ( " Exit " . $ret );
2012-08-05 00:46:10 +02:00
2015-12-31 12:02:22 +01:00
dolibarr_install_syslog ( " --- upgrade: end " . (( ! $ok && empty ( $_GET [ " ignoreerrors " ])) || $dirmodule ));
2018-01-24 20:00:27 +01:00
$nonext = ( ! $ok && empty ( $_GET [ " ignoreerrors " ])) ? 2 : 0 ;
if ( $dirmodule ) $nonext = 1 ;
pFooter ( $nonext , $setuplang );
2006-02-26 16:31:11 +01:00
2012-04-04 20:37:16 +02:00
if ( $db -> connected ) $db -> close ();
// Return code if ran from command line
2012-08-05 00:46:10 +02:00
if ( $ret ) exit ( $ret );