2005-02-13 15:40:15 +00:00
< ? php
2016-02-22 17:45:00 +00:00
/* Copyright ( C ) 2004 - 2005 Rodolphe Quiedeville < rodolphe @ quiedeville . org >
* Copyright ( C ) 2004 - 2015 Laurent Destailleur < eldy @ users . sourceforge . net >
* Copyright ( C ) 2005 Marc Barilley / Ocebo < marc @ ocebo . com >
2018-10-27 12:43:12 +00:00
* Copyright ( C ) 2005 - 2012 Regis Houssin < regis . houssin @ inodbox . com >
2016-02-22 17:45:00 +00:00
* Copyright ( C ) 2013 - 2014 Juanjo Menent < jmenent @ 2 byte . es >
2014-05-05 10:24:39 +00:00
* Copyright ( C ) 2014 Marcos García < marcosgdf @ gmail . com >
2016-02-22 17:45:00 +00:00
* Copyright ( C ) 2015 - 2016 Raphaël Doursenaud < rdoursenaud @ gpcsolutions . fr >
2026-05-10 23:26:15 +00:00
* Copyright ( C ) 2024 - 2026 MDW < mdeweerd @ users . noreply . github . com >
2025-01-03 17:17:19 +00:00
* Copyright ( C ) 2024 - 2025 Frédéric France < frederic . france @ free . fr >
2005-02-13 15:40:15 +00: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 14:36:08 +00:00
* the Free Software Foundation ; either version 3 of the License , or
2005-02-13 15:40:15 +00: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
2019-09-23 19:55:30 +00:00
* along with this program . If not , see < https :// www . gnu . org / licenses />.
2005-02-13 15:40:15 +00:00
*/
/**
2008-11-14 10:08:57 +00:00
* \file htdocs / install / check . php
* \ingroup install
2010-11-10 23:54:59 +00:00
* \brief Test if file conf can be modified and if does not exists , test if install process can create it
2008-08-28 21:28:59 +00:00
*/
2021-08-16 18:22:50 +00:00
2023-02-02 11:58:12 +00:00
define ( 'ALLOWED_IF_UPGRADE_UNLOCK_FOUND' , 1 );
2012-08-23 00:46:16 +00:00
include_once 'inc.php' ;
2024-11-06 18:39:46 +00:00
/**
2025-07-29 10:03:53 +00:00
* @ var string $conffile
* @ var string $conffiletoshow
*
2025-01-03 17:17:19 +00:00
* @ var Conf $conf already created in inc . php
2024-11-06 18:39:46 +00:00
* @ var Translate $langs
*
* @ var string $dolibarr_main_db_host
* @ var string $dolibarr_main_db_port
* @ var string $dolibarr_main_db_name
* @ var string $dolibarr_main_db_user
* @ var string $dolibarr_main_db_pass
2025-01-03 17:20:10 +00:00
* @ var string $dolibarr_main_db_encrypted_pass
2025-09-29 14:06:16 +00:00
* @ var string $dolibarr_main_document_root
* @ var string $dolibarr_main_db_type
2025-09-29 23:20:25 +00:00
* @ var int $dolibarr_main_db_encryption
* @ var string $dolibarr_main_db_cryptkey
2025-09-15 12:40:34 +00:00
* @ var string $force_install_nophpinfo
2025-09-29 14:06:16 +00:00
* @ var string $lockfile
* @ var string $lockfile2
2024-11-06 18:39:46 +00:00
*/
2025-09-29 18:40:36 +00:00
'
@ phan - var - force string $lockfile
@ phan - var - force string $lockfile2
' ;
2016-02-22 17:45:00 +00:00
2005-04-02 10:06:57 +00:00
$err = 0 ;
2005-10-03 01:14:50 +00:00
$allowinstall = 0 ;
2015-11-22 10:32:31 +00:00
$allowupgrade = false ;
2006-09-09 00:54:59 +00:00
$checksok = 1 ;
2005-02-13 15:40:15 +00:00
2023-12-04 11:36:19 +00:00
$setuplang = GETPOST ( " selectlang " , 'aZ09' , 3 ) ? GETPOST ( " selectlang " , 'aZ09' , 3 ) : $langs -> getDefaultLang ();
2005-10-30 01:07:00 +00:00
$langs -> setDefaultLang ( $setuplang );
2025-09-15 12:40:34 +00:00
$langs -> loadLangs ( array ( " install " , " errors " ));
2005-02-13 15:40:15 +00:00
2018-07-07 21:50:41 +00:00
// Now we load forced/pre-set values from install.forced.php file.
2019-11-13 17:32:11 +00:00
$useforcedwizard = false ;
$forcedfile = " ./install.forced.php " ;
2021-02-22 14:18:01 +00:00
if ( $conffile == " /etc/dolibarr/conf.php " ) {
$forcedfile = " /etc/dolibarr/install.forced.php " ;
}
2016-02-22 17:45:00 +00:00
if ( @ file_exists ( $forcedfile )) {
$useforcedwizard = true ;
include_once $forcedfile ;
}
2008-04-20 12:35:28 +00:00
2018-07-07 21:50:41 +00:00
dolibarr_install_syslog ( " - check: Dolibarr install/upgrade process started " );
2008-04-20 12:35:28 +00:00
2010-11-10 23:54:59 +00:00
2008-04-21 07:21:13 +00:00
/*
2008-08-28 21:28:59 +00:00
* View
*/
2006-06-17 14:13:49 +00:00
2019-11-13 17:32:11 +00:00
pHeader ( '' , '' ); // No next step for navigation buttons. Next step is defined by click on links.
2010-11-10 23:54:59 +00:00
2025-09-15 12:40:34 +00:00
print '<h3><img class="valignmiddle inline-block paddingright" src="../public/theme/common/gear.svg" width="20" alt="Database"> ' ;
2025-05-14 20:03:39 +00:00
print '<span class="inline-block valignmiddle">' . $langs -> trans ( " MiscellaneousChecks " ) . " </span></h3> \n " ;
2006-09-09 00:54:59 +00:00
2012-02-29 18:41:12 +00:00
// Check browser
2019-11-13 17:32:11 +00:00
$useragent = $_SERVER [ 'HTTP_USER_AGENT' ];
2021-02-22 14:18:01 +00:00
if ( ! empty ( $useragent )) {
2020-10-31 13:32:18 +00:00
$tmp = getBrowserInfo ( $_SERVER [ " HTTP_USER_AGENT " ]);
$browserversion = $tmp [ 'browserversion' ];
$browsername = $tmp [ 'browsername' ];
2021-02-22 14:18:01 +00:00
if ( $browsername == 'ie' && $browserversion < 7 ) {
2025-09-15 12:40:34 +00:00
print img_picto ( '' , 'warning' , 'class="pictofixedwidth warning"' );
print $langs -> trans ( " WarningBrowserTooOld " ) . " <br> \n " ;
2021-02-22 14:18:01 +00:00
}
2012-02-29 18:41:12 +00:00
}
2007-04-18 17:38:55 +00:00
2022-07-16 00:34:37 +00:00
// Check PHP version min
2025-10-19 19:03:50 +00:00
$arrayphpminversionerror = array ( 7 , 1 , 0 );
$arrayphpminversionwarning = array ( 7 , 2 , 0 );
2021-02-22 14:18:01 +00:00
if ( versioncompare ( versionphparray (), $arrayphpminversionerror ) < 0 ) { // Minimum to use (error if lower)
2025-09-15 12:40:34 +00:00
print img_picto ( '' , 'warning' , 'class="pictofixedwidth error"' );
print $langs -> trans ( " ErrorPHPVersionTooLow " , versiontostring ( $arrayphpminversionerror ));
2019-11-13 17:32:11 +00:00
$checksok = 0 ; // 0=error, 1=warning
2021-02-22 14:18:01 +00:00
} elseif ( versioncompare ( versionphparray (), $arrayphpminversionwarning ) < 0 ) { // Minimum supported (warning if lower)
2025-09-15 12:40:34 +00:00
print img_picto ( '' , 'warning' , 'class="pictofixedwidth warning"' );
print $langs -> trans ( " ErrorPHPVersionTooLow " , versiontostring ( $arrayphpminversionwarning ));
2023-10-08 09:57:37 +00:00
$checksok = 1 ; // 0=error, 1=warning
2020-05-21 13:05:19 +00:00
} else {
2025-09-15 12:40:34 +00:00
print img_picto ( '' , 'tick' , 'class="pictofixedwidth"' );
print $langs -> trans ( " PHPVersion " ) . " " . versiontostring ( versionphparray ());
2006-09-09 00:54:59 +00:00
}
2025-09-29 14:06:16 +00:00
if ( empty ( $force_install_nophpinfo ) && ( ! file_exists ( $lockfile ) && ! file_exists ( $lockfile2 ))) { // Do not show sensible information in update process, only in install process.
2025-09-29 11:56:43 +00:00
print ' (<a href="phpinfo.php" target="_blank" rel="noopener noreferrer">' ;
$conf -> use_javascript_ajax = 1 ; // We suppose javascript is on for install process
print dolButtonToOpenUrlInDialogPopup ( 'phpinfo' , $langs -> trans ( " MoreInformation " ), $langs -> trans ( " MoreInformation " ), '/install/phpinfo.php' , '' , '' );
print '</a>)' ;
2021-02-22 14:18:01 +00:00
}
2007-04-18 17:38:55 +00:00
print " <br> \n " ;
2022-07-16 00:34:37 +00:00
// Check PHP version max
2025-12-29 17:31:00 +00:00
$arrayphpmaxversionwarning = array ( 8 , 5 , 0 );
2022-07-16 00:34:37 +00:00
if ( versioncompare ( versionphparray (), $arrayphpmaxversionwarning ) > 0 && versioncompare ( versionphparray (), $arrayphpmaxversionwarning ) < 3 ) { // Maximum to use (warning if higher)
2025-09-15 12:40:34 +00:00
print img_picto ( '' , 'warning' , 'class="pictofixedwidth error"' );
print $langs -> trans ( " ErrorPHPVersionTooHigh " , versiontostring ( $arrayphpmaxversionwarning ));
2022-07-16 00:34:37 +00:00
$checksok = 1 ; // 0=error, 1=warning
print " <br> \n " ;
}
2006-09-09 00:54:59 +00:00
2020-11-30 13:47:07 +00:00
// Check PHP support for $_GET and $_POST
2021-02-22 14:18:01 +00:00
if ( ! isset ( $_GET [ " testget " ]) && ! isset ( $_POST [ " testpost " ])) { // We must keep $_GET and $_POST here
2025-09-15 12:40:34 +00:00
print img_picto ( '' , 'warning' , 'class="pictofixedwidth warning"' );
print $langs -> trans ( " PHPSupportPOSTGETKo " );
2021-07-20 23:18:48 +00:00
print ' (<a href="' . dol_escape_htmltag ( $_SERVER [ " PHP_SELF " ]) . '?testget=ok">' . $langs -> trans ( " Recheck " ) . '</a>)' ;
2007-04-10 18:54:34 +00:00
print " <br> \n " ;
2019-11-13 17:32:11 +00:00
$checksok = 0 ;
2020-05-21 13:05:19 +00:00
} else {
2025-09-15 12:40:34 +00:00
print img_picto ( '' , 'tick' , 'class="pictofixedwidth"' );
print $langs -> trans ( " PHPSupportPOSTGETOk " ) . " <br> \n " ;
2007-03-06 18:30:16 +00:00
}
2007-04-18 17:38:55 +00:00
2021-01-05 17:09:59 +00:00
// Check if session_id is enabled
2021-02-22 14:18:01 +00:00
if ( ! function_exists ( " session_id " )) {
2025-10-15 09:28:47 +00:00
print img_picto ( '' , 'warning' , 'class="pictofixedwidth error"' );
2025-09-15 12:40:34 +00:00
print $langs -> trans ( " ErrorPHPDoesNotSupportSessions " ) . " <br> \n " ;
2019-11-13 17:32:11 +00:00
$checksok = 0 ;
2020-05-21 13:05:19 +00:00
} else {
2025-09-15 12:40:34 +00:00
print img_picto ( '' , 'tick' , 'class="pictofixedwidth"' );
print $langs -> trans ( " PHPSupportSessions " ) . " <br> \n " ;
2006-09-09 00:54:59 +00:00
}
2005-02-13 15:40:15 +00:00
2025-09-15 12:40:34 +00:00
$extensionok = array ();
$extensionko = array ();
2007-09-26 22:23:03 +00:00
2022-05-09 10:13:31 +00:00
// Check for mbstring extension
if ( ! extension_loaded ( " mbstring " )) {
2025-09-15 12:40:34 +00:00
$extensionko [] = 'MBString' ;
2023-12-13 11:46:23 +00:00
// $checksok = 0; // If ko, just warning. So check must still be 1 (otherwise no way to install)
2022-05-09 10:13:31 +00:00
} else {
2025-09-15 12:40:34 +00:00
$extensionok [] = 'MBString' ;
2022-05-09 10:13:31 +00:00
}
// Check for json extension
if ( ! extension_loaded ( " json " )) {
2025-09-15 12:40:34 +00:00
$extensionko [] = 'JSON' ;
2023-12-13 11:46:23 +00:00
// $checksok = 0; // If ko, just warning. So check must still be 1 (otherwise no way to install)
2022-05-09 10:13:31 +00:00
} else {
2025-09-15 12:40:34 +00:00
$extensionok [] = 'JSON' ;
2022-05-09 10:13:31 +00:00
}
2021-01-05 17:09:59 +00:00
// Check if GD is supported (we need GD for image conversion)
2021-02-22 14:18:01 +00:00
if ( ! function_exists ( " imagecreate " )) {
2025-09-15 12:40:34 +00:00
$extensionko [] = 'GD' ;
2023-12-13 11:46:23 +00:00
// $checksok = 0; // If ko, just warning. So check must still be 1 (otherwise no way to install)
2020-05-21 13:05:19 +00:00
} else {
2025-09-15 12:40:34 +00:00
$extensionok [] = 'GD' ;
2016-08-05 02:45:05 +00:00
}
2016-07-27 14:52:02 +00:00
2021-01-05 17:09:59 +00:00
// Check if Curl is supported
2021-02-22 14:18:01 +00:00
if ( ! function_exists ( " curl_init " )) {
2025-09-15 12:40:34 +00:00
$extensionko [] = 'Curl' ;
2023-12-13 11:46:23 +00:00
// $checksok = 0; // If ko, just warning. So check must still be 1 (otherwise no way to install)
2020-05-21 13:05:19 +00:00
} else {
2025-09-15 12:40:34 +00:00
$extensionok [] = 'Curl' ;
2007-11-07 17:37:54 +00:00
}
2019-09-30 19:14:25 +00:00
// Check if PHP calendar extension is available
2021-02-22 14:18:01 +00:00
if ( ! function_exists ( " easter_date " )) {
2025-09-15 12:40:34 +00:00
$extensionko [] = 'Calendar' ;
2020-05-21 13:05:19 +00:00
} else {
2025-09-15 12:40:34 +00:00
$extensionok [] = 'Calendar' ;
2019-09-30 19:14:25 +00:00
}
2023-05-31 07:19:02 +00:00
// Check if Xml is supported
2022-05-09 10:13:31 +00:00
if ( ! function_exists ( " simplexml_load_string " )) {
2025-09-15 12:40:34 +00:00
$extensionko [] = 'Xml' ;
2023-12-13 11:46:23 +00:00
// $checksok = 0; // If ko, just warning. So check must still be 1 (otherwise no way to install)
2020-05-21 13:05:19 +00:00
} else {
2025-09-15 12:40:34 +00:00
$extensionok [] = 'Xml' ;
2008-11-14 10:08:57 +00:00
}
2022-05-09 10:13:31 +00:00
// Check if UTF8 is supported
if ( ! function_exists ( " utf8_encode " )) {
2025-09-15 12:40:34 +00:00
$extensionko [] = 'UTF8' ;
2023-12-13 11:46:23 +00:00
// $checksok = 0; // If ko, just warning. So check must still be 1 (otherwise no way to install)
2021-12-14 21:45:33 +00:00
} else {
2025-09-15 12:40:34 +00:00
$extensionok [] = 'UTF8' ;
2021-12-14 21:45:33 +00:00
}
2012-05-28 20:39:04 +00:00
2023-07-25 23:49:05 +00:00
// Check if intl methods are supported if install is not from DoliWamp. TODO Why ?
2021-02-22 14:18:01 +00:00
if ( empty ( $_SERVER [ " SERVER_ADMIN " ]) || $_SERVER [ " SERVER_ADMIN " ] != 'doliwamp@localhost' ) {
if ( ! function_exists ( " locale_get_primary_language " ) || ! function_exists ( " locale_get_region " )) {
2025-09-15 12:40:34 +00:00
$extensionko [] = 'Intl' ;
2023-12-13 11:46:23 +00:00
// $checksok = 0; // If ko, just warning. So check must still be 1 (otherwise no way to install)
2020-05-21 13:05:19 +00:00
} else {
2025-09-15 12:40:34 +00:00
$extensionok [] = 'Intl' ;
2019-06-30 21:52:28 +00:00
}
2019-04-03 17:37:54 +00:00
}
2023-05-31 07:19:02 +00:00
// Check if Imap is supported
2024-01-02 11:58:40 +00:00
if ( PHP_VERSION_ID <= 80300 ) {
if ( ! function_exists ( " imap_open " )) {
2025-09-15 12:40:34 +00:00
$extensionko [] = 'IMAP' ;
2024-01-02 11:58:40 +00:00
// $checksok = 0; // If ko, just warning. So check must still be 1 (otherwise no way to install)
} else {
2025-09-15 12:40:34 +00:00
$extensionok [] = 'IMAP' ;
2024-01-02 11:58:40 +00:00
}
2022-05-09 10:13:31 +00:00
}
2023-05-31 07:19:02 +00:00
// Check if Zip is supported
2021-02-22 14:18:01 +00:00
if ( ! class_exists ( 'ZipArchive' )) {
2025-09-15 12:40:34 +00:00
$extensionko [] = 'ZIP' ;
2023-12-13 11:46:23 +00:00
// $checksok = 0; // If ko, just warning. So check must still be 1 (otherwise no way to install)
2020-05-21 13:05:19 +00:00
} else {
2025-09-15 12:40:34 +00:00
$extensionok [] = 'ZIP' ;
}
if ( ! empty ( $extensionok )) {
//print '<img src="../theme/eldy/img/tick.png" alt="Ok" class="valignmiddle pictofixedwidth"> ';
print img_picto ( '' , 'tick' , 'class="pictofixedwidth"' );
2025-09-15 12:42:21 +00:00
print $langs -> trans ( " PHPSupport " , '<b>' . implode ( ', ' , $extensionok ) . '</b>' ) . " <br> \n " ;
2025-09-15 12:40:34 +00:00
}
if ( ! empty ( $extensionko )) {
//print '<img src="../theme/eldy/img/warning.png" alt="Error" class="valignmiddle pictofixedwidth"> ';
print img_picto ( '' , 'warning' , 'class="pictofixedwidth error"' );
2025-09-15 12:42:21 +00:00
print $langs -> trans ( " ErrorPHPDoesNotSupport " , '<b>' . implode ( ', ' , $extensionko ) . '</b>' ) . " <br> \n " ;
2020-01-16 00:11:39 +00:00
}
2019-04-03 17:37:54 +00:00
2025-09-15 12:40:34 +00:00
2007-09-26 22:23:03 +00:00
// Check memory
2019-11-13 17:32:11 +00:00
$memrequiredorig = '64M' ;
$memrequired = 64 * 1024 * 1024 ;
$memmaxorig = @ ini_get ( " memory_limit " );
$memmax = @ ini_get ( " memory_limit " );
2021-02-22 14:18:01 +00:00
if ( $memmaxorig != '' ) {
2025-07-29 00:57:31 +00:00
$reg = array ();
2019-01-27 10:55:16 +00:00
preg_match ( '/([0-9]+)([a-zA-Z]*)/i' , $memmax , $reg );
2021-02-22 14:18:01 +00:00
if ( $reg [ 2 ]) {
if ( strtoupper ( $reg [ 2 ]) == 'G' ) {
2024-08-15 14:57:02 +00:00
$memmax = ( int ) $reg [ 1 ] * 1024 * 1024 * 1024 ;
2021-02-22 14:18:01 +00:00
}
if ( strtoupper ( $reg [ 2 ]) == 'M' ) {
2024-08-15 14:57:02 +00:00
$memmax = ( int ) $reg [ 1 ] * 1024 * 1024 ;
2021-02-22 14:18:01 +00:00
}
if ( strtoupper ( $reg [ 2 ]) == 'K' ) {
2024-08-15 14:57:02 +00:00
$memmax = ( int ) $reg [ 1 ] * 1024 ;
2021-02-22 14:18:01 +00:00
}
2007-10-03 23:38:33 +00:00
}
2021-02-22 14:18:01 +00:00
if ( $memmax >= $memrequired || $memmax == - 1 ) {
2025-09-15 12:40:34 +00:00
print img_picto ( '' , 'tick' , 'class="pictofixedwidth"' );
print $langs -> trans ( " PHPMemoryOK " , $memmaxorig , $memrequiredorig ) . " <br> \n " ;
2020-05-21 13:05:19 +00:00
} else {
2025-09-15 12:40:34 +00:00
print img_picto ( '' , 'warning' , 'class="pictofixedwidth warning"' );
print $langs -> trans ( " PHPMemoryTooLow " , $memmaxorig , $memrequiredorig ) . " <br> \n " ;
2007-10-03 23:38:33 +00:00
}
2007-09-26 22:23:03 +00:00
}
2021-01-05 17:09:59 +00:00
// If that config file is present and filled
2005-11-03 18:00:17 +00:00
clearstatcache ();
2021-02-22 14:18:01 +00:00
if ( is_readable ( $conffile ) && filesize ( $conffile ) > 8 ) {
2019-11-13 17:32:11 +00:00
dolibarr_install_syslog ( " check: conf file ' " . $conffile . " ' already defined " );
$confexists = 1 ;
2012-08-23 00:04:35 +00:00
include_once $conffile ;
2008-08-28 21:28:59 +00:00
2019-11-13 17:32:11 +00:00
$databaseok = 1 ;
2021-02-22 14:18:01 +00:00
if ( $databaseok ) {
2009-10-05 23:04:05 +00:00
// Already installed for all parts (config and database). We can propose upgrade.
2019-11-13 17:32:11 +00:00
$allowupgrade = true ;
2020-05-21 13:05:19 +00:00
} else {
2019-11-13 17:32:11 +00:00
$allowupgrade = false ;
2009-10-05 23:04:05 +00:00
}
2020-05-21 13:05:19 +00:00
} else {
2009-10-05 23:04:05 +00:00
// If not, we create it
2019-11-13 17:32:11 +00:00
dolibarr_install_syslog ( " check: we try to create conf file ' " . $conffile . " ' " );
$confexists = 0 ;
2007-05-10 17:58:57 +00:00
2011-09-20 10:30:56 +00:00
// First we try by copying example
2021-02-22 14:18:01 +00:00
if ( @ copy ( $conffile . " .example " , $conffile )) {
2011-09-20 10:30:56 +00:00
// Success
2019-11-13 17:32:11 +00:00
dolibarr_install_syslog ( " check: successfully copied file " . $conffile . " .example into " . $conffile );
2020-05-21 13:05:19 +00:00
} else {
2011-09-20 10:30:56 +00:00
// If failed, we try to create an empty file
2019-11-13 17:32:11 +00:00
dolibarr_install_syslog ( " check: failed to copy file " . $conffile . " .example into " . $conffile . " . We try to create it. " , LOG_WARNING );
2007-05-10 17:58:57 +00:00
$fp = @ fopen ( $conffile , " w " );
2021-02-22 14:18:01 +00:00
if ( $fp ) {
2007-05-10 17:58:57 +00:00
@ fwrite ( $fp , '<?php' );
Qual: Apply automatic phan fixes (deprecations, unneeded imports) (#28154)
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
* Qual: Apply automatic phan fixes (deprecations, unneeded imports)
# Qual: Apply automatic phan fixes (deprecations, unneeded imports)
This applies automatic fixes by phan for deprecated functions, unneeded imports).
2024-02-13 20:46:12 +00:00
@ fwrite ( $fp , " \n " );
2007-05-10 17:58:57 +00:00
fclose ( $fp );
2021-02-22 14:18:01 +00:00
} else {
dolibarr_install_syslog ( " check: failed to create a new file " . $conffile . " into current dir " . getcwd () . " . Please check permissions. " , LOG_ERR );
}
2008-08-28 21:28:59 +00:00
}
2007-05-10 17:58:57 +00:00
2018-07-07 21:50:41 +00:00
// First install: no upgrade necessary/required
2019-11-13 17:32:11 +00:00
$allowupgrade = false ;
2005-02-13 15:40:15 +00:00
}
2007-04-18 17:38:55 +00:00
2018-07-07 21:50:41 +00:00
// File is missing and cannot be created
2021-02-22 14:18:01 +00:00
if ( ! file_exists ( $conffile )) {
2025-09-15 12:40:34 +00:00
print '<img src="../theme/eldy/img/error.png" alt="Error" class="valignmiddle pictofixedwidth"> ' ;
print $langs -> trans ( " ConfFileDoesNotExistsAndCouldNotBeCreated " , $conffiletoshow );
2021-08-16 18:22:50 +00:00
print '<br><br><div class="error">' ;
2019-01-27 10:55:16 +00:00
print $langs -> trans ( " YouMustCreateWithPermission " , $conffiletoshow );
2021-08-16 18:22:50 +00:00
print '</div><br><br>' . " \n " ;
2008-08-28 21:28:59 +00:00
2021-08-16 18:22:50 +00:00
print '<span class="opacitymedium">' . $langs -> trans ( " CorrectProblemAndReloadPage " , $_SERVER [ 'PHP_SELF' ] . '?testget=ok' ) . '</span>' ;
2008-08-28 21:28:59 +00:00
$err ++ ;
2020-05-21 13:05:19 +00:00
} else {
2021-02-22 14:18:01 +00:00
if ( dol_is_dir ( $conffile )) {
2025-09-15 12:40:34 +00:00
print img_picto ( '' , 'warning' , 'class="pictofixedwidth error"' );
print $langs -> trans ( " ConfFileMustBeAFileNotADir " , $conffiletoshow );
2018-06-05 06:57:04 +00:00
2019-11-13 17:32:11 +00:00
$allowinstall = 0 ;
2021-02-22 14:18:01 +00:00
} elseif ( ! is_writable ( $conffile )) {
// File exists but cannot be modified
if ( $confexists ) {
2025-09-15 12:40:34 +00:00
print img_picto ( '' , 'tick' , 'class="pictofixedwidth"' );
print $langs -> trans ( " ConfFileExists " , $conffiletoshow );
2020-05-21 13:05:19 +00:00
} else {
2025-09-15 12:40:34 +00:00
print img_picto ( '' , 'tick' , 'class="pictofixedwidth"' );
print $langs -> trans ( " ConfFileCouldBeCreated " , $conffiletoshow );
2008-08-28 21:28:59 +00:00
}
2010-03-15 23:54:37 +00:00
print " <br> " ;
2025-09-15 12:40:34 +00:00
print img_picto ( '' , 'tick' , 'class="pictofixedwidth warning"' );
print $langs -> trans ( " ConfFileIsNotWritable " , $conffiletoshow );
2010-03-15 23:54:37 +00:00
print " <br> \n " ;
2008-08-28 21:28:59 +00:00
2019-11-13 17:32:11 +00:00
$allowinstall = 0 ;
2021-02-22 14:18:01 +00:00
} else {
// File exists and can be modified
if ( $confexists ) {
2025-09-15 12:40:34 +00:00
print img_picto ( '' , 'tick' , 'class="pictofixedwidth"' );
print $langs -> trans ( " ConfFileExists " , $conffiletoshow );
2020-05-21 13:05:19 +00:00
} else {
2025-09-15 12:40:34 +00:00
print img_picto ( '' , 'tick' , 'class="pictofixedwidth"' );
print $langs -> trans ( " ConfFileCouldBeCreated " , $conffiletoshow );
2008-08-28 21:28:59 +00:00
}
2010-03-15 23:54:37 +00:00
print " <br> " ;
2025-09-15 12:40:34 +00:00
print img_picto ( '' , 'tick' , 'class="pictofixedwidth"' );
print $langs -> trans ( " ConfFileIsWritable " , $conffiletoshow );
2010-03-15 23:54:37 +00:00
print " <br> \n " ;
2008-08-28 21:28:59 +00:00
2019-11-13 17:32:11 +00:00
$allowinstall = 1 ;
2008-08-28 21:28:59 +00:00
}
2010-03-15 23:54:37 +00:00
print " <br> \n " ;
2008-08-28 21:28:59 +00:00
2018-07-07 21:50:41 +00:00
// Requirements met/all ok: display the next step button
2021-02-22 14:18:01 +00:00
if ( $checksok ) {
2025-07-28 23:14:42 +00:00
$ok = false ;
2026-05-10 23:26:15 +00:00
$db = null ;
2026-02-08 19:40:25 +00:00
$validfoundconf = false ;
2009-06-16 00:21:51 +00:00
2014-05-16 12:15:39 +00:00
// Try to create db connection
2021-02-22 14:18:01 +00:00
if ( file_exists ( $conffile )) {
2012-08-23 00:04:35 +00:00
include_once $conffile ;
2021-02-22 14:18:01 +00:00
if ( ! empty ( $dolibarr_main_db_type ) && ! empty ( $dolibarr_main_document_root )) {
if ( ! file_exists ( $dolibarr_main_document_root . " /core/lib/admin.lib.php " )) {
2020-10-31 13:32:18 +00:00
print '<span class="error">A ' . $conffiletoshow . ' file exists with a dolibarr_main_document_root to ' . $dolibarr_main_document_root . ' that seems wrong. Try to fix or remove the ' . $conffiletoshow . ' file.</span><br>' . " \n " ;
dol_syslog ( " A ' " . $conffiletoshow . " ' file exists with a dolibarr_main_document_root to " . $dolibarr_main_document_root . " that seems wrong. Try to fix or remove the ' " . $conffiletoshow . " ' file. " , LOG_WARNING );
2020-05-21 13:05:19 +00:00
} else {
2026-02-08 19:40:25 +00:00
$validfoundconf = true ;
2020-10-31 13:32:18 +00:00
require_once $dolibarr_main_document_root . '/core/lib/admin.lib.php' ;
// If password is encoded, we decode it
2025-07-28 23:14:42 +00:00
if ( preg_match ( '/(crypted|dolcrypt):/i' , $dolibarr_main_db_pass ) || ! empty ( $dolibarr_main_db_encrypted_pass )) {
2020-10-31 13:32:18 +00:00
require_once $dolibarr_main_document_root . '/core/lib/security.lib.php' ;
2021-02-22 14:18:01 +00:00
if ( preg_match ( '/crypted:/i' , $dolibarr_main_db_pass )) {
2024-01-11 09:07:06 +00:00
$dolibarr_main_db_encrypted_pass = preg_replace ( '/crypted:/i' , '' , $dolibarr_main_db_pass ); // We need to set this as it is used to know the password was initially encrypted
2020-10-31 13:32:18 +00:00
$dolibarr_main_db_pass = dol_decode ( $dolibarr_main_db_encrypted_pass );
2025-07-28 23:14:42 +00:00
} elseif ( preg_match ( '/dolcrypt:/i' , $dolibarr_main_db_pass )) {
2025-07-28 23:14:42 +00:00
$dolibarr_main_db_encrypted_pass = $dolibarr_main_db_pass ; // We need to set this as it is used to know the password was initially encrypted
2025-07-28 23:14:42 +00:00
$dolibarr_main_db_pass = dolDecrypt ( $dolibarr_main_db_pass );
2021-02-22 14:18:01 +00:00
} else {
$dolibarr_main_db_pass = dol_decode ( $dolibarr_main_db_encrypted_pass );
}
2020-10-31 13:32:18 +00:00
}
// $conf already created in 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 ;
2025-07-28 23:14:42 +00:00
2025-02-03 13:28:54 +00:00
$db = getDoliDBInstance ( $conf -> db -> type , $conf -> db -> host , ( string ) $conf -> db -> user , $conf -> db -> pass , $conf -> db -> name , ( int ) $conf -> db -> port );
2021-02-22 14:18:01 +00:00
if ( $db -> connected && $db -> database_selected ) {
2020-10-31 13:32:18 +00:00
$ok = true ;
}
}
2009-06-16 00:21:51 +00:00
}
}
2025-02-03 13:28:54 +00:00
$dolibarrlastupgradeversionarray = array ();
2018-07-07 21:50:41 +00:00
// If database access is available, we set more variables
2026-05-10 23:26:15 +00:00
if ( $db !== null && $ok ) {
2021-02-22 14:18:01 +00:00
if ( empty ( $dolibarr_main_db_encryption )) {
$dolibarr_main_db_encryption = 0 ;
}
2009-06-30 09:21:29 +00:00
$conf -> db -> dolibarr_main_db_encryption = $dolibarr_main_db_encryption ;
2021-02-22 14:18:01 +00:00
if ( empty ( $dolibarr_main_db_cryptkey )) {
$dolibarr_main_db_cryptkey = '' ;
}
2009-06-30 09:21:29 +00:00
$conf -> db -> dolibarr_main_db_cryptkey = $dolibarr_main_db_cryptkey ;
2009-07-02 00:19:06 +00:00
2009-06-16 00:21:51 +00:00
$conf -> setValues ( $db );
2018-02-14 13:50:22 +00:00
// Reset forced setup after the setValues
2021-02-22 14:18:01 +00:00
if ( defined ( 'SYSLOG_FILE' )) {
$conf -> global -> SYSLOG_FILE = constant ( 'SYSLOG_FILE' );
}
2018-02-14 13:50:22 +00:00
$conf -> global -> MAIN_ENABLE_LOG_TO_HTML = 1 ;
2009-06-16 00:21:51 +00:00
// Current version is $conf->global->MAIN_VERSION_LAST_UPGRADE
// Version to install is DOL_VERSION
2025-08-20 14:02:46 +00:00
$dolibarrlastupgradeversionarray = preg_split ( '/[\.-]/' , getDolGlobalString ( 'MAIN_VERSION_LAST_UPGRADE' , getDolGlobalString ( 'MAIN_VERSION_LAST_INSTALL' )));
2019-11-13 17:32:11 +00:00
$dolibarrversiontoinstallarray = versiondolibarrarray ();
2026-02-08 19:40:25 +00:00
} elseif ( $validfoundconf ) {
2026-07-02 10:50:19 +00:00
print 'Failed to connect with data found in the current conf.php file.<br>' ;
2009-06-16 00:21:51 +00:00
}
2011-09-20 10:30:56 +00:00
// Show title
2023-11-27 10:46:58 +00:00
if ( getDolGlobalString ( 'MAIN_VERSION_LAST_UPGRADE' ) || getDolGlobalString ( 'MAIN_VERSION_LAST_INSTALL' )) {
2026-01-06 10:48:51 +00:00
print $langs -> trans ( " VersionLastUpgrade " ) . ' <b><span class="badge-text okinversed">' . getDolGlobalString ( 'MAIN_VERSION_LAST_UPGRADE' , getDolGlobalString ( 'MAIN_VERSION_LAST_INSTALL' )) . '</span></b> - ' ;
print $langs -> trans ( " VersionProgram " ) . ' <b><span class="badge-text okinversed">' . DOL_VERSION . '</span></b>' ;
2009-08-04 14:36:29 +00:00
//print ' '.img_warning($langs->trans("RunningUpdateProcessMayBeRequired"));
print '<br>' ;
print '<br>' ;
2021-02-22 14:18:01 +00:00
} else {
print " <br> \n " ;
}
2009-08-04 14:36:29 +00:00
2025-09-15 12:40:34 +00:00
print '<br>' ;
print '<h3><img class="valignmiddle inline-block paddingright" src="../public/theme/common/gear.svg" width="20" alt="Database"> ' ;
2025-09-29 10:04:56 +00:00
print '<span class="soustitre valignmiddle">' . $langs -> trans ( " ChooseYourSetupMode " ) . '</span></h3>' ;
2009-12-04 10:14:51 +00:00
2019-11-13 17:32:11 +00:00
$foundrecommandedchoice = 0 ;
2009-12-04 10:14:51 +00:00
2020-10-31 13:32:18 +00:00
$available_choices = array ();
$notavailable_choices = array ();
2009-08-04 14:36:29 +00:00
2021-02-22 14:18:01 +00:00
if ( empty ( $dolibarr_main_db_host )) { // This means install process was not run
2020-10-31 13:32:18 +00:00
$foundrecommandedchoice = 1 ; // To show only once
}
2020-03-29 21:14:51 +00:00
2020-10-31 13:32:18 +00:00
// Show line of first install choice
$choice = '<tr class="trlineforchoice' . ( $foundrecommandedchoice ? ' choiceselected' : '' ) . '">' . " \n " ;
2025-11-21 18:11:32 +00:00
$choice .= '<td class="nowrap center firstcolumn"><b>' . $langs -> trans ( " FreshInstall " ) . '</b>' ;
2014-05-05 10:08:19 +00:00
$choice .= '</td>' ;
2020-10-31 13:32:18 +00:00
$choice .= '<td class="listofchoicesdesc">' ;
2014-05-05 10:08:19 +00:00
$choice .= $langs -> trans ( " FreshInstallDesc " );
2021-02-22 14:18:01 +00:00
if ( empty ( $dolibarr_main_db_host )) { // This means install process was not run
2020-03-29 21:14:51 +00:00
$choice .= '<br>' ;
2009-10-29 22:28:03 +00:00
//print $langs->trans("InstallChoiceRecommanded",DOL_VERSION,$conf->global->MAIN_VERSION_LAST_UPGRADE);
2025-11-21 18:11:32 +00:00
$choice .= '<div class="><br>' ;
$choice .= '<div class="ok suggestedchoice">' . $langs -> trans ( " InstallChoiceSuggested " ) . '</div>' ;
$choice .= '</div>' ;
2009-10-29 22:28:03 +00:00
}
2014-05-05 10:08:19 +00:00
2020-10-31 13:32:18 +00:00
$choice .= '</td>' ;
2025-11-21 18:11:32 +00:00
$choice .= '<td class="center lastcolumn">' ;
2021-02-22 14:18:01 +00:00
if ( $allowinstall ) {
2020-10-31 13:32:18 +00:00
$choice .= '<a class="button" href="fileconf.php?selectlang=' . $setuplang . '">' . $langs -> trans ( " Start " ) . '</a>' ;
2020-05-21 13:05:19 +00:00
} else {
2019-11-02 16:18:34 +00:00
$choice .= ( $foundrecommandedchoice ? '<span class="warning">' : '' ) . $langs -> trans ( " InstallNotAllowed " ) . ( $foundrecommandedchoice ? '</span>' : '' );
2009-08-04 14:36:29 +00:00
}
2020-10-31 13:32:18 +00:00
$choice .= '</td>' . " \n " ;
$choice .= '</tr>' . " \n " ;
2009-08-04 14:36:29 +00:00
2020-10-31 13:32:18 +00:00
$positionkey = ( $foundrecommandedchoice ? 999 : 0 );
if ( $allowinstall ) {
$available_choices [ $positionkey ] = $choice ;
} else {
$notavailable_choices [ $positionkey ] = $choice ;
}
2009-08-04 14:36:29 +00:00
2011-09-20 10:30:56 +00:00
// Show upgrade lines
2019-11-13 17:32:11 +00:00
$allowupgrade = true ;
2021-02-22 14:18:01 +00:00
if ( empty ( $dolibarr_main_db_host )) { // This means install process was not run
$allowupgrade = false ;
}
2022-05-21 15:14:05 +00:00
if ( getDolGlobalInt ( " MAIN_NOT_INSTALLED " )) {
2019-11-13 17:32:11 +00:00
$allowupgrade = false ;
2009-10-29 22:28:03 +00:00
}
2021-02-22 14:18:01 +00:00
if ( GETPOST ( 'allowupgrade' )) {
$allowupgrade = true ;
}
2022-01-23 22:37:59 +00:00
$dir = DOL_DOCUMENT_ROOT . " /install/mysql/migration/ " ; // We use mysql migration scripts whatever is database driver
dolibarr_install_syslog ( " Scan sql files for migration files in " . $dir );
// Get files list of migration file x.y.z-a.b.c.sql into /install/mysql/migration
$migrationscript = array ();
$handle = opendir ( $dir );
if ( is_resource ( $handle )) {
2022-07-08 12:31:28 +00:00
$versiontousetoqualifyscript = preg_replace ( '/-.*/' , '' , DOL_VERSION );
2022-01-23 22:37:59 +00:00
while (( $file = readdir ( $handle )) !== false ) {
$reg = array ();
if ( preg_match ( '/^(\d+\.\d+\.\d+)-(\d+\.\d+\.\d+)\.sql$/i' , $file , $reg )) {
2022-07-08 12:31:28 +00:00
//var_dump(DOL_VERSION." ".$reg[2]." ".$versiontousetoqualifyscript." ".version_compare($versiontousetoqualifyscript, $reg[2]));
if ( ! empty ( $reg [ 2 ]) && version_compare ( $versiontousetoqualifyscript , $reg [ 2 ]) >= 0 ) {
2022-01-23 22:37:59 +00:00
$migrationscript [] = array ( 'from' => $reg [ 1 ], 'to' => $reg [ 2 ]);
}
}
}
$migrationscript = dol_sort_array ( $migrationscript , 'from' , 'asc' , 1 );
} else {
print '<div class="error">' . $langs -> trans ( " ErrorCanNotReadDir " , $dir ) . '</div>' ;
}
2009-08-04 14:36:29 +00:00
2019-11-13 17:32:11 +00:00
$count = 0 ;
2021-02-22 14:18:01 +00:00
foreach ( $migrationscript as $migarray ) {
2009-08-14 00:30:43 +00:00
$count ++ ;
2020-10-31 13:32:18 +00:00
$recommended_choice = false ;
$version = DOL_VERSION ;
2019-11-13 17:32:11 +00:00
$versionfrom = $migarray [ 'from' ];
2020-10-31 13:32:18 +00:00
$versionto = $migarray [ 'to' ];
$versionarray = preg_split ( '/[\.-]/' , $version );
$dolibarrversionfromarray = preg_split ( '/[\.-]/' , $versionfrom );
$dolibarrversiontoarray = preg_split ( '/[\.-]/' , $versionto );
// Define string newversionxxx that are used for text to show
$newversionfrom = preg_replace ( '/(\.[0-9]+)$/i' , '.*' , $versionfrom );
$newversionto = preg_replace ( '/(\.[0-9]+)$/i' , '.*' , $versionto );
$newversionfrombis = '' ;
2021-02-22 14:18:01 +00:00
if ( versioncompare ( $dolibarrversiontoarray , $versionarray ) < - 2 ) { // From x.y.z -> x.y.z+1
2020-10-31 13:32:18 +00:00
$newversionfrombis = ' ' . $langs -> trans ( " or " ) . ' ' . $versionto ;
}
2021-02-22 14:18:01 +00:00
if ( $ok ) {
2025-02-03 13:28:54 +00:00
if ( is_array ( $dolibarrlastupgradeversionarray ) && count ( $dolibarrlastupgradeversionarray ) >= 2 ) { // If database access is available and last upgrade version is known
2021-02-22 14:18:47 +00:00
// Now we check if this is the first qualified choice
2020-10-31 13:32:18 +00:00
if ( $allowupgrade && empty ( $foundrecommandedchoice ) &&
( versioncompare ( $dolibarrversiontoarray , $dolibarrlastupgradeversionarray ) > 0 || versioncompare ( $dolibarrversiontoarray , $versionarray ) < - 2 )
2021-02-22 14:18:01 +00:00
) {
2020-10-31 13:32:18 +00:00
$foundrecommandedchoice = 1 ; // To show only once
$recommended_choice = true ;
}
} else {
// We cannot recommend a choice.
// A version of install may be known, but we need last upgrade.
}
}
2025-11-21 18:11:32 +00:00
$choice = '' ;
2020-10-31 13:32:18 +00:00
$choice .= " \n " . '<!-- choice ' . $count . ' -->' . " \n " ;
$choice .= '<tr' . ( $recommended_choice ? ' class="choiceselected"' : '' ) . '>' ;
2025-11-21 18:11:32 +00:00
$choice .= '<td class="nowrap center firstcolumn"><span class="opacitymedium">' . $langs -> trans ( " Upgrade " ) . '</span><br><b>' . $newversionfrom . $newversionfrombis . ' -> ' . $newversionto . '</b></td>' ;
2020-10-31 13:32:18 +00:00
$choice .= '<td class="listofchoicesdesc">' ;
$choice .= $langs -> trans ( " UpgradeDesc " );
2021-02-22 14:18:01 +00:00
if ( $recommended_choice ) {
2020-10-31 13:32:18 +00:00
$choice .= '<br>' ;
//print $langs->trans("InstallChoiceRecommanded",DOL_VERSION,$conf->global->MAIN_VERSION_LAST_UPGRADE);
2025-11-21 18:11:32 +00:00
$choice .= '<div class=""><br>' ;
2020-10-31 13:32:18 +00:00
$choice .= '<div class="ok suggestedchoice">' . $langs -> trans ( " InstallChoiceSuggested " ) . '</div>' ;
2021-02-22 14:18:01 +00:00
if ( $count < count ( $migarray )) { // There are other choices after
2020-10-31 13:32:18 +00:00
print $langs -> trans ( " MigrateIsDoneStepByStep " , DOL_VERSION );
}
$choice .= '</div>' ;
}
$choice .= '</td>' ;
2025-11-21 18:11:32 +00:00
$choice .= '<td class="center lastcolumn">' ;
2021-02-22 14:18:01 +00:00
if ( $allowupgrade ) {
2019-11-13 17:32:11 +00:00
$disabled = false ;
2021-02-22 14:18:01 +00:00
if ( $foundrecommandedchoice == 2 ) {
2019-11-13 17:32:11 +00:00
$disabled = true ;
2017-03-20 18:21:26 +00:00
}
2021-02-22 14:18:01 +00:00
if ( $foundrecommandedchoice == 1 ) {
2017-03-20 18:21:26 +00:00
$foundrecommandedchoice = 2 ;
}
2021-02-22 14:18:01 +00:00
if ( $disabled ) {
2020-10-31 13:32:18 +00:00
$choice .= '<span class="opacitymedium">' . $langs -> trans ( " NotYetAvailable " ) . '</span>' ;
} else {
2025-11-21 18:11:32 +00:00
$choice .= '<a class="button runupgrade" href="upgrade.php?action=upgrade' . ( $count < count ( $migrationscript ) ? '_' . $versionto : '' ) . '&selectlang=' . $setuplang . '&versionfrom=' . $versionfrom . '&versionto=' . $versionto . '"' ;
if ( $recommended_choice ) {
$choice .= ' title="' . dol_string_nohtmltag ( $langs -> trans ( " InstallChoiceSuggested " )) . '"' ;
} else {
$choice .= ' title="' . dol_string_nohtmltag ( $langs -> trans ( " MigrationAlreadyDone " )) . '"' ;
}
$choice .= '>' ;
$choice .= $langs -> trans ( " Start " );
$choice .= '</a>' ;
2020-10-31 13:32:18 +00:00
}
} else {
$choice .= $langs -> trans ( " NotAvailable " );
}
$choice .= '</td>' ;
$choice .= '</tr>' . " \n " ;
2025-11-21 18:11:32 +00:00
if ( $allowupgrade && $recommended_choice ) {
2020-10-31 13:32:18 +00:00
$available_choices [ $count ] = $choice ;
2020-05-21 13:05:19 +00:00
} else {
2020-10-31 13:32:18 +00:00
$notavailable_choices [ $count ] = $choice ;
2008-08-28 21:28:59 +00:00
}
}
2009-06-16 00:21:51 +00:00
2014-05-29 16:11:14 +00:00
// If there is no choice at all, we show all of them.
2021-02-22 14:18:01 +00:00
if ( empty ( $available_choices )) {
2019-11-13 17:32:11 +00:00
$available_choices = $notavailable_choices ;
$notavailable_choices = array ();
2014-05-29 16:11:14 +00:00
}
2020-10-31 13:32:18 +00:00
// Array of install choices
2019-11-02 16:18:34 +00:00
krsort ( $available_choices , SORT_NATURAL );
2020-10-31 13:32:18 +00:00
print " \n " ;
print '<table width="100%" class="listofchoices">' ;
foreach ( $available_choices as $choice ) {
print $choice ;
}
print '</table>' . " \n " ;
if ( count ( $notavailable_choices )) {
2025-12-06 01:10:33 +00:00
print '<br><div id="AShowChoices" class="opacitymedium cursorpointer">' ;
2020-10-31 13:32:18 +00:00
print '> ' . $langs -> trans ( 'ShowNotAvailableOptions' ) . '...' ;
print '</div>' ;
print '<div id="navail_choices" style="display:none">' ;
print " <br> \n " ;
2025-11-21 18:11:32 +00:00
print '<table class="centpercent listofchoices">' ;
2020-10-31 13:32:18 +00:00
foreach ( $notavailable_choices as $choice ) {
print $choice ;
}
print '</table>' . " \n " ;
print '</div>' ;
}
}
2005-02-13 15:40:15 +00:00
}
2014-05-05 10:08:19 +00:00
print ' < script type = " text/javascript " >
2019-01-21 00:51:28 +00:00
$ ( " div#AShowChoices " ) . click ( function () {
2014-05-05 10:08:19 +00:00
$ ( " div#navail_choices " ) . toggle ();
if ( $ ( " div#navail_choices " ) . css ( " display " ) == " none " ) {
2026-02-17 14:58:10 +00:00
$ ( this ) . text ( \ '> ' . dol_escape_js ( $langs -> transnoentitiesnoconv ( 'ShowNotAvailableOptions' )) . ' ... \ ' );
2014-05-05 10:08:19 +00:00
} else {
2026-02-17 14:58:10 +00:00
$ ( this ) . text ( \ '> ' . dol_escape_js ( $langs -> transnoentitiesnoconv ( 'HideNotAvailableOptions' )) . ' ... \ ' );
2014-05-05 10:08:19 +00:00
}
});
2005-10-03 01:14:50 +00:00
2015-02-14 11:24:16 +00:00
/*
2015-01-25 21:29:36 +00:00
$ ( " .runupgrade " ) . click ( function () {
return confirm ( " '.dol_escape_js( $langs->transnoentitiesnoconv ( " WarningUpgrade " ), 0, 1).' " );
});
2015-02-14 11:24:16 +00:00
*/
2015-01-25 21:29:36 +00:00
2014-05-05 10:08:19 +00:00
</ script > ' ;
2007-04-18 17:38:55 +00:00
2018-07-07 21:50:41 +00:00
dolibarr_install_syslog ( " - check: end " );
2019-11-13 17:32:11 +00:00
pFooter ( 1 ); // Never display next button