2005-07-10 22:10:08 +02:00
< ? php
2012-08-02 10:07:55 +02:00
/* Copyright ( C ) 2003 Rodolphe Quiedeville < rodolphe @ quiedeville . org >
* Copyright ( C ) 2004 - 2005 Laurent Destailleur < eldy @ users . sourceforge . net >
* Copyright ( C ) 2004 Sebastien Di Cintio < sdicintio @ ressource - toi . org >
* Copyright ( C ) 2004 Benoit Mortier < benoit . mortier @ opensides . be >
2018-10-27 14:43:12 +02:00
* Copyright ( C ) 2005 - 2012 Regis Houssin < regis . houssin @ inodbox . com >
2005-07-10 22:10:08 +02: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
2005-07-10 22:10:08 +02:00
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
2019-09-23 21:55:30 +02:00
* along with this program . If not , see < https :// www . gnu . org / licenses />.
2005-07-10 22:10:08 +02:00
*/
/**
2010-03-01 10:20:41 +01:00
* \file htdocs / admin / system / dbtable . php
* \brief Page d 'info des contraintes d' une table
2008-10-27 21:34:31 +01:00
*/
2005-07-10 22:10:08 +02:00
2022-09-07 20:08:59 +02:00
// Load Dolibarr environment
2012-08-22 23:24:21 +02:00
require '../../main.inc.php' ;
2005-07-10 22:10:08 +02:00
$langs -> load ( " admin " );
2021-02-26 22:04:03 +01:00
if ( ! $user -> admin ) {
2012-08-02 10:07:55 +02:00
accessforbidden ();
2021-02-26 22:04:03 +01:00
}
2005-07-10 22:10:08 +02:00
2024-03-18 18:17:53 +01:00
$table = GETPOST ( 'table' , 'aZ09' );
$field = GETPOST ( 'field' , 'aZ09' );
$action = GETPOST ( 'action' , 'aZ09' );
/*
* Actions
*/
if ( $action == 'convertutf8' ) {
$sql = " SHOW FULL COLUMNS IN " . $db -> sanitize ( $table );
$resql = $db -> query ( $sql );
if ( $resql ) {
$num = $db -> num_rows ( $resql );
$i = 0 ;
while ( $i < $num ) {
$row = $db -> fetch_row ( $resql );
if ( $row [ 0 ] == $field ) {
2024-03-18 23:34:08 +01:00
$sql = " ALTER TABLE " . $db -> sanitize ( $table ) . " MODIFY " . $db -> sanitize ( $row [ 0 ]) . " " . $row [ 1 ] . " CHARACTER SET utf8 " ; // We must not sanitize the $row[1]
2024-03-18 18:17:53 +01:00
$db -> query ( $sql );
2024-03-18 23:34:08 +01:00
$sql = " ALTER TABLE " . $db -> sanitize ( $table ) . " MODIFY " . $db -> sanitize ( $row [ 0 ]) . " " . $row [ 1 ] . " COLLATE utf8_unicode_ci " ; // We must not sanitize the $row[1]
2024-03-18 18:17:53 +01:00
$db -> query ( $sql );
break ;
}
}
}
}
if ( $action == 'convertutf8mb4' ) {
$sql = " SHOW FULL COLUMNS IN " . $db -> sanitize ( $table );
$resql = $db -> query ( $sql );
if ( $resql ) {
$num = $db -> num_rows ( $resql );
$i = 0 ;
while ( $i < $num ) {
$row = $db -> fetch_row ( $resql );
if ( $row [ 0 ] == $field ) {
2024-03-18 23:34:08 +01:00
$sql = " ALTER TABLE " . $db -> sanitize ( $table ) . " MODIFY " . $db -> sanitize ( $row [ 0 ]) . " " . $row [ 1 ] . " CHARACTER SET utf8mb4 " ; // We must not sanitize the $row[1]
2024-03-18 18:17:53 +01:00
$db -> query ( $sql );
2024-03-18 23:34:08 +01:00
$sql = " ALTER TABLE " . $db -> sanitize ( $table ) . " MODIFY " . $db -> sanitize ( $row [ 0 ]) . " " . $row [ 1 ] . " COLLATE utf8mb4_unicode_ci " ; // We must not sanitize the $row[1]
2024-03-18 18:17:53 +01:00
$db -> query ( $sql );
break ;
}
}
}
}
2008-10-27 21:34:31 +01:00
2005-07-10 22:10:08 +02:00
2008-10-27 21:34:31 +01:00
/*
* View
*/
2005-07-10 22:10:08 +02:00
llxHeader ();
2020-04-10 10:59:32 +02:00
print load_fiche_titre ( $langs -> trans ( " Table " ) . " " . $table , '' , 'title_setup' );
2005-07-10 22:10:08 +02:00
2008-10-27 21:34:31 +01:00
// Define request to get table description
2020-04-10 10:59:32 +02:00
$base = 0 ;
2021-02-26 22:04:03 +01:00
if ( preg_match ( '/mysql/i' , $conf -> db -> type )) {
2024-03-18 18:17:53 +01:00
$sql = " SHOW TABLE STATUS LIKE ' " . $db -> escape ( $db -> escapeforlike ( $table )) . " ' " ;
2020-04-10 10:59:32 +02:00
$base = 1 ;
2021-02-26 22:04:03 +01:00
} elseif ( $conf -> db -> type == 'pgsql' ) {
2008-10-27 21:34:31 +01:00
$sql = " SELECT conname,contype FROM pg_constraint " ;
2020-04-10 10:59:32 +02:00
$base = 2 ;
2005-07-10 22:10:08 +02:00
}
2021-02-26 22:04:03 +01:00
if ( ! $base ) {
2008-10-27 21:34:31 +01:00
print $langs -> trans ( " FeatureNotAvailableWithThisDatabaseDriver " );
2020-05-21 09:35:30 +02:00
} else {
2012-08-02 10:07:55 +02:00
$resql = $db -> query ( $sql );
2021-02-26 22:04:03 +01:00
if ( $resql ) {
2008-10-27 21:34:31 +01:00
$num = $db -> num_rows ( $resql );
2020-04-10 10:59:32 +02:00
$i = 0 ;
2021-02-26 22:04:03 +01:00
while ( $i < $num ) {
2008-10-27 21:34:31 +01:00
$row = $db -> fetch_row ( $resql );
$i ++ ;
}
2005-07-10 22:10:08 +02:00
}
2021-02-26 22:04:03 +01:00
if ( $base == 1 ) { // mysql
2020-04-10 10:59:32 +02:00
$link = array ();
2012-08-02 10:07:55 +02:00
$cons = explode ( " ; " , $row [ 14 ]);
2021-02-26 22:04:03 +01:00
if ( ! empty ( $cons )) {
foreach ( $cons as $cc ) {
2012-08-02 10:07:55 +02:00
$cx = preg_replace ( " / \ ) \ sREFER/ " , " " , $cc );
$cx = preg_replace ( " / \ (`/ " , " " , $cx );
$cx = preg_replace ( " /` \ )/ " , " " , $cx );
$cx = preg_replace ( " /` \ s/ " , " " , $cx );
2008-10-27 21:34:31 +01:00
2019-01-27 11:55:16 +01:00
$val = explode ( " ` " , $cx );
2008-10-27 21:34:31 +01:00
2020-04-10 10:59:32 +02:00
$link [ trim ( $val [ 0 ])][ 0 ] = ( isset ( $val [ 1 ]) ? $val [ 1 ] : '' );
$link [ trim ( $val [ 0 ])][ 1 ] = ( isset ( $val [ 2 ]) ? $val [ 2 ] : '' );
2012-08-02 10:07:55 +02:00
}
2008-10-27 21:34:31 +01:00
}
2018-03-05 13:11:07 +01:00
print '<table class="noborder">' ;
print '<tr class="liste_titre">' ;
2024-02-09 15:58:49 +01:00
print '<td>' . $langs -> trans ( " Fields " ) . '</td>' ;
print '<td>' . $langs -> trans ( " Type " ) . '</td>' ;
print '<td>' . $langs -> trans ( " Collation " ) . '</td>' ;
print '<td>' . $langs -> trans ( " Null " ) . '</td>' ;
print '<td>' . $langs -> trans ( " Index " ) . '</td>' ;
print '<td>' . $langs -> trans ( " Default " ) . '</td>' ;
print '<td>' . $langs -> trans ( " Extra " ) . '</td>' ;
print '<td>' . $langs -> trans ( " Privileges " ) . '</td>' ;
2018-03-05 13:11:07 +01:00
print '<td>' . $langs -> trans ( " FieldsLinked " ) . '</td>' ;
print '</tr>' ;
2024-02-09 15:58:49 +01:00
// $sql = "DESCRIBE ".$table;
2024-03-18 18:17:53 +01:00
$sql = " SHOW FULL COLUMNS IN " . $db -> sanitize ( $table );
2018-04-22 19:27:37 +02:00
2012-08-02 10:07:55 +02:00
$resql = $db -> query ( $sql );
2021-02-26 22:04:03 +01:00
if ( $resql ) {
2012-08-02 10:07:55 +02:00
$num = $db -> num_rows ( $resql );
2020-04-10 10:59:32 +02:00
$i = 0 ;
2021-02-26 22:04:03 +01:00
while ( $i < $num ) {
2012-08-02 10:07:55 +02:00
$row = $db -> fetch_row ( $resql );
2024-01-30 22:19:41 +01:00
2017-04-12 17:44:01 +02:00
print '<tr class="oddeven">' ;
2024-03-18 18:17:53 +01:00
2024-02-09 15:58:49 +01:00
// field
2018-03-05 13:11:07 +01:00
print " <td> " . $row [ 0 ] . " </td> " ;
2024-03-18 18:17:53 +01:00
2024-02-09 15:58:49 +01:00
// type
2024-03-18 18:17:53 +01:00
print " <td> " ;
$proptype = $row [ 1 ];
$pictoType = '' ;
$matches = array ();
if ( preg_match ( '/^varchar/' , $proptype , $matches )) {
$pictoType = 'varchar' ;
} elseif ( strpos ( $proptype , 'int' ) === 0 || strpos ( $proptype , 'tinyint' ) === 0 || strpos ( $proptype , 'bigint' ) === 0 ) {
$pictoType = 'int' ;
} elseif ( strpos ( $proptype , 'timestamp' ) === 0 ) {
$pictoType = 'datetime' ;
} elseif ( strpos ( $proptype , 'real' ) === 0 ) {
$pictoType = 'double' ;
}
print ( ! empty ( $pictoType ) ? getPictoForType ( $pictoType ) : getPictoForType ( $proptype )) . '<span title="' . dol_escape_htmltag ( $proptype ) . '">' . dol_escape_htmltag ( $proptype ) . '</span>' ;
print " </td> " ;
2024-02-09 15:58:49 +01:00
// collation
2024-03-18 18:17:53 +01:00
print " <td> " . ( empty ( $row [ 2 ]) ? ' ' : $row [ 2 ]);
// Link to convert collation
if ( isset ( $row [ 2 ])) {
print '<br><span class="opacitymedium small">' . $langs -> trans ( " ConvertInto " );
if ( ! in_array ( $row [ 2 ], array ( " utf8_unicode_ci " ))) {
print ' <a class="reposition" href="dbtable.php?action=convertutf8&table=' . urlencode ( $table ) . '&field=' . urlencode ( $row [ 0 ]) . '&token=' . newToken () . '">utf8</a>' ;
}
if ( ! in_array ( $row [ 2 ], array ( " utf8mb4_unicode_ci " ))) {
print ' <a class="reposition" href="dbtable.php?action=convertutf8mb4&table=' . urlencode ( $table ) . '&field=' . urlencode ( $row [ 0 ]) . '&token=' . newToken () . '">utf8mb4</a>' ;
}
print '</span>' ;
} else {
print '<br> ' ;
}
print " </td> " ;
2024-02-09 15:58:49 +01:00
// null
2018-03-05 13:11:07 +01:00
print " <td> " . $row [ 3 ] . " </td> " ;
2024-02-09 15:58:49 +01:00
// key
2020-04-10 10:59:32 +02:00
print " <td> " . ( empty ( $row [ 4 ]) ? '' : $row [ 4 ]) . " </td> " ;
2024-02-09 15:58:49 +01:00
// default
2020-04-10 10:59:32 +02:00
print " <td> " . ( empty ( $row [ 5 ]) ? '' : $row [ 5 ]) . " </td> " ;
2024-02-09 15:58:49 +01:00
// extra
2020-04-10 10:59:32 +02:00
print " <td> " . ( empty ( $row [ 6 ]) ? '' : $row [ 6 ]) . " </td> " ;
2024-02-09 15:58:49 +01:00
// privileges
2020-04-10 10:59:32 +02:00
print " <td> " . ( empty ( $row [ 7 ]) ? '' : $row [ 7 ]) . " </td> " ;
2018-03-05 13:11:07 +01:00
2020-04-10 10:59:32 +02:00
print " <td> " . ( isset ( $link [ $row [ 0 ]][ 0 ]) ? $link [ $row [ 0 ]][ 0 ] : '' ) . " . " ;
2023-12-04 11:41:14 +01:00
print ( isset ( $link [ $row [ 0 ]][ 1 ]) ? $link [ $row [ 0 ]][ 1 ] : '' ) . " </td> " ;
2018-04-22 19:27:37 +02:00
2024-01-30 22:19:41 +01:00
print '<!-- ALTER TABLE ' . $table . ' MODIFY ' . $row [ 0 ] . ' ' . $row [ 1 ] . ' COLLATE utf8_unicode_ci; -->' ;
print '<!-- ALTER TABLE ' . $table . ' MODIFY ' . $row [ 0 ] . ' ' . $row [ 1 ] . ' CHARACTER SET utf8; -->' ;
2008-10-27 21:34:31 +01:00
print '</tr>' ;
$i ++ ;
}
}
print '</table>' ;
}
2005-07-10 22:10:08 +02:00
}
2018-07-28 14:29:28 +02:00
// End of page
2011-08-27 16:24:16 +02:00
llxFooter ();
2012-08-02 10:07:55 +02:00
$db -> close ();