use @todo tag for todo items, to show up in generated documentation

This commit is contained in:
Sebastian Mendel
2006-09-21 14:28:46 +00:00
parent ca44c117a2
commit 1eadc0a41a
31 changed files with 1019 additions and 903 deletions

View File

@@ -238,10 +238,12 @@ while ($row = PMA_DBI_fetch_assoc($rowset)) {
// here, we have a TIMESTAMP that SHOW FULL FIELDS reports as having the // here, we have a TIMESTAMP that SHOW FULL FIELDS reports as having the
// NULL attribute, but SHOW CREATE TABLE says the contrary. Believe // NULL attribute, but SHOW CREATE TABLE says the contrary. Believe
// the latter. // the latter.
// TODO: merge this logic with the one in tbl_properties_structure.php /**
// or move it in a function similar to PMA_DBI_get_columns_full() * @todo merge this logic with the one in tbl_properties_structure.php
// but based on SHOW CREATE TABLE because information_schema * or move it in a function similar to PMA_DBI_get_columns_full()
// cannot be trusted in this case (MySQL bug) * but based on SHOW CREATE TABLE because information_schema
* cannot be trusted in this case (MySQL bug)
*/
if (!empty($analyzed_sql[0]['create_table_fields'][$field_name]['type']) && $analyzed_sql[0]['create_table_fields'][$field_name]['type'] == 'TIMESTAMP' && $analyzed_sql[0]['create_table_fields'][$field_name]['timestamp_not_null']) { if (!empty($analyzed_sql[0]['create_table_fields'][$field_name]['type']) && $analyzed_sql[0]['create_table_fields'][$field_name]['type'] == 'TIMESTAMP' && $analyzed_sql[0]['create_table_fields'][$field_name]['timestamp_not_null']) {
$row['Null'] = ''; $row['Null'] = '';
} }

View File

@@ -88,10 +88,11 @@ if (isset($db) &&
// now that all tables exist, create all the accumulated constraints // now that all tables exist, create all the accumulated constraints
if (isset($GLOBALS['add_constraints'])) { if (isset($GLOBALS['add_constraints'])) {
// FIXME: this works with mysqli but not with mysql, /**
// because mysql extension does not accept more than one * @todo this works with mysqli but not with mysql, because
// statement; maybe interface with the sql import plugin * mysql extension does not accept more than one statement; maybe
// that handles statement delimiter * interface with the sql import plugin that handles statement delimiter
*/
PMA_DBI_query($GLOBALS['sql_constraints_query_full_db']); PMA_DBI_query($GLOBALS['sql_constraints_query_full_db']);
// and prepare to display them // and prepare to display them

View File

@@ -384,7 +384,7 @@ class PMA_Config
} }
/** /**
* @TODO check validity of $_COOKIE['pma_collation_connection'] * @todo check validity of $_COOKIE['pma_collation_connection']
*/ */
if (! empty($_COOKIE['pma_collation_connection'])) { if (! empty($_COOKIE['pma_collation_connection'])) {
$this->set('collation_connection', $this->set('collation_connection',
@@ -657,7 +657,7 @@ class PMA_Config
/** /**
* check selected collation_connection * check selected collation_connection
* @TODO check validity of $_REQUEST['collation_connection'] * @todo check validity of $_REQUEST['collation_connection']
*/ */
function checkCollationConnection() function checkCollationConnection()
{ {

View File

@@ -215,6 +215,7 @@ class PMA_Table {
* Checks if this "table" is a view * Checks if this "table" is a view
* *
* @deprecated * @deprecated
* @todo see what we could do with the possible existence of $table_is_view
* @param string the database name * @param string the database name
* @param string the table name * @param string the table name
* *
@@ -224,8 +225,6 @@ class PMA_Table {
*/ */
function _isView($db, $table) { function _isView($db, $table) {
// maybe we already know if the table is a view // maybe we already know if the table is a view
// TODO: see what we could do with the possible existence
// of $table_is_view
if (isset($GLOBALS['tbl_is_view']) && $GLOBALS['tbl_is_view']) { if (isset($GLOBALS['tbl_is_view']) && $GLOBALS['tbl_is_view']) {
return true; return true;
} }
@@ -244,6 +243,8 @@ class PMA_Table {
* generates column/field specification for ALTER or CREATE TABLE syntax * generates column/field specification for ALTER or CREATE TABLE syntax
* *
* @todo move into class PMA_Column * @todo move into class PMA_Column
* @todo on the interface, some js to clear the default value when the default
* current_timestamp is checked
* @static * @static
* @param string $name name * @param string $name name
* @param string $type type ('INT', 'VARCHAR', 'BIT', ...) * @param string $type type ('INT', 'VARCHAR', 'BIT', ...)
@@ -269,10 +270,10 @@ class PMA_Table {
{ {
// $default_current_timestamp has priority over $default // $default_current_timestamp has priority over $default
// TODO: on the interface, some js to clear the default value
// when the default current_timestamp is checked
// TODO: include db-name /**
* @todo include db-name
*/
$query = PMA_backquote($name) . ' ' . $type; $query = PMA_backquote($name) . ' ' . $type;
if ($length != '' if ($length != ''
@@ -401,7 +402,7 @@ class PMA_Table {
} // end of the 'PMA_Table::countRecords()' function } // end of the 'PMA_Table::countRecords()' function
/** /**
* @TODO add documentation * @todo add documentation
*/ */
function generateAlter($oldcol, $newcol, $type, $length, function generateAlter($oldcol, $newcol, $type, $length,
$attribute, $collation, $null, $default, $default_current_timestamp, $attribute, $collation, $null, $default, $default_current_timestamp,
@@ -501,7 +502,7 @@ class PMA_Table {
/** /**
* Copies or renames table * Copies or renames table
* FIXME: use RENAME for move operations * @todo use RENAME for move operations
* - works only if the databases are on the same filesystem, * - works only if the databases are on the same filesystem,
* how can we check that? try the operation and * how can we check that? try the operation and
* catch an error? * catch an error?
@@ -524,7 +525,9 @@ class PMA_Table {
// Ensure the target is valid // Ensure the target is valid
if (! $GLOBALS['PMA_List_Database']->exists($source_db, $target_db)) { if (! $GLOBALS['PMA_List_Database']->exists($source_db, $target_db)) {
// @TODO exit really needed here? or just a return? /**
* @todo exit really needed here? or just a return?
*/
exit; exit;
} }
@@ -716,10 +719,12 @@ class PMA_Table {
unset($table_query); unset($table_query);
} }
// garvin: [TODO] Can't get moving PDFs the right way. The page numbers always /**
// get screwed up independently from duplication because the numbers do not * @todo garvin: Can't get moving PDFs the right way. The page numbers
// seem to be stored on a per-database basis. Would the author of pdf support * always get screwed up independently from duplication because the
// please have a look at it? * numbers do not seem to be stored on a per-database basis. Would
* the author of pdf support please have a look at it?
*/
if ($GLOBALS['cfgRelation']['pdfwork']) { if ($GLOBALS['cfgRelation']['pdfwork']) {
$table_query = 'UPDATE ' . PMA_backquote($GLOBALS['cfgRelation']['db']) . '.' . PMA_backquote($GLOBALS['cfgRelation']['table_coords']) $table_query = 'UPDATE ' . PMA_backquote($GLOBALS['cfgRelation']['db']) . '.' . PMA_backquote($GLOBALS['cfgRelation']['table_coords'])
@@ -799,11 +804,13 @@ class PMA_Table {
$new_fields = array('foreign_db' => $target_db, 'foreign_table' => $target_table); $new_fields = array('foreign_db' => $target_db, 'foreign_table' => $target_table);
PMA_Table::duplicateInfo('relwork', 'relation', $get_fields, $where_fields, $new_fields); PMA_Table::duplicateInfo('relwork', 'relation', $get_fields, $where_fields, $new_fields);
// garvin: [TODO] Can't get duplicating PDFs the right way. The page numbers always /**
// get screwed up independently from duplication because the numbers do not * @todo garvin: Can't get duplicating PDFs the right way. The
// seem to be stored on a per-database basis. Would the author of pdf support * page numbers always get screwed up independently from
// please have a look at it? * duplication because the numbers do not seem to be stored on a
/* * per-database basis. Would the author of pdf support please
* have a look at it?
*
$get_fields = array('page_descr'); $get_fields = array('page_descr');
$where_fields = array('db_name' => $source_db); $where_fields = array('db_name' => $source_db);
$new_fields = array('db_name' => $target_db); $new_fields = array('db_name' => $target_db);
@@ -893,8 +900,9 @@ class PMA_Table {
$this->setName($new_name); $this->setName($new_name);
$this->setDbName($new_db); $this->setDbName($new_db);
// TODO move into extra function /**
// PMA_Relation::renameTable($new_name, $old_name, $new_db, $old_db) * @todo move into extra function PMA_Relation::renameTable($new_name, $old_name, $new_db, $old_db)
*/
// garvin: Move old entries from comments to new table // garvin: Move old entries from comments to new table
require_once './libraries/relation.lib.php'; require_once './libraries/relation.lib.php';
$GLOBALS['cfgRelation'] = PMA_getRelationsParam(); $GLOBALS['cfgRelation'] = PMA_getRelationsParam();

View File

@@ -99,10 +99,12 @@ function PMA_auth_fails()
echo "\n"; echo "\n";
$GLOBALS['is_header_sent'] = TRUE; $GLOBALS['is_header_sent'] = TRUE;
//TODO: I have included this div from libraries/header.inc.php to work around /**
// an undefined variable in tooltip.js, when the server * @todo I have included this div from libraries/header.inc.php to work around
// is not responding. Work has to be done to merge all code that * an undefined variable in tooltip.js, when the server is not responding.
// starts the page (DOCTYPE and this div) to one place * Work has to be done to merge all code that starts the page (DOCTYPE and
* this div) to one place
*/
?> ?>
<div id="TooltipContainer" onmouseover="holdTooltip();" onmouseout="swapTooltip('default');"></div> <div id="TooltipContainer" onmouseover="holdTooltip();" onmouseout="swapTooltip('default');"></div>
<?php <?php

View File

@@ -52,18 +52,20 @@ function PMA_analyseShowGrant($rs_usr, &$is_create_db_priv, &$db_to_create, &$is
$dbname_to_test = $show_grants_dbname; $dbname_to_test = $show_grants_dbname;
} }
if ( (ereg($re0 . '%|_', $show_grants_dbname) if ((ereg($re0 . '%|_', $show_grants_dbname)
&& !ereg('\\\\%|\\\\_', $show_grants_dbname)) && !ereg('\\\\%|\\\\_', $show_grants_dbname))
// does this db exist? // does this db exist?
|| (!PMA_DBI_try_query('USE ' . ereg_replace($re1 .'(%|_)', '\\1\\3', $dbname_to_test), null, PMA_DBI_QUERY_STORE) && substr(PMA_DBI_getError(), 1, 4) != 1044) || (!PMA_DBI_try_query('USE ' . ereg_replace($re1 .'(%|_)', '\\1\\3', $dbname_to_test), null, PMA_DBI_QUERY_STORE)
&& substr(PMA_DBI_getError(), 1, 4) != 1044)
) { ) {
$db_to_create = ereg_replace($re0 . '%', '\\1...', ereg_replace($re0 . '_', '\\1?', $show_grants_dbname)); $db_to_create = ereg_replace($re0 . '%', '\\1...', ereg_replace($re0 . '_', '\\1?', $show_grants_dbname));
$db_to_create = ereg_replace($re1 . '(%|_)', '\\1\\3', $db_to_create); $db_to_create = ereg_replace($re1 . '(%|_)', '\\1\\3', $db_to_create);
$is_create_db_priv = true; $is_create_db_priv = true;
// TODO: collect $db_to_create into an array, to display a drop-down /**
// in the "Create new database" dialog * @todo collect $db_to_create into an array, to display a
// * drop-down in the "Create new database" dialog
*/
// we don't break, we want all possible databases // we don't break, we want all possible databases
//break; //break;
} // end if } // end if

View File

@@ -800,9 +800,11 @@ if (!defined('PMA_MINIMUM_COMMON')) {
// get the duplicate entry // get the duplicate entry
// get table name // get table name
// TODO: what would be the best delimiter, while avoiding /**
// special characters that can become high-ascii after editing, * @todo what would be the best delimiter, while avoiding special
// depending upon which editor is used by the developer? * characters that can become high-ascii after editing, depending
* upon which editor is used by the developer?
*/
$error_table = array(); $error_table = array();
if (preg_match('@ALTER\s*TABLE\s*\`([^\`]+)\`@iu', $the_query, $error_table)) { if (preg_match('@ALTER\s*TABLE\s*\`([^\`]+)\`@iu', $the_query, $error_table)) {
$error_table = $error_table[1]; $error_table = $error_table[1];
@@ -1121,7 +1123,9 @@ if (!defined('PMA_MINIMUM_COMMON')) {
if (is_string($a_string)) { if (is_string($a_string)) {
$a_string = htmlspecialchars($a_string); $a_string = htmlspecialchars($a_string);
$a_string = PMA_escapeJsString($a_string); $a_string = PMA_escapeJsString($a_string);
// TODO: what is this good for? /**
* @todo what is this good for?
*/
$a_string = str_replace('#', '\\#', $a_string); $a_string = str_replace('#', '\\#', $a_string);
} }
@@ -1325,8 +1329,10 @@ window.parent.updateTableTitle('<?php echo $uni_tbl; ?>', '<?php echo PMA_jsForm
// Only append it on SELECTs. // Only append it on SELECTs.
// FIXME: what would be the best to do when someone /**
// hits Refresh: use the current LIMITs ? * @todo what would be the best to do when someone hits Refresh:
* use the current LIMITs ?
*/
if (isset($analyzed_display_query[0]['queryflags']['select_from']) if (isset($analyzed_display_query[0]['queryflags']['select_from'])
&& isset($GLOBALS['sql_limit_to_append'])) { && isset($GLOBALS['sql_limit_to_append'])) {
@@ -2308,7 +2314,7 @@ window.parent.updateTableTitle('<?php echo $uni_tbl; ?>', '<?php echo PMA_jsForm
} // end function } // end function
/** /**
* @TODO add documentation * @todo add documentation
*/ */
function PMA_userDir($dir) function PMA_userDir($dir)
{ {
@@ -2521,17 +2527,20 @@ if (empty($__redirect) && !defined('PMA_NO_VARIABLES_IMPORT')) {
*/ */
/** /**
* @global array $GLOBALS['PMA_errors'] holds errors * holds errors
* @global array $GLOBALS['PMA_errors']
*/ */
$GLOBALS['PMA_errors'] = array(); $GLOBALS['PMA_errors'] = array();
/** /**
* @global array $GLOBALS['url_params'] holds params to be passed to next page * holds params to be passed to next page
* @global array $GLOBALS['url_params']
*/ */
$GLOBALS['url_params'] = array(); $GLOBALS['url_params'] = array();
/** /**
* @global array $goto_whitelist the whitelist for $GLOBALS['goto'] * the whitelist for $GLOBALS['goto']
* @global array $goto_whitelist
*/ */
$goto_whitelist = array( $goto_whitelist = array(
//'browse_foreigners.php', //'browse_foreigners.php',
@@ -2605,7 +2614,8 @@ if (! PMA_checkPageValidity($__redirect, $goto_whitelist)) {
} }
/** /**
* @global string $GLOBALS['goto'] holds page that should be displayed * holds page that should be displayed
* @global string $GLOBALS['goto']
*/ */
// Security fix: disallow accessing serious server files via "?goto=" // Security fix: disallow accessing serious server files via "?goto="
if (PMA_checkPageValidity($_REQUEST['goto'], $goto_whitelist)) { if (PMA_checkPageValidity($_REQUEST['goto'], $goto_whitelist)) {
@@ -2617,7 +2627,8 @@ if (PMA_checkPageValidity($_REQUEST['goto'], $goto_whitelist)) {
} }
/** /**
* @global string $GLOBALS['back'] returning page * returning page
* @global string $GLOBALS['back']
*/ */
if (PMA_checkPageValidity($_REQUEST['back'], $goto_whitelist)) { if (PMA_checkPageValidity($_REQUEST['back'], $goto_whitelist)) {
$GLOBALS['back'] = $_REQUEST['back']; $GLOBALS['back'] = $_REQUEST['back'];
@@ -2633,7 +2644,7 @@ if (PMA_checkPageValidity($_REQUEST['back'], $goto_whitelist)) {
* could acces this variables before we reach this point * could acces this variables before we reach this point
* f.e. PMA_Config: fontsize * f.e. PMA_Config: fontsize
* *
* @todo: variables should be handled by their respective owners (objects) * @todo variables should be handled by their respective owners (objects)
* f.e. lang, server, convcharset, collation_connection in PMA_Config * f.e. lang, server, convcharset, collation_connection in PMA_Config
*/ */
if (! isset($_REQUEST['token']) || $_SESSION['PMA_token'] != $_REQUEST['token']) { if (! isset($_REQUEST['token']) || $_SESSION['PMA_token'] != $_REQUEST['token']) {
@@ -2662,14 +2673,15 @@ if (! isset($_REQUEST['token']) || $_SESSION['PMA_token'] != $_REQUEST['token'])
/** /**
* @global string $convcharset * @global string $convcharset
* @see also select_lang.lib.php * @see select_lang.lib.php
*/ */
if (isset($_REQUEST['convcharset'])) { if (isset($_REQUEST['convcharset'])) {
$convcharset = strip_tags($_REQUEST['convcharset']); $convcharset = strip_tags($_REQUEST['convcharset']);
} }
/** /**
* @global string $GLOBALS['db'] current selected database * current selected database
* @global string $GLOBALS['db']
*/ */
if (isset($_REQUEST['db'])) { if (isset($_REQUEST['db'])) {
// can we strip tags from this? // can we strip tags from this?
@@ -2681,7 +2693,8 @@ if (isset($_REQUEST['db'])) {
} }
/** /**
* @global string $GLOBALS['table'] current selected table * current selected table
* @global string $GLOBALS['table']
*/ */
if (isset($_REQUEST['table'])) { if (isset($_REQUEST['table'])) {
// can we strip tags from this? // can we strip tags from this?
@@ -2693,7 +2706,8 @@ if (isset($_REQUEST['table'])) {
} }
/** /**
* @global string $GLOBALS['sql_query'] sql query to be executed * sql query to be executed
* @global string $GLOBALS['sql_query']
*/ */
if (isset($_REQUEST['sql_query'])) { if (isset($_REQUEST['sql_query'])) {
$GLOBALS['sql_query'] = $_REQUEST['sql_query']; $GLOBALS['sql_query'] = $_REQUEST['sql_query'];
@@ -2730,7 +2744,7 @@ if (empty($_SESSION['PMA_Config'])) {
} elseif (version_compare(phpversion(), '5', 'lt')) { } elseif (version_compare(phpversion(), '5', 'lt')) {
/** /**
* @todo: move all __wakeup() functionality into session.inc.php * @todo move all __wakeup() functionality into session.inc.php
*/ */
$_SESSION['PMA_Config']->__wakeup(); $_SESSION['PMA_Config']->__wakeup();
} }
@@ -2850,7 +2864,7 @@ if (! isset($_SESSION['PMA_Theme_Manager'])) {
$_SESSION['PMA_Theme_Manager'] = new PMA_Theme_Manager; $_SESSION['PMA_Theme_Manager'] = new PMA_Theme_Manager;
} else { } else {
/** /**
* @todo: move all __wakeup() functionality into session.inc.php * @todo move all __wakeup() functionality into session.inc.php
*/ */
$_SESSION['PMA_Theme_Manager']->checkConfig(); $_SESSION['PMA_Theme_Manager']->checkConfig();
} }
@@ -2866,7 +2880,7 @@ if (isset($_REQUEST['server']) && !isset($_REQUEST['set_theme'])) {
unset($tmp); unset($tmp);
} }
/** /**
* @todo: move into PMA_Theme_Manager::__wakeup() * @todo move into PMA_Theme_Manager::__wakeup()
*/ */
if (isset($_REQUEST['set_theme'])) { if (isset($_REQUEST['set_theme'])) {
// if user selected a theme // if user selected a theme
@@ -2885,7 +2899,9 @@ $GLOBALS['pmaThemeImage'] = $_SESSION['PMA_Theme']->getImgPath();
*/ */
if (@file_exists($_SESSION['PMA_Theme']->getLayoutFile())) { if (@file_exists($_SESSION['PMA_Theme']->getLayoutFile())) {
include $_SESSION['PMA_Theme']->getLayoutFile(); include $_SESSION['PMA_Theme']->getLayoutFile();
// @todo remove if all themes are update use Navi instead of Left as frame name /**
* @todo remove if all themes are update use Navi instead of Left as frame name
*/
if (! isset($GLOBALS['cfg']['NaviWidth']) if (! isset($GLOBALS['cfg']['NaviWidth'])
&& isset($GLOBALS['cfg']['LeftWidth'])) { && isset($GLOBALS['cfg']['LeftWidth'])) {
$GLOBALS['cfg']['NaviWidth'] = $GLOBALS['cfg']['LeftWidth']; $GLOBALS['cfg']['NaviWidth'] = $GLOBALS['cfg']['LeftWidth'];
@@ -3080,7 +3096,7 @@ if (! defined('PMA_MINIMUM_COMMON')) {
/** /**
* save some settings in cookies * save some settings in cookies
* @todo: should be done in PMA_Config * @todo should be done in PMA_Config
*/ */
PMA_setCookie('pma_lang', $GLOBALS['lang']); PMA_setCookie('pma_lang', $GLOBALS['lang']);
PMA_setCookie('pma_charset', $GLOBALS['convcharset']); PMA_setCookie('pma_charset', $GLOBALS['convcharset']);

View File

@@ -535,8 +535,9 @@ $cfg['NaturalOrder'] = TRUE; // Sort table and database in natura
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// custom-setup by mkkeck: 2004-05-04 // custom-setup by mkkeck: 2004-05-04
// some specials for new icons and scrollings // some specials for new icons and scrollings
// FIXME: /**
// 2004-05-08 rabus: We need to rearrange these variables. * @todo 2004-05-08 rabus: We need to rearrange these variables.
*/
// Window title settings // Window title settings
$cfg['TitleTable'] = '@HTTP_HOST@ / @VSERVER@ / @DATABASE@ / @TABLE@ | @PHPMYADMIN@'; $cfg['TitleTable'] = '@HTTP_HOST@ / @VSERVER@ / @DATABASE@ / @TABLE@ | @PHPMYADMIN@';

View File

@@ -38,8 +38,10 @@ if ( ! PMA_DBI_checkAndLoadMysqlExtension( $GLOBALS['cfg']['Server']['extension'
// if it fails try alternative extension ... // if it fails try alternative extension ...
// and display an error ... // and display an error ...
// TODO 2.7.1: add different messages for alternativ extension /**
// and complete fail (no alternativ extension too) * @todo 2.7.1: add different messages for alternativ extension
* and complete fail (no alternativ extension too)
*/
$GLOBALS['PMA_errors'][] = $GLOBALS['PMA_errors'][] =
sprintf( PMA_sanitize( $GLOBALS['strCantLoad'] ), sprintf( PMA_sanitize( $GLOBALS['strCantLoad'] ),
$GLOBALS['cfg']['Server']['extension'] ) $GLOBALS['cfg']['Server']['extension'] )
@@ -165,8 +167,9 @@ function PMA_DBI_convert_message( $message ) {
} }
} }
} else { } else {
// lang not found, try all /**
// what TODO ? * @todo lang not found, try all, what TODO ?
*/
} }
return $message; return $message;
@@ -334,8 +337,9 @@ function PMA_DBI_get_tables_full($database, $table = false,
if ( strtoupper( $each_tables[$table_name]['Comment'] ) === 'VIEW' ) { if ( strtoupper( $each_tables[$table_name]['Comment'] ) === 'VIEW' ) {
$each_tables[$table_name]['TABLE_TYPE'] = 'VIEW'; $each_tables[$table_name]['TABLE_TYPE'] = 'VIEW';
} else { } else {
// TODO difference between 'TEMPORARY' and 'BASE TABLE' /**
// but how to detect? * @todo difference between 'TEMPORARY' and 'BASE TABLE' but how to detect?
*/
$each_tables[$table_name]['TABLE_TYPE'] = 'BASE TABLE'; $each_tables[$table_name]['TABLE_TYPE'] = 'BASE TABLE';
} }
} }
@@ -650,9 +654,13 @@ function PMA_DBI_get_columns_full($database = null, $table = null,
$columns[$column_name]['DATA_TYPE'] = $columns[$column_name]['DATA_TYPE'] =
substr($columns[$column_name]['COLUMN_TYPE'], 0, substr($columns[$column_name]['COLUMN_TYPE'], 0,
strpos($columns[$column_name]['COLUMN_TYPE'], '(')); strpos($columns[$column_name]['COLUMN_TYPE'], '('));
// @TODO guess CHARACTER_MAXIMUM_LENGTH from COLUMN_TYPE /**
* @todo guess CHARACTER_MAXIMUM_LENGTH from COLUMN_TYPE
*/
$columns[$column_name]['CHARACTER_MAXIMUM_LENGTH'] = null; $columns[$column_name]['CHARACTER_MAXIMUM_LENGTH'] = null;
// @TODO guess CHARACTER_OCTET_LENGTH from CHARACTER_MAXIMUM_LENGTH /**
* @todo guess CHARACTER_OCTET_LENGTH from CHARACTER_MAXIMUM_LENGTH
*/
$columns[$column_name]['CHARACTER_OCTET_LENGTH'] = null; $columns[$column_name]['CHARACTER_OCTET_LENGTH'] = null;
$columns[$column_name]['NUMERIC_PRECISION'] = null; $columns[$column_name]['NUMERIC_PRECISION'] = null;
$columns[$column_name]['NUMERIC_SCALE'] = null; $columns[$column_name]['NUMERIC_SCALE'] = null;
@@ -673,7 +681,7 @@ function PMA_DBI_get_columns_full($database = null, $table = null,
} }
/** /**
* @TODO should only return columns names, for more info use PMA_DBI_get_columns_full() * @todo should only return columns names, for more info use PMA_DBI_get_columns_full()
* *
* @deprecated by PMA_DBI_get_columns() or PMA_DBI_get_columns_full() * @deprecated by PMA_DBI_get_columns() or PMA_DBI_get_columns_full()
* @param string $database name of database * @param string $database name of database

View File

@@ -47,7 +47,9 @@ if (empty($is_table) && !defined('PMA_SUBMIT_MULT')) {
// (as it can happen just in case temporary table, it should be // (as it can happen just in case temporary table, it should be
// fast): // fast):
// @todo should this check really only happen if IS_TRANSFORMATION_WRAPPER? /**
* @todo should this check really only happen if IS_TRANSFORMATION_WRAPPER?
*/
$_result = PMA_DBI_try_query( $_result = PMA_DBI_try_query(
'SELECT COUNT(*) FROM `' . PMA_sqlAddslashes($table, true) . '`;', 'SELECT COUNT(*) FROM `' . PMA_sqlAddslashes($table, true) . '`;',
null, PMA_DBI_QUERY_STORE); null, PMA_DBI_QUERY_STORE);

View File

@@ -342,7 +342,7 @@ function PMA_DBI_affected_rows($link = null)
} }
/** /**
* @TODO add missing keys like in from mysqli_query (orgname, orgtable, flags, decimals) * @todo add missing keys like in from mysqli_query (orgname, orgtable, flags, decimals)
*/ */
function PMA_DBI_get_fields_meta($result) { function PMA_DBI_get_fields_meta($result) {
$fields = array(); $fields = array();

View File

@@ -171,7 +171,9 @@ function PMA_DBI_try_query($query, $link = null, $options = 0)
$result = mysqli_query($link, $query, $method); $result = mysqli_query($link, $query, $method);
if (mysqli_warning_count($link)) { if (mysqli_warning_count($link)) {
// TODO: check $method ? /**
* @todo check $method ?
*/
$warning_result = mysqli_query($link, 'SHOW WARNINGS'); $warning_result = mysqli_query($link, 'SHOW WARNINGS');
if ($warning_result) { if ($warning_result) {
$warning_row = mysqli_fetch_row($warning_result); $warning_row = mysqli_fetch_row($warning_result);
@@ -520,7 +522,7 @@ function PMA_DBI_affected_rows($link = null)
/** /**
* returns metainfo for fields in $result * returns metainfo for fields in $result
* *
* @TODO preserve orignal flags value * @todo preserve orignal flags value
* @uses PMA_DBI_field_flags() * @uses PMA_DBI_field_flags()
* @uses MYSQLI_TYPE_* * @uses MYSQLI_TYPE_*
* @uses MYSQLI_MULTIPLE_KEY_FLAG * @uses MYSQLI_MULTIPLE_KEY_FLAG

View File

@@ -104,7 +104,10 @@ function PMA_setDisplayMode(&$the_disp_mode, &$the_total)
} }
// 2.2 Statement is a "SHOW..." // 2.2 Statement is a "SHOW..."
elseif ($GLOBALS['is_show']) { elseif ($GLOBALS['is_show']) {
// 2.2.1 TODO : defines edit/delete links depending on show statement /**
* 2.2.1
* @todo defines edit/delete links depending on show statement
*/
$tmp = preg_match('@^SHOW[[:space:]]+(VARIABLES|(FULL[[:space:]]+)?PROCESSLIST|STATUS|TABLE|GRANTS|CREATE|LOGS|DATABASES|FIELDS)@i', $GLOBALS['sql_query'], $which); $tmp = preg_match('@^SHOW[[:space:]]+(VARIABLES|(FULL[[:space:]]+)?PROCESSLIST|STATUS|TABLE|GRANTS|CREATE|LOGS|DATABASES|FIELDS)@i', $GLOBALS['sql_query'], $which);
if (isset($which[1]) && strpos(' ' . strtoupper($which[1]), 'PROCESSLIST') > 0) { if (isset($which[1]) && strpos(' ' . strtoupper($which[1]), 'PROCESSLIST') > 0) {
$do_display['edit_lnk'] = 'nn'; // no edit link $do_display['edit_lnk'] = 'nn'; // no edit link
@@ -138,8 +141,9 @@ function PMA_setDisplayMode(&$the_disp_mode, &$the_total)
&& ($fields_meta[$i]->table == '' || $fields_meta[$i]->table != $prev_table)) { && ($fields_meta[$i]->table == '' || $fields_meta[$i]->table != $prev_table)) {
$do_display['edit_lnk'] = 'nn'; // don't display links $do_display['edit_lnk'] = 'nn'; // don't display links
$do_display['del_lnk'] = 'nn'; $do_display['del_lnk'] = 'nn';
// TODO: May be problematic with same fields names in /**
// two joined table. * @todo May be problematic with same fields names in two joined table.
*/
// $do_display['sort_lnk'] = (string) '0'; // $do_display['sort_lnk'] = (string) '0';
$do_display['ins_row'] = (string) '0'; $do_display['ins_row'] = (string) '0';
if ($do_display['text_btn'] == '1') { if ($do_display['text_btn'] == '1') {
@@ -219,8 +223,10 @@ function PMA_displayTableNavigation($pos_next, $pos_prev, $encoded_query)
global $is_innodb; global $is_innodb;
global $showtable; global $showtable;
// FIXME: move this to a central place /**
// FIXME: for other future table types * @todo move this to a central place
* @todo for other future table types
*/
$is_innodb = (isset($showtable['Type']) && $showtable['Type'] == 'InnoDB'); $is_innodb = (isset($showtable['Type']) && $showtable['Type'] == 'InnoDB');
?> ?>
@@ -479,7 +485,10 @@ function PMA_displayTableHeaders(&$is_display, &$fields_meta, $fields_cnt = 0, $
$sort_expression = trim(str_replace(' ', ' ', $analyzed_sql[0]['order_by_clause'])); $sort_expression = trim(str_replace(' ', ' ', $analyzed_sql[0]['order_by_clause']));
// Get rid of ASC|DESC (TODO: analyzer) /**
* Get rid of ASC|DESC
* @todo analyzer
*/
preg_match('@(.*)([[:space:]]*(ASC|DESC))@si', $sort_expression, $matches); preg_match('@(.*)([[:space:]]*(ASC|DESC))@si', $sort_expression, $matches);
$sort_expression_nodir = isset($matches[1]) ? trim($matches[1]) : $sort_expression; $sort_expression_nodir = isset($matches[1]) ? trim($matches[1]) : $sort_expression;

View File

@@ -217,8 +217,10 @@ class PMA_PDF extends PMA_FPDF
$this->$key = $val ; $this->$key = $val ;
} }
// Pass 1 for column widths /**
// TODO: force here a LIMIT to speed up pass 1 ? * Pass 1 for column widths
* @todo force here a LIMIT to speed up pass 1 ?
*/
$this->results = PMA_DBI_query($query, null, PMA_DBI_QUERY_UNBUFFERED); $this->results = PMA_DBI_query($query, null, PMA_DBI_QUERY_UNBUFFERED);
$this->numFields = PMA_DBI_num_fields($this->results); $this->numFields = PMA_DBI_num_fields($this->results);
$this->fields = PMA_DBI_get_fields_meta($this->results); $this->fields = PMA_DBI_get_fields_meta($this->results);
@@ -248,8 +250,10 @@ class PMA_PDF extends PMA_FPDF
case 'tinyblob': case 'tinyblob':
case 'mediumblob': case 'mediumblob':
case 'longblob': case 'longblob':
//TODO: do not deactivate completely the display /**
// but show the field's name and [BLOB] * @todo do not deactivate completely the display
* but show the field's name and [BLOB]
*/
if (stristr($this->fields[$i]->flags, 'BINARY')) { if (stristr($this->fields[$i]->flags, 'BINARY')) {
$this->display_column[$i] = false; $this->display_column[$i] = false;
unset($this->colTitles[$i]); unset($this->colTitles[$i]);
@@ -396,6 +400,7 @@ function PMA_exportDBCreate($db)
/** /**
* Outputs the content of a table in PDF format * Outputs the content of a table in PDF format
* *
* @todo user-defined page orientation, paper size
* @param string the database name * @param string the database name
* @param string the table name * @param string the table name
* @param string the end of line sequence * @param string the end of line sequence
@@ -411,7 +416,6 @@ function PMA_exportData($db, $table, $crlf, $error_url, $sql_query)
global $what; global $what;
global $pdf_report_title; global $pdf_report_title;
// TODO: user-defined page orientation, paper size
$pdf = new PMA_PDF('L', 'pt', 'A3'); $pdf = new PMA_PDF('L', 'pt', 'A3');
$pdf->AddFont('FreeSans', '', 'FreeSans.php'); $pdf->AddFont('FreeSans', '', 'FreeSans.php');

View File

@@ -177,7 +177,9 @@ function PMA_exportData($db, $table, $crlf, $error_url, $sql_query)
if (!isset($row[$j]) || is_null($row[$j])) { if (!isset($row[$j]) || is_null($row[$j])) {
$worksheet->write($col, $j, $GLOBALS['xls_null']); $worksheet->write($col, $j, $GLOBALS['xls_null']);
} elseif ($row[$j] == '0' || $row[$j] != '') { } elseif ($row[$j] == '0' || $row[$j] != '') {
// FIXME: we should somehow handle character set here! /**
* @todo we should somehow handle character set here!
*/
$worksheet->write($col, $j, $row[$j]); $worksheet->write($col, $j, $row[$j]);
} else { } else {
$worksheet->write($col, $j, ''); $worksheet->write($col, $j, '');

View File

@@ -252,10 +252,13 @@ function PMA_importGetNextChunk($size = 32768)
if ($charset_conversion) { if ($charset_conversion) {
return PMA_convert_string($charset_of_file, $charset, $result); return PMA_convert_string($charset_of_file, $charset, $result);
} else { } else {
// Skip possible byte order marks (I do not think we need more /**
// charsets, but feel free to add more, you can use wikipedia for * Skip possible byte order marks (I do not think we need more
// reference: <http://en.wikipedia.org/wiki/Byte_Order_Mark>) * charsets, but feel free to add more, you can use wikipedia for
// @TODO: BOM could be used for charset autodetection * reference: <http://en.wikipedia.org/wiki/Byte_Order_Mark>)
*
* @todo BOM could be used for charset autodetection
*/
if ($offset == $size) { if ($offset == $size) {
// UTF-8 // UTF-8
if (strncmp($result, "\xEF\xBB\xBF", 3) == 0) { if (strncmp($result, "\xEF\xBB\xBF", 3) == 0) {

View File

@@ -258,7 +258,9 @@ if ($plugin_param == 'table') {
} }
$sql .= ')'; $sql .= ')';
// FIXME: maybe we could add original line to verbose SQL in comment /**
* @todo maybe we could add original line to verbose SQL in comment
*/
PMA_importRunQuery($sql, $sql); PMA_importRunQuery($sql, $sql);
$line++; $line++;
$csv_finish = FALSE; $csv_finish = FALSE;

View File

@@ -25,11 +25,12 @@ $is_select = isset($analyzed_sql[0]['queryflags']['select_from']);
// db and table name may be enclosed with backquotes, db is optionnal, // db and table name may be enclosed with backquotes, db is optionnal,
// query may contain aliases. // query may contain aliases.
// (TODO: if there are more than one table name in the Select: /**
// - do not extract the first table name * @todo if there are more than one table name in the Select:
// - do not show a table name in the page header * - do not extract the first table name
// - do not display the sub-pages links) * - do not show a table name in the page header
* - do not display the sub-pages links)
*/
if ($is_select) { if ($is_select) {
$prev_db = $db; $prev_db = $db;
if (isset($analyzed_sql[0]['table_ref'][0]['table_true_name'])) { if (isset($analyzed_sql[0]['table_ref'][0]['table_true_name'])) {

View File

@@ -69,7 +69,9 @@ function PMA_select_server($not_only_options, $ommit_fieldset)
// value, displaying such informations may not be a so good // value, displaying such informations may not be a so good
// idea // idea
if (!empty($server['only_db'])) { if (!empty($server['only_db'])) {
// TODO FIXME this can become a really big/long/wide selectbox ... /**
* @todo this can become a really big/long/wide selectbox ...
*/
$label .= ' - ' . (is_array($server['only_db']) ? implode(', ', $server['only_db']) : $server['only_db']); $label .= ' - ' . (is_array($server['only_db']) ? implode(', ', $server['only_db']) : $server['only_db']);
} }
if (!empty($server['user']) && $server['auth_type'] == 'config') { if (!empty($server['user']) && $server['auth_type'] == 'config') {

View File

@@ -4,8 +4,8 @@
/** /**
* session handling * session handling
* *
* @TODO add failover or warn if sessions are not configured properly * @todo add failover or warn if sessions are not configured properly
* @TODO add an option to use mm-module for session handler * @todo add an option to use mm-module for session handler
* @see http://www.php.net/session * @see http://www.php.net/session
* @uses session_name() * @uses session_name()
* @uses session_start() * @uses session_start()

View File

@@ -381,10 +381,11 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
if (PMA_STR_isSqlIdentifier($c, FALSE) || ($c == '@') || ($c == '.' && PMA_STR_isDigit(PMA_substr($sql, $count2 + 1, 1)))) { if (PMA_STR_isSqlIdentifier($c, FALSE) || ($c == '@') || ($c == '.' && PMA_STR_isDigit(PMA_substr($sql, $count2 + 1, 1)))) {
$count2 ++; $count2 ++;
//TODO: a @ can also be present in expressions like /**
// FROM 'user'@'%' * @todo a @ can also be present in expressions like
// or TO 'user'@'%' * FROM 'user'@'%' or TO 'user'@'%'
// in this case, the @ is wrongly marked as alpha_variable * in this case, the @ is wrongly marked as alpha_variable
*/
$is_sql_variable = ($c == '@'); $is_sql_variable = ($c == '@');
$is_digit = (!$is_sql_variable) && PMA_STR_isDigit($c); $is_digit = (!$is_sql_variable) && PMA_STR_isDigit($c);
@@ -523,9 +524,11 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
} elseif (($last == '-') || ($last == '+') || ($last == '!')) { } elseif (($last == '-') || ($last == '+') || ($last == '!')) {
$count2--; $count2--;
$punct_data = PMA_substr($sql, $count1, $count2 - $count1); $punct_data = PMA_substr($sql, $count1, $count2 - $count1);
// TODO: for negation operator, split in 2 tokens ? /**
// "select x&~1 from t" * @todo for negation operator, split in 2 tokens ?
// becomes "select x & ~ 1 from t" ? * "select x&~1 from t"
* becomes "select x & ~ 1 from t" ?
*/
} elseif ($last != '~') { } elseif ($last != '~') {
$debugstr = $GLOBALS['strSQPBugUnknownPunctuation'] . ' @ ' . ($count1+1) . "\n" $debugstr = $GLOBALS['strSQPBugUnknownPunctuation'] . ' @ ' . ($count1+1) . "\n"
@@ -593,17 +596,22 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
$t_suffix = '_identifier'; $t_suffix = '_identifier';
} elseif (($t_next == 'punct_bracket_open_round') } elseif (($t_next == 'punct_bracket_open_round')
&& PMA_STR_binarySearchInArr($d_cur_upper, $PMA_SQPdata_function_name, $PMA_SQPdata_function_name_cnt)) { && PMA_STR_binarySearchInArr($d_cur_upper, $PMA_SQPdata_function_name, $PMA_SQPdata_function_name_cnt)) {
// FIXME-2005-10-16: in the case of a CREATE TABLE containing a TIMESTAMP, /**
// since TIMESTAMP() is also a function, it's found here and * @todo 2005-10-16: in the case of a CREATE TABLE containing
// the token is wrongly marked as alpha_functionName. But we * a TIMESTAMP, since TIMESTAMP() is also a function, it's
// compensate for this when analysing for timestamp_not_null * found here and the token is wrongly marked as alpha_functionName.
// later in this script. * But we compensate for this when analysing for timestamp_not_null
* later in this script.
*/
$t_suffix = '_functionName'; $t_suffix = '_functionName';
} elseif (PMA_STR_binarySearchInArr($d_cur_upper, $PMA_SQPdata_column_type, $PMA_SQPdata_column_type_cnt)) { } elseif (PMA_STR_binarySearchInArr($d_cur_upper, $PMA_SQPdata_column_type, $PMA_SQPdata_column_type_cnt)) {
$t_suffix = '_columnType'; $t_suffix = '_columnType';
// Temporary fix for BUG #621357 /**
//TODO FIX PROPERLY NEEDS OVERHAUL OF SQL TOKENIZER * Temporary fix for BUG #621357
*
* @todo FIX PROPERLY NEEDS OVERHAUL OF SQL TOKENIZER
*/
if ($d_cur_upper == 'SET' && $t_next != 'punct_bracket_open_round') { if ($d_cur_upper == 'SET' && $t_next != 'punct_bracket_open_round') {
$t_suffix = '_reservedWord'; $t_suffix = '_reservedWord';
} }
@@ -915,10 +923,10 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
} // end if (type == punct_queryend) } // end if (type == punct_queryend)
} // end if ($seek_queryend) } // end if ($seek_queryend)
// TODO: when we find a UNION, should we split /**
// in another subresult? * Note: do not split if this is a punct_queryend for the first and only query
// Note: do not split if this is a punct_queryend for the * @todo when we find a UNION, should we split in another subresult?
// first and only query */
if ($arr[$i]['type'] == 'punct_queryend' && ($i + 1 != $size)) { if ($arr[$i]['type'] == 'punct_queryend' && ($i + 1 != $size)) {
$result[] = $subresult; $result[] = $subresult;
$subresult = $subresult_empty; $subresult = $subresult_empty;
@@ -980,7 +988,9 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
// upper once // upper once
$upper_data = strtoupper($arr[$i]['data']); $upper_data = strtoupper($arr[$i]['data']);
//TODO: reset for each query? /**
* @todo reset for each query?
*/
if ($upper_data == 'SELECT') { if ($upper_data == 'SELECT') {
$seen_from = FALSE; $seen_from = FALSE;
@@ -1011,14 +1021,13 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
switch ($arr[$i]['type']) { switch ($arr[$i]['type']) {
case 'alpha_identifier': case 'alpha_identifier':
case 'alpha_reservedWord': case 'alpha_reservedWord':
// this is not a real reservedWord, because /**
// it's not present in the list of forbidden words, * this is not a real reservedWord, because it's not
// for example "storage" which can be used as * present in the list of forbidden words, for example
// an identifier * "storage" which can be used as an identifier
// *
// TODO: avoid the pretty printing in color * @todo avoid the pretty printing in color in this case
// in this case */
$identifier = $arr[$i]['data']; $identifier = $arr[$i]['data'];
break; break;
@@ -1067,7 +1076,9 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
continue; continue;
} // end if (punct_qualifier) } // end if (punct_qualifier)
// TODO: check if 3 identifiers following one another -> error /**
* @todo check if 3 identifiers following one another -> error
*/
// s a v e a s e l e c t e x p r // s a v e a s e l e c t e x p r
// finding a list separator or FROM // finding a list separator or FROM
@@ -1122,7 +1133,9 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
} // end if ($size_chain > 2) } // end if ($size_chain > 2)
unset($chain); unset($chain);
// TODO: explain this: /**
* @todo explain this:
*/
if (($arr[$i]['type'] == 'alpha_reservedWord') if (($arr[$i]['type'] == 'alpha_reservedWord')
&& ($upper_data != 'FROM')) { && ($upper_data != 'FROM')) {
$previous_was_identifier = TRUE; $previous_was_identifier = TRUE;
@@ -1137,9 +1150,11 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
// maybe we just saw the end of table refs // maybe we just saw the end of table refs
// but the last table ref has to be saved // but the last table ref has to be saved
// or we are at the last token (TODO: there could be another // or we are at the last token
// query after this one)
// or we just got a reserved word // or we just got a reserved word
/**
* @todo there could be another query after this one
*/
if (isset($chain) && $seen_from && $save_table_ref if (isset($chain) && $seen_from && $save_table_ref
&& ($arr[$i]['type'] == 'punct_listsep' && ($arr[$i]['type'] == 'punct_listsep'
@@ -1230,8 +1245,11 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
$save_table_ref = TRUE; $save_table_ref = TRUE;
} // end if (data == JOIN) } // end if (data == JOIN)
// no need to check the end of table ref if we already did /**
// TODO: maybe add "&& $seen_from" * no need to check the end of table ref if we already did
*
* @todo maybe add "&& $seen_from"
*/
if (!$seen_end_of_table_ref) { if (!$seen_end_of_table_ref) {
// if this is the last token, it implies that we have // if this is the last token, it implies that we have
// seen the end of table references // seen the end of table references
@@ -1332,10 +1350,10 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
// //
// this code is not used for confirmations coming from functions.js // this code is not used for confirmations coming from functions.js
// TODO: check for punct_queryend /**
* @todo check for punct_queryend
* @todo verify C-style comments?
// TODO: verify C-style comments? */
if ($arr[$i]['type'] == 'comment_ansi') { if ($arr[$i]['type'] == 'comment_ansi') {
$collect_section_before_limit = FALSE; $collect_section_before_limit = FALSE;
} }
@@ -1368,10 +1386,9 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
if ($upper_data == 'PROCEDURE') { if ($upper_data == 'PROCEDURE') {
$collect_section_before_limit = FALSE; $collect_section_before_limit = FALSE;
} }
// TODO: set also to FALSE if we find /**
// FOR UPDATE * @todo set also to FALSE if we find FOR UPDATE or LOCK IN SHARE MODE
// LOCK IN SHARE MODE */
if ($upper_data == 'SELECT') { if ($upper_data == 'SELECT') {
$in_select_expr = TRUE; $in_select_expr = TRUE;
$select_expr_clause = ''; $select_expr_clause = '';
@@ -1475,10 +1492,11 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
// do not add a blank after a function name // do not add a blank after a function name
// TODO: can we combine loop 2 and loop 1? /**
// some code is repeated here... * @todo can we combine loop 2 and loop 1? some code is repeated here...
*/
$sep=' '; $sep = ' ';
if ($arr[$i]['type'] == 'alpha_functionName') { if ($arr[$i]['type'] == 'alpha_functionName') {
$sep=''; $sep='';
$upper_data = strtoupper($arr[$i]['data']); $upper_data = strtoupper($arr[$i]['data']);
@@ -1712,8 +1730,9 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
} }
} }
// note: the "or" part here is a workaround for a bug /**
// (see FIXME-2005-10-16) * @see @todo 2005-10-16 note: the "or" part here is a workaround for a bug
*/
if (($arr[$i]['type'] == 'alpha_columnType') || ($arr[$i]['type'] == 'alpha_functionName' && $seen_create_table)) { if (($arr[$i]['type'] == 'alpha_columnType') || ($arr[$i]['type'] == 'alpha_functionName' && $seen_create_table)) {
$upper_data = strtoupper($arr[$i]['data']); $upper_data = strtoupper($arr[$i]['data']);
if ($seen_create_table && $in_create_table_fields && isset($current_identifier)) { if ($seen_create_table && $in_create_table_fields && isset($current_identifier)) {
@@ -1835,6 +1854,8 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
/** /**
* Colorizes SQL queries html formatted * Colorizes SQL queries html formatted
* *
* @todo check why adding a "\n" after the </span> would cause extra blanks
* to be displayed: SELECT p . person_name
* @param array The SQL queries html formatted * @param array The SQL queries html formatted
* *
* @return array The colorized SQL queries * @return array The colorized SQL queries
@@ -1851,10 +1872,6 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
$class .= 'syntax_' . $arr['type']; $class .= 'syntax_' . $arr['type'];
//TODO: check why adding a "\n" after the </span> would cause extra
// blanks to be displayed:
// SELECT p . person_name
return '<span class="' . $class . '">' . htmlspecialchars($arr['data']) . '</span>'; return '<span class="' . $class . '">' . htmlspecialchars($arr['data']) . '</span>';
} // end of the "PMA_SQP_formatHtml_colorize()" function } // end of the "PMA_SQP_formatHtml_colorize()" function
@@ -2137,8 +2154,9 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
// the quote_single exception is there to // the quote_single exception is there to
// catch cases like // catch cases like
// GRANT ... TO 'marc'@'domain.com' IDENTIFIED... // GRANT ... TO 'marc'@'domain.com' IDENTIFIED...
// /**
// TODO: fix all cases and find why this happens * @todo fix all cases and find why this happens
*/
if (!$in_priv_list || $typearr[1] == 'alpha_identifier' || $typearr[1] == 'quote_single' || $typearr[1] == 'white_newline') { if (!$in_priv_list || $typearr[1] == 'alpha_identifier' || $typearr[1] == 'quote_single' || $typearr[1] == 'white_newline') {
$before .= $space_alpha_reserved_word; $before .= $space_alpha_reserved_word;
@@ -2201,7 +2219,9 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
case 'digit_integer': case 'digit_integer':
case 'digit_float': case 'digit_float':
case 'digit_hex': case 'digit_hex':
//TODO: could there be other types preceding a digit? /**
* @todo could there be other types preceding a digit?
*/
if ($typearr[1] == 'alpha_reservedWord') { if ($typearr[1] == 'alpha_reservedWord') {
$after .= ' '; $after .= ' ';
} }
@@ -2335,6 +2355,7 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
/** /**
* Gets SQL queries in text format * Gets SQL queries in text format
* *
* @todo WRITE THIS!
* @param array The SQL queries list * @param array The SQL queries list
* *
* @return string The SQL queries in text format * @return string The SQL queries in text format
@@ -2343,9 +2364,6 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
*/ */
function PMA_SQP_formatText($arr) function PMA_SQP_formatText($arr)
{ {
/**
* TODO WRITE THIS!
*/
return PMA_SQP_formatNone($arr); return PMA_SQP_formatNone($arr);
} // end of the "PMA_SQP_formatText()" function } // end of the "PMA_SQP_formatText()" function
} // end if: minimal common.lib needed? } // end if: minimal common.lib needed?

View File

@@ -7,7 +7,7 @@ require_once './libraries/Table.class.php';
/** /**
* extracts table properties from create statement * extracts table properties from create statement
* *
* @TODO this should be recoded as functions, * @todo this should be recoded as functions,
* to avoid messing with global variables * to avoid messing with global variables
*/ */

View File

@@ -191,7 +191,11 @@ if ($server > 0) {
PMA_printListItem($strImport, 'li_import', PMA_printListItem($strImport, 'li_import',
'./server_import.php?' . $common_url_query); './server_import.php?' . $common_url_query);
// Change password (TODO ? needs another message) /**
* Change password
*
* @todo ? needs another message
*/
if ($cfg['ShowChgPassword']) { if ($cfg['ShowChgPassword']) {
PMA_printListItem($strChangePassword, 'li_change_password', PMA_printListItem($strChangePassword, 'li_change_password',
'./user_password.php?' . $common_url_query); './user_password.php?' . $common_url_query);

View File

@@ -1265,7 +1265,9 @@ function PMA_RT_DOC($alltables)
$comments_width = 67; $comments_width = 67;
} else { } else {
// this is really intended for 'letter' // this is really intended for 'letter'
// TODO: find optimal width for all formats /**
* @todo find optimal width for all formats
*/
$comments_width = 50; $comments_width = 50;
} }
$pdf->Cell($comments_width, 8, ucfirst($GLOBALS['strComments']), 1, 0, 'C'); $pdf->Cell($comments_width, 8, ucfirst($GLOBALS['strComments']), 1, 0, 'C');

View File

@@ -34,10 +34,10 @@ echo '<h2>' . "\n"
/** /**
* Checks the MySQL version * exits if wrong MySQL version
* @todo Some nice Message :-)
*/ */
if (PMA_MYSQL_INT_VERSION < 40100) { if (PMA_MYSQL_INT_VERSION < 40100) {
// TODO: Some nice Message :-)
require_once('./libraries/footer.inc.php'); require_once('./libraries/footer.inc.php');
} }

View File

@@ -783,7 +783,9 @@ if (!empty($adduser_submit) || !empty($change_copy)) {
$create_user_show = $create_user_real; $create_user_show = $create_user_real;
} }
} }
// FIXME: similar code appears twice in this script /**
* @todo similar code appears twice in this script
*/
if ((isset($Grant_priv) && $Grant_priv == 'Y') || (PMA_MYSQL_INT_VERSION >= 40002 && (isset($max_questions) || isset($max_connections) || isset($max_updates) || isset($max_user_connections)))) { if ((isset($Grant_priv) && $Grant_priv == 'Y') || (PMA_MYSQL_INT_VERSION >= 40002 && (isset($max_questions) || isset($max_connections) || isset($max_updates) || isset($max_user_connections)))) {
$real_sql_query .= 'WITH'; $real_sql_query .= 'WITH';
$sql_query .= 'WITH'; $sql_query .= 'WITH';
@@ -989,7 +991,9 @@ if (!empty($update_privs)) {
. ' ON ' . $db_and_table . ' ON ' . $db_and_table
. ' TO \'' . PMA_sqlAddslashes($username) . '\'@\'' . $hostname . '\''; . ' TO \'' . PMA_sqlAddslashes($username) . '\'@\'' . $hostname . '\'';
// FIXME: similar code appears twice in this script /**
* @todo similar code appears twice in this script
*/
if ( ( isset($Grant_priv) && $Grant_priv == 'Y') if ( ( isset($Grant_priv) && $Grant_priv == 'Y')
|| ( ( ! isset($dbname) || ! strlen($dbname) ) && PMA_MYSQL_INT_VERSION >= 40002 || ( ( ! isset($dbname) || ! strlen($dbname) ) && PMA_MYSQL_INT_VERSION >= 40002
&& ( isset($max_questions) || isset($max_connections) && ( isset($max_questions) || isset($max_connections)

135
sql.php
View File

@@ -221,75 +221,84 @@ if ($do_confirm) {
<?php <?php
echo '</fieldset>' . "\n" echo '</fieldset>' . "\n"
. '</form>' . "\n"; . '</form>' . "\n";
/**
* Displays the footer and exit
*/
require_once './libraries/footer.inc.php';
} // end if $do_confirm } // end if $do_confirm
/** /**
* Executes the query and displays results * Executes the query and displays results
*/ */
else { if (!isset($sql_query)) {
if (!isset($sql_query)) {
$sql_query = ''; $sql_query = '';
} }
// Defines some variables
// A table has to be created or renamed -> left frame should be reloaded
// TODO: use the parser/analyzer
if (empty($reload) // Defines some variables
// A table has to be created or renamed -> left frame should be reloaded
/**
* @todo use the parser/analyzer
*/
if (empty($reload)
&& preg_match('/^(CREATE|ALTER|DROP)\s+(VIEW|TABLE|DATABASE|SCHEMA)\s+/i', $sql_query)) { && preg_match('/^(CREATE|ALTER|DROP)\s+(VIEW|TABLE|DATABASE|SCHEMA)\s+/i', $sql_query)) {
$reload = 1; $reload = 1;
} }
// Gets the number of rows per page // Gets the number of rows per page
if (empty($session_max_rows)) { if (empty($session_max_rows)) {
$session_max_rows = $cfg['MaxRows']; $session_max_rows = $cfg['MaxRows'];
} elseif ($session_max_rows != 'all') { } elseif ($session_max_rows != 'all') {
$cfg['MaxRows'] = $session_max_rows; $cfg['MaxRows'] = $session_max_rows;
} }
// Defines the display mode (horizontal/vertical) and header "frequency" // Defines the display mode (horizontal/vertical) and header "frequency"
if (empty($disp_direction)) { if (empty($disp_direction)) {
$disp_direction = $cfg['DefaultDisplay']; $disp_direction = $cfg['DefaultDisplay'];
} }
if (empty($repeat_cells)) { if (empty($repeat_cells)) {
$repeat_cells = $cfg['RepeatCells']; $repeat_cells = $cfg['RepeatCells'];
} }
// SK -- Patch: $is_group added for use in calculation of total number of // SK -- Patch: $is_group added for use in calculation of total number of
// rows. // rows.
// $is_count is changed for more correct "LIMIT" clause // $is_count is changed for more correct "LIMIT" clause
// appending in queries like // appending in queries like
// "SELECT COUNT(...) FROM ... GROUP BY ..." // "SELECT COUNT(...) FROM ... GROUP BY ..."
// TODO: detect all this with the parser, to avoid problems finding /**
// those strings in comments or backquoted identifiers * @todo detect all this with the parser, to avoid problems finding
* those strings in comments or backquoted identifiers
*/
$is_explain = $is_count = $is_export = $is_delete = $is_insert = $is_affected = $is_show = $is_maint = $is_analyse = $is_group = $is_func = $is_replace = false; $is_explain = $is_count = $is_export = $is_delete = $is_insert = $is_affected = $is_show = $is_maint = $is_analyse = $is_group = $is_func = $is_replace = false;
if ($is_select) { // see line 141 if ($is_select) { // see line 141
$is_group = preg_match('@(GROUP[[:space:]]+BY|HAVING|SELECT[[:space:]]+DISTINCT)[[:space:]]+@i', $sql_query); $is_group = preg_match('@(GROUP[[:space:]]+BY|HAVING|SELECT[[:space:]]+DISTINCT)[[:space:]]+@i', $sql_query);
$is_func = !$is_group && (preg_match('@[[:space:]]+(SUM|AVG|STD|STDDEV|MIN|MAX|BIT_OR|BIT_AND)\s*\(@i', $sql_query)); $is_func = !$is_group && (preg_match('@[[:space:]]+(SUM|AVG|STD|STDDEV|MIN|MAX|BIT_OR|BIT_AND)\s*\(@i', $sql_query));
$is_count = !$is_group && (preg_match('@^SELECT[[:space:]]+COUNT\((.*\.+)?.*\)@i', $sql_query)); $is_count = !$is_group && (preg_match('@^SELECT[[:space:]]+COUNT\((.*\.+)?.*\)@i', $sql_query));
$is_export = (preg_match('@[[:space:]]+INTO[[:space:]]+OUTFILE[[:space:]]+@i', $sql_query)); $is_export = (preg_match('@[[:space:]]+INTO[[:space:]]+OUTFILE[[:space:]]+@i', $sql_query));
$is_analyse = (preg_match('@[[:space:]]+PROCEDURE[[:space:]]+ANALYSE@i', $sql_query)); $is_analyse = (preg_match('@[[:space:]]+PROCEDURE[[:space:]]+ANALYSE@i', $sql_query));
} elseif (preg_match('@^EXPLAIN[[:space:]]+@i', $sql_query)) { } elseif (preg_match('@^EXPLAIN[[:space:]]+@i', $sql_query)) {
$is_explain = true; $is_explain = true;
} elseif (preg_match('@^DELETE[[:space:]]+@i', $sql_query)) { } elseif (preg_match('@^DELETE[[:space:]]+@i', $sql_query)) {
$is_delete = true; $is_delete = true;
$is_affected = true; $is_affected = true;
} elseif (preg_match('@^(INSERT|LOAD[[:space:]]+DATA|REPLACE)[[:space:]]+@i', $sql_query)) { } elseif (preg_match('@^(INSERT|LOAD[[:space:]]+DATA|REPLACE)[[:space:]]+@i', $sql_query)) {
$is_insert = true; $is_insert = true;
$is_affected = true; $is_affected = true;
if (preg_match('@^(REPLACE)[[:space:]]+@i', $sql_query)) { if (preg_match('@^(REPLACE)[[:space:]]+@i', $sql_query)) {
$is_replace = true; $is_replace = true;
} }
} elseif (preg_match('@^UPDATE[[:space:]]+@i', $sql_query)) { } elseif (preg_match('@^UPDATE[[:space:]]+@i', $sql_query)) {
$is_affected = true; $is_affected = true;
} elseif (preg_match('@^SHOW[[:space:]]+@i', $sql_query)) { } elseif (preg_match('@^SHOW[[:space:]]+@i', $sql_query)) {
$is_show = true; $is_show = true;
} elseif (preg_match('@^(CHECK|ANALYZE|REPAIR|OPTIMIZE)[[:space:]]+TABLE[[:space:]]+@i', $sql_query)) { } elseif (preg_match('@^(CHECK|ANALYZE|REPAIR|OPTIMIZE)[[:space:]]+TABLE[[:space:]]+@i', $sql_query)) {
$is_maint = true; $is_maint = true;
} }
// Do append a "LIMIT" clause? // Do append a "LIMIT" clause?
if (isset($pos) if (isset($pos)
&& (!$cfg['ShowAll'] || $session_max_rows != 'all') && (!$cfg['ShowAll'] || $session_max_rows != 'all')
&& !($is_count || $is_export || $is_func || $is_analyse) && !($is_count || $is_export || $is_func || $is_analyse)
&& isset($analyzed_sql[0]['queryflags']['select_from']) && isset($analyzed_sql[0]['queryflags']['select_from'])
@@ -298,8 +307,9 @@ else {
$sql_limit_to_append = " LIMIT $pos, ".$cfg['MaxRows'] . " "; $sql_limit_to_append = " LIMIT $pos, ".$cfg['MaxRows'] . " ";
$full_sql_query = $analyzed_sql[0]['section_before_limit'] . "\n" . $sql_limit_to_append . $analyzed_sql[0]['section_after_limit']; $full_sql_query = $analyzed_sql[0]['section_before_limit'] . "\n" . $sql_limit_to_append . $analyzed_sql[0]['section_after_limit'];
// FIXME: pretty printing of this modified query /**
* @todo pretty printing of this modified query
*/
if (isset($display_query)) { if (isset($display_query)) {
// if the analysis of the original query revealed that we found // if the analysis of the original query revealed that we found
// a section_after_limit, we now have to analyze $display_query // a section_after_limit, we now have to analyze $display_query
@@ -311,20 +321,20 @@ else {
} }
} }
} else { } else {
$full_sql_query = $sql_query; $full_sql_query = $sql_query;
} // end if...else } // end if...else
if (isset($db)) { if (isset($db)) {
PMA_DBI_select_db($db); PMA_DBI_select_db($db);
} }
// If the query is a DELETE query with no WHERE clause, get the number of // If the query is a DELETE query with no WHERE clause, get the number of
// rows that will be deleted (mysql_affected_rows will always return 0 in // rows that will be deleted (mysql_affected_rows will always return 0 in
// this case) // this case)
// Note: testing shows that this no longer applies since MySQL 4.0.x // Note: testing shows that this no longer applies since MySQL 4.0.x
if (PMA_MYSQL_INT_VERSION < 40000) { if (PMA_MYSQL_INT_VERSION < 40000) {
if ($is_delete if ($is_delete
&& preg_match('@^DELETE([[:space:]].+)?(FROM[[:space:]](.+))$@i', $sql_query, $parts) && preg_match('@^DELETE([[:space:]].+)?(FROM[[:space:]](.+))$@i', $sql_query, $parts)
&& !preg_match('@[[:space:]]WHERE[[:space:]]@i', $parts[3])) { && !preg_match('@[[:space:]]WHERE[[:space:]]@i', $parts[3])) {
@@ -336,15 +346,15 @@ else {
$num_rows = 0; $num_rows = 0;
} }
} }
} }
// E x e c u t e t h e q u e r y // E x e c u t e t h e q u e r y
// Only if we didn't ask to see the php code (mikebeck) // Only if we didn't ask to see the php code (mikebeck)
if (isset($GLOBALS['show_as_php']) || !empty($GLOBALS['validatequery'])) { if (isset($GLOBALS['show_as_php']) || !empty($GLOBALS['validatequery'])) {
unset($result); unset($result);
$num_rows = 0; $num_rows = 0;
} else { } else {
// garvin: Measure query time. // garvin: Measure query time.
// TODO-Item http://sourceforge.net/tracker/index.php?func=detail&aid=571934&group_id=23067&atid=377411 // TODO-Item http://sourceforge.net/tracker/index.php?func=detail&aid=571934&group_id=23067&atid=377411
$querytime_before = array_sum(explode(' ', microtime())); $querytime_before = array_sum(explode(' ', microtime()));
@@ -514,9 +524,10 @@ else {
// there are some cases where the generated // there are some cases where the generated
// count_query (for MySQL 3) is wrong, // count_query (for MySQL 3) is wrong,
// so we get here. // so we get here.
//TODO: use a big unlimited query to get /**
// the correct number of rows (depending * @todo use a big unlimited query to get the correct
// on a config variable?) * number of rows (depending on a config variable?)
*/
$unlim_num_rows = 0; $unlim_num_rows = 0;
} }
} }
@@ -568,10 +579,10 @@ else {
PMA_relationsCleanupColumn($db, $table, $purgekey); PMA_relationsCleanupColumn($db, $table, $purgekey);
} // end if column PMA_* purge } // end if column PMA_* purge
} // end else "didn't ask to see php code" } // end else "didn't ask to see php code"
// No rows returned -> move back to the calling page // No rows returned -> move back to the calling page
if ($num_rows < 1 || $is_affected) { if ($num_rows < 1 || $is_affected) {
if ($is_delete) { if ($is_delete) {
$message = $strDeletedRows . '&nbsp;' . $num_rows; $message = $strDeletedRows . '&nbsp;' . $num_rows;
} elseif ($is_insert) { } elseif ($is_insert) {
@@ -640,10 +651,10 @@ else {
PMA_sendHeaderLocation($cfg['PmaAbsoluteUri'] . str_replace('&amp;', '&', $goto) . '&message=' . urlencode($message)); PMA_sendHeaderLocation($cfg['PmaAbsoluteUri'] . str_replace('&amp;', '&', $goto) . '&message=' . urlencode($message));
} // end else } // end else
exit(); exit();
} // end no rows returned } // end no rows returned
// At least one row is returned -> displays a table with results // At least one row is returned -> displays a table with results
else { else {
// Displays the headers // Displays the headers
if (isset($show_query)) { if (isset($show_query)) {
unset($show_query); unset($show_query);
@@ -793,9 +804,7 @@ window.onload = function()
</script> </script>
<?php <?php
} // end print case } // end print case
} // end rows returned } // end rows returned
} // end executes the query
/** /**
* Displays the footer * Displays the footer

View File

@@ -165,7 +165,9 @@ if ($abort == FALSE) {
$selected_cnt = count($selected); $selected_cnt = count($selected);
} }
// TODO: optimize in case of multiple fields to modify /**
* @todo optimize in case of multiple fields to modify
*/
for ($i = 0; $i < $selected_cnt; $i++) { for ($i = 0; $i < $selected_cnt; $i++) {
if (!empty($submit_mult)) { if (!empty($submit_mult)) {
$field = PMA_sqlAddslashes(urldecode($selected[$i]), TRUE); $field = PMA_sqlAddslashes(urldecode($selected[$i]), TRUE);
@@ -184,8 +186,10 @@ if ($abort == FALSE) {
// but later, if the analyser returns more information, it // but later, if the analyser returns more information, it
// could be executed for any MySQL version and replace // could be executed for any MySQL version and replace
// the info given by SHOW FULL FIELDS FROM. // the info given by SHOW FULL FIELDS FROM.
// TODO: put this code into a require() /**
// or maybe make it part of PMA_DBI_get_fields(); * @todo put this code into a require()
* or maybe make it part of PMA_DBI_get_fields();
*/
// We also need this to correctly learn if a TIMESTAMP is NOT NULL, since // We also need this to correctly learn if a TIMESTAMP is NOT NULL, since
// SHOW FULL FIELDS says NULL and SHOW CREATE TABLE says NOT NULL (tested // SHOW FULL FIELDS says NULL and SHOW CREATE TABLE says NOT NULL (tested

View File

@@ -80,7 +80,9 @@ if (!empty($disp_message)) {
if (empty($goto)) { if (empty($goto)) {
$goto = 'db_details.php'; $goto = 'db_details.php';
} }
// TODO: check if we could replace by "db_details|tbl" /**
* @todo check if we could replace by "db_details|tbl"
*/
if (!preg_match('@^(db_details|tbl_properties|tbl_select|tbl_import)@', $goto)) { if (!preg_match('@^(db_details|tbl_properties|tbl_select|tbl_import)@', $goto)) {
$err_url = $goto . "?" . PMA_generate_common_url($db) . "&amp;sql_query=" . urlencode($sql_query); $err_url = $goto . "?" . PMA_generate_common_url($db) . "&amp;sql_query=" . urlencode($sql_query);
} else { } else {
@@ -808,7 +810,10 @@ foreach ($loop_array AS $vrowcount => $vrow) {
echo '<input type="file" name="fields_upload_' . urlencode($field) . $vkey . '" class="textfield" id="field_' . ($idindex) . '_3" size="10" />&nbsp;'; echo '<input type="file" name="fields_upload_' . urlencode($field) . $vkey . '" class="textfield" id="field_' . ($idindex) . '_3" size="10" />&nbsp;';
// find maximum upload size, based on field type // find maximum upload size, based on field type
// FIXME: with functions this is not so easy, as you can basically process any data with function like MD5 /**
* @todo with functions this is not so easy, as you can basically
* process any data with function like MD5
*/
$max_field_sizes = array( $max_field_sizes = array(
'tinyblob' => '256', 'tinyblob' => '256',
'blob' => '65536', 'blob' => '65536',

View File

@@ -220,10 +220,12 @@ foreach ($the_tables as $key => $table) {
// here, we have a TIMESTAMP that SHOW FULL FIELDS reports as having the // here, we have a TIMESTAMP that SHOW FULL FIELDS reports as having the
// NULL attribute, but SHOW CREATE TABLE says the contrary. Believe // NULL attribute, but SHOW CREATE TABLE says the contrary. Believe
// the latter. // the latter.
// TODO: merge this logic with the one in tbl_properties_structure.php /**
// or move it in a function similar to PMA_DBI_get_columns_full() * @todo merge this logic with the one in tbl_properties_structure.php
// but based on SHOW CREATE TABLE because information_schema * or move it in a function similar to PMA_DBI_get_columns_full()
// cannot be trusted in this case (MySQL bug) * but based on SHOW CREATE TABLE because information_schema
* cannot be trusted in this case (MySQL bug)
*/
if (!empty($analyzed_sql[0]['create_table_fields'][$field_name]['type']) && $analyzed_sql[0]['create_table_fields'][$field_name]['type'] == 'TIMESTAMP' && $analyzed_sql[0]['create_table_fields'][$field_name]['timestamp_not_null']) { if (!empty($analyzed_sql[0]['create_table_fields'][$field_name]['type']) && $analyzed_sql[0]['create_table_fields'][$field_name]['type'] == 'TIMESTAMP' && $analyzed_sql[0]['create_table_fields'][$field_name]['timestamp_not_null']) {
$row['Null'] = ''; $row['Null'] = '';
} }

View File

@@ -276,8 +276,9 @@ if ($total_affected_rows != 0) {
$message .= $last_message; $message .= $last_message;
if (!empty($warning_message)) { if (!empty($warning_message)) {
// TODO: use a <div class="warning"> in PMA_showMessage() /**
// for this part of the message * @todo use a <div class="warning"> in PMA_showMessage() for this part of the message
*/
$message .= '[br]' . $warning_message; $message .= '[br]' . $warning_message;
} }