2009-09-11 00:00:20 +02:00
< ? php
2024-11-06 19:39:46 +01:00
/* Copyright ( C ) 2004 Rodolphe Quiedeville < rodolphe @ quiedeville . org >
* Copyright ( C ) 2004 - 2012 Laurent Destailleur < eldy @ users . sourceforge . net >
* Copyright ( C ) 2005 - 2012 Regis Houssin < regis . houssin @ inodbox . com >
* Copyright ( C ) 2015 Raphaël Doursenaud < rdoursenaud @ gpcsolutions . fr >
* Copyright ( C ) 2021 - 2024 Frédéric France < frederic . france @ free . fr >
* Copyright ( C ) 2023 Gauthier VERDOL < gauthier . verdol @ atm - consulting . fr >
2025-02-03 14:28:54 +01:00
* Copyright ( C ) 2024 - 2025 MDW < mdeweerd @ users . noreply . github . com >
2024-11-06 19:39:46 +01:00
* Copyright ( C ) 2024 Vincent de Grandpré < vincent @ de - grandpre . quebec >
2012-03-01 00:33:04 +01:00
*
2012-02-08 16:57:37 +01:00
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
2013-01-16 15:36:08 +01:00
* the Free Software Foundation ; either version 3 of the License , or
2012-02-08 16:57:37 +01:00
* ( at your option ) any later version .
2012-03-01 00:33:04 +01:00
*
2012-02-08 16:57:37 +01:00
* 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 .
2012-03-01 00:33:04 +01:00
*
2012-02-08 16:57:37 +01:00
* You should have received a copy of the GNU General Public License
2019-09-23 21:55:30 +02:00
* along with this program . If not , see < https :// www . gnu . org / licenses />.
2012-02-08 16:57:37 +01:00
*/
2009-09-11 00:00:20 +02:00
/**
2015-07-06 16:33:45 +02:00
* \file htdocs / install / repair . php
2009-09-11 00:00:20 +02:00
* \brief Run repair script
*/
2012-08-23 02:46:16 +02:00
include_once 'inc.php' ;
2021-02-26 18:20:21 +01:00
if ( file_exists ( $conffile )) {
include_once $conffile ;
}
2024-11-06 19:39:46 +01:00
/**
* @ var Conf $conf
* @ var Translate $langs
*
* @ var string $dolibarr_main_document_root
* @ 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-02-03 14:28:54 +01:00
'
@ phan - var - force ? string $dolibarr_main_db_encryption
@ phan - var - force ? string $dolibarr_main_db_cryptkey
' ;
2012-08-22 23:11:24 +02:00
require_once $dolibarr_main_document_root . '/core/lib/admin.lib.php' ;
2017-06-09 00:27:44 +02:00
include_once $dolibarr_main_document_root . '/core/lib/images.lib.php' ;
2012-08-22 23:11:24 +02:00
require_once $dolibarr_main_document_root . '/core/class/extrafields.class.php' ;
require_once 'lib/repair.lib.php' ;
2009-09-11 00:00:20 +02:00
2015-07-06 15:29:58 +02:00
$step = 2 ;
2009-09-11 00:00:20 +02:00
$ok = 0 ;
2024-11-06 19:39:46 +01:00
// This page may be long. We are increasing the time allowed.
// Only works if not in safe_mode.
2020-04-10 10:59:32 +02:00
$err = error_reporting ();
2009-09-11 00:00:20 +02:00
error_reporting ( 0 );
@ set_time_limit ( 120 );
error_reporting ( $err );
2023-12-04 12:36:19 +01:00
$setuplang = GETPOST ( " selectlang " , 'aZ09' , 3 ) ? GETPOST ( " selectlang " , 'aZ09' , 3 ) : 'auto' ;
2009-09-11 00:00:20 +02:00
$langs -> setDefaultLang ( $setuplang );
2020-04-10 10:59:32 +02:00
$langs -> loadLangs ( array ( " admin " , " install " , " other " ));
2009-09-11 00:00:20 +02:00
2021-02-26 18:20:21 +01:00
if ( $dolibarr_main_db_type == " mysqli " ) {
$choix = 1 ;
}
if ( $dolibarr_main_db_type == " pgsql " ) {
$choix = 2 ;
}
if ( $dolibarr_main_db_type == " mssql " ) {
$choix = 3 ;
}
2009-09-11 00:00:20 +02:00
2015-07-06 16:33:45 +02:00
dolibarr_install_syslog ( " --- repair: entering upgrade.php page " );
2021-02-26 18:20:21 +01:00
if ( ! is_object ( $conf )) {
dolibarr_install_syslog ( " repair: conf file not initialized " , LOG_ERR );
}
2009-09-11 00:00:20 +02:00
/*
* View
2017-06-22 14:06:48 +02:00
*/
2009-09-11 00:00:20 +02:00
2024-09-05 11:49:33 +02:00
pHeader ( $langs -> trans ( " Repair " ), " upgrade2 " , GETPOST ( 'action' , 'aZ09' ));
2009-09-11 00:00:20 +02:00
// Action to launch the repair script
2020-04-10 10:59:32 +02:00
$actiondone = 1 ;
2009-09-11 00:00:20 +02:00
2024-06-12 14:33:36 +02:00
print '<div class="warning" style="padding-top: 10px">' ;
print $langs -> trans ( " SetAtLeastOneOptionAsUrlParameter " );
print '</div>' ;
//print 'You must set one of the following option with a parameter value that is "test" or "confirmed" on the URL<br>';
//print $langs->trans("Example").': '.DOL_MAIN_URL_ROOT.'/install/repair.php?standard=confirmed<br>'."\n";
print '<br>' ;
print 'Option standard is ' . ( GETPOST ( 'standard' , 'alpha' ) ? GETPOST ( 'standard' , 'alpha' ) : 'undefined' ) . '<br>' . " \n " ;
2019-12-19 12:05:18 +01:00
// Disable modules
2024-06-12 14:33:36 +02:00
print 'Option force_disable_of_modules_not_found is ' . ( GETPOST ( 'force_disable_of_modules_not_found' , 'alpha' ) ? GETPOST ( 'force_disable_of_modules_not_found' , 'alpha' ) : 'undefined' ) . '<br>' . " \n " ;
2019-12-19 12:05:18 +01:00
// Files
2024-06-12 14:33:36 +02:00
print 'Option restore_thirdparties_logos is ' . ( GETPOST ( 'restore_thirdparties_logos' , 'alpha' ) ? GETPOST ( 'restore_thirdparties_logos' , 'alpha' ) : 'undefined' ) . '<br>' . " \n " ;
print 'Option restore_user_pictures is ' . ( GETPOST ( 'restore_user_pictures' , 'alpha' ) ? GETPOST ( 'restore_user_pictures' , 'alpha' ) : 'undefined' ) . '<br>' . " \n " ;
print 'Option rebuild_product_thumbs is ' . ( GETPOST ( 'rebuild_product_thumbs' , 'alpha' ) ? GETPOST ( 'rebuild_product_thumbs' , 'alpha' ) : 'undefined' ) . '<br>' . " \n " ;
2019-12-19 12:05:18 +01:00
// Clean tables and data
2024-06-12 14:33:36 +02:00
print 'Option clean_linked_elements is ' . ( GETPOST ( 'clean_linked_elements' , 'alpha' ) ? GETPOST ( 'clean_linked_elements' , 'alpha' ) : 'undefined' ) . '<br>' . " \n " ;
print 'Option clean_menus is ' . ( GETPOST ( 'clean_menus' , 'alpha' ) ? GETPOST ( 'clean_menus' , 'alpha' ) : 'undefined' ) . '<br>' . " \n " ;
print 'Option clean_orphelin_dir is ' . ( GETPOST ( 'clean_orphelin_dir' , 'alpha' ) ? GETPOST ( 'clean_orphelin_dir' , 'alpha' ) : 'undefined' ) . '<br>' . " \n " ;
print 'Option clean_product_stock_batch is ' . ( GETPOST ( 'clean_product_stock_batch' , 'alpha' ) ? GETPOST ( 'clean_product_stock_batch' , 'alpha' ) : 'undefined' ) . '<br>' . " \n " ;
print 'Option clean_perm_table is ' . ( GETPOST ( 'clean_perm_table' , 'alpha' ) ? GETPOST ( 'clean_perm_table' , 'alpha' ) : 'undefined' ) . '<br>' . " \n " ;
2025-01-23 21:02:49 +01:00
print 'Option clean_ecm_files_table is ' . ( GETPOST ( 'clean_ecm_files_table' , 'alpha' ) ? GETPOST ( 'clean_ecm_files_table' , 'alpha' ) : 'undefined' ) . '<br>' . " \n " ;
2024-06-12 14:33:36 +02:00
print 'Option repair_link_dispatch_lines_supplier_order_lines, is ' . ( GETPOST ( 'repair_link_dispatch_lines_supplier_order_lines' , 'alpha' ) ? GETPOST ( 'repair_link_dispatch_lines_supplier_order_lines' , 'alpha' ) : 'undefined' ) . '<br>' . " \n " ;
2019-12-19 12:05:18 +01:00
// Init data
2024-06-12 14:33:36 +02:00
print 'Option set_empty_time_spent_amount is ' . ( GETPOST ( 'set_empty_time_spent_amount' , 'alpha' ) ? GETPOST ( 'set_empty_time_spent_amount' , 'alpha' ) : 'undefined' ) . '<br>' . " \n " ;
2019-12-19 12:05:18 +01:00
// Structure
2024-06-12 14:42:02 +02:00
print 'Option force_utf8_on_tables (force utf8 + row=dynamic), for mysql/mariadb only, is ' . ( GETPOST ( 'force_utf8_on_tables' , 'alpha' ) ? GETPOST ( 'force_utf8_on_tables' , 'alpha' ) : 'undefined' ) . '<br>' . " \n " ;
print '<span class="valignmiddle">' . " Option force_utf8mb4_on_tables (force utf8mb4 + row=dynamic, EXPERIMENTAL!), for mysql/mariadb only, is " . ( GETPOST ( 'force_utf8mb4_on_tables' , 'alpha' ) ? GETPOST ( 'force_utf8mb4_on_tables' , 'alpha' ) : 'undefined' );
2024-06-12 14:33:36 +02:00
print '</span>' ;
2024-06-12 14:34:24 +02:00
if ( $dolibarr_main_db_character_set != 'utf8mb4' ) {
2024-06-12 14:33:36 +02:00
print '<img src="../theme/eldy/img/warning.png" class="pictofortooltip valignmiddle" title="If you switch to utf8mb4, you must also check the value for $dolibarr_main_db_character_set and $dolibarr_main_db_collation into conf/conf.php file.">' ;
}
print " <br> \n " ;
2024-06-12 14:42:02 +02:00
print " Option force_collation_from_conf_on_tables (force " . $conf -> db -> character_set . " / " . $conf -> db -> dolibarr_main_db_collation . " + row=dynamic), for mysql/mariadb only is " . ( GETPOST ( 'force_collation_from_conf_on_tables' , 'alpha' ) ? GETPOST ( 'force_collation_from_conf_on_tables' , 'alpha' ) : 'undefined' ) . " <br> \n " ;
2024-06-12 14:33:36 +02:00
2021-03-26 13:10:06 +01:00
// Rebuild sequence
2024-06-12 14:33:36 +02:00
print 'Option rebuild_sequences, for postgresql only, is ' . ( GETPOST ( 'rebuild_sequences' , 'alpha' ) ? GETPOST ( 'rebuild_sequences' , 'alpha' ) : 'undefined' ) . '<br>' . " \n " ;
2016-07-08 18:59:36 +02:00
print '<br>' ;
2024-06-12 14:33:36 +02:00
print '<hr>' ;
print '<table cellspacing="0" cellpadding="1" class="centpercent">' ;
2020-04-10 10:59:32 +02:00
$error = 0 ;
2009-09-11 00:00:20 +02:00
// If password is encoded, we decode it
2021-02-26 18:20:21 +01:00
if ( preg_match ( '/crypted:/i' , $dolibarr_main_db_pass ) || ! empty ( $dolibarr_main_db_encrypted_pass )) {
2020-09-07 10:18:17 +02:00
require_once $dolibarr_main_document_root . '/core/lib/security.lib.php' ;
2021-02-26 18:20:21 +01:00
if ( preg_match ( '/crypted:/i' , $dolibarr_main_db_pass )) {
2020-09-07 10:18:17 +02:00
$dolibarr_main_db_pass = preg_replace ( '/crypted:/i' , '' , $dolibarr_main_db_pass );
$dolibarr_main_db_pass = dol_decode ( $dolibarr_main_db_pass );
2024-01-11 10:07:06 +01: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
2021-02-26 18:20:21 +01:00
} else {
$dolibarr_main_db_pass = dol_decode ( $dolibarr_main_db_encrypted_pass );
}
2009-09-11 00:00:20 +02:00
}
// $conf is already instancied inside inc.php
$conf -> db -> type = $dolibarr_main_db_type ;
$conf -> db -> host = $dolibarr_main_db_host ;
$conf -> db -> port = $dolibarr_main_db_port ;
$conf -> db -> name = $dolibarr_main_db_name ;
$conf -> db -> user = $dolibarr_main_db_user ;
$conf -> db -> pass = $dolibarr_main_db_pass ;
2012-02-08 16:57:37 +01:00
// For encryption
2024-05-15 17:41:58 +02:00
$conf -> db -> dolibarr_main_db_encryption = isset ( $dolibarr_main_db_encryption ) ? $dolibarr_main_db_encryption : 0 ;
2020-04-10 10:59:32 +02:00
$conf -> db -> dolibarr_main_db_cryptkey = isset ( $dolibarr_main_db_cryptkey ) ? $dolibarr_main_db_cryptkey : '' ;
2012-02-08 16:57:37 +01:00
2023-06-24 04:04:02 +02:00
$db = getDoliDBInstance ( $conf -> db -> type , $conf -> db -> host , $conf -> db -> user , $conf -> db -> pass , $conf -> db -> name , ( int ) $conf -> db -> port );
2011-09-28 19:41:08 +02:00
2021-02-26 18:20:21 +01:00
if ( $db -> connected ) {
2020-09-07 10:18:17 +02:00
print '<tr><td class="nowrap">' ;
print $langs -> trans ( " ServerConnection " ) . " : $dolibarr_main_db_host </td><td class= \" right \" > " . $langs -> trans ( " OK " ) . " </td></tr> " ;
dolibarr_install_syslog ( " repair: " . $langs -> transnoentities ( " ServerConnection " ) . " : " . $dolibarr_main_db_host . $langs -> transnoentities ( " OK " ));
$ok = 1 ;
2020-05-21 15:05:19 +02:00
} else {
2020-09-07 10:18:17 +02:00
print " <tr><td> " . $langs -> trans ( " ErrorFailedToConnectToDatabase " , $dolibarr_main_db_name ) . " </td><td class= \" right \" > " . $langs -> transnoentities ( " Error " ) . " </td></tr> " ;
dolibarr_install_syslog ( " repair: " . $langs -> transnoentities ( " ErrorFailedToConnectToDatabase " , $dolibarr_main_db_name ));
$ok = 0 ;
2009-09-11 00:00:20 +02:00
}
2021-02-26 18:20:21 +01:00
if ( $ok ) {
if ( $db -> database_selected ) {
2020-09-07 10:18:17 +02:00
print '<tr><td class="nowrap">' ;
print $langs -> trans ( " DatabaseConnection " ) . " : " . $dolibarr_main_db_name . " </td><td class= \" right \" > " . $langs -> trans ( " OK " ) . " </td></tr> " ;
dolibarr_install_syslog ( " repair: database connection successful: " . $dolibarr_main_db_name );
$ok = 1 ;
} else {
print " <tr><td> " . $langs -> trans ( " ErrorFailedToConnectToDatabase " , $dolibarr_main_db_name ) . " </td><td class= \" right \" > " . $langs -> trans ( " Error " ) . " </td></tr> " ;
dolibarr_install_syslog ( " repair: " . $langs -> transnoentities ( " ErrorFailedToConnectToDatabase " , $dolibarr_main_db_name ));
$ok = 0 ;
}
2009-09-11 00:00:20 +02:00
}
2014-09-24 00:51:36 +02:00
// Show database version
2021-02-26 18:20:21 +01:00
if ( $ok ) {
2020-09-07 10:18:17 +02:00
$version = $db -> getVersion ();
$versionarray = $db -> getVersionArray ();
print '<tr><td>' . $langs -> trans ( " ServerVersion " ) . '</td>' ;
print '<td class="right">' . $version . '</td></tr>' ;
dolibarr_install_syslog ( " repair: " . $langs -> transnoentities ( " ServerVersion " ) . " : " . $version );
//print '<td class="right">'.join('.',$versionarray).'</td></tr>';
2009-09-11 00:00:20 +02:00
}
2017-11-23 13:23:16 +01:00
$conf -> setValues ( $db );
2018-02-14 14:50:22 +01:00
// Reset forced setup after the setValues
2021-02-26 18:20:21 +01:00
if ( defined ( 'SYSLOG_FILE' )) {
$conf -> global -> SYSLOG_FILE = constant ( 'SYSLOG_FILE' );
}
2018-02-14 14:50:22 +01:00
$conf -> global -> MAIN_ENABLE_LOG_TO_HTML = 1 ;
2009-09-11 00:00:20 +02:00
2014-09-24 00:51:36 +02:00
/* Start action here */
2020-04-10 10:59:32 +02:00
$oneoptionset = 0 ;
$oneoptionset = ( GETPOST ( 'standard' , 'alpha' ) || GETPOST ( 'restore_thirdparties_logos' , 'alpha' ) || GETPOST ( 'clean_linked_elements' , 'alpha' ) || GETPOST ( 'clean_menus' , 'alpha' )
2019-01-27 11:55:16 +01:00
|| GETPOST ( 'clean_orphelin_dir' , 'alpha' ) || GETPOST ( 'clean_product_stock_batch' , 'alpha' ) || GETPOST ( 'set_empty_time_spent_amount' , 'alpha' ) || GETPOST ( 'rebuild_product_thumbs' , 'alpha' )
2025-01-23 21:02:49 +01:00
|| GETPOST ( 'clean_perm_table' , 'alpha' ) || GETPOST ( 'clean_ecm_files_table' , 'alpha' )
2022-04-07 23:44:57 +02:00
|| GETPOST ( 'force_disable_of_modules_not_found' , 'alpha' )
2023-09-06 11:09:46 +02:00
|| GETPOST ( 'force_utf8_on_tables' , 'alpha' ) || GETPOST ( 'force_utf8mb4_on_tables' , 'alpha' ) || GETPOST ( 'force_collation_from_conf_on_tables' , 'alpha' )
2024-05-03 13:13:21 +02:00
|| GETPOST ( 'rebuild_sequences' , 'alpha' ) || GETPOST ( 'recalculateinvoicetotal' , 'alpha' ));
2017-11-23 13:23:16 +01:00
2021-02-26 18:20:21 +01:00
if ( $ok && $oneoptionset ) {
2017-11-23 13:23:16 +01:00
// Show wait message
print '<tr><td colspan="2">' . $langs -> trans ( " PleaseBePatient " ) . '<br><br></td></tr>' ;
flush ();
}
2014-09-24 00:51:36 +02:00
// run_sql: Run repair SQL file
2021-02-26 18:20:21 +01:00
if ( $ok && GETPOST ( 'standard' , 'alpha' )) {
2017-11-23 13:23:16 +01:00
$dir = " mysql/migration/ " ;
2011-09-29 22:21:57 +02:00
2020-09-07 10:18:17 +02:00
$filelist = array ();
$i = 0 ;
$ok = 0 ;
// Recupere list fichier
$filesindir = array ();
$handle = opendir ( $dir );
2021-02-26 18:20:21 +01:00
if ( is_resource ( $handle )) {
while (( $file = readdir ( $handle )) !== false ) {
if ( preg_match ( '/\.sql$/i' , $file )) {
$filesindir [] = $file ;
}
2020-09-07 10:18:17 +02:00
}
}
sort ( $filesindir );
2021-02-26 18:20:21 +01:00
foreach ( $filesindir as $file ) {
if ( preg_match ( '/repair/i' , $file )) {
2020-09-07 10:18:17 +02:00
$filelist [] = $file ;
}
}
// Loop on each file
2021-02-26 18:20:21 +01:00
foreach ( $filelist as $file ) {
2020-09-07 10:18:17 +02:00
print '<tr><td class="nowrap">*** ' ;
print $langs -> trans ( " Script " ) . '</td><td class="right">' . $file . '</td></tr>' ;
$name = substr ( $file , 0 , dol_strlen ( $file ) - 4 );
// Run sql script
2024-09-26 22:17:49 +02:00
$ok = run_sql ( $dir . $file , 0 , 0 , 1 );
2020-09-07 10:18:17 +02:00
}
2009-09-11 00:00:20 +02:00
}
2012-05-06 20:54:58 +02:00
2016-07-08 18:59:36 +02:00
// sync_extrafields: Search list of fields declared and list of fields created into databases, then create fields missing
2021-02-26 18:20:21 +01:00
if ( $ok && GETPOST ( 'standard' , 'alpha' )) {
2020-04-10 10:59:32 +02:00
$extrafields = new ExtraFields ( $db );
2023-08-15 14:17:21 +02:00
// List of tables that has an extrafield table
2024-03-16 21:43:26 +01:00
$listofmodulesextra = array ( 'societe' => 'societe' , 'adherent' => 'adherent' , 'product' => 'product' ,
'socpeople' => 'socpeople' , 'propal' => 'propal' , 'commande' => 'commande' ,
'facture' => 'facture' , 'facturedet' => 'facturedet' , 'facture_rec' => 'facture_rec' , 'facturedet_rec' => 'facturedet_rec' ,
'supplier_proposal' => 'supplier_proposal' , 'commande_fournisseur' => 'commande_fournisseur' ,
'facture_fourn' => 'facture_fourn' , 'facture_fourn_rec' => 'facture_fourn_rec' , 'facture_fourn_det' => 'facture_fourn_det' , 'facture_fourn_det_rec' => 'facture_fourn_det_rec' ,
'fichinter' => 'fichinter' , 'fichinterdet' => 'fichinterdet' ,
'inventory' => 'inventory' ,
'actioncomm' => 'actioncomm' , 'bom_bom' => 'bom_bom' , 'mrp_mo' => 'mrp_mo' ,
'adherent_type' => 'adherent_type' , 'user' => 'user' , 'partnership' => 'partnership' , 'projet' => 'projet' , 'projet_task' => 'projet_task' , 'ticket' => 'ticket' );
2023-08-15 14:17:21 +02:00
//$listofmodulesextra = array('fichinter'=>'fichinter');
2017-04-05 15:24:41 +02:00
print '<tr><td colspan="2"><br>*** Check fields into extra table structure match table of definition. If not add column into table</td></tr>' ;
2021-02-26 18:20:21 +01:00
foreach ( $listofmodulesextra as $tablename => $elementtype ) {
2020-09-07 10:18:17 +02:00
// Get list of fields
$tableextra = MAIN_DB_PREFIX . $tablename . '_extrafields' ;
// Define $arrayoffieldsdesc
$arrayoffieldsdesc = $extrafields -> fetch_name_optionals_label ( $elementtype );
// Define $arrayoffieldsfound
$arrayoffieldsfound = array ();
$resql = $db -> DDLDescTable ( $tableextra );
2021-02-26 18:20:21 +01:00
if ( $resql ) {
2023-08-15 14:17:21 +02:00
print '<tr><td>Check availability of extra field for ' . $tableextra ;
2020-09-07 10:18:17 +02:00
$i = 0 ;
2021-02-26 18:20:21 +01:00
while ( $obj = $db -> fetch_object ( $resql )) {
2020-09-07 10:18:17 +02:00
$fieldname = $fieldtype = '' ;
2021-02-26 18:20:21 +01:00
if ( preg_match ( '/mysql/' , $db -> type )) {
2020-09-07 10:18:17 +02:00
$fieldname = $obj -> Field ;
$fieldtype = $obj -> Type ;
} else {
$fieldname = isset ( $obj -> Key ) ? $obj -> Key : $obj -> attname ;
$fieldtype = isset ( $obj -> Type ) ? $obj -> Type : 'varchar' ;
}
2021-02-26 18:20:21 +01:00
if ( empty ( $fieldname )) {
continue ;
}
if ( in_array ( $fieldname , array ( 'rowid' , 'tms' , 'fk_object' , 'import_key' ))) {
continue ;
}
2024-03-16 21:43:26 +01:00
$arrayoffieldsfound [ $fieldname ] = array ( 'type' => $fieldtype );
2020-09-07 10:18:17 +02:00
}
2023-08-15 14:17:21 +02:00
print ' - Found ' . count ( $arrayoffieldsfound ) . ' fields into table' ;
if ( count ( $arrayoffieldsfound ) > 0 ) {
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 21:46:12 +01:00
print ' <span class="opacitymedium">(' . implode ( ', ' , array_keys ( $arrayoffieldsfound )) . ')</span>' ;
2023-08-15 14:17:21 +02:00
}
print '<br>' . " \n " ;
2020-09-07 10:18:17 +02:00
// If it does not match, we create fields
2021-02-26 18:20:21 +01:00
foreach ( $arrayoffieldsdesc as $code => $label ) {
if ( ! in_array ( $code , array_keys ( $arrayoffieldsfound ))) {
2020-09-07 10:18:17 +02:00
print 'Found field ' . $code . ' declared into ' . MAIN_DB_PREFIX . 'extrafields table but not found into desc of table ' . $tableextra . " -> " ;
2023-12-04 12:36:19 +01:00
$type = $extrafields -> attributes [ $elementtype ][ 'type' ][ $code ];
$length = $extrafields -> attributes [ $elementtype ][ 'size' ][ $code ];
$attribute = '' ;
$default = '' ;
$extra = '' ;
$null = 'null' ;
2020-09-07 10:18:17 +02:00
2021-02-26 18:20:21 +01:00
if ( $type == 'boolean' ) {
2020-09-07 10:18:17 +02:00
$typedb = 'int' ;
$lengthdb = '1' ;
} elseif ( $type == 'price' ) {
$typedb = 'double' ;
$lengthdb = '24,8' ;
} elseif ( $type == 'phone' ) {
$typedb = 'varchar' ;
$lengthdb = '20' ;
} elseif ( $type == 'mail' ) {
$typedb = 'varchar' ;
$lengthdb = '128' ;
} elseif (( $type == 'select' ) || ( $type == 'sellist' ) || ( $type == 'radio' ) || ( $type == 'checkbox' ) || ( $type == 'chkbxlst' )) {
$typedb = 'text' ;
$lengthdb = '' ;
} elseif ( $type == 'link' ) {
$typedb = 'int' ;
$lengthdb = '11' ;
} else {
$typedb = $type ;
$lengthdb = $length ;
}
$field_desc = array (
2024-03-16 21:43:26 +01:00
'type' => $typedb ,
'value' => $lengthdb ,
'attribute' => $attribute ,
'default' => $default ,
'extra' => $extra ,
'null' => $null
2020-09-07 10:18:17 +02:00
);
//var_dump($field_desc);exit;
$result = 0 ;
2021-02-26 18:20:21 +01:00
if ( GETPOST ( 'standard' , 'alpha' ) == 'confirmed' ) {
2020-09-07 10:18:17 +02:00
$result = $db -> DDLAddField ( $tableextra , $code , $field_desc , " " );
2021-02-26 18:20:21 +01:00
if ( $result < 0 ) {
2020-09-07 10:18:17 +02:00
print " KO " . $db -> lasterror . " <br> \n " ;
} else {
print " OK<br> \n " ;
}
} else {
print ' - Mode test, no column added.' ;
}
}
}
print " </td><td> </td></tr> \n " ;
} else {
2023-08-15 14:17:21 +02:00
print '<tr><td>Table ' . $tableextra . ' is not found</td><td></td></tr>' . " \n " ;
2020-09-07 10:18:17 +02:00
}
2014-09-24 00:51:36 +02:00
}
}
2012-05-06 20:54:58 +02:00
2014-09-24 00:51:36 +02:00
// clean_data_ecm_dir: Clean data into ecm_directories table
2021-02-26 18:20:21 +01:00
if ( $ok && GETPOST ( 'standard' , 'alpha' )) {
2014-09-24 00:51:36 +02:00
clean_data_ecm_directories ();
2012-05-06 20:54:58 +02:00
}
2019-05-29 12:21:51 +02:00
// clean declaration constants
2021-02-26 18:20:21 +01:00
if ( $ok && GETPOST ( 'standard' , 'alpha' )) {
2019-12-19 12:05:18 +01:00
print '<tr><td colspan="2"><br>*** Clean constant record of modules not enabled</td></tr>' ;
2019-05-29 12:21:51 +02:00
2020-04-10 10:59:32 +02:00
$sql = " SELECT name, entity, value " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " const as c " ;
$sql .= " WHERE name LIKE 'MAIN_MODULE_%_TPL' OR name LIKE 'MAIN_MODULE_%_CSS' OR name LIKE 'MAIN_MODULE_%_JS' OR name LIKE 'MAIN_MODULE_%_HOOKS' " ;
$sql .= " OR name LIKE 'MAIN_MODULE_%_TRIGGERS' OR name LIKE 'MAIN_MODULE_%_THEME' OR name LIKE 'MAIN_MODULE_%_SUBSTITUTIONS' OR name LIKE 'MAIN_MODULE_%_MODELS' " ;
$sql .= " OR name LIKE 'MAIN_MODULE_%_MENUS' OR name LIKE 'MAIN_MODULE_%_LOGIN' OR name LIKE 'MAIN_MODULE_%_BARCODE' OR name LIKE 'MAIN_MODULE_%_TABS_%' " ;
$sql .= " OR name LIKE 'MAIN_MODULE_%_MODULEFOREXTERNAL' " ;
$sql .= " ORDER BY name, entity " ;
2019-05-29 12:21:51 +02:00
$resql = $db -> query ( $sql );
2021-02-26 18:20:21 +01:00
if ( $resql ) {
2019-05-29 12:21:51 +02:00
$num = $db -> num_rows ( $resql );
2021-02-26 18:20:21 +01:00
if ( $num ) {
2019-05-29 12:21:51 +02:00
$db -> begin ();
$i = 0 ;
2021-02-26 18:20:21 +01:00
while ( $i < $num ) {
2020-04-10 10:59:32 +02:00
$obj = $db -> fetch_object ( $resql );
2019-05-29 12:21:51 +02:00
$reg = array ();
2021-02-26 18:20:21 +01:00
if ( preg_match ( '/MAIN_MODULE_([^_]+)_(.+)/i' , $obj -> name , $reg )) {
2020-04-10 10:59:32 +02:00
$name = $reg [ 1 ];
$type = $reg [ 2 ];
2019-05-29 12:21:51 +02:00
2020-04-10 10:59:32 +02:00
$sql2 = " SELECT COUNT(*) as nb " ;
$sql2 .= " FROM " . MAIN_DB_PREFIX . " const as c " ;
$sql2 .= " WHERE name = 'MAIN_MODULE_ " . $name . " ' " ;
2021-08-23 18:56:46 +02:00
$sql2 .= " AND entity = " . (( int ) $obj -> entity );
2019-05-29 12:21:51 +02:00
$resql2 = $db -> query ( $sql2 );
2021-02-26 18:20:21 +01:00
if ( $resql2 ) {
2019-05-29 12:21:51 +02:00
$obj2 = $db -> fetch_object ( $resql2 );
2021-02-26 18:20:21 +01:00
if ( $obj2 && $obj2 -> nb == 0 ) {
2019-12-19 12:05:18 +01:00
// Module not found, so we can remove entry
2021-08-23 18:56:46 +02:00
$sqldelete = " DELETE FROM " . MAIN_DB_PREFIX . " const WHERE name = ' " . $db -> escape ( $obj -> name ) . " ' AND entity = " . (( int ) $obj -> entity );
2019-05-29 12:21:51 +02:00
2021-02-26 18:20:21 +01:00
if ( GETPOST ( 'standard' , 'alpha' ) == 'confirmed' ) {
2019-05-29 12:21:51 +02:00
$db -> query ( $sqldelete );
2019-06-02 15:49:10 +02:00
2021-08-23 18:56:46 +02:00
print '<tr><td>Widget ' . $obj -> name . ' set in entity ' . $obj -> entity . ' with value ' . $obj -> value . ' -> Module ' . $name . ' not enabled in entity ' . (( int ) $obj -> entity ) . ', we delete record</td></tr>' ;
2020-05-21 15:05:19 +02:00
} else {
2021-08-23 18:56:46 +02:00
print '<tr><td>Widget ' . $obj -> name . ' set in entity ' . $obj -> entity . ' with value ' . $obj -> value . ' -> Module ' . $name . ' not enabled in entity ' . (( int ) $obj -> entity ) . ', we should delete record (not done, mode test)</td></tr>' ;
2019-06-22 14:15:10 +02:00
}
2020-05-21 15:05:19 +02:00
} else {
2019-06-22 14:15:10 +02:00
//print '<tr><td>Constant '.$obj->name.' set in entity '.$obj->entity.' with value '.$obj->value.' -> Module found in entity '.$obj->entity.', we keep record</td></tr>';
}
}
}
$i ++ ;
}
$db -> commit ();
}
2019-12-19 12:28:50 +01:00
} else {
dol_print_error ( $db );
2019-06-22 14:15:10 +02:00
}
}
// clean box of not enabled modules
2021-02-26 18:20:21 +01:00
if ( $ok && GETPOST ( 'standard' , 'alpha' )) {
2019-06-22 14:15:10 +02:00
print '<tr><td colspan="2"><br>*** Clean definition of boxes of modules not enabled</td></tr>' ;
2020-04-10 10:59:32 +02:00
$sql = " SELECT file, entity FROM " . MAIN_DB_PREFIX . " boxes_def " ;
$sql .= " WHERE file like '%@%' " ;
2019-06-22 14:15:10 +02:00
$resql = $db -> query ( $sql );
2021-02-26 18:20:21 +01:00
if ( $resql ) {
2019-06-22 14:15:10 +02:00
$num = $db -> num_rows ( $resql );
2021-02-26 18:20:21 +01:00
if ( $num ) {
2019-06-22 14:15:10 +02:00
$db -> begin ();
$i = 0 ;
2021-02-26 18:20:21 +01:00
while ( $i < $num ) {
2020-04-10 10:59:32 +02:00
$obj = $db -> fetch_object ( $resql );
2019-06-22 14:15:10 +02:00
$reg = array ();
2021-02-26 18:20:21 +01:00
if ( preg_match ( '/^(.+)@(.+)$/i' , $obj -> file , $reg )) {
2020-04-10 10:59:32 +02:00
$name = $reg [ 1 ];
$module = $reg [ 2 ];
$sql2 = " SELECT COUNT(*) as nb " ;
$sql2 .= " FROM " . MAIN_DB_PREFIX . " const as c " ;
$sql2 .= " WHERE name = 'MAIN_MODULE_ " . strtoupper ( $module ) . " ' " ;
2021-08-23 18:56:46 +02:00
$sql2 .= " AND entity = " . (( int ) $obj -> entity );
2020-04-10 10:59:32 +02:00
$sql2 .= " AND value <> 0 " ;
2019-06-22 14:15:10 +02:00
$resql2 = $db -> query ( $sql2 );
2021-02-26 18:20:21 +01:00
if ( $resql2 ) {
2019-06-22 14:15:10 +02:00
$obj2 = $db -> fetch_object ( $resql2 );
2021-02-26 18:20:21 +01:00
if ( $obj2 && $obj2 -> nb == 0 ) {
2019-06-22 14:15:10 +02:00
// Module not found, so we canremove entry
2021-08-23 18:56:46 +02:00
$sqldeletea = " DELETE FROM " . MAIN_DB_PREFIX . " boxes WHERE entity = " . (( int ) $obj -> entity ) . " AND box_id IN (SELECT rowid FROM " . MAIN_DB_PREFIX . " boxes_def WHERE file = ' " . $db -> escape ( $obj -> file ) . " ' AND entity = " . (( int ) $obj -> entity ) . " ) " ;
$sqldeleteb = " DELETE FROM " . MAIN_DB_PREFIX . " boxes_def WHERE file = ' " . $db -> escape ( $obj -> file ) . " ' AND entity = " . (( int ) $obj -> entity );
2019-06-22 14:15:10 +02:00
2021-02-26 18:20:21 +01:00
if ( GETPOST ( 'standard' , 'alpha' ) == 'confirmed' ) {
2019-06-22 14:33:04 +02:00
$db -> query ( $sqldeletea );
$db -> query ( $sqldeleteb );
2019-06-22 14:15:10 +02:00
2021-08-23 18:56:46 +02:00
print '<tr><td>Constant ' . $obj -> file . ' set in boxes_def for entity ' . $obj -> entity . ' but MAIN_MODULE_' . strtoupper ( $module ) . ' not defined in entity ' . (( int ) $obj -> entity ) . ', we delete record</td></tr>' ;
2020-05-21 15:05:19 +02:00
} else {
2021-08-23 18:56:46 +02:00
print '<tr><td>Constant ' . $obj -> file . ' set in boxes_def for entity ' . $obj -> entity . ' but MAIN_MODULE_' . strtoupper ( $module ) . ' not defined in entity ' . (( int ) $obj -> entity ) . ', we should delete record (not done, mode test)</td></tr>' ;
2019-05-29 12:21:51 +02:00
}
2020-05-21 15:05:19 +02:00
} else {
2019-05-29 12:21:51 +02:00
//print '<tr><td>Constant '.$obj->name.' set in entity '.$obj->entity.' with value '.$obj->value.' -> Module found in entity '.$obj->entity.', we keep record</td></tr>';
}
}
}
$i ++ ;
}
$db -> commit ();
}
}
}
2014-09-24 00:51:36 +02:00
2017-06-09 00:27:44 +02:00
// restore_thirdparties_logos: Move logos to correct new directory.
2021-02-26 18:20:21 +01:00
if ( $ok && GETPOST ( 'restore_thirdparties_logos' )) {
2014-09-24 00:51:36 +02:00
//$exts=array('gif','png','jpg');
2020-04-10 10:59:32 +02:00
$ext = '' ;
2017-06-09 00:27:44 +02:00
2017-04-05 15:24:41 +02:00
print '<tr><td colspan="2"><br>*** Restore thirdparties logo<br>' ;
2014-09-24 00:51:36 +02:00
2020-04-10 10:59:32 +02:00
$sql = " SELECT s.rowid, s.nom as name, s.logo FROM " . MAIN_DB_PREFIX . " societe as s ORDER BY s.nom " ;
$resql = $db -> query ( $sql );
2021-02-26 18:20:21 +01:00
if ( $resql ) {
2020-04-10 10:59:32 +02:00
$num = $db -> num_rows ( $resql );
$i = 0 ;
2014-09-24 00:51:36 +02:00
2021-02-26 18:20:21 +01:00
while ( $i < $num ) {
2020-04-10 10:59:32 +02:00
$obj = $db -> fetch_object ( $resql );
2019-09-11 15:46:37 +02:00
/*
$name = preg_replace ( '/é/' , '' , $obj -> name );
$name = preg_replace ( '/ /' , '_' , $name );
$name = preg_replace ( '/\'/' , '' , $name );
*/
2014-09-24 00:51:36 +02:00
2024-09-05 15:51:15 +02:00
$tmp = explode ( '.' , ( string ) $obj -> logo );
2020-04-10 10:59:32 +02:00
$name = $tmp [ 0 ];
2021-02-26 18:20:21 +01:00
if ( isset ( $tmp [ 1 ])) {
$ext = '.' . $tmp [ 1 ];
}
2014-09-24 00:51:36 +02:00
2021-02-26 18:20:21 +01:00
if ( ! empty ( $name )) {
2020-04-10 10:59:32 +02:00
$filetotest = $dolibarr_main_data_root . '/societe/logos/' . $name . $ext ;
$filetotestsmall = $dolibarr_main_data_root . '/societe/logos/thumbs/' . $name . '_small' . $ext ;
2024-03-16 21:43:26 +01:00
$exists = ( int ) dol_is_file ( $filetotest );
2019-09-11 15:46:37 +02:00
print 'Check thirdparty ' . $obj -> rowid . ' name=' . $obj -> name . ' logo=' . $obj -> logo . ' file ' . $filetotest . " exists= " . $exists . " <br> \n " ;
2021-02-26 18:20:21 +01:00
if ( $exists ) {
2020-04-10 10:59:32 +02:00
$filetarget = $dolibarr_main_data_root . '/societe/' . $obj -> rowid . '/logos/' . $name . $ext ;
$filetargetsmall = $dolibarr_main_data_root . '/societe/' . $obj -> rowid . '/logos/thumbs/' . $name . '_small' . $ext ;
$existt = dol_is_file ( $filetarget );
2021-02-26 18:20:21 +01:00
if ( ! $existt ) {
if ( GETPOST ( 'restore_thirdparties_logos' , 'alpha' ) == 'confirmed' ) {
2014-09-24 00:51:36 +02:00
dol_mkdir ( $dolibarr_main_data_root . '/societe/' . $obj -> rowid . '/logos' );
2019-09-11 15:46:37 +02:00
}
2014-09-24 00:51:36 +02:00
2019-09-11 15:46:37 +02:00
print " -> Copy file " . $filetotest . " -> " . $filetarget . " <br> \n " ;
2021-02-26 18:20:21 +01:00
if ( GETPOST ( 'restore_thirdparties_logos' , 'alpha' ) == 'confirmed' ) {
2014-09-24 00:51:36 +02:00
dol_copy ( $filetotest , $filetarget , '' , 0 );
}
2019-09-11 15:46:37 +02:00
}
2014-09-24 00:51:36 +02:00
2020-04-10 10:59:32 +02:00
$existtt = dol_is_file ( $filetargetsmall );
2021-02-26 18:20:21 +01:00
if ( ! $existtt ) {
if ( GETPOST ( 'restore_thirdparties_logos' , 'alpha' ) == 'confirmed' ) {
2014-09-24 00:51:36 +02:00
dol_mkdir ( $dolibarr_main_data_root . '/societe/' . $obj -> rowid . '/logos/thumbs' );
2019-09-11 15:46:37 +02:00
}
print " -> Copy file " . $filetotestsmall . " -> " . $filetargetsmall . " <br> \n " ;
2021-02-26 18:20:21 +01:00
if ( GETPOST ( 'restore_thirdparties_logos' , 'alpha' ) == 'confirmed' ) {
2014-09-24 00:51:36 +02:00
dol_copy ( $filetotestsmall , $filetargetsmall , '' , 0 );
}
}
}
}
2019-09-11 15:46:37 +02:00
$i ++ ;
2014-09-24 00:51:36 +02:00
}
2020-05-21 15:05:19 +02:00
} else {
2020-04-10 10:59:32 +02:00
$ok = 0 ;
2019-09-11 15:46:37 +02:00
dol_print_error ( $db );
}
print '</td></tr>' ;
}
// restore_user_pictures: Move pictures to correct new directory.
2021-02-26 18:20:21 +01:00
if ( $ok && GETPOST ( 'restore_user_pictures' , 'alpha' )) {
2019-09-11 15:46:37 +02:00
//$exts=array('gif','png','jpg');
2020-04-10 10:59:32 +02:00
$ext = '' ;
2019-09-11 15:46:37 +02:00
print '<tr><td colspan="2"><br>*** Restore user pictures<br>' ;
2020-04-10 10:59:32 +02:00
$sql = " SELECT s.rowid, s.firstname, s.lastname, s.login, s.photo FROM " . MAIN_DB_PREFIX . " user as s ORDER BY s.rowid " ;
$resql = $db -> query ( $sql );
2021-02-26 18:20:21 +01:00
if ( $resql ) {
2020-04-10 10:59:32 +02:00
$num = $db -> num_rows ( $resql );
$i = 0 ;
2019-09-11 15:46:37 +02:00
2021-02-26 18:20:21 +01:00
while ( $i < $num ) {
2020-04-10 10:59:32 +02:00
$obj = $db -> fetch_object ( $resql );
2019-09-11 15:46:37 +02:00
/*
$name = preg_replace ( '/é/' , '' , $obj -> name );
$name = preg_replace ( '/ /' , '_' , $name );
$name = preg_replace ( '/\'/' , '' , $name );
*/
2024-09-05 15:51:15 +02:00
$tmp = explode ( '.' , ( string ) $obj -> photo );
2020-04-10 10:59:32 +02:00
$name = $tmp [ 0 ];
2021-02-26 18:20:21 +01:00
if ( isset ( $tmp [ 1 ])) {
$ext = '.' . $tmp [ 1 ];
}
2019-09-11 15:46:37 +02:00
2021-02-26 18:20:21 +01:00
if ( ! empty ( $name )) {
2020-04-10 10:59:32 +02:00
$filetotest = $dolibarr_main_data_root . '/users/' . substr ( sprintf ( '%08d' , $obj -> rowid ), - 1 , 1 ) . '/' . substr ( sprintf ( '%08d' , $obj -> rowid ), - 2 , 1 ) . '/' . $name . $ext ;
$filetotestsmall = $dolibarr_main_data_root . '/users/' . substr ( sprintf ( '%08d' , $obj -> rowid ), - 1 , 1 ) . '/' . substr ( sprintf ( '%08d' , $obj -> rowid ), - 2 , 1 ) . '/thumbs/' . $name . '_small' . $ext ;
$filetotestmini = $dolibarr_main_data_root . '/users/' . substr ( sprintf ( '%08d' , $obj -> rowid ), - 1 , 1 ) . '/' . substr ( sprintf ( '%08d' , $obj -> rowid ), - 2 , 1 ) . '/thumbs/' . $name . '_mini' . $ext ;
2024-03-16 21:43:26 +01:00
$exists = ( int ) dol_is_file ( $filetotest );
2021-10-18 12:09:33 +02:00
print 'Check user ' . $obj -> rowid . ' lastname=' . $obj -> lastname . ' firstname=' . $obj -> firstname . ' photo=' . $obj -> photo . ' file ' . $filetotest . " exists= " . $exists . " <br> \n " ;
2021-02-26 18:20:21 +01:00
if ( $exists ) {
2020-04-10 10:59:32 +02:00
$filetarget = $dolibarr_main_data_root . '/users/' . $obj -> rowid . '/' . $name . $ext ;
$filetargetsmall = $dolibarr_main_data_root . '/users/' . $obj -> rowid . '/thumbs/' . $name . '_small' . $ext ;
$filetargetmini = $dolibarr_main_data_root . '/users/' . $obj -> rowid . '/thumbs/' . $name . '_mini' . $ext ;
2019-09-11 15:46:37 +02:00
2020-04-10 10:59:32 +02:00
$existt = dol_is_file ( $filetarget );
2021-02-26 18:20:21 +01:00
if ( ! $existt ) {
if ( GETPOST ( 'restore_user_pictures' , 'alpha' ) == 'confirmed' ) {
2019-09-11 15:46:37 +02:00
dol_mkdir ( $dolibarr_main_data_root . '/users/' . $obj -> rowid );
}
print " -> Copy file " . $filetotest . " -> " . $filetarget . " <br> \n " ;
2021-02-26 18:20:21 +01:00
if ( GETPOST ( 'restore_user_pictures' , 'alpha' ) == 'confirmed' ) {
2019-09-11 15:46:37 +02:00
dol_copy ( $filetotest , $filetarget , '' , 0 );
}
}
2020-04-10 10:59:32 +02:00
$existtt = dol_is_file ( $filetargetsmall );
2021-02-26 18:20:21 +01:00
if ( ! $existtt ) {
if ( GETPOST ( 'restore_user_pictures' , 'alpha' ) == 'confirmed' ) {
2019-09-11 15:46:37 +02:00
dol_mkdir ( $dolibarr_main_data_root . '/users/' . $obj -> rowid . '/thumbs' );
}
print " -> Copy file " . $filetotestsmall . " -> " . $filetargetsmall . " <br> \n " ;
2021-02-26 18:20:21 +01:00
if ( GETPOST ( 'restore_user_pictures' , 'alpha' ) == 'confirmed' ) {
2019-09-11 15:46:37 +02:00
dol_copy ( $filetotestsmall , $filetargetsmall , '' , 0 );
}
}
2020-04-10 10:59:32 +02:00
$existtt = dol_is_file ( $filetargetmini );
2021-02-26 18:20:21 +01:00
if ( ! $existtt ) {
if ( GETPOST ( 'restore_user_pictures' , 'alpha' ) == 'confirmed' ) {
2019-09-11 15:46:37 +02:00
dol_mkdir ( $dolibarr_main_data_root . '/users/' . $obj -> rowid . '/thumbs' );
}
print " -> Copy file " . $filetotestmini . " -> " . $filetargetmini . " <br> \n " ;
2021-02-26 18:20:21 +01:00
if ( GETPOST ( 'restore_user_pictures' , 'alpha' ) == 'confirmed' ) {
2019-09-11 15:46:37 +02:00
dol_copy ( $filetotestmini , $filetargetmini , '' , 0 );
}
}
}
}
$i ++ ;
2014-09-24 00:51:36 +02:00
}
2020-05-21 15:05:19 +02:00
} else {
2020-04-10 10:59:32 +02:00
$ok = 0 ;
2019-09-11 15:46:37 +02:00
dol_print_error ( $db );
}
2016-07-08 18:59:36 +02:00
print '</td></tr>' ;
2014-09-24 00:51:36 +02:00
}
2012-07-08 13:30:21 +02:00
2017-06-09 00:27:44 +02:00
// rebuild_product_thumbs: Rebuild thumbs for product files
2021-02-26 18:20:21 +01:00
if ( $ok && GETPOST ( 'rebuild_product_thumbs' , 'alpha' )) {
2020-09-07 10:18:17 +02:00
$ext = '' ;
global $maxwidthsmall , $maxheightsmall , $maxwidthmini , $maxheightmini ;
print '<tr><td colspan="2"><br>*** Rebuild product thumbs<br>' ;
$sql = " SELECT s.rowid, s.ref FROM " . MAIN_DB_PREFIX . " product as s ORDER BY s.ref " ;
$resql = $db -> query ( $sql );
2021-02-26 18:20:21 +01:00
if ( $resql ) {
2020-09-07 10:18:17 +02:00
$num = $db -> num_rows ( $resql );
$i = 0 ;
2021-02-26 18:20:21 +01:00
while ( $i < $num ) {
2020-09-07 10:18:17 +02:00
$obj = $db -> fetch_object ( $resql );
2021-02-26 18:20:21 +01:00
if ( ! empty ( $obj -> ref )) {
2020-09-07 10:18:17 +02:00
$files = dol_dir_list ( $dolibarr_main_data_root . '/produit/' . $obj -> ref , 'files' , 0 );
2021-02-26 18:20:21 +01:00
foreach ( $files as $file ) {
2017-06-09 00:27:44 +02:00
// Generate thumbs.
2021-02-26 18:20:21 +01:00
if ( image_format_supported ( $file [ 'fullname' ]) == 1 ) {
2020-09-07 10:18:17 +02:00
$imgThumbSmall = 'notbuild' ;
2021-02-26 18:20:21 +01:00
if ( GETPOST ( 'rebuild_product_thumbs' , 'alpha' ) == 'confirmed' ) {
2020-09-07 10:18:17 +02:00
// Used on logon for example
$imgThumbSmall = vignette ( $file [ 'fullname' ], $maxwidthsmall , $maxheightsmall , '_small' , 50 , " thumbs " );
}
print 'Check product ' . $obj -> rowid . " , file " . $file [ 'fullname' ] . " -> " . $imgThumbSmall . " maxwidthsmall= " . $maxwidthsmall . " maxheightsmall= " . $maxheightsmall . " <br> \n " ;
$imgThumbMini = 'notbuild' ;
2021-02-26 18:20:21 +01:00
if ( GETPOST ( 'rebuild_product_thumbs' , 'alpha' ) == 'confirmed' ) {
2020-09-07 10:18:17 +02:00
// Create mini thumbs for image (Ratio is near 16/9)
// Used on menu or for setup page for example
$imgThumbMini = vignette ( $file [ 'fullname' ], $maxwidthmini , $maxheightmini , '_mini' , 50 , " thumbs " );
}
print 'Check product ' . $obj -> rowid . " , file " . $file [ 'fullname' ] . " -> " . $imgThumbMini . " maxwidthmini= " . $maxwidthmini . " maxheightmini= " . $maxheightmini . " <br> \n " ;
2017-06-09 00:27:44 +02:00
}
2020-09-07 10:18:17 +02:00
}
}
2017-06-09 00:27:44 +02:00
2020-09-07 10:18:17 +02:00
$i ++ ;
}
} else {
$ok = 0 ;
dol_print_error ( $db );
}
2017-06-09 00:27:44 +02:00
2020-09-07 10:18:17 +02:00
print '</td></tr>' ;
2017-06-09 00:27:44 +02:00
}
2014-09-24 00:51:36 +02:00
// clean_linked_elements: Check and clean linked elements
2021-02-26 18:20:21 +01:00
if ( $ok && GETPOST ( 'clean_linked_elements' , 'alpha' )) {
2020-09-07 10:18:17 +02:00
print '<tr><td colspan="2"><br>*** Check table of linked elements and delete orphelins links</td></tr>' ;
2012-06-29 09:30:24 +02:00
// propal => order
2016-07-08 18:59:36 +02:00
print '<tr><td colspan="2">' . checkLinkedElements ( 'propal' , 'commande' ) . " </td></tr> \n " ;
2012-06-29 09:30:24 +02:00
// propal => invoice
2016-07-08 18:59:36 +02:00
print '<tr><td colspan="2">' . checkLinkedElements ( 'propal' , 'facture' ) . " </td></tr> \n " ;
2012-06-29 09:30:24 +02:00
// order => invoice
2016-07-08 18:59:36 +02:00
print '<tr><td colspan="2">' . checkLinkedElements ( 'commande' , 'facture' ) . " </td></tr> \n " ;
2012-06-29 09:30:24 +02:00
// order => shipping
2016-07-08 18:59:36 +02:00
print '<tr><td colspan="2">' . checkLinkedElements ( 'commande' , 'shipping' ) . " </td></tr> \n " ;
2012-06-29 09:30:24 +02:00
// shipping => delivery
2016-07-08 18:59:36 +02:00
print '<tr><td colspan="2">' . checkLinkedElements ( 'shipping' , 'delivery' ) . " </td></tr> \n " ;
2012-06-29 09:30:24 +02:00
// order_supplier => invoice_supplier
2016-07-08 18:59:36 +02:00
print '<tr><td colspan="2">' . checkLinkedElements ( 'order_supplier' , 'invoice_supplier' ) . " </td></tr> \n " ;
2012-06-29 09:30:24 +02:00
}
2017-11-23 13:23:16 +01:00
// clean_menus: Check orphelins menus
2021-02-26 18:20:21 +01:00
if ( $ok && GETPOST ( 'clean_menus' , 'alpha' )) {
2017-11-23 13:23:16 +01:00
print '<tr><td colspan="2"><br>*** Clean menu entries coming from disabled modules</td></tr>' ;
2020-04-10 10:59:32 +02:00
$sql = " SELECT rowid, module " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " menu as c " ;
$sql .= " WHERE module IS NOT NULL AND module <> '' " ;
$sql .= " ORDER BY module " ;
2017-11-23 13:23:16 +01:00
$resql = $db -> query ( $sql );
2021-02-26 18:20:21 +01:00
if ( $resql ) {
2017-11-23 13:23:16 +01:00
$num = $db -> num_rows ( $resql );
2021-02-26 18:20:21 +01:00
if ( $num ) {
2017-11-23 13:23:16 +01:00
$i = 0 ;
2021-02-26 18:20:21 +01:00
while ( $i < $num ) {
2020-04-10 10:59:32 +02:00
$obj = $db -> fetch_object ( $resql );
2017-11-23 13:23:16 +01:00
2020-04-10 10:59:32 +02:00
$modulecond = $obj -> module ;
$modulecondarray = explode ( '|' , $obj -> module ); // Name of module
2017-11-23 13:23:16 +01:00
print '<tr><td>' ;
print $modulecond ;
$db -> begin ();
2021-02-26 18:20:21 +01:00
if ( $modulecond ) { // And menu entry for module $modulecond was found in database.
2020-04-10 10:59:32 +02:00
$moduleok = 0 ;
2021-02-26 18:20:21 +01:00
foreach ( $modulecondarray as $tmpname ) {
if ( $tmpname == 'margins' ) {
$tmpname = 'margin' ; // TODO Remove this when normalized
}
2017-11-23 13:23:16 +01:00
$result = 0 ;
2021-02-26 18:20:21 +01:00
if ( ! empty ( $conf -> $tmpname )) {
$result = $conf -> $tmpname -> enabled ;
}
if ( $result ) {
$moduleok ++ ;
}
2017-11-23 13:23:16 +01:00
}
2021-02-26 18:20:21 +01:00
if ( ! $moduleok && $modulecond ) {
2017-11-23 13:23:16 +01:00
print ' - Module condition ' . $modulecond . ' seems ko, we delete menu entry.' ;
2021-02-26 18:20:21 +01:00
if ( GETPOST ( 'clean_menus' ) == 'confirmed' ) {
2020-09-19 22:59:04 +02:00
$sql2 = " DELETE FROM " . MAIN_DB_PREFIX . " menu WHERE module = ' " . $db -> escape ( $modulecond ) . " ' " ;
2020-04-10 10:59:32 +02:00
$resql2 = $db -> query ( $sql2 );
2021-02-26 18:20:21 +01:00
if ( ! $resql2 ) {
2017-11-23 13:23:16 +01:00
$error ++ ;
dol_print_error ( $db );
2021-02-26 18:20:21 +01:00
} else {
print ' - <span class="warning">Cleaned</span>' ;
}
2020-05-21 15:05:19 +02:00
} else {
2018-07-07 23:50:41 +02:00
print ' - <span class="warning">Canceled (test mode)</span>' ;
2017-11-23 13:23:16 +01:00
}
2020-05-21 15:05:19 +02:00
} else {
2017-11-23 13:23:16 +01:00
print ' - Module condition ' . $modulecond . ' is ok, we do nothing.' ;
}
}
2021-02-26 18:20:21 +01:00
if ( ! $error ) {
$db -> commit ();
} else {
$db -> rollback ();
}
2017-11-23 13:23:16 +01:00
print '</td></tr>' ;
2021-02-26 18:20:21 +01:00
if ( $error ) {
break ;
}
2017-11-23 13:23:16 +01:00
$i ++ ;
}
2020-05-21 15:05:19 +02:00
} else {
2017-11-23 13:23:16 +01:00
print '<tr><td>No menu entries of disabled menus found</td></tr>' ;
}
2020-05-21 15:05:19 +02:00
} else {
2017-11-23 13:23:16 +01:00
dol_print_error ( $db );
}
}
2014-09-24 00:51:36 +02:00
// clean_orphelin_dir: Run purge of directory
2021-02-26 18:20:21 +01:00
if ( $ok && GETPOST ( 'clean_orphelin_dir' , 'alpha' )) {
2020-09-07 10:18:17 +02:00
$listmodulepart = array ( 'company' , 'invoice' , 'invoice_supplier' , 'propal' , 'order' , 'order_supplier' , 'contract' , 'tax' );
2021-02-26 18:20:21 +01:00
foreach ( $listmodulepart as $modulepart ) {
2020-09-07 10:18:17 +02:00
$filearray = array ();
$upload_dir = isset ( $conf -> $modulepart -> dir_output ) ? $conf -> $modulepart -> dir_output : '' ;
2021-02-26 18:20:21 +01:00
if ( $modulepart == 'company' ) {
$upload_dir = $conf -> societe -> dir_output ; // TODO change for multicompany sharing
}
if ( $modulepart == 'invoice' ) {
$upload_dir = $conf -> facture -> dir_output ;
}
if ( $modulepart == 'invoice_supplier' ) {
$upload_dir = $conf -> fournisseur -> facture -> dir_output ;
}
if ( $modulepart == 'order' ) {
$upload_dir = $conf -> commande -> dir_output ;
}
if ( $modulepart == 'order_supplier' ) {
$upload_dir = $conf -> fournisseur -> commande -> dir_output ;
}
if ( $modulepart == 'contract' ) {
$upload_dir = $conf -> contrat -> dir_output ;
}
2020-09-07 10:18:17 +02:00
2021-02-26 18:20:21 +01:00
if ( empty ( $upload_dir )) {
continue ;
}
2020-09-07 10:18:17 +02:00
print '<tr><td colspan="2"><br>*** Clean orphelins files into files ' . $upload_dir . '</td></tr>' ;
2024-07-08 21:45:35 +02:00
$filearray = dol_dir_list ( $upload_dir , " files " , 1 , '' , array ( '^SPECIMEN\.pdf$' , '^\.' , '(\.meta|_preview.*\.png)$' , '^temp$' , '^payments$' , '^CVS$' , '^thumbs$' ), '' , SORT_DESC , 1 , 1 );
2020-09-07 10:18:17 +02:00
2025-02-03 14:28:54 +01:00
$object_instance = null ;
2020-09-07 10:18:17 +02:00
// To show ref or specific information according to view to show (defined by $module)
2021-02-26 18:20:21 +01:00
if ( $modulepart == 'company' ) {
2020-09-07 10:18:17 +02:00
include_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php' ;
$object_instance = new Societe ( $db );
}
2021-02-26 18:20:21 +01:00
if ( $modulepart == 'invoice' ) {
2020-09-07 10:18:17 +02:00
include_once DOL_DOCUMENT_ROOT . '/compta/facture/class/facture.class.php' ;
$object_instance = new Facture ( $db );
2021-02-26 18:20:21 +01:00
} elseif ( $modulepart == 'invoice_supplier' ) {
2020-09-07 10:18:17 +02:00
include_once DOL_DOCUMENT_ROOT . '/fourn/class/fournisseur.facture.class.php' ;
$object_instance = new FactureFournisseur ( $db );
2021-02-26 18:20:21 +01:00
} elseif ( $modulepart == 'propal' ) {
2020-09-07 10:18:17 +02:00
include_once DOL_DOCUMENT_ROOT . '/comm/propal/class/propal.class.php' ;
$object_instance = new Propal ( $db );
2021-02-26 18:20:21 +01:00
} elseif ( $modulepart == 'order' ) {
2020-09-07 10:18:17 +02:00
include_once DOL_DOCUMENT_ROOT . '/commande/class/commande.class.php' ;
$object_instance = new Commande ( $db );
2021-02-26 18:20:21 +01:00
} elseif ( $modulepart == 'order_supplier' ) {
2020-09-07 10:18:17 +02:00
include_once DOL_DOCUMENT_ROOT . '/fourn/class/fournisseur.commande.class.php' ;
$object_instance = new CommandeFournisseur ( $db );
2021-02-26 18:20:21 +01:00
} elseif ( $modulepart == 'contract' ) {
2020-09-07 10:18:17 +02:00
include_once DOL_DOCUMENT_ROOT . '/contrat/class/contrat.class.php' ;
$object_instance = new Contrat ( $db );
2021-02-26 18:20:21 +01:00
} elseif ( $modulepart == 'tax' ) {
2020-09-07 10:18:17 +02:00
include_once DOL_DOCUMENT_ROOT . '/compta/sociales/class/chargesociales.class.php' ;
$object_instance = new ChargeSociales ( $db );
}
2021-02-26 18:20:21 +01:00
foreach ( $filearray as $key => $file ) {
2020-09-07 10:18:17 +02:00
if ( ! is_dir ( $file [ 'name' ])
&& $file [ 'name' ] != '.'
&& $file [ 'name' ] != '..'
&& $file [ 'name' ] != 'CVS'
2021-02-26 18:20:21 +01:00
) {
2020-09-07 10:18:17 +02:00
// Define relative path used to store the file
$relativefile = preg_replace ( '/' . preg_quote ( $upload_dir . '/' , '/' ) . '/' , '' , $file [ 'fullname' ]);
//var_dump($file);
2023-12-04 12:36:19 +01:00
$id = 0 ;
$ref = '' ;
$object_instance -> id = 0 ;
$object_instance -> ref = '' ;
$label = '' ;
2020-09-07 10:18:17 +02:00
// To show ref or specific information according to view to show (defined by $module)
if ( $modulepart == 'invoice' ) {
2023-12-04 12:36:19 +01:00
preg_match ( '/(.*)\/[^\/]+$/' , $relativefile , $reg );
$ref = $reg [ 1 ];
2020-09-07 10:18:17 +02:00
}
if ( $modulepart == 'invoice_supplier' ) {
2023-12-04 12:36:19 +01:00
preg_match ( '/(\d+)\/[^\/]+$/' , $relativefile , $reg );
$id = empty ( $reg [ 1 ]) ? '' : $reg [ 1 ];
2020-09-07 10:18:17 +02:00
}
if ( $modulepart == 'propal' ) {
2023-12-04 12:36:19 +01:00
preg_match ( '/(.*)\/[^\/]+$/' , $relativefile , $reg );
$ref = $reg [ 1 ];
2020-09-07 10:18:17 +02:00
}
if ( $modulepart == 'order' ) {
2023-12-04 12:36:19 +01:00
preg_match ( '/(.*)\/[^\/]+$/' , $relativefile , $reg );
$ref = $reg [ 1 ];
2020-09-07 10:18:17 +02:00
}
if ( $modulepart == 'order_supplier' ) {
2023-12-04 12:36:19 +01:00
preg_match ( '/(.*)\/[^\/]+$/' , $relativefile , $reg );
$ref = $reg [ 1 ];
2020-09-07 10:18:17 +02:00
}
if ( $modulepart == 'contract' ) {
2023-12-04 12:36:19 +01:00
preg_match ( '/(.*)\/[^\/]+$/' , $relativefile , $reg );
$ref = $reg [ 1 ];
2020-09-07 10:18:17 +02:00
}
if ( $modulepart == 'tax' ) {
2023-12-04 12:36:19 +01:00
preg_match ( '/(\d+)\/[^\/]+$/' , $relativefile , $reg );
$id = $reg [ 1 ];
2020-09-07 10:18:17 +02:00
}
2024-10-13 16:45:42 +02:00
if (( $id || $ref ) && $object_instance !== null ) {
2020-09-07 10:18:17 +02:00
//print 'Fetch '.$id.' or '.$ref.'<br>';
$result = $object_instance -> fetch ( $id , $ref );
//print $result.'<br>';
2021-02-26 18:20:21 +01:00
if ( $result == 0 ) { // Not found but no error
2020-09-07 10:18:17 +02:00
// Clean of orphelins directories are done into repair.php
print '<tr><td colspan="2">' ;
print 'Delete orphelins file ' . $file [ 'fullname' ] . '<br>' ;
2021-02-26 18:20:21 +01:00
if ( GETPOST ( 'clean_orphelin_dir' , 'alpha' ) == 'confirmed' ) {
2020-09-07 10:18:17 +02:00
dol_delete_file ( $file [ 'fullname' ], 1 , 1 , 1 );
dol_delete_dir ( dirname ( $file [ 'fullname' ]), 1 );
}
print " </td></tr> " ;
2021-02-26 18:20:21 +01:00
} elseif ( $result < 0 ) {
print 'Error in ' . get_class ( $object_instance ) . '.fetch of id' . $id . ' ref=' . $ref . ', result=' . $result . '<br>' ;
}
2020-09-07 10:18:17 +02:00
}
}
}
}
2012-02-08 16:41:06 +01:00
}
2025-02-03 14:28:54 +01:00
$methodtofix = '' ;
2016-07-08 23:02:25 +02:00
// clean_linked_elements: Check and clean linked elements
2021-02-26 18:20:21 +01:00
if ( $ok && GETPOST ( 'clean_product_stock_batch' , 'alpha' )) {
2023-12-04 12:36:19 +01:00
$methodtofix = GETPOST ( 'methodtofix' , 'alpha' ) ? GETPOST ( 'methodtofix' , 'alpha' ) : 'updatestock' ;
2020-09-07 10:18:17 +02:00
print '<tr><td colspan="2"><br>*** Clean table product_batch, methodtofix=' . $methodtofix . ' (possible values: updatestock or updatebatch)</td></tr>' ;
$sql = " SELECT p.rowid, p.ref, p.tobatch, ps.rowid as psrowid, ps.fk_entrepot, ps.reel, SUM(pb.qty) as reelbatch " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " product as p, " . MAIN_DB_PREFIX . " product_stock as ps LEFT JOIN " . MAIN_DB_PREFIX . " product_batch as pb ON ps.rowid = pb.fk_product_stock " ;
$sql .= " WHERE p.rowid = ps.fk_product " ;
$sql .= " GROUP BY p.rowid, p.ref, p.tobatch, ps.rowid, ps.fk_entrepot, ps.reel " ;
2023-02-15 20:14:48 +01:00
$sql .= " HAVING (SUM(pb.qty) IS NOT NULL AND reel != SUM(pb.qty)) OR (SUM(pb.qty) IS NULL AND p.tobatch > 0) " ;
2020-09-07 10:18:17 +02:00
print $sql ;
$resql = $db -> query ( $sql );
2021-02-26 18:20:21 +01:00
if ( $resql ) {
2020-09-07 10:18:17 +02:00
$num = $db -> num_rows ( $resql );
2021-02-26 18:20:21 +01:00
if ( $num ) {
2020-09-07 10:18:17 +02:00
$i = 0 ;
2021-02-26 18:20:21 +01:00
while ( $i < $num ) {
2020-09-07 10:18:17 +02:00
$obj = $db -> fetch_object ( $resql );
2023-02-15 20:47:45 +01:00
print '<tr><td>Product ' . $obj -> rowid . '-' . $obj -> ref . ' in warehouse id=' . $obj -> fk_entrepot . ' (product_stock.id=' . $obj -> psrowid . '): ' . $obj -> reel . ' (Stock product_stock.reel) != ' . ( $obj -> reelbatch ? $obj -> reelbatch : '0' ) . ' (Stock batch sum product_batch)' ;
2020-09-07 10:18:17 +02:00
2023-02-15 20:14:48 +01:00
// Fix is required
2021-02-26 18:20:21 +01:00
if ( $obj -> reel != $obj -> reelbatch ) {
2023-02-15 20:14:48 +01:00
if ( empty ( $obj -> tobatch )) {
// If product is not a product that support batches, we can clean stock by deleting the product batch lines
print ' -> Delete qty ' . $obj -> reelbatch . ' for any lot linked to fk_product_stock=' . $obj -> psrowid ;
$sql2 = " DELETE FROM " . MAIN_DB_PREFIX . " product_batch " ;
2023-02-15 20:38:38 +01:00
$sql2 .= " WHERE fk_product_stock = " . (( int ) $obj -> psrowid );
2023-02-15 20:14:48 +01:00
print '<br>' . $sql2 ;
2021-02-26 18:20:21 +01:00
if ( GETPOST ( 'clean_product_stock_batch' ) == 'confirmed' ) {
2020-09-07 10:18:17 +02:00
$resql2 = $db -> query ( $sql2 );
2021-02-26 18:20:21 +01:00
if ( ! $resql2 ) {
2023-02-15 20:14:48 +01:00
$error ++ ;
dol_print_error ( $db );
2020-09-07 10:18:17 +02:00
}
}
2023-02-15 20:14:48 +01:00
} else {
if ( $methodtofix == 'updatebatch' ) {
// Method 1
print ' -> Insert qty ' . ( $obj -> reel - $obj -> reelbatch ) . ' with lot 000000 linked to fk_product_stock=' . $obj -> psrowid ;
$sql2 = " INSERT INTO " . MAIN_DB_PREFIX . " product_batch(fk_product_stock, batch, qty) " ;
2023-02-15 20:38:38 +01:00
$sql2 .= " VALUES( " . (( int ) $obj -> psrowid ) . " , '000000', " . (( float ) ( $obj -> reel - $obj -> reelbatch )) . " ) " ;
2023-02-15 20:14:48 +01:00
print '<br>' . $sql2 ;
if ( GETPOST ( 'clean_product_stock_batch' ) == 'confirmed' ) {
$resql2 = $db -> query ( $sql2 );
if ( ! $resql2 ) {
// TODO If it fails, we must make update
//$sql2 ="UPDATE ".MAIN_DB_PREFIX."product_batch";
//$sql2.=" SET ".$obj->psrowid.", '000000', ".($obj->reel - $obj->reelbatch).")";
//$sql2.=" WHERE fk_product_stock = ".((int) $obj->psrowid)
}
}
}
if ( $methodtofix == 'updatestock' ) {
// Method 2
print ' -> Update qty of product_stock with qty = ' . ( $obj -> reelbatch ? (( float ) $obj -> reelbatch ) : '0' ) . ' for ps.rowid = ' . (( int ) $obj -> psrowid );
2020-09-07 10:18:17 +02:00
$sql2 = " UPDATE " . MAIN_DB_PREFIX . " product_stock " ;
2021-03-30 03:37:54 +02:00
$sql2 .= " SET reel = " . ( $obj -> reelbatch ? (( float ) $obj -> reelbatch ) : '0' ) . " WHERE rowid = " . (( int ) $obj -> psrowid );
2023-02-15 20:14:48 +01:00
print '<br>' . $sql2 ;
if ( GETPOST ( 'clean_product_stock_batch' ) == 'confirmed' ) {
$error = 0 ;
$db -> begin ();
$resql2 = $db -> query ( $sql2 );
if ( $resql2 ) {
// We update product_stock, so we must fill p.stock into product too.
$sql3 = 'UPDATE ' . MAIN_DB_PREFIX . 'product p SET p.stock= (SELECT SUM(ps.reel) FROM ' . MAIN_DB_PREFIX . 'product_stock ps WHERE ps.fk_product = p.rowid)' ;
$resql3 = $db -> query ( $sql3 );
if ( ! $resql3 ) {
$error ++ ;
dol_print_error ( $db );
}
} else {
2020-09-07 10:18:17 +02:00
$error ++ ;
dol_print_error ( $db );
}
2023-02-15 20:14:48 +01:00
if ( ! $error ) {
$db -> commit ();
} else {
$db -> rollback ();
}
2021-02-26 18:20:21 +01:00
}
2020-09-07 10:18:17 +02:00
}
}
}
print '</td></tr>' ;
$i ++ ;
}
} else {
print '<tr><td colspan="2">Nothing to do</td></tr>' ;
}
} else {
dol_print_error ( $db );
}
2016-07-08 23:02:25 +02:00
}
2018-10-09 21:21:10 +02:00
// clean_product_stock_negative_if_batch
2021-02-26 18:20:21 +01:00
if ( $ok && GETPOST ( 'clean_product_stock_negative_if_batch' , 'alpha' )) {
2020-09-07 10:18:17 +02:00
print '<tr><td colspan="2"><br>Clean table product_batch, methodtofix=' . $methodtofix . ' (possible values: updatestock or updatebatch)</td></tr>' ;
$sql = " SELECT p.rowid, p.ref, p.tobatch, ps.rowid as psrowid, ps.fk_entrepot, ps.reel, SUM(pb.qty) as reelbatch " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " product as p, " . MAIN_DB_PREFIX . " product_stock as ps, " . MAIN_DB_PREFIX . " product_batch as pb " ;
$sql .= " WHERE p.rowid = ps.fk_product AND ps.rowid = pb.fk_product_stock " ;
2021-03-04 15:33:06 +01:00
$sql .= " AND p.tobatch > 0 " ;
2020-09-07 10:18:17 +02:00
$sql .= " GROUP BY p.rowid, p.ref, p.tobatch, ps.rowid, ps.fk_entrepot, ps.reel " ;
$sql .= " HAVING reel != SUM(pb.qty) " ;
$resql = $db -> query ( $sql );
2021-02-26 18:20:21 +01:00
if ( $resql ) {
2020-09-07 10:18:17 +02:00
$num = $db -> num_rows ( $resql );
2021-02-26 18:20:21 +01:00
if ( $num ) {
2020-09-07 10:18:17 +02:00
$i = 0 ;
2021-02-26 18:20:21 +01:00
while ( $i < $num ) {
2020-09-07 10:18:17 +02:00
$obj = $db -> fetch_object ( $resql );
print '<tr><td>' . $obj -> rowid . '-' . $obj -> ref . '-' . $obj -> fk_entrepot . ' -> ' . $obj -> psrowid . ': ' . $obj -> reel . ' != ' . $obj -> reelbatch ;
// TODO
}
}
}
2017-04-15 16:17:22 +02:00
}
2016-07-08 23:02:25 +02:00
2018-10-09 21:21:10 +02:00
// set_empty_time_spent_amount
2021-02-26 18:20:21 +01:00
if ( $ok && GETPOST ( 'set_empty_time_spent_amount' , 'alpha' )) {
2020-09-07 10:18:17 +02:00
print '<tr><td colspan="2"><br>*** Set value of time spent without amount</td></tr>' ;
$sql = " SELECT COUNT(ptt.rowid) as nb, u.rowid as user_id, u.login, u.thm as user_thm " ;
2023-03-08 11:00:58 +01:00
$sql .= " FROM " . MAIN_DB_PREFIX . " element_time as ptt, " . MAIN_DB_PREFIX . " user as u " ;
2020-09-07 10:18:17 +02:00
$sql .= " WHERE ptt.fk_user = u.rowid " ;
$sql .= " AND ptt.thm IS NULL and u.thm > 0 " ;
$sql .= " GROUP BY u.rowid, u.login, u.thm " ;
$resql = $db -> query ( $sql );
2021-02-26 18:20:21 +01:00
if ( $resql ) {
2020-09-07 10:18:17 +02:00
$num = $db -> num_rows ( $resql );
2021-02-26 18:20:21 +01:00
if ( $num ) {
2020-09-07 10:18:17 +02:00
$i = 0 ;
2021-02-26 18:20:21 +01:00
while ( $i < $num ) {
2020-09-07 10:18:17 +02:00
$obj = $db -> fetch_object ( $resql );
print '<tr><td>' . $obj -> login . '-' . $obj -> user_id . ' (' . $obj -> nb . ' lines to fix) -> ' . $obj -> user_thm ;
$db -> begin ();
2021-02-26 18:20:21 +01:00
if ( GETPOST ( 'set_empty_time_spent_amount' ) == 'confirmed' ) {
2023-03-08 11:00:58 +01:00
$sql2 = " UPDATE " . MAIN_DB_PREFIX . " element_time " ;
2021-03-30 03:37:54 +02:00
$sql2 .= " SET thm = " . $obj -> user_thm . " WHERE thm IS NULL AND fk_user = " . (( int ) $obj -> user_id );
2020-09-07 10:18:17 +02:00
$resql2 = $db -> query ( $sql2 );
2021-02-26 18:20:21 +01:00
if ( ! $resql2 ) {
2020-09-07 10:18:17 +02:00
$error ++ ;
dol_print_error ( $db );
}
}
2021-02-26 18:20:21 +01:00
if ( ! $error ) {
$db -> commit ();
} else {
$db -> rollback ();
}
2020-09-07 10:18:17 +02:00
print '</td></tr>' ;
2021-02-26 18:20:21 +01:00
if ( $error ) {
break ;
}
2020-09-07 10:18:17 +02:00
$i ++ ;
}
} else {
print '<tr><td>No time spent with empty line on users with a hourly rate defined</td></tr>' ;
}
} else {
dol_print_error ( $db );
}
2017-04-05 15:24:41 +02:00
}
2018-10-09 21:21:10 +02:00
// force_disable_of_modules_not_found
2021-02-26 18:20:21 +01:00
if ( $ok && GETPOST ( 'force_disable_of_modules_not_found' , 'alpha' )) {
2024-01-13 19:48:41 +01:00
print '<tr><td colspan="2"><br>*** Force modules not found physically to be disabled (only modules adding js, css or hooks can be detected as removed physically)</td></tr>' ;
2020-09-07 10:18:17 +02:00
$arraylistofkey = array ( 'hooks' , 'js' , 'css' );
2021-02-26 18:20:21 +01:00
foreach ( $arraylistofkey as $key ) {
2020-09-07 10:18:17 +02:00
$sql = " SELECT DISTINCT name, value " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " const as c " ;
2025-01-20 03:54:04 +01:00
$sql .= " WHERE name LIKE 'MAIN_MODULE_%_ " . strtoupper ( $db -> escape ( $key )) . " ' " ;
2020-09-07 10:18:17 +02:00
$sql .= " ORDER BY name " ;
$resql = $db -> query ( $sql );
2021-02-26 18:20:21 +01:00
if ( $resql ) {
2020-09-07 10:18:17 +02:00
$num = $db -> num_rows ( $resql );
2021-02-26 18:20:21 +01:00
if ( $num ) {
2020-09-07 10:18:17 +02:00
$i = 0 ;
2021-02-26 18:20:21 +01:00
while ( $i < $num ) {
2020-09-07 10:18:17 +02:00
$obj = $db -> fetch_object ( $resql );
$constantname = $obj -> name ; // Name of constant for hook or js or css declaration
print '<tr><td>' ;
2022-01-15 21:10:33 +01:00
print dol_escape_htmltag ( $constantname );
2020-09-07 10:18:17 +02:00
$db -> begin ();
$reg = array ();
2021-02-26 18:20:21 +01:00
if ( preg_match ( '/MAIN_MODULE_(.*)_' . strtoupper ( $key ) . '/i' , $constantname , $reg )) {
2020-09-07 10:18:17 +02:00
$name = strtolower ( $reg [ 1 ]);
2021-02-26 18:20:21 +01:00
if ( $name ) { // An entry for key $key and module $name was found in database.
2020-09-07 10:18:17 +02:00
$reloffile = '' ;
2019-05-29 12:21:51 +02:00
$result = 'found' ;
2021-02-26 18:20:21 +01:00
if ( $key == 'hooks' ) {
$reloffile = $name . '/class/actions_' . $name . '.class.php' ;
}
if ( $key == 'js' ) {
2020-09-07 10:18:17 +02:00
$value = $obj -> value ;
2024-01-23 21:33:10 +01:00
$valuearray = ( array ) json_decode ( $value ); // Force cast into array because sometimes it is a stdClass
2020-09-07 10:18:17 +02:00
$reloffile = $valuearray [ 0 ];
$reloffile = preg_replace ( '/^\//' , '' , $valuearray [ 0 ]);
}
2021-02-26 18:20:21 +01:00
if ( $key == 'css' ) {
2020-09-07 10:18:17 +02:00
$value = $obj -> value ;
2024-01-23 21:33:10 +01:00
$valuearray = ( array ) json_decode ( $value ); // Force cast into array because sometimes it is a stdClass
2022-01-15 21:10:33 +01:00
if ( $value && ( ! is_array ( $valuearray ) || count ( $valuearray ) == 0 )) {
$valuearray = array ();
2021-02-26 18:20:21 +01:00
$valuearray [ 0 ] = $value ; // If value was not a json array but a string
}
2020-09-07 10:18:17 +02:00
$reloffile = preg_replace ( '/^\//' , '' , $valuearray [ 0 ]);
}
2021-02-26 18:20:21 +01:00
if ( $reloffile ) {
2020-09-07 10:18:17 +02:00
//var_dump($key.' - '.$value.' - '.$reloffile);
try {
$result = dol_buildpath ( $reloffile , 0 , 2 );
2021-02-26 18:20:21 +01:00
} catch ( Exception $e ) {
2022-01-15 21:10:33 +01:00
$result = 'found' ; // If error, we force like if we found to avoid any deletion
2020-09-07 10:18:17 +02:00
}
2022-01-15 21:10:33 +01:00
} else {
$result = 'found' ; //
2020-09-07 10:18:17 +02:00
}
2021-02-26 18:20:21 +01:00
if ( ! $result ) {
2020-09-07 10:18:17 +02:00
print ' - File of ' . $key . ' (' . $reloffile . ') NOT found, we disable the module.' ;
2021-02-26 18:20:21 +01:00
if ( GETPOST ( 'force_disable_of_modules_not_found' ) == 'confirmed' ) {
2020-09-07 10:18:17 +02:00
$sql2 = " DELETE FROM " . MAIN_DB_PREFIX . " const WHERE name = 'MAIN_MODULE_ " . strtoupper ( $name ) . " _ " . strtoupper ( $key ) . " ' " ;
$resql2 = $db -> query ( $sql2 );
2021-02-26 18:20:21 +01:00
if ( ! $resql2 ) {
2020-09-07 10:18:17 +02:00
$error ++ ;
dol_print_error ( $db );
}
$sql3 = " DELETE FROM " . MAIN_DB_PREFIX . " const WHERE name = 'MAIN_MODULE_ " . strtoupper ( $name ) . " ' " ;
$resql3 = $db -> query ( $sql3 );
2021-02-26 18:20:21 +01:00
if ( ! $resql3 ) {
2020-09-07 10:18:17 +02:00
$error ++ ;
dol_print_error ( $db );
2021-02-26 18:20:21 +01:00
} else {
print ' - <span class="warning">Cleaned</span>' ;
}
2020-09-07 10:18:17 +02:00
} else {
print ' - <span class="warning">Canceled (test mode)</span>' ;
}
} else {
print ' - File of ' . $key . ' (' . $reloffile . ') found, we do nothing.' ;
}
}
2021-02-26 18:20:21 +01:00
if ( ! $error ) {
$db -> commit ();
} else {
$db -> rollback ();
}
2020-09-07 10:18:17 +02:00
}
print '</td></tr>' ;
2021-02-26 18:20:21 +01:00
if ( $error ) {
break ;
}
2020-09-07 10:18:17 +02:00
$i ++ ;
}
} else {
print '<tr><td>No active module with missing files found by searching on MAIN_MODULE_(.*)_' . strtoupper ( $key ) . '</td></tr>' ;
}
} else {
dol_print_error ( $db );
}
}
2017-06-22 14:06:48 +02:00
}
2018-02-14 14:57:53 +01:00
// clean_old_module_entries: Clean data into const when files of module were removed without being
2021-02-26 18:20:21 +01:00
if ( $ok && GETPOST ( 'clean_perm_table' , 'alpha' )) {
2018-02-14 14:57:53 +01:00
print '<tr><td colspan="2"><br>*** Clean table user_rights from lines of external modules no more enabled</td></tr>' ;
2020-04-10 10:59:32 +02:00
$listofmods = '' ;
2021-02-26 18:20:21 +01:00
foreach ( $conf -> modules as $key => $val ) {
2021-12-09 10:00:42 +01:00
$listofmods .= ( $listofmods ? ',' : '' ) . " ' " . $db -> escape ( $val ) . " ' " ;
2018-02-14 14:57:53 +01:00
}
2021-12-09 18:03:27 +01:00
2021-12-09 18:01:44 +01:00
$sql = " SELECT id, libelle as label, module from " . MAIN_DB_PREFIX . " rights_def WHERE module NOT IN ( " . $db -> sanitize ( $listofmods , 1 ) . " ) AND id > 100000 " ;
2021-12-09 11:15:40 +01:00
2018-02-14 14:57:53 +01:00
$resql = $db -> query ( $sql );
2021-02-26 18:20:21 +01:00
if ( $resql ) {
2018-02-14 14:57:53 +01:00
$num = $db -> num_rows ( $resql );
2021-02-26 18:20:21 +01:00
if ( $num ) {
2018-02-14 14:57:53 +01:00
$i = 0 ;
2021-02-26 18:20:21 +01:00
while ( $i < $num ) {
2020-04-10 10:59:32 +02:00
$obj = $db -> fetch_object ( $resql );
2021-02-26 18:20:21 +01:00
if ( $obj -> id > 0 ) {
2019-11-02 12:59:38 +01:00
print '<tr><td>Found line with id ' . $obj -> id . ', label "' . $obj -> label . '" of module "' . $obj -> module . '" to delete' ;
2021-02-26 18:20:21 +01:00
if ( GETPOST ( 'clean_perm_table' , 'alpha' ) == 'confirmed' ) {
2021-09-30 15:59:47 +02:00
$sqldelete = " DELETE FROM " . MAIN_DB_PREFIX . " rights_def WHERE id = " . (( int ) $obj -> id );
2018-02-14 14:57:53 +01:00
$resqldelete = $db -> query ( $sqldelete );
2021-02-26 18:20:21 +01:00
if ( ! $resqldelete ) {
2018-02-14 14:57:53 +01:00
dol_print_error ( $db );
}
print ' - deleted' ;
}
print '</td></tr>' ;
}
$i ++ ;
}
2020-05-21 15:05:19 +02:00
} else {
2018-02-14 14:57:53 +01:00
print '<tr><td>No lines of a disabled external module (with id > 100000) found into table rights_def</td></tr>' ;
}
2020-05-21 15:05:19 +02:00
} else {
2018-02-14 14:57:53 +01:00
dol_print_error ( $db );
}
}
2016-07-08 23:02:25 +02:00
2025-01-23 21:02:49 +01:00
// clean_old_module_entries: Clean data into const when files of module were removed without being
if ( $ok && GETPOST ( 'clean_ecm_files_table' , 'alpha' )) {
print '<tr><td colspan="2"><br>*** Clean table ecm_files from lines of entries whose physical files does not exists anymore (emplemented for entity 1 only)</td></tr>' ;
$MAXTODELETE = 100 ;
$sql = " SELECT rowid, filename, filepath, entity from " . MAIN_DB_PREFIX . " ecm_files " ;
$sql .= " WHERE entity = 1 " ;
$sql .= " ORDER BY rowid ASC " ;
$nbfile = 0 ;
$nbfiletodelete = 0 ;
$resql = $db -> query ( $sql );
if ( $resql ) {
$num = $db -> num_rows ( $resql );
if ( $num ) {
$i = 0 ;
2025-01-23 21:06:21 +01:00
while ( $i < $num ) {
2025-01-23 21:02:49 +01:00
$obj = $db -> fetch_object ( $resql );
if ( $obj -> rowid > 0 ) {
$filetocheck = DOL_DATA_ROOT . '/' . $obj -> filepath . '/' . $obj -> filename ;
$nbfile ++ ;
2025-01-23 21:08:45 +01:00
if ( ! dol_is_file ( $filetocheck ) && ! dol_is_file ( $filetocheck . '.noexe' )) {
2025-01-23 21:02:49 +01:00
$nbfiletodelete ++ ;
2025-01-23 21:06:21 +01:00
if ( $nbfiletodelete <= $MAXTODELETE ) {
print '<tr><td>Found line with id ' . $obj -> rowid . ', entity ' . $obj -> entity . ', file "' . $filetocheck . '" to delete' ;
if ( GETPOST ( 'clean_ecm_files_table' , 'alpha' ) == 'confirmed' ) {
$sqldelete = " DELETE FROM " . MAIN_DB_PREFIX . " ecm_files WHERE rowid = " . (( int ) $obj -> rowid );
$resqldelete = $db -> query ( $sqldelete );
if ( ! $resqldelete ) {
dol_print_error ( $db );
}
print ' - deleted' ;
2025-01-23 21:02:49 +01:00
}
2025-01-23 21:06:21 +01:00
print '</td></tr>' ;
} else {
break ;
2025-01-23 21:02:49 +01:00
}
}
}
$i ++ ;
}
}
if ( $nbfiletodelete > $MAXTODELETE ) {
print '<tr><td>There is more than ' . $MAXTODELETE . ' invalid entries into ecm_files index table (among ' . $nbfile . ' analyzed) with no valid physical files. Run the page several time to process all of them.</td></tr>' ;
} else {
print '<tr><td>Nb of entries processed into ecm_files index table: ' . $nbfile . ', number of invalid record: ' . $nbfiletodelete . '</td></tr>' ;
}
} else {
dol_print_error ( $db );
}
}
2016-07-08 23:02:25 +02:00
2018-10-09 21:21:10 +02:00
// force utf8 on tables
2021-02-26 18:20:21 +01:00
if ( $ok && GETPOST ( 'force_utf8_on_tables' , 'alpha' )) {
2022-04-07 23:44:57 +02:00
print '<tr><td colspan="2"><br>*** Force page code and collation of tables into utf8/utf8_unicode_ci and row_format=dynamic (for mysql/mariadb only)</td></tr>' ;
2020-09-07 10:18:17 +02:00
2021-02-26 18:20:21 +01:00
if ( $db -> type == " mysql " || $db -> type == " mysqli " ) {
2020-09-07 10:18:17 +02:00
$force_utf8_on_tables = GETPOST ( 'force_utf8_on_tables' , 'alpha' );
2023-04-14 10:06:10 +02:00
$listoftables = $db -> DDLListTablesFull ( $db -> database_name );
2020-09-07 10:18:17 +02:00
// Disable foreign key checking for avoid errors
2021-02-26 18:20:21 +01:00
if ( $force_utf8_on_tables == 'confirmed' ) {
2020-09-07 10:18:17 +02:00
$sql = 'SET FOREIGN_KEY_CHECKS=0' ;
print '<!-- ' . $sql . ' -->' ;
2024-09-05 11:49:33 +02:00
print '<tr><td colspan="2">' . $sql . '</td></tr>' ;
2020-09-07 10:18:17 +02:00
$resql = $db -> query ( $sql );
}
2024-09-05 11:49:33 +02:00
$foreignkeystorestore = array ();
// First loop to delete foreign keys
2021-02-26 18:20:21 +01:00
foreach ( $listoftables as $table ) {
2020-09-07 10:18:17 +02:00
// do not convert llx_const if mysql encrypt/decrypt is used
2023-04-14 10:06:10 +02:00
if ( $conf -> db -> dolibarr_main_db_encryption != 0 && preg_match ( '/\_const$/' , $table [ 0 ])) {
continue ;
}
if ( $table [ 1 ] == 'VIEW' ) {
2024-09-05 11:49:33 +02:00
print '<tr><td colspan="2">' . $table [ 0 ] . ' is a ' . $table [ 1 ] . ' <span class="opacitymedium">(Skipped)</span></td></tr>' ;
continue ;
}
// Special case of tables with foreign key on varchar fields
$arrayofforeignkey = array (
'llx_accounting_account' => 'fk_accounting_account_fk_pcg_version' ,
'llx_accounting_system' => 'fk_accounting_account_fk_pcg_version' ,
'llx_c_type_contact' => 'fk_societe_commerciaux_fk_c_type_contact_code' ,
'llx_societe_commerciaux' => 'fk_societe_commerciaux_fk_c_type_contact_code'
);
foreach ( $arrayofforeignkey as $tmptable => $foreignkeyname ) {
if ( $table [ 0 ] == $tmptable ) {
print '<tr><td colspan="2">' ;
2024-09-05 22:41:49 +02:00
$sqltmp = " ALTER TABLE " . $db -> sanitize ( $table [ 0 ]) . " DROP FOREIGN KEY " . $db -> sanitize ( $foreignkeyname );
2024-09-05 11:49:33 +02:00
print $sqltmp ;
if ( $force_utf8_on_tables == 'confirmed' ) {
$resqltmp = $db -> query ( $sqltmp );
} else {
print ' - <span class="opacitymedium">Disabled</span>' ;
}
print '</td></tr>' ;
$foreignkeystorestore [ $tmptable ] = $foreignkeyname ;
}
}
}
foreach ( $listoftables as $table ) {
// do not convert llx_const if mysql encrypt/decrypt is used
if ( $conf -> db -> dolibarr_main_db_encryption != 0 && preg_match ( '/\_const$/' , $table [ 0 ])) {
continue ;
}
if ( $table [ 1 ] == 'VIEW' ) {
print '<tr><td colspan="2">' . $table [ 0 ] . ' is a ' . $table [ 1 ] . ' <span class="opacitymedium">(Skipped)</span></td></tr>' ;
2021-02-26 18:20:21 +01:00
continue ;
}
2020-09-07 10:18:17 +02:00
2024-09-30 23:11:31 +02:00
$collation = 'utf8_unicode_ci' ;
$defaultcollation = $db -> getDefaultCollationDatabase ();
if ( preg_match ( '/general/' , $defaultcollation )) {
$collation = 'utf8_general_ci' ;
}
2020-09-07 10:18:17 +02:00
print '<tr><td colspan="2">' ;
2023-04-14 10:06:10 +02:00
print $table [ 0 ];
2024-09-05 13:22:19 +02:00
$sql1 = " ALTER TABLE " . $db -> sanitize ( $table [ 0 ]) . " ROW_FORMAT=dynamic " ;
2024-09-30 23:11:31 +02:00
$sql2 = " ALTER TABLE " . $db -> sanitize ( $table [ 0 ]) . " CONVERT TO CHARACTER SET utf8 COLLATE " . $db -> sanitize ( $collation );
2022-04-07 23:44:57 +02:00
print '<!-- ' . $sql1 . ' -->' ;
print '<!-- ' . $sql2 . ' -->' ;
2021-02-26 18:20:21 +01:00
if ( $force_utf8_on_tables == 'confirmed' ) {
2022-04-07 23:44:57 +02:00
$resql1 = $db -> query ( $sql1 );
if ( $resql1 ) {
$resql2 = $db -> query ( $sql2 );
} else {
$resql2 = false ;
}
2024-09-05 11:49:33 +02:00
print ' - Done ' . (( $resql1 && $resql2 ) ? '<span class="opacitymedium">(OK)</span>' : '<span class="error" title="' . dol_escape_htmltag ( $db -> lasterror ) . '">(KO)</span>' );
2021-02-26 18:20:21 +01:00
} else {
2024-09-05 11:49:33 +02:00
print ' - <span class="opacitymedium">Disabled</span>' ;
2021-02-26 18:20:21 +01:00
}
2020-09-07 10:18:17 +02:00
print '</td></tr>' ;
2024-09-05 11:49:33 +02:00
flush ();
ob_flush ();
}
// Restore dropped foreign keys
foreach ( $foreignkeystorestore as $tmptable => $foreignkeyname ) {
2024-09-05 22:41:49 +02:00
$stringtofindinline = " ALTER TABLE .* ADD CONSTRAINT " . $db -> sanitize ( $foreignkeyname );
2024-09-05 11:49:33 +02:00
$fileforkeys = DOL_DOCUMENT_ROOT . '/install/mysql/tables/' . $tmptable . '.key.sql' ;
//print 'Search in '.$fileforkeys.' to get '.$stringtofindinline."<br>\n";
$handle = fopen ( $fileforkeys , 'r' );
if ( $handle ) {
while (( $line = fgets ( $handle )) !== false ) {
// Process the line read.
if ( preg_match ( '/^' . $stringtofindinline . '/i' , $line )) {
$resqltmp = $db -> query ( $line );
print '<tr><td colspan="2">' ;
print $line ;
print ' - Done ' . ( $resqltmp ? '<span class="opacitymedium">(OK)</span>' : '<span class="error" title="' . dol_escape_htmltag ( $db -> lasterror ) . '">(KO)</span>' );
print '</td></tr>' ;
break ;
}
}
fclose ( $handle );
}
flush ();
ob_flush ();
2020-09-07 10:18:17 +02:00
}
// Enable foreign key checking
2021-02-26 18:20:21 +01:00
if ( $force_utf8_on_tables == 'confirmed' ) {
2020-09-07 10:18:17 +02:00
$sql = 'SET FOREIGN_KEY_CHECKS=1' ;
print '<!-- ' . $sql . ' -->' ;
2024-09-05 11:49:33 +02:00
print '<tr><td colspan="2">' . $sql . '</td></tr>' ;
2020-09-07 10:18:17 +02:00
$resql = $db -> query ( $sql );
}
} else {
print '<tr><td colspan="2">Not available with database type ' . $db -> type . '</td></tr>' ;
}
2017-07-03 01:36:04 +02:00
}
2021-02-27 15:48:41 +01:00
// force utf8mb4 on tables EXPERIMENTAL !
if ( $ok && GETPOST ( 'force_utf8mb4_on_tables' , 'alpha' )) {
print '<tr><td colspan="2"><br>*** Force page code and collation of tables into utf8mb4/utf8mb4_unicode_ci (for mysql/mariadb only)</td></tr>' ;
if ( $db -> type == " mysql " || $db -> type == " mysqli " ) {
$force_utf8mb4_on_tables = GETPOST ( 'force_utf8mb4_on_tables' , 'alpha' );
2024-09-05 11:49:33 +02:00
2023-04-14 10:06:10 +02:00
$listoftables = $db -> DDLListTablesFull ( $db -> database_name );
2021-02-27 15:48:41 +01:00
// Disable foreign key checking for avoid errors
if ( $force_utf8mb4_on_tables == 'confirmed' ) {
$sql = 'SET FOREIGN_KEY_CHECKS=0' ;
print '<!-- ' . $sql . ' -->' ;
2024-09-05 11:49:33 +02:00
print '<tr><td colspan="2">' . $sql . '</td></tr>' ;
2021-02-27 15:48:41 +01:00
$resql = $db -> query ( $sql );
}
2024-09-05 11:49:33 +02:00
$foreignkeystorestore = array ();
// First loop to delete foreign keys
2021-02-27 15:48:41 +01:00
foreach ( $listoftables as $table ) {
// do not convert llx_const if mysql encrypt/decrypt is used
2023-04-14 10:06:10 +02:00
if ( $conf -> db -> dolibarr_main_db_encryption != 0 && preg_match ( '/\_const$/' , $table [ 0 ])) {
continue ;
}
if ( $table [ 1 ] == 'VIEW' ) {
2024-09-05 11:49:33 +02:00
print '<tr><td colspan="2">' . $table [ 0 ] . ' is a ' . $table [ 1 ] . ' <span class="opacitymedium">(Skipped)</span></td></tr>' ;
continue ;
}
// Special case of tables with foreign key on varchar fields
$arrayofforeignkey = array (
'llx_accounting_account' => 'fk_accounting_account_fk_pcg_version' ,
'llx_accounting_system' => 'fk_accounting_account_fk_pcg_version' ,
'llx_c_type_contact' => 'fk_societe_commerciaux_fk_c_type_contact_code' ,
'llx_societe_commerciaux' => 'fk_societe_commerciaux_fk_c_type_contact_code'
);
foreach ( $arrayofforeignkey as $tmptable => $foreignkeyname ) {
if ( $table [ 0 ] == $tmptable ) {
print '<tr><td colspan="2">' ;
2024-09-05 22:41:49 +02:00
$sqltmp = " ALTER TABLE " . $db -> sanitize ( $table [ 0 ]) . " DROP FOREIGN KEY " . $db -> sanitize ( $foreignkeyname );
2024-09-05 11:49:33 +02:00
print $sqltmp ;
if ( $force_utf8mb4_on_tables == 'confirmed' ) {
$resqltmp = $db -> query ( $sqltmp );
} else {
print ' - <span class="opacitymedium">Disabled</span>' ;
}
print '</td></tr>' ;
$foreignkeystorestore [ $tmptable ] = $foreignkeyname ;
}
}
}
foreach ( $listoftables as $table ) {
// do not convert llx_const if mysql encrypt/decrypt is used
if ( $conf -> db -> dolibarr_main_db_encryption != 0 && preg_match ( '/\_const$/' , $table [ 0 ])) {
continue ;
}
if ( $table [ 1 ] == 'VIEW' ) {
print '<tr><td colspan="2">' . $table [ 0 ] . ' is a ' . $table [ 1 ] . ' <span class="opacitymedium">(Skipped)</span></td></tr>' ;
2021-02-27 15:48:41 +01:00
continue ;
}
2024-09-30 23:11:31 +02:00
$collation = 'utf8mb4_unicode_ci' ;
$defaultcollation = $db -> getDefaultCollationDatabase ();
if ( preg_match ( '/general/' , $defaultcollation )) {
$collation = 'utf8mb4_general_ci' ;
}
2021-02-27 15:48:41 +01:00
print '<tr><td colspan="2">' ;
2023-04-14 10:06:10 +02:00
print $table [ 0 ];
2024-09-05 13:22:19 +02:00
$sql1 = " ALTER TABLE " . $db -> sanitize ( $table [ 0 ]) . " ROW_FORMAT=dynamic " ;
2024-09-30 23:11:31 +02:00
$sql2 = " ALTER TABLE " . $db -> sanitize ( $table [ 0 ]) . " CONVERT TO CHARACTER SET utf8mb4 COLLATE " . $db -> sanitize ( $collation );
2021-03-31 18:49:19 +02:00
print '<!-- ' . $sql1 . ' -->' ;
print '<!-- ' . $sql2 . ' -->' ;
2021-02-27 15:48:41 +01:00
if ( $force_utf8mb4_on_tables == 'confirmed' ) {
2021-03-31 18:49:19 +02:00
$resql1 = $db -> query ( $sql1 );
if ( $resql1 ) {
$resql2 = $db -> query ( $sql2 );
} else {
$resql2 = false ;
}
2024-09-05 11:49:33 +02:00
print ' - Done ' . (( $resql1 && $resql2 ) ? '<span class="opacitymedium">(OK)</span>' : '<span class="error" title="' . dol_escape_htmltag ( $db -> lasterror ) . '">(KO)</span>' );
2021-02-27 15:48:41 +01:00
} else {
2024-09-05 11:49:33 +02:00
print ' - <span class="opacitymedium">Disabled</span>' ;
2021-02-27 15:48:41 +01:00
}
print '</td></tr>' ;
flush ();
ob_flush ();
}
2024-09-05 11:49:33 +02:00
// Restore dropped foreign keys
foreach ( $foreignkeystorestore as $tmptable => $foreignkeyname ) {
2024-09-05 22:41:49 +02:00
$stringtofindinline = " ALTER TABLE .* ADD CONSTRAINT " . $db -> sanitize ( $foreignkeyname );
2024-09-05 11:49:33 +02:00
$fileforkeys = DOL_DOCUMENT_ROOT . '/install/mysql/tables/' . $tmptable . '.key.sql' ;
//print 'Search in '.$fileforkeys.' to get '.$stringtofindinline."<br>\n";
$handle = fopen ( $fileforkeys , 'r' );
if ( $handle ) {
while (( $line = fgets ( $handle )) !== false ) {
// Process the line read.
if ( preg_match ( '/^' . $stringtofindinline . '/i' , $line )) {
$resqltmp = $db -> query ( $line );
print '<tr><td colspan="2">' ;
print $line ;
print ' - Done ' . ( $resqltmp ? '<span class="opacitymedium">(OK)</span>' : '<span class="error" title="' . dol_escape_htmltag ( $db -> lasterror ) . '">(KO)</span>' );
print '</td></tr>' ;
break ;
}
}
fclose ( $handle );
}
flush ();
ob_flush ();
}
2021-02-27 15:48:41 +01:00
// Enable foreign key checking
if ( $force_utf8mb4_on_tables == 'confirmed' ) {
$sql = 'SET FOREIGN_KEY_CHECKS=1' ;
print '<!-- ' . $sql . ' -->' ;
2024-09-05 11:49:33 +02:00
print '<tr><td colspan="2">' . $sql . '</td></tr>' ;
2021-02-27 15:48:41 +01:00
$resql = $db -> query ( $sql );
}
} else {
print '<tr><td colspan="2">Not available with database type ' . $db -> type . '</td></tr>' ;
}
}
2023-09-06 11:09:46 +02:00
if ( $ok && GETPOST ( 'force_collation_from_conf_on_tables' , 'alpha' )) {
print '<tr><td colspan="2"><br>*** Force page code and collation of tables into ' . $conf -> db -> character_set . '/' . $conf -> db -> dolibarr_main_db_collation . ' and row_format=dynamic (for mysql/mariadb only)</td></tr>' ;
if ( $db -> type == " mysql " || $db -> type == " mysqli " ) {
$force_collation_from_conf_on_tables = GETPOST ( 'force_collation_from_conf_on_tables' , 'alpha' );
$listoftables = $db -> DDLListTablesFull ( $db -> database_name );
// Disable foreign key checking for avoid errors
if ( $force_collation_from_conf_on_tables == 'confirmed' ) {
$sql = 'SET FOREIGN_KEY_CHECKS=0' ;
print '<!-- ' . $sql . ' -->' ;
$resql = $db -> query ( $sql );
}
foreach ( $listoftables as $table ) {
2024-05-15 18:04:26 +02:00
// do not convert collation on llx_const if mysql encrypt/decrypt is used
2023-09-06 11:09:46 +02:00
if ( $conf -> db -> dolibarr_main_db_encryption != 0 && preg_match ( '/\_const$/' , $table [ 0 ])) {
continue ;
}
if ( $table [ 1 ] == 'VIEW' ) {
print '<tr><td colspan="2">' . $table [ 0 ] . ' is a ' . $table [ 1 ] . ' (Skipped)</td></tr>' ;
continue ;
}
print '<tr><td colspan="2">' ;
print $table [ 0 ];
$sql1 = " ALTER TABLE " . $table [ 0 ] . " ROW_FORMAT=dynamic " ;
$sql2 = " ALTER TABLE " . $table [ 0 ] . " CONVERT TO CHARACTER SET " . $conf -> db -> character_set . " COLLATE " . $conf -> db -> dolibarr_main_db_collation ;
print '<!-- ' . $sql1 . ' -->' ;
print '<!-- ' . $sql2 . ' -->' ;
if ( $force_collation_from_conf_on_tables == 'confirmed' ) {
$resql1 = $db -> query ( $sql1 );
if ( $resql1 ) {
$resql2 = $db -> query ( $sql2 );
} else {
$resql2 = false ;
}
2024-09-05 11:49:33 +02:00
print ' - Done ' . (( $resql1 && $resql2 ) ? '<span class="opacitymedium">(OK)</span>' : '<span class="error" title="' . dol_escape_htmltag ( $db -> lasterror ) . '">(KO)</span>' );
2023-09-06 11:09:46 +02:00
} else {
2024-09-05 11:49:33 +02:00
print ' - <span class="opacitymedium">Disabled</span>' ;
2023-09-06 11:09:46 +02:00
}
print '</td></tr>' ;
}
// Enable foreign key checking
if ( $force_collation_from_conf_on_tables == 'confirmed' ) {
$sql = 'SET FOREIGN_KEY_CHECKS=1' ;
print '<!-- ' . $sql . ' -->' ;
$resql = $db -> query ( $sql );
}
} else {
print '<tr><td colspan="2">Not available with database type ' . $db -> type . '</td></tr>' ;
}
}
2021-03-26 13:10:06 +01:00
// rebuild sequences for pgsql
if ( $ok && GETPOST ( 'rebuild_sequences' , 'alpha' )) {
print '<tr><td colspan="2"><br>*** Force to rebuild sequences (for postgresql only)</td></tr>' ;
if ( $db -> type == " pgsql " ) {
$rebuild_sequence = GETPOST ( 'rebuild_sequences' , 'alpha' );
if ( $rebuild_sequence == 'confirmed' ) {
$sql = " SELECT dol_util_rebuild_sequences(); " ;
print '<!-- ' . $sql . ' -->' ;
$resql = $db -> query ( $sql );
}
} else {
print '<tr><td colspan="2">Not available with database type ' . $db -> type . '</td></tr>' ;
}
}
2019-08-22 14:06:18 +02:00
//
if ( $ok && GETPOST ( 'repair_link_dispatch_lines_supplier_order_lines' )) {
2020-09-07 10:18:17 +02:00
/*
2021-02-26 18:20:21 +01:00
* This script is meant to be run when upgrading from a dolibarr version < 3.8
* to a newer version .
*
* Version 3.8 introduces a new column in llx_commande_fournisseur_dispatch , which
* matches the dispatch to a specific supplier order line ( so that if there are
* several with the same product , the user can specifically tell which products of
* which line were dispatched where ) .
*
* However when migrating , the new column has a default value of 0 , which means that
* old supplier orders whose lines were dispatched using the old dolibarr version
* have unspecific dispatch lines , which are not taken into account by the new version ,
* thus making the order look like it was never dispatched at all .
*
* This scripts sets this foreign key to the first matching supplier order line whose
* product ( and supplier order of course ) are the same as the dispatch’ s .
*
* If the dispatched quantity is more than indicated on the order line ( this happens if
* there are several order lines for the same product ), it creates new dispatch lines
* pointing to the other order lines accordingly , until all the dispatched quantity is
* accounted for .
*/
2019-09-06 16:10:55 +02:00
$repair_link_dispatch_lines_supplier_order_lines = GETPOST ( 'repair_link_dispatch_lines_supplier_order_lines' , 'alpha' );
2024-01-15 09:49:33 +01:00
echo '<tr><th>Repair llx_receptiondet_batch.fk_commandefourndet</th></tr>' ;
2020-09-07 10:18:17 +02:00
echo '<tr><td>Repair in progress. This may take a while.</td></tr>' ;
2024-03-19 15:49:42 +01:00
$sql_dispatch = 'SELECT * FROM ' . MAIN_DB_PREFIX . 'receptiondet_batch WHERE COALESCE(fk_elementdet, 0) = 0' ;
2020-09-07 10:18:17 +02:00
$db -> begin ();
$resql_dispatch = $db -> query ( $sql_dispatch );
$n_processed_rows = 0 ;
$errors = array ();
if ( $resql_dispatch ) {
if ( $db -> num_rows ( $resql_dispatch ) == 0 ) {
echo '<tr><td>Nothing to do.</td></tr>' ;
exit ;
}
while ( $obj_dispatch = $db -> fetch_object ( $resql_dispatch )) {
$sql_line = 'SELECT line.rowid, line.qty FROM ' . MAIN_DB_PREFIX . 'commande_fournisseurdet AS line' ;
2021-03-30 17:45:15 +02:00
$sql_line .= ' WHERE line.fk_commande = ' . (( int ) $obj_dispatch -> fk_commande );
$sql_line .= ' AND line.fk_product = ' . (( int ) $obj_dispatch -> fk_product );
2020-09-07 10:18:17 +02:00
$resql_line = $db -> query ( $sql_line );
// s’ il y a plusieurs lignes avec le même produit sur cette commande fournisseur,
// on divise la ligne de dispatch en autant de lignes qu’ on en a sur la commande pour le produit
2024-01-13 19:48:41 +01:00
// et on met la quantité de la ligne dans la limit du "budget" indiqué par dispatch.qty
2020-09-07 10:18:17 +02:00
$remaining_qty = $obj_dispatch -> qty ;
$first_iteration = true ;
if ( ! $resql_line ) {
echo '<tr><td>Unable to find a matching supplier order line for dispatch #' . $obj_dispatch -> rowid . '</td></tr>' ;
$errors [] = $sql_line ;
$n_processed_rows ++ ;
continue ;
}
2021-02-26 18:20:21 +01:00
if ( $db -> num_rows ( $resql_line ) == 0 ) {
continue ;
}
2020-09-07 10:18:17 +02:00
while ( $obj_line = $db -> fetch_object ( $resql_line )) {
2021-02-26 18:20:21 +01:00
if ( ! $remaining_qty ) {
break ;
}
2020-09-07 10:18:17 +02:00
if ( ! $obj_line -> rowid ) {
continue ;
}
$qty_for_line = min ( $remaining_qty , $obj_line -> qty );
if ( $first_iteration ) {
2024-01-15 09:49:33 +01:00
$sql_attach = 'UPDATE ' . MAIN_DB_PREFIX . 'receptiondet_batch' ;
2024-03-19 15:49:42 +01:00
$sql_attach .= ' SET fk_elementdet = ' . (( int ) $obj_line -> rowid ) . ', qty = ' . (( float ) $qty_for_line );
2021-03-30 11:36:50 +02:00
$sql_attach .= ' WHERE rowid = ' . (( int ) $obj_dispatch -> rowid );
2020-09-07 10:18:17 +02:00
$first_iteration = false ;
} else {
$sql_attach_values = array (
2024-03-21 16:33:57 +01:00
( string ) (( int ) $obj_dispatch -> fk_element ),
( string ) (( int ) $obj_dispatch -> fk_product ),
( string ) (( int ) $obj_line -> rowid ),
( string ) (( float ) $qty_for_line ),
( string ) (( int ) $obj_dispatch -> fk_entrepot ),
( string ) (( int ) $obj_dispatch -> fk_user ),
2021-08-28 03:09:18 +02:00
$obj_dispatch -> datec ? " ' " . $db -> idate ( $db -> jdate ( $obj_dispatch -> datec )) . " ' " : 'NULL' ,
$obj_dispatch -> comment ? " ' " . $db -> escape ( $obj_dispatch -> comment ) . " ' " : 'NULL' ,
2024-03-19 00:25:40 +01:00
$obj_dispatch -> status ? ( string ) (( int ) $obj_dispatch -> status ) : 'NULL' ,
2021-08-28 03:09:18 +02:00
$obj_dispatch -> tms ? " ' " . $db -> idate ( $db -> jdate ( $obj_dispatch -> tms )) . " ' " : 'NULL' ,
$obj_dispatch -> batch ? " ' " . $db -> escape ( $obj_dispatch -> batch ) . " ' " : 'NULL' ,
$obj_dispatch -> eatby ? " ' " . $db -> escape ( $obj_dispatch -> eatby ) . " ' " : 'NULL' ,
$obj_dispatch -> sellby ? " ' " . $db -> escape ( $obj_dispatch -> sellby ) . " ' " : 'NULL'
2020-09-07 10:18:17 +02:00
);
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 21:46:12 +01:00
$sql_attach_values = implode ( ', ' , $sql_attach_values );
2020-09-07 10:18:17 +02:00
2024-01-15 09:49:33 +01:00
$sql_attach = 'INSERT INTO ' . MAIN_DB_PREFIX . 'receptiondet_batch' ;
2024-03-19 15:49:42 +01:00
$sql_attach .= ' (fk_element, fk_product, fk_elementdet, qty, fk_entrepot, fk_user, datec, comment, status, tms, batch, eatby, sellby)' ;
2024-03-21 16:33:57 +01:00
$sql_attach .= " VALUES ( " . $sql_attach_values . " ) " ; // The string is already sanitized
2020-09-07 10:18:17 +02:00
}
2021-02-26 18:20:21 +01:00
if ( $repair_link_dispatch_lines_supplier_order_lines == 'confirmed' ) {
2020-09-07 10:18:17 +02:00
$resql_attach = $db -> query ( $sql_attach );
} else {
$resql_attach = true ; // Force success in test mode
}
if ( $resql_attach ) {
$remaining_qty -= $qty_for_line ;
} else {
$errors [] = $sql_attach ;
}
$first_iteration = false ;
}
$n_processed_rows ++ ;
// report progress every 256th row
if ( ! ( $n_processed_rows & 0xff )) {
echo '<tr><td>Processed ' . $n_processed_rows . ' rows with ' . count ( $errors ) . ' errors…' . " </td></tr> \n " ;
flush ();
ob_flush ();
}
}
} else {
echo '<tr><td>Unable to find any dispatch without an fk_commandefourndet.' . " </td></tr> \n " ;
echo $sql_dispatch . " \n " ;
}
echo '<tr><td>Fixed ' . $n_processed_rows . ' rows with ' . count ( $errors ) . ' errors…' . " </td></tr> \n " ;
echo '<tr><td>DONE.' . " </td></tr> \n " ;
if ( count ( $errors )) {
$db -> rollback ();
echo '<tr><td>The transaction was rolled back due to errors: nothing was changed by the script.</td></tr>' ;
} else {
$db -> commit ();
}
$db -> close ();
echo '<tr><td><h3>SQL queries with errors:</h3></tr></td>' ;
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 21:46:12 +01:00
echo '<tr><td>' . implode ( '</td></tr><tr><td>' , $errors ) . '</td></tr>' ;
2019-08-22 14:06:18 +02:00
}
2017-07-03 01:36:04 +02:00
2024-01-13 19:48:41 +01:00
// Repair llx_commande_fournisseur to eliminate duplicate reference
2023-06-09 16:27:29 +02:00
if ( $ok && GETPOST ( 'repair_supplier_order_duplicate_ref' )) {
require_once DOL_DOCUMENT_ROOT . '/fourn/class/fournisseur.commande.class.php' ;
include_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php' ;
$db -> begin ();
2023-06-09 16:38:35 +02:00
$err = 0 ;
2023-06-09 16:27:29 +02:00
// Query to find all duplicate supplier orders
2023-06-09 16:38:35 +02:00
$sql = " SELECT * FROM " . MAIN_DB_PREFIX . " commande_fournisseur " ;
$sql .= " WHERE ref IN (SELECT cf.ref FROM " . MAIN_DB_PREFIX . " commande_fournisseur cf GROUP BY cf.ref, cf.entity HAVING COUNT(cf.rowid) > 1) " ;
2023-06-09 16:27:29 +02:00
// Build a list of ref => []CommandeFournisseur
$duplicateSupplierOrders = [];
$resql = $db -> query ( $sql );
if ( $resql ) {
while ( $rawSupplierOrder = $db -> fetch_object ( $resql )) {
$supplierOrder = new CommandeFournisseur ( $db );
$supplierOrder -> setVarsFromFetchObj ( $rawSupplierOrder );
$duplicateSupplierOrders [ $rawSupplierOrder -> ref ] [] = $supplierOrder ;
}
2023-06-09 16:38:35 +02:00
} else {
$err ++ ;
2023-06-09 16:27:29 +02:00
}
// Process all duplicate supplier order and regenerate the reference for all except the first one
foreach ( $duplicateSupplierOrders as $ref => $supplierOrders ) {
/** @var CommandeFournisseur $supplierOrder */
foreach ( array_slice ( $supplierOrders , 1 ) as $supplierOrder ) {
// Definition of supplier order numbering model name
$soc = new Societe ( $db );
$soc -> fetch ( $supplierOrder -> fourn_id );
$newRef = $supplierOrder -> getNextNumRef ( $soc );
2023-06-12 08:37:07 +02:00
$sql = " UPDATE " . MAIN_DB_PREFIX . " commande_fournisseur cf SET cf.ref = ' " . $db -> escape ( $newRef ) . " ' WHERE cf.rowid = " . ( int ) $supplierOrder -> id ;
2023-06-09 16:38:35 +02:00
if ( ! $db -> query ( $sql )) {
$err ++ ;
}
2023-06-09 16:27:29 +02:00
}
}
2023-06-09 16:38:35 +02:00
if ( $err == 0 ) {
$db -> commit ();
} else {
$db -> rollback ();
}
2023-06-09 16:27:29 +02:00
}
2024-05-03 13:13:21 +02:00
// Repair llx_invoice to calculate totals from line items
// WARNING : The process can be long on production environments due to restrictions.
// consider raising php_max_execution time if failing to execute completely.
if ( $ok && GETPOST ( 'recalculateinvoicetotal' ) == 'confirmed' ) {
$err = 0 ;
$db -> begin ();
2024-05-03 18:00:17 +02:00
$sql = " SELECT f.rowid, SUM(fd.total_ht) as total_ht " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " facture f " ;
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . " facturedet fd ON fd.fk_facture = f.rowid " ;
$sql .= " WHERE f.total_ht = 0 " ;
$sql .= " GROUP BY fd.fk_facture HAVING SUM(fd.total_ht) <> 0 " ;
2024-05-03 13:13:21 +02:00
$resql = $db -> query ( $sql );
if ( $resql ) {
$num = $db -> num_rows ( $resql );
print " We found " . $num . " factures qualified that will have their total recalculated because they are at zero and line items not at zero \n " ;
dol_syslog ( " We found " . $num . " factures qualified that will have their total recalculated because they are at zero and line items not at zero " );
2009-09-11 00:00:20 +02:00
2024-05-03 13:13:21 +02:00
if ( $num ) {
$i = 0 ;
while ( $i < $num ) {
$obj = $db -> fetch_object ( $resql );
$sql_calculs = "
2024-05-03 18:00:17 +02:00
SELECT
SUM ( fd . total_ht ) as 'total_ht' ,
2024-05-03 13:13:21 +02:00
SUM ( fd . total_tva ) as 'total_tva' ,
SUM ( fd . total_localtax1 ) as 'localtax1' ,
SUM ( fd . total_localtax2 ) as 'localtax2' ,
SUM ( fd . total_ttc ) as 'total_ttc'
FROM
" .MAIN_DB_PREFIX. " facturedet fd
2024-05-03 18:00:17 +02:00
WHERE
2024-05-03 13:13:21 +02:00
fd . fk_facture = $obj -> rowid " ;
$ressql_calculs = $db -> query ( $sql_calculs );
while ( $obj_calcul = $db -> fetch_object ( $ressql_calculs )) {
$sql_maj = "
2024-05-03 18:00:17 +02:00
UPDATE " .MAIN_DB_PREFIX. " facture
SET
total_ht = " .( $obj_calcul->total_ht ? price2num( $obj_calcul->total_ht , 'MT') : 0). " ,
total_tva = " .( $obj_calcul->total_tva ? price2num( $obj_calcul->total_tva , 'MT') : 0). " ,
localtax1 = " .( $obj_calcul->localtax1 ? price2num( $obj_calcul->localtax1 , 'MT') : 0). " ,
localtax2 = " .( $obj_calcul->localtax2 ? price2num( $obj_calcul->localtax2 , 'MT') : 0). " ,
total_ttc = " .( $obj_calcul->total_ttc ? price2num( $obj_calcul->total_ttc , 'MT') : 0). "
WHERE
2024-05-03 13:13:21 +02:00
rowid = $obj -> rowid " ;
$db -> query ( $sql_maj );
}
$i ++ ;
}
} else {
print " Pas de factures à traiter \n " ;
}
} else {
dol_print_error ( $db );
dol_syslog ( " calculate_total_and_taxes.php: Error " );
$err ++ ;
}
2012-02-08 16:41:06 +01:00
2024-05-03 13:13:21 +02:00
if ( $err == 0 ) {
$db -> commit ();
} else {
$db -> rollback ();
}
}
print '</table>' ;
2012-02-08 16:41:06 +01:00
2021-02-26 18:20:21 +01:00
if ( empty ( $actiondone )) {
2020-09-07 10:18:17 +02:00
print '<div class="error">' . $langs -> trans ( " ErrorWrongParameters " ) . '</div>' ;
2009-09-11 00:00:20 +02:00
}
2021-02-26 18:20:21 +01:00
if ( $oneoptionset ) {
2020-11-30 14:47:07 +01:00
print '<div class="center" style="padding-top: 10px"><a href="../index.php?mainmenu=home&leftmenu=home' . ( GETPOSTISSET ( " login " ) ? '&username=' . urlencode ( GETPOST ( " login " )) : '' ) . '">' ;
2017-11-23 13:23:16 +01:00
print $langs -> trans ( " GoToDolibarr " );
print '</a></div>' ;
}
2009-10-09 20:32:35 +02:00
2015-07-06 16:33:45 +02:00
dolibarr_install_syslog ( " --- repair: end " );
2019-01-27 11:55:16 +01:00
pFooter ( 1 , $setuplang );
2009-09-11 00:00:20 +02:00
2021-02-26 18:20:21 +01:00
if ( $db -> connected ) {
$db -> close ();
}
2012-04-04 20:37:16 +02:00
// Return code if ran from command line
2021-02-26 18:20:21 +01:00
if ( ! $ok && isset ( $argv [ 1 ])) {
exit ( 1 );
}