diff options
161 files changed, 2439 insertions, 2246 deletions
diff --git a/changelog.php b/changelog.php index 7d42ea185a..5066ffe03e 100644 --- a/changelog.php +++ b/changelog.php @@ -23,7 +23,7 @@ $filename = CHANGELOG_FILE; if (is_readable($filename)) { // Test if the if is in a compressed format - if ($GLOBALS['PMA_String']->substr($filename, -3) == '.gz') { + if (substr($filename, -3) == '.gz') { ob_start(); readgzfile($filename); $changelog = ob_get_contents(); diff --git a/db_operations.php b/db_operations.php index 65c7c66c74..a6ec51090a 100644 --- a/db_operations.php +++ b/db_operations.php @@ -36,7 +36,7 @@ $sql_query = ''; */ /** @var PMA_String $pmaString */ $pmaString = $GLOBALS['PMA_String']; -if ($pmaString->strlen($GLOBALS['db']) +if (/*overload*/mb_strlen($GLOBALS['db']) && (! empty($_REQUEST['db_rename']) || ! empty($_REQUEST['db_copy'])) ) { if (! empty($_REQUEST['db_rename'])) { @@ -46,7 +46,7 @@ if ($pmaString->strlen($GLOBALS['db']) } if (! isset($_REQUEST['newname']) - || ! $pmaString->strlen($_REQUEST['newname']) + || ! /*overload*/mb_strlen($_REQUEST['newname']) ) { $message = PMA_Message::error(__('The database name is empty!')); } else { diff --git a/db_printview.php b/db_printview.php index d537451802..887172dba5 100644 --- a/db_printview.php +++ b/db_printview.php @@ -59,7 +59,7 @@ if ($num_tables == 0) { $odd_row = true; foreach ($tables as $sts_data) { if (PMA_Table::isMerge($db, $sts_data['TABLE_NAME']) - || $GLOBALS['PMA_String']->strtoupper($sts_data['ENGINE']) == 'FEDERATED' + || /*overload*/mb_strtoupper($sts_data['ENGINE']) == 'FEDERATED' ) { $merged_size = true; } else { diff --git a/examples/openid.php b/examples/openid.php index 804fa4c0a8..7d9c44b3c3 100644 --- a/examples/openid.php +++ b/examples/openid.php @@ -79,7 +79,7 @@ $base .= '://' . $_SERVER['SERVER_NAME'] . ':' . $_SERVER['SERVER_PORT']; $realm = $base . '/'; $returnTo = $base . dirname($_SERVER['PHP_SELF']); -if ($returnTo[$GLOBALS['PMA_String']->strlen($returnTo) - 1] != '/') { +if ($returnTo[/*overload*/mb_strlen($returnTo) - 1] != '/') { $returnTo .= '/'; } $returnTo .= 'openid.php'; diff --git a/export.php b/export.php index fb37c14121..ff84141209 100644 --- a/export.php +++ b/export.php @@ -243,7 +243,7 @@ if (!defined('TESTSUITE')) { if ($export_type == 'server') { $err_url = 'server_export.php' . PMA_URL_getCommon(); } elseif ($export_type == 'database' - && $pmaString->strlen($db) + && /*overload*/mb_strlen($db) ) { $err_url = 'db_export.php' . PMA_URL_getCommon(array('db' => $db)); // Check if we have something to export @@ -252,8 +252,8 @@ if (!defined('TESTSUITE')) { } else { $tables = array(); } - } elseif ($export_type == 'table' && $pmaString->strlen($db) - && $pmaString->strlen($table) + } elseif ($export_type == 'table' && /*overload*/mb_strlen($db) + && /*overload*/mb_strlen($table) ) { $err_url = 'tbl_export.php' . PMA_URL_getCommon(array( 'db' => $db, 'table' => $table diff --git a/file_echo.php b/file_echo.php index 21b16796e3..e4409779da 100644 --- a/file_echo.php +++ b/file_echo.php @@ -46,9 +46,9 @@ if (isset($_REQUEST['filename']) && isset($_REQUEST['image'])) { /* Decode data */ if ($extension != 'svg') { - $data = $pmaString->substr( + $data = /*overload*/mb_substr( $_REQUEST['image'], - $pmaString->strpos($_REQUEST['image'], ',') + 1 + /*overload*/mb_strpos($_REQUEST['image'], ',') + 1 ); $data = base64_decode($data); } else { @@ -59,7 +59,7 @@ if (isset($_REQUEST['filename']) && isset($_REQUEST['image'])) { PMA_downloadHeader( $filename, $_REQUEST['type'], - $pmaString->strlen($data) + /*overload*/mb_strlen($data) ); /* Send data */ diff --git a/gis_data_editor.php b/gis_data_editor.php index 57add856c2..f14e4662d2 100644 --- a/gis_data_editor.php +++ b/gis_data_editor.php @@ -47,14 +47,14 @@ $pmaString = $GLOBALS['PMA_String']; // Extract from field's values if available, if not use the column type passed. if (! isset($gis_data['gis_type'])) { if (isset($_REQUEST['type']) && $_REQUEST['type'] != '') { - $gis_data['gis_type'] = $pmaString->strtoupper($_REQUEST['type']); + $gis_data['gis_type'] = /*overload*/mb_strtoupper($_REQUEST['type']); } if (isset($_REQUEST['value']) && trim($_REQUEST['value']) != '') { - $start = ($pmaString->substr($_REQUEST['value'], 0, 1) == "'") ? 1 : 0; - $gis_data['gis_type'] = $pmaString->substr( + $start = (substr($_REQUEST['value'], 0, 1) == "'") ? 1 : 0; + $gis_data['gis_type'] = /*overload*/mb_substr( $_REQUEST['value'], $start, - $pmaString->strpos($_REQUEST['value'], "(") - $start + /*overload*/mb_strpos($_REQUEST['value'], "(") - $start ); } if ((! isset($gis_data['gis_type'])) diff --git a/import.php b/import.php index 514389a5c4..82beb3f8ca 100644 --- a/import.php +++ b/import.php @@ -237,17 +237,17 @@ if ($import_type == 'table') { $goto = 'server_import.php'; } else { if (empty($goto) || !preg_match('@^(server|db|tbl)(_[a-z]*)*\.php$@i', $goto)) { - if ($pmaString->strlen($table) && $pmaString->strlen($db)) { + if (/*overload*/mb_strlen($table) && /*overload*/mb_strlen($db)) { $goto = 'tbl_structure.php'; - } elseif ($pmaString->strlen($db)) { + } elseif (/*overload*/mb_strlen($db)) { $goto = 'db_structure.php'; } else { $goto = 'server_sql.php'; } } - if ($pmaString->strlen($table) && $pmaString->strlen($db)) { + if (/*overload*/mb_strlen($table) && /*overload*/mb_strlen($db)) { $common = PMA_URL_getCommon(array('db' => $db, 'table' => $table)); - } elseif ($pmaString->strlen($db)) { + } elseif (/*overload*/mb_strlen($db)) { $common = PMA_URL_getCommon(array('db' => $db)); } else { $common = PMA_URL_getCommon(); @@ -265,7 +265,7 @@ if (basename($_SERVER['SCRIPT_NAME']) === 'import.php') { } -if ($pmaString->strlen($db)) { +if (/*overload*/mb_strlen($db)) { $GLOBALS['dbi']->selectDb($db); } @@ -389,13 +389,13 @@ if ($memory_limit == -1) { } // Calculate value of the limit -if ($pmaString->strtolower($pmaString->substr($memory_limit, -1)) == 'm') { - $memory_limit = (int)$pmaString->substr($memory_limit, 0, -1) * 1024 * 1024; -} elseif ($pmaString->strtolower($pmaString->substr($memory_limit, -1)) == 'k') { - $memory_limit = (int)$pmaString->substr($memory_limit, 0, -1) * 1024; -} elseif ($pmaString->strtolower($pmaString->substr($memory_limit, -1)) == 'g') { - $memory_limit - = (int)$pmaString->substr($memory_limit, 0, -1) * 1024 * 1024 * 1024; +$memoryUnit = /*overload*/mb_strtolower(substr($memory_limit, -1)); +if ('m' == $memoryUnit) { + $memory_limit = (int)substr($memory_limit, 0, -1) * 1024 * 1024; +} elseif ('k' == $memoryUnit) { + $memory_limit = (int)substr($memory_limit, 0, -1) * 1024; +} elseif ('g' == $memoryUnit) { + $memory_limit = (int)substr($memory_limit, 0, -1) * 1024 * 1024 * 1024; } else { $memory_limit = (int)$memory_limit; } @@ -672,7 +672,7 @@ if (isset($message)) { // in case of a query typed in the query window // (but if the query is too large, in case of an imported file, the parser // can choke on it so avoid parsing) -if ($pmaString->strlen($sql_query) <= $GLOBALS['cfg']['MaxCharactersInDisplayedSQL'] +if (/*overload*/mb_strlen($sql_query) <= $GLOBALS['cfg']['MaxCharactersInDisplayedSQL'] ) { include_once 'libraries/parse_analyze.inc.php'; } diff --git a/import_status.php b/import_status.php index 6b6e04b369..a6c49f4b79 100644 --- a/import_status.php +++ b/import_status.php @@ -32,11 +32,9 @@ if (version_compare(PHP_VERSION, '5.4.0', '>=') define('UPLOAD_PREFIX', ini_get('session.upload_progress.prefix')); session_start(); - /** @var PMA_String $pmaString / - $pmaString = $GLOBALS['PMA_String']; foreach ($_SESSION as $key => $value) { // only copy session-prefixed data - if ($pmaString->substr($key, 0, $pmaString->strlen(UPLOAD_PREFIX)) + if (mb_substr($key, 0, mb_strlen(UPLOAD_PREFIX)) == UPLOAD_PREFIX) { $sessionupload[$key] = $value; } @@ -64,11 +62,9 @@ if (defined('SESSIONUPLOAD')) { $_SESSION[$key] = $value; } - /** @var PMA_String $pmaString / - $pmaString = $GLOBALS['PMA_String']; // remove session upload data that are not set anymore foreach ($_SESSION as $key => $value) { - if ($pmaString->substr($key, 0, $pmaString->strlen(UPLOAD_PREFIX)) + if (mb_substr($key, 0, mb_strlen(UPLOAD_PREFIX)) == UPLOAD_PREFIX && ! isset($sessionupload[$key]) ) { @@ -561,8 +561,8 @@ if (isset($GLOBALS['dbi']) $_client_info = $GLOBALS['dbi']->getClientInfo(); if ($server > 0 - && $pmaString->strpos($_client_info, 'mysqlnd') === false - && $pmaString->substr(PMA_MYSQL_CLIENT_API, 0, 3) != $pmaString->substr( + && /*overload*/mb_strpos($_client_info, 'mysqlnd') === false + && substr(PMA_MYSQL_CLIENT_API, 0, 3) != substr( PMA_MYSQL_INT_VERSION, 0, 3 ) ) { @@ -571,10 +571,10 @@ if (isset($GLOBALS['dbi']) sprintf( __('Your PHP MySQL library version %s differs from your MySQL server version %s. This may cause unpredictable behavior.'), $_client_info, - $pmaString->substr( + substr( PMA_MYSQL_STR_VERSION, 0, - $pmaString->strpos(PMA_MYSQL_STR_VERSION . '-', '-') + strpos(PMA_MYSQL_STR_VERSION . '-', '-') ) ) ), diff --git a/libraries/Advisor.class.php b/libraries/Advisor.class.php index 0d274422b5..91bc97842c 100644 --- a/libraries/Advisor.class.php +++ b/libraries/Advisor.class.php @@ -382,9 +382,6 @@ class Advisor $ruleNo = -1; $ruleLine = -1; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - for ($i = 0; $i < $numLines; $i++) { $line = $file[$i]; if ($line == "" || $line[0] == '#') { @@ -392,7 +389,7 @@ class Advisor } // Reading new rule - if ($pmaString->substr($line, 0, 4) == 'rule') { + if (substr($line, 0, 4) == 'rule') { if ($ruleLine > 0) { $errors[] = sprintf( __( @@ -447,7 +444,7 @@ class Advisor continue; } $rules[$ruleNo][$ruleSyntax[$ruleLine]] = chop( - $pmaString->substr($line, 1) + /*overload*/mb_substr($line, 1) ); $lines[$ruleNo][$ruleSyntax[$ruleLine]] = $i + 1; $ruleLine += 1; diff --git a/libraries/Config.class.php b/libraries/Config.class.php index 85f76d5bbc..4a9bf7f6c0 100644 --- a/libraries/Config.class.php +++ b/libraries/Config.class.php @@ -148,7 +148,7 @@ class PMA_Config } // disable output-buffering (if set to 'auto') for IE6, else enable it. - if ($GLOBALS['PMA_String']->strtolower($this->get('OBGzip')) == 'auto') { + if (strtolower($this->get('OBGzip')) == 'auto') { if ($this->get('PMA_USR_BROWSER_AGENT') == 'IE' && $this->get('PMA_USR_BROWSER_VER') >= 6 && $this->get('PMA_USR_BROWSER_VER') < 7 @@ -176,19 +176,16 @@ class PMA_Config $HTTP_USER_AGENT = ''; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // 1. Platform - if ($pmaString->strstr($HTTP_USER_AGENT, 'Win')) { + if (/*overload*/mb_strstr($HTTP_USER_AGENT, 'Win')) { $this->set('PMA_USR_OS', 'Win'); - } elseif ($pmaString->strstr($HTTP_USER_AGENT, 'Mac')) { + } elseif (/*overload*/mb_strstr($HTTP_USER_AGENT, 'Mac')) { $this->set('PMA_USR_OS', 'Mac'); - } elseif ($pmaString->strstr($HTTP_USER_AGENT, 'Linux')) { + } elseif (/*overload*/mb_strstr($HTTP_USER_AGENT, 'Linux')) { $this->set('PMA_USR_OS', 'Linux'); - } elseif ($pmaString->strstr($HTTP_USER_AGENT, 'Unix')) { + } elseif (/*overload*/mb_strstr($HTTP_USER_AGENT, 'Unix')) { $this->set('PMA_USR_OS', 'Unix'); - } elseif ($pmaString->strstr($HTTP_USER_AGENT, 'OS/2')) { + } elseif (/*overload*/mb_strstr($HTTP_USER_AGENT, 'OS/2')) { $this->set('PMA_USR_OS', 'OS/2'); } else { $this->set('PMA_USR_OS', 'Other'); @@ -263,7 +260,7 @@ class PMA_Config ); $this->set('PMA_USR_BROWSER_AGENT', 'SAFARI'); // Firefox - } elseif (! $pmaString->strstr($HTTP_USER_AGENT, 'compatible') + } elseif (! /*overload*/mb_strstr($HTTP_USER_AGENT, 'compatible') && preg_match('@Firefox/([\w.]+)@', $HTTP_USER_AGENT, $log_version) ) { $this->set( @@ -306,7 +303,7 @@ class PMA_Config if (@function_exists('gd_info')) { $gd_nfo = gd_info(); - if ($GLOBALS['PMA_String']->strstr($gd_nfo["GD Version"], '2.')) { + if (/*overload*/mb_strstr($gd_nfo["GD Version"], '2.')) { $this->set('PMA_IS_GD2', 1); } else { $this->set('PMA_IS_GD2', 0); @@ -435,14 +432,12 @@ class PMA_Config return; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; $branch = false; // are we on any branch? - if ($pmaString->strstr($ref_head, '/')) { - $ref_head = $pmaString->substr(trim($ref_head), 5); - if ($pmaString->substr($ref_head, 0, 11) === 'refs/heads/') { - $branch = $pmaString->substr($ref_head, 11); + if (/*overload*/mb_strstr($ref_head, '/')) { + $ref_head = /*overload*/mb_substr(trim($ref_head), 5); + if (substr($ref_head, 0, 11) === 'refs/heads/') { + $branch = /*overload*/mb_substr($ref_head, 11); } else { $branch = basename($ref_head); } @@ -782,21 +777,19 @@ class PMA_Config $httpOk = 'HTTP/1.1 200 OK'; $httpNotFound = 'HTTP/1.1 404 Not Found'; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - if ($pmaString->substr($data, 0, $pmaString->strlen($httpOk)) === $httpOk) { + if (substr($data, 0, strlen($httpOk)) === $httpOk) { return $get_body - ? $pmaString->substr( + ? /*overload*/mb_substr( $data, - $pmaString->strpos($data, "\r\n\r\n") + 4 + /*overload*/mb_strpos($data, "\r\n\r\n") + 4 ) : true; } - $httpNOK = $pmaString->substr( + $httpNOK = substr( $data, 0, - $pmaString->strlen($httpNotFound) + strlen($httpNotFound) ); if ($httpNOK === $httpNotFound) { return false; @@ -1292,9 +1285,7 @@ class PMA_Config $pma_absolute_uri = $this->get('PmaAbsoluteUri'); $is_https = $this->detectHttps(); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - if ($pmaString->strlen($pma_absolute_uri) < 5) { + if (/*overload*/mb_strlen($pma_absolute_uri) < 5) { $url = array(); // If we don't have scheme, we didn't have full URL so we need to @@ -1390,7 +1381,7 @@ class PMA_Config $path = ''; } // in vhost situations, there could be already an ending slash - if ($pmaString->substr($path, -1) != '/') { + if (/*overload*/mb_substr($path, -1) != '/') { $path .= '/'; } $pma_absolute_uri .= $path; @@ -1412,20 +1403,20 @@ class PMA_Config // Adds a trailing slash et the end of the phpMyAdmin uri if it // does not exist. - if ($pmaString->substr($pma_absolute_uri, -1) != '/') { + if (/*overload*/mb_substr($pma_absolute_uri, -1) != '/') { $pma_absolute_uri .= '/'; } // If URI doesn't start with http:// or https://, we will add // this. - if ($pmaString->substr($pma_absolute_uri, 0, 7) != 'http://' - && $pmaString->substr($pma_absolute_uri, 0, 8) != 'https://' + if (/*overload*/mb_substr($pma_absolute_uri, 0, 7) != 'http://' + && /*overload*/mb_substr($pma_absolute_uri, 0, 8) != 'https://' ) { $pma_absolute_uri = ($is_https ? 'https' : 'http') . ':' . ( - $pmaString->substr($pma_absolute_uri, 0, 2) == '//' ? '' : '//' + /*overload*/mb_substr($pma_absolute_uri, 0, 2) == '//' ? '' : '//' ) . $pma_absolute_uri; } @@ -1520,7 +1511,7 @@ class PMA_Config $this->set('enable_upload', true); // if set "php_admin_value file_uploads Off" in httpd.conf // ini_get() also returns the string "Off" in this case: - if ('off' == $GLOBALS['PMA_String']->strtolower(ini_get('file_uploads'))) { + if ('off' == strtolower(ini_get('file_uploads'))) { $this->set('enable_upload', false); } } @@ -1597,9 +1588,6 @@ class PMA_Config } } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // If we don't have scheme, we didn't have full URL so we need to // dig deeper if (empty($url['scheme'])) { @@ -1607,19 +1595,19 @@ class PMA_Config if (PMA_getenv('HTTP_SCHEME')) { $url['scheme'] = PMA_getenv('HTTP_SCHEME'); } elseif (PMA_getenv('HTTPS') - && $pmaString->strtolower(PMA_getenv('HTTPS')) == 'on' + && strtolower(PMA_getenv('HTTPS')) == 'on' ) { $url['scheme'] = 'https'; // A10 Networks load balancer: } elseif (PMA_getenv('HTTP_HTTPS_FROM_LB') - && $pmaString->strtolower(PMA_getenv('HTTP_HTTPS_FROM_LB')) == 'on' + && strtolower(PMA_getenv('HTTP_HTTPS_FROM_LB')) == 'on' ) { $url['scheme'] = 'https'; } elseif (PMA_getenv('HTTP_X_FORWARDED_PROTO')) { $url['scheme'] - = $pmaString->strtolower(PMA_getenv('HTTP_X_FORWARDED_PROTO')); + = /*overload*/mb_strtolower(PMA_getenv('HTTP_X_FORWARDED_PROTO')); } elseif (PMA_getenv('HTTP_FRONT_END_HTTPS') - && $pmaString->strtolower(PMA_getenv('HTTP_FRONT_END_HTTPS')) == 'on' + && strtolower(PMA_getenv('HTTP_FRONT_END_HTTPS')) == 'on' ) { $url['scheme'] = 'https'; } else { @@ -1858,9 +1846,7 @@ class PMA_Config function setCookie($cookie, $value, $default = null, $validity = null, $httponly = true ) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - if ($pmaString->strlen($value) && null !== $default && $value === $default) { + if (/*overload*/mb_strlen($value) && null !== $default && $value === $default) { // default value is used if (isset($_COOKIE[$cookie])) { // remove cookie @@ -1869,7 +1855,7 @@ class PMA_Config return false; } - if (!$pmaString->strlen($value) && isset($_COOKIE[$cookie])) { + if (!/*overload*/mb_strlen($value) && isset($_COOKIE[$cookie])) { // remove cookie, value is empty return $this->removeCookie($cookie); } diff --git a/libraries/DBQbe.class.php b/libraries/DBQbe.class.php index 15e8e4438f..031436b01d 100644 --- a/libraries/DBQbe.class.php +++ b/libraries/DBQbe.class.php @@ -334,7 +334,7 @@ class PMA_DbQbe $this->_columnNames[] = $each_column; // increase the width if necessary $this->_form_column_width = max( - $GLOBALS['PMA_String']->strlen($each_column), + /*overload*/mb_strlen($each_column), $this->_form_column_width ); } // end foreach @@ -455,9 +455,6 @@ class PMA_DbQbe $html_output .= '<th>' . __('Sort:') . '</th>'; $new_column_count = 0; - /** @var PMA_String $pmaStr */ - $pmaStr = $GLOBALS['PMA_String']; - for ( $colInd = 0; $colInd < $this->_criteria_column_count; @@ -481,7 +478,7 @@ class PMA_DbQbe // then sorting is not available, Fix for Bug #570698 if (isset($_REQUEST['criteriaSort'][$colInd]) && isset($_REQUEST['criteriaColumn'][$colInd]) - && $pmaStr->substr($_REQUEST['criteriaColumn'][$colInd], -2) == '.*' + && /*overload*/mb_substr($_REQUEST['criteriaColumn'][$colInd], -2) == '.*' ) { $_REQUEST['criteriaSort'][$colInd] = ''; } //end if @@ -999,9 +996,6 @@ class PMA_DbQbe */ private function _getWhereClause() { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $where_clause = ''; $criteria_cnt = 0; for ( @@ -1016,7 +1010,7 @@ class PMA_DbQbe && isset($this->_curAndOrCol) ) { $where_clause .= ' ' - . $pmaString->strtoupper($this->_curAndOrCol[$last_where]) . ' '; + . /*overload*/mb_strtoupper($this->_curAndOrCol[$last_where]) . ' '; } if (! empty($this->_curField[$column_index]) && ! empty($this->_curCriteria[$column_index]) @@ -1052,7 +1046,7 @@ class PMA_DbQbe && $column_index ) { $qry_orwhere .= ' ' - . $pmaString->strtoupper($this->_curAndOrCol[$last_orwhere]) + . /*overload*/mb_strtoupper($this->_curAndOrCol[$last_orwhere]) . ' '; } if (! empty($this->_curField[$column_index]) @@ -1071,7 +1065,7 @@ class PMA_DbQbe } if (! empty($qry_orwhere)) { $where_clause .= "\n" - . $pmaString->strtoupper( + . /*overload*/mb_strtoupper( isset($this->_curAndOrRow[$row_index]) ? $this->_curAndOrRow[$row_index] . ' ' : '' @@ -1096,9 +1090,6 @@ class PMA_DbQbe $orderby_clause = ''; $orderby_clauses = array(); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - for ( $column_index = 0; $column_index < $this->_criteria_column_count; @@ -1113,7 +1104,7 @@ class PMA_DbQbe continue; } - if ($pmaString->substr($this->_curField[$column_index], -2) == '.*') { + if (/*overload*/mb_substr($this->_curField[$column_index], -2) == '.*') { continue; } @@ -1325,9 +1316,6 @@ class PMA_DbQbe $where_clause_columns = array(); $where_clause_tables = array(); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Now we need all tables that we have in the where clause for ( $column_index = 0, $nb = count($this->_criteria); @@ -1344,7 +1332,7 @@ class PMA_DbQbe // Now we know that our array has the same numbers as $criteria // we can check which of our columns has a where clause if (! empty($this->_criteria[$column_index])) { - if ($pmaString->substr($this->_criteria[$column_index], 0, 1) == '=' + if (/*overload*/mb_substr($this->_criteria[$column_index], 0, 1) == '=' || /*$pmaString->*/stristr($this->_criteria[$column_index], 'is') ) { $where_clause_columns[$column] = $column; diff --git a/libraries/DatabaseInterface.class.php b/libraries/DatabaseInterface.class.php index def133372c..a227b2f48e 100644 --- a/libraries/DatabaseInterface.class.php +++ b/libraries/DatabaseInterface.class.php @@ -502,15 +502,12 @@ class PMA_DatabaseInterface $sql, array('TABLE_SCHEMA', 'TABLE_NAME'), null, $link ); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - if (PMA_DRIZZLE) { // correct I_S and D_D names returned by D_D.TABLES - // Drizzle generally uses lower case for them, // but TABLES returns uppercase foreach ((array)$database as $db) { - $db_upper = $pmaString->strtoupper($db); + $db_upper = /*overload*/mb_strtoupper($db); if (!isset($tables[$db]) && isset($tables[$db_upper])) { $tables[$db] = $tables[$db_upper]; unset($tables[$db_upper]); @@ -747,14 +744,14 @@ class PMA_DatabaseInterface return $tables[$database]; } - if (isset($tables[$pmaString->strtolower($database)])) { + if (isset($tables[/*overload*/mb_strtolower($database)])) { // on windows with lower_case_table_names = 1 // MySQL returns // with SHOW DATABASES or information_schema.SCHEMATA: `Test` // but information_schema.TABLES gives `test` // bug #2036 // https://sourceforge.net/p/phpmyadmin/bugs/2036/ - return $tables[$pmaString->strtolower($database)]; + return $tables[/*overload*/mb_strtolower($database)]; } // one database but inexact letter case match @@ -765,7 +762,7 @@ class PMA_DatabaseInterface } $keys = array_keys($tables); - if ($pmaString->strlen(array_pop($keys)) == $pmaString->strlen($database)) { + if (/*overload*/mb_strlen(array_pop($keys)) == /*overload*/mb_strlen($database)) { return array_pop($tables); } return $tables; @@ -840,8 +837,7 @@ class PMA_DatabaseInterface $tables[$table_name]['TABLE_COMMENT'] =& $tables[$table_name]['Comment']; - $commentUpper = $GLOBALS['PMA_String'] - ->strtoupper($tables[$table_name]['Comment']); + $commentUpper = /*overload*/mb_strtoupper($tables[$table_name]['Comment']); if ($commentUpper === 'VIEW' && $tables[$table_name]['Engine'] == null ) { @@ -903,7 +899,7 @@ class PMA_DatabaseInterface $link = null, $sort_by = 'SCHEMA_NAME', $sort_order = 'ASC', $limit_offset = 0, $limit_count = false ) { - $sort_order = $GLOBALS['PMA_String']->strtoupper($sort_order); + $sort_order = strtoupper($sort_order); if (true === $limit_count) { $limit_count = $GLOBALS['cfg']['MaxDbList']; @@ -2197,8 +2193,7 @@ class PMA_DatabaseInterface $error .= ' - ' . $error_message; $error .= '<br />' . __('The server is not responding.'); } elseif ($error_number == 1005) { - if ($GLOBALS['PMA_String']->strpos($error_message, 'errno: 13') !== false - ) { + if (strpos($error_message, 'errno: 13') !== false) { $error .= ' - ' . $error_message; $error .= '<br />' . __('Please check privileges of directory containing database.'); @@ -2375,11 +2370,11 @@ class PMA_DatabaseInterface { /** @var PMA_String $pmaString */ $pmaString = $GLOBALS['PMA_String']; - return $pmaString->strtolower($schema_name) == 'information_schema' + return strtolower($schema_name) == 'information_schema' || (!PMA_DRIZZLE - && $pmaString->strtolower($schema_name) == 'performance_schema') + && strtolower($schema_name) == 'performance_schema') || (PMA_DRIZZLE - && $pmaString->strtolower($schema_name) == 'data_dictionary') + && strtolower($schema_name) == 'data_dictionary') || ($testForMysqlSchema && !PMA_DRIZZLE && $schema_name == 'mysql'); } diff --git a/libraries/DbSearch.class.php b/libraries/DbSearch.class.php index f4b8a3b51e..4d5e1b8be7 100644 --- a/libraries/DbSearch.class.php +++ b/libraries/DbSearch.class.php @@ -214,18 +214,16 @@ class PMA_DbSearch ? array($this->_criteriaSearchString) : explode(' ', $this->_criteriaSearchString)); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; foreach ($search_words as $search_word) { // Eliminates empty values - if ($pmaString->strlen($search_word) === 0) { + if (/*overload*/mb_strlen($search_word) === 0) { continue; } $likeClausesPerColumn = array(); // for each column in the table foreach ($allColumns as $column) { if (! isset($this->_criteriaColumnName) - || $pmaString->strlen($this->_criteriaColumnName) == 0 + || /*overload*/mb_strlen($this->_criteriaColumnName) == 0 || $column['Field'] == $this->_criteriaColumnName ) { // Drizzle has no CONVERT and all text columns are UTF-8 diff --git a/libraries/DisplayResults.class.php b/libraries/DisplayResults.class.php index 78a318205e..6411ea11b3 100644 --- a/libraries/DisplayResults.class.php +++ b/libraries/DisplayResults.class.php @@ -389,8 +389,6 @@ class PMA_DisplayResults // 2. Display mode is not "false for all elements" -> updates the // display mode - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; if ($the_disp_mode != 'nnnn000000') { if (isset($printview) && ($printview == '1')) { @@ -439,9 +437,9 @@ class PMA_DisplayResults $bIsProcessList = isset($which[1]); if ($bIsProcessList) { - $str = ' ' . $pmaString->strtoupper($which[1]); + $str = ' ' . strtoupper($which[1]); $bIsProcessList = $bIsProcessList - && $pmaString->strpos($str, 'PROCESSLIST') > 0; + && strpos($str, 'PROCESSLIST') > 0; } if ($bIsProcessList) { @@ -511,7 +509,7 @@ class PMA_DisplayResults $the_total = $unlim_num_rows; } elseif ((($do_display['nav_bar'] == '1') || ($do_display['sort_lnk'] == '1')) - && ($pmaString->strlen($db) && !empty($table)) + && (/*overload*/mb_strlen($db) && !empty($table)) ) { $the_total = PMA_Table::countRecords($db, $table); } @@ -1852,7 +1850,7 @@ class PMA_DisplayResults // FROM `PMA_relation` AS `1` , `PMA_relation` AS `2` $sort_tbl = (isset($fields_meta->table) - && $GLOBALS['PMA_String']->strlen($fields_meta->table)) + && /*overload*/mb_strlen($fields_meta->table)) ? PMA_Util::backquote( $fields_meta->table ) . '.' @@ -1957,8 +1955,6 @@ class PMA_DisplayResults } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; $sort_expression_nodirection = array_filter($sort_expression_nodirection); foreach ($sort_expression_nodirection as $index=>$expression) { // check if this is the first clause, @@ -1968,7 +1964,7 @@ class PMA_DisplayResults $sort_tbl_new = $sort_tbl; // Test to detect if the column name is a standard name // Standard name has the table name prefixed to the column name - if ($pmaString->strpos($name_to_use_in_sort, '.') !== false) { + if (/*overload*/mb_strpos($name_to_use_in_sort, '.') !== false) { $matches = explode('.', $name_to_use_in_sort); // Matches[0] has the table name // Matches[1] has the column name @@ -1986,7 +1982,7 @@ class PMA_DisplayResults // order by clause to the column name $query_head = $is_first_clause ? "\nORDER BY " : ""; // Again a check to see if the given column is a aggregate column - if ($pmaString->strpos($name_to_use_in_sort, '(') !== false) { + if (/*overload*/mb_strpos($name_to_use_in_sort, '(') !== false) { $sort_order .= $query_head . $name_to_use_in_sort . ' ' ; } else { $sort_order .= $query_head . $sort_tbl_new . "." @@ -2000,7 +1996,7 @@ class PMA_DisplayResults $sort_order = preg_replace("/\.\./", ".", $sort_order); // Incase this is the current column save $single_sort_order if ($current_name == $name_to_use_in_sort) { - if ($pmaString->strpos($current_name, '(') !== false) { + if (/*overload*/mb_strpos($current_name, '(') !== false) { $single_sort_order = "\n" . 'ORDER BY ' . $current_name . ' '; } else { $single_sort_order = "\n" . 'ORDER BY ' . $sort_tbl @@ -2015,8 +2011,7 @@ class PMA_DisplayResults $column_index, $index ); } else { - $single_sort_order .= $pmaString - ->strtoupper($sort_direction[$index]); + $single_sort_order .= strtoupper($sort_direction[$index]); } } if ($current_name == $name_to_use_in_sort && $is_in_sort) { @@ -2026,7 +2021,7 @@ class PMA_DisplayResults ); $order_img .= " <small>" . ($index + 1) . "</small>"; } else { - $sort_order .= $pmaString->strtoupper($sort_direction[$index]); + $sort_order .= strtoupper($sort_direction[$index]); } // Separate columns by a comma $sort_order .= ", "; @@ -2035,10 +2030,10 @@ class PMA_DisplayResults } // remove the comma from the last column name in the newly // constructed clause - $sort_order = $pmaString->substr( + $sort_order = /*overload*/mb_substr( $sort_order, 0, - $pmaString->strlen($sort_order)-2 + /*overload*/mb_strlen($sort_order)-2 ); if (empty($order_img)) { $order_img = ''; @@ -2067,10 +2062,8 @@ class PMA_DisplayResults $index_in_expression = 0; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; foreach ($sort_expression_nodirection as $index => $clause) { - if ($pmaString->strpos($clause, '.') !== false) { + if (/*overload*/mb_strpos($clause, '.') !== false) { $fragments = explode('.', $clause); $clause2 = $fragments[0] . "." . str_replace('`', '', $fragments[1]); } else { @@ -2094,8 +2087,8 @@ class PMA_DisplayResults // SELECT p.*, FROM_UNIXTIME(p.temps) FROM mytable AS p // (and try clicking on each column's header twice) if (! empty($sort_tbl) - && $pmaString->strpos($sort_expression_nodirection[$index_in_expression], $sort_tbl) === false - && $pmaString->strpos($sort_expression_nodirection[$index_in_expression], '(') === false + && /*overload*/mb_strpos($sort_expression_nodirection[$index_in_expression], $sort_tbl) === false + && /*overload*/mb_strpos($sort_expression_nodirection[$index_in_expression], '(') === false ) { $new_sort_expression_nodirection = $sort_tbl . $sort_expression_nodirection[$index_in_expression]; @@ -2140,10 +2133,7 @@ class PMA_DisplayResults private function _getSortingUrlParams( $sort_direction, $sort_order, $column_index, $index ) { - $sort_direction_upper = $GLOBALS['PMA_String']->strtoupper( - trim($sort_direction[$index]) - ); - if ($sort_direction_upper == self::DESCENDING_SORT_DIR) { + if (strtoupper(trim($sort_direction[$index])) == self::DESCENDING_SORT_DIR) { $sort_order .= ' ASC'; $order_img = ' ' . PMA_Util::getImage( 's_desc.png', __('Descending'), @@ -2188,15 +2178,12 @@ class PMA_DisplayResults $order_img, $col_index, $direction, $fields_meta, $order_url, $multi_order_url ) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $order_link_params = array(); if (isset($order_img) && ($order_img != '')) { - if ($pmaString->strstr($order_img, 'asc')) { + if (/*overload*/mb_strstr($order_img, 'asc')) { $order_link_params['onmouseover'] = "$('.soimg$col_index').toggle()"; $order_link_params['onmouseout'] = "$('.soimg$col_index').toggle()"; - } elseif ($pmaString->strstr($order_img, 'desc')) { + } elseif (/*overload*/mb_strstr($order_img, 'desc')) { $order_link_params['onmouseover'] = "$('.soimg$col_index').toggle()"; $order_link_params['onmouseout'] = "$('.soimg$col_index').toggle()"; } @@ -2566,15 +2553,13 @@ class PMA_DisplayResults 'binary' => 'hex', ); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; foreach ($matches as $key => $value) { - if ($pmaString->strpos($meta->flags, $key) !== false) { + if (/*overload*/mb_strpos($meta->flags, $key) !== false) { $classes[] = $value; } } - if ($pmaString->strpos($meta->type, 'bit') !== false) { + if (/*overload*/mb_strpos($meta->type, 'bit') !== false) { $classes[] = 'bit'; } @@ -2844,8 +2829,6 @@ class PMA_DisplayResults $row_info = $this->_getRowInfoForSpecialLinks($row, $col_order); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; for ($currentColumn = 0; $currentColumn < $this->__get('fields_cnt'); ++$currentColumn) { @@ -2962,9 +2945,9 @@ class PMA_DisplayResults // Check whether the field needs to display with syntax highlighting - $dbLower = $pmaString->strtolower($this->__get('db')); - $tblLower = $pmaString->strtolower($this->__get('table')); - $nameLower = $pmaString->strtolower($meta->name); + $dbLower = /*overload*/mb_strtolower($this->__get('db')); + $tblLower = /*overload*/mb_strtolower($this->__get('table')); + $nameLower = /*overload*/mb_strtolower($meta->name); if (! empty($this->transformation_info[$dbLower][$tblLower][$nameLower]) && (trim($row[$i]) != '') ) { @@ -2980,11 +2963,12 @@ class PMA_DisplayResults : '' ); + $dbLower = /*overload*/mb_strtolower($this->__get('db')); $meta->mimetype = str_replace( '_', '/', $this->transformation_info[$dbLower] - [$pmaString->strtolower($this->__get('table'))] - [$pmaString->strtolower($meta->name)][2] + [/*overload*/mb_strtolower($this->__get('table'))] + [/*overload*/mb_strtolower($meta->name)][2] ); } @@ -2997,7 +2981,7 @@ class PMA_DisplayResults ) { $linking_url = $this->_getSpecialLinkUrl( - $row[$i], $row_info, $pmaString->strtolower($meta->name) + $row[$i], $row_info, /*overload*/mb_strtolower($meta->name) ); include_once "libraries/plugins/transformations/Text_Plain_Link.class.php"; @@ -3198,12 +3182,10 @@ class PMA_DisplayResults private function _getSpecialLinkUrl($column_value, $row_info, $field_name) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; $linking_url_params = array(); $link_relations = $GLOBALS['special_schema_links'] - [$pmaString->strtolower($this->__get('db'))] - [$pmaString->strtolower($this->__get('table'))] + [/*overload*/mb_strtolower($this->__get('db'))] + [/*overload*/mb_strtolower($this->__get('table'))] [$field_name]; if (! is_array($link_relations['link_param'])) { @@ -3233,7 +3215,7 @@ class PMA_DisplayResults } $linking_url_params[$new_param['param_info']] - = $row_info[$pmaString->strtolower($new_param['column_name'])]; + = $row_info[/*overload*/mb_strtolower($new_param['column_name'])]; // Special case 1 - when executing routines, according // to the type of the routine, url param changes @@ -3241,7 +3223,7 @@ class PMA_DisplayResults continue; } - $lowerRoutineType = $pmaString->strtolower($row_info['routine_type']); + $lowerRoutineType = strtolower($row_info['routine_type']); if ($lowerRoutineType == self::ROUTINE_PROCEDURE || $lowerRoutineType == self::ROUTINE_FUNCTION ) { @@ -3271,7 +3253,7 @@ class PMA_DisplayResults for ($n = 0; $n < $this->__get('fields_cnt'); ++$n) { $m = $col_order ? $col_order[$n] : $n; - $row_info[$GLOBALS['PMA_String']->strtolower($fields_meta[$m]->name)] + $row_info[/*overload*/mb_strtolower($fields_meta[$m]->name)] = $row[$m]; } @@ -3298,7 +3280,7 @@ class PMA_DisplayResults && isset($analyzed_sql[0]) && isset($analyzed_sql[0]['querytype']) && ($analyzed_sql[0]['querytype'] == self::QUERY_TYPE_SELECT) - && ($GLOBALS['PMA_String']->strlen($this->__get('sql_query')) > 200) + && (/*overload*/mb_strlen($this->__get('sql_query')) > 200) ) { $url_sql_query = 'SELECT '; @@ -3696,7 +3678,7 @@ class PMA_DisplayResults */ private function _getClassForDateTimeRelatedFields($type) { - if (($GLOBALS['PMA_String']->substr($type, 0, 9) == self::TIMESTAMP_FIELD) + if ((substr($type, 0, 9) == self::TIMESTAMP_FIELD) || ($type == self::DATETIME_FIELD) ) { $field_type_class = 'datetimefield'; @@ -3798,9 +3780,6 @@ class PMA_DisplayResults $transformation_plugin, $default_function, $transform_options, $analyzed_sql ) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - if (! isset($column) || is_null($column)) { $cell = $this->_buildNullDisplay($class, $condition_field, $meta); return $cell; @@ -3814,7 +3793,7 @@ class PMA_DisplayResults // Display as [GEOMETRY - (size)] if ($_SESSION['tmpval']['geoOption'] == self::GEOMETRY_DISP_GEOM) { $geometry_text = $this->_handleNonPrintableContents( - $pmaString->strtoupper(self::GEOMETRY_FIELD), + strtoupper(self::GEOMETRY_FIELD), (isset($column) ? $column : ''), $transformation_plugin, $transform_options, $default_function, $meta ); @@ -3847,7 +3826,7 @@ class PMA_DisplayResults if ($_SESSION['tmpval']['display_binary']) { $where_comparison = ' = ' . $column; - $wkbval = $pmaString->substr(bin2hex($column), 8); + $wkbval = substr(bin2hex($column), 8); $is_field_truncated = $this->_getPartialText($wkbval); $cell = $this->_getRowData( @@ -3911,14 +3890,11 @@ class PMA_DisplayResults $transformation_plugin, $default_function, $transform_options, $is_field_truncated, $analyzed_sql, &$dt_result, $col_index ) { - /** @var PMA_String $pmaStr */ - $pmaStr = $GLOBALS['PMA_String']; - $is_analyse = $this->__get('is_analyse'); $field_flags = $GLOBALS['dbi']->fieldFlags($dt_result, $col_index); $bIsText = gettype($transformation_plugin) === 'object' - && $pmaStr->strpos($transformation_plugin->getMIMEtype(), 'Text') + && strpos($transformation_plugin->getMIMEtype(), 'Text') === false; // disable inline grid editing @@ -3949,7 +3925,7 @@ class PMA_DisplayResults // Cut all fields to $GLOBALS['cfg']['LimitChars'] // (unless it's a link-type transformation or binary) if (!(gettype($transformation_plugin) === "object" - && $pmaStr->strpos($transformation_plugin->getName(), 'Link') !== false) + && strpos($transformation_plugin->getName(), 'Link') !== false) && !stristr($field_flags, self::BINARY_FIELD) ) { $is_field_truncated = $this->_getPartialText($column); @@ -3991,11 +3967,11 @@ class PMA_DisplayResults } $formatted = true; - } elseif ((($pmaStr->substr($meta->type, 0, 9) == self::TIMESTAMP_FIELD) + } elseif (((substr($meta->type, 0, 9) == self::TIMESTAMP_FIELD) || ($meta->type == self::DATETIME_FIELD) || ($meta->type == self::TIME_FIELD) || ($meta->type == self::TIME_FIELD)) - && ($pmaStr->strpos($column, ".") !== false) // micro seconds delimeter + && (/*overload*/mb_strpos($column, ".") !== false) // micro seconds delimeter ) { $column = PMA_Util::addMicroseconds($column); } @@ -4563,11 +4539,8 @@ class PMA_DisplayResults ); } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // 2.3 Prepare the navigation bars - if (!$pmaString->strlen($this->__get('table'))) { + if (!/*overload*/mb_strlen($this->__get('table'))) { if (isset($analyzed_sql[0]['query_type']) && ($analyzed_sql[0]['query_type'] == self::QUERY_TYPE_SELECT) @@ -4615,7 +4588,7 @@ class PMA_DisplayResults } - if ($pmaString->strlen($this->__get('table'))) { + if (/*overload*/mb_strlen($this->__get('table'))) { // This method set the values for $map array $this->_setParamForLinkForeignKeyRelatedTables($map); } // end if @@ -4791,9 +4764,7 @@ class PMA_DisplayResults return null; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - if ($pmaString->strpos($sort_expression_nodirection, '.') === false) { + if (/*overload*/mb_strpos($sort_expression_nodirection, '.') === false) { $sort_table = $this->__get('table'); $sort_column = $sort_expression_nodirection; } else { @@ -4844,8 +4815,8 @@ class PMA_DisplayResults $column_for_first_row = $row[$sorted_column_index]; } - $column_for_first_row = $pmaString->strtoupper( - $pmaString->substr( + $column_for_first_row = /*overload*/mb_strtoupper( + /*overload*/mb_substr( $column_for_first_row, 0, $GLOBALS['cfg']['LimitChars'] ) ); @@ -4870,8 +4841,8 @@ class PMA_DisplayResults $column_for_last_row = $row[$sorted_column_index]; } - $column_for_last_row = $pmaString->strtoupper( - $pmaString->substr( + $column_for_last_row = /*overload*/mb_strtoupper( + /*overload*/mb_substr( $column_for_last_row, 0, $GLOBALS['cfg']['LimitChars'] ) ); @@ -5492,11 +5463,9 @@ class PMA_DisplayResults $is_truncated = false; $result = '[' . $category; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; if (isset($content)) { - $size = $pmaString->strlen($content); + $size = /*overload*/mb_strlen($content); $display_size = PMA_Util::formatByteDown($size, 3, 1); $result .= ' - ' . $display_size[0] . ' ' . $display_size[1]; @@ -5511,10 +5480,8 @@ class PMA_DisplayResults // if we want to use a text transformation on a BLOB column if (gettype($transformation_plugin) === "object") { - $posMimeOctetstream = $pmaString - ->strpos($transformation_plugin->getMIMESubtype(), 'Octetstream'); - $posMimeText = $pmaString - ->strpos($transformation_plugin->getMIMEtype(), 'Text'); + $posMimeOctetstream = strpos($transformation_plugin->getMIMESubtype(), 'Octetstream'); + $posMimeText = strpos($transformation_plugin->getMIMEtype(), 'Text'); if ($posMimeOctetstream || $posMimeText !== false ) { @@ -5607,8 +5574,6 @@ class PMA_DisplayResults ) . '">'; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; if (isset($analyzed_sql[0]['select_expr']) && is_array($analyzed_sql[0]['select_expr']) ) { @@ -5620,7 +5585,7 @@ class PMA_DisplayResults $alias = $analyzed_sql[0]['select_expr'] [$select_expr_position]['alias']; - if (!isset($alias) || !$pmaString->strlen($alias)) { + if (!isset($alias) || !/*overload*/mb_strlen($alias)) { continue; } // end if @@ -5640,7 +5605,7 @@ class PMA_DisplayResults // Field to display from the foreign table? if (isset($map[$meta->name][2]) - && $pmaString->strlen($map[$meta->name][2]) + && /*overload*/mb_strlen($map[$meta->name][2]) ) { $dispsql = 'SELECT ' @@ -6056,10 +6021,10 @@ class PMA_DisplayResults */ private function _getPartialText(&$str) { - if ($GLOBALS['PMA_String']->strlen($str) > $GLOBALS['cfg']['LimitChars'] + if (/*overload*/mb_strlen($str) > $GLOBALS['cfg']['LimitChars'] && $_SESSION['tmpval']['pftext'] === self::DISPLAY_PARTIAL_TEXT ) { - $str = $GLOBALS['PMA_String']->substr( + $str = /*overload*/mb_substr( $str, 0, $GLOBALS['cfg']['LimitChars'] ) . '...'; diff --git a/libraries/Error.class.php b/libraries/Error.class.php index 4e5b22ca2b..87d0ef9423 100644 --- a/libraries/Error.class.php +++ b/libraries/Error.class.php @@ -252,7 +252,7 @@ class PMA_Error extends PMA_Message public function getHtmlTitle() { return htmlspecialchars( - $GLOBALS['PMA_String']->substr($this->getTitle(), 0, 100) + /*overload*/mb_substr($this->getTitle(), 0, 100) ); } @@ -437,7 +437,7 @@ class PMA_Error extends PMA_Message { $dest = realpath($dest); - if ($GLOBALS['PMA_String']->substr(PHP_OS, 0, 3) == 'WIN') { + if (substr(PHP_OS, 0, 3) == 'WIN') { $separator = '\\'; } else { $separator = '/'; diff --git a/libraries/File.class.php b/libraries/File.class.php index 3682ca0070..a17398d974 100644 --- a/libraries/File.class.php +++ b/libraries/File.class.php @@ -714,7 +714,7 @@ class PMA_File */ public function getContentLength() { - return $GLOBALS['PMA_String']->strlen($this->_content); + return /*overload*/mb_strlen($this->_content); } /** diff --git a/libraries/Font.class.php b/libraries/Font.class.php index b86ef61dfa..d7c1ee60cd 100644 --- a/libraries/Font.class.php +++ b/libraries/Font.class.php @@ -102,21 +102,19 @@ class PMA_Font */ $count = 0; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; foreach ($charLists as $charList) { - $count += (($pmaString->strlen($text) - - $pmaString->strlen(str_replace($charList["chars"], "", $text)) + $count += ((/*overload*/mb_strlen($text) + - /*overload*/mb_strlen(str_replace($charList["chars"], "", $text)) ) * $charList["modifier"]); } $text = str_replace(" ", "", $text);//remove the " "'s //all other chars $count = $count - + ($pmaString->strlen(preg_replace("/[a-z0-9]/i", "", $text)) * 0.3); + + (/*overload*/mb_strlen(preg_replace("/[a-z0-9]/i", "", $text)) * 0.3); $modifier = 1; - $font = $pmaString->strtolower($font); + $font = /*overload*/mb_strtolower($font); switch ($font) { /* * no modifier for arial and sans-serif diff --git a/libraries/Header.class.php b/libraries/Header.class.php index 85523464a3..7dfddee8d1 100644 --- a/libraries/Header.class.php +++ b/libraries/Header.class.php @@ -564,12 +564,10 @@ class PMA_Header $lang = $GLOBALS['available_languages'][$GLOBALS['lang']][1]; $dir = $GLOBALS['text_dir']; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; $retval = "<!DOCTYPE HTML>"; $retval .= "<html lang='$lang' dir='$dir' class='"; - $retval .= $pmaString->strtolower(PMA_USR_BROWSER_AGENT) . " "; - $retval .= $pmaString->strtolower(PMA_USR_BROWSER_AGENT) + $retval .= /*overload*/mb_strtolower(PMA_USR_BROWSER_AGENT) . " "; + $retval .= /*overload*/mb_strtolower(PMA_USR_BROWSER_AGENT) . intval(PMA_USR_BROWSER_VER) . "'>"; return $retval; @@ -713,7 +711,7 @@ class PMA_Header { $retval = ''; if ($this->_menuEnabled - && $GLOBALS['PMA_String']->strlen($table) + && /*overload*/mb_strlen($table) && $GLOBALS['cfg']['NumRecentTables'] > 0 ) { $tmp_result = PMA_RecentFavoriteTable::getInstance('recent')->add($db, $table); diff --git a/libraries/Index.class.php b/libraries/Index.class.php index 8b0c21cca3..0393bf8c1b 100644 --- a/libraries/Index.class.php +++ b/libraries/Index.class.php @@ -111,7 +111,7 @@ class PMA_Index PMA_Index::_loadIndexes($table, $schema); if (! isset(PMA_Index::$_registry[$schema][$table][$index_name])) { $index = new PMA_Index; - if ($GLOBALS['PMA_String']->strlen($index_name)) { + if (/*overload*/mb_strlen($index_name)) { $index->setName($index_name); PMA_Index::$_registry[$schema][$table][$index->getName()] = $index; } @@ -200,7 +200,7 @@ class PMA_Index public function addColumn($params) { if (isset($params['Column_name']) - && $GLOBALS['PMA_String']->strlen($params['Column_name']) + && /*overload*/mb_strlen($params['Column_name']) ) { $this->_columns[$params['Column_name']] = new PMA_Index_Column($params); } @@ -341,7 +341,7 @@ class PMA_Index public function getComments() { $comments = $this->getRemarks(); - if ($GLOBALS['PMA_String']->strlen($comments)) { + if (/*overload*/mb_strlen($comments)) { $comments .= "\n"; } $comments .= $this->getComment(); diff --git a/libraries/List_Database.class.php b/libraries/List_Database.class.php index efe1f87a17..1c9a426a97 100644 --- a/libraries/List_Database.class.php +++ b/libraries/List_Database.class.php @@ -142,7 +142,7 @@ class PMA_List_Database extends PMA_List protected function checkOnlyDatabase() { if (is_string($GLOBALS['cfg']['Server']['only_db']) - && $GLOBALS['PMA_String']->strlen($GLOBALS['cfg']['Server']['only_db']) + && /*overload*/mb_strlen($GLOBALS['cfg']['Server']['only_db']) ) { $GLOBALS['cfg']['Server']['only_db'] = array( $GLOBALS['cfg']['Server']['only_db'] @@ -183,7 +183,7 @@ class PMA_List_Database extends PMA_List */ public function getDefault() { - if ($GLOBALS['PMA_String']->strlen($GLOBALS['db'])) { + if (/*overload*/mb_strlen($GLOBALS['db'])) { return $GLOBALS['db']; } diff --git a/libraries/Menu.class.php b/libraries/Menu.class.php index 9fcdc47dda..31b0385bcc 100644 --- a/libraries/Menu.class.php +++ b/libraries/Menu.class.php @@ -81,7 +81,7 @@ class PMA_Menu */ public function getHash() { - return $GLOBALS['PMA_String']->substr( + return substr( md5($this->_getMenu() . $this->_getBreadcrumbs()), 0, 8 @@ -97,13 +97,11 @@ class PMA_Menu { $url_params = array('db' => $this->_db); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - if ($pmaString->strlen($this->_table)) { + if (/*overload*/mb_strlen($this->_table)) { $tabs = $this->_getTableTabs(); $url_params['table'] = $this->_table; $level = 'table'; - } else if ($pmaString->strlen($this->_db)) { + } else if (/*overload*/mb_strlen($this->_db)) { $tabs = $this->_getDbTabs(); $level = 'db'; } else { @@ -147,13 +145,10 @@ class PMA_Menu $result = PMA_queryAsControlUser($sql_query, false); if ($result) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - while ($row = $GLOBALS['dbi']->fetchAssoc($result)) { - $tabName = $pmaString->substr( + $tabName = /*overload*/mb_substr( $row['tab'], - $pmaString->strpos($row['tab'], '_') + 1 + /*overload*/mb_strpos($row['tab'], '_') + 1 ); unset($allowedTabs[$tabName]); } @@ -202,10 +197,7 @@ class PMA_Menu __('Server') ); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - - if ($pmaString->strlen($this->_db)) { + if (/*overload*/mb_strlen($this->_db)) { $retval .= $separator; if (PMA_Util::showIcons('TabsMode')) { $retval .= PMA_Util::getImage( @@ -223,7 +215,7 @@ class PMA_Menu ); // if the table is being dropped, $_REQUEST['purge'] is set to '1' // so do not display the table name in upper div - if ($pmaString->strlen($this->_table) + if (/*overload*/mb_strlen($this->_table) && ! (isset($_REQUEST['purge']) && $_REQUEST['purge'] == '1') ) { include './libraries/tbl_info.inc.php'; @@ -253,7 +245,7 @@ class PMA_Menu if (! empty($show_comment) && ! isset($GLOBALS['avoid_show_comment']) ) { - if ($pmaString->strstr($show_comment, '; InnoDB free')) { + if (/*overload*/mb_strstr($show_comment, '; InnoDB free')) { $show_comment = preg_replace( '@; InnoDB free:.*?$@', '', diff --git a/libraries/Message.class.php b/libraries/Message.class.php index 2b054f2b2c..29cf41e6fc 100644 --- a/libraries/Message.class.php +++ b/libraries/Message.class.php @@ -501,7 +501,7 @@ class PMA_Message */ public function addMessage($message, $separator = ' ') { - if ($GLOBALS['PMA_String']->strlen($separator)) { + if (/*overload*/mb_strlen($separator)) { $this->addedMessages[] = $separator; } @@ -628,13 +628,11 @@ class PMA_Message { $message = $this->message; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - if (0 === $pmaString->strlen($message)) { + if (0 === /*overload*/mb_strlen($message)) { $string = $this->getString(); if (isset($GLOBALS[$string])) { $message = $GLOBALS[$string]; - } elseif (0 === $pmaString->strlen($string)) { + } elseif (0 === /*overload*/mb_strlen($string)) { $message = ''; } else { $message = $string; diff --git a/libraries/PDF.class.php b/libraries/PDF.class.php index e30f5b2982..fcf8e9423f 100644 --- a/libraries/PDF.class.php +++ b/libraries/PDF.class.php @@ -142,7 +142,7 @@ class PMA_PDF extends TCPDF PMA_downloadHeader( $filename, 'application/pdf', - $GLOBALS['PMA_String']->strlen($pdfData) + /*overload*/mb_strlen($pdfData) ); echo $pdfData; } diff --git a/libraries/RecentFavoriteTable.class.php b/libraries/RecentFavoriteTable.class.php index 3050120ec6..35dfa60d29 100644 --- a/libraries/RecentFavoriteTable.class.php +++ b/libraries/RecentFavoriteTable.class.php @@ -63,12 +63,9 @@ class PMA_RecentFavoriteTable */ private function __construct($type) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $this->_tableType = $type; - if ($pmaString->strlen($GLOBALS['cfg']['Server']['pmadb']) - && $pmaString->strlen($GLOBALS['cfg']['Server'][$this->_tableType]) + if (/*overload*/mb_strlen($GLOBALS['cfg']['Server']['pmadb']) + && /*overload*/mb_strlen($GLOBALS['cfg']['Server'][$this->_tableType]) ) { $this->_pmaTable = PMA_Util::backquote($GLOBALS['cfg']['Server']['pmadb']) . "." diff --git a/libraries/Response.class.php b/libraries/Response.class.php index 452c410c93..9a68467a96 100644 --- a/libraries/Response.class.php +++ b/libraries/Response.class.php @@ -318,10 +318,7 @@ class PMA_Response $this->addJSON('_displayMessage', $this->getHeader()->getMessage()); $errors = $this->_footer->getErrorMessages(); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - - if ($pmaString->strlen($errors)) { + if (/*overload*/mb_strlen($errors)) { $this->addJSON('_errors', $errors); } $promptPhpErrors = $GLOBALS['error_handler']->hasErrorsForPrompt(); @@ -333,7 +330,7 @@ class PMA_Response $query = ''; $maxChars = $GLOBALS['cfg']['MaxCharactersInDisplayedSQL']; if (isset($GLOBALS['sql_query']) - && $pmaString->strlen($GLOBALS['sql_query']) < $maxChars + && /*overload*/mb_strlen($GLOBALS['sql_query']) < $maxChars ) { $query = $GLOBALS['sql_query']; } diff --git a/libraries/Scripts.class.php b/libraries/Scripts.class.php index 57ad677073..19f516a94a 100644 --- a/libraries/Scripts.class.php +++ b/libraries/Scripts.class.php @@ -54,7 +54,7 @@ class PMA_Scripts $dynamic_scripts = ""; $scripts = array(); foreach ($files as $value) { - if ($GLOBALS['PMA_String']->strpos($value['filename'], "?") !== false) { + if (/*overload*/mb_strpos($value['filename'], "?") !== false) { if ($value['before_statics'] === true) { $first_dynamic_scripts .= "<script type='text/javascript' src='js/" . $value['filename'] . "'></script>"; @@ -158,16 +158,13 @@ class PMA_Scripts */ private function _eventBlacklist($filename) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - - if ( $pmaString->strpos($filename, 'jquery') !== false - || $pmaString->strpos($filename, 'codemirror') !== false - || $pmaString->strpos($filename, 'messages.php') !== false - || $pmaString->strpos($filename, 'ajax.js') !== false - || $pmaString->strpos($filename, 'navigation.js') !== false - || $pmaString->strpos($filename, 'get_image.js.php') !== false - || $pmaString->strpos($filename, 'cross_framing_protection.js') !== false + if ( strpos($filename, 'jquery') !== false + || strpos($filename, 'codemirror') !== false + || strpos($filename, 'messages.php') !== false + || strpos($filename, 'ajax.js') !== false + || strpos($filename, 'navigation.js') !== false + || strpos($filename, 'get_image.js.php') !== false + || strpos($filename, 'cross_framing_protection.js') !== false ) { return 0; } @@ -216,7 +213,7 @@ class PMA_Scripts $retval = array(); foreach ($this->_files as $file) { //If filename contains a "?", continue. - if ($GLOBALS['PMA_String']->strpos($file['filename'], "?") !== false) { + if (strpos($file['filename'], "?") !== false) { continue; } diff --git a/libraries/ServerStatusData.class.php b/libraries/ServerStatusData.class.php index 3806dfe365..223c7ed48e 100644 --- a/libraries/ServerStatusData.class.php +++ b/libraries/ServerStatusData.class.php @@ -281,14 +281,11 @@ class PMA_ServerStatusData // Variable to mark used sections $categoryUsed = array(); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // sort vars into arrays foreach ($server_status as $name => $value) { $section_found = false; foreach ($allocations as $filter => $section) { - if ($pmaString->strpos($name, $filter) !== false) { + if (/*overload*/mb_strpos($name, $filter) !== false) { $allocationMap[$name] = $section; $categoryUsed[$section] = true; $section_found = true; @@ -319,7 +316,7 @@ class PMA_ServerStatusData // Set all class properties $this->db_isLocal = false; - if ($pmaString->strtolower($GLOBALS['cfg']['Server']['host']) === 'localhost' + if (/*overload*/mb_strtolower($GLOBALS['cfg']['Server']['host']) === 'localhost' || $GLOBALS['cfg']['Server']['host'] === '127.0.0.1' || $GLOBALS['cfg']['Server']['host'] === '::1' ) { diff --git a/libraries/StorageEngine.class.php b/libraries/StorageEngine.class.php index dead6f1dd0..669cce2428 100644 --- a/libraries/StorageEngine.class.php +++ b/libraries/StorageEngine.class.php @@ -132,10 +132,7 @@ class PMA_StorageEngine $name = 'engine', $id = null, $selected = null, $offerUnavailableEngines = false ) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - - $selected = $pmaString->strtolower($selected); + $selected = /*overload*/mb_strtolower($selected); $output = '<select name="' . $name . '"' . (empty($id) ? '' : ' id="' . $id . '"') . '>' . "\n"; @@ -154,7 +151,7 @@ class PMA_StorageEngine $output .= ' <option value="' . htmlspecialchars($key) . '"' . (empty($details['Comment']) ? '' : ' title="' . htmlspecialchars($details['Comment']) . '"') - . ($pmaString->strtolower($key) == $selected + . (/*overload*/mb_strtolower($key) == $selected || (empty($selected) && $details['Support'] == 'DEFAULT') ? ' selected="selected"' : '') . '>' . "\n" @@ -175,14 +172,11 @@ class PMA_StorageEngine */ static public function getEngine($engine) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $engine = str_replace('/', '', str_replace('.', '', $engine)); $filename = './libraries/engines/' - . $pmaString->strtolower($engine) . '.lib.php'; + . /*overload*/mb_strtolower($engine) . '.lib.php'; if (file_exists($filename) && include_once $filename) { - switch($pmaString->strtolower($engine)) { + switch(/*overload*/mb_strtolower($engine)) { case 'bdb': return new PMA_StorageEngine_Bdb($engine); case 'berkeleydb': @@ -318,9 +312,6 @@ class PMA_StorageEngine $mysql_vars = array(); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $sql_query = 'SHOW GLOBAL VARIABLES ' . $like . ';'; $res = $GLOBALS['dbi']->query($sql_query); while ($row = $GLOBALS['dbi']->fetchAssoc($res)) { @@ -328,7 +319,7 @@ class PMA_StorageEngine $mysql_vars[$row['Variable_name']] = $variables[$row['Variable_name']]; } elseif (! $like - && $pmaString->strpos($pmaString->strtolower($row['Variable_name']), $pmaString->strtolower($this->engine)) !== 0 + && /*overload*/mb_strpos(/*overload*/mb_strtolower($row['Variable_name']), /*overload*/mb_strtolower($this->engine)) !== 0 ) { continue; } diff --git a/libraries/Table.class.php b/libraries/Table.class.php index e8285f14fc..53501bba2c 100644 --- a/libraries/Table.class.php +++ b/libraries/Table.class.php @@ -267,13 +267,10 @@ class PMA_Table AND TABLE_NAME = '" . PMA_Util::sqlAddSlashes($table) . "'" ); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - foreach ($results as $result) { $analyzed_sql[0]['create_table_fields'][$result['COLUMN_NAME']] = array( - 'type' => $pmaString->strtoupper($result['DATA_TYPE']) + 'type' => /*overload*/mb_strtoupper($result['DATA_TYPE']) ); } } else { @@ -346,7 +343,7 @@ class PMA_Table // any of known merge engines? return in_array( - $GLOBALS['PMA_String']->strtoupper($engine), + /*overload*/mb_strtoupper($engine), array('MERGE', 'MRG_MYISAM') ); } @@ -437,11 +434,8 @@ class PMA_Table $default_type = 'USER_DEFINED', $default_value = '', $extra = '', $comment = '', &$field_primary = null, $move_to = '' ) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - - $is_timestamp = $pmaString->strpos( - $pmaString->strtoupper($type), + $is_timestamp = /*overload*/mb_strpos( + /*overload*/mb_strtoupper($type), 'TIMESTAMP' ) !== false; @@ -798,12 +792,9 @@ class PMA_Table return false; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $source = PMA_Util::backquote($source_db) . '.' . PMA_Util::backquote($source_table); - if (! isset($target_db) || ! $pmaString->strlen($target_db)) { + if (! isset($target_db) || ! /*overload*/mb_strlen($target_db)) { $target_db = $source_db; } @@ -865,7 +856,7 @@ class PMA_Table ); // ANSI_QUOTES might be a subset of sql_mode, for example // REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI - if (false !== $pmaString->strpos($server_sql_mode, 'ANSI_QUOTES')) { + if (false !== /*overload*/mb_strpos($server_sql_mode, 'ANSI_QUOTES')) { $table_delimiter = 'quote_double'; } else { $table_delimiter = 'quote_backtick'; @@ -955,7 +946,7 @@ class PMA_Table $cnt = $parsed_sql['len'] - 1; for ($j = $i; $j < $cnt; $j++) { - $dataUpper = $pmaString->strtoupper($parsed_sql[$j]['data']); + $dataUpper = /*overload*/mb_strtoupper($parsed_sql[$j]['data']); if ($parsed_sql[$j]['type'] == 'alpha_reservedWord' && $dataUpper == 'CONSTRAINT' ) { @@ -992,7 +983,7 @@ class PMA_Table $cnt = $parsed_sql['len'] - 1; for ($j = $i; $j < $cnt; $j++) { - $dataUpper = $pmaString->strtoupper($parsed_sql[$j]['data']); + $dataUpper = /*overload*/mb_strtoupper($parsed_sql[$j]['data']); if ($parsed_sql[$j]['type'] == 'alpha_reservedWord' && $dataUpper == 'CONSTRAINT' ) { @@ -1275,7 +1266,7 @@ class PMA_Table return false; } - if (! $GLOBALS['PMA_String']->strlen($table_name)) { + if (! /*overload*/mb_strlen($table_name)) { // zero length return false; } @@ -1587,16 +1578,13 @@ class PMA_Table { $server_id = $GLOBALS['server']; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // set session variable if it's still undefined if (! isset($_SESSION['tmpval']['table_uiprefs'][$server_id][$this->db_name][$this->name])) { // check whether we can get from pmadb $_SESSION['tmpval']['table_uiprefs'][$server_id][$this->db_name] [$this->name] - = ($pmaString->strlen($GLOBALS['cfg']['Server']['pmadb']) - && $pmaString->strlen($GLOBALS['cfg']['Server']['table_uiprefs']) + = (/*overload*/mb_strlen($GLOBALS['cfg']['Server']['pmadb']) + && /*overload*/mb_strlen($GLOBALS['cfg']['Server']['table_uiprefs']) ) ? $this->getUiPrefsFromDb() : array(); @@ -1634,16 +1622,16 @@ class PMA_Table //get the available column name without backquoting $avail_columns = $this->getColumns(false); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - foreach ($avail_columns as $each_col) { // check if $each_col ends with $colname if (substr_compare( - $each_col, - $colname, - $pmaString->strlen($each_col) - $pmaString->strlen($colname) - ) === 0) { + $each_col, + $colname, + /*overload*/ + mb_strlen($each_col) - /*overload*/ + mb_strlen($colname) + ) === 0 + ) { return $this->uiprefs[$property]; } } @@ -1729,12 +1717,9 @@ class PMA_Table // save the value $this->uiprefs[$property] = $value; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // check if pmadb is set - if ($pmaString->strlen($GLOBALS['cfg']['Server']['pmadb']) - && $pmaString->strlen($GLOBALS['cfg']['Server']['table_uiprefs']) + if (/*overload*/mb_strlen($GLOBALS['cfg']['Server']['pmadb']) + && /*overload*/mb_strlen($GLOBALS['cfg']['Server']['table_uiprefs']) ) { return $this->saveUiprefsToDb(); } @@ -1756,12 +1741,9 @@ class PMA_Table if (isset($this->uiprefs[$property])) { unset($this->uiprefs[$property]); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // check if pmadb is set - if ($pmaString->strlen($GLOBALS['cfg']['Server']['pmadb']) - && $pmaString->strlen($GLOBALS['cfg']['Server']['table_uiprefs']) + if (/*overload*/mb_strlen($GLOBALS['cfg']['Server']['pmadb']) + && /*overload*/mb_strlen($GLOBALS['cfg']['Server']['table_uiprefs']) ) { return $this->saveUiprefsToDb(); } diff --git a/libraries/TableSearch.class.php b/libraries/TableSearch.class.php index 9fd0033003..f204658327 100644 --- a/libraries/TableSearch.class.php +++ b/libraries/TableSearch.class.php @@ -151,7 +151,7 @@ class PMA_TableSearch } $type = preg_replace('@ZEROFILL@i', '', $type); $type = preg_replace('@UNSIGNED@i', '', $type); - $type = $GLOBALS['PMA_String']->strtolower($type); + $type = /*overload*/mb_strtolower($type); } if (empty($type)) { $type = ' '; @@ -314,7 +314,7 @@ class PMA_TableSearch $html_output = ''; $value = explode( ', ', - str_replace("'", '', $GLOBALS['PMA_String']->substr($column_type, 5, -1)) + str_replace("'", '', /*overload*/mb_substr($column_type, 5, -1)) ); $cnt_value = count($value); @@ -404,16 +404,13 @@ class PMA_TableSearch // other cases $the_class = 'textfield'; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - if ($column_type == 'date') { $the_class .= ' datefield'; } elseif ($column_type == 'datetime' - || $pmaString->substr($column_type, 0, 9) == 'timestamp' + || substr($column_type, 0, 9) == 'timestamp' ) { $the_class .= ' datetimefield'; - } elseif ($pmaString->substr($column_type, 0, 3) == 'bit') { + } elseif (substr($column_type, 0, 3) == 'bit') { $the_class .= ' bit'; } @@ -560,7 +557,7 @@ class PMA_TableSearch // strings to numbers and numbers to strings as necessary // during the comparison if (preg_match('@char|binary|blob|text|set|date|time|year@i', $types) - || $GLOBALS['PMA_String']->strpos(' ' . $func_type, 'LIKE') + || /*overload*/mb_strpos(' ' . $func_type, 'LIKE') ) { $quot = '\''; } else { diff --git a/libraries/Tracker.class.php b/libraries/Tracker.class.php index a4f89cfa72..9aee25085f 100644 --- a/libraries/Tracker.class.php +++ b/libraries/Tracker.class.php @@ -166,7 +166,7 @@ class PMA_Tracker */ static protected function getTableName($string) { - if ($GLOBALS['PMA_String']->strstr($string, '.')) { + if (/*overload*/mb_strstr($string, '.')) { $temp = explode('.', $string); $tablename = $temp[1]; } else { @@ -610,21 +610,18 @@ class PMA_Tracker $ddlog = array(); $i = 0; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Iterate tracked data definition statements // For each log entry we want to get date, username and statement foreach ($log_schema_entries as $log_entry) { if (trim($log_entry) != '') { - $date = $pmaString->substr($log_entry, 0, 19); - $username = $pmaString->substr( - $log_entry, 20, $pmaString->strpos($log_entry, "\n") - 20 + $date = /*overload*/mb_substr($log_entry, 0, 19); + $username = /*overload*/mb_substr( + $log_entry, 20, /*overload*/mb_strpos($log_entry, "\n") - 20 ); if ($i == 0) { $ddl_date_from = $date; } - $statement = rtrim($pmaString->strstr($log_entry, "\n")); + $statement = rtrim(/*overload*/mb_strstr($log_entry, "\n")); $ddlog[] = array( 'date' => $date, 'username'=> $username, @@ -645,14 +642,14 @@ class PMA_Tracker // For each log entry we want to get date, username and statement foreach ($log_data_entries as $log_entry) { if (trim($log_entry) != '') { - $date = $pmaString->substr($log_entry, 0, 19); - $username = $pmaString->substr( - $log_entry, 20, $pmaString->strpos($log_entry, "\n") - 20 + $date = /*overload*/mb_substr($log_entry, 0, 19); + $username = /*overload*/mb_substr( + $log_entry, 20, /*overload*/mb_strpos($log_entry, "\n") - 20 ); if ($i == 0) { $dml_date_from = $date; } - $statement = rtrim($pmaString->strstr($log_entry, "\n")); + $statement = rtrim(/*overload*/mb_strstr($log_entry, "\n")); $dmlog[] = array( 'date' => $date, 'username' => $username, @@ -701,9 +698,6 @@ class PMA_Tracker */ static public function parseQuery($query) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Usage of PMA_SQP does not work here // // require_once("libraries/sqlparser.lib.php"); @@ -718,11 +712,11 @@ class PMA_Tracker $tokens = explode(" ", $query); foreach ($tokens as $key => $value) { - $tokens[$key] = $pmaString->strtoupper($value); + $tokens[$key] = /*overload*/mb_strtoupper($value); } // Parse USE statement, need it for SQL dump imports - if ($pmaString->substr($query, 0, 4) == 'USE ') { + if (/*overload*/mb_substr($query, 0, 4) == 'USE ') { $prefix = explode('USE ', $query); $GLOBALS['db'] = self::getTableName($prefix[1]); } @@ -743,7 +737,7 @@ class PMA_Tracker $index = array_search('VIEW', $tokens); - $result['tablename'] = $pmaString->strtolower( + $result['tablename'] = /*overload*/mb_strtolower( self::getTableName($tokens[$index + 1]) ); } @@ -758,19 +752,19 @@ class PMA_Tracker $index = array_search('VIEW', $tokens); - $result['tablename'] = $pmaString->strtolower( + $result['tablename'] = /*overload*/mb_strtolower( self::getTableName($tokens[$index + 1]) ); } // Parse DROP VIEW statement if (! isset($result['identifier']) - && $pmaString->substr($query, 0, 10) == 'DROP VIEW ' + && substr($query, 0, 10) == 'DROP VIEW ' ) { $result['identifier'] = 'DROP VIEW'; $prefix = explode('DROP VIEW ', $query); - $str = $pmaString->strstr($prefix[1], 'IF EXISTS'); + $str = /*overload*/mb_strstr($prefix[1], 'IF EXISTS'); if ($str == false ) { $str = $prefix[1]; @@ -780,7 +774,7 @@ class PMA_Tracker // Parse CREATE DATABASE statement if (! isset($result['identifier']) - && $pmaString->substr($query, 0, 15) == 'CREATE DATABASE' + && substr($query, 0, 15) == 'CREATE DATABASE' ) { $result['identifier'] = 'CREATE DATABASE'; $str = str_replace('CREATE DATABASE', '', $query); @@ -794,7 +788,7 @@ class PMA_Tracker // Parse ALTER DATABASE statement if (! isset($result['identifier']) - && $pmaString->substr($query, 0, 14) == 'ALTER DATABASE' + && substr($query, 0, 14) == 'ALTER DATABASE' ) { $result['identifier'] = 'ALTER DATABASE'; $result['tablename'] = ''; @@ -802,7 +796,7 @@ class PMA_Tracker // Parse DROP DATABASE statement if (! isset($result['identifier']) - && $pmaString->substr($query, 0, 13) == 'DROP DATABASE' + && substr($query, 0, 13) == 'DROP DATABASE' ) { $result['identifier'] = 'DROP DATABASE'; $str = str_replace('DROP DATABASE', '', $query); @@ -813,7 +807,7 @@ class PMA_Tracker // Parse CREATE TABLE statement if (! isset($result['identifier']) - && $pmaString->substr($query, 0, 12) == 'CREATE TABLE' + && substr($query, 0, 12) == 'CREATE TABLE' ) { $result['identifier'] = 'CREATE TABLE'; $query = str_replace('IF NOT EXISTS', '', $query); @@ -824,7 +818,7 @@ class PMA_Tracker // Parse ALTER TABLE statement if (! isset($result['identifier']) - && $pmaString->substr($query, 0, 12) == 'ALTER TABLE ' + && substr($query, 0, 12) == 'ALTER TABLE ' ) { $result['identifier'] = 'ALTER TABLE'; @@ -835,12 +829,12 @@ class PMA_Tracker // Parse DROP TABLE statement if (! isset($result['identifier']) - && $pmaString->substr($query, 0, 11) == 'DROP TABLE ' + && substr($query, 0, 11) == 'DROP TABLE ' ) { $result['identifier'] = 'DROP TABLE'; $prefix = explode('DROP TABLE ', $query); - $str = $pmaString->strstr($prefix[1], 'IF EXISTS'); + $str = /*overload*/mb_strstr($prefix[1], 'IF EXISTS'); if ($str == false ) { $str = $prefix[1]; @@ -850,9 +844,9 @@ class PMA_Tracker // Parse CREATE INDEX statement if (! isset($result['identifier']) - && ($pmaString->substr($query, 0, 12) == 'CREATE INDEX' - || $pmaString->substr($query, 0, 19) == 'CREATE UNIQUE INDEX' - || $pmaString->substr($query, 0, 20) == 'CREATE SPATIAL INDEX') + && (substr($query, 0, 12) == 'CREATE INDEX' + || substr($query, 0, 19) == 'CREATE UNIQUE INDEX' + || substr($query, 0, 20) == 'CREATE SPATIAL INDEX') ) { $result['identifier'] = 'CREATE INDEX'; $prefix = explode('ON ', $query); @@ -862,7 +856,7 @@ class PMA_Tracker // Parse DROP INDEX statement if (! isset($result['identifier']) - && $pmaString->substr($query, 0, 10) == 'DROP INDEX' + && substr($query, 0, 10) == 'DROP INDEX' ) { $result['identifier'] = 'DROP INDEX'; $prefix = explode('ON ', $query); @@ -871,7 +865,7 @@ class PMA_Tracker // Parse RENAME TABLE statement if (! isset($result['identifier']) - && $pmaString->substr($query, 0, 13) == 'RENAME TABLE ' + && substr($query, 0, 13) == 'RENAME TABLE ' ) { $result['identifier'] = 'RENAME TABLE'; $prefix = explode('RENAME TABLE ', $query); @@ -889,7 +883,7 @@ class PMA_Tracker } // Parse UPDATE statement if (! isset($result['identifier']) - && $pmaString->substr($query, 0, 6) == 'UPDATE' + && substr($query, 0, 6) == 'UPDATE' ) { $result['identifier'] = 'UPDATE'; $prefix = explode('UPDATE ', $query); @@ -899,7 +893,7 @@ class PMA_Tracker // Parse INSERT INTO statement if (! isset($result['identifier']) - && $pmaString->substr($query, 0, 11) == 'INSERT INTO' + && substr($query, 0, 11) == 'INSERT INTO' ) { $result['identifier'] = 'INSERT'; $prefix = explode('INSERT INTO', $query); @@ -909,7 +903,7 @@ class PMA_Tracker // Parse DELETE statement if (! isset($result['identifier']) - && $pmaString->substr($query, 0, 6) == 'DELETE' + && substr($query, 0, 6) == 'DELETE' ) { $result['identifier'] = 'DELETE'; $prefix = explode('FROM ', $query); @@ -919,7 +913,7 @@ class PMA_Tracker // Parse TRUNCATE statement if (! isset($result['identifier']) - && $pmaString->substr($query, 0, 8) == 'TRUNCATE' + && substr($query, 0, 8) == 'TRUNCATE' ) { $result['identifier'] = 'TRUNCATE'; $prefix = explode('TRUNCATE', $query); @@ -941,15 +935,12 @@ class PMA_Tracker */ static public function handleQuery($query) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // If query is marked as untouchable, leave - if ($pmaString->strstr($query, "/*NOTRACK*/")) { + if (/*overload*/mb_strstr($query, "/*NOTRACK*/")) { return; } - if (! ($pmaString->substr($query, -1) == ';')) { + if (! (substr($query, -1) == ';')) { $query = $query . ";\n"; } // Get some information about query diff --git a/libraries/Types.class.php b/libraries/Types.class.php index 5da03c1b0e..0729a1322b 100644 --- a/libraries/Types.class.php +++ b/libraries/Types.class.php @@ -314,7 +314,7 @@ class PMA_Types_MySQL extends PMA_Types */ public function getTypeDescription($type) { - $type = $GLOBALS['PMA_String']->strtoupper($type); + $type = /*overload*/mb_strtoupper($type); switch ($type) { case 'TINYINT': return __('A 1-byte integer, signed range is -128 to 127, unsigned range is 0 to 255'); @@ -409,7 +409,7 @@ class PMA_Types_MySQL extends PMA_Types */ public function getTypeClass($type) { - $type = $GLOBALS['PMA_String']->strtoupper($type); + $type = /*overload*/mb_strtoupper($type); switch ($type) { case 'TINYINT': case 'SMALLINT': @@ -762,7 +762,7 @@ class PMA_Types_Drizzle extends PMA_Types */ public function getTypeDescription($type) { - $type = $GLOBALS['PMA_String']->strtoupper($type); + $type = /*overload*/mb_strtoupper($type); switch ($type) { case 'INTEGER': return __('A 4-byte integer, range is -2,147,483,648 to 2,147,483,647'); @@ -811,7 +811,7 @@ class PMA_Types_Drizzle extends PMA_Types */ public function getTypeClass($type) { - $type = $GLOBALS['PMA_String']->strtoupper($type); + $type = /*overload*/mb_strtoupper($type); switch ($type) { case 'INTEGER': case 'BIGINT': diff --git a/libraries/Util.class.php b/libraries/Util.class.php index cac019997e..1f05aebd16 100644 --- a/libraries/Util.class.php +++ b/libraries/Util.class.php @@ -364,14 +364,11 @@ class PMA_Util $quotes[] = $quote; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - foreach ($quotes as $quote) { - if ($pmaString->substr($quoted_string, 0, 1) === $quote - && $pmaString->substr($quoted_string, -1, 1) === $quote + if (/*overload*/mb_substr($quoted_string, 0, 1) === $quote + && /*overload*/mb_substr($quoted_string, -1, 1) === $quote ) { - $unquoted_string = $pmaString->substr($quoted_string, 1, -1); + $unquoted_string = /*overload*/mb_substr($quoted_string, 1, -1); // replace escaped quotes $unquoted_string = str_replace( $quote . $quote, @@ -402,13 +399,10 @@ class PMA_Util { global $cfg; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - if ($truncate - && $pmaString->strlen($sql_query) > $cfg['MaxCharactersInDisplayedSQL'] + && /*overload*/mb_strlen($sql_query) > $cfg['MaxCharactersInDisplayedSQL'] ) { - $sql_query = $pmaString->substr( + $sql_query = /*overload*/mb_substr( $sql_query, 0, $cfg['MaxCharactersInDisplayedSQL'] @@ -449,8 +443,8 @@ class PMA_Util public static function getMySQLDocuURL($link, $anchor = '') { // Fixup for newly used names: - $link = str_replace('_', '-', $GLOBALS['PMA_String']->strtolower($link)); - $anchor = str_replace('_', '-', $GLOBALS['PMA_String']->strtolower($anchor)); + $link = str_replace('_', '-', /*overload*/mb_strtolower($link)); + $anchor = str_replace('_', '-', /*overload*/mb_strtolower($anchor)); if (empty($link)) { $link = 'index'; @@ -631,13 +625,10 @@ class PMA_Util $error_msg .= ' <div class="error"><h1>' . __('Error') . '</h1>' . "\n"; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // if the config password is wrong, or the MySQL server does not // respond, do not show the query that would reveal the // username/password - if (! empty($the_query) && ! $pmaString->strstr($the_query, 'connect')) { + if (! empty($the_query) && ! /*overload*/mb_strstr($the_query, 'connect')) { // --- Added to solve bug #641765 if (function_exists('PMA_SQP_isError') && PMA_SQP_isError()) { $error_msg .= PMA_SQP_getErrorString() . "\n"; @@ -646,7 +637,7 @@ class PMA_Util // --- // modified to show the help on sql errors $error_msg .= '<p><strong>' . __('SQL query:') . '</strong>' . "\n"; - if ($pmaString->strstr($pmaString->strtolower($formatted_sql), 'select') + if (/*overload*/mb_strstr(/*overload*/mb_strtolower($formatted_sql), 'select') ) { // please show me help to the error on select $error_msg .= self::showMySQLDocu('SELECT'); @@ -656,12 +647,12 @@ class PMA_Util 'sql_query' => $the_query, 'show_query' => 1, ); - if ($pmaString->strlen($table)) { + if (/*overload*/mb_strlen($table)) { $_url_params['db'] = $db; $_url_params['table'] = $table; $doedit_goto = '<a href="tbl_sql.php' . PMA_URL_getCommon($_url_params) . '">'; - } elseif ($pmaString->strlen($db)) { + } elseif (/*overload*/mb_strlen($db)) { $_url_params['db'] = $db; $doedit_goto = '<a href="db_sql.php' . PMA_URL_getCommon($_url_params) . '">'; @@ -733,7 +724,7 @@ class PMA_Util exit; } if (! empty($back_url)) { - if ($pmaString->strstr($back_url, '?')) { + if (/*overload*/mb_strstr($back_url, '?')) { $back_url .= '&no_history=true'; } else { $back_url .= '?no_history=true'; @@ -813,7 +804,7 @@ class PMA_Util // in $group we save the reference to the place in $table_groups // where to store the table info if ($GLOBALS['cfg']['NavigationTreeEnableGrouping'] - && $sep && $GLOBALS['PMA_String']->strstr($table_name, $sep) + && $sep && /*overload*/mb_strstr($table_name, $sep) ) { $parts = explode($sep, $table_name); @@ -897,19 +888,16 @@ class PMA_Util return $a_name; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - if (! $do_it) { global $PMA_SQPdata_forbidden_word; - $eltNameUpper = $pmaString->strtoupper($a_name); + $eltNameUpper = /*overload*/mb_strtoupper($a_name); if (!in_array($eltNameUpper, $PMA_SQPdata_forbidden_word)) { return $a_name; } } // '0' is also empty for php :-( - if ($pmaString->strlen($a_name) && $a_name !== '*') { + if (/*overload*/mb_strlen($a_name) && $a_name !== '*') { return '`' . str_replace('`', '``', $a_name) . '`'; } else { return $a_name; @@ -947,12 +935,9 @@ class PMA_Util return $a_name; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - if (! $do_it) { global $PMA_SQPdata_forbidden_word; - $eltNameUpper = $pmaString->strtoupper($a_name); + $eltNameUpper = /*overload*/mb_strtoupper($a_name); if (!in_array($eltNameUpper, $PMA_SQPdata_forbidden_word)) { return $a_name; } @@ -969,7 +954,7 @@ class PMA_Util } // '0' is also empty for php :-( - if ($pmaString->strlen($a_name) && $a_name !== '*') { + if (/*overload*/mb_strlen($a_name) && $a_name !== '*') { return $quote . $a_name . $quote; } else { return $a_name; @@ -1074,17 +1059,14 @@ class PMA_Util $query_too_big = false; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - - if ($pmaString->strlen($query_base) > $cfg['MaxCharactersInDisplayedSQL'] + if (/*overload*/mb_strlen($query_base) > $cfg['MaxCharactersInDisplayedSQL'] ) { // when the query is large (for example an INSERT of binary // data), the parser chokes; so avoid parsing the query $query_too_big = true; $shortened_query_base = nl2br( htmlspecialchars( - $pmaString->substr( + /*overload*/mb_substr( $sql_query, 0, $cfg['MaxCharactersInDisplayedSQL'] @@ -1158,9 +1140,9 @@ class PMA_Util if (! isset($GLOBALS['db'])) { $GLOBALS['db'] = ''; } - if ($pmaString->strlen($GLOBALS['db'])) { + if (/*overload*/mb_strlen($GLOBALS['db'])) { $url_params['db'] = $GLOBALS['db']; - if ($pmaString->strlen($GLOBALS['table'])) { + if (/*overload*/mb_strlen($GLOBALS['table'])) { $url_params['table'] = $GLOBALS['table']; $edit_link = 'tbl_sql.php'; } else { @@ -1183,7 +1165,7 @@ class PMA_Util } elseif (preg_match( '@^EXPLAIN[[:space:]]+SELECT[[:space:]]+@i', $sql_query )) { - $explain_params['sql_query'] = $pmaString->substr($sql_query, 8); + $explain_params['sql_query'] = /*overload*/mb_substr($sql_query, 8); $_message = __('Skip Explain SQL'); } if (isset($explain_params['sql_query']) && isset($_message)) { @@ -1545,17 +1527,14 @@ class PMA_Util { $return_value = -1; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - if (preg_match('/^[0-9]+GB$/', $formatted_size)) { - $return_value = $pmaString->substr($formatted_size, 0, -2) + $return_value = /*overload*/mb_substr($formatted_size, 0, -2) * self::pow(1024, 3); } elseif (preg_match('/^[0-9]+MB$/', $formatted_size)) { - $return_value = $pmaString->substr($formatted_size, 0, -2) + $return_value = /*overload*/mb_substr($formatted_size, 0, -2) * self::pow(1024, 2); } elseif (preg_match('/^[0-9]+K$/', $formatted_size)) { - $return_value = $pmaString->substr($formatted_size, 0, -1) + $return_value = /*overload*/mb_substr($formatted_size, 0, -1) * self::pow(1024, 1); } return $return_value; @@ -1794,10 +1773,7 @@ class PMA_Util $url, $message, $tag_params = array(), $new_form = true, $strip_img = false, $target = '' ) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - - $url_length = $pmaString->strlen($url); + $url_length = /*overload*/mb_strlen($url); // with this we should be able to catch case of image upload // into a (MEDIUM) BLOB; not worth generating even a form for these if ($url_length > $GLOBALS['cfg']['LinkLengthLimit'] * 100) { @@ -1820,7 +1796,7 @@ class PMA_Util $tag_params_strings = array(); foreach ($tag_params as $par_name => $par_value) { // htmlspecialchars() only on non javascript - $par_value = $pmaString->substr($par_name, 0, 2) == 'on' + $par_value = /*overload*/mb_substr($par_name, 0, 2) == 'on' ? $par_value : htmlspecialchars($par_value); $tag_params_strings[] = $par_name . '="' . $par_value . '"'; @@ -1847,7 +1823,7 @@ class PMA_Util $query_parts = self::splitURLQuery($url); foreach ($query_parts as $query_pair) { list($eachvar, $eachval) = explode('=', $query_pair); - if ($pmaString->strlen($eachval) > $suhosin_get_MaxValueLength) { + if (/*overload*/mb_strlen($eachval) > $suhosin_get_MaxValueLength) { $in_suhosin_limits = false; break; } @@ -1990,7 +1966,7 @@ class PMA_Util $format_string = ''; $charbuff = false; - for ($i = 0, $str_len = $GLOBALS['PMA_String']->strlen($string); + for ($i = 0, $str_len = /*overload*/mb_strlen($string); $i < $str_len; $i++ ) { @@ -2098,9 +2074,6 @@ class PMA_Util $nonprimary_condition_array = array(); $condition_array = array(); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - for ($i = 0; $i < $fields_cnt; ++$i) { $con_val = ''; @@ -2108,7 +2081,7 @@ class PMA_Util $meta = $fields_meta[$i]; // do not use a column alias in a condition - if (! isset($meta->orgname) || ! $pmaString->strlen($meta->orgname)) { + if (! isset($meta->orgname) || ! /*overload*/mb_strlen($meta->orgname)) { $meta->orgname = $meta->name; if (isset($GLOBALS['analyzed_sql'][0]['select_expr']) @@ -2182,7 +2155,7 @@ class PMA_Util // hexify only if this is a true not empty BLOB or a BINARY // do not waste memory building a too big condition - if ($pmaString->strlen($row[$i]) < 1000) { + if (/*overload*/mb_strlen($row[$i]) < 1000) { // use a CAST if possible, to avoid problems // if the field contains wildcard characters % or _ $con_val = '= CAST(0x' . bin2hex($row[$i]) . ' AS BINARY)'; @@ -2190,7 +2163,7 @@ class PMA_Util // when this blob is the only field present // try settling with length comparison $condition = ' CHAR_LENGTH(' . $con_key . ') '; - $con_val = ' = ' . $pmaString->strlen($row[$i]); + $con_val = ' = ' . /*overload*/mb_strlen($row[$i]); } else { // this blob won't be part of the final condition $con_val = null; @@ -2199,7 +2172,7 @@ class PMA_Util && ! empty($row[$i]) ) { // do not build a too big condition - if ($pmaString->strlen($row[$i]) < 5000) { + if (/*overload*/mb_strlen($row[$i]) < 5000) { $condition .= '=0x' . bin2hex($row[$i]) . ' AND'; } else { $condition = ''; @@ -2561,7 +2534,7 @@ class PMA_Util public static function userDir($dir) { // add trailing slash - if ($GLOBALS['PMA_String']->substr($dir, -1) != '/') { + if (/*overload*/mb_substr($dir, -1) != '/') { $dir .= '/'; } @@ -2577,11 +2550,8 @@ class PMA_Util */ public static function getDbLink($database = null) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - - if (! $pmaString->strlen($database)) { - if (! $pmaString->strlen($GLOBALS['db'])) { + if (! /*overload*/mb_strlen($database)) { + if (! /*overload*/mb_strlen($GLOBALS['db'])) { return ''; } $database = $GLOBALS['db']; @@ -2975,27 +2945,24 @@ class PMA_Util */ public static function extractColumnSpec($columnspec) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - - $first_bracket_pos = $pmaString->strpos($columnspec, '('); + $first_bracket_pos = /*overload*/mb_strpos($columnspec, '('); if ($first_bracket_pos) { $spec_in_brackets = chop( - $pmaString->substr( + /*overload*/mb_substr( $columnspec, $first_bracket_pos + 1, - ($pmaString->strrpos($columnspec, ')') - $first_bracket_pos - 1) + (/*overload*/mb_strrpos($columnspec, ')') - $first_bracket_pos - 1) ) ); // convert to lowercase just to be sure - $type = $pmaString->strtolower( - chop($pmaString->substr($columnspec, 0, $first_bracket_pos)) + $type = /*overload*/mb_strtolower( + chop(/*overload*/mb_substr($columnspec, 0, $first_bracket_pos)) ); } else { // Split trailing attributes such as unsigned, // binary, zerofill and get data type name $type_parts = explode(' ', $columnspec); - $type = $pmaString->strtolower($type_parts[0]); + $type = /*overload*/mb_strtolower($type_parts[0]); $spec_in_brackets = ''; } @@ -3011,7 +2978,7 @@ class PMA_Util $enum_set_values = array(); /* Create printable type name */ - $printtype = $pmaString->strtolower($columnspec); + $printtype = /*overload*/mb_strtolower($columnspec); // Strip the "BINARY" attribute, except if we find "BINARY(" because // this would be a BINARY or VARBINARY column type; @@ -3059,11 +3026,10 @@ class PMA_Util // for the case ENUM('–','“') $displayed_type = htmlspecialchars($printtype); - if ($pmaString->strlen($printtype) > $GLOBALS['cfg']['LimitChars']) { - $displayed_type = '<abbr title="' - . htmlspecialchars($printtype) . '">'; + if (/*overload*/mb_strlen($printtype) > $GLOBALS['cfg']['LimitChars']) { + $displayed_type = '<abbr title="' . htmlspecialchars($printtype) . '">'; $displayed_type .= htmlspecialchars( - $GLOBALS['PMA_String']->substr( + /*overload*/mb_substr( $printtype, 0, $GLOBALS['cfg']['LimitChars'] ) ); @@ -3093,7 +3059,7 @@ class PMA_Util */ public static function isForeignKeySupported($engine) { - $engine = $GLOBALS['PMA_String']->strtoupper($engine); + $engine = strtoupper($engine); if (($engine == 'INNODB') || ($engine == 'PBXT')) { return true; } elseif ($engine == 'NDBCLUSTER' || $engine == 'NDB') { @@ -3164,7 +3130,7 @@ class PMA_Util */ public static function duplicateFirstNewline($string) { - $first_occurence = $GLOBALS['PMA_String']->strpos($string, "\r\n"); + $first_occurence = /*overload*/mb_strpos($string, "\r\n"); if ($first_occurence === 0) { $string = "\n" . $string; } @@ -3275,16 +3241,13 @@ class PMA_Util } } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - /* Backward compatibility in 3.5.x */ - if ($pmaString->strpos($string, '@FIELDS@') !== false) { + if (/*overload*/mb_strpos($string, '@FIELDS@') !== false) { $string = strtr($string, array('@FIELDS@' => '@COLUMNS@')); } /* Fetch columns list if required */ - if ($pmaString->strpos($string, '@COLUMNS@') !== false) { + if (/*overload*/mb_strpos($string, '@COLUMNS@') !== false) { $columns_list = $GLOBALS['dbi']->getColumns( $GLOBALS['db'], $GLOBALS['table'] ); @@ -3544,7 +3507,7 @@ class PMA_Util if ($upper_case) { for ($i = 0, $nb = count($gis_data_types); $i < $nb; $i++) { $gis_data_types[$i] - = $GLOBALS['PMA_String']->strtoupper($gis_data_types[$i]); + = /*overload*/mb_strtoupper($gis_data_types[$i]); } } return $gis_data_types; @@ -3601,7 +3564,7 @@ class PMA_Util $funcs['IsEmpty'] = array('params' => 1, 'type' => 'int'); $funcs['IsSimple'] = array('params' => 1, 'type' => 'int'); - $geom_type = trim($GLOBALS['PMA_String']->strtolower($geom_type)); + $geom_type = trim(/*overload*/mb_strtolower($geom_type)); if ($display && $geom_type != 'geometry' && $geom_type != 'multipoint') { $funcs[] = array('display' => '--------'); } @@ -3908,21 +3871,18 @@ class PMA_Util */ public static function getServerType() { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $server_type = 'MySQL'; if (PMA_DRIZZLE) { $server_type = 'Drizzle'; return $server_type; } - if ($pmaString->stripos(PMA_MYSQL_STR_VERSION, 'mariadb') !== false) { + if (/*overload*/mb_stripos(PMA_MYSQL_STR_VERSION, 'mariadb') !== false) { $server_type = 'MariaDB'; return $server_type; } - if ($pmaString->stripos(PMA_MYSQL_VERSION_COMMENT, 'percona') !== false) { + if (/*overload*/mb_stripos(PMA_MYSQL_VERSION_COMMENT, 'percona') !== false) { $server_type = 'Percona Server'; return $server_type; } @@ -3986,15 +3946,12 @@ class PMA_Util $in_string = false; $buffer = ''; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - - for ($i=0, $length = $pmaString->strlen($values_string); + for ($i=0, $length = /*overload*/mb_strlen($values_string); $i < $length; $i++ ) { $curr = $values_string[$i]; - $next = ($i == $pmaString->strlen($values_string)-1) + $next = ($i == /*overload*/mb_strlen($values_string)-1) ? '' : $values_string[$i+1]; @@ -4018,7 +3975,7 @@ class PMA_Util } - if ($pmaString->strlen($buffer) > 0) { + if (/*overload*/mb_strlen($buffer) > 0) { // The leftovers in the buffer are the last value (if any) $values[] = $buffer; } @@ -4044,11 +4001,8 @@ class PMA_Util public static function fillTooltip( &$tooltip_truename, &$tooltip_aliasname, $table ) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - - if ($pmaString->strstr($table['Comment'], '; InnoDB free') === false) { - if (!$pmaString->strstr($table['Comment'], 'InnoDB free') === false) { + if (/*overload*/mb_strstr($table['Comment'], '; InnoDB free') === false) { + if (!/*overload*/mb_strstr($table['Comment'], 'InnoDB free') === false) { // here we have just InnoDB generated part $table['Comment'] = ''; } @@ -4193,15 +4147,12 @@ class PMA_Util */ public static function handleContext(array $context) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - - if ($pmaString->strlen($GLOBALS['cfg']['ProxyUrl'])) { + if (/*overload*/mb_strlen($GLOBALS['cfg']['ProxyUrl'])) { $context['http'] = array( 'proxy' => $GLOBALS['cfg']['ProxyUrl'], 'request_fulluri' => true ); - if ($pmaString->strlen($GLOBALS['cfg']['ProxyUser'])) { + if (/*overload*/mb_strlen($GLOBALS['cfg']['ProxyUser'])) { $auth = base64_encode( $GLOBALS['cfg']['ProxyUser'] . ':' . $GLOBALS['cfg']['ProxyPass'] ); @@ -4222,12 +4173,9 @@ class PMA_Util */ public static function configureCurl(resource $curl_handle) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - - if ($pmaString->strlen($GLOBALS['cfg']['ProxyUrl'])) { + if (/*overload*/mb_strlen($GLOBALS['cfg']['ProxyUrl'])) { curl_setopt($curl_handle, CURLOPT_PROXY, $GLOBALS['cfg']['ProxyUrl']); - if ($pmaString->strlen($GLOBALS['cfg']['ProxyUser'])) { + if (/*overload*/mb_strlen($GLOBALS['cfg']['ProxyUser'])) { curl_setopt( $curl_handle, CURLOPT_PROXYUSERPWD, @@ -4300,13 +4248,10 @@ class PMA_Util } } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $data = json_decode($response); if (is_object($data) - && $pmaString->strlen($data->version) - && $pmaString->strlen($data->date) + && /*overload*/mb_strlen($data->version) + && /*overload*/mb_strlen($data->date) && $save ) { if (! isset($_SESSION) && ! defined('TESTSUITE')) { @@ -4400,19 +4345,16 @@ class PMA_Util */ public static function addMicroseconds($value) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - if (empty($value) || $value == 'CURRENT_TIMESTAMP') { return $value; } - if ($pmaString->strpos($value, '.') === false) { + if (/*overload*/mb_strpos($value, '.') === false) { return $value . '.000000'; } $value .= '000000'; - return $pmaString->substr($value, 0, $pmaString->strpos($value, '.') + 7); + return /*overload*/mb_substr($value, 0, /*overload*/mb_strpos($value, '.') + 7); } /** @@ -4425,19 +4367,13 @@ class PMA_Util */ public static function getCompressionMimeType($file) { - //Can't use PMA_StringMB here, so force use of PMA_StringNative. - include_once 'libraries/StringNative.class.php'; - $pmaString = new PMA_StringNative(); - $test = fread($file, 4); - $len = $pmaString->strlen($test); + $len = strlen($test); fclose($file); - if ($len >= 2 && $test[0] == $pmaString->chr(31) - && $test[1] == $pmaString->chr(139) - ) { + if ($len >= 2 && $test[0] == chr(31) && $test[1] == chr(139)) { return 'application/gzip'; } - if ($len >= 3 && $pmaString->substr($test, 0, 3) == 'BZh') { + if ($len >= 3 && substr($test, 0, 3) == 'BZh') { return 'application/bzip2'; } if ($len >= 4 && $test == "PK\003\004") { diff --git a/libraries/bookmark.lib.php b/libraries/bookmark.lib.php index 2943b60727..dcb80d63c7 100644 --- a/libraries/bookmark.lib.php +++ b/libraries/bookmark.lib.php @@ -218,11 +218,9 @@ function PMA_Bookmark_save($bkm_fields, $all_users = false) $cfgBookmark = PMA_Bookmark_getParams(); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; if (!(isset($bkm_fields['bkm_sql_query']) && isset($bkm_fields['bkm_label']) - && $pmaString->strlen($bkm_fields['bkm_sql_query']) > 0 - && $pmaString->strlen($bkm_fields['bkm_label']) > 0) + && /*overload*/mb_strlen($bkm_fields['bkm_sql_query']) > 0 + && /*overload*/mb_strlen($bkm_fields['bkm_label']) > 0) ) { return false; } diff --git a/libraries/browse_foreigners.lib.php b/libraries/browse_foreigners.lib.php index 38b38e9bab..aea7e95551 100644 --- a/libraries/browse_foreigners.lib.php +++ b/libraries/browse_foreigners.lib.php @@ -180,9 +180,8 @@ function PMA_getHtmlForRelationalFieldSelection($db, $table, $field, $foreignDat */ function PMA_getDescriptionAndTitle($description) { - $pmaString = $GLOBALS['PMA_String']; $limitChars = $GLOBALS['cfg']['LimitChars']; - if ($pmaString->strlen($description) <= $limitChars) { + if (/*overload*/mb_strlen($description) <= $limitChars) { $description = htmlspecialchars( $description ); @@ -192,7 +191,7 @@ function PMA_getDescriptionAndTitle($description) $description ); $description = htmlspecialchars( - $pmaString->substr( + /*overload*/mb_substr( $description, 0, $limitChars ) . '...' diff --git a/libraries/build_html_for_db.lib.php b/libraries/build_html_for_db.lib.php index a7e4399311..599bc92504 100644 --- a/libraries/build_html_for_db.lib.php +++ b/libraries/build_html_for_db.lib.php @@ -132,8 +132,6 @@ function PMA_buildHtmlForDb( } } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; foreach ($replication_types as $type) { if ($replication_info[$type]['status']) { $out .= '<td class="tool" style="text-align: center;">'; @@ -142,14 +140,14 @@ function PMA_buildHtmlForDb( $current["SCHEMA_NAME"], $replication_info[$type]['Ignore_DB'] ); - if ($pmaString->strlen($key) > 0) { + if (/*overload*/mb_strlen($key) > 0) { $out .= PMA_Util::getIcon('s_cancel.png', __('Not replicated')); } else { $key = array_search( $current["SCHEMA_NAME"], $replication_info[$type]['Do_DB'] ); - if ($pmaString->strlen($key) > 0 + if (/*overload*/mb_strlen($key) > 0 || ($replication_info[$type]['Do_DB'][0] == "" && count($replication_info[$type]['Do_DB']) == 1) ) { diff --git a/libraries/central_columns.lib.php b/libraries/central_columns.lib.php index 2d744ee498..74d2cc1d45 100644 --- a/libraries/central_columns.lib.php +++ b/libraries/central_columns.lib.php @@ -746,9 +746,6 @@ function PMA_getHTMLforAddCentralColumn($total_rows, $pos, $db) */ function PMA_getHTMLforCentralColumnsTableRow($row, $odd_row, $row_num, $db) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $tableHtml = '<tr data-rownum="' . $row_num . '" id="f_' . $row_num . '" ' . 'class="' . ($odd_row ? 'odd' : 'even') . '">' . PMA_URL_getHiddenInputs( @@ -779,7 +776,7 @@ function PMA_getHTMLforCentralColumnsTableRow($row, $odd_row, $row_num, $db) '<td name = "col_type" class="nowrap"><span>' . htmlspecialchars($row['col_type']) . '</span>' . PMA_getHtmlForColumnType( - $row_num, 1, 0, $pmaString->strtoupper($row['col_type']), array() + $row_num, 1, 0, /*overload*/mb_strtoupper($row['col_type']), array() ) . '</td>'; $tableHtml .= @@ -829,7 +826,7 @@ function PMA_getHTMLforCentralColumnsTableRow($row, $odd_row, $row_num, $db) ? htmlspecialchars($row['col_default']) : 'None') . '</span>' . PMA_getHtmlForColumnDefault( - $row_num, 5, 0, $pmaString->strtoupper($row['col_type']), '', $meta + $row_num, 5, 0, /*overload*/mb_strtoupper($row['col_type']), '', $meta ) . '</td>'; $tableHtml .= '</tr>'; diff --git a/libraries/check_user_privileges.lib.php b/libraries/check_user_privileges.lib.php index 827c43990b..58dde53172 100644 --- a/libraries/check_user_privileges.lib.php +++ b/libraries/check_user_privileges.lib.php @@ -69,22 +69,19 @@ function PMA_analyseShowGrant() $re0 = '(^|(\\\\\\\\)+|[^\\\\])'; // non-escaped wildcards $re1 = '(^|[^\\\\])(\\\)+'; // escaped wildcards - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - while ($row = $GLOBALS['dbi']->fetchRow($rs_usr)) { // extract db from GRANT ... ON *.* or GRANT ... ON db.* - $db_name_offset = $pmaString->strpos($row[0], ' ON ') + 4; - $show_grants_dbname = $pmaString->substr( + $db_name_offset = /*overload*/mb_strpos($row[0], ' ON ') + 4; + $show_grants_dbname = /*overload*/mb_substr( $row[0], $db_name_offset, - $pmaString->strpos($row[0], '.', $db_name_offset) - $db_name_offset + /*overload*/mb_strpos($row[0], '.', $db_name_offset) - $db_name_offset ); $show_grants_dbname = PMA_Util::unQuote($show_grants_dbname, '`'); - $show_grants_str = $pmaString->substr( + $show_grants_str = /*overload*/mb_substr( $row[0], 6, - ($pmaString->strpos($row[0], ' ON ') - 6) + (/*overload*/mb_strpos($row[0], ' ON ') - 6) ); if ($show_grants_str == 'RELOAD') { $GLOBALS['is_reload_priv'] = true; @@ -97,7 +94,7 @@ function PMA_analyseShowGrant() if ($show_grants_str == 'ALL' || $show_grants_str == 'ALL PRIVILEGES' || $show_grants_str == 'CREATE' - || $pmaString->strpos($show_grants_str, 'CREATE,') !== false + || strpos($show_grants_str, 'CREATE,') !== false ) { if ($show_grants_dbname == '*') { // a global CREATE privilege @@ -127,7 +124,7 @@ function PMA_analyseShowGrant() '/' . $re1 . '(%|_)/', '\\1\\3', $dbname_to_test ) ) - && $pmaString->substr($GLOBALS['dbi']->getError(), 1, 4) != 1044) + && /*overload*/mb_substr($GLOBALS['dbi']->getError(), 1, 4) != 1044) ) { /** * Do not handle the underscore wildcard diff --git a/libraries/common.inc.php b/libraries/common.inc.php index 425e1f974a..9974f99f18 100644 --- a/libraries/common.inc.php +++ b/libraries/common.inc.php @@ -167,10 +167,10 @@ if (! empty($_PATH_INFO) && ! empty($PMA_PHP_SELF)) { /** @var PMA_String $pmaString */ $pmaString = $GLOBALS['PMA_String']; - $path_info_pos = $pmaString->strrpos($PMA_PHP_SELF, $_PATH_INFO); - $pathLength = $path_info_pos + $pmaString->strlen($_PATH_INFO); - if ($pathLength === $pmaString->strlen($PMA_PHP_SELF)) { - $PMA_PHP_SELF = $pmaString->substr($PMA_PHP_SELF, 0, $path_info_pos); + $path_info_pos = /*overload*/mb_strrpos($PMA_PHP_SELF, $_PATH_INFO); + $pathLength = $path_info_pos + /*overload*/mb_strlen($_PATH_INFO); + if ($pathLength === /*overload*/mb_strlen($PMA_PHP_SELF)) { + $PMA_PHP_SELF = /*overload*/mb_substr($PMA_PHP_SELF, 0, $path_info_pos); } } $PMA_PHP_SELF = htmlspecialchars($PMA_PHP_SELF); @@ -745,11 +745,11 @@ if (! defined('PMA_MINIMUM_COMMON')) { && ! is_numeric($_REQUEST['server']) ) { foreach ($cfg['Servers'] as $i => $server) { - $verboseLower = $PMA_String->strtolower($server['verbose']); + $verboseLower = /*overload*/mb_strtolower($server['verbose']); if ($server['host'] == $_REQUEST['server'] || $server['verbose'] == $_REQUEST['server'] - || $verboseLower == $PMA_String->strtolower($_REQUEST['server']) - || md5($verboseLower) == $PMA_String->strtolower($_REQUEST['server']) + || $verboseLower == /*overload*/mb_strtolower($_REQUEST['server']) + || md5($verboseLower) == /*overload*/mb_strtolower($_REQUEST['server']) ) { $_REQUEST['server'] = $i; break; @@ -839,7 +839,7 @@ if (! defined('PMA_MINIMUM_COMMON')) { // to allow HTTP or http $cfg['Server']['auth_type'] - = $PMA_String->strtolower($cfg['Server']['auth_type']); + = /*overload*/mb_strtolower($cfg['Server']['auth_type']); /** * the required auth type plugin @@ -928,7 +928,7 @@ if (! defined('PMA_MINIMUM_COMMON')) { } // if using TCP socket is not needed - if ($PMA_String->strtolower($cfg['Server']['connect_type']) == 'tcp') { + if (/*overload*/mb_strtolower($cfg['Server']['connect_type']) == 'tcp') { $cfg['Server']['socket'] = ''; } diff --git a/libraries/config.default.php b/libraries/config.default.php index 324a4d03a4..ec1cdbc1f4 100644 --- a/libraries/config.default.php +++ b/libraries/config.default.php @@ -2099,6 +2099,13 @@ $cfg['Import']['sql_no_auto_value_on_zero'] = true; /** * * + * @global string $cfg['Import']['sql_read_as_multibytes'] + */ +$cfg['Import']['sql_read_as_multibytes'] = false; + +/** + * + * * @global boolean $cfg['Import']['csv_replace'] */ $cfg['Import']['csv_replace'] = false; diff --git a/libraries/config/Form.class.php b/libraries/config/Form.class.php index ff76a2d71e..459840793c 100644 --- a/libraries/config/Form.class.php +++ b/libraries/config/Form.class.php @@ -75,11 +75,8 @@ class Form */ public function getOptionType($option_name) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $key = ltrim( - $pmaString->substr($option_name, $pmaString->strrpos($option_name, '/')), + /*overload*/mb_substr($option_name, /*overload*/mb_strrpos($option_name, '/')), '/' ); return isset($this->_fieldsTypes[$key]) @@ -175,16 +172,13 @@ class Form $this->fields = array(); array_walk($form, array($this, '_readFormPathsCallback'), ''); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // $this->fields is an array of the form: [0..n] => 'field path' // change numeric indexes to contain field names (last part of the path) $paths = $this->fields; $this->fields = array(); foreach ($paths as $path) { $key = ltrim( - $pmaString->substr($path, $pmaString->strrpos($path, '/')), + /*overload*/mb_substr($path, /*overload*/mb_strrpos($path, '/')), '/' ); $this->fields[$key] = $path; @@ -199,12 +193,9 @@ class Form */ protected function readTypes() { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $cf = $this->_configFile; foreach ($this->fields as $name => $path) { - if ($pmaString->strpos($name, ':group:') === 0) { + if (/*overload*/mb_strpos($name, ':group:') === 0) { $this->_fieldsTypes[$name] = 'group'; continue; } diff --git a/libraries/config/FormDisplay.class.php b/libraries/config/FormDisplay.class.php index 93d9d2ffb4..dc57060610 100644 --- a/libraries/config/FormDisplay.class.php +++ b/libraries/config/FormDisplay.class.php @@ -358,9 +358,6 @@ class FormDisplay $opts['errors'] = $this->_errors[$work_path]; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - switch ($form->getOptionType($field)) { case 'string': $type = 'text'; @@ -386,8 +383,8 @@ class FormDisplay break; case 'group': // :group:end is changed to :group:end:{unique id} in Form class - if ($pmaString->substr($field, 7, 4) != 'end:') { - PMA_displayGroupHeader($pmaString->substr($field, 7)); + if (/*overload*/mb_substr($field, 7, 4) != 'end:') { + PMA_displayGroupHeader(/*overload*/mb_substr($field, 7)); } else { PMA_displayGroupFooter(); } @@ -399,7 +396,7 @@ class FormDisplay // detect password fields if ($type === 'text' - && $pmaString->substr($translated_path, -9) === '-password' + && /*overload*/mb_substr($translated_path, -9) === '-password' ) { $type = 'password'; } @@ -704,7 +701,7 @@ class FormDisplay */ public function getDocLink($path) { - $test = $GLOBALS['PMA_String']->substr($path, 0, 6); + $test = /*overload*/mb_substr($path, 0, 6); if ($test == 'Import' || $test == 'Export') { return ''; } diff --git a/libraries/config/FormDisplay.tpl.php b/libraries/config/FormDisplay.tpl.php index 930dab753b..e34fd22175 100644 --- a/libraries/config/FormDisplay.tpl.php +++ b/libraries/config/FormDisplay.tpl.php @@ -254,7 +254,7 @@ function PMA_displayInput($path, $name, $type, $value, $description = '', foreach ($opts['values'] as $opt_value_key => $opt_value) { // set names for boolean values if (is_bool($opt_value)) { - $opt_value = $GLOBALS['PMA_String']->strtolower( + $opt_value = /*overload*/mb_strtolower( $opt_value ? __('Yes') : __('No') ); } diff --git a/libraries/config/ServerConfigChecks.class.php b/libraries/config/ServerConfigChecks.class.php index 627f73072d..6612a76aa9 100644 --- a/libraries/config/ServerConfigChecks.class.php +++ b/libraries/config/ServerConfigChecks.class.php @@ -338,7 +338,7 @@ class ServerConfigChecks } else { $blowfishWarnings = array(); // check length - if ($GLOBALS['PMA_String']->strlen($blowfishSecret) < 8) { + if (/*overload*/mb_strlen($blowfishSecret) < 8) { // too short key $blowfishWarnings[] = __('Key is too short, it should have at least 8 characters.'); } diff --git a/libraries/config/Validator.class.php b/libraries/config/Validator.class.php index 3b15f59c9e..2f5859e48a 100644 --- a/libraries/config/Validator.class.php +++ b/libraries/config/Validator.class.php @@ -47,9 +47,6 @@ class PMA_Validator return $validators; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // not in setup script: load additional validators for user // preferences we need original config values not overwritten // by user preferences, creating a new PMA_Config instance is a @@ -62,9 +59,9 @@ class PMA_Validator continue; } for ($i = 1, $nb = count($uv); $i < $nb; $i++) { - if ($pmaString->substr($uv[$i], 0, 6) == 'value:') { + if (/*overload*/mb_substr($uv[$i], 0, 6) == 'value:') { $uv[$i] = PMA_arrayRead( - $pmaString->substr($uv[$i], 6), + /*overload*/mb_substr($uv[$i], 6), $GLOBALS['PMA_Config']->base_settings ); } @@ -116,7 +113,7 @@ class PMA_Validator $key_map = array(); foreach ($values as $k => $v) { $k2 = $isPostSource ? str_replace('-', '/', $k) : $k; - $k2 = $GLOBALS['PMA_String']->strpos($k2, '/') + $k2 = /*overload*/mb_strpos($k2, '/') ? $cf->getCanonicalPath($k2) : $k2; $key_map[$k2] = $k; diff --git a/libraries/config/user_preferences.forms.php b/libraries/config/user_preferences.forms.php index 9b2e312c81..f11250c6ee 100644 --- a/libraries/config/user_preferences.forms.php +++ b/libraries/config/user_preferences.forms.php @@ -142,7 +142,8 @@ $forms['Import']['Import_defaults'] = array( 'Import/skip_queries'); $forms['Import']['Sql'] = array( 'Import/sql_compatibility', - 'Import/sql_no_auto_value_on_zero'); + 'Import/sql_no_auto_value_on_zero', + 'Import/sql_read_as_multibytes'); $forms['Import']['Csv'] = array( ':group:' . __('CSV'), 'Import/csv_replace', diff --git a/libraries/core.lib.php b/libraries/core.lib.php index 58d374b8cb..6a0bb9ac6e 100644 --- a/libraries/core.lib.php +++ b/libraries/core.lib.php @@ -12,6 +12,13 @@ if (! defined('PHPMYADMIN')) { } /** + * String handling (security) + */ +require_once 'libraries/string.lib.php'; +require_once 'libraries/String.class.php'; +$PMA_String = new PMA_String(); + +/** * checks given $var and returns it if valid, or $default of not valid * given $var is also checked for type being 'similar' as $default * or against any other type if $type is provided @@ -107,11 +114,8 @@ function PMA_isValid(&$var, $type = 'length', $compare = null) return in_array($var, $type); } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // allow some aliases of var types - $type = $pmaString->strtolower($type); + $type = strtolower($type); switch ($type) { case 'identic' : $type = 'identical'; @@ -159,7 +163,7 @@ function PMA_isValid(&$var, $type = 'length', $compare = null) if ($type === 'length' || $type === 'scalar') { $is_scalar = is_scalar($var); if ($is_scalar && $type === 'length') { - return (bool) $pmaString->strlen($var); + return (bool) /*overload*/mb_strlen($var); } return $is_scalar; } @@ -370,20 +374,18 @@ function PMA_getRealSize($size = 0) 'b' => 1, ); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; foreach ($scan as $unit => $factor) { - $sizeLength = $pmaString->strlen($size); - $unitLength = $pmaString->strlen($unit); + $sizeLength = strlen($size); + $unitLength = strlen($unit); if ($sizeLength > $unitLength - && $pmaString->strtolower( - $pmaString->substr( + && strtolower( + substr( $size, $sizeLength - $unitLength ) ) == $unit ) { - return $pmaString->substr( + return substr( $size, 0, $sizeLength - $unitLength @@ -513,15 +515,13 @@ function PMA_checkPageValidity(&$page, $whitelist) return true; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $_page = $pmaString->substr($page, 0, $pmaString->strpos($page . '?', '?')); + $_page = /*overload*/mb_substr($page, 0, /*overload*/mb_strpos($page . '?', '?')); if (in_array($_page, $whitelist)) { return true; } $_page = urldecode($page); - $_page = $pmaString->substr($_page, 0, $pmaString->strpos($_page . '?', '?')); + $_page = /*overload*/mb_substr($_page, 0, /*overload*/mb_strpos($_page . '?', '?')); if (in_array($_page, $whitelist)) { return true; } @@ -572,9 +572,7 @@ function PMA_getenv($var_name) */ function PMA_sendHeaderLocation($uri, $use_refresh = false) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - if (PMA_IS_IIS && $pmaString->strlen($uri) > 600) { + if (PMA_IS_IIS && /*overload*/mb_strlen($uri) > 600) { include_once './libraries/js_escape.lib.php'; PMA_Response::getInstance()->disable(); @@ -603,7 +601,7 @@ function PMA_sendHeaderLocation($uri, $use_refresh = false) } if (SID) { - if ($pmaString->strpos($uri, '?') === false) { + if (/*overload*/mb_strpos($uri, '?') === false) { header('Location: ' . $uri . '?' . SID); } else { $separator = PMA_URL_getArgSeparator(); @@ -697,7 +695,7 @@ function PMA_downloadHeader($filename, $mimetype, $length = 0, $no_cache = true) header('Content-Type: ' . $mimetype); // inform the server that compression has been done, // to avoid a double compression (for example with Apache + mod_deflate) - if ($GLOBALS['PMA_String']->strpos($mimetype, 'gzip') !== false) { + if (strpos($mimetype, 'gzip') !== false) { header('Content-Encoding: gzip'); } header('Content-Transfer-Encoding: binary'); @@ -875,7 +873,7 @@ function PMA_isAllowedDomain($url) /* Following are doubtful ones. */ 'www.primebase.com','pbxt.blogspot.com' ); - if (in_array($GLOBALS['PMA_String']->strtolower($domain), $domainWhiteList)) { + if (in_array(/*overload*/mb_strtolower($domain), $domainWhiteList)) { return true; } diff --git a/libraries/db_common.inc.php b/libraries/db_common.inc.php index 374c59126b..bf40fc028c 100644 --- a/libraries/db_common.inc.php +++ b/libraries/db_common.inc.php @@ -38,7 +38,7 @@ $pmaString = $GLOBALS['PMA_String']; * headers */ if (! isset($is_db) || ! $is_db) { - if ($pmaString->strlen($db)) { + if (/*overload*/mb_strlen($db)) { $is_db = $GLOBALS['dbi']->selectDb($db); // This "Command out of sync" 2014 error may happen, for example // after calling a MySQL procedure; at this point we can't select @@ -54,7 +54,7 @@ if (! isset($is_db) || ! $is_db) { $uri = $cfg['PmaAbsoluteUri'] . 'index.php' . PMA_URL_getCommon(array(), 'text') . (isset($message) ? '&message=' . urlencode($message) : '') . '&reload=1'; - if (!$pmaString->strlen($db) || ! $is_db) { + if (!/*overload*/mb_strlen($db) || ! $is_db) { $response = PMA_Response::getInstance(); if ($response->isAjax()) { $response->isSuccess(false); diff --git a/libraries/db_designer.lib.php b/libraries/db_designer.lib.php index 9bb053dcaa..f626a57267 100644 --- a/libraries/db_designer.lib.php +++ b/libraries/db_designer.lib.php @@ -706,22 +706,19 @@ function PMA_getDatabaseTables( $html .= '<img src="' . $_SESSION['PMA_Theme']->getImgPath() . 'pmd/Field_small'; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - - if ($pmaString->strstr($tab_column[$t_n]["TYPE"][$j], 'char') - || $pmaString->strstr($tab_column[$t_n]["TYPE"][$j], 'text') + if (/*overload*/mb_strstr($tab_column[$t_n]["TYPE"][$j], 'char') + || /*overload*/mb_strstr($tab_column[$t_n]["TYPE"][$j], 'text') ) { $html .= '_char'; - } elseif ($pmaString->strstr($tab_column[$t_n]["TYPE"][$j], 'int') - || $pmaString->strstr($tab_column[$t_n]["TYPE"][$j], 'float') - || $pmaString->strstr($tab_column[$t_n]["TYPE"][$j], 'double') - || $pmaString->strstr($tab_column[$t_n]["TYPE"][$j], 'decimal') + } elseif (/*overload*/mb_strstr($tab_column[$t_n]["TYPE"][$j], 'int') + || /*overload*/mb_strstr($tab_column[$t_n]["TYPE"][$j], 'float') + || /*overload*/mb_strstr($tab_column[$t_n]["TYPE"][$j], 'double') + || /*overload*/mb_strstr($tab_column[$t_n]["TYPE"][$j], 'decimal') ) { $html .= '_int'; - } elseif ($pmaString->strstr($tab_column[$t_n]["TYPE"][$j], 'date') - || $pmaString->strstr($tab_column[$t_n]["TYPE"][$j], 'time') - || $pmaString->strstr($tab_column[$t_n]["TYPE"][$j], 'year') + } elseif (/*overload*/mb_strstr($tab_column[$t_n]["TYPE"][$j], 'date') + || /*overload*/mb_strstr($tab_column[$t_n]["TYPE"][$j], 'time') + || /*overload*/mb_strstr($tab_column[$t_n]["TYPE"][$j], 'year') ) { $html .= '_date'; } diff --git a/libraries/db_table_exists.lib.php b/libraries/db_table_exists.lib.php index dc18f8d245..5f93e57730 100644 --- a/libraries/db_table_exists.lib.php +++ b/libraries/db_table_exists.lib.php @@ -13,7 +13,7 @@ if (! defined('PHPMYADMIN')) { /** @var PMA_String $pmaString */ $pmaString = $GLOBALS['PMA_String']; if (empty($is_db)) { - if ($pmaString->strlen($db)) { + if (/*overload*/mb_strlen($db)) { $is_db = @$GLOBALS['dbi']->selectDb($db); } else { $is_db = false; @@ -56,7 +56,7 @@ if (empty($is_table) ) { // Not a valid table name -> back to the db_sql.php - if ($pmaString->strlen($table)) { + if (/*overload*/mb_strlen($table)) { $is_table = isset(PMA_Table::$cache[$db][$table]); if (! $is_table) { @@ -74,7 +74,7 @@ if (empty($is_table) if (! $is_table) { if (!defined('IS_TRANSFORMATION_WRAPPER')) { - if ($pmaString->strlen($table)) { + if (/*overload*/mb_strlen($table)) { // SHOW TABLES doesn't show temporary tables, so try select // (as it can happen just in case temporary table, it should be // fast): diff --git a/libraries/display_change_password.lib.php b/libraries/display_change_password.lib.php index 57d4925f1f..54d86c1fef 100644 --- a/libraries/display_change_password.lib.php +++ b/libraries/display_change_password.lib.php @@ -38,9 +38,7 @@ function PMA_getHtmlForChangePassword($username, $hostname) $html .= PMA_URL_getHiddenInputs(); - /** @var PMA_String $pmaStr */ - $pmaStr = $GLOBALS['PMA_String']; - if ($pmaStr->strpos($GLOBALS['PMA_PHP_SELF'], 'server_privileges') !== false) { + if (strpos($GLOBALS['PMA_PHP_SELF'], 'server_privileges') !== false) { $html .= '<input type="hidden" name="username" ' . 'value="' . htmlspecialchars($username) . '" />' . '<input type="hidden" name="hostname" ' diff --git a/libraries/display_export.lib.php b/libraries/display_export.lib.php index 7159e423a5..17e1ddea5f 100644 --- a/libraries/display_export.lib.php +++ b/libraries/display_export.lib.php @@ -74,7 +74,7 @@ function PMA_getHtmlForExportSelectOptions($tmp_select = '') $is_selected = ''; } } elseif (!empty($tmp_select)) { - if ($GLOBALS['PMA_String']->strpos( + if (/*overload*/mb_strpos( ' ' . $tmp_select, '|' . $current_db . '|' )) { @@ -713,7 +713,7 @@ function PMA_getHtmlForExportOptions( $html .= PMA_getHtmlForExportOptionsMethod(); $html .= PMA_getHtmlForExportOptionsSelection($export_type, $multi_values); - $tableLength = $GLOBALS['PMA_String']->strlen($table); + $tableLength = /*overload*/mb_strlen($table); if ($tableLength && empty($num_tables) && ! PMA_Table::isMerge($db, $table)) { $html .= PMA_getHtmlForExportOptionsRows($db, $table, $unlim_num_rows); } @@ -776,9 +776,6 @@ function PMA_getHtmlForAliasModalDialog($db = '', $table = '') ); } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $html = '<div id="alias_modal" class="hide" title="' . $title . '">'; $db_html = '<label class="col-2">' . __('Select database') . ': ' . '</label><select id="db_alias_select">'; @@ -792,7 +789,7 @@ function PMA_getHtmlForAliasModalDialog($db = '', $table = '') } $db = htmlspecialchars($db); $name_attr = 'aliases[' . $db . '][alias]'; - $id_attr = $pmaString->substr(md5($name_attr), 0, 12); + $id_attr = substr(md5($name_attr), 0, 12); $class = 'hide'; if ($first_db) { $first_db = false; @@ -816,7 +813,7 @@ function PMA_getHtmlForAliasModalDialog($db = '', $table = '') } $table = htmlspecialchars($table); $name_attr = 'aliases[' . $db . '][tables][' . $table . '][alias]'; - $id_attr = $pmaString->substr(md5($name_attr), 0, 12); + $id_attr = substr(md5($name_attr), 0, 12); $class = 'hide'; if ($first_tbl) { $first_tbl = false; @@ -844,7 +841,7 @@ function PMA_getHtmlForAliasModalDialog($db = '', $table = '') $column = htmlspecialchars($column); $name_attr = 'aliases[' . $db . '][tables][' . $table . '][columns][' . $column . ']'; - $id_attr = $pmaString->substr(md5($name_attr), 0, 12); + $id_attr = substr(md5($name_attr), 0, 12); $col_html .= '<tr class="' . $class . '">'; $col_html .= '<th><label for="' . $id_attr . '">' . $column . '</label></th>'; diff --git a/libraries/display_git_revision.lib.php b/libraries/display_git_revision.lib.php index f192451b64..fe22b931eb 100644 --- a/libraries/display_git_revision.lib.php +++ b/libraries/display_git_revision.lib.php @@ -26,7 +26,7 @@ function PMA_printGitRevision() $GLOBALS['PMA_Config']->checkGitRevision(); // if using a remote commit fast-forwarded, link to GitHub - $commit_hash = $GLOBALS['PMA_String']->substr( + $commit_hash = substr( $GLOBALS['PMA_Config']->get('PMA_VERSION_GIT_COMMITHASH'), 0, 7 diff --git a/libraries/error_report.lib.php b/libraries/error_report.lib.php index 810b3ff6bb..bef6b49847 100644 --- a/libraries/error_report.lib.php +++ b/libraries/error_report.lib.php @@ -293,12 +293,10 @@ function PMA_getLineNumber($filenames, $cumulative_number) */ function PMA_translateStacktrace($stack) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; foreach ($stack as &$level) { foreach ($level["context"] as &$line) { - if ($pmaString->strlen($line) > 80) { - $line = $pmaString->substr($line, 0, 75) . "//..."; + if (/*overload*/mb_strlen($line) > 80) { + $line = /*overload*/mb_substr($line, 0, 75) . "//..."; } } if (preg_match("<js/get_scripts.js.php\?(.*)>", $level["url"], $matches)) { diff --git a/libraries/export.lib.php b/libraries/export.lib.php index ebd752fbb6..45e5154858 100644 --- a/libraries/export.lib.php +++ b/libraries/export.lib.php @@ -20,7 +20,7 @@ function PMA_shutdownDuringExport() { $a = error_get_last(); if ($a != null - && $GLOBALS['PMA_String']->strpos($a['message'], "execution time") + && /*overload*/mb_strpos($a['message'], "execution time") ) { //write in partially downloaded file for future reference of user print_r($a); @@ -86,16 +86,13 @@ function PMA_exportOutputHandler($line) ); } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // If we have to buffer data, we will perform everything at once at the end if ($GLOBALS['buffer_needed']) { $dump_buffer .= $line; if ($GLOBALS['onfly_compression']) { - $dump_buffer_len += $pmaString->strlen($line); + $dump_buffer_len += /*overload*/mb_strlen($line); if ($dump_buffer_len > $GLOBALS['memory_limit']) { if ($GLOBALS['output_charset_conversion']) { @@ -114,7 +111,7 @@ function PMA_exportOutputHandler($line) } if ($GLOBALS['save_on_server']) { $write_result = @fwrite($GLOBALS['file_handle'], $dump_buffer); - if ($write_result != $pmaString->strlen($dump_buffer)) { + if ($write_result != /*overload*/mb_strlen($dump_buffer)) { $GLOBALS['message'] = PMA_Message::error( __('Insufficient space to save the file %s.') ); @@ -143,10 +140,10 @@ function PMA_exportOutputHandler($line) $line ); } - if ($GLOBALS['save_on_server'] && $pmaString->strlen($line) > 0) { + if ($GLOBALS['save_on_server'] && /*overload*/mb_strlen($line) > 0) { $write_result = @fwrite($GLOBALS['file_handle'], $line); if (! $write_result - || $write_result != $pmaString->strlen($line) + || $write_result != /*overload*/mb_strlen($line) ) { $GLOBALS['message'] = PMA_Message::error( __('Insufficient space to save the file %s.') @@ -206,12 +203,9 @@ function PMA_getHtmlForDisplayedExportFooter($back_button) */ function PMA_getMemoryLimitForExport() { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $memory_limit = trim(@ini_get('memory_limit')); - $memory_limit_num = (int)$pmaString->substr($memory_limit, 0, -1); - $lowerLastChar = $pmaString->strtolower($pmaString->substr($memory_limit, -1)); + $memory_limit_num = (int)substr($memory_limit, 0, -1); + $lowerLastChar = strtolower(substr($memory_limit, -1)); // 2 MB as default if (empty($memory_limit) || '-1' == $memory_limit) { $memory_limit = 2 * 1024 * 1024; @@ -282,19 +276,17 @@ function PMA_getExportFilenameAndMimetype( // part of the filename) to avoid a remote code execution vulnerability $filename = PMA_sanitizeFilename($filename, $replaceDots = true); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; // Grab basic dump extension and mime type // Check if the user already added extension; // get the substring where the extension would be if it was included - $extension_start_pos = $pmaString->strlen($filename) - $pmaString->strlen( + $extension_start_pos = /*overload*/mb_strlen($filename) - /*overload*/mb_strlen( $export_plugin->getProperties()->getExtension() ) - 1; - $user_extension = $pmaString->substr( - $filename, $extension_start_pos, $pmaString->strlen($filename) + $user_extension = /*overload*/mb_substr( + $filename, $extension_start_pos, /*overload*/mb_strlen($filename) ); $required_extension = "." . $export_plugin->getProperties()->getExtension(); - if ($pmaString->strtolower($user_extension) != $required_extension) { + if (/*overload*/mb_strtolower($user_extension) != $required_extension) { $filename .= $required_extension; } $mime_type = $export_plugin->getProperties()->getMimeType(); @@ -370,13 +362,10 @@ function PMA_openExportFile($filename, $quick_export) */ function PMA_closeExportFile($file_handle, $dump_buffer, $save_filename) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $write_result = @fwrite($file_handle, $dump_buffer); fclose($file_handle); - if ($pmaString->strlen($dump_buffer) > 0 - && (! $write_result || ($write_result != $pmaString->strlen($dump_buffer))) + if (/*overload*/mb_strlen($dump_buffer) > 0 + && (! $write_result || ($write_result != /*overload*/mb_strlen($dump_buffer))) ) { $message = new PMA_Message( __('Insufficient space to save the file %s.'), @@ -408,7 +397,7 @@ function PMA_compressExport($dump_buffer, $compression, $filename) $zipfile = new ZipFile(); $zipfile->addFile( $dump_buffer, - $GLOBALS['PMA_String']->substr($filename, 0, -4) + substr($filename, 0, -4) ); $dump_buffer = $zipfile->file(); } elseif ($compression == 'gzip' && PMA_gzencodeNeeded()) { @@ -492,9 +481,6 @@ function PMA_exportServer( $export_type, $do_relation, $do_comments, $do_mime, $do_dates, $aliases ) { - /** @var PMA_String $pmaStr */ - $pmaStr = $GLOBALS['PMA_String']; - if (! empty($db_select)) { $tmp_select = implode($db_select, '|'); $tmp_select = '|' . $tmp_select . '|'; @@ -502,7 +488,7 @@ function PMA_exportServer( // Walk over databases foreach ($GLOBALS['pma']->databases as $current_db) { if (isset($tmp_select) - && $pmaStr->strpos(' ' . $tmp_select, '|' . $current_db . '|') + && /*overload*/mb_strpos(' ' . $tmp_select, '|' . $current_db . '|') ) { $tables = $GLOBALS['dbi']->getTables($current_db); PMA_exportDatabase( @@ -547,7 +533,7 @@ function PMA_exportDatabase( } if (method_exists($export_plugin, 'exportRoutines') - && $GLOBALS['PMA_String']->strpos( + && /*overload*/mb_strpos( $GLOBALS['sql_structure_or_data'], 'structure' ) !== false diff --git a/libraries/file_listing.lib.php b/libraries/file_listing.lib.php index f0fee3c64c..4e78c4623a 100644 --- a/libraries/file_listing.lib.php +++ b/libraries/file_listing.lib.php @@ -24,7 +24,7 @@ function PMA_getDirContent($dir, $expression = '') } $result = array(); - if ($GLOBALS['PMA_String']->substr($dir, -1) != '/') { + if (substr($dir, -1) != '/') { $dir .= '/'; } while ($file = @readdir($handle)) { diff --git a/libraries/gis/GIS_Factory.class.php b/libraries/gis/GIS_Factory.class.php index c9f1d92794..e3888c3f6d 100644 --- a/libraries/gis/GIS_Factory.class.php +++ b/libraries/gis/GIS_Factory.class.php @@ -32,16 +32,13 @@ class PMA_GIS_Factory { include_once './libraries/gis/GIS_Geometry.class.php'; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $file = './libraries/gis/GIS_' - . ucfirst($pmaString->strtolower($type)) . '.class.php'; + . ucfirst(/*overload*/mb_strtolower($type)) . '.class.php'; if (! file_exists($file)) { return false; } if (include_once $file) { - switch($pmaString->strtoupper($type)) { + switch(/*overload*/mb_strtoupper($type)) { case 'MULTIPOLYGON' : return PMA_GIS_Multipolygon::singleton(); case 'POLYGON' : diff --git a/libraries/gis/GIS_Geometry.class.php b/libraries/gis/GIS_Geometry.class.php index b2be72e4da..b5b7b78952 100644 --- a/libraries/gis/GIS_Geometry.class.php +++ b/libraries/gis/GIS_Geometry.class.php @@ -177,13 +177,10 @@ abstract class PMA_GIS_Geometry $srid = 0; $wkt = ''; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - if (preg_match("/^'" . $geom_types . "\(.*\)',[0-9]*$/i", $value)) { - $last_comma = $pmaString->strripos($value, ","); - $srid = trim($pmaString->substr($value, $last_comma + 1)); - $wkt = trim($pmaString->substr($value, 1, $last_comma - 2)); + $last_comma = /*overload*/mb_strripos($value, ","); + $srid = trim(/*overload*/mb_substr($value, $last_comma + 1)); + $wkt = trim(/*overload*/mb_substr($value, 1, $last_comma - 2)); } elseif (preg_match("/^" . $geom_types . "\(.*\)$/i", $value)) { $wkt = $value; } @@ -255,13 +252,10 @@ abstract class PMA_GIS_Geometry $ol_array .= $this->getPolygonForOpenLayers($rings, $srid) . ', '; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - - $ol_array = $pmaString->substr( + $ol_array = /*overload*/mb_substr( $ol_array, 0, - $pmaString->strlen($ol_array) - 2 + /*overload*/mb_strlen($ol_array) - 2 ); $ol_array .= ')'; @@ -308,13 +302,10 @@ abstract class PMA_GIS_Geometry $ol_array .= ', '; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - - $ol_array = $pmaString->substr( + $ol_array = /*overload*/mb_substr( $ol_array, 0, - $pmaString->strlen($ol_array) - 2 + /*overload*/mb_strlen($ol_array) - 2 ); $ol_array .= ')'; @@ -356,13 +347,10 @@ abstract class PMA_GIS_Geometry $ol_array .= $this->getPointForOpenLayers($point, $srid) . ', '; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - - $ol_array = $pmaString->substr( + $ol_array = /*overload*/mb_substr( $ol_array, 0, - $pmaString->strlen($ol_array) - 2 + /*overload*/mb_strlen($ol_array) - 2 ); $ol_array .= ')'; diff --git a/libraries/gis/GIS_Geometrycollection.class.php b/libraries/gis/GIS_Geometrycollection.class.php index 5ef0f97817..89b2dee6dd 100644 --- a/libraries/gis/GIS_Geometrycollection.class.php +++ b/libraries/gis/GIS_Geometrycollection.class.php @@ -57,22 +57,19 @@ class PMA_GIS_Geometrycollection extends PMA_GIS_Geometry { $min_max = array(); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Trim to remove leading 'GEOMETRYCOLLECTION(' and trailing ')' - $goem_col = $pmaString->substr( + $goem_col = /*overload*/mb_substr( $spatial, 19, - $pmaString->strlen($spatial) - 20 + /*overload*/mb_strlen($spatial) - 20 ); // Split the geometry collection object to get its constituents. $sub_parts = $this->_explodeGeomCol($goem_col); foreach ($sub_parts as $sub_part) { - $type_pos = $pmaString->stripos($sub_part, '('); - $type = $pmaString->substr($sub_part, 0, $type_pos); + $type_pos = /*overload*/mb_stripos($sub_part, '('); + $type = /*overload*/mb_substr($sub_part, 0, $type_pos); $gis_obj = PMA_GIS_Factory::factory($type); if (! $gis_obj) { @@ -118,21 +115,18 @@ class PMA_GIS_Geometrycollection extends PMA_GIS_Geometry */ public function prepareRowAsPng($spatial, $label, $color, $scale_data, $image) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Trim to remove leading 'GEOMETRYCOLLECTION(' and trailing ')' - $goem_col = $pmaString->substr( + $goem_col = /*overload*/mb_substr( $spatial, 19, - $pmaString->strlen($spatial) - 20 + /*overload*/mb_strlen($spatial) - 20 ); // Split the geometry collection object to get its constituents. $sub_parts = $this->_explodeGeomCol($goem_col); foreach ($sub_parts as $sub_part) { - $type_pos = $pmaString->stripos($sub_part, '('); - $type = $pmaString->substr($sub_part, 0, $type_pos); + $type_pos = /*overload*/mb_stripos($sub_part, '('); + $type = /*overload*/mb_substr($sub_part, 0, $type_pos); $gis_obj = PMA_GIS_Factory::factory($type); if (! $gis_obj) { @@ -159,21 +153,18 @@ class PMA_GIS_Geometrycollection extends PMA_GIS_Geometry */ public function prepareRowAsPdf($spatial, $label, $color, $scale_data, $pdf) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Trim to remove leading 'GEOMETRYCOLLECTION(' and trailing ')' - $goem_col = $pmaString->substr( + $goem_col = /*overload*/mb_substr( $spatial, 19, - $pmaString->strlen($spatial) - 20 + /*overload*/mb_strlen($spatial) - 20 ); // Split the geometry collection object to get its constituents. $sub_parts = $this->_explodeGeomCol($goem_col); foreach ($sub_parts as $sub_part) { - $type_pos = $pmaString->stripos($sub_part, '('); - $type = $pmaString->substr($sub_part, 0, $type_pos); + $type_pos = /*overload*/mb_stripos($sub_part, '('); + $type = /*overload*/mb_substr($sub_part, 0, $type_pos); $gis_obj = PMA_GIS_Factory::factory($type); if (! $gis_obj) { @@ -201,21 +192,18 @@ class PMA_GIS_Geometrycollection extends PMA_GIS_Geometry { $row = ''; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Trim to remove leading 'GEOMETRYCOLLECTION(' and trailing ')' - $goem_col = $pmaString->substr( + $goem_col = /*overload*/mb_substr( $spatial, 19, - $pmaString->strlen($spatial) - 20 + /*overload*/mb_strlen($spatial) - 20 ); // Split the geometry collection object to get its constituents. $sub_parts = $this->_explodeGeomCol($goem_col); foreach ($sub_parts as $sub_part) { - $type_pos = $pmaString->stripos($sub_part, '('); - $type = $pmaString->substr($sub_part, 0, $type_pos); + $type_pos = /*overload*/mb_stripos($sub_part, '('); + $type = /*overload*/mb_substr($sub_part, 0, $type_pos); $gis_obj = PMA_GIS_Factory::factory($type); if (! $gis_obj) { @@ -245,21 +233,18 @@ class PMA_GIS_Geometrycollection extends PMA_GIS_Geometry { $row = ''; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Trim to remove leading 'GEOMETRYCOLLECTION(' and trailing ')' - $goem_col = $pmaString->substr( + $goem_col = /*overload*/mb_substr( $spatial, 19, - $pmaString->strlen($spatial) - 20 + /*overload*/mb_strlen($spatial) - 20 ); // Split the geometry collection object to get its constituents. $sub_parts = $this->_explodeGeomCol($goem_col); foreach ($sub_parts as $sub_part) { - $type_pos = $pmaString->stripos($sub_part, '('); - $type = $pmaString->substr($sub_part, 0, $type_pos); + $type_pos = /*overload*/mb_stripos($sub_part, '('); + $type = /*overload*/mb_substr($sub_part, 0, $type_pos); $gis_obj = PMA_GIS_Factory::factory($type); if (! $gis_obj) { @@ -292,7 +277,7 @@ class PMA_GIS_Geometrycollection extends PMA_GIS_Geometry } elseif ($char == ')') { $br_count--; if ($br_count == 0) { - $sub_parts[] = $GLOBALS['PMA_String']->substr( + $sub_parts[] = /*overload*/mb_substr( $goem_col, $start, ($count + 1 - $start) @@ -331,10 +316,7 @@ class PMA_GIS_Geometrycollection extends PMA_GIS_Geometry } } if (isset($gis_data[0]['gis_type'])) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - - $wkt = $pmaString->substr($wkt, 0, $pmaString->strlen($wkt) - 1); + $wkt = /*overload*/mb_substr($wkt, 0, /*overload*/mb_strlen($wkt) - 1); } $wkt .= ')'; return $wkt; @@ -355,19 +337,16 @@ class PMA_GIS_Geometrycollection extends PMA_GIS_Geometry $params['srid'] = $data['srid']; $wkt = $data['wkt']; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Trim to remove leading 'GEOMETRYCOLLECTION(' and trailing ')' - $goem_col = $pmaString->substr($wkt, 19, ($pmaString->strlen($wkt) - 20)); + $goem_col = /*overload*/mb_substr($wkt, 19, (/*overload*/mb_strlen($wkt) - 20)); // Split the geometry collection object to get its constituents. $sub_parts = $this->_explodeGeomCol($goem_col); $params['GEOMETRYCOLLECTION']['geom_count'] = count($sub_parts); $i = 0; foreach ($sub_parts as $sub_part) { - $type_pos = $pmaString->stripos($sub_part, '('); - $type = $pmaString->substr($sub_part, 0, $type_pos); + $type_pos = /*overload*/mb_stripos($sub_part, '('); + $type = /*overload*/mb_substr($sub_part, 0, $type_pos); $gis_obj = PMA_GIS_Factory::factory($type); if (! $gis_obj) { continue; diff --git a/libraries/gis/GIS_Linestring.class.php b/libraries/gis/GIS_Linestring.class.php index edb6193b0c..eec9878ad6 100644 --- a/libraries/gis/GIS_Linestring.class.php +++ b/libraries/gis/GIS_Linestring.class.php @@ -55,16 +55,13 @@ class PMA_GIS_Linestring extends PMA_GIS_Geometry */ public function scaleRow($spatial) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Trim to remove leading 'LINESTRING(' and trailing ')' - $linesrting = $pmaString->substr( + $linestring = /*overload*/mb_substr( $spatial, 11, - $pmaString->strlen($spatial) - 12 + /*overload*/mb_strlen($spatial) - 12 ); - return $this->setMinMax($linesrting, array()); + return $this->setMinMax($linestring, array()); } /** @@ -82,24 +79,18 @@ class PMA_GIS_Linestring extends PMA_GIS_Geometry public function prepareRowAsPng($spatial, $label, $line_color, $scale_data, $image ) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // allocate colors $black = imagecolorallocate($image, 0, 0, 0); - $red = hexdec($pmaString->substr($line_color, 1, 2)); - $green = hexdec($pmaString->substr($line_color, 3, 2)); - $blue = hexdec($pmaString->substr($line_color, 4, 2)); + $red = hexdec(/*overload*/mb_substr($line_color, 1, 2)); + $green = hexdec(/*overload*/mb_substr($line_color, 3, 2)); + $blue = hexdec(/*overload*/mb_substr($line_color, 4, 2)); $color = imagecolorallocate($image, $red, $green, $blue); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Trim to remove leading 'LINESTRING(' and trailing ')' - $linesrting = $pmaString->substr( + $linesrting = /*overload*/mb_substr( $spatial, 11, - $pmaString->strlen($spatial) - 12 + /*overload*/mb_strlen($spatial) - 12 ); $points_arr = $this->extractPoints($linesrting, $scale_data); @@ -139,20 +130,17 @@ class PMA_GIS_Linestring extends PMA_GIS_Geometry */ public function prepareRowAsPdf($spatial, $label, $line_color, $scale_data, $pdf) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // allocate colors - $red = hexdec($pmaString->substr($line_color, 1, 2)); - $green = hexdec($pmaString->substr($line_color, 3, 2)); - $blue = hexdec($pmaString->substr($line_color, 4, 2)); + $red = hexdec(/*overload*/mb_substr($line_color, 1, 2)); + $green = hexdec(/*overload*/mb_substr($line_color, 3, 2)); + $blue = hexdec(/*overload*/mb_substr($line_color, 4, 2)); $line = array('width' => 1.5, 'color' => array($red, $green, $blue)); // Trim to remove leading 'LINESTRING(' and trailing ')' - $linesrting = $pmaString->substr( + $linesrting = /*overload*/mb_substr( $spatial, 11, - $pmaString->strlen($spatial) - 12 + /*overload*/mb_strlen($spatial) - 12 ); $points_arr = $this->extractPoints($linesrting, $scale_data); @@ -199,14 +187,11 @@ class PMA_GIS_Linestring extends PMA_GIS_Geometry 'stroke-width'=> 2, ); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Trim to remove leading 'LINESTRING(' and trailing ')' - $linesrting = $pmaString->substr( + $linesrting = /*overload*/mb_substr( $spatial, 11, - $pmaString->strlen($spatial) - 12 + /*overload*/mb_strlen($spatial) - 12 ); $points_arr = $this->extractPoints($linesrting, $scale_data); @@ -249,14 +234,11 @@ class PMA_GIS_Linestring extends PMA_GIS_Geometry } $result = $this->getBoundsForOl($srid, $scale_data); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Trim to remove leading 'LINESTRING(' and trailing ')' - $linesrting = $pmaString->substr( + $linesrting = /*overload*/mb_substr( $spatial, 11, - $pmaString->strlen($spatial) - 12 + /*overload*/mb_strlen($spatial) - 12 ); $points_arr = $this->extractPoints($linesrting, null); @@ -292,10 +274,8 @@ class PMA_GIS_Linestring extends PMA_GIS_Geometry && trim($gis_data[$index]['LINESTRING'][$i]['y']) != '') ? $gis_data[$index]['LINESTRING'][$i]['y'] : $empty) . ','; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $wkt = $pmaString->substr($wkt, 0, $pmaString->strlen($wkt) - 1); + $wkt = /*overload*/mb_substr($wkt, 0, /*overload*/mb_strlen($wkt) - 1); $wkt .= ')'; return $wkt; } @@ -322,11 +302,8 @@ class PMA_GIS_Linestring extends PMA_GIS_Geometry $wkt = $value; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Trim to remove leading 'LINESTRING(' and trailing ')' - $linestring = $pmaString->substr($wkt, 11, ($pmaString->strlen($wkt) - 12)); + $linestring = /*overload*/mb_substr($wkt, 11, (/*overload*/mb_strlen($wkt) - 12)); $points_arr = $this->extractPoints($linestring, null); $no_of_points = count($points_arr); diff --git a/libraries/gis/GIS_Multilinestring.class.php b/libraries/gis/GIS_Multilinestring.class.php index 54d716c82e..59c2aa795f 100644 --- a/libraries/gis/GIS_Multilinestring.class.php +++ b/libraries/gis/GIS_Multilinestring.class.php @@ -57,14 +57,11 @@ class PMA_GIS_Multilinestring extends PMA_GIS_Geometry { $min_max = array(); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Trim to remove leading 'MULTILINESTRING((' and trailing '))' - $multilinestirng = $pmaString->substr( + $multilinestirng = /*overload*/mb_substr( $spatial, 17, - $pmaString->strlen($spatial) - 19 + /*overload*/mb_strlen($spatial) - 19 ); // Separate each linestring $linestirngs = explode("),(", $multilinestirng); @@ -91,21 +88,18 @@ class PMA_GIS_Multilinestring extends PMA_GIS_Geometry public function prepareRowAsPng($spatial, $label, $line_color, $scale_data, $image ) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // allocate colors $black = imagecolorallocate($image, 0, 0, 0); - $red = hexdec($pmaString->substr($line_color, 1, 2)); - $green = hexdec($pmaString->substr($line_color, 3, 2)); - $blue = hexdec($pmaString->substr($line_color, 4, 2)); + $red = hexdec(/*overload*/mb_substr($line_color, 1, 2)); + $green = hexdec(/*overload*/mb_substr($line_color, 3, 2)); + $blue = hexdec(/*overload*/mb_substr($line_color, 4, 2)); $color = imagecolorallocate($image, $red, $green, $blue); // Trim to remove leading 'MULTILINESTRING((' and trailing '))' - $multilinestirng = $pmaString->substr( + $multilinestirng = /*overload*/mb_substr( $spatial, 17, - $pmaString->strlen($spatial) - 19 + /*overload*/mb_strlen($spatial) - 19 ); // Separate each linestring $linestirngs = explode("),(", $multilinestirng); @@ -152,19 +146,16 @@ class PMA_GIS_Multilinestring extends PMA_GIS_Geometry */ public function prepareRowAsPdf($spatial, $label, $line_color, $scale_data, $pdf) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // allocate colors - $red = hexdec($pmaString->substr($line_color, 1, 2)); - $green = hexdec($pmaString->substr($line_color, 3, 2)); - $blue = hexdec($pmaString->substr($line_color, 4, 2)); + $red = hexdec(/*overload*/mb_substr($line_color, 1, 2)); + $green = hexdec(/*overload*/mb_substr($line_color, 3, 2)); + $blue = hexdec(/*overload*/mb_substr($line_color, 4, 2)); $line = array('width' => 1.5, 'color' => array($red, $green, $blue)); // Trim to remove leading 'MULTILINESTRING((' and trailing '))' - $multilinestirng = $pmaString->substr( + $multilinestirng = /*overload*/mb_substr( $spatial, - 17, $pmaString->strlen($spatial) - 19 + 17, /*overload*/mb_strlen($spatial) - 19 ); // Separate each linestring $linestirngs = explode("),(", $multilinestirng); @@ -216,14 +207,11 @@ class PMA_GIS_Multilinestring extends PMA_GIS_Geometry 'stroke-width'=> 2, ); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Trim to remove leading 'MULTILINESTRING((' and trailing '))' - $multilinestirng = $pmaString->substr( + $multilinestirng = /*overload*/mb_substr( $spatial, 17, - $pmaString->strlen($spatial) - 19 + /*overload*/mb_strlen($spatial) - 19 ); // Separate each linestring $linestirngs = explode("),(", $multilinestirng); @@ -273,14 +261,11 @@ class PMA_GIS_Multilinestring extends PMA_GIS_Geometry } $row = $this->getBoundsForOl($srid, $scale_data); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Trim to remove leading 'MULTILINESTRING((' and trailing '))' - $multilinestirng = $pmaString->substr( + $multilinestirng = /*overload*/mb_substr( $spatial, 17, - $pmaString->strlen($spatial) - 19 + /*overload*/mb_strlen($spatial) - 19 ); // Separate each linestring $linestirngs = explode("),(", $multilinestirng); @@ -312,9 +297,6 @@ class PMA_GIS_Multilinestring extends PMA_GIS_Geometry $no_of_lines = 1; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $wkt = 'MULTILINESTRING('; for ($i = 0; $i < $no_of_lines; $i++) { $no_of_points = isset($data_row[$i]['no_of_points']) @@ -331,10 +313,10 @@ class PMA_GIS_Multilinestring extends PMA_GIS_Geometry && trim($data_row[$i][$j]['y']) != '') ? $data_row[$i][$j]['y'] : $empty) . ','; } - $wkt = $pmaString->substr($wkt, 0, $pmaString->strlen($wkt) - 1); + $wkt = /*overload*/mb_substr($wkt, 0, /*overload*/mb_strlen($wkt) - 1); $wkt .= '),'; } - $wkt = $pmaString->substr($wkt, 0, $pmaString->strlen($wkt) - 1); + $wkt = /*overload*/mb_substr($wkt, 0, /*overload*/mb_strlen($wkt) - 1); $wkt .= ')'; return $wkt; } @@ -349,19 +331,16 @@ class PMA_GIS_Multilinestring extends PMA_GIS_Geometry */ public function getShape($row_data) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $wkt = 'MULTILINESTRING('; for ($i = 0; $i < $row_data['numparts']; $i++) { $wkt .= '('; foreach ($row_data['parts'][$i]['points'] as $point) { $wkt .= $point['x'] . ' ' . $point['y'] . ','; } - $wkt = $pmaString->substr($wkt, 0, $pmaString->strlen($wkt) - 1); + $wkt = /*overload*/mb_substr($wkt, 0, /*overload*/mb_strlen($wkt) - 1); $wkt .= '),'; } - $wkt = $pmaString->substr($wkt, 0, $pmaString->strlen($wkt) - 1); + $wkt = /*overload*/mb_substr($wkt, 0, /*overload*/mb_strlen($wkt) - 1); $wkt .= ')'; return $wkt; } @@ -388,14 +367,11 @@ class PMA_GIS_Multilinestring extends PMA_GIS_Geometry $wkt = $value; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Trim to remove leading 'MULTILINESTRING((' and trailing '))' - $multilinestirng = $pmaString->substr( + $multilinestirng = /*overload*/mb_substr( $wkt, 17, - $pmaString->strlen($wkt) - 19 + /*overload*/mb_strlen($wkt) - 19 ); // Seperate each linestring $linestirngs = explode("),(", $multilinestirng); diff --git a/libraries/gis/GIS_Multipoint.class.php b/libraries/gis/GIS_Multipoint.class.php index 530ad4c6ed..d49e9f45ca 100644 --- a/libraries/gis/GIS_Multipoint.class.php +++ b/libraries/gis/GIS_Multipoint.class.php @@ -55,11 +55,8 @@ class PMA_GIS_Multipoint extends PMA_GIS_Geometry */ public function scaleRow($spatial) { - /** @var PMA_String $pmaStr */ - $pmaStr = $GLOBALS['PMA_String']; - // Trim to remove leading 'MULTIPOINT(' and trailing ')' - $multipoint = $pmaStr->substr($spatial, 11, $pmaStr->strlen($spatial) - 12); + $multipoint = /*overload*/mb_substr($spatial, 11, /*overload*/mb_strlen($spatial) - 12); return $this->setMinMax($multipoint, array()); } @@ -78,21 +75,18 @@ class PMA_GIS_Multipoint extends PMA_GIS_Geometry public function prepareRowAsPng($spatial, $label, $point_color, $scale_data, $image ) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // allocate colors $black = imagecolorallocate($image, 0, 0, 0); - $red = hexdec($pmaString->substr($point_color, 1, 2)); - $green = hexdec($pmaString->substr($point_color, 3, 2)); - $blue = hexdec($pmaString->substr($point_color, 4, 2)); + $red = hexdec(/*overload*/mb_substr($point_color, 1, 2)); + $green = hexdec(/*overload*/mb_substr($point_color, 3, 2)); + $blue = hexdec(/*overload*/mb_substr($point_color, 4, 2)); $color = imagecolorallocate($image, $red, $green, $blue); // Trim to remove leading 'MULTIPOINT(' and trailing ')' - $multipoint = $pmaString->substr( + $multipoint = /*overload*/mb_substr( $spatial, 11, - $pmaString->strlen($spatial) - 12 + /*overload*/mb_strlen($spatial) - 12 ); $points_arr = $this->extractPoints($multipoint, $scale_data); @@ -128,20 +122,17 @@ class PMA_GIS_Multipoint extends PMA_GIS_Geometry public function prepareRowAsPdf($spatial, $label, $point_color, $scale_data, $pdf ) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // allocate colors - $red = hexdec($pmaString->substr($point_color, 1, 2)); - $green = hexdec($pmaString->substr($point_color, 3, 2)); - $blue = hexdec($pmaString->substr($point_color, 4, 2)); + $red = hexdec(/*overload*/mb_substr($point_color, 1, 2)); + $green = hexdec(/*overload*/mb_substr($point_color, 3, 2)); + $blue = hexdec(/*overload*/mb_substr($point_color, 4, 2)); $line = array('width' => 1.25, 'color' => array($red, $green, $blue)); // Trim to remove leading 'MULTIPOINT(' and trailing ')' - $multipoint = $pmaString->substr( + $multipoint = /*overload*/mb_substr( $spatial, 11, - $pmaString->strlen($spatial) - 12 + /*overload*/mb_strlen($spatial) - 12 ); $points_arr = $this->extractPoints($multipoint, $scale_data); @@ -183,14 +174,11 @@ class PMA_GIS_Multipoint extends PMA_GIS_Geometry 'stroke-width'=> 2, ); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Trim to remove leading 'MULTIPOINT(' and trailing ')' - $multipoint = $pmaString->substr( + $multipoint = /*overload*/mb_substr( $spatial, 11, - $pmaString->strlen($spatial) - 12 + /*overload*/mb_strlen($spatial) - 12 ); $points_arr = $this->extractPoints($multipoint, $scale_data); @@ -240,14 +228,11 @@ class PMA_GIS_Multipoint extends PMA_GIS_Geometry } $result = $this->getBoundsForOl($srid, $scale_data); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Trim to remove leading 'MULTIPOINT(' and trailing ')' - $multipoint = $pmaString->substr( + $multipoint = /*overload*/mb_substr( $spatial, 11, - $pmaString->strlen($spatial) - 12 + /*overload*/mb_strlen($spatial) - 12 ); $points_arr = $this->extractPoints($multipoint, null); @@ -285,10 +270,7 @@ class PMA_GIS_Multipoint extends PMA_GIS_Geometry ? $gis_data[$index]['MULTIPOINT'][$i]['y'] : '') . ','; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - - $wkt = $pmaString->substr($wkt, 0, $pmaString->strlen($wkt) - 1); + $wkt = /*overload*/mb_substr($wkt, 0, /*overload*/mb_strlen($wkt) - 1); $wkt .= ')'; return $wkt; } @@ -309,10 +291,7 @@ class PMA_GIS_Multipoint extends PMA_GIS_Geometry . $row_data['points'][$i]['y'] . ','; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - - $wkt = $pmaString->substr($wkt, 0, $pmaString->strlen($wkt) - 1); + $wkt = /*overload*/mb_substr($wkt, 0, /*overload*/mb_strlen($wkt) - 1); $wkt .= ')'; return $wkt; } @@ -339,11 +318,8 @@ class PMA_GIS_Multipoint extends PMA_GIS_Geometry $wkt = $value; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Trim to remove leading 'MULTIPOINT(' and trailing ')' - $points = $pmaString->substr($wkt, 11, $pmaString->strlen($wkt) - 12); + $points = /*overload*/mb_substr($wkt, 11, /*overload*/mb_strlen($wkt) - 12); $points_arr = $this->extractPoints($points, null); $no_of_points = count($points_arr); @@ -375,12 +351,9 @@ class PMA_GIS_Multipoint extends PMA_GIS_Geometry } } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - - $olArrayLength = $pmaString->strlen($ol_array); - if ($pmaString->substr($ol_array, $olArrayLength - 2) == ', ') { - $ol_array = $pmaString->substr($ol_array, 0, $olArrayLength - 2); + $olArrayLength = /*overload*/mb_strlen($ol_array); + if (/*overload*/mb_substr($ol_array, $olArrayLength - 2) == ', ') { + $ol_array = /*overload*/mb_substr($ol_array, 0, $olArrayLength - 2); } $ol_array .= ')'; diff --git a/libraries/gis/GIS_Multipolygon.class.php b/libraries/gis/GIS_Multipolygon.class.php index ac43bf0284..419c2d10c4 100644 --- a/libraries/gis/GIS_Multipolygon.class.php +++ b/libraries/gis/GIS_Multipolygon.class.php @@ -55,23 +55,20 @@ class PMA_GIS_Multipolygon extends PMA_GIS_Geometry */ public function scaleRow($spatial) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $min_max = array(); // Trim to remove leading 'MULTIPOLYGON(((' and trailing ')))' - $multipolygon = $pmaString->substr( + $multipolygon = /*overload*/mb_substr( $spatial, 15, - $pmaString->strlen($spatial) - 18 + /*overload*/mb_strlen($spatial) - 18 ); // Separate each polygon $polygons = explode(")),((", $multipolygon); foreach ($polygons as $polygon) { // If the polygon doesn't have an inner ring, use polygon itself - if ($pmaString->strpos($polygon, "),(") === false) { + if (/*overload*/mb_strpos($polygon, "),(") === false) { $ring = $polygon; } else { // Separate outer ring and use it to determine min-max @@ -99,21 +96,18 @@ class PMA_GIS_Multipolygon extends PMA_GIS_Geometry public function prepareRowAsPng($spatial, $label, $fill_color, $scale_data, $image ) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // allocate colors $black = imagecolorallocate($image, 0, 0, 0); - $red = hexdec($pmaString->substr($fill_color, 1, 2)); - $green = hexdec($pmaString->substr($fill_color, 3, 2)); - $blue = hexdec($pmaString->substr($fill_color, 4, 2)); + $red = hexdec(/*overload*/mb_substr($fill_color, 1, 2)); + $green = hexdec(/*overload*/mb_substr($fill_color, 3, 2)); + $blue = hexdec(/*overload*/mb_substr($fill_color, 4, 2)); $color = imagecolorallocate($image, $red, $green, $blue); // Trim to remove leading 'MULTIPOLYGON(((' and trailing ')))' - $multipolygon = $pmaString->substr( + $multipolygon = /*overload*/mb_substr( $spatial, 15, - $pmaString->strlen($spatial) - 18 + /*overload*/mb_strlen($spatial) - 18 ); // Separate each polygon $polygons = explode(")),((", $multipolygon); @@ -121,7 +115,7 @@ class PMA_GIS_Multipolygon extends PMA_GIS_Geometry $first_poly = true; foreach ($polygons as $polygon) { // If the polygon doesn't have an inner polygon - if ($pmaString->strpos($polygon, "),(") === false) { + if (/*overload*/mb_strpos($polygon, "),(") === false) { $points_arr = $this->extractPoints($polygon, $scale_data, true); } else { // Separate outer and inner polygons @@ -169,20 +163,17 @@ class PMA_GIS_Multipolygon extends PMA_GIS_Geometry */ public function prepareRowAsPdf($spatial, $label, $fill_color, $scale_data, $pdf) { - /** @var PMA_String $pmaStr */ - $pmaStr = $GLOBALS['PMA_String']; - // allocate colors - $red = hexdec($pmaStr->substr($fill_color, 1, 2)); - $green = hexdec($pmaStr->substr($fill_color, 3, 2)); - $blue = hexdec($pmaStr->substr($fill_color, 4, 2)); + $red = hexdec(/*overload*/mb_substr($fill_color, 1, 2)); + $green = hexdec(/*overload*/mb_substr($fill_color, 3, 2)); + $blue = hexdec(/*overload*/mb_substr($fill_color, 4, 2)); $color = array($red, $green, $blue); // Trim to remove leading 'MULTIPOLYGON(((' and trailing ')))' - $multipolygon = $pmaStr->substr( + $multipolygon = /*overload*/mb_substr( $spatial, 15, - $pmaStr->strlen($spatial) - 18 + /*overload*/mb_strlen($spatial) - 18 ); // Separate each polygon $polygons = explode(")),((", $multipolygon); @@ -190,7 +181,7 @@ class PMA_GIS_Multipolygon extends PMA_GIS_Geometry $first_poly = true; foreach ($polygons as $polygon) { // If the polygon doesn't have an inner polygon - if ($pmaStr->strpos($polygon, "),(") === false) { + if (/*overload*/mb_strpos($polygon, "),(") === false) { $points_arr = $this->extractPoints($polygon, $scale_data, true); } else { // Separate outer and inner polygons @@ -250,14 +241,11 @@ class PMA_GIS_Multipolygon extends PMA_GIS_Geometry $row = ''; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Trim to remove leading 'MULTIPOLYGON(((' and trailing ')))' - $multipolygon = $pmaString->substr( + $multipolygon = /*overload*/mb_substr( $spatial, 15, - $pmaString->strlen($spatial) - 18 + /*overload*/mb_strlen($spatial) - 18 ); // Separate each polygon $polygons = explode(")),((", $multipolygon); @@ -266,7 +254,7 @@ class PMA_GIS_Multipolygon extends PMA_GIS_Geometry $row .= '<path d="'; // If the polygon doesnt have an inner polygon - if ($pmaString->strpos($polygon, "),(") === false) { + if (/*overload*/mb_strpos($polygon, "),(") === false) { $row .= $this->_drawPath($polygon, $scale_data); } else { // Seperate outer and inner polygons @@ -319,14 +307,11 @@ class PMA_GIS_Multipolygon extends PMA_GIS_Geometry } $row = $this->getBoundsForOl($srid, $scale_data); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Trim to remove leading 'MULTIPOLYGON(((' and trailing ')))' - $multipolygon = $pmaString->substr( + $multipolygon = /*overload*/mb_substr( $spatial, 15, - $pmaString->strlen($spatial) - 18 + /*overload*/mb_strlen($spatial) - 18 ); // Separate each polygon $polygons = explode(")),((", $multipolygon); @@ -381,9 +366,6 @@ class PMA_GIS_Multipolygon extends PMA_GIS_Geometry $no_of_polygons = 1; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $wkt = 'MULTIPOLYGON('; for ($k = 0; $k < $no_of_polygons; $k++) { $no_of_lines = isset($data_row[$k]['no_of_lines']) @@ -407,13 +389,13 @@ class PMA_GIS_Multipolygon extends PMA_GIS_Geometry && trim($data_row[$k][$i][$j]['y']) != '') ? $data_row[$k][$i][$j]['y'] : $empty) . ','; } - $wkt = $pmaString->substr($wkt, 0, $pmaString->strlen($wkt) - 1); + $wkt = /*overload*/mb_substr($wkt, 0, /*overload*/mb_strlen($wkt) - 1); $wkt .= '),'; } - $wkt = $pmaString->substr($wkt, 0, $pmaString->strlen($wkt) - 1); + $wkt = /*overload*/mb_substr($wkt, 0, /*overload*/mb_strlen($wkt) - 1); $wkt .= '),'; } - $wkt = $pmaString->substr($wkt, 0, $pmaString->strlen($wkt) - 1); + $wkt = /*overload*/mb_substr($wkt, 0, /*overload*/mb_strlen($wkt) - 1); $wkt .= ')'; return $wkt; } @@ -468,9 +450,6 @@ class PMA_GIS_Multipolygon extends PMA_GIS_Geometry } } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $wkt = 'MULTIPOLYGON('; // for each polygon foreach ($row_data['parts'] as $ring) { @@ -484,7 +463,7 @@ class PMA_GIS_Multipolygon extends PMA_GIS_Geometry foreach ($ring['points'] as $point) { $wkt .= $point['x'] . ' ' . $point['y'] . ','; } - $wkt = $pmaString->substr($wkt, 0, $pmaString->strlen($wkt) - 1); + $wkt = /*overload*/mb_substr($wkt, 0, /*overload*/mb_strlen($wkt) - 1); $wkt .= ')'; // end of outer ring // inner rings if any @@ -494,14 +473,14 @@ class PMA_GIS_Multipolygon extends PMA_GIS_Geometry foreach ($row_data['parts'][$j]['points'] as $innerPoint) { $wkt .= $innerPoint['x'] . ' ' . $innerPoint['y'] . ','; } - $wkt = $pmaString->substr($wkt, 0, $pmaString->strlen($wkt) - 1); + $wkt = /*overload*/mb_substr($wkt, 0, /*overload*/mb_strlen($wkt) - 1); $wkt .= ')'; // end of inner ring } } $wkt .= '),'; // end of polygon } - $wkt = $pmaString->substr($wkt, 0, $pmaString->strlen($wkt) - 1); + $wkt = /*overload*/mb_substr($wkt, 0, /*overload*/mb_strlen($wkt) - 1); $wkt .= ')'; // end of multipolygon return $wkt; @@ -529,11 +508,8 @@ class PMA_GIS_Multipolygon extends PMA_GIS_Geometry $wkt = $value; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Trim to remove leading 'MULTIPOLYGON(((' and trailing ')))' - $multipolygon = $pmaString->substr($wkt, 15, $pmaString->strlen($wkt) - 18); + $multipolygon = /*overload*/mb_substr($wkt, 15, /*overload*/mb_strlen($wkt) - 18); // Separate each polygon $polygons = explode(")),((", $multipolygon); @@ -543,7 +519,7 @@ class PMA_GIS_Multipolygon extends PMA_GIS_Geometry $k = 0; foreach ($polygons as $polygon) { // If the polygon doesnt have an inner polygon - if ($pmaString->strpos($polygon, "),(") === false) { + if (/*overload*/mb_strpos($polygon, "),(") === false) { $param_row[$k]['no_of_lines'] = 1; $points_arr = $this->extractPoints($polygon, null); $no_of_points = count($points_arr); diff --git a/libraries/gis/GIS_Point.class.php b/libraries/gis/GIS_Point.class.php index 6c1ccfc327..98aa0b0e66 100644 --- a/libraries/gis/GIS_Point.class.php +++ b/libraries/gis/GIS_Point.class.php @@ -55,11 +55,8 @@ class PMA_GIS_Point extends PMA_GIS_Geometry */ public function scaleRow($spatial) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Trim to remove leading 'POINT(' and trailing ')' - $point = $pmaString->substr($spatial, 6, $pmaString->strlen($spatial) - 7); + $point = /*overload*/mb_substr($spatial, 6, /*overload*/mb_strlen($spatial) - 7); return $this->setMinMax($point, array()); } @@ -78,18 +75,15 @@ class PMA_GIS_Point extends PMA_GIS_Geometry public function prepareRowAsPng($spatial, $label, $point_color, $scale_data, $image ) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // allocate colors $black = imagecolorallocate($image, 0, 0, 0); - $red = hexdec($pmaString->substr($point_color, 1, 2)); - $green = hexdec($pmaString->substr($point_color, 3, 2)); - $blue = hexdec($pmaString->substr($point_color, 4, 2)); + $red = hexdec(/*overload*/mb_substr($point_color, 1, 2)); + $green = hexdec(/*overload*/mb_substr($point_color, 3, 2)); + $blue = hexdec(/*overload*/mb_substr($point_color, 4, 2)); $color = imagecolorallocate($image, $red, $green, $blue); // Trim to remove leading 'POINT(' and trailing ')' - $point = $pmaString->substr($spatial, 6, $pmaString->strlen($spatial) - 7); + $point = /*overload*/mb_substr($spatial, 6, /*overload*/mb_strlen($spatial) - 7); $points_arr = $this->extractPoints($point, $scale_data); // draw a small circle to mark the point @@ -123,17 +117,14 @@ class PMA_GIS_Point extends PMA_GIS_Geometry public function prepareRowAsPdf($spatial, $label, $point_color, $scale_data, $pdf ) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // allocate colors - $red = hexdec($pmaString->substr($point_color, 1, 2)); - $green = hexdec($pmaString->substr($point_color, 3, 2)); - $blue = hexdec($pmaString->substr($point_color, 4, 2)); + $red = hexdec(/*overload*/mb_substr($point_color, 1, 2)); + $green = hexdec(/*overload*/mb_substr($point_color, 3, 2)); + $blue = hexdec(/*overload*/mb_substr($point_color, 4, 2)); $line = array('width' => 1.25, 'color' => array($red, $green, $blue)); // Trim to remove leading 'POINT(' and trailing ')' - $point = $pmaString->substr($spatial, 6, $pmaString->strlen($spatial) - 7); + $point = /*overload*/mb_substr($spatial, 6, /*overload*/mb_strlen($spatial) - 7); $points_arr = $this->extractPoints($point, $scale_data); // draw a small circle to mark the point @@ -173,11 +164,8 @@ class PMA_GIS_Point extends PMA_GIS_Geometry 'stroke-width'=> 2, ); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Trim to remove leading 'POINT(' and trailing ')' - $point = $pmaString->substr($spatial, 6, $pmaString->strlen($spatial) - 7); + $point = /*overload*/mb_substr($spatial, 6, /*overload*/mb_strlen($spatial) - 7); $points_arr = $this->extractPoints($point, $scale_data); $row = ''; @@ -223,11 +211,8 @@ class PMA_GIS_Point extends PMA_GIS_Geometry } $result = $this->getBoundsForOl($srid, $scale_data); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Trim to remove leading 'POINT(' and trailing ')' - $point = $pmaString->substr($spatial, 6, $pmaString->strlen($spatial) - 7); + $point = /*overload*/mb_substr($spatial, 6, /*overload*/mb_strlen($spatial) - 7); $points_arr = $this->extractPoints($point, null); if ($points_arr[0][0] != '' && $points_arr[0][1] != '') { @@ -296,11 +281,8 @@ class PMA_GIS_Point extends PMA_GIS_Geometry $wkt = $value; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Trim to remove leading 'POINT(' and trailing ')' - $point = $pmaString->substr($wkt, 6, $pmaString->strlen($wkt) - 7); + $point = /*overload*/mb_substr($wkt, 6, /*overload*/mb_strlen($wkt) - 7); $points_arr = $this->extractPoints($point, null); $params[$index]['POINT']['x'] = $points_arr[0][0]; diff --git a/libraries/gis/GIS_Polygon.class.php b/libraries/gis/GIS_Polygon.class.php index 822bc1244a..534bb699f9 100644 --- a/libraries/gis/GIS_Polygon.class.php +++ b/libraries/gis/GIS_Polygon.class.php @@ -55,18 +55,15 @@ class PMA_GIS_Polygon extends PMA_GIS_Geometry */ public function scaleRow($spatial) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Trim to remove leading 'POLYGON((' and trailing '))' - $polygon = $pmaString->substr( + $polygon = /*overload*/mb_substr( $spatial, 9, - $pmaString->strlen($spatial) - 11 + /*overload*/mb_strlen($spatial) - 11 ); // If the polygon doesn't have an inner ring, use polygon itself - if ($pmaString->strpos($polygon, "),(") === false) { + if (/*overload*/mb_strpos($polygon, "),(") === false) { $ring = $polygon; } else { // Separate outer ring and use it to determine min-max @@ -91,25 +88,22 @@ class PMA_GIS_Polygon extends PMA_GIS_Geometry public function prepareRowAsPng($spatial, $label, $fill_color, $scale_data, $image ) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // allocate colors $black = imagecolorallocate($image, 0, 0, 0); - $red = hexdec($pmaString->substr($fill_color, 1, 2)); - $green = hexdec($pmaString->substr($fill_color, 3, 2)); - $blue = hexdec($pmaString->substr($fill_color, 4, 2)); + $red = hexdec(/*overload*/mb_substr($fill_color, 1, 2)); + $green = hexdec(/*overload*/mb_substr($fill_color, 3, 2)); + $blue = hexdec(/*overload*/mb_substr($fill_color, 4, 2)); $color = imagecolorallocate($image, $red, $green, $blue); // Trim to remove leading 'POLYGON((' and trailing '))' - $polygon = $pmaString->substr( + $polygon = /*overload*/mb_substr( $spatial, 9, - $pmaString->strlen($spatial) - 11 + /*overload*/mb_strlen($spatial) - 11 ); // If the polygon doesn't have an inner polygon - if ($pmaString->strpos($polygon, "),(") === false) { + if (/*overload*/mb_strpos($polygon, "),(") === false) { $points_arr = $this->extractPoints($polygon, $scale_data, true); } else { // Separate outer and inner polygons @@ -151,20 +145,17 @@ class PMA_GIS_Polygon extends PMA_GIS_Geometry */ public function prepareRowAsPdf($spatial, $label, $fill_color, $scale_data, $pdf) { - /** @var PMA_String $pmaStr */ - $pmaStr = $GLOBALS['PMA_String']; - // allocate colors - $red = hexdec($pmaStr->substr($fill_color, 1, 2)); - $green = hexdec($pmaStr->substr($fill_color, 3, 2)); - $blue = hexdec($pmaStr->substr($fill_color, 4, 2)); + $red = hexdec(/*overload*/mb_substr($fill_color, 1, 2)); + $green = hexdec(/*overload*/mb_substr($fill_color, 3, 2)); + $blue = hexdec(/*overload*/mb_substr($fill_color, 4, 2)); $color = array($red, $green, $blue); // Trim to remove leading 'POLYGON((' and trailing '))' - $polygon = $pmaStr->substr($spatial, 9, $pmaStr->strlen($spatial) - 11); + $polygon = /*overload*/mb_substr($spatial, 9, /*overload*/mb_strlen($spatial) - 11); // If the polygon doesn't have an inner polygon - if ($pmaStr->strpos($polygon, "),(") === false) { + if (/*overload*/mb_strpos($polygon, "),(") === false) { $points_arr = $this->extractPoints($polygon, $scale_data, true); } else { // Separate outer and inner polygons @@ -216,20 +207,17 @@ class PMA_GIS_Polygon extends PMA_GIS_Geometry 'fill-opacity'=> 0.8, ); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Trim to remove leading 'POLYGON((' and trailing '))' - $polygon = $pmaString->substr( + $polygon = /*overload*/mb_substr( $spatial, 9, - $pmaString->strlen($spatial) - 11 + /*overload*/mb_strlen($spatial) - 11 ); $row = '<path d="'; // If the polygon doesnt have an inner polygon - if ($pmaString->strpos($polygon, "),(") === false) { + if (/*overload*/mb_strpos($polygon, "),(") === false) { $row .= $this->_drawPath($polygon, $scale_data); } else { // Separate outer and inner polygons @@ -280,14 +268,11 @@ class PMA_GIS_Polygon extends PMA_GIS_Geometry } $row = $this->getBoundsForOl($srid, $scale_data); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Trim to remove leading 'POLYGON((' and trailing '))' - $polygon = $pmaString->substr( + $polygon = /*overload*/mb_substr( $spatial, 9, - $pmaString->strlen($spatial) - 11 + /*overload*/mb_strlen($spatial) - 11 ); // Separate outer and inner polygons @@ -339,9 +324,6 @@ class PMA_GIS_Polygon extends PMA_GIS_Geometry $no_of_lines = 1; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $wkt = 'POLYGON('; for ($i = 0; $i < $no_of_lines; $i++) { $no_of_points = isset($gis_data[$index]['POLYGON'][$i]['no_of_points']) @@ -358,10 +340,10 @@ class PMA_GIS_Polygon extends PMA_GIS_Geometry && trim($gis_data[$index]['POLYGON'][$i][$j]['y']) != '') ? $gis_data[$index]['POLYGON'][$i][$j]['y'] : $empty) . ','; } - $wkt = $pmaString->substr($wkt, 0, $pmaString->strlen($wkt) - 1); + $wkt = /*overload*/mb_substr($wkt, 0, /*overload*/mb_strlen($wkt) - 1); $wkt .= '),'; } - $wkt = $pmaString->substr($wkt, 0, $pmaString->strlen($wkt) - 1); + $wkt = /*overload*/mb_substr($wkt, 0, /*overload*/mb_strlen($wkt) - 1); $wkt .= ')'; return $wkt; } @@ -571,11 +553,8 @@ class PMA_GIS_Polygon extends PMA_GIS_Geometry $wkt = $value; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Trim to remove leading 'POLYGON((' and trailing '))' - $polygon = $pmaString->substr($wkt, 9, ($pmaString->strlen($wkt) - 11)); + $polygon = /*overload*/mb_substr($wkt, 9, (/*overload*/mb_strlen($wkt) - 11)); // Seperate each linestring $linerings = explode("),(", $polygon); $params[$index]['POLYGON']['no_of_lines'] = count($linerings); diff --git a/libraries/gis/GIS_Visualization.class.php b/libraries/gis/GIS_Visualization.class.php index 4f5d8f7bf2..64933d2f56 100644 --- a/libraries/gis/GIS_Visualization.class.php +++ b/libraries/gis/GIS_Visualization.class.php @@ -126,18 +126,15 @@ class PMA_GIS_Visualization { $file_name = PMA_sanitizeFilename($file_name); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Check if the user already added extension; // get the substring where the extension would be if it was included - $extension_start_pos = $pmaString->strlen($file_name) - - $pmaString->strlen($ext) - 1; - $user_extension = $pmaString->substr( - $file_name, $extension_start_pos, $pmaString->strlen($file_name) + $extension_start_pos = /*overload*/mb_strlen($file_name) + - /*overload*/mb_strlen($ext) - 1; + $user_extension = /*overload*/mb_substr( + $file_name, $extension_start_pos, /*overload*/mb_strlen($file_name) ); $required_extension = "." . $ext; - if ($pmaString->strtolower($user_extension) != $required_extension) { + if (/*overload*/mb_strtolower($user_extension) != $required_extension) { $file_name .= $required_extension; } return $file_name; @@ -374,15 +371,12 @@ class PMA_GIS_Visualization $plot_width = $this->_settings['width'] - 2 * $border; $plot_height = $this->_settings['height'] - 2 * $border; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - foreach ($data as $row) { // Figure out the data type $ref_data = $row[$this->_settings['spatialColumn']]; - $type_pos = $pmaString->stripos($ref_data, '('); - $type = $pmaString->substr($ref_data, 0, $type_pos); + $type_pos = /*overload*/mb_stripos($ref_data, '('); + $type = /*overload*/mb_substr($ref_data, 0, $type_pos); $gis_obj = PMA_GIS_Factory::factory($type); if (! $gis_obj) { @@ -461,17 +455,14 @@ class PMA_GIS_Visualization { $color_number = 0; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // loop through the rows foreach ($data as $row) { $index = $color_number % sizeof($this->_settings['colors']); // Figure out the data type $ref_data = $row[$this->_settings['spatialColumn']]; - $type_pos = $pmaString->stripos($ref_data, '('); - $type = $pmaString->substr($ref_data, 0, $type_pos); + $type_pos = /*overload*/mb_stripos($ref_data, '('); + $type = /*overload*/mb_substr($ref_data, 0, $type_pos); $gis_obj = PMA_GIS_Factory::factory($type); if (! $gis_obj) { diff --git a/libraries/iconv_wrapper.lib.php b/libraries/iconv_wrapper.lib.php index 67ee0a14af..9d1bf7f8cd 100644 --- a/libraries/iconv_wrapper.lib.php +++ b/libraries/iconv_wrapper.lib.php @@ -75,12 +75,9 @@ function PMA_convertAIXMapCharsets($in_charset, $out_charset) { global $gnu_iconv_to_aix_iconv_codepage_map; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Check for transliteration argument at the end of output character set name - $translit_search = $pmaString->strpos( - $pmaString->strtolower($out_charset), + $translit_search = /*overload*/mb_strpos( + /*overload*/mb_strtolower($out_charset), '//translit' ); $using_translit = (!($translit_search === false)); @@ -88,28 +85,28 @@ function PMA_convertAIXMapCharsets($in_charset, $out_charset) // Extract "plain" output character set name // (without any transliteration argument) $out_charset_plain = ($using_translit - ? $pmaString->substr($out_charset, 0, $translit_search) + ? /*overload*/mb_substr($out_charset, 0, $translit_search) : $out_charset); // Transform name of input character set (if found) $in_charset_exisits = array_key_exists( - $pmaString->strtolower($in_charset), + /*overload*/mb_strtolower($in_charset), $gnu_iconv_to_aix_iconv_codepage_map ); if ($in_charset_exisits) { $in_charset = $gnu_iconv_to_aix_iconv_codepage_map[ - $pmaString->strtolower($in_charset) + /*overload*/mb_strtolower($in_charset) ]; } // Transform name of "plain" output character set (if found) $out_charset_plain_exists = array_key_exists( - $pmaString->strtolower($out_charset_plain), + /*overload*/mb_strtolower($out_charset_plain), $gnu_iconv_to_aix_iconv_codepage_map ); if ($out_charset_plain_exists) { $out_charset_plain = $gnu_iconv_to_aix_iconv_codepage_map[ - $pmaString->strtolower($out_charset_plain) + /*overload*/mb_strtolower($out_charset_plain) ]; } diff --git a/libraries/import.lib.php b/libraries/import.lib.php index a74b4a0b3c..28e6425af6 100644 --- a/libraries/import.lib.php +++ b/libraries/import.lib.php @@ -97,8 +97,6 @@ function PMA_importRunQuery($sql = '', $full = '', $controluser = false, return; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; if (! empty($import_run_buffer['sql']) && trim($import_run_buffer['sql']) != '' ) { @@ -106,13 +104,13 @@ function PMA_importRunQuery($sql = '', $full = '', $controluser = false, // USE query changes the database, son need to track // while running multiple queries $is_use_query - = ($pmaString->stripos($import_run_buffer['sql'], "use ") !== false) + = (/*overload*/mb_stripos($import_run_buffer['sql'], "use ") !== false) ? true : false; $max_sql_len = max( $max_sql_len, - $pmaString->strlen($import_run_buffer['sql']) + /*overload*/mb_strlen($import_run_buffer['sql']) ); if (! $sql_query_disabled) { $sql_query .= $import_run_buffer['full']; @@ -129,6 +127,7 @@ function PMA_importRunQuery($sql = '', $full = '', $controluser = false, $error = true; } else { + $executed_queries++; $pattern = '/^[\s]*(SELECT|SHOW|HANDLER)/i'; @@ -255,7 +254,7 @@ function PMA_importRunQuery($sql = '', $full = '', $controluser = false, // the complete query in the textarea) if (! $go_sql && $run_query) { if (! empty($sql_query)) { - if ($pmaString->strlen($sql_query) > 50000 + if (/*overload*/mb_strlen($sql_query) > 50000 || $executed_queries > 50 || $max_sql_len > 1000 ) { @@ -355,19 +354,16 @@ function PMA_importGetNextChunk($size = 32768) return true; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; if ($GLOBALS['import_file'] == 'none') { // Well this is not yet supported and tested, // but should return content of textarea - if ($pmaString->strlen($GLOBALS['import_text']) < $size) { + if (/*overload*/mb_strlen($GLOBALS['import_text']) < $size) { $GLOBALS['finished'] = true; return $GLOBALS['import_text']; } else { - $r = $pmaString->substr($GLOBALS['import_text'], 0, $size); + $r = /*overload*/mb_substr($GLOBALS['import_text'], 0, $size); $GLOBALS['offset'] += $size; - $GLOBALS['import_text'] = $pmaString - ->substr($GLOBALS['import_text'], $size); + $GLOBALS['import_text'] = /*overload*/mb_substr($GLOBALS['import_text'], $size); return $r; } } @@ -382,8 +378,8 @@ function PMA_importGetNextChunk($size = 32768) $GLOBALS['finished'] = feof($import_handle); break; case 'application/zip': - $result = $pmaString->substr($GLOBALS['import_text'], 0, $size); - $GLOBALS['import_text'] = $pmaString->substr($GLOBALS['import_text'], $size); + $result = /*overload*/mb_substr($GLOBALS['import_text'], 0, $size); + $GLOBALS['import_text'] = /*overload*/mb_substr($GLOBALS['import_text'], $size); $GLOBALS['finished'] = empty($GLOBALS['import_text']); break; case 'none': @@ -407,12 +403,12 @@ function PMA_importGetNextChunk($size = 32768) if ($GLOBALS['offset'] == $size) { // UTF-8 if (strncmp($result, "\xEF\xBB\xBF", 3) == 0) { - $result = $pmaString->substr($result, 3); + $result = /*overload*/mb_substr($result, 3); // UTF-16 BE, LE } elseif (strncmp($result, "\xFE\xFF", 2) == 0 || strncmp($result, "\xFF\xFE", 2) == 0 ) { - $result = $pmaString->substr($result, 2); + $result = /*overload*/mb_substr($result, 2); } } return $result; @@ -464,16 +460,13 @@ function PMA_getColumnAlphaName($num) $num = $remain; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - if ($num == 0) { // use 'Z' if column number is 0, // this is necessary because A-Z has no 'zero' - $col_name .= $pmaString->chr(($A + 26) - 1); + $col_name .= /*overload*/mb_chr(($A + 26) - 1); } else { // convert column number to ASCII character - $col_name .= $pmaString->chr(($A + $num) - 1); + $col_name .= /*overload*/mb_chr(($A + $num) - 1); } return $col_name; @@ -499,10 +492,8 @@ function PMA_getColumnNumberFromName($name) return 0; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $name = $pmaString->strtoupper($name); - $num_chars = $pmaString->strlen($name); + $name = /*overload*/mb_strtoupper($name); + $num_chars = /*overload*/mb_strlen($name); $column_number = 0; for ($i = 0; $i < $num_chars; ++$i) { // read string from back to front @@ -512,7 +503,7 @@ function PMA_getColumnNumberFromName($name) // and subtract 64 to get corresponding decimal value // ASCII value of "A" is 65, "B" is 66, etc. // Decimal equivalent of "A" is 1, "B" is 2, etc. - $number = (int)($pmaString->ord($name[$char_pos]) - 64); + $number = (int)(/*overload*/mb_ord($name[$char_pos]) - 64); // base26 to base10 conversion : multiply each number // with corresponding value of the position, in this case @@ -559,12 +550,10 @@ define("FORMATTEDSQL", 2); */ function PMA_getDecimalPrecision($last_cumulative_size) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - return (int)$pmaString->substr( + return (int)substr( $last_cumulative_size, 0, - $pmaString->strpos($last_cumulative_size, ",") + strpos($last_cumulative_size, ",") ); } @@ -579,13 +568,10 @@ function PMA_getDecimalPrecision($last_cumulative_size) */ function PMA_getDecimalScale($last_cumulative_size) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - return (int) $pmaString->substr( + return (int)substr( $last_cumulative_size, - ($pmaString->strpos($last_cumulative_size, ",") + 1), - ($pmaString->strlen($last_cumulative_size) - - $pmaString->strpos($last_cumulative_size, ",")) + (strpos($last_cumulative_size, ",") + 1), + (strlen($last_cumulative_size) - strpos($last_cumulative_size, ",")) ); } @@ -600,10 +586,8 @@ function PMA_getDecimalScale($last_cumulative_size) */ function PMA_getDecimalSize($cell) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $curr_size = $pmaString->strlen((string)$cell); - $decPos = $pmaString->strpos($cell, "."); + $curr_size = /*overload*/mb_strlen((string)$cell); + $decPos = /*overload*/mb_strpos($cell, "."); $decPrecision = ($curr_size - 1) - $decPos; $m = $curr_size - 1; @@ -630,9 +614,7 @@ function PMA_getDecimalSize($cell) function PMA_detectSize($last_cumulative_size, $last_cumulative_type, $curr_type, $cell ) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $curr_size = $pmaString->strlen((string)$cell); + $curr_size = /*overload*/mb_strlen((string)$cell); /** * If the cell is NULL, don't treat it as a varchar @@ -770,7 +752,7 @@ function PMA_detectSize($last_cumulative_size, $last_cumulative_type, $oldM = PMA_getDecimalPrecision($last_cumulative_size); $oldD = PMA_getDecimalScale($last_cumulative_size); $oldInt = $oldM - $oldD; - $newInt = $pmaString->strlen((string)$cell); + $newInt = /*overload*/mb_strlen((string)$cell); /* See which has the larger integer length */ if ($oldInt >= $newInt) { @@ -843,16 +825,13 @@ function PMA_detectType($last_cumulative_type, $cell) return $last_cumulative_type; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - if (!is_numeric($cell)) { return VARCHAR; } if ($cell == (string)(float)$cell - && $pmaString->strpos($cell, ".") !== false - && $pmaString->substrCount($cell, ".") == 1 + && /*overload*/mb_strpos($cell, ".") !== false + && /*overload*/mb_substr_count($cell, ".") == 1 ) { return DECIMAL; } diff --git a/libraries/insert_edit.lib.php b/libraries/insert_edit.lib.php index 5b8fd4262d..5607a69870 100644 --- a/libraries/insert_edit.lib.php +++ b/libraries/insert_edit.lib.php @@ -313,11 +313,8 @@ function PMA_getColumnTitle($column, $comments_map) */ function PMA_isColumn($column, $types) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - foreach ($types as $one_type) { - if ($pmaString->stripos($column['Type'], $one_type) === 0) { + if (/*overload*/mb_stripos($column['Type'], $one_type) === 0) { return true; } } @@ -383,9 +380,6 @@ function PMA_getFunctionColumn($column, $is_upload, $column_name_appendix, $unnullify_trigger, $no_support_types, $tabindex_for_function, $tabindex, $idindex, $insert_mode ) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $html_output = ''; if (($GLOBALS['cfg']['ProtectBinary'] === 'blob' && $column['is_blob'] && !$is_upload) @@ -395,8 +389,8 @@ function PMA_getFunctionColumn($column, $is_upload, $column_name_appendix, && $column['is_binary']) ) { $html_output .= '<td class="center">' . __('Binary') . '</td>' . "\n"; - } elseif ($pmaString->strstr($column['True_Type'], 'enum') - || $pmaString->strstr($column['True_Type'], 'set') + } elseif (/*overload*/mb_strstr($column['True_Type'], 'enum') + || /*overload*/mb_strstr($column['True_Type'], 'set') || in_array($column['pma_type'], $no_support_types) ) { $html_output .= '<td class="center">--</td>' . "\n"; @@ -480,16 +474,14 @@ function PMA_getNullColumn($column, $column_name_appendix, $real_null_value, */ function PMA_getNullifyCodeForNullColumn($column, $foreigners, $foreignData) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; $foreigner = PMA_searchColumnInForeigners($foreigners, $column['Field']); - if ($pmaString->strstr($column['True_Type'], 'enum')) { - if ($pmaString->strlen($column['Type']) > 20) { + if (/*overload*/mb_strstr($column['True_Type'], 'enum')) { + if (/*overload*/mb_strlen($column['Type']) > 20) { $nullify_code = '1'; } else { $nullify_code = '2'; } - } elseif ($pmaString->strstr($column['True_Type'], 'set')) { + } elseif (/*overload*/mb_strstr($column['True_Type'], 'set')) { $nullify_code = '3'; } elseif ($foreigners && $foreigner @@ -557,8 +549,6 @@ function PMA_getValueColumn($column, $backup_field, $column_name_appendix, $data_type = $GLOBALS['PMA_Types']->getTypeClass($column['True_Type']); $html_output = ''; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; if ($foreignData['foreign_link'] == true) { $html_output .= PMA_getForeignLink( $column, $backup_field, $column_name_appendix, @@ -574,7 +564,7 @@ function PMA_getValueColumn($column, $backup_field, $column_name_appendix, ); } elseif ($GLOBALS['cfg']['LongtextDoubleTextarea'] - && $pmaString->strstr($column['pma_type'], 'longtext') + && /*overload*/mb_strstr($column['pma_type'], 'longtext') ) { $html_output = ' </td>'; $html_output .= '</tr>'; @@ -586,7 +576,7 @@ function PMA_getValueColumn($column, $backup_field, $column_name_appendix, $special_chars_encoded, $data_type ); - } elseif ($pmaString->strstr($column['pma_type'], 'text')) { + } elseif (/*overload*/mb_strstr($column['pma_type'], 'text')) { $html_output .= PMA_getTextarea( $column, $backup_field, $column_name_appendix, $unnullify_trigger, @@ -594,7 +584,7 @@ function PMA_getValueColumn($column, $backup_field, $column_name_appendix, $special_chars_encoded, $data_type ); $html_output .= "\n"; - if ($pmaString->strlen($special_chars) > 32000) { + if (/*overload*/mb_strlen($special_chars) > 32000) { $html_output .= "</td>\n"; $html_output .= '<td>' . __( 'Because of its length,<br /> this column might not be editable.' @@ -764,7 +754,7 @@ function PMA_getTextarea($column, $backup_field, $column_name_appendix, $extracted_columnspec = PMA_Util::extractColumnSpec($column['Type']); $maxlength = $extracted_columnspec['spec_in_brackets']; } elseif ($GLOBALS['cfg']['LongtextDoubleTextarea'] - && $GLOBALS['PMA_String']->strstr($column['pma_type'], 'longtext') + && /*overload*/mb_strstr($column['pma_type'], 'longtext') ) { $textAreaRows = $GLOBALS['cfg']['TextareaRows'] * 2; $textareaCols = $GLOBALS['cfg']['TextareaCols'] * 2; @@ -819,7 +809,7 @@ function PMA_getPmaTypeEnum($column, $backup_field, $column_name_appendix, $html_output .= '<input type="hidden" name="fields' . $column_name_appendix . '" value="" />'; $html_output .= "\n" . ' ' . $backup_field . "\n"; - if ($GLOBALS['PMA_String']->strlen($column['Type']) > 20) { + if (/*overload*/mb_strlen($column['Type']) > 20) { $html_output .= PMA_getDropDownDependingOnLength( $column, $column_name_appendix, $unnullify_trigger, $tabindex, $tabindex_for_value, $idindex, $data, $column_enum_values @@ -1052,7 +1042,7 @@ function PMA_getBinaryAndBlobColumn( $html_output .= __('Binary - do not edit'); if (isset($data)) { $data_size = PMA_Util::formatByteDown( - $GLOBALS['PMA_String']->strlen(stripslashes($data)), 3, 1 + /*overload*/mb_strlen(stripslashes($data)), 3, 1 ); $html_output .= ' (' . $data_size[0] . ' ' . $data_size[1] . ')'; unset($data_size); @@ -1256,16 +1246,13 @@ function PMA_getValueColumnForOtherDatatypes($column, $default_char_editing, $tabindex_for_value, $idindex, $text_dir, $special_chars_encoded, $data, $extracted_columnspec ) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // HTML5 data-* attribute data-type $data_type = $GLOBALS['PMA_Types']->getTypeClass($column['True_Type']); $fieldsize = PMA_getColumnSize($column, $extracted_columnspec); $html_output = $backup_field . "\n"; if ($column['is_char'] && ($GLOBALS['cfg']['CharEditing'] == 'textarea' - || $pmaString->strpos($data, "\n") !== false) + || /*overload*/mb_strpos($data, "\n") !== false) ) { $html_output .= "\n"; $GLOBALS['cfg']['CharEditing'] = $default_char_editing; @@ -1284,11 +1271,11 @@ function PMA_getValueColumnForOtherDatatypes($column, $default_char_editing, $html_output .= '<input type="hidden" name="auto_increment' . $column_name_appendix . '" value="1" />'; } - if ($pmaString->substr($column['pma_type'], 0, 9) == 'timestamp') { + if (substr($column['pma_type'], 0, 9) == 'timestamp') { $html_output .= '<input type="hidden" name="fields_type' . $column_name_appendix . '" value="timestamp" />'; } - if ($pmaString->substr($column['pma_type'], 0, 8) == 'datetime') { + if (substr($column['pma_type'], 0, 8) == 'datetime') { $html_output .= '<input type="hidden" name="fields_type' . $column_name_appendix . '" value="datetime" />'; } @@ -1298,7 +1285,7 @@ function PMA_getValueColumnForOtherDatatypes($column, $default_char_editing, } if ($column['pma_type'] == 'date' || $column['pma_type'] == 'datetime' - || $pmaString->substr($column['pma_type'], 0, 9) == 'timestamp' + || substr($column['pma_type'], 0, 9) == 'timestamp' ) { // the _3 suffix points to the date field // the _2 suffix points to the corresponding NULL checkbox @@ -1611,9 +1598,6 @@ function PMA_getSpecialCharsAndBackupFieldForExistingRow( $current_row, $column, $extracted_columnspec, $real_null_value, $gis_data_types, $column_name_appendix, $as_is ) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $special_chars_encoded = ''; $data = null; // (we are editing) @@ -1629,10 +1613,10 @@ function PMA_getSpecialCharsAndBackupFieldForExistingRow( $current_row[$column['Field']], $extracted_columnspec['spec_in_brackets'] ); - } elseif (($pmaString->substr($column['True_Type'], 0, 9) == 'timestamp' + } elseif ((substr($column['True_Type'], 0, 9) == 'timestamp' || $column['True_Type'] == 'datetime' || $column['True_Type'] == 'time') - && ($pmaString->strpos($current_row[$column['Field']], ".") !== false) + && (/*overload*/mb_strpos($current_row[$column['Field']], ".") !== false) ) { $current_row[$column['Field']] = $as_is ? $current_row[$column['Field']] @@ -1675,7 +1659,7 @@ function PMA_getSpecialCharsAndBackupFieldForExistingRow( && $_REQUEST['default_action'] === 'insert' ) { if ($column['Key'] === 'PRI' - && $pmaString->strpos($column['Extra'], 'auto_increment') !== false + && /*overload*/mb_strpos($column['Extra'], 'auto_increment') !== false ) { $data = $special_chars_encoded = $special_chars = null; } @@ -1721,7 +1705,7 @@ function PMA_getSpecialCharsAndBackupFieldForInsertingMode( if ($trueType == 'bit') { $special_chars = PMA_Util::convertBitDefaultValue($column['Default']); - } elseif ($GLOBALS['PMA_String']->substr($trueType, 0, 9) == 'timestamp' + } elseif (substr($trueType, 0, 9) == 'timestamp' || $trueType == 'datetime' || $trueType == 'time' ) { @@ -1830,9 +1814,6 @@ function PMA_setSessionForEditNext($one_where_clause) */ function PMA_getGotoInclude($goto_include) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $valid_options = array('new_insert', 'same_insert', 'edit_next'); if (isset($_REQUEST['after_insert']) && in_array($_REQUEST['after_insert'], $valid_options) @@ -1847,13 +1828,13 @@ function PMA_getGotoInclude($goto_include) $goto_include = $GLOBALS['goto']; } if ($GLOBALS['goto'] == 'db_sql.php' - && $pmaString->strlen($GLOBALS['table']) + && /*overload*/mb_strlen($GLOBALS['table']) ) { $GLOBALS['table'] = ''; } } if (! $goto_include) { - if (! $pmaString->strlen($GLOBALS['table'])) { + if (! /*overload*/mb_strlen($GLOBALS['table'])) { $goto_include = 'db_sql.php'; } else { $goto_include = 'tbl_sql.php'; @@ -2011,7 +1992,7 @@ function PMA_getDisplayValueForForeignTableColumn($where_comparison, $foreigner['foreign_table'] ); // Field to display from the foreign table? - if (isset($display_field) && $GLOBALS['PMA_String']->strlen($display_field)) { + if (isset($display_field) && /*overload*/mb_strlen($display_field)) { $dispsql = 'SELECT ' . PMA_Util::backquote($display_field) . ' FROM ' . PMA_Util::backquote($foreigner['foreign_db']) . '.' . PMA_Util::backquote($foreigner['foreign_table']) @@ -2152,9 +2133,6 @@ function PMA_getCurrentValueAsAnArrayForMultipleEdit( $multi_edit_funcs, $gis_from_text_functions, $current_value, $gis_from_wkb_functions, $func_optional_param, $func_no_param, $key ) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - if (empty($multi_edit_funcs[$key])) { return $current_value; } elseif ('UUID' === $multi_edit_funcs[$key]) { @@ -2162,13 +2140,11 @@ function PMA_getCurrentValueAsAnArrayForMultipleEdit( $multi_edit_funcs, $uuid = $GLOBALS['dbi']->fetchValue('SELECT UUID()'); return "'" . $uuid . "'"; } elseif ((in_array($multi_edit_funcs[$key], $gis_from_text_functions) - && $pmaString->substr($current_value, 0, 3) == "'''") + && substr($current_value, 0, 3) == "'''") || in_array($multi_edit_funcs[$key], $gis_from_wkb_functions) ) { // Remove enclosing apostrophes - $current_value = $pmaString->substr( - $current_value, 1, $pmaString->strlen($current_value) - 2 - ); + $current_value = /*overload*/mb_substr($current_value, 1, -1); // Remove escaping apostrophes $current_value = str_replace("''", "'", $current_value); return $multi_edit_funcs[$key] . '(' . $current_value . ')'; @@ -2217,7 +2193,7 @@ function PMA_getQueryValuesForInsertAndUpdateInMultipleEdit($multi_edit_columns_ // i n s e r t if ($is_insert) { // no need to add column into the valuelist - if ($GLOBALS['PMA_String']->strlen($current_value_as_an_array)) { + if (/*overload*/mb_strlen($current_value_as_an_array)) { $query_values[] = $current_value_as_an_array; // first inserted row so prepare the list of fields if (empty($value_sets)) { @@ -2304,7 +2280,7 @@ function PMA_getCurrentValueForDifferentTypes($possibly_uploaded_val, $key, } if ($type != 'protected' && $type != 'set' - && 0 === $GLOBALS['PMA_String']->strlen($current_value) + && 0 === /*overload*/mb_strlen($current_value) ) { // best way to avoid problems in strict mode // (works also in non-strict mode) @@ -2399,7 +2375,7 @@ function PMA_verifyWhetherValueCanBeTruncatedAndAppendExtraData( $meta = $fields_meta[0]; $new_value = $GLOBALS['dbi']->fetchValue($result); if ($new_value !== false) { - if (($GLOBALS['PMA_String']->substr($meta->type, 0, 9) == 'timestamp') + if ((substr($meta->type, 0, 9) == 'timestamp') || ($meta->type == 'datetime') || ($meta->type == 'time') ) { @@ -2589,7 +2565,7 @@ function PMA_getHtmlForFunctionOption($odd_row, $column, $column_name_appendix) return '<tr class="noclick ' . ($odd_row ? 'odd' : 'even' ) . '">' . '<td ' . ($longDoubleTextArea - && $GLOBALS['PMA_String']->strstr($column['True_Type'], 'longtext') + && /*overload*/mb_strstr($column['True_Type'], 'longtext') ? 'rowspan="2"' : '' ) diff --git a/libraries/ip_allow_deny.lib.php b/libraries/ip_allow_deny.lib.php index 1fe7ad051d..0c84b833bc 100644 --- a/libraries/ip_allow_deny.lib.php +++ b/libraries/ip_allow_deny.lib.php @@ -65,11 +65,8 @@ function PMA_getIp() */ function PMA_ipMaskTest($testRange, $ipToTest) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - - if ($pmaString->strpos($testRange, ':') > -1 - || $pmaString->strpos($ipToTest, ':') > -1 + if (/*overload*/mb_strpos($testRange, ':') > -1 + || /*overload*/mb_strpos($ipToTest, ':') > -1 ) { // assume IPv6 $result = PMA_ipv6MaskTest($testRange, $ipToTest); @@ -181,15 +178,12 @@ function PMA_ipv6MaskTest($test_range, $ip_to_test) { $result = true; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // convert to lowercase for easier comparison - $test_range = $pmaString->strtolower($test_range); - $ip_to_test = $pmaString->strtolower($ip_to_test); + $test_range = /*overload*/mb_strtolower($test_range); + $ip_to_test = /*overload*/mb_strtolower($ip_to_test); - $is_cidr = $pmaString->strpos($test_range, '/') > -1; - $is_range = $pmaString->strpos($test_range, '[') > -1; + $is_cidr = /*overload*/mb_strpos($test_range, '/') > -1; + $is_range = /*overload*/mb_strpos($test_range, '[') > -1; $is_single = ! $is_cidr && ! $is_range; $ip_hex = bin2hex(inet_pton($ip_to_test)); @@ -238,7 +232,7 @@ function PMA_ipv6MaskTest($test_range, $ip_to_test) $pos = 31; while ($flexbits > 0) { // Get the character at this position - $orig = $pmaString->substr($last_hex, $pos, 1); + $orig = /*overload*/mb_substr($last_hex, $pos, 1); // Convert it to an integer $origval = hexdec($orig); diff --git a/libraries/mime.lib.php b/libraries/mime.lib.php index 529a2d1d27..a252cb3e9a 100644 --- a/libraries/mime.lib.php +++ b/libraries/mime.lib.php @@ -19,16 +19,14 @@ if (! defined('PHPMYADMIN')) { */ function PMA_detectMIME(&$test) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $len = $pmaString->strlen($test); + $len = /*overload*/mb_strlen($test); if ($len >= 2 && $test[0] == chr(0xff) && $test[1] == chr(0xd8)) { return 'image/jpeg'; } - if ($len >= 3 && $pmaString->substr($test, 0, 3) == 'GIF') { + if ($len >= 3 && substr($test, 0, 3) == 'GIF') { return 'image/gif'; } - if ($len >= 4 && $pmaString->substr($test, 0, 4) == "\x89PNG") { + if ($len >= 4 && /*overload*/mb_substr($test, 0, 4) == "\x89PNG") { return 'image/png'; } return 'application/octet-stream'; diff --git a/libraries/mult_submits.inc.php b/libraries/mult_submits.inc.php index 340a2d5079..48cc5633b5 100644 --- a/libraries/mult_submits.inc.php +++ b/libraries/mult_submits.inc.php @@ -154,11 +154,11 @@ if (!empty($submit_mult) && !empty($what)) { /** @var PMA_String $pmaString */ $pmaString = $GLOBALS['PMA_String']; - if ($pmaString->strlen($table)) { + if (/*overload*/mb_strlen($table)) { include './libraries/tbl_common.inc.php'; $url_query .= '&goto=tbl_sql.php&back=tbl_sql.php'; include './libraries/tbl_info.inc.php'; - } elseif ($pmaString->strlen($db)) { + } elseif (/*overload*/mb_strlen($db)) { include './libraries/db_common.inc.php'; include './libraries/db_info.inc.php'; } else { diff --git a/libraries/mult_submits.lib.php b/libraries/mult_submits.lib.php index fece2e569d..c10904b4a7 100644 --- a/libraries/mult_submits.lib.php +++ b/libraries/mult_submits.lib.php @@ -34,11 +34,9 @@ function PMA_getUrlParams( 'query_type' => $what, 'reload' => (! empty($reload) ? 1 : 0), ); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - if ($pmaString->strpos(' ' . $action, 'db_') == 1) { + if (/*overload*/mb_strpos(' ' . $action, 'db_') == 1) { $_url_params['db']= $db; - } elseif ($pmaString->strpos(' ' . $action, 'tbl_') == 1 + } elseif (/*overload*/mb_strpos(' ' . $action, 'tbl_') == 1 || $what == 'row_delete' ) { $_url_params['db']= $db; @@ -104,9 +102,6 @@ function PMA_getQueryStrFromSelected( $selected_cnt = count($selected); $deletes = false; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - for ($i = 0; $i < $selected_cnt; $i++) { switch ($query_type) { case 'row_delete': @@ -231,11 +226,10 @@ function PMA_getQueryStrFromSelected( case 'replace_prefix_tbl': $current = $selected[$i]; - $subFromPrefix = $pmaString - ->substr($current, 0, $pmaString->strlen($from_prefix)); + $subFromPrefix = /*overload*/mb_substr($current, 0, /*overload*/mb_strlen($from_prefix)); if ($subFromPrefix == $from_prefix) { $newtablename = $to_prefix - . $pmaString->substr($current, $pmaString->strlen($from_prefix)); + . /*overload*/mb_substr($current, /*overload*/mb_strlen($from_prefix)); } else { $newtablename = $current; } @@ -250,7 +244,7 @@ function PMA_getQueryStrFromSelected( case 'copy_tbl_change_prefix': $current = $selected[$i]; $newtablename = $to_prefix . - $pmaString->substr($current, $pmaString->strlen($from_prefix)); + /*overload*/mb_substr($current, /*overload*/mb_strlen($from_prefix)); // COPY TABLE AND CHANGE PREFIX PATTERN $a_query = 'CREATE TABLE ' . PMA_Util::backquote($newtablename) diff --git a/libraries/navigation/NavigationHeader.class.php b/libraries/navigation/NavigationHeader.class.php index ab50b63066..f4076ad833 100644 --- a/libraries/navigation/NavigationHeader.class.php +++ b/libraries/navigation/NavigationHeader.class.php @@ -106,14 +106,11 @@ class PMA_NavigationHeader $retval .= '" target="_blank"'; break; case 'main': - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // do not add our parameters for an external link - $navLogoLinkLower = $pmaString->strtolower( + $navLogoLinkLower = /*overload*/mb_strtolower( $GLOBALS['cfg']['NavigationLogoLink'] ); - if ($pmaString->substr($navLogoLinkLower, 0, 4) !== '://') { + if (/*overload*/mb_substr($navLogoLinkLower, 0, 4) !== '://') { $retval .= '?' . $GLOBALS['url_query'] . '"'; } else { $retval .= '" target="_blank"'; diff --git a/libraries/navigation/NavigationTree.class.php b/libraries/navigation/NavigationTree.class.php index 8f602fa233..8769d315c2 100644 --- a/libraries/navigation/NavigationTree.class.php +++ b/libraries/navigation/NavigationTree.class.php @@ -568,7 +568,7 @@ class PMA_NavigationTree $separators = array(); if (is_array($node->separator)) { $separators = $node->separator; - } else if ($pmaString->strlen($node->separator)) { + } else if (strlen($node->separator)) { $separators[] = $node->separator; } $prefixes = array(); @@ -576,9 +576,9 @@ class PMA_NavigationTree foreach ($node->children as $child) { $prefix_pos = false; foreach ($separators as $separator) { - $sep_pos = $pmaString->strpos($child->name, $separator); + $sep_pos = /*overload*/mb_strpos($child->name, $separator); if ($sep_pos != false - && $sep_pos != $pmaString->strlen($child->name) + && $sep_pos != /*overload*/mb_strlen($child->name) && $sep_pos != 0 && ($prefix_pos == false || $sep_pos < $prefix_pos) ) { @@ -586,7 +586,7 @@ class PMA_NavigationTree } } if ($prefix_pos !== false) { - $prefix = $pmaString->substr($child->name, 0, $prefix_pos); + $prefix = /*overload*/mb_substr($child->name, 0, $prefix_pos); if (! isset($prefixes[$prefix])) { $prefixes[$prefix] = 1; } else { @@ -641,12 +641,15 @@ class PMA_NavigationTree } $node->addChild($groups[$key]); foreach ($separators as $separator) { + $separatorLength = strlen($separator); // FIXME: this could be more efficient foreach ($node->children as $child) { - $name_substring = $pmaString->substr( + $keySeparatorLength = /*overload*/mb_strlen($key) + + $separatorLength; + $name_substring = /*overload*/mb_substr( $child->name, 0, - $pmaString->strlen($key) + $pmaString->strlen($separator) + $keySeparatorLength ); if (($name_substring != $key . $separator && $child->name != $key) @@ -657,10 +660,9 @@ class PMA_NavigationTree $class = get_class($child); $new_child = PMA_NodeFactory::getInstance( $class, - $pmaString->substr( + /*overload*/mb_substr( $child->name, - $pmaString->strlen($key) - + $pmaString->strlen($separator) + $keySeparatorLength ) ); $new_child->real_name = $child->real_name; @@ -896,7 +898,7 @@ class PMA_NavigationTree $iClass = " class='first'"; } $retval .= "<i$iClass></i>"; - if ($GLOBALS['PMA_String']->strpos($class, 'last') === false) { + if (strpos($class, 'last') === false) { $retval .= "<b></b>"; } diff --git a/libraries/navigation/Nodes/Node_Database.class.php b/libraries/navigation/Nodes/Node_Database.class.php index a53422c609..77d3dec06a 100644 --- a/libraries/navigation/Nodes/Node_Database.class.php +++ b/libraries/navigation/Nodes/Node_Database.class.php @@ -474,7 +474,7 @@ class Node_Database extends Node . "." . PMA_Util::backquote($cfgRelation['navigationhiding']); $sqlQuery = "SELECT `item_name` FROM " . $navTable . " WHERE `username`='" . $cfgRelation['user'] . "'" - . " AND `item_type`='" . $GLOBALS['PMA_String']->substr($type, 0, -1) + . " AND `item_type`='" . substr($type, 0, -1) . "'" . " AND `db_name`='" . PMA_Util::sqlAddSlashes($db) . "'"; $result = PMA_queryAsControlUser($sqlQuery, false); if ($result) { diff --git a/libraries/normalization.lib.php b/libraries/normalization.lib.php index 5cb500f268..6e620af179 100644 --- a/libraries/normalization.lib.php +++ b/libraries/normalization.lib.php @@ -43,7 +43,7 @@ function PMA_getHtmlForColumnsList( $type = $extracted_columnspec['type']; } if (empty($columnTypeList) - || in_array($GLOBALS['PMA_String']->strtoupper($type), $columnTypeList) + || in_array(/*overload*/mb_strtoupper($type), $columnTypeList) ) { if ($listType == 'checkbox') { $selectColHtml .= '<input type="checkbox" value="' diff --git a/libraries/operations.lib.php b/libraries/operations.lib.php index eb8132626b..d54695130d 100644 --- a/libraries/operations.lib.php +++ b/libraries/operations.lib.php @@ -312,7 +312,7 @@ function PMA_getSqlQueryAndCreateDbBeforeCopy() 'SHOW VARIABLES LIKE "lower_case_table_names"', 0, 1 ); if ($lowerCaseTableNames === '1') { - $_REQUEST['newname'] = $GLOBALS['PMA_String']->strtolower( + $_REQUEST['newname'] = /*overload*/mb_strtolower( $_REQUEST['newname'] ); } @@ -854,9 +854,7 @@ function PMA_getTableOptionFieldset($comment, $tbl_collation, ); } // end if (ARIA) - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - if ($pmaString->strlen($auto_increment) > 0 + if (/*overload*/mb_strlen($auto_increment) > 0 && ($is_myisam_or_aria || $is_innodb || $is_pbxt) ) { $html_output .= '<tr><td>' @@ -877,7 +875,7 @@ function PMA_getTableOptionFieldset($comment, $tbl_collation, if (isset($possible_row_formats[$tbl_storage_engine])) { $current_row_format - = $pmaString->strtoupper($GLOBALS['showtable']['Row_format']); + = /*overload*/mb_strtoupper($GLOBALS['showtable']['Row_format']); $html_output .= '<tr><td>' . '<label for="new_row_format">ROW_FORMAT</label></td>' . '<td>'; @@ -1450,10 +1448,8 @@ function PMA_getTableAltersArray($is_myisam_or_aria, $is_isam, $pack_keys, . PMA_Util::sqlAddSlashes($_REQUEST['comment']) . '\''; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; if (! empty($newTblStorageEngine) - && $pmaString->strtolower($newTblStorageEngine) !== $pmaString->strtolower($GLOBALS['tbl_storage_engine']) + && /*overload*/mb_strtolower($newTblStorageEngine) !== /*overload*/mb_strtolower($GLOBALS['tbl_storage_engine']) ) { $table_alters[] = 'ENGINE = ' . $newTblStorageEngine; } @@ -1512,11 +1508,11 @@ function PMA_getTableAltersArray($is_myisam_or_aria, $is_isam, $pack_keys, } $newRowFormat = $_REQUEST['new_row_format']; - $newRowFormatLower = $pmaString->strtolower($newRowFormat); + $newRowFormatLower = /*overload*/mb_strtolower($newRowFormat); if (($is_myisam_or_aria || $is_innodb || $is_pbxt) && ! empty($newRowFormat) - && (!$pmaString->strlen($row_format) - || $newRowFormatLower !== $pmaString->strtolower($row_format)) + && (!/*overload*/mb_strlen($row_format) + || $newRowFormatLower !== /*overload*/mb_strtolower($row_format)) ) { $table_alters[] = 'ROW_FORMAT = ' . PMA_Util::sqlAddSlashes($newRowFormat); } @@ -1534,7 +1530,7 @@ function PMA_getTableAltersArray($is_myisam_or_aria, $is_isam, $pack_keys, */ function PMA_setGlobalVariablesForEngine($tbl_storage_engine) { - $upperTblStorEngine = $GLOBALS['PMA_String']->strtoupper($tbl_storage_engine); + $upperTblStorEngine = /*overload*/mb_strtoupper($tbl_storage_engine); //Options that apply to MYISAM usually apply to ARIA $is_myisam_or_aria = ($upperTblStorEngine == 'MYISAM' @@ -1600,7 +1596,7 @@ function PMA_getQueryAndResultForPartition() /** - * Move or copy a table + * Move or copy a table * * @param string $db current database name * @param string $table current table name diff --git a/libraries/parse_analyze.inc.php b/libraries/parse_analyze.inc.php index 9eb7c9129a..1864b010e0 100644 --- a/libraries/parse_analyze.inc.php +++ b/libraries/parse_analyze.inc.php @@ -130,7 +130,7 @@ if ($is_select) { $table = $analyzed_sql[0]['table_ref'][0]['table_true_name']; } if (isset($analyzed_sql[0]['table_ref'][0]['db']) - && $GLOBALS['PMA_String']->strlen($analyzed_sql[0]['table_ref'][0]['db']) + && /*overload*/mb_strlen($analyzed_sql[0]['table_ref'][0]['db']) ) { $db = $analyzed_sql[0]['table_ref'][0]['db']; } else { diff --git a/libraries/plugin_interface.lib.php b/libraries/plugin_interface.lib.php index 7e18652ae4..d5725f4116 100644 --- a/libraries/plugin_interface.lib.php +++ b/libraries/plugin_interface.lib.php @@ -23,14 +23,11 @@ function PMA_getPlugin( $plugins_dir, $plugin_param = false ) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $GLOBALS['plugin_param'] = $plugin_param; - $class_name = $pmaString->strtoupper($plugin_type[0]) - . $pmaString->strtolower($pmaString->substr($plugin_type, 1)) - . $pmaString->strtoupper($plugin_format[0]) - . $pmaString->strtolower($pmaString->substr($plugin_format, 1)); + $class_name = /*overload*/mb_strtoupper($plugin_type[0]) + . /*overload*/mb_strtolower(/*overload*/mb_substr($plugin_type, 1)) + . /*overload*/mb_strtoupper($plugin_format[0]) + . /*overload*/mb_strtolower(/*overload*/mb_substr($plugin_format, 1)); $file = $class_name . ".class.php"; if (is_file($plugins_dir . $file)) { include_once $plugins_dir . $file; @@ -60,8 +57,6 @@ function PMA_getPlugins($plugin_type, $plugins_dir, $plugin_param) return $plugin_list; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; //@todo Find a way to use PMA_StringMB with UTF-8 instead of mb_*. while ($file = @readdir($handle)) { // In some situations, Mac OS creates a new file for each file @@ -69,7 +64,7 @@ function PMA_getPlugins($plugin_type, $plugins_dir, $plugin_param) // matches a file which does not start with a dot but ends // with ".php" $class_type = mb_strtoupper($plugin_type[0], 'UTF-8') - . mb_strtolower($pmaString->substr($plugin_type, 1), 'UTF-8'); + . mb_strtolower(/*overload*/mb_substr($plugin_type, 1), 'UTF-8'); if (is_file($plugins_dir . $file) && preg_match( '@^' . $class_type . '(.+)\.class\.php$@i', @@ -196,11 +191,9 @@ function PMA_pluginGetChoice($section, $name, &$list, $cfgname = null) } $ret = '<select id="plugins" name="' . $name . '">'; $default = PMA_pluginGetDefault($section, $cfgname); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; foreach ($list as $plugin) { - $plugin_name = $pmaString->strtolower( - $pmaString->substr(get_class($plugin), $pmaString->strlen($section)) + $plugin_name = /*overload*/mb_strtolower( + /*overload*/mb_substr(get_class($plugin), /*overload*/mb_strlen($section)) ); $ret .= '<option'; // If the form is being repopulated using $_GET data, that is priority @@ -225,8 +218,8 @@ function PMA_pluginGetChoice($section, $name, &$list, $cfgname = null) // Whether each plugin has to be saved as a file foreach ($list as $plugin) { - $plugin_name = $pmaString->strtolower( - $pmaString->substr(get_class($plugin), $pmaString->strlen($section)) + $plugin_name = /*overload*/mb_strtolower( + /*overload*/mb_substr(get_class($plugin), /*overload*/mb_strlen($section)) ); $ret .= '<input type="hidden" id="force_file_' . $plugin_name . '" value="'; @@ -261,14 +254,11 @@ function PMA_pluginGetOneOption( &$propertyGroup, $is_subgroup = false ) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $ret = "\n"; if (! $is_subgroup) { // for subgroup headers - if ($pmaString->strpos(get_class($propertyGroup), "PropertyItem")) { + if (/*overload*/mb_strpos(get_class($propertyGroup), "PropertyItem")) { $properties = array($propertyGroup); } else { // for main groups @@ -297,7 +287,7 @@ function PMA_pluginGetOneOption( foreach ($properties as $propertyItem) { $property_class = get_class($propertyItem); // if the property is a subgroup, we deal with it recursively - if ($pmaString->strpos($property_class, "Subgroup")) { + if (/*overload*/mb_strpos($property_class, "Subgroup")) { // for subgroups // each subgroup can have a header, which may also be a form element $subgroup_header = $propertyItem->getSubgroupHeader(); @@ -512,9 +502,6 @@ function PMA_getHtmlForProperty( */ function PMA_pluginGetOptions($section, &$list) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $ret = ''; // Options for plugins that support them foreach ($list as $plugin) { @@ -524,8 +511,8 @@ function PMA_pluginGetOptions($section, &$list) $options = $properties->getOptions(); } - $plugin_name = $pmaString->strtolower( - $pmaString->substr(get_class($plugin), $pmaString->strlen($section)) + $plugin_name = /*overload*/mb_strtolower( + /*overload*/mb_substr(get_class($plugin), /*overload*/mb_strlen($section)) ); $ret .= '<div id="' . $plugin_name . '_options" class="format_specific_options">'; diff --git a/libraries/plugins/ImportPlugin.class.php b/libraries/plugins/ImportPlugin.class.php index f33770c5ef..26476090a7 100644 --- a/libraries/plugins/ImportPlugin.class.php +++ b/libraries/plugins/ImportPlugin.class.php @@ -63,10 +63,7 @@ abstract class ImportPlugin */ protected function getDbnameAndOptions($currentDb, $defaultDb) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - - if ($pmaString->strlen($currentDb)) { + if (/*overload*/mb_strlen($currentDb)) { $db_name = $currentDb; $options = array('create_db' => false); } else { diff --git a/libraries/plugins/auth/AuthenticationCookie.class.php b/libraries/plugins/auth/AuthenticationCookie.class.php index a7713c8755..b03759669e 100644 --- a/libraries/plugins/auth/AuthenticationCookie.class.php +++ b/libraries/plugins/auth/AuthenticationCookie.class.php @@ -593,15 +593,12 @@ class AuthenticationCookie extends AuthenticationPlugin // URL where to go: $redirect_url = $cfg['PmaAbsoluteUri'] . 'index.php'; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // any parameters to pass? $url_params = array(); - if ($pmaString->strlen($GLOBALS['db'])) { + if (/*overload*/mb_strlen($GLOBALS['db'])) { $url_params['db'] = $GLOBALS['db']; } - if ($pmaString->strlen($GLOBALS['table'])) { + if (/*overload*/mb_strlen($GLOBALS['table'])) { $url_params['table'] = $GLOBALS['table']; } // any target to pass? diff --git a/libraries/plugins/export/ExportCsv.class.php b/libraries/plugins/export/ExportCsv.class.php index 21d0c1121b..b8a7bb4067 100644 --- a/libraries/plugins/export/ExportCsv.class.php +++ b/libraries/plugins/export/ExportCsv.class.php @@ -132,7 +132,7 @@ class ExportCsv extends ExportPlugin } } else { if (empty($csv_terminated) - || $GLOBALS['PMA_String']->strtolower($csv_terminated) == 'auto' + || /*overload*/mb_strtolower($csv_terminated) == 'auto' ) { $csv_terminated = $GLOBALS['crlf']; } else { @@ -244,7 +244,7 @@ class ExportCsv extends ExportPlugin $schema_insert .= $csv_separator; } // end for $schema_insert = trim( - $GLOBALS['PMA_String']->substr($schema_insert, 0, -1) + /*overload*/mb_substr($schema_insert, 0, -1) ); if (! PMA_exportOutputHandler($schema_insert . $csv_terminated)) { return false; diff --git a/libraries/plugins/export/ExportLatex.class.php b/libraries/plugins/export/ExportLatex.class.php index 0288c61c90..629d553222 100644 --- a/libraries/plugins/export/ExportLatex.class.php +++ b/libraries/plugins/export/ExportLatex.class.php @@ -343,7 +343,7 @@ class ExportLatex extends ExportPlugin . self::texEscape(stripslashes($columns_alias[$i])) . '}} & '; } - $buffer = $GLOBALS['PMA_String']->substr($buffer, 0, -2) + $buffer = /*overload*/mb_substr($buffer, 0, -2) . '\\\\ \\hline \hline '; if (! PMA_exportOutputHandler($buffer . ' \\endfirsthead ' . $crlf)) { return false; @@ -566,9 +566,6 @@ class ExportLatex extends ExportPlugin return false; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $fields = $GLOBALS['dbi']->getColumns($db, $table); foreach ($fields as $row) { $extracted_columnspec @@ -620,16 +617,16 @@ class ExportLatex extends ExportPlugin } $local_buffer = self::texEscape($local_buffer); if ($row['Key']=='PRI') { - $pos = $pmaString->strpos($local_buffer, "\000"); + $pos = /*overload*/mb_strpos($local_buffer, "\000"); $local_buffer = '\\textit{' - . $pmaString->substr($local_buffer, 0, $pos) - . '}' . $pmaString->substr($local_buffer, $pos); + . /*overload*/mb_substr($local_buffer, 0, $pos) + . '}' . /*overload*/mb_substr($local_buffer, $pos); } if (in_array($field_name, $unique_keys)) { - $pos = $pmaString->strpos($local_buffer, "\000"); + $pos = /*overload*/mb_strpos($local_buffer, "\000"); $local_buffer = '\\textbf{' - . $pmaString->substr($local_buffer, 0, $pos) - . '}' . $pmaString->substr($local_buffer, $pos); + . /*overload*/mb_substr($local_buffer, 0, $pos) + . '}' . /*overload*/mb_substr($local_buffer, $pos); } $buffer = str_replace("\000", ' & ', $local_buffer); $buffer .= ' \\\\ \\hline ' . $crlf; diff --git a/libraries/plugins/export/ExportSql.class.php b/libraries/plugins/export/ExportSql.class.php index 5dcfba2899..a8a5a043eb 100644 --- a/libraries/plugins/export/ExportSql.class.php +++ b/libraries/plugins/export/ExportSql.class.php @@ -791,15 +791,12 @@ class ExportSql extends ExportPlugin if (PMA_DRIZZLE) { $create_query .= ' COLLATE ' . $collation; } else { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - - if ($pmaString->strpos($collation, '_')) { + if (/*overload*/mb_strpos($collation, '_')) { $create_query .= ' DEFAULT CHARACTER SET ' - . $pmaString->substr( + . /*overload*/mb_substr( $collation, 0, - $pmaString->strpos($collation, '_') + /*overload*/mb_strpos($collation, '_') ) . ' COLLATE ' . $collation; } else { @@ -1217,20 +1214,17 @@ class ExportSql extends ExportPlugin return $this->_exportComment(__('in use') . '(' . $tmp_error . ')'); } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $warning = ''; if ($result != false && ($row = $GLOBALS['dbi']->fetchRow($result))) { $create_query = $row[1]; unset($row); // Convert end of line chars to one that we want (note that MySQL // doesn't return query it will accept in all cases) - if ($pmaString->strpos($create_query, "(\r\n ")) { + if (/*overload*/mb_strpos($create_query, "(\r\n ")) { $create_query = str_replace("\r\n", $crlf, $create_query); - } elseif ($pmaString->strpos($create_query, "(\n ")) { + } elseif (/*overload*/mb_strpos($create_query, "(\n ")) { $create_query = str_replace("\n", $crlf, $create_query); - } elseif ($pmaString->strpos($create_query, "(\r ")) { + } elseif (/*overload*/mb_strpos($create_query, "(\r ")) { $create_query = str_replace("\r", $crlf, $create_query); } @@ -1444,9 +1438,9 @@ class ExportSql extends ExportPlugin $sql_lines[$k] )) { //adds auto increment value - $increment_value = $pmaString->substr( + $increment_value = /*overload*/mb_substr( $sql_lines[$k], - $pmaString->strpos($sql_lines[$k], "AUTO_INCREMENT") + /*overload*/mb_strpos($sql_lines[$k], "AUTO_INCREMENT") ); $increment_value_array = explode(' ', $increment_value); $sql_auto_increments .= $increment_value_array[0] . ";"; @@ -1455,7 +1449,7 @@ class ExportSql extends ExportPlugin } if ($sql_auto_increments != '') { - $sql_auto_increments = $pmaString->substr( + $sql_auto_increments = /*overload*/mb_substr( $sql_auto_increments, 0, -1 ) . ';'; } @@ -1481,7 +1475,7 @@ class ExportSql extends ExportPlugin if (! $first) { $sql_constraints .= $crlf; } - $posConstraint = $pmaString->strpos( + $posConstraint = /*overload*/mb_strpos( $sql_lines[$j], 'CONSTRAINT' ); @@ -2062,8 +2056,6 @@ class ExportSql extends ExportPlugin $separator = ';'; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; while ($row = $GLOBALS['dbi']->fetchRow($result)) { if ($current_row == 0) { $head = $this->_possibleCRLF() @@ -2182,7 +2174,7 @@ class ExportSql extends ExportPlugin . implode(', ', $values) . ')'; } else { $insert_line = '(' . implode(', ', $values) . ')'; - $insertLineSize = $pmaString->strlen($insert_line); + $insertLineSize = /*overload*/mb_strlen($insert_line); $sql_max_size = $GLOBALS['sql_max_query_size']; if (isset($sql_max_size) && $sql_max_size > 0 @@ -2196,7 +2188,7 @@ class ExportSql extends ExportPlugin $insert_line = $schema_insert . $insert_line; } } - $query_size += $pmaString->strlen($insert_line); + $query_size += /*overload*/mb_strlen($insert_line); // Other inserts case } else { $insert_line = $schema_insert @@ -2397,9 +2389,6 @@ class ExportSql extends ExportPlugin $on_seen = false; $size = $tokens['len']; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - for ($i = 0; $i < $size && !$query_end; $i++) { $type = $tokens[$i]['type']; $data = $tokens[$i]['data']; @@ -2409,9 +2398,9 @@ class ExportSql extends ExportPlugin $d_unq = PMA_Util::unQuote($data); $d_unq_next = PMA_Util::unQuote($data_next); $d_unq_prev = PMA_Util::unQuote($data_prev); - $d_upper = $pmaString->strtoupper($d_unq); - $d_upper_next = $pmaString->strtoupper($d_unq_next); - $d_upper_prev = $pmaString->strtoupper($d_unq_prev); + $d_upper = /*overload*/mb_strtoupper($d_unq); + $d_upper_next = /*overload*/mb_strtoupper($d_unq_next); + $d_upper_prev = /*overload*/mb_strtoupper($d_unq_prev); $pos = $tokens[$i]['pos'] + $offset; if ($type === 'alpha_reservedWord') { if ($query_type === '' @@ -2564,8 +2553,8 @@ class ExportSql extends ExportPlugin if (!empty($GLOBALS['sql_backquotes'])) { $alias = PMA_Util::backquote($alias); } - $alias_len = $GLOBALS['PMA_String']->strlen($alias); - $data_len = $GLOBALS['PMA_String']->strlen($data); + $alias_len = /*overload*/mb_strlen($alias); + $data_len = /*overload*/mb_strlen($data); if (isset($offset)) { $offset += ($alias_len - $data_len); } diff --git a/libraries/plugins/export/ExportXml.class.php b/libraries/plugins/export/ExportXml.class.php index 9336819482..5b62d2271c 100644 --- a/libraries/plugins/export/ExportXml.class.php +++ b/libraries/plugins/export/ExportXml.class.php @@ -9,7 +9,7 @@ if (! defined('PHPMYADMIN')) { exit; } -if (!$GLOBALS['PMA_String']->strlen($GLOBALS['db'])) { /* Can't do server export */ +if (!/*overload*/mb_strlen($GLOBALS['db'])) { /* Can't do server export */ $GLOBALS['skip_import'] = true; return; } @@ -274,8 +274,7 @@ class ExportXml extends ExportPlugin . $trigger['name'] . '">' . $crlf; // Do some formatting - $code = $GLOBALS['PMA_String'] - ->substr(rtrim($code), 0, -3); + $code = /*overload*/mb_substr(rtrim($code), 0, -3); $code = " " . htmlspecialchars($code); $code = str_replace("\n", "\n ", $code); diff --git a/libraries/plugins/export/TableProperty.class.php b/libraries/plugins/export/TableProperty.class.php index 3ff5780058..1978b5926c 100644 --- a/libraries/plugins/export/TableProperty.class.php +++ b/libraries/plugins/export/TableProperty.class.php @@ -82,11 +82,9 @@ class TableProperty */ function getPureType() { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $pos = $pmaString->strpos($this->type, "("); + $pos = /*overload*/mb_strpos($this->type, "("); if ($pos > 0) { - return $pmaString->substr($this->type, 0, $pos); + return /*overload*/mb_substr($this->type, 0, $pos); } return $this->type; } @@ -118,30 +116,28 @@ class TableProperty */ function getDotNetPrimitiveType() { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - if ($pmaString->strpos($this->type, "int") === 0) { + if (/*overload*/mb_strpos($this->type, "int") === 0) { return "int"; } - if ($pmaString->strpos($this->type, "longtext") === 0) { + if (/*overload*/mb_strpos($this->type, "longtext") === 0) { return "string"; } - if ($pmaString->strpos($this->type, "long") === 0) { + if (/*overload*/mb_strpos($this->type, "long") === 0) { return "long"; } - if ($pmaString->strpos($this->type, "char") === 0) { + if (/*overload*/mb_strpos($this->type, "char") === 0) { return "string"; } - if ($pmaString->strpos($this->type, "varchar") === 0) { + if (/*overload*/mb_strpos($this->type, "varchar") === 0) { return "string"; } - if ($pmaString->strpos($this->type, "text") === 0) { + if (/*overload*/mb_strpos($this->type, "text") === 0) { return "string"; } - if ($pmaString->strpos($this->type, "tinyint") === 0) { + if (/*overload*/mb_strpos($this->type, "tinyint") === 0) { return "bool"; } - if ($pmaString->strpos($this->type, "datetime") === 0) { + if (/*overload*/mb_strpos($this->type, "datetime") === 0) { return "DateTime"; } return "unknown"; @@ -154,30 +150,28 @@ class TableProperty */ function getDotNetObjectType() { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - if ($pmaString->strpos($this->type, "int") === 0) { + if (/*overload*/mb_strpos($this->type, "int") === 0) { return "Int32"; } - if ($pmaString->strpos($this->type, "longtext") === 0) { + if (/*overload*/mb_strpos($this->type, "longtext") === 0) { return "String"; } - if ($pmaString->strpos($this->type, "long") === 0) { + if (/*overload*/mb_strpos($this->type, "long") === 0) { return "Long"; } - if ($pmaString->strpos($this->type, "char") === 0) { + if (/*overload*/mb_strpos($this->type, "char") === 0) { return "String"; } - if ($pmaString->strpos($this->type, "varchar") === 0) { + if (/*overload*/mb_strpos($this->type, "varchar") === 0) { return "String"; } - if ($pmaString->strpos($this->type, "text") === 0) { + if (/*overload*/mb_strpos($this->type, "text") === 0) { return "String"; } - if ($pmaString->strpos($this->type, "tinyint") === 0) { + if (/*overload*/mb_strpos($this->type, "tinyint") === 0) { return "Boolean"; } - if ($pmaString->strpos($this->type, "datetime") === 0) { + if (/*overload*/mb_strpos($this->type, "datetime") === 0) { return "DateTime"; } return "Unknown"; @@ -190,7 +184,7 @@ class TableProperty */ function getIndexName() { - if ($GLOBALS['PMA_String']->strlen($this->key) > 0) { + if (/*overload*/mb_strlen($this->key) > 0) { return "index=\"" . htmlspecialchars($this->name, ENT_COMPAT, 'UTF-8') . "\""; diff --git a/libraries/plugins/import/ImportCsv.class.php b/libraries/plugins/import/ImportCsv.class.php index fdab075e15..c937395327 100644 --- a/libraries/plugins/import/ImportCsv.class.php +++ b/libraries/plugins/import/ImportCsv.class.php @@ -104,9 +104,6 @@ class ImportCsv extends AbstractImportCsv // but we use directly from $_POST global $error, $timeout_passed, $finished, $message; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $replacements = array( '\\n' => "\n", '\\t' => "\t", @@ -118,7 +115,7 @@ class ImportCsv extends AbstractImportCsv $csv_new_line = strtr($csv_new_line, $replacements); $param_error = false; - if ($pmaString->strlen($csv_terminated) < 1) { + if (/*overload*/mb_strlen($csv_terminated) < 1) { $message = PMA_Message::error( __('Invalid parameter for CSV import: %s') ); @@ -133,21 +130,21 @@ class ImportCsv extends AbstractImportCsv // confuses this script. // But the parser won't work correctly with strings so we allow just // one character. - } elseif ($pmaString->strlen($csv_enclosed) > 1) { + } elseif (/*overload*/mb_strlen($csv_enclosed) > 1) { $message = PMA_Message::error( __('Invalid parameter for CSV import: %s') ); $message->addParam(__('Columns enclosed with'), false); $error = true; $param_error = true; - } elseif ($pmaString->strlen($csv_escaped) != 1) { + } elseif (/*overload*/mb_strlen($csv_escaped) != 1) { $message = PMA_Message::error( __('Invalid parameter for CSV import: %s') ); $message->addParam(__('Columns escaped with'), false); $error = true; $param_error = true; - } elseif ($pmaString->strlen($csv_new_line) != 1 + } elseif (/*overload*/mb_strlen($csv_new_line) != 1 && $csv_new_line != 'auto' ) { $message = PMA_Message::error( @@ -238,7 +235,7 @@ class ImportCsv extends AbstractImportCsv $col_count = 0; $max_cols = 0; - $csv_terminated_len = $pmaString->strlen($csv_terminated); + $csv_terminated_len = /*overload*/mb_strlen($csv_terminated); while (! ($finished && $i >= $len) && ! $error && ! $timeout_passed) { $data = PMA_importGetNextChunk(); if ($data === false) { @@ -254,7 +251,7 @@ class ImportCsv extends AbstractImportCsv // Force a trailing new line at EOF to prevent parsing problems if ($finished && $buffer) { - $finalch = $pmaString->substr($buffer, -1); + $finalch = /*overload*/mb_substr($buffer, -1); if ($csv_new_line == 'auto' && $finalch != "\r" && $finalch != "\n" @@ -270,19 +267,20 @@ class ImportCsv extends AbstractImportCsv // Do not parse string when we're not at the end // and don't have new line inside if (($csv_new_line == 'auto' - && $pmaString->strpos($buffer, "\r") === false - && $pmaString->strpos($buffer, "\n") === false) + && /*overload*/mb_strpos($buffer, "\r") === false + && /*overload*/mb_strpos($buffer, "\n") === false) || ($csv_new_line != 'auto' - && $pmaString->strpos($buffer, $csv_new_line) === false) + && /*overload*/mb_strpos($buffer, $csv_new_line) === false) ) { continue; } } // Current length of our buffer - $len = $pmaString->strlen($buffer); + $len = /*overload*/mb_strlen($buffer); // Currently parsed char - $ch = $buffer[$i]; + + $ch = mb_substr($buffer, $i, 1); if ($csv_terminated_len > 1 && $ch == $csv_terminated[0]) { $ch = $this->readCsvTerminatedString( $buffer, $ch, $i, $csv_terminated_len @@ -312,7 +310,7 @@ class ImportCsv extends AbstractImportCsv } $values[] = ''; $i++; - $ch = $buffer[$i]; + $ch = mb_substr($buffer, $i, 1); if ($csv_terminated_len > 1 && $ch == $csv_terminated[0]) { $ch = $this->readCsvTerminatedString( $buffer, $ch, $i, $csv_terminated_len @@ -330,7 +328,7 @@ class ImportCsv extends AbstractImportCsv } $need_end = true; $i++; - $ch = $buffer[$i]; + $ch = mb_substr($buffer, $i, 1); if ($csv_terminated_len > 1 && $ch == $csv_terminated[0]) { $ch = $this->readCsvTerminatedString( $buffer, $ch, $i, $csv_terminated_len @@ -356,7 +354,7 @@ class ImportCsv extends AbstractImportCsv break; } $i++; - $ch = $buffer[$i]; + $ch = mb_substr($buffer, $i, 1); if ($csv_terminated_len > 1 && $ch == $csv_terminated[0] ) { @@ -382,7 +380,7 @@ class ImportCsv extends AbstractImportCsv break; } $i++; - $ch = $buffer[$i]; + $ch = mb_substr($buffer, $i, 1); if ($csv_terminated_len > 1 && $ch == $csv_terminated[0]) { $ch = $this->readCsvTerminatedString( $buffer, $ch, $i, $csv_terminated_len @@ -398,7 +396,7 @@ class ImportCsv extends AbstractImportCsv if ($fail) { $i = $fallbacki; - $ch = $buffer[$i]; + $ch = mb_substr($buffer, $i, 1); if ($csv_terminated_len > 1 && $ch == $csv_terminated[0]) { $i += $csv_terminated_len-1; } @@ -410,7 +408,7 @@ class ImportCsv extends AbstractImportCsv $ch = null; } elseif ($i == $len - 1) { $i = $fallbacki; - $ch = $buffer[$i]; + $ch = mb_substr($buffer, $i, 1); if ($csv_terminated_len > 1 && $ch == $csv_terminated[0] ) { @@ -419,7 +417,7 @@ class ImportCsv extends AbstractImportCsv break; } else { $i++; - $ch = $buffer[$i]; + $ch = mb_substr($buffer, $i, 1); if ($csv_terminated_len > 1 && $ch == $csv_terminated[0] ) { @@ -441,7 +439,7 @@ class ImportCsv extends AbstractImportCsv if ($ch == $csv_terminated) { if ($i == $len - 1) { $i = $fallbacki; - $ch = $buffer[$i]; + $ch = mb_substr($buffer, $i, 1); if ($csv_terminated_len > 1 && $ch == $csv_terminated[0] ) { @@ -450,7 +448,7 @@ class ImportCsv extends AbstractImportCsv break; } $i++; - $ch = $buffer[$i]; + $ch = mb_substr($buffer, $i, 1); if ($csv_terminated_len > 1 && $ch == $csv_terminated[0] ) { @@ -473,7 +471,7 @@ class ImportCsv extends AbstractImportCsv if ($i >= ($len - 2) && ! $finished) { break; // We need more data to decide new line } - if ($buffer[$i + 1] == "\n") { + if (mb_substr($buffer, $i+1, 1) == "\n") { $i++; } } @@ -544,11 +542,11 @@ class ImportCsv extends AbstractImportCsv $line++; $csv_finish = false; $values = array(); - $buffer = $pmaString->substr($buffer, $i + 1); - $len = $pmaString->strlen($buffer); + $buffer = /*overload*/mb_substr($buffer, $i + 1); + $len = /*overload*/mb_strlen($buffer); $i = 0; $lasti = -1; - $ch = $buffer[0]; + $ch = mb_substr($buffer, 0); } } // End of parser loop } // End of import loop @@ -580,7 +578,7 @@ class ImportCsv extends AbstractImportCsv } } - if ($pmaString->strlen($db)) { + if (/*overload*/mb_strlen($db)) { $result = $GLOBALS['dbi']->fetchResult('SHOW TABLES'); $tbl_name = 'TABLE ' . (count($result) + 1); } else { @@ -653,7 +651,7 @@ class ImportCsv extends AbstractImportCsv { for ($j = 0; $j < $csv_terminated_len - 1; $j++) { $i++; - $ch .= $buffer[$i]; + $ch .= mb_substr($buffer, $i, 1); } return $ch; } diff --git a/libraries/plugins/import/ImportMediawiki.class.php b/libraries/plugins/import/ImportMediawiki.class.php index 3d4674f272..8716af581e 100644 --- a/libraries/plugins/import/ImportMediawiki.class.php +++ b/libraries/plugins/import/ImportMediawiki.class.php @@ -93,15 +93,12 @@ class ImportMediawiki extends ImportPlugin // Initialize the name of the current table $cur_table_name = ""; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - while (! $finished && ! $error && ! $timeout_passed ) { $data = PMA_importGetNextChunk(); if ($data === false) { // Subtract data we didn't handle yet and stop processing - $GLOBALS['offset'] -= $pmaString->strlen($buffer); + $GLOBALS['offset'] -= /*overload*/mb_strlen($buffer); break; } elseif ($data === true) { // Handle rest of buffer @@ -111,7 +108,7 @@ class ImportMediawiki extends ImportPlugin unset($data); // Don't parse string if we're not at the end // and don't have a new line inside - if ($pmaString->strpos($buffer, $mediawiki_new_line) === false ) { + if (/*overload*/mb_strpos($buffer, $mediawiki_new_line) === false ) { continue; } } @@ -145,12 +142,12 @@ class ImportMediawiki extends ImportPlugin $matches = array(); // Check beginning of comment - if (! strcmp($pmaString->substr($cur_buffer_line, 0, 4), "<!--")) { + if (! strcmp(/*overload*/mb_substr($cur_buffer_line, 0, 4), "<!--")) { $inside_comment = true; continue; } elseif ($inside_comment) { // Check end of comment - if (!strcmp($pmaString->substr($cur_buffer_line, 0, 4), "-->")) { + if (!strcmp(/*overload*/mb_substr($cur_buffer_line, 0, 4), "-->")) { // Only data comments are closed. The structure comments // will be closed when a data comment begins (in order to // skip structure tables) @@ -206,9 +203,9 @@ class ImportMediawiki extends ImportPlugin $in_table_header = false; // End processing because the current line does not // contain any column information - } elseif ($pmaString->substr($cur_buffer_line, 0, 2) === '|-' - || $pmaString->substr($cur_buffer_line, 0, 2) === '|+' - || $pmaString->substr($cur_buffer_line, 0, 2) === '|}' + } elseif (/*overload*/mb_substr($cur_buffer_line, 0, 2) === '|-' + || /*overload*/mb_substr($cur_buffer_line, 0, 2) === '|+' + || /*overload*/mb_substr($cur_buffer_line, 0, 2) === '|}' ) { // Check begin row or end table @@ -230,7 +227,7 @@ class ImportMediawiki extends ImportPlugin $cur_temp_line = array(); // No more processing required at the end of the table - if ($pmaString->substr($cur_buffer_line, 0, 2) === '|}') { + if (/*overload*/mb_substr($cur_buffer_line, 0, 2) === '|}') { $current_table = array( $cur_table_name, $cur_temp_table_headers, @@ -266,7 +263,7 @@ class ImportMediawiki extends ImportPlugin // A '|' inside an invalid link should not // be mistaken as delimiting cell parameters - if ($pmaString->strpos($cell_data[0], '[[') === true ) { + if (/*overload*/mb_strpos($cell_data[0], '[[') === true ) { if (count($cell_data) == 1) { $cell = $cell_data[0]; } else { @@ -278,8 +275,8 @@ class ImportMediawiki extends ImportPlugin $cell = trim($cell); $col_start_chars = array( "|", "!"); foreach ($col_start_chars as $col_start_char) { - if ($pmaString->strpos($cell, $col_start_char) === 0) { - $cell = trim($pmaString->substr($cell, 1)); + if (/*overload*/mb_strpos($cell, $col_start_char) === 0) { + $cell = trim(/*overload*/mb_substr($cell, 1)); } } diff --git a/libraries/plugins/import/ImportShp.class.php b/libraries/plugins/import/ImportShp.class.php index c4601decdd..e675747054 100644 --- a/libraries/plugins/import/ImportShp.class.php +++ b/libraries/plugins/import/ImportShp.class.php @@ -69,9 +69,6 @@ class ImportShp extends ImportPlugin global $db, $error, $finished, $compression, $import_file, $local_import_file, $message; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $GLOBALS['finished'] = false; $shp = new PMA_ShapeFile(1); @@ -110,8 +107,8 @@ class ImportShp extends ImportPlugin $temp_dbf_file = true; // Replace the .dbf with .*, as required // by the bsShapeFiles library. - $file_name = $pmaString->substr( - $dbf_file_path, 0, $pmaString->strlen($dbf_file_path) - 4 + $file_name = /*overload*/mb_substr( + $dbf_file_path, 0, /*overload*/mb_strlen($dbf_file_path) - 4 ) . '.*'; $shp->FileName = $file_name; } @@ -124,10 +121,10 @@ class ImportShp extends ImportPlugin // to load extra data. // Replace the .shp with .*, // so the bsShapeFiles library correctly locates .dbf file. - $file_name = $pmaString->substr( + $file_name = /*overload*/mb_substr( $import_file, 0, - $pmaString->strlen($import_file) - 4 + /*overload*/mb_strlen($import_file) - 4 ) . '.*'; $shp->FileName = $file_name; } @@ -261,7 +258,7 @@ class ImportShp extends ImportPlugin } // Set table name based on the number of tables - if ($pmaString->strlen($db)) { + if (/*overload*/mb_strlen($db)) { $result = $GLOBALS['dbi']->fetchResult('SHOW TABLES'); $table_name = 'TABLE ' . (count($result) + 1); } else { @@ -278,7 +275,7 @@ class ImportShp extends ImportPlugin $analyses[$table_no][FORMATTEDSQL][$spatial_col] = true; // Set database name to the currently selected one, if applicable - if ($pmaString->strlen($db)) { + if (/*overload*/mb_strlen($db)) { $db_name = $db; $options = array('create_db' => false); } else { diff --git a/libraries/plugins/import/ImportSql.class.php b/libraries/plugins/import/ImportSql.class.php index 02a30f94b6..70662efbe6 100644 --- a/libraries/plugins/import/ImportSql.class.php +++ b/libraries/plugins/import/ImportSql.class.php @@ -21,6 +21,47 @@ require_once 'libraries/plugins/ImportPlugin.class.php'; */ class ImportSql extends ImportPlugin { + const BIG_VALUE = 2147483647; + const READ_MB_FALSE = 0; + const READ_MB_TRUE = 1; + + private $_delimiter; + private $_delimiterLength; + private $_delimiterPosition = false; + private $_queryBeginPosition = 0; + + private $_isInString = false; + + private $_quote = null; + + private $_isInComment = false; + + private $_openingComment = null; + + private $_isInDelimiter = false; + + private $_delimiterKeyword = 'DELIMITER '; + + private $_readMb = self::READ_MB_FALSE; + + private $_data = null; + private $_dataLength = 0; + + //@todo Move this part in string functions definition file. + private $_stringFunctions = array( + self::READ_MB_FALSE => array( + 'substr' => 'substr', + 'strlen' => 'strlen', + 'strpos' => 'strpos', + ), + self::READ_MB_TRUE => array( + 'substr' => 'mb_substr', + 'strlen' => 'mb_strlen', + 'strpos' => 'mb_strpos', + ), + ); + private $_stringFctToUse = false; + /** * Constructor */ @@ -91,6 +132,13 @@ class ImportSql extends ImportPlugin ); $generalOptions->addProperty($leaf); + $leaf = new BoolPropertyItem(); + $leaf->setName("read_as_multibytes"); + $leaf->setText( + __('Read as multibytes') + ); + $generalOptions->addProperty($leaf); + // add the main group to the root group $importSpecificOptions->addProperty($generalOptions); // set the options for the import plugin property item @@ -101,6 +149,185 @@ class ImportSql extends ImportPlugin } /** + * Look for end of string + * + * @return bool End of string found + */ + private function _searchStringEnd() + { + //Search for closing quote + $posClosingString = $this->_stringFctToUse['strpos']( + $this->_data, $this->_quote, $this->_delimiterPosition + ); + + if (false === $posClosingString) { + return false; + } + + //Quotes escaped by quote will be considered as 2 consecutive strings + //and won't pass in this loop. + $posEscape = $posClosingString-1; + while ($this->_stringFctToUse['substr']($this->_data, $posEscape, 1) == '\\' + ) { + $posEscape--; + } + + // Odd count means it was escaped + $quoteEscaped = (((($posClosingString - 1) - $posEscape) % 2) === 1); + + //Move after the escaped guote. + $this->_delimiterPosition = $posClosingString + 1; + + if ($quoteEscaped) { + return true; + } + + $this->_isInString = false; + $this->_quote = null; + return true; + } + + /** + * Return the position of first SQL delimiter or false if no SQL delimiter found. + * + * @return int|bool Delimiter position or false if no delimiter found + */ + private function _findDelimiterPosition() + { + $firstSearchChar = null; + $firstSqlDelimiter = null; + $matches = null; + + /* while not at end of line */ + while ($this->_delimiterPosition < $this->_dataLength) { + if ($this->_isInString) { + if (false === $this->_searchStringEnd()) { + return false; + } + + continue; + } + + if ($this->_isInComment) { + if (in_array($this->_openingComment, array('#', '-- '))) { + $posClosingComment = $this->_stringFctToUse['strpos']( + $this->_data, + "\n", + $this->_delimiterPosition + ); + if (false === $posClosingComment) { + return false; + } + //Move after the end of the line. + $this->_delimiterPosition = $posClosingComment + 1; + $this->_isInComment = false; + $this->_openingComment = null; + } elseif ('/*' === $this->_openingComment) { + //Search for closing comment + $posClosingComment = $this->_stringFctToUse['strpos']( + $this->_data, + '*/', + $this->_delimiterPosition + ); + if (false === $posClosingComment) { + return false; + } + //Move after closing comment. + $this->_delimiterPosition = $posClosingComment + 2; + $this->_isInComment = false; + $this->_openingComment = null; + } else { + //We shouldn't be able to come here. + //throw new Exception('Unknown case.'); + break; + } + continue; + } + + if ($this->_isInDelimiter) { + //Search for new line. + if (!preg_match( + "/^(.*)\n/", + $this->_stringFctToUse['substr']( + $this->_data, + $this->_delimiterPosition + ), + $matches, + PREG_OFFSET_CAPTURE + )) { + return false; + } + + $this->_setDelimiter($matches[1][0]); + //Start after delimiter and new line. + $this->_queryBeginPosition = $this->_delimiterPosition + + $matches[1][1] + $this->_delimiterLength + 1; + $this->_delimiterPosition = $this->_queryBeginPosition; + $this->_isInDelimiter = false; + $firstSqlDelimiter = null; + $firstSearchChar = null; + continue; + } + + list($matches, $firstSearchChar) = $this->_searchSpecialChars( + $this->_data, + $firstSearchChar, + $matches + ); + + $firstSqlDelimiter = $this->_searchSqlDelimiter( + $this->_data, + $firstSqlDelimiter + ); + + if (false === $firstSqlDelimiter && false === $firstSearchChar) { + return false; + } + + //If first char is delimiter. + if (false === $firstSearchChar + || (false !== $firstSqlDelimiter && $firstSqlDelimiter < $firstSearchChar) + ) { + $this->_delimiterPosition = $firstSqlDelimiter; + return true; + } + + //Else first char is result of preg_match. + + $specialChars = $matches[1][0]; + + //If string is opened. + if (in_array($specialChars, array('\'', '"', '`'))) { + $this->_isInString = true; + $this->_quote = $specialChars; + //Move after quote. + $this->_delimiterPosition = $firstSearchChar + 1; + continue; + } + + //If comment is opened. + if (in_array($specialChars, array('#', '-- ', '/*'))) { + $this->_isInComment = true; + $this->_openingComment = $specialChars; + //Move after comment opening. + $this->_delimiterPosition = $firstSearchChar + + $this->_stringFctToUse['strlen']($specialChars); + continue; + } + + //If DELIMITER is found. + if ($specialChars === $this->_delimiterKeyword) { + $this->_isInDelimiter = true; + $this->_delimiterPosition = $firstSearchChar + + $this->_stringFctToUse['strlen']($specialChars); + continue; + } + } + + return false; + } + + /** * Handles the whole import logic * * @param array &$sql_data 2-element array with sql data @@ -111,42 +338,23 @@ class ImportSql extends ImportPlugin { global $error, $timeout_passed; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - - $buffer = ''; - // Defaults for parser - $sql = ''; - $start_pos = 0; - $posInQueryString = 0; - $len= 0; - $big_value = 2147483647; - // include the space because it's mandatory - $delimiter_keyword = 'DELIMITER '; - $length_of_delimiter_keyword = $pmaString->strlen($delimiter_keyword); + //Manage multibytes or not + if (isset($_REQUEST['sql_read_as_multibytes'])) { + $this->_readMb = self::READ_MB_TRUE; + } + $this->_stringFctToUse = $this->_stringFunctions[$this->_readMb]; if (isset($_POST['sql_delimiter'])) { - $sql_delimiter = $_POST['sql_delimiter']; + $this->_setDelimiter($_POST['sql_delimiter']); } else { - $sql_delimiter = ';'; + $this->_setDelimiter(';'); } // Handle compatibility options - $sql_modes = array(); - if (isset($_REQUEST['sql_compatibility']) - && 'NONE' != $_REQUEST['sql_compatibility'] - ) { - $sql_modes[] = $_REQUEST['sql_compatibility']; - } - if (isset($_REQUEST['sql_no_auto_value_on_zero'])) { - $sql_modes[] = 'NO_AUTO_VALUE_ON_ZERO'; - } - if (count($sql_modes) > 0) { - $GLOBALS['dbi']->tryQuery( - 'SET SQL_MODE="' . implode(',', $sql_modes) . '"' - ); - } - unset($sql_modes); + $this->_setSQLMode($GLOBALS['dbi'], $_REQUEST); + + //Initialise data. + $this->_setData(null); /** * will be set in PMA_importGetNextChunk() @@ -154,332 +362,196 @@ class ImportSql extends ImportPlugin * @global boolean $GLOBALS['finished'] */ $GLOBALS['finished'] = false; + $delimiterFound = false; - while (! ($GLOBALS['finished'] && $posInQueryString >= $len) - && ! $error - && ! $timeout_passed - ) { - $data = PMA_importGetNextChunk(); - if ($data === false) { - // subtract data we didn't handle yet and stop processing - $GLOBALS['offset'] -= $pmaString->strlen($buffer); - break; - } elseif ($data === true) { - // Handle rest of buffer - } else { - // Append new data to buffer - $buffer .= $data; - // free memory - unset($data); - // Do not parse string when we're not at the end - // and don't have ; inside - if ($pmaString->strpos($buffer, $sql_delimiter, $posInQueryString) === false - && ! $GLOBALS['finished'] - ) { - continue; + while (!$error && !$timeout_passed) { + if (false === $delimiterFound) { + $newData = PMA_importGetNextChunk(200); + if ($newData === false) { + // subtract data we didn't handle yet and stop processing + $GLOBALS['offset'] -= $this->_dataLength; + break; } - } - // Convert CR (but not CRLF) to LF otherwise all queries - // may not get executed on some platforms - $buffer = preg_replace("/\r($|[^\n])/", "\n$1", $buffer); - - // Current length of our buffer - $len = $pmaString->strlen($buffer); - - // Grab some SQL queries out of it - while ($posInQueryString < $len) { - $found_delimiter = false; - // Find first interesting character - $old_i = $posInQueryString; - // this is about 7 times faster that looking for each sequence i - // one by one with strpos() - $posPattern = $pmaString->pregStrpos( - '/(\'|"|#|-- |\/\*|`|(?i)(?<![A-Z0-9_])' - . $delimiter_keyword . ')/', - $buffer, - $posInQueryString - ); - if (false !== $posPattern) { - // in $matches, index 0 contains the match for the complete - // expression but we don't use it - $first_position = $posPattern; - } else { - $first_position = $big_value; + if ($newData === true) { + $GLOBALS['finished'] = true; + break; } - // the cost of doing this one with preg_match() would be too high - $first_sql_delimiter = $pmaString->strpos( - $buffer, - $sql_delimiter, - $posInQueryString - ); - if ($first_sql_delimiter === false) { - $first_sql_delimiter = $big_value; - } else { - $found_delimiter = true; - } + //Convert CR (but not CRLF) to LF otherwise all queries + //may not get executed on some platforms + $this->_addData(preg_replace("/\r($|[^\n])/", "\n$1", $newData)); + unset($newData); + } - // set $i to the position of the first quote, - // comment.start or delimiter found - $posInQueryString = min($first_position, $first_sql_delimiter); + //Find quotes, comments, delimiter definition or delimiter itself. + $delimiterFound = $this->_findDelimiterPosition(); - if ($posInQueryString == $big_value) { - // none of the above was found in the string + //If no delimiter found, restart and get more data. + if (false === $delimiterFound) { + continue; + } - $posInQueryString = $old_i; - if (! $GLOBALS['finished']) { - break; - } - // at the end there might be some whitespace... - if (trim($buffer) == '') { - $buffer = ''; - $len = 0; - break; - } - // We hit end of query, go there! - $posInQueryString = $pmaString->strlen($buffer) - 1; - } + PMA_importRunQuery( + $this->_stringFctToUse['substr']( + $this->_data, + $this->_queryBeginPosition, + $this->_delimiterPosition - $this->_queryBeginPosition + ), //Query to execute + $this->_stringFctToUse['substr']( + $this->_data, + 0, + $this->_delimiterPosition + $this->_delimiterLength + ), //Query to display + false, + $sql_data + ); - // Grab current character - //$ch = $buffer[$i]; //Don't use this syntax, because of UTF8 strings - $ch = $pmaString->substr($buffer, $posInQueryString, 1); - - // Quotes - if ($pmaString->strpos('\'"`', $ch) !== false) { - $quote = $ch; - $endq = false; - while (! $endq) { - // Find next quote - $posQuote = $pmaString - ->strpos($buffer, $quote, $posInQueryString + 1); - /* - * Behave same as MySQL and accept end of query as end - * of backtick. - * I know this is sick, but MySQL behaves like this: - * - * SELECT * FROM `table - * - * is treated like - * - * SELECT * FROM `table` - */ - if ($posQuote === false && $quote == '`' - && $found_delimiter - ) { - $posQuote = $first_sql_delimiter - 1; - } elseif ($posQuote === false) {// No quote? Too short string - // We hit end of string => unclosed quote, - // but we handle it as end of query - list($endq, $posInQueryString) = $this - ->getEndQuoteAndPos($len, $endq, $posInQueryString); - $found_delimiter = false; - break; - } - // Was not the quote escaped? - $posEscape = $posQuote - 1; - while ($pmaString->substr($buffer, $posEscape, 1) == '\\') { - $posEscape--; - } - // Even count means it was not escaped - $endq = (((($posQuote - 1) - $posEscape) % 2) == 0); - // Skip the string - $posInQueryString = $posQuote; - - if ($first_sql_delimiter < $posQuote) { - $found_delimiter = false; - } - } - if (! $endq) { - break; - } - $posInQueryString++; - // Aren't we at the end? - if ($GLOBALS['finished'] && $posInQueryString == $len) { - $posInQueryString--; - } else { - continue; - } - } + $this->_setData( + $this->_stringFctToUse['substr']( + $this->_data, + $this->_delimiterPosition + $this->_delimiterLength + ) + ); + } - // Not enough data to decide - if ((($posInQueryString == ($len - 1) && ($ch == '-' || $ch == '/')) - || ($posInQueryString == ($len - 2) && (($ch == '-' - && $pmaString->substr($buffer, $posInQueryString + 1, 1) == '-') - || ($ch == '/' - && $pmaString->substr($buffer, $posInQueryString + 1, 1) == '*')))) - && ! $GLOBALS['finished'] - ) { - break; - } + //Commit any possible data in buffers + PMA_importRunQuery('', $this->_data, false, $sql_data); + PMA_importRunQuery('', '', false, $sql_data); + } - // Comments - if ($ch == '#' - || ($posInQueryString < ($len - 1) && $ch == '-' - && $pmaString->substr($buffer, $posInQueryString + 1, 1) == '-' - && (($posInQueryString < ($len - 2) - && $pmaString->substr($buffer, $posInQueryString + 2, 1) <= ' ') - || ($posInQueryString == ($len - 1) && $GLOBALS['finished']))) - || ($posInQueryString < ($len - 1) && $ch == '/' - && $pmaString->substr($buffer, $posInQueryString + 1, 1) == '*') - ) { - // Copy current string to SQL - if ($start_pos != $posInQueryString) { - $sql .= $pmaString->substr( - $buffer, - $start_pos, - $posInQueryString - $start_pos - ); - } - // Skip the rest - $start_of_comment = $posInQueryString; - // do not use PHP_EOL here instead of "\n", because the export - // file might have been produced on a different system - $posInQueryString = $pmaString->strpos( - $buffer, - $ch == '/' ? '*/' : "\n", - $posInQueryString - ); - // didn't we hit end of string? - if ($posInQueryString === false) { - if ($GLOBALS['finished']) { - $posInQueryString = $len - 1; - } else { - break; - } - } - // Skip * - if ($ch == '/') { - $posInQueryString++; - } - // Skip last char - $posInQueryString++; - // We need to send the comment part in case we are defining - // a procedure or function and comments in it are valuable - $sql .= $pmaString->substr( - $buffer, - $start_of_comment, - $posInQueryString - $start_of_comment - ); - // Next query part will start here - $start_pos = $posInQueryString; - // Aren't we at the end? - if ($posInQueryString == $len) { - $posInQueryString--; - } else { - continue; - } - } - // Change delimiter, if redefined, and skip it - // (don't send to server!) - if (($posInQueryString + $length_of_delimiter_keyword < $len) - && $pmaString->strtoupper( - $pmaString->substr($buffer, $posInQueryString, $length_of_delimiter_keyword) - ) == $delimiter_keyword - ) { - // look for EOL on the character immediately after 'DELIMITER ' - // (see previous comment about PHP_EOL) - $new_line_pos = $pmaString->strpos( - $buffer, - "\n", - $posInQueryString + $length_of_delimiter_keyword - ); - // it might happen that there is no EOL - if (false === $new_line_pos) { - $new_line_pos = $len; - } - $sql_delimiter = $pmaString->substr( - $buffer, - $posInQueryString + $length_of_delimiter_keyword, - $new_line_pos - $posInQueryString - $length_of_delimiter_keyword - ); - $posInQueryString = $new_line_pos + 1; - // Next query part will start here - $start_pos = $posInQueryString; - continue; - } + /** + * Handle compatibility options + * + * @param PMA_DatabaseInterface $dbi Database interface + * @param array $request Request array + * + * @return void + */ + private function _setSQLMode($dbi, $request) + { + $sql_modes = array(); + if (isset($request['sql_compatibility']) + && 'NONE' != $request['sql_compatibility'] + ) { + $sql_modes[] = $request['sql_compatibility']; + } + if (isset($request['sql_no_auto_value_on_zero'])) { + $sql_modes[] = 'NO_AUTO_VALUE_ON_ZERO'; + } + if (count($sql_modes) > 0) { + $dbi->tryQuery( + 'SET SQL_MODE="' . implode(',', $sql_modes) . '"' + ); + } + } - // End of SQL - if ($found_delimiter - || ($GLOBALS['finished'] - && ($posInQueryString == $len - 1)) - ) { - $tmp_sql = $sql; - if ($start_pos < $len) { - $length_to_grab = $posInQueryString - $start_pos; - - if (! $found_delimiter) { - $length_to_grab++; - } - $tmp_sql .= $pmaString->substr( - $buffer, - $start_pos, - $length_to_grab - ); - unset($length_to_grab); - } - // Do not try to execute empty SQL - if (! preg_match('/^([\s]*;)*$/', trim($tmp_sql))) { - $sql = $tmp_sql; - PMA_importRunQuery( - $sql, - $pmaString->substr( - $buffer, - 0, - $posInQueryString + $pmaString->strlen($sql_delimiter) - ), - false, - $sql_data - ); - $buffer = $pmaString->substr( - $buffer, - $posInQueryString + $pmaString->strlen($sql_delimiter) - ); - // Reset parser: - $len = $pmaString->strlen($buffer); - $sql = ''; - $posInQueryString = 0; - $start_pos = 0; - // Any chance we will get a complete query? - //if ((strpos($buffer, ';') === false) - //&& ! $GLOBALS['finished']) { - if ($pmaString->strpos($buffer, $sql_delimiter) === false - && ! $GLOBALS['finished'] - ) { - break; - } - } else { - $posInQueryString++; - $start_pos = $posInQueryString; - } - } - } // End of parser loop - } // End of import loop - // Commit any possible data in buffers - PMA_importRunQuery( - '', - $pmaString->substr($buffer, 0, $len), - false, - $sql_data - ); - PMA_importRunQuery('', '', false, $sql_data); + /** + * Look for special chars: comment, string or DELIMITER + * + * @param string $data Data to parse + * @param int $firstSearchChar First found char position + * @param array $matches Special chars found in $data + * + * @return array 0: matches, 1: first found char position + */ + private function _searchSpecialChars( + $data, + $firstSearchChar, + $matches + ) { + //Don't look for a string/comment/"DELIMITER" if not found previously + //or if it's still after current position. + if (null === $firstSearchChar + || (false !== $firstSearchChar && $firstSearchChar < $this->_delimiterPosition) + ) { + $bFind = preg_match( + '/(\'|"|#|-- |\/\*|`|(?i)(?<![A-Z0-9_])' + . $this->_delimiterKeyword . ')/', + $this->_stringFctToUse['substr']($data, $this->_delimiterPosition), + $matches, + PREG_OFFSET_CAPTURE + ); + + if (1 === $bFind) { + $firstSearchChar = $matches[1][1] + $this->_delimiterPosition; + } else { + $firstSearchChar = false; + } + } + return array($matches, $firstSearchChar); } /** - * Get end quote and position + * Look for SQL delimiter * - * @param int $len Length - * @param bool $endq End quote - * @param int $position Position + * @param string $data Data to parse + * @param int $firstSqlDelimiter First found char position * - * @return array End quote, position + * @return int */ - protected function getEndQuoteAndPos($len, $endq, $position) + private function _searchSqlDelimiter($data, $firstSqlDelimiter) { - if ($GLOBALS['finished']) { - $endq = true; - $position = $len - 1; + //Don't look for the SQL delimiter if not found previously + //or if it's still after current position. + if (null === $firstSqlDelimiter + || (false !== $firstSqlDelimiter && $firstSqlDelimiter < $this->_delimiterPosition) + ) { + // the cost of doing this one with preg_match() would be too high + $firstSqlDelimiter = $this->_stringFctToUse['strpos']( + $data, + $this->_delimiter, + $this->_delimiterPosition + ); } - return array($endq, $position); + + return $firstSqlDelimiter; + } + + /** + * Set new delimiter + * + * @param string $delimiter New delimiter + * + * @return int delimiter length + */ + private function _setDelimiter($delimiter) + { + $this->_delimiter = $delimiter; + $this->_delimiterLength = $this->_stringFctToUse['strlen']($delimiter); + + return $this->_delimiterLength; + } + + /** + * Set data to parse + * + * @param string $data Data to parse + * + * @return int Data length + */ + private function _setData($data) + { + $this->_data = ltrim($data); + $this->_dataLength = $this->_stringFctToUse['strlen']($this->_data); + $this->_queryBeginPosition = 0; + $this->_delimiterPosition = 0; + + return $this->_dataLength; + } + + /** + * Add data to parse + * + * @param string $data Data to add to data to parse + * + * @return int Data length + */ + private function _addData($data) + { + $this->_data .= $data; + $this->_dataLength += $this->_stringFctToUse['strlen']($data); + + return $this->_dataLength; } } diff --git a/libraries/plugins/schema/dia/Dia_Relation_Schema.class.php b/libraries/plugins/schema/dia/Dia_Relation_Schema.class.php index 29358e6845..becce4f4f0 100644 --- a/libraries/plugins/schema/dia/Dia_Relation_Schema.class.php +++ b/libraries/plugins/schema/dia/Dia_Relation_Schema.class.php @@ -178,7 +178,7 @@ class PMA_DIA extends XMLWriter PMA_downloadHeader( $fileName . '.dia', 'application/x-dia-diagram', - $GLOBALS['PMA_String']->strlen($output) + /*overload*/mb_strlen($output) ); print $output; } diff --git a/libraries/plugins/schema/eps/Eps_Relation_Schema.class.php b/libraries/plugins/schema/eps/Eps_Relation_Schema.class.php index 0f42eb8310..5f5509ba43 100644 --- a/libraries/plugins/schema/eps/Eps_Relation_Schema.class.php +++ b/libraries/plugins/schema/eps/Eps_Relation_Schema.class.php @@ -297,7 +297,7 @@ class PMA_EPS PMA_downloadHeader( $fileName . '.eps', 'image/x-eps', - $GLOBALS['PMA_String']->strlen($output) + /*overload*/mb_strlen($output) ); print $output; } diff --git a/libraries/plugins/schema/pdf/Pdf_Relation_Schema.class.php b/libraries/plugins/schema/pdf/Pdf_Relation_Schema.class.php index dfba41beee..d033769533 100644 --- a/libraries/plugins/schema/pdf/Pdf_Relation_Schema.class.php +++ b/libraries/plugins/schema/pdf/Pdf_Relation_Schema.class.php @@ -345,16 +345,13 @@ class PMA_Schema_PDF extends PMA_PDF */ function NbLines($w, $txt) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $cw = &$this->CurrentFont['cw']; if ($w == 0) { $w = $this->w - $this->rMargin - $this->x; } $wmax = ($w-2 * $this->cMargin) * 1000 / $this->FontSize; $s = str_replace("\r", '', $txt); - $nb = $pmaString->strlen($s); + $nb = /*overload*/mb_strlen($s); if ($nb > 0 and $s[$nb-1] == "\n") { $nb--; } @@ -376,7 +373,7 @@ class PMA_Schema_PDF extends PMA_PDF if ($c == ' ') { $sep = $i; } - $l += isset($cw[$pmaString->ord($c)])?$cw[$pmaString->ord($c)]:0 ; + $l += isset($cw[/*overload*/mb_ord($c)])?$cw[/*overload*/mb_ord($c)]:0 ; if ($l > $wmax) { if ($sep == -1) { if ($i == $j) { diff --git a/libraries/plugins/schema/svg/Svg_Relation_Schema.class.php b/libraries/plugins/schema/svg/Svg_Relation_Schema.class.php index 1b8865bfa2..f2ae1f1bc6 100644 --- a/libraries/plugins/schema/svg/Svg_Relation_Schema.class.php +++ b/libraries/plugins/schema/svg/Svg_Relation_Schema.class.php @@ -190,7 +190,7 @@ class PMA_SVG extends XMLWriter PMA_downloadHeader( $fileName . '.svg', 'image/svg+xml', - $GLOBALS['PMA_String']->strlen($output) + /*overload*/mb_strlen($output) ); print $output; } diff --git a/libraries/plugins/transformations/abstract/DateFormatTransformationsPlugin.class.php b/libraries/plugins/transformations/abstract/DateFormatTransformationsPlugin.class.php index 719c6ff761..f039eb7773 100644 --- a/libraries/plugins/transformations/abstract/DateFormatTransformationsPlugin.class.php +++ b/libraries/plugins/transformations/abstract/DateFormatTransformationsPlugin.class.php @@ -58,13 +58,10 @@ abstract class DateFormatTransformationsPlugin extends TransformationsPlugin $options[0] = 0; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - if (empty($options[2])) { $options[2] = 'local'; } else { - $options[2] = $pmaString->strtolower($options[2]); + $options[2] = /*overload*/mb_strtolower($options[2]); } if (empty($options[1])) { @@ -89,8 +86,8 @@ abstract class DateFormatTransformationsPlugin extends TransformationsPlugin // for example TIMESTAMP(8) means YYYYMMDD) } else if (preg_match('/^(\d{2}){3,7}$/', $buffer)) { - if ($pmaString->strlen($buffer) == 14 - || $pmaString->strlen($buffer) == 8 + if (/*overload*/mb_strlen($buffer) == 14 + || /*overload*/mb_strlen($buffer) == 8 ) { $offset = 4; } else { @@ -98,12 +95,12 @@ abstract class DateFormatTransformationsPlugin extends TransformationsPlugin } $aDate = array(); - $aDate['year'] = $pmaString->substr($buffer, 0, $offset); - $aDate['month'] = $pmaString->substr($buffer, $offset, 2); - $aDate['day'] = $pmaString->substr($buffer, $offset + 2, 2); - $aDate['hour'] = $pmaString->substr($buffer, $offset + 4, 2); - $aDate['minute'] = $pmaString->substr($buffer, $offset + 6, 2); - $aDate['second'] = $pmaString->substr($buffer, $offset + 8, 2); + $aDate['year'] = (int)/*overload*/mb_substr($buffer, 0, $offset); + $aDate['month'] = (int)/*overload*/mb_substr($buffer, $offset, 2); + $aDate['day'] = (int)/*overload*/mb_substr($buffer, $offset + 2, 2); + $aDate['hour'] = (int)/*overload*/mb_substr($buffer, $offset + 4, 2); + $aDate['minute'] = (int)/*overload*/mb_substr($buffer, $offset + 6, 2); + $aDate['second'] = (int)/*overload*/mb_substr($buffer, $offset + 8, 2); if (checkdate($aDate['month'], $aDate['day'], $aDate['year'])) { $timestamp = mktime( diff --git a/libraries/plugins/transformations/abstract/SubstringTransformationsPlugin.class.php b/libraries/plugins/transformations/abstract/SubstringTransformationsPlugin.class.php index 33a4f4ee17..05097fa6de 100644 --- a/libraries/plugins/transformations/abstract/SubstringTransformationsPlugin.class.php +++ b/libraries/plugins/transformations/abstract/SubstringTransformationsPlugin.class.php @@ -52,18 +52,16 @@ abstract class SubstringTransformationsPlugin extends TransformationsPlugin // further operations on $buffer using the $options[] array. $options = $this->getOptions($options, array(0, 'all', '…')); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; if ($options[1] != 'all') { - $newtext = $pmaString->substr( + $newtext = /*overload*/mb_substr( $buffer, $options[0], $options[1] ); } else { - $newtext = $pmaString->substr($buffer, $options[0]); + $newtext = /*overload*/mb_substr($buffer, $options[0]); } - $length = $pmaString->strlen($newtext); - $baselength = $pmaString->strlen($buffer); + $length = /*overload*/mb_strlen($newtext); + $baselength = /*overload*/mb_strlen($buffer); if ($length != $baselength) { if ($options[0] != 0) { $newtext = $options[2] . $newtext; diff --git a/libraries/pmd_common.php b/libraries/pmd_common.php index ba54a4c3b3..a3bc492f3b 100644 --- a/libraries/pmd_common.php +++ b/libraries/pmd_common.php @@ -55,7 +55,7 @@ function PMA_getTablesInfo() $one_table['TABLE_NAME'], ENT_QUOTES ); - $GLOBALS['PMD']['TABLE_TYPE'][$i] = $GLOBALS['PMA_String']->strtoupper( + $GLOBALS['PMD']['TABLE_TYPE'][$i] = /*overload*/mb_strtoupper( $one_table['ENGINE'] ); @@ -471,13 +471,10 @@ function PMA_saveDisplayField($db, $table, $field) */ function PMA_addNewRelation($db, $T1, $F1, $T2, $F2, $on_delete, $on_update) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $tables = $GLOBALS['dbi']->getTablesFull($db, $T1); - $type_T1 = $pmaString->strtoupper($tables[$T1]['ENGINE']); + $type_T1 = /*overload*/mb_strtoupper($tables[$T1]['ENGINE']); $tables = $GLOBALS['dbi']->getTablesFull($db, $T2); - $type_T2 = $pmaString->strtoupper($tables[$T2]['ENGINE']); + $type_T2 = /*overload*/mb_strtoupper($tables[$T2]['ENGINE']); // native foreign key if (PMA_Util::isForeignKeySupported($type_T1) @@ -594,16 +591,13 @@ function PMA_addNewRelation($db, $T1, $F1, $T2, $F2, $on_delete, $on_update) */ function PMA_removeRelation($T1, $F1, $T2, $F2) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - list($DB1, $T1) = explode(".", $T1); list($DB2, $T2) = explode(".", $T2); $tables = $GLOBALS['dbi']->getTablesFull($DB1, $T1); - $type_T1 = $pmaString->strtoupper($tables[$T1]['ENGINE']); + $type_T1 = /*overload*/mb_strtoupper($tables[$T1]['ENGINE']); $tables = $GLOBALS['dbi']->getTablesFull($DB2, $T2); - $type_T2 = $pmaString->strtoupper($tables[$T2]['ENGINE']); + $type_T2 = /*overload*/mb_strtoupper($tables[$T2]['ENGINE']); $try_to_delete_internal_relation = false; diff --git a/libraries/relation.lib.php b/libraries/relation.lib.php index 867ce99717..7349ce0db3 100644 --- a/libraries/relation.lib.php +++ b/libraries/relation.lib.php @@ -646,9 +646,6 @@ function PMA_getForeigners($db, $table, $column = '', $source = 'both') $cfgRelation = PMA_getRelationsParam(); $foreign = array(); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - if ($cfgRelation['relwork'] && ($source == 'both' || $source == 'internal')) { $rel_query = ' SELECT `master_field`, @@ -659,7 +656,7 @@ function PMA_getForeigners($db, $table, $column = '', $source = 'both') . '.' . PMA_Util::backquote($cfgRelation['relation']) . ' WHERE `master_db` = \'' . PMA_Util::sqlAddSlashes($db) . '\' AND `master_table` = \'' . PMA_Util::sqlAddSlashes($table) . '\' '; - if ($pmaString->strlen($column)) { + if (/*overload*/mb_strlen($column)) { $rel_query .= ' AND `master_field` = ' . '\'' . PMA_Util::sqlAddSlashes($column) . '\''; } @@ -668,7 +665,7 @@ function PMA_getForeigners($db, $table, $column = '', $source = 'both') ); } - if (($source == 'both' || $source == 'foreign') && $pmaString->strlen($table)) { + if (($source == 'both' || $source == 'foreign') && /*overload*/mb_strlen($table)) { $showCreateTableQuery = 'SHOW CREATE TABLE ' . PMA_Util::backquote($db) . '.' . PMA_Util::backquote($table); @@ -684,9 +681,9 @@ function PMA_getForeigners($db, $table, $column = '', $source = 'both') /** * Emulating relations for some information_schema and data_dictionary tables */ - $isInformationSchema = $pmaString->strtolower($db) == 'information_schema'; + $isInformationSchema = /*overload*/mb_strtolower($db) == 'information_schema'; $is_data_dictionary = PMA_DRIZZLE - && $pmaString->strtolower($db) == 'data_dictionary'; + && /*overload*/mb_strtolower($db) == 'data_dictionary'; if (($isInformationSchema || $is_data_dictionary) && ($source == 'internal' || $source == 'both') ) { @@ -699,9 +696,9 @@ function PMA_getForeigners($db, $table, $column = '', $source = 'both') } if (isset($GLOBALS[$relations_key][$table])) { foreach ($GLOBALS[$relations_key][$table] as $field => $relations) { - if ((! $pmaString->strlen($column) || $column == $field) + if ((! /*overload*/mb_strlen($column) || $column == $field) && (! isset($foreign[$field]) - || ! $pmaString->strlen($foreign[$field])) + || ! /*overload*/mb_strlen($foreign[$field])) ) { $foreign[$field] = $relations; } @@ -884,7 +881,7 @@ function PMA_setDbComment($db, $comment = '') return false; } - if ($GLOBALS['PMA_String']->strlen($comment)) { + if (/*overload*/mb_strlen($comment)) { $upd_query = 'INSERT INTO ' . PMA_Util::backquote($cfgRelation['db']) . '.' . PMA_Util::backquote($cfgRelation['column_info']) @@ -929,7 +926,7 @@ function PMA_setHistory($db, $table, $username, $sqlquery) $maxCharactersInDisplayedSQL = $GLOBALS['cfg']['MaxCharactersInDisplayedSQL']; // Prevent to run this automatically on Footer class destroying in testsuite if (defined('TESTSUITE') - || $GLOBALS['PMA_String']->strlen($sqlquery) > $maxCharactersInDisplayedSQL + || /*overload*/mb_strlen($sqlquery) > $maxCharactersInDisplayedSQL ) { return; } @@ -1094,14 +1091,14 @@ function PMA_buildForeignDropdown($foreign, $data, $mode) } foreach ($foreign as $key => $value) { - if ($GLOBALS['PMA_String']->strlen($value) <= $GLOBALS['cfg']['LimitChars'] + if (/*overload*/mb_strlen($value) <= $GLOBALS['cfg']['LimitChars'] ) { $vtitle = ''; $value = htmlspecialchars($value); } else { $vtitle = htmlspecialchars($value); $value = htmlspecialchars( - $GLOBALS['PMA_String']->substr( + /*overload*/mb_substr( $value, 0, $GLOBALS['cfg']['LimitChars'] ) . '...' ); diff --git a/libraries/replication.inc.php b/libraries/replication.inc.php index 8b0c79934f..f4a1ec7e9e 100644 --- a/libraries/replication.inc.php +++ b/libraries/replication.inc.php @@ -204,11 +204,8 @@ function PMA_extractDbOrTable($string, $what = 'db') */ function PMA_Replication_Slave_control($action, $control = null, $link = null) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - - $action = $pmaString->strtoupper($action); - $control = $pmaString->strtoupper($control); + $action = /*overload*/mb_strtoupper($action); + $control = /*overload*/mb_strtoupper($control); if ($action != "START" && $action != "STOP") { return -1; diff --git a/libraries/replication_gui.lib.php b/libraries/replication_gui.lib.php index ba61687354..255cc4e322 100644 --- a/libraries/replication_gui.lib.php +++ b/libraries/replication_gui.lib.php @@ -675,11 +675,8 @@ function PMA_getHtmlForReplicationMasterAddSlaveuser() list($username_length, $hostname_length) = PMA_replicationGetUsernameHostnameLength(); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - if (isset($_REQUEST['username']) - && $pmaString->strlen($_REQUEST['username']) === 0 + && /*overload*/mb_strlen($_REQUEST['username']) === 0 ) { $GLOBALS['pred_username'] = 'any'; } @@ -704,9 +701,9 @@ function PMA_getHtmlForReplicationMasterAddSlaveuser() $thishost = str_replace( "'", '', - $pmaString->substr( + /*overload*/mb_substr( $_current_user, - ($pmaString->strrpos($_current_user, '@') + 1) + (/*overload*/mb_strrpos($_current_user, '@') + 1) ) ); if ($thishost == 'localhost' || $thishost == '127.0.0.1') { @@ -728,7 +725,7 @@ function PMA_getHtmlForReplicationMasterAddSlaveuser() // when we start editing a user, $GLOBALS['pred_hostname'] is not defined if (! isset($GLOBALS['pred_hostname']) && isset($_REQUEST['hostname'])) { - switch ($pmaString->strtolower($_REQUEST['hostname'])) { + switch (/*overload*/mb_strtolower($_REQUEST['hostname'])) { case 'localhost': case '127.0.0.1': $GLOBALS['pred_hostname'] = 'localhost'; diff --git a/libraries/rte/rte_events.lib.php b/libraries/rte/rte_events.lib.php index e09125949e..e41aabd685 100644 --- a/libraries/rte/rte_events.lib.php +++ b/libraries/rte/rte_events.lib.php @@ -202,7 +202,7 @@ function PMA_EVN_handleEditor() $response->addJSON( 'name', htmlspecialchars( - $GLOBALS['PMA_String']->strtoupper($_REQUEST['item_name']) + /*overload*/mb_strtoupper($_REQUEST['item_name']) ) ); $response->addJSON('new_row', PMA_EVN_getRowForList($event)); @@ -379,9 +379,6 @@ function PMA_EVN_getEditorForm($mode, $operation, $item) { global $db, $table, $event_status, $event_type, $event_interval; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Escape special characters $need_escape = array( 'item_original_name', @@ -422,7 +419,7 @@ function PMA_EVN_getEditorForm($mode, $operation, $item) } // Create the output $retval = ""; - $retval .= "<!-- START " . $pmaString->strtoupper($mode) . " EVENT FORM -->\n\n"; + $retval .= "<!-- START " . /*overload*/mb_strtoupper($mode) . " EVENT FORM -->\n\n"; $retval .= "<form class='rte_form' action='db_events.php' method='post'>\n"; $retval .= "<input name='{$mode}_item' type='hidden' value='1' />\n"; $retval .= $original_data; @@ -557,7 +554,7 @@ function PMA_EVN_getEditorForm($mode, $operation, $item) $retval .= "</fieldset>\n"; } $retval .= "</form>\n\n"; - $retval .= "<!-- END " . $pmaString->strtoupper($mode) . " EVENT FORM -->\n\n"; + $retval .= "<!-- END " . /*overload*/mb_strtoupper($mode) . " EVENT FORM -->\n\n"; return $retval; } // end PMA_EVN_getEditorForm() @@ -573,7 +570,7 @@ function PMA_EVN_getQueryFromRequest() $query = 'CREATE '; if (! empty($_REQUEST['item_definer'])) { - if ($GLOBALS['PMA_String']->strpos($_REQUEST['item_definer'], '@') !== false + if (/*overload*/mb_strpos($_REQUEST['item_definer'], '@') !== false ) { $arr = explode('@', $_REQUEST['item_definer']); $query .= 'DEFINER=' . PMA_Util::backquote($arr[0]); diff --git a/libraries/rte/rte_footer.lib.php b/libraries/rte/rte_footer.lib.php index f1d853aa24..113d2d47a2 100644 --- a/libraries/rte/rte_footer.lib.php +++ b/libraries/rte/rte_footer.lib.php @@ -22,9 +22,7 @@ function PMA_RTE_getFooterLinks($docu, $priv, $name) { global $db, $table, $url_query, $ajax_class; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - + $icon = 'b_' . /*overload*/mb_strtolower($name) . '_add.png'; $retval = ""; $retval .= "<!-- ADD " . $name . " FORM START -->\n"; $retval .= "<fieldset class='left'>\n"; @@ -32,14 +30,14 @@ function PMA_RTE_getFooterLinks($docu, $priv, $name) $retval .= " <div class='wrap'>\n"; if (PMA_Util::currentUserHasPrivilege($priv, $db, $table)) { $retval .= " <a {$ajax_class['add']} "; - $retval .= "href='db_" . $pmaString->strtolower($name) . "s.php"; - $retval .= "$url_query&add_item=1' "; + $retval .= "href='db_" . /*overload*/mb_strtolower($name) . "s.php"; + $retval .= "?$url_query&add_item=1' "; $retval .= "onclick='$.datepicker.initialized = false;'>"; - $icon = 'b_' . $pmaString->strtolower($name) . '_add.png'; + $icon = 'b_' . /*overload*/mb_strtolower($name) . '_add.png'; $retval .= PMA_Util::getIcon($icon); $retval .= PMA_RTE_getWord('add') . "</a>\n"; } else { - $icon = 'bd_' . $pmaString->strtolower($name) . '_add.png'; + $icon = 'bd_' . /*overload*/mb_strtolower($name) . '_add.png'; $retval .= PMA_Util::getIcon($icon); $retval .= PMA_RTE_getWord('add') . "\n"; } @@ -90,7 +88,7 @@ function PMA_EVN_getFooterLinks() 0, 1 ); - $es_state = $GLOBALS['PMA_String']->strtolower($es_state); + $es_state = /*overload*/mb_strtolower($es_state); $options = array( 0 => array( 'label' => __('OFF'), diff --git a/libraries/rte/rte_main.inc.php b/libraries/rte/rte_main.inc.php index 88f21894ce..d4b33ec734 100644 --- a/libraries/rte/rte_main.inc.php +++ b/libraries/rte/rte_main.inc.php @@ -35,7 +35,7 @@ if ($GLOBALS['is_ajax_request'] != true) { * to manually select the required database and * create the missing $url_query variable */ - if ($GLOBALS['PMA_String']->strlen($db)) { + if (/*overload*/mb_strlen($db)) { $GLOBALS['dbi']->selectDb($db); if (! isset($url_query)) { $url_query = PMA_URL_getCommon(array( diff --git a/libraries/rte/rte_routines.lib.php b/libraries/rte/rte_routines.lib.php index 2acfc6a939..ebd7f03da1 100644 --- a/libraries/rte/rte_routines.lib.php +++ b/libraries/rte/rte_routines.lib.php @@ -98,9 +98,6 @@ function PMA_RTN_parseOneParameter($value) { global $param_directions; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $retval = array(0 => '', 1 => '', 2 => '', @@ -109,10 +106,10 @@ function PMA_RTN_parseOneParameter($value) $parsed_param = PMA_SQP_parse($value); $pos = 0; if (in_array( - $pmaString->strtoupper($parsed_param[$pos]['data']), + /*overload*/mb_strtoupper($parsed_param[$pos]['data']), $param_directions )) { - $retval[0] = $pmaString->strtoupper($parsed_param[0]['data']); + $retval[0] = /*overload*/mb_strtoupper($parsed_param[0]['data']); $pos++; } if ($parsed_param[$pos]['type'] == 'alpha_identifier' @@ -130,7 +127,7 @@ function PMA_RTN_parseOneParameter($value) if (($parsed_param[$i]['type'] == 'alpha_columnType' || $parsed_param[$i]['type'] == 'alpha_functionName') && $depth == 0 ) { - $retval[2] = $pmaString->strtoupper($parsed_param[$i]['data']); + $retval[2] = /*overload*/mb_strtoupper($parsed_param[$i]['data']); } else if ($parsed_param[$i]['type'] == 'punct_bracket_open_round' && $depth == 0 ) { @@ -142,18 +139,18 @@ function PMA_RTN_parseOneParameter($value) } else if ($depth == 1) { $param_length .= $parsed_param[$i]['data']; } else if ($parsed_param[$i]['type'] == 'alpha_reservedWord' - && $pmaString->strtoupper($parsed_param[$i]['data']) == 'CHARSET' + && /*overload*/mb_strtoupper($parsed_param[$i]['data']) == 'CHARSET' && $depth == 0 ) { if ($parsed_param[$i+1]['type'] == 'alpha_charset' || $parsed_param[$i+1]['type'] == 'alpha_identifier' ) { - $param_opts[] = $pmaString->strtolower($parsed_param[$i+1]['data']); + $param_opts[] = /*overload*/mb_strtolower($parsed_param[$i+1]['data']); } } else if ($parsed_param[$i]['type'] == 'alpha_columnAttrib' && $depth == 0 ) { - $param_opts[] = $pmaString->strtoupper($parsed_param[$i]['data']); + $param_opts[] = /*overload*/mb_strtoupper($parsed_param[$i]['data']); } } $retval[3] = $param_length; @@ -248,9 +245,6 @@ function PMA_RTN_parseAllParameters($parsed_query, $routine_type) */ function PMA_RTN_parseRoutineDefiner($parsed_query) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $retval = ''; $fetching = false; for ($i=0; $i<$parsed_query['len']; $i++) { @@ -260,7 +254,7 @@ function PMA_RTN_parseRoutineDefiner($parsed_query) $fetching = true; } else if ($fetching == true && $parsed_query[$i]['type'] != 'quote_backtick' - && $pmaString->substr($parsed_query[$i]['type'], 0, 5) != 'punct' + && /*overload*/mb_substr($parsed_query[$i]['type'], 0, 5) != 'punct' ) { break; } else if ($fetching == true @@ -418,7 +412,7 @@ function PMA_RTN_handleEditor() $response->addJSON( 'name', htmlspecialchars( - $GLOBALS['PMA_String']->strtoupper($_REQUEST['item_name']) + /*overload*/mb_strtoupper($_REQUEST['item_name']) ) ); $response->addJSON('new_row', PMA_RTN_getRowForList($routine)); @@ -596,12 +590,9 @@ function PMA_RTN_getDataFromRequest() $retval['item_returntype'] = $_REQUEST['item_returntype']; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $retval['item_isdeterministic'] = ''; if (isset($_REQUEST['item_isdeterministic']) - && $pmaString->strtolower($_REQUEST['item_isdeterministic']) == 'on' + && /*overload*/mb_strtolower($_REQUEST['item_isdeterministic']) == 'on' ) { $retval['item_isdeterministic'] = " checked='checked'"; } @@ -691,9 +682,7 @@ function PMA_RTN_getDataFromName($name, $type, $all = true) $retval['item_returnopts_num'] = ''; $retval['item_returnopts_text'] = ''; if (! empty($routine['DTD_IDENTIFIER'])) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - if ($pmaString->strlen($routine['DTD_IDENTIFIER']) > 63) { + if (/*overload*/mb_strlen($routine['DTD_IDENTIFIER']) > 63) { // If the DTD_IDENTIFIER string from INFORMATION_SCHEMA is // at least 64 characters, then it may actually have been // chopped because that column is a varchar(64), so we will @@ -703,7 +692,7 @@ function PMA_RTN_getDataFromName($name, $type, $all = true) $fetching = false; for ($i=0; $i<$parsed_query['len']; $i++) { if ($parsed_query[$i]['type'] == 'alpha_reservedWord' - && $pmaString->strtoupper($parsed_query[$i]['data']) == 'RETURNS' + && /*overload*/mb_strtoupper($parsed_query[$i]['data']) == 'RETURNS' ) { $fetching = true; } else if ($fetching == true @@ -715,7 +704,7 @@ function PMA_RTN_getDataFromName($name, $type, $all = true) // characters. We can safely assume that the return // datatype is either ENUM or SET, so we only look // for CHARSET. - $word = $pmaString->strtoupper($parsed_query[$i]['data']); + $word = /*overload*/mb_strtoupper($parsed_query[$i]['data']); if ($word == 'CHARSET' && ($parsed_query[$i+1]['type'] == 'alpha_charset' || $parsed_query[$i+1]['type'] == 'alpha_identifier') @@ -958,12 +947,9 @@ function PMA_RTN_getEditorForm($mode, $operation, $routine) $isfunction_select = " selected='selected'"; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Create the output $retval = ""; - $retval .= "<!-- START " . $pmaString->strtoupper($mode) + $retval .= "<!-- START " . /*overload*/mb_strtoupper($mode) . " ROUTINE FORM -->\n\n"; $retval .= "<form class='rte_form' action='db_routines.php' method='post'>\n"; $retval .= "<input name='{$mode}_item' type='hidden' value='1' />\n"; @@ -1123,7 +1109,7 @@ function PMA_RTN_getEditorForm($mode, $operation, $routine) $retval .= "</fieldset>"; } $retval .= "</form>"; - $retval .= "<!-- END " . $pmaString->strtoupper($mode) . " ROUTINE FORM -->"; + $retval .= "<!-- END " . /*overload*/mb_strtoupper($mode) . " ROUTINE FORM -->"; return $retval; } // end PMA_RTN_getEditorForm() @@ -1140,12 +1126,9 @@ function PMA_RTN_getQueryFromRequest() $_REQUEST['item_type'] = isset($_REQUEST['item_type']) ? $_REQUEST['item_type'] : ''; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $query = 'CREATE '; if (! empty($_REQUEST['item_definer'])) { - if ($pmaString->strpos($_REQUEST['item_definer'], '@') !== false) { + if (/*overload*/mb_strpos($_REQUEST['item_definer'], '@') !== false) { $arr = explode('@', $_REQUEST['item_definer']); $query .= 'DEFINER=' . PMA_Util::backquote($arr[0]); $query .= '@' . PMA_Util::backquote($arr[1]) . ' '; @@ -1231,7 +1214,7 @@ function PMA_RTN_getQueryFromRequest() if (! empty($_REQUEST['item_param_opts_text'][$i])) { if ($PMA_Types->getTypeClass($item_param_type[$i]) == 'CHAR') { $params .= ' CHARSET ' - . $pmaString->strtolower( + . /*overload*/mb_strtolower( $_REQUEST['item_param_opts_text'][$i] ); } @@ -1239,7 +1222,7 @@ function PMA_RTN_getQueryFromRequest() if (! empty($_REQUEST['item_param_opts_num'][$i])) { if ($PMA_Types->getTypeClass($item_param_type[$i]) == 'NUMBER') { $params .= ' ' - . $pmaString->strtoupper( + . /*overload*/mb_strtoupper( $_REQUEST['item_param_opts_num'][$i] ); } @@ -1295,13 +1278,13 @@ function PMA_RTN_getQueryFromRequest() if (! empty($_REQUEST['item_returnopts_text'])) { if ($PMA_Types->getTypeClass($item_returntype) == 'CHAR') { $query .= ' CHARSET ' - . $pmaString->strtolower($_REQUEST['item_returnopts_text']); + . /*overload*/mb_strtolower($_REQUEST['item_returnopts_text']); } } if (! empty($_REQUEST['item_returnopts_num'])) { if ($PMA_Types->getTypeClass($item_returntype) == 'NUMBER') { $query .= ' ' - . $pmaString->strtoupper($_REQUEST['item_returnopts_num']); + . /*overload*/mb_strtoupper($_REQUEST['item_returnopts_num']); } } $query .= ' '; @@ -1606,9 +1589,6 @@ function PMA_RTN_getExecuteForm($routine) { global $db, $cfg; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Escape special characters $routine['item_name'] = htmlentities($routine['item_name'], ENT_QUOTES); for ($i=0; $i<$routine['item_num_params']; $i++) { @@ -1664,14 +1644,14 @@ function PMA_RTN_getExecuteForm($routine) if (stristr($routine['item_param_type'][$i], 'enum') || stristr($routine['item_param_type'][$i], 'set') || in_array( - $pmaString->strtolower($routine['item_param_type'][$i]), + /*overload*/mb_strtolower($routine['item_param_type'][$i]), $no_support_types ) ) { $retval .= "--\n"; } else { $field = array( - 'True_Type' => $pmaString->strtolower( + 'True_Type' => /*overload*/mb_strtolower( $routine['item_param_type'][$i] ), 'Type' => '', @@ -1719,7 +1699,7 @@ function PMA_RTN_getExecuteForm($routine) } } } else if (in_array( - $pmaString->strtolower($routine['item_param_type'][$i]), + /*overload*/mb_strtolower($routine['item_param_type'][$i]), $no_support_types )) { $retval .= "\n"; diff --git a/libraries/rte/rte_triggers.lib.php b/libraries/rte/rte_triggers.lib.php index 64f402c365..3898fc0e48 100644 --- a/libraries/rte/rte_triggers.lib.php +++ b/libraries/rte/rte_triggers.lib.php @@ -178,7 +178,7 @@ function PMA_TRI_handleEditor() $response->addJSON( 'name', htmlspecialchars( - $GLOBALS['PMA_String']->strtoupper( + /*overload*/mb_strtoupper( $_REQUEST['item_name'] ) ) @@ -324,9 +324,6 @@ function PMA_TRI_getEditorForm($mode, $item) { global $db, $table, $event_manipulations, $action_timings; - /** @var PMA_String $pmaStr */ - $pmaStr = $GLOBALS['PMA_String']; - // Escape special characters $need_escape = array( 'item_original_name', @@ -349,7 +346,7 @@ function PMA_TRI_getEditorForm($mode, $item) // Create the output $retval = ""; - $retval .= "<!-- START " . $pmaStr->strtoupper($mode) . " TRIGGER FORM -->\n\n"; + $retval .= "<!-- START " . /*overload*/mb_strtoupper($mode) . " TRIGGER FORM -->\n\n"; $retval .= "<form class='rte_form' action='db_triggers.php' method='post'>\n"; $retval .= "<input name='{$mode}_item' type='hidden' value='1' />\n"; $retval .= $original_data; @@ -432,7 +429,7 @@ function PMA_TRI_getEditorForm($mode, $item) $retval .= "</fieldset>\n"; } $retval .= "</form>\n\n"; - $retval .= "<!-- END " . $pmaStr->strtoupper($mode) . " TRIGGER FORM -->\n\n"; + $retval .= "<!-- END " . /*overload*/mb_strtoupper($mode) . " TRIGGER FORM -->\n\n"; return $retval; } // end PMA_TRI_getEditorForm() @@ -448,7 +445,7 @@ function PMA_TRI_getQueryFromRequest() $query = 'CREATE '; if (! empty($_REQUEST['item_definer'])) { - if ($GLOBALS['PMA_String']->strpos($_REQUEST['item_definer'], '@') !== false + if (/*overload*/mb_strpos($_REQUEST['item_definer'], '@') !== false ) { $arr = explode('@', $_REQUEST['item_definer']); $query .= 'DEFINER=' . PMA_Util::backquote($arr[0]); diff --git a/libraries/sanitizing.lib.php b/libraries/sanitizing.lib.php index 0b14de8ab4..ff7c12437d 100644 --- a/libraries/sanitizing.lib.php +++ b/libraries/sanitizing.lib.php @@ -29,10 +29,8 @@ function PMA_checkLink($url) $valid_starts[] = '?page=form&'; $valid_starts[] = '?page=servers&'; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; foreach ($valid_starts as $val) { - if ($pmaString->substr($url, 0, $pmaString->strlen($val)) == $val) { + if (/*overload*/mb_substr($url, 0, /*overload*/mb_strlen($val)) == $val) { return true; } } @@ -64,7 +62,7 @@ function PMA_replaceBBLink($found) } /* Construct url */ - if ($GLOBALS['PMA_String']->substr($found[1], 0, 4) == 'http') { + if (substr($found[1], 0, 4) == 'http') { $url = PMA_linkURL($found[1]); } else { $url = $found[1]; diff --git a/libraries/select_lang.lib.php b/libraries/select_lang.lib.php index 23d6e0ff19..99508a5f69 100644 --- a/libraries/select_lang.lib.php +++ b/libraries/select_lang.lib.php @@ -18,11 +18,8 @@ if (! defined('PHPMYADMIN')) { */ function PMA_languageName($tmplang) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $lang_name = ucfirst( - $pmaString->substr($pmaString->strrchr($tmplang[0], '|'), 1) + /*overload*/mb_substr(/*overload*/mb_strrchr($tmplang[0], '|'), 1) ); // Include native name if non empty @@ -90,7 +87,7 @@ function PMA_langCheck() // prevent XSS $accepted_languages = PMA_getenv('HTTP_ACCEPT_LANGUAGE'); if ($accepted_languages - && false === $GLOBALS['PMA_String']->strpos($accepted_languages, '<') + && false === /*overload*/mb_strpos($accepted_languages, '<') ) { foreach (explode(',', $accepted_languages) as $lang) { if (PMA_langDetect($lang, 1)) { @@ -160,7 +157,7 @@ function PMA_langDetect($str, $envType) // $envType = 1 for the 'HTTP_ACCEPT_LANGUAGE' environment variable, // 2 for the 'HTTP_USER_AGENT' one $expr = $value[0]; - if ($GLOBALS['PMA_String']->strpos($expr, '[-_]') === false) { + if (/*overload*/mb_strpos($expr, '[-_]') === false) { $expr = str_replace('|', '([-_][[:alpha:]]{2,3})?|', $expr); } $pattern1 = '/^(' . addcslashes($expr, '/') . ')(;q=[0-9]\\.[0-9])?$/i'; diff --git a/libraries/server_databases.lib.php b/libraries/server_databases.lib.php index 10ba96d891..dfd9d910d0 100644 --- a/libraries/server_databases.lib.php +++ b/libraries/server_databases.lib.php @@ -439,7 +439,7 @@ function PMA_getListForSortDatabase() } if (isset($_REQUEST['sort_order']) - && $GLOBALS['PMA_String']->strtolower($_REQUEST['sort_order']) == 'desc' + && /*overload*/mb_strtolower($_REQUEST['sort_order']) == 'desc' ) { $sort_order = 'desc'; } else { diff --git a/libraries/server_plugins.lib.php b/libraries/server_plugins.lib.php index 7661b9ee27..7c978f6c3c 100644 --- a/libraries/server_plugins.lib.php +++ b/libraries/server_plugins.lib.php @@ -49,12 +49,9 @@ function PMA_getPluginTab($plugins) $html = '<div id="plugins_plugins">'; $html .= '<div id="sectionlinks">'; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - foreach ($plugins as $plugin_type => $plugin_list) { $key = 'plugins-' - . preg_replace('/[^a-z]/', '', $pmaString->strtolower($plugin_type)); + . preg_replace('/[^a-z]/', '', /*overload*/mb_strtolower($plugin_type)); $html .= '<a href="#' . $key . '">' . htmlspecialchars($plugin_type) . '</a>' . "\n"; } @@ -64,7 +61,7 @@ function PMA_getPluginTab($plugins) foreach ($plugins as $plugin_type => $plugin_list) { $key = 'plugins-' - . preg_replace('/[^a-z]/', '', $pmaString->strtolower($plugin_type)); + . preg_replace('/[^a-z]/', '', /*overload*/mb_strtolower($plugin_type)); sort($plugin_list); $html .= '<table class="data_full_width" id="' . $key . '">'; diff --git a/libraries/server_privileges.lib.php b/libraries/server_privileges.lib.php index 1ad6add170..324054ac91 100644 --- a/libraries/server_privileges.lib.php +++ b/libraries/server_privileges.lib.php @@ -52,12 +52,10 @@ function PMA_getHtmlForUserGroupDialog($username, $is_menuswork) */ function PMA_wildcardEscapeForGrant($dbname, $tablename) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - if (!$pmaString->strlen($dbname)) { + if (!/*overload*/mb_strlen($dbname)) { $db_and_table = '*.*'; } else { - if ($pmaString->strlen($tablename)) { + if (/*overload*/mb_strlen($tablename)) { $db_and_table = PMA_Util::backquote( PMA_Util::unescapeMysqlWildcards($dbname) ) @@ -87,7 +85,7 @@ function PMA_rangeOfUsers($initial = '') $ret = " WHERE `User` LIKE '" . PMA_Util::sqlAddSlashes($initial, true) . "%'" . " OR `User` LIKE '" - . PMA_Util::sqlAddSlashes($GLOBALS['PMA_String']->strtolower($initial), true) + . PMA_Util::sqlAddSlashes(/*overload*/mb_strtolower($initial), true) . "%'"; return $ret; } // end function @@ -128,16 +126,13 @@ function PMA_fillInTablePrivileges(&$row) // the view for Show is spelled with lowercase v // and there is a space between the words - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $av_grants = explode( '\',\'', - $pmaString->substr( + /*overload*/mb_substr( $row1['Type'], - $pmaString->strpos($row1['Type'], '(') + 2, - $pmaString->strpos($row1['Type'], ')') - - $pmaString->strpos($row1['Type'], '(') - 3 + /*overload*/mb_strpos($row1['Type'], '(') + 2, + /*overload*/mb_strpos($row1['Type'], ')') + - /*overload*/mb_strpos($row1['Type'], '(') - 3 ) ); @@ -649,7 +644,7 @@ function PMA_getHtmlToDisplayPrivilegesTable($db = '*', } $res = $GLOBALS['dbi']->query($sql_query); while ($row1 = $GLOBALS['dbi']->fetchRow($res)) { - if ($GLOBALS['PMA_String']->substr($row1[0], 0, 4) == 'max_') { + if (mb_substr($row1[0], 0, 4) == 'max_') { $row[$row1[0]] = 0; } else { $row[$row1[0]] = 'N'; @@ -911,12 +906,9 @@ function PMA_getHtmlForAttachedPrivilegesToTableSpecificColumn($columns, $row) function PMA_getHtmlForNotAttachedPrivilegesToTableSpecificColumn($row) { $html_output = ''; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; foreach ($row as $current_grant => $current_grant_value) { - $grant_type = $pmaString - ->substr($current_grant, 0, ($pmaString->strlen($current_grant) - 5)); + $grant_type = substr($current_grant, 0, -5); if (in_array($grant_type, array('Select', 'Insert', 'Update', 'References')) ) { continue; @@ -943,24 +935,24 @@ function PMA_getHtmlForNotAttachedPrivilegesToTableSpecificColumn($row) . 'title="'; $html_output .= (isset($GLOBALS[ - 'strPrivDesc' . $pmaString->substr( + 'strPrivDesc' . /*overload*/mb_substr( $tmp_current_grant, 0, - ($pmaString->strlen($tmp_current_grant) - 5) + (/*overload*/mb_strlen($tmp_current_grant) - 5) ) ] ) ? $GLOBALS[ - 'strPrivDesc' . $pmaString->substr( + 'strPrivDesc' . /*overload*/mb_substr( $tmp_current_grant, 0, - ($pmaString->strlen($tmp_current_grant) - 5) + (/*overload*/mb_strlen($tmp_current_grant) - 5) ) ] : $GLOBALS[ - 'strPrivDesc' . $pmaString->substr( + 'strPrivDesc' . /*overload*/mb_substr( $tmp_current_grant, 0, - ($pmaString->strlen($tmp_current_grant) - 5) + (/*overload*/mb_strlen($tmp_current_grant) - 5) ) . 'Tbl' ] ) @@ -969,33 +961,33 @@ function PMA_getHtmlForNotAttachedPrivilegesToTableSpecificColumn($row) $html_output .= '<label for="checkbox_' . $current_grant . '"><code><dfn title="' . (isset($GLOBALS[ - 'strPrivDesc' . $pmaString->substr( + 'strPrivDesc' . /*overload*/mb_substr( $tmp_current_grant, 0, - ($pmaString->strlen($tmp_current_grant) - 5) + -5 ) ]) ? $GLOBALS[ - 'strPrivDesc' . $pmaString->substr( + 'strPrivDesc' . /*overload*/mb_substr( $tmp_current_grant, 0, - ($pmaString->strlen($tmp_current_grant) - 5) + -5 ) ] : $GLOBALS[ - 'strPrivDesc' . $pmaString->substr( + 'strPrivDesc' . /*overload*/mb_substr( $tmp_current_grant, 0, - ($pmaString->strlen($tmp_current_grant) - 5) + -5 ) . 'Tbl' ] ) . '">' - . $pmaString->strtoupper( - $pmaString->substr( + . /*overload*/mb_strtoupper( + /*overload*/mb_substr( $current_grant, 0, - $pmaString->strlen($current_grant) - 5 + -5 ) ) . '</dfn></code></label>' . "\n" @@ -1298,10 +1290,8 @@ function PMA_getHtmlForLoginInformationFields($mode = 'new') { list($username_length, $hostname_length) = PMA_getUsernameAndHostnameLength(); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; if (isset($GLOBALS['username']) - && $pmaString->strlen($GLOBALS['username']) === 0 + && /*overload*/mb_strlen($GLOBALS['username']) === 0 ) { $GLOBALS['pred_username'] = 'any'; } @@ -1386,9 +1376,9 @@ function PMA_getHtmlForLoginInformationFields($mode = 'new') $thishost = str_replace( "'", '', - $pmaString->substr( + /*overload*/mb_substr( $_current_user, - ($pmaString->strrpos($_current_user, '@') + 1) + (/*overload*/mb_strrpos($_current_user, '@') + 1) ) ); if ($thishost == 'localhost' || $thishost == '127.0.0.1') { @@ -1419,7 +1409,7 @@ function PMA_getHtmlForLoginInformationFields($mode = 'new') // when we start editing a user, $GLOBALS['pred_hostname'] is not defined if (! isset($GLOBALS['pred_hostname']) && isset($GLOBALS['hostname'])) { - switch ($pmaString->strtolower($GLOBALS['hostname'])) { + switch (/*overload*/mb_strtolower($GLOBALS['hostname'])) { case 'localhost': case '127.0.0.1': $GLOBALS['pred_hostname'] = 'localhost'; @@ -2352,11 +2342,8 @@ function PMA_getExtraDataForAjaxBehavior( $user_group_count = PMA_getUserGroupCount(); } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $extra_data = array(); - if ($pmaString->strlen($sql_query)) { + if (/*overload*/mb_strlen($sql_query)) { $extra_data['sql_query'] = PMA_Util::getMessage(null, $sql_query); } @@ -2438,8 +2425,7 @@ function PMA_getExtraDataForAjaxBehavior( * Generate the string for this alphabet's initial, to update the user * pagination */ - $new_user_initial = $pmaString - ->strtoupper($pmaString->substr($username, 0, 1)); + $new_user_initial = /*overload*/mb_strtoupper(/*overload*/mb_substr($username, 0, 1)); $newUserInitialString = '<a href="server_privileges.php' . PMA_URL_getCommon(array('initial' => $new_user_initial)) . '">' . $new_user_initial . '</a>'; @@ -2557,7 +2543,7 @@ function PMA_getLinkToDbAndTable($url_dbname, $dbname, $tablename) ) . "</a> ]\n"; - if ($GLOBALS['PMA_String']->strlen($tablename)) { + if (/*overload*/mb_strlen($tablename)) { $html_output .= ' [ ' . __('Table') . ' <a href="' . $GLOBALS['cfg']['DefaultTabTable'] . PMA_URL_getCommon( @@ -2590,9 +2576,7 @@ function PMA_getLinkToDbAndTable($url_dbname, $dbname, $tablename) */ function PMA_getUserSpecificRights($tables, $user_host_condition, $dbname) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - if (!$pmaString->strlen($dbname)) { + if (!/*overload*/mb_strlen($dbname)) { $tables_to_search_for_users = array( 'tables_priv', 'columns_priv', ); @@ -2633,7 +2617,7 @@ function PMA_getUserSpecificRights($tables, $user_host_condition, $dbname) while ($db_rights_row = $GLOBALS['dbi']->fetchAssoc($db_rights_result)) { $db_rights_row = array_merge($user_defaults, $db_rights_row); - if (!$pmaString->strlen($dbname)) { + if (!/*overload*/mb_strlen($dbname)) { // only Db names in the table `mysql`.`db` uses wildcards // as we are in the db specific rights display we want // all db names escaped, also from other sources @@ -2646,7 +2630,7 @@ function PMA_getUserSpecificRights($tables, $user_host_condition, $dbname) $GLOBALS['dbi']->freeResult($db_rights_result); - if (!$pmaString->strlen($dbname)) { + if (!/*overload*/mb_strlen($dbname)) { $sql_query = 'SELECT * FROM `mysql`.`db`' . $user_host_condition . ' ORDER BY `Db` ASC'; } else { @@ -2668,7 +2652,7 @@ function PMA_getUserSpecificRights($tables, $user_host_condition, $dbname) } else { $db_rights[$row[$dbOrTableName]] = $row; } - if (!$pmaString->strlen($dbname)) { + if (!/*overload*/mb_strlen($dbname)) { // there are db specific rights for this user // so we can drop this db rights $db_rights[$row['Db']]['can_delete'] = true; @@ -2699,20 +2683,17 @@ function PMA_getHtmlForUserRights($db_rights, $dbname, . '<td colspan="6"><center><i>' . __('None') . '</i></center></td>' . "\n" . '</tr>' . "\n"; } else { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $odd_row = true; //while ($row = $GLOBALS['dbi']->fetchAssoc($res)) { foreach ($db_rights as $row) { - $found_rows[] = (!$pmaString->strlen($dbname)) + $found_rows[] = (!/*overload*/mb_strlen($dbname)) ? $row['Db'] : $row['Table_name']; $html_output .= '<tr class="' . ($odd_row ? 'odd' : 'even') . '">' . "\n" . '<td>' . htmlspecialchars( - (!$pmaString->strlen($dbname)) ? $row['Db'] : $row['Table_name'] + (!/*overload*/mb_strlen($dbname)) ? $row['Db'] : $row['Table_name'] ) . '</td>' . "\n" . '<td><code>' . "\n" @@ -2723,8 +2704,8 @@ function PMA_getHtmlForUserRights($db_rights, $dbname, ) . "\n" . '</code></td>' . "\n" . '<td>' - . ((((!$pmaString->strlen($dbname)) && $row['Grant_priv'] == 'Y') - || ($pmaString->strlen($dbname) + . ((((!/*overload*/mb_strlen($dbname)) && $row['Grant_priv'] == 'Y') + || (/*overload*/mb_strlen($dbname) && in_array('Grant', explode(',', $row['Table_priv'])))) ? __('Yes') : __('No')) @@ -2741,21 +2722,21 @@ function PMA_getHtmlForUserRights($db_rights, $dbname, 'edit', $username, $hostname, - (!$pmaString->strlen($dbname)) ? $row['Db'] : $dbname, - (!$pmaString->strlen($dbname)) ? '' : $row['Table_name'] + (!/*overload*/mb_strlen($dbname)) ? $row['Db'] : $dbname, + (!/*overload*/mb_strlen($dbname)) ? '' : $row['Table_name'] ); $html_output .= '</td>' . "\n" . ' <td>'; if (! empty($row['can_delete']) || isset($row['Table_name']) - && $pmaString->strlen($row['Table_name']) + && /*overload*/mb_strlen($row['Table_name']) ) { $html_output .= PMA_getUserLink( 'revoke', $username, $hostname, - (! $pmaString->strlen($dbname)) ? $row['Db'] : $dbname, - (! $pmaString->strlen($dbname)) ? '' : $row['Table_name'] + (! /*overload*/mb_strlen($dbname)) ? $row['Db'] : $dbname, + (! /*overload*/mb_strlen($dbname)) ? '' : $row['Table_name'] ); } $html_output .= '</td>' . "\n" @@ -2778,8 +2759,6 @@ function PMA_getHtmlForUserRights($db_rights, $dbname, function PMA_getHtmlForAllTableSpecificRights( $username, $hostname, $dbname ) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; // table header $html_output = PMA_URL_getHiddenInputs('', '') . '<input type="hidden" name="username" ' @@ -2788,12 +2767,12 @@ function PMA_getHtmlForAllTableSpecificRights( . 'value="' . htmlspecialchars($hostname) . '" />' . "\n" . '<fieldset>' . "\n" . '<legend data-submenu-label="' - . (!$pmaString->strlen($dbname) + . (!/*overload*/mb_strlen($dbname) ? __('Database') : __('Table') ) . '">' - . (!$pmaString->strlen($dbname) + . (!/*overload*/mb_strlen($dbname) ? __('Database-specific privileges') : __('Table-specific privileges') ) @@ -2801,12 +2780,12 @@ function PMA_getHtmlForAllTableSpecificRights( . '<table class="data">' . "\n" . '<thead>' . "\n" . '<tr><th>' - . (!$pmaString->strlen($dbname) ? __('Database') : __('Table')) + . (!/*overload*/mb_strlen($dbname) ? __('Database') : __('Table')) . '</th>' . "\n" . '<th>' . __('Privileges') . '</th>' . "\n" . '<th>' . __('Grant') . '</th>' . "\n" . '<th>' - . (!$pmaString->strlen($dbname) + . (!/*overload*/mb_strlen($dbname) ? __('Table-specific privileges') : __('Column-specific privileges') ) @@ -3194,13 +3173,10 @@ function PMA_getFieldsetForAddDeleteUser() */ function PMA_getHtmlForInitials($array_initials) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // initialize to false the letters A-Z for ($letter_counter = 1; $letter_counter < 27; $letter_counter++) { - if (! isset($array_initials[$pmaString->chr($letter_counter + 64)])) { - $array_initials[$pmaString->chr($letter_counter + 64)] = false; + if (! isset($array_initials[/*overload*/mb_chr($letter_counter + 64)])) { + $array_initials[/*overload*/mb_chr($letter_counter + 64)] = false; } } @@ -3368,11 +3344,9 @@ function PMA_updatePrivileges($username, $hostname, $tablename, $dbname) $sql_query1 = ''; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; // Should not do a GRANT USAGE for a table-specific privilege, it // causes problems later (cannot revoke it) - if (! ($pmaString->strlen($tablename) + if (! (/*overload*/mb_strlen($tablename) && 'USAGE' == implode('', PMA_extractPrivInfo())) ) { $sql_query2 = 'GRANT ' . join(', ', PMA_extractPrivInfo()) @@ -3381,7 +3355,7 @@ function PMA_updatePrivileges($username, $hostname, $tablename, $dbname) . PMA_Util::sqlAddSlashes($hostname) . '\''; if ((isset($_POST['Grant_priv']) && $_POST['Grant_priv'] == 'Y') - || (! $pmaString->strlen($dbname) + || (! /*overload*/mb_strlen($dbname) && (isset($_POST['max_questions']) || isset($_POST['max_connections']) || isset($_POST['max_updates']) || isset($_POST['max_user_connections']))) @@ -3562,9 +3536,6 @@ function PMA_addUser( $queries_for_display = null; $sql_query = null; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - if (isset($_REQUEST['adduser_submit']) || isset($_REQUEST['change_copy'])) { $sql_query = ''; if ($_POST['pred_username'] == 'any') { @@ -3582,9 +3553,9 @@ function PMA_addUser( break; case 'thishost': $_user_name = $GLOBALS['dbi']->fetchValue('SELECT USER()'); - $hostname = $pmaString->substr( + $hostname = /*overload*/mb_substr( $_user_name, - ($pmaString->strrpos($_user_name, '@') + 1) + (/*overload*/mb_strrpos($_user_name, '@') + 1) ); unset($_user_name); break; @@ -3775,15 +3746,12 @@ function PMA_getListForExportUserDefinition($username, $hostname) // export privileges for selected users $title = __('Privileges'); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - foreach ($_REQUEST['selected_usr'] as $export_user) { - $export_username = $pmaString->substr( - $export_user, 0, $pmaString->strpos($export_user, '&') + $export_username = /*overload*/mb_substr( + $export_user, 0, /*overload*/mb_strpos($export_user, '&') ); - $export_hostname = $pmaString->substr( - $export_user, $pmaString->strrpos($export_user, ';') + 1 + $export_hostname = /*overload*/mb_substr( + $export_user, /*overload*/mb_strrpos($export_user, ';') + 1 ); $export .= '# ' . sprintf( @@ -4092,11 +4060,9 @@ function PMA_getHtmlForUserProperties($dbname_is_wildcard,$url_dbname, 'username' => $username, 'hostname' => $hostname, ); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - if (! is_array($dbname) && $pmaString->strlen($dbname)) { + if (! is_array($dbname) && /*overload*/mb_strlen($dbname)) { $_params['dbname'] = $dbname; - if ($pmaString->strlen($tablename)) { + if (/*overload*/mb_strlen($tablename)) { $_params['tablename'] = $tablename; } } else { @@ -4114,7 +4080,7 @@ function PMA_getHtmlForUserProperties($dbname_is_wildcard,$url_dbname, $html_output .= '</form>' . "\n"; - if (! is_array($dbname) && ! $pmaString->strlen($tablename) + if (! is_array($dbname) && ! /*overload*/mb_strlen($tablename) && empty($dbname_is_wildcard) ) { @@ -4132,7 +4098,7 @@ function PMA_getHtmlForUserProperties($dbname_is_wildcard,$url_dbname, ); $html_output .= $html_rightsTable; - if (! $pmaString->strlen($dbname)) { + if (! /*overload*/mb_strlen($dbname)) { // no database name was given, display select db $html_output .= PMA_getHtmlForSelectDbInEditPrivs($found_rows); @@ -4148,14 +4114,14 @@ function PMA_getHtmlForUserProperties($dbname_is_wildcard,$url_dbname, } // Provide a line with links to the relevant database and table - if (! is_array($dbname) && $pmaString->strlen($dbname) + if (! is_array($dbname) && /*overload*/mb_strlen($dbname) && empty($dbname_is_wildcard) ) { $html_output .= PMA_getLinkToDbAndTable($url_dbname, $dbname, $tablename); } - if (! is_array($dbname) && ! $pmaString->strlen($dbname) + if (! is_array($dbname) && ! /*overload*/mb_strlen($dbname) && ! $user_does_not_exists ) { //change login information diff --git a/libraries/server_status_monitor.lib.php b/libraries/server_status_monitor.lib.php index 1922cd7026..c955fe8289 100644 --- a/libraries/server_status_monitor.lib.php +++ b/libraries/server_status_monitor.lib.php @@ -576,14 +576,12 @@ function PMA_getJsonForLogDataTypeSlow($start, $end) $return = array('rows' => array(), 'sum' => array()); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; while ($row = $GLOBALS['dbi']->fetchAssoc($result)) { - $type = $pmaString->strtolower( - $pmaString->substr( + $type = /*overload*/mb_strtolower( + /*overload*/mb_substr( $row['sql_text'], 0, - $pmaString->strpos($row['sql_text'], ' ') + /*overload*/mb_strpos($row['sql_text'], ' ') ) ); @@ -591,14 +589,14 @@ function PMA_getJsonForLogDataTypeSlow($start, $end) case 'insert': case 'update': //Cut off big inserts and updates, but append byte count instead - if ($pmaString->strlen($row['sql_text']) > 220) { + if (/*overload*/mb_strlen($row['sql_text']) > 220) { $implode_sql_text = implode( ' ', PMA_Util::formatByteDown( - $pmaString->strlen($row['sql_text']), 2, 2 + /*overload*/mb_strlen($row['sql_text']), 2, 2 ) ); - $row['sql_text'] = $pmaString->substr($row['sql_text'], 0, 200) + $row['sql_text'] = /*overload*/mb_substr($row['sql_text'], 0, 200) . '... [' . $implode_sql_text . ']'; } break; @@ -653,11 +651,9 @@ function PMA_getJsonForLogDataTypeGeneral($start, $end) $removeVars = isset($_REQUEST['removeVariables']) && $_REQUEST['removeVariables']; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; while ($row = $GLOBALS['dbi']->fetchAssoc($result)) { preg_match('/^(\w+)\s/', $row['argument'], $match); - $type = $pmaString->strtolower($match[1]); + $type = /*overload*/mb_strtolower($match[1]); if (! isset($return['sum'][$type])) { $return['sum'][$type] = 0; @@ -684,7 +680,7 @@ function PMA_getJsonForLogDataTypeGeneral($start, $end) $temp = $return['rows'][$insertTablesFirst]['argument']; $return['rows'][$insertTablesFirst]['argument'] .= PMA_getSuspensionPoints( - $temp[$pmaString->strlen($temp) - 1] + $temp[/*overload*/mb_strlen($temp) - 1] ); // Group this value, thus do not add to the result list @@ -699,13 +695,13 @@ function PMA_getJsonForLogDataTypeGeneral($start, $end) case 'update': // Cut off big inserts and updates, // but append byte count therefor - if ($pmaString->strlen($row['argument']) > 220) { - $row['argument'] = $pmaString->substr($row['argument'], 0, 200) + if (/*overload*/mb_strlen($row['argument']) > 220) { + $row['argument'] = /*overload*/mb_substr($row['argument'], 0, 200) . '... [' . implode( ' ', PMA_Util::formatByteDown( - $pmaString->strlen($row['argument']), + /*overload*/mb_strlen($row['argument']), 2, 2 ) @@ -784,7 +780,7 @@ function PMA_getJsonForQueryAnalyzer() { $return = array(); - if ($GLOBALS['PMA_String']->strlen($_REQUEST['database'])) { + if (/*overload*/mb_strlen($_REQUEST['database'])) { $GLOBALS['dbi']->selectDb($_REQUEST['database']); } diff --git a/libraries/server_status_processes.lib.php b/libraries/server_status_processes.lib.php index 61140991fc..44f82b1a29 100644 --- a/libraries/server_status_processes.lib.php +++ b/libraries/server_status_processes.lib.php @@ -233,14 +233,11 @@ function PMA_getHtmlForServerProcesslist() */ function PMA_getHtmlForServerProcessItem($process, $odd_row, $show_full_sql) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // Array keys need to modify due to the way it has used // to display column values if (! empty($_REQUEST['order_by_field']) && ! empty($_REQUEST['sort_order']) ) { foreach (array_keys($process) as $key) { - $new_key = ucfirst($pmaString->strtolower($key)); + $new_key = ucfirst(/*overload*/mb_strtolower($key)); if ($new_key !== $key) { $process[$new_key] = $process[$key]; unset($process[$key]); @@ -261,7 +258,7 @@ function PMA_getHtmlForServerProcessItem($process, $odd_row, $show_full_sql) $retval .= '<td>' . htmlspecialchars($process['User']) . '</td>'; $retval .= '<td>' . htmlspecialchars($process['Host']) . '</td>'; $retval .= '<td>' . ((! isset($process['db']) - || !$pmaString->strlen($process['db'])) + || !/*overload*/mb_strlen($process['db'])) ? '<i>' . __('None') . '</i>' : htmlspecialchars($process['db'])) . '</td>'; $retval .= '<td>' . htmlspecialchars($process['Command']) . '</td>'; diff --git a/libraries/server_status_variables.lib.php b/libraries/server_status_variables.lib.php index 860ecd91ec..0bf172dadd 100644 --- a/libraries/server_status_variables.lib.php +++ b/libraries/server_status_variables.lib.php @@ -223,9 +223,6 @@ function PMA_getHtmlForRenderVariables($ServerStatusData, $alerts, $strShowStatu $retval .= '</thead>'; $retval .= '<tbody>'; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $odd_row = false; foreach ($ServerStatusData->status as $name => $value) { $odd_row = !$odd_row; @@ -239,7 +236,7 @@ function PMA_getHtmlForRenderVariables($ServerStatusData, $alerts, $strShowStatu $retval .= htmlspecialchars(str_replace('_', ' ', $name)); // Fields containing % are calculated, // they can not be described in MySQL documentation - if ($pmaString->strpos($name, '%') === false) { + if (/*overload*/mb_strpos($name, '%') === false) { $retval .= PMA_Util::showMySQLDocu( 'server-status-variables', false, @@ -256,9 +253,9 @@ function PMA_getHtmlForRenderVariables($ServerStatusData, $alerts, $strShowStatu $retval .= '<span class="allfine">'; } } - if ('%' === $pmaString->substr($name, -1, 1)) { + if (substr($name, -1)) { $retval .= htmlspecialchars(PMA_Util::formatNumber($value, 0, 2)) . ' %'; - } elseif ($pmaString->strpos($name, 'Uptime') !== false) { + } elseif (strpos($name, 'Uptime') !== false) { $retval .= htmlspecialchars( PMA_Util::timespanFormat($value) ); diff --git a/libraries/server_user_groups.lib.php b/libraries/server_user_groups.lib.php index 901c5b91fc..341f270515 100644 --- a/libraries/server_user_groups.lib.php +++ b/libraries/server_user_groups.lib.php @@ -249,20 +249,17 @@ function PMA_getHtmlToEditUserGroup($userGroup = null) . " WHERE `usergroup`='" . PMA_Util::sqlAddSlashes($userGroup) . "'"; $result = PMA_queryAsControlUser($sql_query, false); if ($result) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - while ($row = $GLOBALS['dbi']->fetchAssoc($result)) { $key = $row['tab']; $value = $row['allowed']; - if ($pmaString->substr($key, 0, 7) == 'server_' && $value == 'Y') { - $allowedTabs['server'][] = $pmaString->substr($key, 7); - } elseif ($pmaString->substr($key, 0, 3) == 'db_' && $value == 'Y') { - $allowedTabs['db'][] = $pmaString->substr($key, 3); - } elseif ($pmaString->substr($key, 0, 6) == 'table_' + if (substr($key, 0, 7) == 'server_' && $value == 'Y') { + $allowedTabs['server'][] = /*overload*/mb_substr($key, 7); + } elseif (substr($key, 0, 3) == 'db_' && $value == 'Y') { + $allowedTabs['db'][] = /*overload*/mb_substr($key, 3); + } elseif (substr($key, 0, 6) == 'table_' && $value == 'Y' ) { - $allowedTabs['table'][] = $pmaString->substr($key, 6); + $allowedTabs['table'][] = /*overload*/mb_substr($key, 6); } } } diff --git a/libraries/server_variables.lib.php b/libraries/server_variables.lib.php index 9206baa6e7..4b30281bcb 100644 --- a/libraries/server_variables.lib.php +++ b/libraries/server_variables.lib.php @@ -78,7 +78,7 @@ function PMA_getAjaxReturnForSetVal($variable_doc_links) ); $value = floatval($matches[1]) * PMA_Util::pow( 1024, - $exp[$GLOBALS['PMA_String']->strtolower($matches[3])] + $exp[/*overload*/mb_strtolower($matches[3])] ); } else { $value = PMA_Util::sqlAddSlashes($value); diff --git a/libraries/sql.lib.php b/libraries/sql.lib.php index e56211a785..371d2c6888 100644 --- a/libraries/sql.lib.php +++ b/libraries/sql.lib.php @@ -22,7 +22,7 @@ function PMA_getNewDatabase($sql, $databases) $db = ''; // loop through all the databases foreach ($databases as $database) { - if ($GLOBALS['PMA_String']->strpos($sql, $database['SCHEMA_NAME']) !== false + if (/*overload*/mb_strpos($sql, $database['SCHEMA_NAME']) !== false ) { $db = $database['SCHEMA_NAME']; break; @@ -47,7 +47,7 @@ function PMA_getTableNameBySQL($sql, $tables) // loop through all the tables in the database foreach ($tables as $tbl) { - if ($GLOBALS['PMA_String']->strpos($sql, $tbl)) { + if (/*overload*/mb_strpos($sql, $tbl)) { $table .= ' ' . $tbl; } } @@ -112,7 +112,7 @@ function PMA_getTableHtmlForMultipleQueries( // Initialize needed params related to each query in multiquery statement if (isset($sql_data['valid_sql'][$sql_no])) { // 'Use' query can change the database - if ($GLOBALS['PMA_String']->stripos( + if (/*overload*/mb_stripos( $sql_data['valid_sql'][$sql_no], "use " )) { @@ -292,7 +292,7 @@ function PMA_getColumnNameInColumnDropSql($sql) $tmpArray1 = explode('DROP', $sql); $str_to_check = trim($tmpArray1[1]); - if ($GLOBALS['PMA_String']->stripos($str_to_check, 'COLUMN') !== false) { + if (/*overload*/mb_stripos($str_to_check, 'COLUMN') !== false) { $tmpArray2 = explode('COLUMN', $str_to_check); $str_to_check = trim($tmpArray2[1]); } @@ -1337,7 +1337,7 @@ function PMA_hasCurrentDbChanged($db) // Checks if the current database has changed // This could happen if the user sends a query like "USE `database`;" $reload = 0; - if ($GLOBALS['PMA_String']->strlen($db)) { + if (/*overload*/mb_strlen($db)) { $current_db = $GLOBALS['dbi']->fetchValue('SELECT DATABASE()'); // $current_db is false, except when a USE statement was sent if ($current_db != false && $db !== $current_db) { @@ -1363,21 +1363,18 @@ function PMA_cleanupRelations($db, $table, $dropped_column, $purge, $extra_data) { include_once 'libraries/relation_cleanup.lib.php'; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - if (isset($purge) && $purge == 1) { - if ($pmaString->strlen($table) && $pmaString->strlen($db)) { + if (/*overload*/mb_strlen($table) && /*overload*/mb_strlen($db)) { PMA_relationsCleanupTable($db, $table); - } elseif ($pmaString->strlen($db)) { + } elseif (/*overload*/mb_strlen($db)) { PMA_relationsCleanupDatabase($db); } } if (isset($dropped_column) && !empty($dropped_column) - && $pmaString->strlen($db) - && $pmaString->strlen($table) + && /*overload*/mb_strlen($db) + && /*overload*/mb_strlen($table) ) { PMA_relationsCleanupColumn($db, $table, $dropped_column); // to refresh the list of indexes (Ajax mode) @@ -1611,7 +1608,7 @@ function PMA_deleteTransformationInfo($db, $table, $analyzed_sql) { include_once 'libraries/transformations.lib.php'; if ($analyzed_sql[0]['querytype'] == 'ALTER') { - $posDrop = $GLOBALS['PMA_String']->stripos( + $posDrop = /*overload*/mb_stripos( $analyzed_sql[0]['unsorted_query'], 'DROP' ); diff --git a/libraries/sql_query_form.lib.php b/libraries/sql_query_form.lib.php index cc5c2781c3..4539a3d70f 100644 --- a/libraries/sql_query_form.lib.php +++ b/libraries/sql_query_form.lib.php @@ -57,16 +57,13 @@ function PMA_getHtmlForSqlQueryForm( $enctype = ''; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $table = ''; $db = ''; - if (! $pmaString->strlen($GLOBALS['db'])) { + if (! /*overload*/mb_strlen($GLOBALS['db'])) { // prepare for server related $goto = empty($GLOBALS['goto']) ? 'server_sql.php' : $GLOBALS['goto']; - } elseif (! $pmaString->strlen($GLOBALS['table'])) { + } elseif (! /*overload*/mb_strlen($GLOBALS['table'])) { // prepare for db related $db = $GLOBALS['db']; $goto = empty($GLOBALS['goto']) ? @@ -149,13 +146,10 @@ function PMA_getHtmlForSqlQueryFormInsert( $locking = ''; $height = $GLOBALS['cfg']['TextareaRows'] * 2; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $table = ''; $db = ''; $fields_list = array(); - if (! $pmaString->strlen($GLOBALS['db'])) { + if (! /*overload*/mb_strlen($GLOBALS['db'])) { // prepare for server related $legend = sprintf( __('Run SQL query/queries on server %s'), @@ -165,7 +159,7 @@ function PMA_getHtmlForSqlQueryFormInsert( : $GLOBALS['cfg']['Servers'][$GLOBALS['server']]['host'] ) . '"' ); - } elseif (! $pmaString->strlen($GLOBALS['table'])) { + } elseif (! /*overload*/mb_strlen($GLOBALS['table'])) { // prepare for db related $db = $GLOBALS['db']; // if you want navigation: @@ -253,7 +247,7 @@ function PMA_getHtmlForSqlQueryFormInsert( $html .= '<option value="' . PMA_Util::backquote(htmlspecialchars($field['Field'])) . '"'; if (isset($field['Field']) - && $pmaString->strlen($field['Field']) + && /*overload*/mb_strlen($field['Field']) && isset($field['Comment']) ) { $html .= ' title="' . htmlspecialchars($field['Comment']) . '"'; diff --git a/libraries/sqlparser.lib.php b/libraries/sqlparser.lib.php index 3a1fdaa005..671a855b88 100644 --- a/libraries/sqlparser.lib.php +++ b/libraries/sqlparser.lib.php @@ -222,7 +222,7 @@ function PMA_SQP_parse($sql) $sql = str_replace("\r\n", "\n", $sql); $sql = str_replace("\r", "\n", $sql); - $len = $pmaString->strlen($sql); + $len = /*overload*/mb_strlen($sql); if ($len == 0) { return array(); } @@ -277,7 +277,7 @@ function PMA_SQP_parse($sql) $this_was_quote = false; while ($count2 < $len) { - $c = $pmaString->substr($sql, $count2, 1); + $c = /*overload*/mb_substr($sql, $count2, 1); $count1 = $count2; $previous_was_space = $this_was_space; @@ -309,12 +309,12 @@ function PMA_SQP_parse($sql) // MySQL style # // C style /* */ // ANSI style -- - $next_c = $pmaString->substr($sql, $count2 + 1, 1); + $next_c = /*overload*/mb_substr($sql, $count2 + 1, 1); if (($c == '#') || (($count2 + 1 < $len) && ($c == '/') && ($next_c == '*')) || (($count2 + 2 == $len) && ($c == '-') && ($next_c == '-')) || (($count2 + 2 < $len) && ($c == '-') && ($next_c == '-') - && (($pmaString->substr($sql, $count2 + 2, 1) <= ' '))) + && ((/*overload*/mb_substr($sql, $count2 + 2, 1) <= ' '))) ) { $count2++; $pos = 0; @@ -322,22 +322,22 @@ function PMA_SQP_parse($sql) switch ($c) { case '#': $type = 'mysql'; - $pos = $pmaString->strpos($sql, "\n", $count2); + $pos = /*overload*/mb_strpos($sql, "\n", $count2); break; case '-': $type = 'ansi'; - $pos = $pmaString->strpos($sql, "\n", $count2); + $pos = /*overload*/mb_strpos($sql, "\n", $count2); break; case '/': $type = 'c'; - $pos = $pmaString->strpos($sql, '*/', $count2); + $pos = /*overload*/mb_strpos($sql, '*/', $count2); $pos += 2; break; default: break; } // end switch $count2 = ($pos < $count2) ? $len : $pos; - $str = $pmaString->substr( + $str = /*overload*/mb_substr( $sql, $count1, $count2 - $count1 ); PMA_SQP_arrayAdd( @@ -347,14 +347,14 @@ function PMA_SQP_parse($sql) } // end if // Checks for something inside quotation marks - if ($pmaString->strpos($quote_list, $c) !== false) { + if (/*overload*/mb_strpos($quote_list, $c) !== false) { $startquotepos = $count2; $quotetype = $c; $count2++; $pos = $count2; do { $oldpos = $pos; - $pos = $pmaString->strpos( + $pos = /*overload*/mb_strpos( ' ' . $sql, $quotetype, $oldpos + 1 ) - 1; // ($pos === false) @@ -371,7 +371,7 @@ function PMA_SQP_parse($sql) * * SELECT * FROM `table` */ - $pos_quote_separator = $pmaString->strpos( + $pos_quote_separator = /*overload*/mb_strpos( ' ' . $sql, $GLOBALS['sql_delimiter'], $oldpos + 1 ) - 1; if ($pos_quote_separator < 0) { @@ -381,9 +381,9 @@ function PMA_SQP_parse($sql) $pos = $len; } else { $len += 1; - $sql = $pmaString->substr( + $sql = /*overload*/mb_substr( $sql, 0, $pos_quote_separator - ) . '`' . $pmaString->substr( + ) . '`' . /*overload*/mb_substr( $sql, $pos_quote_separator ); $sql_array['raw'] = $sql; @@ -420,8 +420,8 @@ function PMA_SQP_parse($sql) $pos ++; continue; } elseif (($pos + 1 < $len) - && ($pmaString->substr($sql, $pos, 1) == $quotetype) - && ($pmaString->substr($sql, $pos + 1, 1) == $quotetype) + && (/*overload*/mb_substr($sql, $pos, 1) == $quotetype) + && (/*overload*/mb_substr($sql, $pos + 1, 1) == $quotetype) ) { $pos = $pos + 2; continue; @@ -449,25 +449,25 @@ function PMA_SQP_parse($sql) default: break; } // end switch - $data = $pmaString->substr($sql, $count1, $count2 - $count1); + $data = /*overload*/mb_substr($sql, $count1, $count2 - $count1); PMA_SQP_arrayAdd($sql_array, $type, $data, $arraysize, $count2); continue; } // Checks for brackets - if ($pmaString->strpos($bracket_list, $c) !== false) { + if (/*overload*/mb_strpos($bracket_list, $c) !== false) { // All bracket tokens are only one item long $this_was_bracket = true; $count2++; - if ($pmaString->strpos('([{', $c) !== false) { + if (/*overload*/mb_strpos('([{', $c) !== false) { $type_type = 'open'; } else { $type_type = 'close'; } - if ($pmaString->strpos('()', $c) !== false) { + if (/*overload*/mb_strpos('()', $c) !== false) { $type_style = 'round'; - } elseif ($pmaString->strpos('[]', $c) !== false) { + } elseif (/*overload*/mb_strpos('[]', $c) !== false) { $type_style = 'square'; } else { $type_style = 'curly'; @@ -498,7 +498,7 @@ function PMA_SQP_parse($sql) if ($pmaString->isSqlIdentifier($c, false) || $c == '@' || ($c == '.' - && $pmaString->isDigit($pmaString->substr($sql, $count2 + 1, 1)) + && $pmaString->isDigit(/*overload*/mb_substr($sql, $count2 + 1, 1)) && ($previous_was_space || $previous_was_bracket || $previous_was_listsep)) ) { @@ -526,7 +526,7 @@ function PMA_SQP_parse($sql) $is_digit && $c == '0' && $count2 < $len - && $pmaString->substr($sql, $count2, 1) == 'x' + && /*overload*/mb_substr($sql, $count2, 1) == 'x' ); $is_float_digit = $c == '.'; $is_float_digit_exponent = false; @@ -558,11 +558,11 @@ function PMA_SQP_parse($sql) while (($count2 < $len) && $pmaString->isSqlIdentifier( - $pmaString->substr($sql, $count2, 1), + /*overload*/mb_substr($sql, $count2, 1), ($is_sql_variable || $is_digit) ) ) { - $c2 = $pmaString->substr($sql, $count2, 1); + $c2 = /*overload*/mb_substr($sql, $count2, 1); if ($is_sql_variable && ($c2 == '.')) { $count2++; continue; @@ -576,7 +576,7 @@ function PMA_SQP_parse($sql) $debugstr = __('Invalid Identifer') . ' @ ' . ($count1+1) . "\n" . 'STR: ' . htmlspecialchars( - $pmaString->substr( + /*overload*/mb_substr( $sql, $count1, $count2 - $count1 ) ); @@ -612,7 +612,7 @@ function PMA_SQP_parse($sql) } // end while $l = $count2 - $count1; - $str = $pmaString->substr($sql, $count1, $l); + $str = /*overload*/mb_substr($sql, $count1, $l); if ($is_digit || $is_float_digit || $is_hex_digit) { $type = 'digit'; @@ -636,10 +636,10 @@ function PMA_SQP_parse($sql) } // Checks for punct - if ($pmaString->strpos($allpunct_list, $c) !== false) { + if (/*overload*/mb_strpos($allpunct_list, $c) !== false) { while (($count2 < $len) - && $pmaString->strpos( - $allpunct_list, $pmaString->substr( + && /*overload*/mb_strpos( + $allpunct_list, /*overload*/mb_substr( $sql, $count2, 1 ) ) !== false @@ -650,7 +650,7 @@ function PMA_SQP_parse($sql) if ($l == 1) { $punct_data = $c; } else { - $punct_data = $pmaString->substr($sql, $count1, $l); + $punct_data = /*overload*/mb_substr($sql, $count1, $l); } // Special case, sometimes, although two characters are @@ -702,15 +702,15 @@ function PMA_SQP_parse($sql) } elseif (($last2 == '/*') || (($last2 == '--') && ($count2 == $len - || $pmaString->substr($sql, $count2, 1) <= ' ')) + || /*overload*/mb_substr($sql, $count2, 1) <= ' ')) ) { $count2 -= 2; - $punct_data = $pmaString->substr( + $punct_data = /*overload*/mb_substr( $sql, $count1, $count2 - $count1 ); } elseif (($last == '-') || ($last == '+') || ($last == '!')) { $count2--; - $punct_data = $pmaString->substr( + $punct_data = /*overload*/mb_substr( $sql, $count1, $count2 - $count1 ); } elseif ($last != '~') { @@ -737,7 +737,7 @@ function PMA_SQP_parse($sql) $count2++; $debugstr = 'C1 C2 LEN: ' . $count1 . ' ' . $count2 . ' ' . $len . "\n" - . 'STR: ' . $pmaString->substr( + . 'STR: ' . /*overload*/mb_substr( $sql, $count1, $count2 - $count1 ) . "\n"; PMA_SQP_bug($debugstr, $sql); @@ -759,7 +759,7 @@ function PMA_SQP_parse($sql) $d_prev = ''; $d_cur = ''; $d_next_upper = $t_next == 'alpha' - ? $pmaString->strtoupper($d_next) + ? /*overload*/mb_strtoupper($d_next) : $d_next; $d_prev_upper = ''; $d_cur_upper = ''; @@ -777,7 +777,7 @@ function PMA_SQP_parse($sql) $t_next = $sql_array[$i + 1]['type']; $d_next = $sql_array[$i + 1]['data']; $d_next_upper - = $t_next == 'alpha' ? $pmaString->strtoupper($d_next) : $d_next; + = $t_next == 'alpha' ? /*overload*/mb_strtoupper($d_next) : $d_next; } else { $t_next = ''; $d_next = ''; @@ -874,7 +874,7 @@ function PMA_SQP_parse($sql) } elseif (in_array($d_cur, $mysql_charsets) || in_array($d_cur, $mysql_collations_flat) || ($d_cur{0} == '_' - && in_array($pmaString->substr($d_cur, 1), $mysql_charsets)) + && in_array(/*overload*/mb_substr($d_cur, 1), $mysql_charsets)) ) { $t_suffix = '_charset'; } else { @@ -918,16 +918,13 @@ function PMA_SQP_typeCheck($toCheck, $whatWeWant) return true; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - - if ($pmaString->strpos($whatWeWant, $typeSeparator) !== false) { + if (/*overload*/mb_strpos($whatWeWant, $typeSeparator) !== false) { return false; } return strncmp( $whatWeWant, $toCheck, - $pmaString->strpos($toCheck, $typeSeparator) + /*overload*/mb_strpos($toCheck, $typeSeparator) ) == 0; } @@ -1161,9 +1158,6 @@ function PMA_SQP_analyze($arr) */ ); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // loop #1 for each token: select_expr, table_ref for SELECT for ($i = 0; $i < $size; $i++) { @@ -1233,7 +1227,7 @@ function PMA_SQP_analyze($arr) } // ============================================================== if ($arr[$i]['type'] == 'alpha_functionName') { - $upper_data = $pmaString->strtoupper($arr[$i]['data']); + $upper_data = /*overload*/mb_strtoupper($arr[$i]['data']); if ($upper_data =='EXTRACT') { $in_extract = true; $number_of_brackets_in_extract = 0; @@ -1248,7 +1242,7 @@ function PMA_SQP_analyze($arr) if ($arr[$i]['type'] == 'alpha_reservedWord') { // We don't know what type of query yet, so run this if ($subresult['querytype'] == '') { - $subresult['querytype'] = $pmaString->strtoupper($arr[$i]['data']); + $subresult['querytype'] = /*overload*/mb_strtoupper($arr[$i]['data']); } // end if (querytype was empty) // Check if we support this type of query @@ -1259,7 +1253,7 @@ function PMA_SQP_analyze($arr) } // end if (query not supported) // upper once - $upper_data = $pmaString->strtoupper($arr[$i]['data']); + $upper_data = /*overload*/mb_strtoupper($arr[$i]['data']); /** * @todo reset for each query? */ @@ -1394,7 +1388,7 @@ function PMA_SQP_analyze($arr) ); if (isset($alias_for_select_expr) - && $pmaString->strlen($alias_for_select_expr) + && /*overload*/mb_strlen($alias_for_select_expr) ) { // we had found an alias for this select expression $subresult['select_expr'][$current_select_expr]['alias'] @@ -1469,7 +1463,7 @@ function PMA_SQP_analyze($arr) 'table_true_name' => '' ); if (isset($alias_for_table_ref) - && $pmaString->strlen($alias_for_table_ref) + && /*overload*/mb_strlen($alias_for_table_ref) ) { $subresult['table_ref'][$current_table_ref]['table_alias'] = $alias_for_table_ref; @@ -1514,7 +1508,7 @@ function PMA_SQP_analyze($arr) $truename = $subresult['table_ref'][$tr]['table_true_name']; for ($se=0; $se <= $current_select_expr; $se++) { if (isset($alias) - && $pmaString->strlen($alias) + && /*overload*/mb_strlen($alias) && $subresult['select_expr'][$se]['table_true_name'] == $alias ) { $subresult['select_expr'][$se]['table_true_name'] @@ -1669,7 +1663,7 @@ function PMA_SQP_analyze($arr) } if ($arr[$i]['type'] == 'alpha_reservedWord') { - $upper_data = $pmaString->strtoupper($arr[$i]['data']); + $upper_data = /*overload*/mb_strtoupper($arr[$i]['data']); if ($upper_data == 'SELECT' && $number_of_brackets > 0) { $in_subquery = true; @@ -1725,7 +1719,7 @@ function PMA_SQP_analyze($arr) } if ($upper_data == 'LIMIT' && ! $in_subquery) { - $section_before_limit = $pmaString->substr( + $section_before_limit = /*overload*/mb_substr( $arr['raw'], 0, $arr[$i]['pos'] - 5 ); $in_limit = true; @@ -1744,7 +1738,7 @@ function PMA_SQP_analyze($arr) && $subresult['queryflags']['select_from'] == 1 && ($i + 1) < $size && $arr[$i + 1]['type'] == 'alpha_reservedWord' - && $pmaString->strtoupper($arr[$i + 1]['data']) == 'ANALYSE' + && /*overload*/mb_strtoupper($arr[$i + 1]['data']) == 'ANALYSE' ) { $subresult['queryflags']['is_analyse'] = 1; } @@ -1756,7 +1750,7 @@ function PMA_SQP_analyze($arr) && $subresult['queryflags']['select_from'] == 1 && ($i + 1) < $size && $arr[$i + 1]['type'] == 'alpha_reservedWord' - && $pmaString->strtoupper($arr[$i + 1]['data']) == 'OUTFILE' + && /*overload*/mb_strtoupper($arr[$i + 1]['data']) == 'OUTFILE' ) { $subresult['queryflags']['is_export'] = 1; } @@ -1773,7 +1767,7 @@ function PMA_SQP_analyze($arr) && !isset($subresult['queryflags']['is_group']) && ($i + 1) < $size && $arr[$i + 1]['type'] == 'alpha_functionName' - && $pmaString->strtoupper($arr[$i + 1]['data']) == 'COUNT' + && /*overload*/mb_strtoupper($arr[$i + 1]['data']) == 'COUNT' ) { $subresult['queryflags']['is_count'] = 1; } @@ -1831,12 +1825,12 @@ function PMA_SQP_analyze($arr) && ($i + 1) < $size && $arr[$i + 1]['type'] == 'alpha_reservedWord' && in_array( - $pmaString->strtoupper($arr[$i + 1]['data']), + /*overload*/mb_strtoupper($arr[$i + 1]['data']), $arrayKeyWords ) && ($i + 2) < $size && $arr[$i + 2]['type'] == 'alpha_reservedWord' - && $pmaString->strtoupper($arr[$i + 2]['data']) == 'DISTINCT' + && /*overload*/mb_strtoupper($arr[$i + 2]['data']) == 'DISTINCT' ) { $subresult['queryflags']['is_group'] = 1; } @@ -1887,7 +1881,7 @@ function PMA_SQP_analyze($arr) // We use $GLOBALS['PMA_String']->substr() to be charset-safe; // otherwise if the table name contains accents, the unsorted // query would be missing some characters. - $unsorted_query = $GLOBALS['PMA_String']->substr( + $unsorted_query = /*overload*/mb_substr( $arr['raw'], 0, $arr[$i]['pos'] - 8 ); $in_order_by = true; @@ -1916,7 +1910,7 @@ function PMA_SQP_analyze($arr) $sep = ' '; if ($arr[$i]['type'] == 'alpha_functionName') { $sep=''; - $upper_data = $pmaString->strtoupper($arr[$i]['data']); + $upper_data = /*overload*/mb_strtoupper($arr[$i]['data']); if ($upper_data =='GROUP_CONCAT') { $in_group_concat = true; $number_of_brackets_in_group_concat = 0; @@ -1953,11 +1947,11 @@ function PMA_SQP_analyze($arr) // for the presence of INSERT|LOAD DATA if ($arr[$i]['type'] == 'alpha_identifier' - && $pmaString->strtoupper($arr[$i]['data']) == 'DATA' + && /*overload*/mb_strtoupper($arr[$i]['data']) == 'DATA' && ($i - 1) >= 0 && $arr[$i - 1]['type'] == 'alpha_reservedWord' && in_array( - $pmaString->strtoupper($arr[$i - 1]['data']), + /*overload*/mb_strtoupper($arr[$i - 1]['data']), array("INSERT", "LOAD") ) ) { @@ -1967,7 +1961,7 @@ function PMA_SQP_analyze($arr) // for the presence of SUM|AVG|STD|STDDEV|MIN|MAX|BIT_OR|BIT_AND if ($arr[$i]['type'] == 'alpha_functionName' - && in_array($pmaString->strtoupper($arr[$i]['data']), $arrayFunctions) + && in_array(/*overload*/mb_strtoupper($arr[$i]['data']), $arrayFunctions) && isset($subresult['queryflags']['select_from']) && $subresult['queryflags']['select_from'] == 1 && !isset($subresult['queryflags']['is_group']) @@ -2070,7 +2064,7 @@ function PMA_SQP_analyze($arr) for ($i = 0; $i < $size; $i++) { if ($arr[$i]['type'] == 'alpha_reservedWord') { - $upper_data = $pmaString->strtoupper($arr[$i]['data']); + $upper_data = /*overload*/mb_strtoupper($arr[$i]['data']); if ($upper_data == 'NOT' && $in_timestamp_options) { if (! isset($create_table_fields)) { @@ -2133,7 +2127,7 @@ function PMA_SQP_analyze($arr) if (isset($arr[$i+1]) && $arr[$i+1]['type'] == 'alpha_reservedWord' ) { - $second_upper_data = $pmaString->strtoupper($arr[$i+1]['data']); + $second_upper_data = /*overload*/mb_strtoupper($arr[$i+1]['data']); if ($second_upper_data == 'DELETE') { $clause = 'on_delete'; } @@ -2147,10 +2141,9 @@ function PMA_SQP_analyze($arr) if (isset($clause) && ($arr[$i+2]['type'] == 'alpha_reservedWord' || ($arr[$i+2]['type'] == 'alpha_identifier' - && $pmaString->strtoupper($arr[$i+2]['data'])=='NO')) + && /*overload*/mb_strtoupper($arr[$i+2]['data'])=='NO')) ) { - $third_upper_data = $pmaString - ->strtoupper($arr[$i+2]['data']); + $third_upper_data = /*overload*/mb_strtoupper($arr[$i+2]['data']); if ($third_upper_data == 'CASCADE' || $third_upper_data == 'RESTRICT' ) { @@ -2160,7 +2153,7 @@ function PMA_SQP_analyze($arr) ) { if ($arr[$i+3]['type'] == 'alpha_reservedWord') { $value = $third_upper_data . '_' - . $pmaString->strtoupper($arr[$i+3]['data']); + . /*overload*/mb_strtoupper($arr[$i+3]['data']); } } elseif ($third_upper_data == 'CURRENT_TIMESTAMP') { if ($clause == 'on_update' @@ -2204,7 +2197,7 @@ function PMA_SQP_analyze($arr) } if (($arr[$i]['type'] == 'alpha_columnAttrib')) { - $upper_data = $pmaString->strtoupper($arr[$i]['data']); + $upper_data = /*overload*/mb_strtoupper($arr[$i]['data']); if ($seen_create_table && $in_create_table_fields) { if ($upper_data == 'DEFAULT') { $seen_default = true; @@ -2220,7 +2213,7 @@ function PMA_SQP_analyze($arr) if (($arr[$i]['type'] == 'alpha_columnType') || ($arr[$i]['type'] == 'alpha_functionName' && $seen_create_table) ) { - $upper_data = $pmaString->strtoupper($arr[$i]['data']); + $upper_data = /*overload*/mb_strtoupper($arr[$i]['data']); if ($seen_create_table && $in_create_table_fields && isset($current_identifier) ) { @@ -2436,9 +2429,6 @@ function PMA_SQP_format( $typearr[3] = $arr[$start_token]['type']; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $in_priv_list = false; for ($i = $start_token; $i < $number_of_tokens; $i++) { // DEBUG echo "Loop format <strong>" . $arr[$i]['data'] @@ -2475,12 +2465,12 @@ function PMA_SQP_format( $infunction = false; $keyword_brackets_2before = isset( $keywords_with_brackets_2before[ - $pmaString->strtoupper($arr[$i - 2]['data']) + /*overload*/mb_strtoupper($arr[$i - 2]['data']) ] ); $keyword_brackets_1before = isset( $keywords_with_brackets_1before[ - $pmaString->strtoupper($arr[$i - 1]['data']) + /*overload*/mb_strtoupper($arr[$i - 1]['data']) ] ); // Make sure this array is sorted! @@ -2613,7 +2603,7 @@ function PMA_SQP_format( // select * from mysql.user where binary user="root" // binary is marked as alpha_columnAttrib // but should be marked as a reserved word - if ($pmaString->strtoupper($arr[$i]['data']) == 'BINARY' + if (/*overload*/mb_strtoupper($arr[$i]['data']) == 'BINARY' && $typearr[3] == 'alpha_identifier' ) { $after .= ' '; @@ -2629,7 +2619,7 @@ function PMA_SQP_format( // as an identifier name) if ($mode != 'query_only') { - $arr[$i]['data'] = $pmaString->strtoupper($arr[$i]['data']); + $arr[$i]['data'] = /*overload*/mb_strtoupper($arr[$i]['data']); } list($before, $in_priv_list) = PMA_SQP_getBeforeAndInPrivList( @@ -2747,7 +2737,7 @@ function PMA_SQP_getBeforeAndInPrivList( if (!((($typearr[1] != 'alpha_reservedWord') || (($typearr[1] == 'alpha_reservedWord') - && isset($keywords_no_newline[$GLOBALS['PMA_String']->strtoupper($data)]))) + && isset($keywords_no_newline[/*overload*/mb_strtoupper($data)]))) && ($typearr[1] != 'punct_level_plus') && (!isset($keywords_no_newline[$arr[$index]['data']]))) ) { @@ -2909,7 +2899,7 @@ function PMA_SQP_isKeyWord($column) { global $PMA_SQPdata_forbidden_word; return in_array( - $GLOBALS['PMA_String']->strtoupper($column), + /*overload*/mb_strtoupper($column), $PMA_SQPdata_forbidden_word ); } diff --git a/libraries/string.lib.php b/libraries/string.lib.php new file mode 100644 index 0000000000..77599e5f32 --- /dev/null +++ b/libraries/string.lib.php @@ -0,0 +1,20 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** String Functions for phpMyAdmin + * + * If mb_* functions don't exist, we create the ones we need and they'll use the + * standard string functions. + * + * All mb_* functions created by pMA should behave as mb_* functions. + * + * @package PhpMyAdmin + */ +if (! defined('PHPMYADMIN')) { + exit; +} + +if (@function_exists('mb_strlen')) { + include_once 'libraries/stringMb.lib.php'; +} else { + include_once 'libraries/stringNative.lib.php'; +} diff --git a/libraries/stringMb.lib.php b/libraries/stringMb.lib.php new file mode 100644 index 0000000000..652dde06b4 --- /dev/null +++ b/libraries/stringMb.lib.php @@ -0,0 +1,78 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** String Functions for phpMyAdmin + * + * If mb_* functions don't exist, we create the ones we need and they'll use the + * standard string functions. + * + * All mb_* functions created by pMA should behave as mb_* functions. + * + * @package PhpMyAdmin + */ +if (! defined('PHPMYADMIN')) { + exit; +} + +if (!@function_exists('mb_ord')) { + mb_internal_encoding('utf-8'); + + /** + * Perform a regular expression match + * + * Take care: might not work with lookbehind expressions. + * + * @param string $pattern Pattern to search for + * @param string $subject Input string + * @param int $offset Start from search + * + * @return int 1 if matched, 0 if doesn't, false on failure + */ + function mb_preg_strpos($pattern, $subject, $offset = 0) + { + $matches = array(); + $bFind = preg_match( + $pattern, mb_substr($subject, $offset), $matches, PREG_OFFSET_CAPTURE + ); + if (1 !== $bFind) { + return false; + } + + return $matches[1][1] + $offset; + } + + /** + * Get the ordinal value of a string + * + * @param string $string the string for which ord is required + * + * @return int the ord value + */ + function mb_ord($string) + { + if (false === $string || null === $string || '' === $string) { + return 0; + } + + $str = mb_convert_encoding($string, "UCS-4BE", "UTF-8"); + $substr = mb_substr($str, 0, 1, "UCS-4BE"); + $val = unpack("N", $substr); + return $val[1]; + } + + /** + * Get the character of an ASCII + * + * @param int $ascii the ASCII code for which character is required + * + * @return string the character + */ + function mb_chr($ascii) + { + return mb_convert_encoding( + pack("N", $ascii), + mb_internal_encoding(), + 'UCS-4BE' + ); + } + +} diff --git a/libraries/stringNative.lib.php b/libraries/stringNative.lib.php new file mode 100644 index 0000000000..6af2c12b33 --- /dev/null +++ b/libraries/stringNative.lib.php @@ -0,0 +1,244 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** String Functions for phpMyAdmin + * If mb_* functions don't exist, we create the ones we need and they'll use the + * standard string functions. + * All mb_* functions created by pMA should behave as mb_* functions. + * @package PhpMyAdmin + */ +if (!defined('PHPMYADMIN')) { + exit; +} + +//Define mb_* functions if they don't exist. +if (!@function_exists('mb_strlen')) { + /** + * Returns length of string depending on current charset. + * + * @param string $string string to count + * + * @return int string length + */ + function mb_strlen($string) + { + return strlen($string); + } + + /** + * Returns substring from string, works depending on current charset. + * + * @param string $string string to count + * @param int $start start of substring + * @param int $length length of substring + * + * @return string the sub string + */ + function mb_substr($string, $start, $length = 2147483647) + { + if (null === $string || strlen($string) <= $start) { + return ''; + } + if (null === $length) { + $length = 2147483647; + } + return substr($string, $start, $length); + } + + /** + * Returns number of substring from string. + * + * @param string $string string to check + * @param int $needle string to count + * + * @return int number of substring from the string + */ + function mb_substrCount($string, $needle) + { + return substr_count($string, $needle); + } + + /** + * Returns position of $needle in $haystack or false if not found + * + * @param string $haystack the string being checked + * @param string $needle the string to find in haystack + * @param int $offset the search offset + * + * @return integer position of $needle in $haystack or false + */ + function mb_strpos($haystack, $needle, $offset = 0) + { + return strpos($haystack, $needle, $offset); + } + + /** + * Returns position of $needle in $haystack - case insensitive - or false if + * not found + * + * @param string $haystack the string being checked + * @param string $needle the string to find in haystack + * @param int $offset the search offset + * + * @return integer position of $needle in $haystack or false + */ + function mb_stripos($haystack, $needle, $offset = 0) + { + if (('' === $haystack || false === $haystack) && $offset >= strlen($haystack) + ) { + return false; + } + return stripos($haystack, $needle, $offset); + } + + /** + * Returns position of last $needle in $haystack or false if not found + * + * @param string $haystack the string being checked + * @param string $needle the string to find in haystack + * @param int $offset the search offset + * + * @return integer position of last $needle in $haystack or false + */ + function mb_strrpos($haystack, $needle, $offset = 0) + { + return strrpos($haystack, $needle, $offset); + } + + /** + * Returns position of last $needle in $haystack - case insensitive - or false + * if not found + * + * @param string $haystack the string being checked + * @param string $needle the string to find in haystack + * @param int $offset the search offset + * + * @return integer position of last $needle in $haystack or false + */ + function mb_strripos($haystack, $needle, $offset = 0) + { + if (('' === $haystack || false === $haystack) && $offset >= strlen($haystack) + ) { + return false; + } + return strripos($haystack, $needle, $offset); + } + + /** + * Returns part of $haystack string starting from and including the first + * occurrence of $needle to the end of $haystack or false if not found + * + * @param string $haystack the string being checked + * @param string $needle the string to find in haystack + * @param bool $before_needle the part before the needle + * + * @return string part of $haystack or false + */ + function mb_strstr($haystack, $needle, $before_needle = false) + { + return strstr($haystack, $needle, $before_needle); + } + + /** + * Returns part of $haystack string starting from and including the first + * occurrence of $needle to the end of $haystack - case insensitive - or false + * if not found + * + * @param string $haystack the string being checked + * @param string $needle the string to find in haystack + * @param bool $before_needle the part before the needle + * + * @return string part of $haystack or false + */ + function mb_stristr($haystack, $needle, $before_needle = false) + { + return stristr($haystack, $needle, $before_needle); + } + + /** + * Returns the portion of haystack which starts at the last occurrence or false + * if not found + * + * @param string $haystack the string being checked + * @param string $needle the string to find in haystack + * + * @return string portion of haystack which starts at the last occurrence or + * false + */ + function mb_strrchr($haystack, $needle) + { + return strrchr($haystack, $needle); + } + + /** + * Make a string lowercase + * + * @param string $string the string being lowercased + * + * @return string the lower case string + */ + function mb_strtolower($string) + { + return strtolower($string); + } + + /** + * Make a string uppercase + * + * @param string $string the string being uppercased + * + * @return string the upper case string + */ + function mb_strtoupper($string) + { + return strtoupper($string); + } +} + +//New functions. +if (!@function_exists('mb_ord')) { + /** + * Perform a regular expression match + * + * @param string $pattern Pattern to search for + * @param string $subject Input string + * @param int $offset Start from search + * + * @return int 1 if matched, 0 if doesn't, false on failure + */ + function mb_preg_strpos($pattern, $subject, $offset = 0) + { + $matches = array(); + $bFind = preg_match( + $pattern, $subject, $matches, PREG_OFFSET_CAPTURE, $offset + ); + if (1 !== $bFind) { + return false; + } + + return $matches[1][1]; + } + + /** + * Get the ordinal value of a string + * + * @param string $string the string for which ord is required + * + * @return int the ord value + */ + function mb_ord($string) + { + return ord($string); + } + + /** + * Get the character of an ASCII + * + * @param int $ascii the ASCII code for which character is required + * + * @return string the character + */ + function mb_chr($ascii) + { + return chr($ascii); + } +}
\ No newline at end of file diff --git a/libraries/structure.lib.php b/libraries/structure.lib.php index d84ae9acd7..be88786a28 100644 --- a/libraries/structure.lib.php +++ b/libraries/structure.lib.php @@ -733,7 +733,7 @@ function PMA_getHtmlForNotNullEngineViewTable($table_is_view, $current_table, : ($table_is_view ? __('View') : '') ) . '</td>'; - if ($GLOBALS['PMA_String']->strlen($collation)) { + if (/*overload*/mb_strlen($collation)) { $html_output .= '<td class="nowrap">' . $collation . '</td>'; } } @@ -1020,17 +1020,14 @@ function PMA_getServerSlaveStatus($server_slave_status, $truename) $do = false; include_once 'libraries/replication.inc.php'; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - if (!$server_slave_status) { return array($do, $ignored); } $nbServerSlaveDoDb = count($server_slave_Do_DB); $nbServerSlaveIgnoreDb = count($server_slave_Ignore_DB); - if (($pmaString->strlen(array_search($truename, $server_slave_Do_Table)) > 0) - || $pmaString->strlen(array_search($GLOBALS['db'], $server_slave_Do_DB)) > 0 + if ((strlen(array_search($truename, $server_slave_Do_Table)) > 0) + || strlen(array_search($GLOBALS['db'], $server_slave_Do_DB)) > 0 || ($nbServerSlaveDoDb == 1 && $nbServerSlaveIgnoreDb == 1) ) { $do = true; @@ -1038,7 +1035,7 @@ function PMA_getServerSlaveStatus($server_slave_status, $truename) foreach ($server_slave_Wild_Do_Table as $db_table) { $table_part = PMA_extractDbOrTable($db_table, 'table'); $pattern = "@^" - . $pmaString->substr($table_part, 0, $pmaString->strlen($table_part) - 1) + . /*overload*/mb_substr($table_part, 0, -1) . "@"; if (($GLOBALS['db'] == PMA_extractDbOrTable($db_table, 'db')) && (preg_match($pattern, $truename)) @@ -1048,15 +1045,15 @@ function PMA_getServerSlaveStatus($server_slave_status, $truename) } $search = array_search($GLOBALS['db'], $server_slave_Ignore_DB); - if (($pmaString->strlen(array_search($truename, $server_slave_Ignore_Table)) > 0) - || $pmaString->strlen($search) > 0 + if ((strlen(array_search($truename, $server_slave_Ignore_Table)) > 0) + || strlen($search) > 0 ) { $ignored = true; } foreach ($server_slave_Wild_Ignore_Table as $db_table) { $table_part = PMA_extractDbOrTable($db_table, 'table'); $pattern = "@^" - . $pmaString->substr($table_part, 0, $pmaString->strlen($table_part) - 1) + . /*overload*/mb_substr($table_part, 0, -1) . "@"; if (($db == PMA_extractDbOrTable($db_table)) && (preg_match($pattern, $truename)) @@ -1378,7 +1375,7 @@ function PMA_getHtmlTableStructureRow($row, $rownum, $html_output .= '</td>'; $html_output .= '<td class="nowrap">' - . $GLOBALS['PMA_String']->strtoupper($row['Extra']) . '</td>'; + . /*overload*/mb_strtoupper($row['Extra']) . '</td>'; $html_output .= PMA_getHtmlForDropColumn( $tbl_is_view, $db_is_system_schema, @@ -1979,17 +1976,14 @@ function PMA_getHtmlForActionRowInStructureTable($type, $tbl_storage_engine, function PMA_getHtmlForFullTextAction($tbl_storage_engine, $type, $url_query, $row, $titles ) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $html_output = '<li class="fulltext nowrap">'; if (! empty($tbl_storage_engine) && ($tbl_storage_engine == 'MYISAM' || $tbl_storage_engine == 'ARIA' || $tbl_storage_engine == 'MARIA' || ($tbl_storage_engine == 'INNODB' && PMA_MYSQL_INT_VERSION >= 50604)) - && ($pmaString->strpos($type, 'text') !== false - || $pmaString->strpos($type, 'char') !== false) + && (/*overload*/mb_strpos($type, 'text') !== false + || /*overload*/mb_strpos($type, 'char') !== false) ) { $html_output .= '<a rel="samepage" href="sql.php' . $url_query . '&sql_query=' @@ -2606,7 +2600,7 @@ function PMA_updateColumns($db, $table) ) { foreach ($_REQUEST['field_mimetype'] as $fieldindex => $mimetype) { if (isset($_REQUEST['field_name'][$fieldindex]) - && $GLOBALS['PMA_String']->strlen( + && /*overload*/mb_strlen( $_REQUEST['field_name'][$fieldindex] ) ) { @@ -2679,7 +2673,7 @@ function PMA_moveColumns($db, $table) $changes[] = 'CHANGE ' . PMA_Table::generateAlter( $column, $column, - $GLOBALS['PMA_String']->strtoupper($extracted_columnspec['type']), + /*overload*/mb_strtoupper($extracted_columnspec['type']), $extracted_columnspec['spec_in_brackets'], $extracted_columnspec['attribute'], isset($data['Collation']) ? $data['Collation'] : '', diff --git a/libraries/sysinfo.lib.php b/libraries/sysinfo.lib.php index 2ff9caeead..61c005a5d7 100644 --- a/libraries/sysinfo.lib.php +++ b/libraries/sysinfo.lib.php @@ -235,13 +235,10 @@ class PMA_SysInfoLinux extends PMA_SysInfo */ function loadavg() { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $buf = file_get_contents('/proc/stat'); $nums = preg_split( "/\s+/", - $pmaString->substr($buf, 0, $pmaString->strpos($buf, "\n")) + /*overload*/mb_substr($buf, 0, /*overload*/mb_strpos($buf, "\n")) ); return Array( 'busy' => $nums[1] + $nums[2] + $nums[3], diff --git a/libraries/tbl_columns_definition_form.inc.php b/libraries/tbl_columns_definition_form.inc.php index ef9a12dc7c..5eaecdfd9d 100644 --- a/libraries/tbl_columns_definition_form.inc.php +++ b/libraries/tbl_columns_definition_form.inc.php @@ -127,9 +127,9 @@ for ($columnNumber = 0; $columnNumber < $num_fields; $columnNumber++) { // some types, for example longtext, are reported as // "longtext character set latin7" when their charset and / or collation // differs from the ones of the corresponding database. - $tmp = $pmaString->strpos($type, 'character set'); + $tmp = /*overload*/mb_strpos($type, 'character set'); if ($tmp) { - $type = $pmaString->substr($type, 0, $tmp - 1); + $type = /*overload*/mb_substr($type, 0, $tmp - 1); } // rtrim the type, for cases like "float unsigned" $type = rtrim($type); @@ -157,7 +157,7 @@ for ($columnNumber = 0; $columnNumber < $num_fields; $columnNumber++) { $content_cells[$columnNumber] = PMA_getHtmlForColumnAttributes( $columnNumber, isset($columnMeta) ? $columnMeta : array(), - $pmaString->strtoupper($type), $length_values_input_size, $length, + /*overload*/mb_strtoupper($type), $length_values_input_size, $length, isset($default_current_timestamp) ? $default_current_timestamp : null, isset($extracted_columnspec) ? $extracted_columnspec : null, isset($submit_attribute) ? $submit_attribute : null, diff --git a/libraries/tbl_columns_definition_form.lib.php b/libraries/tbl_columns_definition_form.lib.php index a03990527d..bb31e0ec9b 100644 --- a/libraries/tbl_columns_definition_form.lib.php +++ b/libraries/tbl_columns_definition_form.lib.php @@ -863,13 +863,10 @@ function PMA_getHtmlForColumnComment($columnNumber, $ci, $ci_offset, $columnMeta function PMA_getHtmlForColumnAutoIncrement($columnNumber, $ci, $ci_offset, $columnMeta ) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $html = '<input name="field_extra[' . $columnNumber . ']"' . ' id="field_' . $columnNumber . '_' . ($ci - $ci_offset) . '"'; if (isset($columnMeta['Extra']) - && $pmaString->strtolower($columnMeta['Extra']) == 'auto_increment' + && /*overload*/mb_strtolower($columnMeta['Extra']) == 'auto_increment' ) { $html .= ' checked="checked"'; } @@ -929,15 +926,12 @@ function PMA_getHtmlForColumnIndexes($columnNumber, $ci, $ci_offset, $columnMeta function PMA_getHtmlForIndexTypeOption($columnNumber, $columnMeta, $type, $key) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - - $html = '<option value="' . $pmaString->strtolower($type) . '_' . $columnNumber + $html = '<option value="' . /*overload*/mb_strtolower($type) . '_' . $columnNumber . '" title="' . __($type) . '"'; if (isset($columnMeta['Key']) && $columnMeta['Key'] == $key) { $html .= ' selected="selected"'; } - $html .= '>' . $pmaString->strtoupper($type) . '</option>'; + $html .= '>' . /*overload*/mb_strtoupper($type) . '</option>'; return $html; } @@ -1032,15 +1026,12 @@ function PMA_getHtmlForColumnAttribute($columnNumber, $ci, $ci_offset, $default_current_timestamp = false; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $attribute_types = $GLOBALS['PMA_Types']->getAttributes(); $cnt_attribute_types = count($attribute_types); for ($j = 0; $j < $cnt_attribute_types; $j++) { $html .= ' <option value="' . $attribute_types[$j] . '"'; - $attrUpper = $pmaString->strtoupper($attribute); - if ($attrUpper == $pmaString->strtoupper($attribute_types[$j])) { + $attrUpper = /*overload*/mb_strtoupper($attribute); + if ($attrUpper == /*overload*/mb_strtoupper($attribute_types[$j])) { $html .= ' selected="selected"'; } $html .= '>' . $attribute_types[$j] . '</option>'; @@ -1368,19 +1359,16 @@ function PMA_getFormParamsForOldColumn( $form_params['field_orig[' . $columnNumber . ']'] = ''; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // old column type if (isset($columnMeta['Type'])) { // keep in uppercase because the new type will be in uppercase $form_params['field_type_orig[' . $columnNumber . ']'] - = $pmaString->strtoupper($type); + = /*overload*/mb_strtoupper($type); if (isset($columnMeta['column_status']) && !$columnMeta['column_status']['isEditable'] ) { $form_params['field_type[' . $columnNumber . ']'] - = $pmaString->strtoupper($type); + = /*overload*/mb_strtoupper($type); } } else { $form_params['field_type_orig[' . $columnNumber . ']'] = ''; diff --git a/libraries/tbl_indexes.lib.php b/libraries/tbl_indexes.lib.php index c57f37f994..c636df5ee7 100644 --- a/libraries/tbl_indexes.lib.php +++ b/libraries/tbl_indexes.lib.php @@ -19,13 +19,10 @@ if (! defined('PHPMYADMIN')) { */ function PMA_getNameAndTypeOfTheColumns($db, $table) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $columns = array(); foreach ($GLOBALS['dbi']->getColumnsFull($db, $table) as $row) { if (preg_match('@^(set|enum)\((.+)\)$@i', $row['Type'], $tmp)) { - $tmp[2] = $pmaString->substr( + $tmp[2] = /*overload*/mb_substr( preg_replace('@([^,])\'\'@', '\\1\\\'', ',' . $tmp[2]), 1 ); $columns[$row['Field']] = $tmp[1] . '(' diff --git a/libraries/tbl_info.inc.php b/libraries/tbl_info.inc.php index 58eb69c633..9000ae0523 100644 --- a/libraries/tbl_info.inc.php +++ b/libraries/tbl_info.inc.php @@ -64,7 +64,7 @@ if ($showtable) { } else { $tbl_is_view = false; $tbl_storage_engine = isset($showtable['Engine']) - ? $pmaString->strtoupper($showtable['Engine']) + ? /*overload*/mb_strtoupper($showtable['Engine']) : ''; $show_comment = ''; if (isset($showtable['Comment'])) { @@ -100,7 +100,7 @@ if ($showtable) { } } // we need explicit DEFAULT value here (different from '0') - $pack_keys = (! isset($pack_keys) || $pmaString->strlen($pack_keys) == 0) + $pack_keys = (! isset($pack_keys) || /*overload*/mb_strlen($pack_keys) == 0) ? 'DEFAULT' : $pack_keys; unset($create_options, $each_create_option); diff --git a/libraries/tbl_relation.lib.php b/libraries/tbl_relation.lib.php index 38e96b4c9a..cf4e443579 100644 --- a/libraries/tbl_relation.lib.php +++ b/libraries/tbl_relation.lib.php @@ -48,25 +48,22 @@ function PMA_generateDropdown( */ function PMA_backquoteSplit($text) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $elements = array(); - $final_pos = $pmaString->strlen($text) - 1; + $final_pos = /*overload*/mb_strlen($text) - 1; $pos = 0; while ($pos <= $final_pos) { - $first_backquote = $pmaString->strpos($text, '`', $pos); - $second_backquote = $pmaString->strpos($text, '`', $first_backquote + 1); + $first_backquote = /*overload*/mb_strpos($text, '`', $pos); + $second_backquote = /*overload*/mb_strpos($text, '`', $first_backquote + 1); // after the second one, there might be another one which means // this is an escaped backquote if ($second_backquote < $final_pos && '`' == $text[$second_backquote + 1]) { $second_backquote - = $pmaString->strpos($text, '`', $second_backquote + 2); + = /*overload*/mb_strpos($text, '`', $second_backquote + 2); } if (false === $first_backquote || false === $second_backquote) { break; } - $elements[] = $pmaString->substr( + $elements[] = /*overload*/mb_substr( $text, $first_backquote, $second_backquote - $first_backquote + 1 ); $pos = $second_backquote + 1; @@ -555,9 +552,6 @@ function PMA_getHtmlForForeignKeyRow($one_key, $odd_row, $columns, $i, $foreign_table = isset($one_key['ref_table_name']) ? $one_key['ref_table_name'] : ''; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // In Drizzle, 'SHOW TABLE STATUS' will show status only for the tables // which are currently in the table cache. Hence we have to use // 'SHOW TABLES' and manully retrieve table engine values. @@ -574,7 +568,7 @@ function PMA_getHtmlForForeignKeyRow($one_key, $odd_row, $columns, $i, 'Engine' ); if (isset($engine) - && $pmaString->strtoupper($engine) == $tbl_storage_engine + && /*overload*/mb_strtoupper($engine) == $tbl_storage_engine ) { $tables[] = $row[0]; } @@ -587,7 +581,7 @@ function PMA_getHtmlForForeignKeyRow($one_key, $odd_row, $columns, $i, ); while ($row = $GLOBALS['dbi']->fetchRow($tables_rs)) { if (isset($row[1]) - && $pmaString->strtoupper($row[1]) == $tbl_storage_engine + && /*overload*/mb_strtoupper($row[1]) == $tbl_storage_engine ) { $tables[] = $row[0]; } @@ -738,15 +732,12 @@ function PMA_sendHtmlForColumnDropdownList() */ function PMA_sendHtmlForTableDropdownList() { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $response = PMA_Response::getInstance(); $tables = array(); $foreign = isset($_REQUEST['foreign']) && $_REQUEST['foreign'] === 'true'; if ($foreign) { - $tbl_storage_engine = $pmaString->strtoupper( + $tbl_storage_engine = /*overload*/mb_strtoupper( PMA_Table::sGetStatusInfo( $_REQUEST['db'], $_REQUEST['table'], @@ -769,7 +760,7 @@ function PMA_sendHtmlForTableDropdownList() while ($row = $GLOBALS['dbi']->fetchArray($tables_rs)) { if (isset($row['Engine']) - && $pmaString->strtoupper($row['Engine']) == $tbl_storage_engine + && /*overload*/mb_strtoupper($row['Engine']) == $tbl_storage_engine ) { $tables[] = htmlspecialchars($row['Name']); } @@ -784,7 +775,7 @@ function PMA_sendHtmlForTableDropdownList() ); while ($row = $GLOBALS['dbi']->fetchArray($tables_rs)) { if ($foreign && PMA_DRIZZLE) { - $engine = $pmaString->strtoupper( + $engine = /*overload*/mb_strtoupper( PMA_Table::sGetStatusInfo( $_REQUEST['foreignDb'], $row[0], @@ -1154,7 +1145,7 @@ function PMA_handleUpdateForForeignKey($multi_edit_columns_name, $master_field_m if (! empty($tmp_error_create)) { $seen_error = true; - if ($GLOBALS['PMA_String']->substr($tmp_error_create, 1, 4) == '1005') { + if (substr($tmp_error_create, 1, 4) == '1005') { $message = PMA_Message::error( __('Error creating foreign key on %1$s (check data types)') ); diff --git a/libraries/tracking.lib.php b/libraries/tracking.lib.php index 35cd8698bf..a099f0ffd1 100644 --- a/libraries/tracking.lib.php +++ b/libraries/tracking.lib.php @@ -51,9 +51,6 @@ function PMA_filterTracking( function PMA_getHtmlForDataDefinitionAndManipulationStatements($url_query, $last_version ) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $html = '<div id="div_create_version">'; $html .= '<form method="post" action="tbl_tracking.php' . $url_query . '">'; $html .= PMA_URL_getHiddenInputs($GLOBALS['db'], $GLOBALS['table']); @@ -70,63 +67,63 @@ function PMA_getHtmlForDataDefinitionAndManipulationStatements($url_query, $html .= '<p>' . __('Track these data definition statements:') . '</p>'; $html .= '<input type="checkbox" name="alter_table" value="true"' - . ($pmaString->stripos( + . (/*overload*/mb_stripos( $GLOBALS['cfg']['Server']['tracking_default_statements'], 'ALTER TABLE' ) !== false ? ' checked="checked"' : '') . ' /> ALTER TABLE<br/>'; $html .= '<input type="checkbox" name="rename_table" value="true"' - . ($pmaString->stripos( + . (/*overload*/mb_stripos( $GLOBALS['cfg']['Server']['tracking_default_statements'], 'RENAME TABLE' ) !== false ? ' checked="checked"' : '') . ' /> RENAME TABLE<br/>'; $html .= '<input type="checkbox" name="create_table" value="true"' - . ($pmaString->stripos( + . (/*overload*/mb_stripos( $GLOBALS['cfg']['Server']['tracking_default_statements'], 'CREATE TABLE' ) !== false ? ' checked="checked"' : '') . ' /> CREATE TABLE<br/>'; $html .= '<input type="checkbox" name="drop_table" value="true"' - . ($pmaString->stripos( + . (/*overload*/mb_stripos( $GLOBALS['cfg']['Server']['tracking_default_statements'], 'DROP TABLE' ) !== false ? ' checked="checked"' : '') . ' /> DROP TABLE<br/>'; $html .= '<br/>'; $html .= '<input type="checkbox" name="create_index" value="true"' - . ($pmaString->stripos( + . (/*overload*/mb_stripos( $GLOBALS['cfg']['Server']['tracking_default_statements'], 'CREATE INDEX' ) !== false ? ' checked="checked"' : '') . ' /> CREATE INDEX<br/>'; $html .= '<input type="checkbox" name="drop_index" value="true"' - . ($pmaString->stripos( + . (/*overload*/mb_stripos( $GLOBALS['cfg']['Server']['tracking_default_statements'], 'DROP INDEX' ) !== false ? ' checked="checked"' : '') . ' /> DROP INDEX<br/>'; $html .= '<p>' . __('Track these data manipulation statements:') . '</p>'; $html .= '<input type="checkbox" name="insert" value="true"' - . ($pmaString->stripos( + . (/*overload*/mb_stripos( $GLOBALS['cfg']['Server']['tracking_default_statements'], 'INSERT' ) !== false ? ' checked="checked"' : '') . ' /> INSERT<br/>'; $html .= '<input type="checkbox" name="update" value="true"' - . ($pmaString->stripos( + . (/*overload*/mb_stripos( $GLOBALS['cfg']['Server']['tracking_default_statements'], 'UPDATE' ) !== false ? ' checked="checked"' : '') . ' /> UPDATE<br/>'; $html .= '<input type="checkbox" name="delete" value="true"' - . ($pmaString->stripos( + . (/*overload*/mb_stripos( $GLOBALS['cfg']['Server']['tracking_default_statements'], 'DELETE' ) !== false ? ' checked="checked"' : '') . ' /> DELETE<br/>'; $html .= '<input type="checkbox" name="truncate" value="true"' - . ($pmaString->stripos( + . (/*overload*/mb_stripos( $GLOBALS['cfg']['Server']['tracking_default_statements'], 'TRUNCATE' ) !== false ? ' checked="checked"' : '') @@ -802,11 +799,8 @@ function PMA_getHtmlForSchemaSnapshot($url_query) // Get first DROP TABLE/VIEW and CREATE TABLE/VIEW statements $drop_create_statements = $data['ddlog'][0]['statement']; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - - if ($pmaString->strstr($data['ddlog'][0]['statement'], 'DROP TABLE') - || $pmaString->strstr($data['ddlog'][0]['statement'], 'DROP VIEW') + if (/*overload*/mb_strstr($data['ddlog'][0]['statement'], 'DROP TABLE') + || /*overload*/mb_strstr($data['ddlog'][0]['statement'], 'DROP VIEW') ) { $drop_create_statements .= $data['ddlog'][1]['statement']; } @@ -1155,7 +1149,7 @@ function PMA_exportAsFileDownload($entries) PMA_downloadHeader( $filename, 'text/x-sql', - $GLOBALS['PMA_String']->strlen($dump) + /*overload*/mb_strlen($dump) ); $response = PMA_Response::getInstance(); diff --git a/libraries/transformations.lib.php b/libraries/transformations.lib.php index 8fdcea41ac..5f828d401e 100644 --- a/libraries/transformations.lib.php +++ b/libraries/transformations.lib.php @@ -41,10 +41,7 @@ function PMA_Transformation_getOptions($option_string) { $result = array(); - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - - if (! $pmaString->strlen($option_string) + if (! /*overload*/mb_strlen($option_string) || ! $transform_options = preg_split('/,/', $option_string) ) { return $result; @@ -52,12 +49,12 @@ function PMA_Transformation_getOptions($option_string) while (($option = array_shift($transform_options)) !== null) { $trimmed = trim($option); - if ($pmaString->strlen($trimmed) > 1 + if (/*overload*/mb_strlen($trimmed) > 1 && $trimmed[0] == "'" - && $trimmed[$pmaString->strlen($trimmed) - 1] == "'" + && $trimmed[/*overload*/mb_strlen($trimmed) - 1] == "'" ) { // '...' - $option = $pmaString->substr($trimmed, 1, -1); + $option = /*overload*/mb_substr($trimmed, 1, -1); } elseif (isset($trimmed[0]) && $trimmed[0] == "'") { // '..., $trimmed = ltrim($option); @@ -65,12 +62,12 @@ function PMA_Transformation_getOptions($option_string) // ..., $trimmed .= ',' . $option; $rtrimmed = rtrim($trimmed); - if ($rtrimmed[$pmaString->strlen($rtrimmed) - 1] == "'") { + if ($rtrimmed[/*overload*/mb_strlen($rtrimmed) - 1] == "'") { // ,...' break; } } - $option = $pmaString->substr($rtrimmed, 1, -1); + $option = /*overload*/mb_substr($rtrimmed, 1, -1); } $result[] = stripslashes($option); } @@ -293,12 +290,9 @@ function PMA_setMIME($db, $table, $key, $mimetype, $transformation, return false; } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - // lowercase mimetype & transformation - $mimetype = $pmaString->strtolower($mimetype); - $transformation = $pmaString->strtolower($transformation); + $mimetype = /*overload*/mb_strtolower($mimetype); + $transformation = /*overload*/mb_strtolower($transformation); $test_qry = ' SELECT `mimetype`, @@ -318,9 +312,9 @@ function PMA_setMIME($db, $table, $key, $mimetype, $transformation, $GLOBALS['dbi']->freeResult($test_rs); if (! $forcedelete - && ($pmaString->strlen($mimetype) || $pmaString->strlen($transformation) - || $pmaString->strlen($transformationOpts) - || $pmaString->strlen($row['comment'])) + && (/*overload*/mb_strlen($mimetype) || /*overload*/mb_strlen($transformation) + || /*overload*/mb_strlen($transformationOpts) + || /*overload*/mb_strlen($row['comment'])) ) { $upd_query = 'UPDATE ' . PMA_Util::backquote($cfgRelation['db']) . '.' . PMA_Util::backquote($cfgRelation['column_info']) @@ -343,9 +337,9 @@ function PMA_setMIME($db, $table, $key, $mimetype, $transformation, WHERE `db_name` = \'' . PMA_Util::sqlAddSlashes($db) . '\' AND `table_name` = \'' . PMA_Util::sqlAddSlashes($table) . '\' AND `column_name` = \'' . PMA_Util::sqlAddSlashes($key) . '\''; - } elseif ($pmaString->strlen($mimetype) - || $pmaString->strlen($transformation) - || $pmaString->strlen($transformationOpts) + } elseif (/*overload*/mb_strlen($mimetype) + || /*overload*/mb_strlen($transformation) + || /*overload*/mb_strlen($transformationOpts) ) { $upd_query = 'INSERT INTO ' . PMA_Util::backquote($cfgRelation['db']) diff --git a/libraries/url_generating.lib.php b/libraries/url_generating.lib.php index ffb37085c2..0641f5aa33 100644 --- a/libraries/url_generating.lib.php +++ b/libraries/url_generating.lib.php @@ -42,14 +42,11 @@ function PMA_URL_getHiddenInputs($db = '', $table = '', $indent =& $_indent; $skip =& $_skip; } else { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $params = array(); - if ($pmaString->strlen($db)) { + if (/*overload*/mb_strlen($db)) { $params['db'] = $db; } - if ($pmaString->strlen($table)) { + if (/*overload*/mb_strlen($table)) { $params['table'] = $table; } } @@ -229,18 +226,15 @@ function PMA_URL_getArgSeparator($encode = 'none') static $separator = null; static $html_separator = null; - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - if (null === $separator) { // use separators defined by php, but prefer ';' // as recommended by W3C // (see http://www.w3.org/TR/1999/REC-html401-19991224/appendix // /notes.html#h-B.2.2) $arg_separator = ini_get('arg_separator.input'); - if ($pmaString->strpos($arg_separator, ';') !== false) { + if (/*overload*/mb_strpos($arg_separator, ';') !== false) { $separator = ';'; - } elseif ($pmaString->strlen($arg_separator) > 0) { + } elseif (/*overload*/mb_strlen($arg_separator) > 0) { $separator = $arg_separator{0}; } else { $separator = '&'; diff --git a/prefs_manage.php b/prefs_manage.php index 7291ad3f58..86bc6c7fa4 100644 --- a/prefs_manage.php +++ b/prefs_manage.php @@ -176,12 +176,12 @@ if (isset($_POST['submit_export']) $pmaString = $GLOBALS['PMA_String']; foreach ($query as $q) { - $pos = $pmaString->strpos($q, '='); - $k = $pmaString->substr($q, 0, $pos); + $pos = /*overload*/mb_strpos($q, '='); + $k = /*overload*/mb_substr($q, 0, $pos); if ($k == 'token') { continue; } - $params[$k] = $pmaString->substr($q, $pos+1); + $params[$k] = /*overload*/mb_substr($q, $pos+1); } } else { $return_url = 'prefs_manage.php'; diff --git a/scripts/decode_bug.php b/scripts/decode_bug.php index 6334f2377a..80f79da3ac 100644 --- a/scripts/decode_bug.php +++ b/scripts/decode_bug.php @@ -87,7 +87,7 @@ if (!empty($bug_encoded) && is_string($bug_encoded)) { $bug_encoded = preg_replace('/[[:space:]]/', '', $bug_encoded); $bug_decoded = base64_decode($bug_encoded); - if ($pmaString->substr($bug_encoded, 0, 2) == 'eN') { + if (/*overload*/mb_substr($bug_encoded, 0, 2) == 'eN') { if (function_exists('gzuncompress')) { $result = PMA_printDecodedBug(gzuncompress($bug_decoded)); } else { diff --git a/setup/frames/index.inc.php b/setup/frames/index.inc.php index 16823da658..c291c3c327 100644 --- a/setup/frames/index.inc.php +++ b/setup/frames/index.inc.php @@ -65,7 +65,7 @@ if (!$config_writable || !$config_readable) { // Check https connection // $is_https = !empty($_SERVER['HTTPS']) - && $GLOBALS['PMA_String']->strtolower($_SERVER['HTTPS']) == 'on'; + && /*overload*/mb_strtolower($_SERVER['HTTPS']) == 'on'; if (!$is_https) { $text = __( 'You are not using a secure connection; all data (including potentially ' diff --git a/setup/lib/ConfigGenerator.class.php b/setup/lib/ConfigGenerator.class.php index 07a6a65fc0..af83025691 100644 --- a/setup/lib/ConfigGenerator.class.php +++ b/setup/lib/ConfigGenerator.class.php @@ -71,7 +71,7 @@ class ConfigGenerator } // keep 1d array keys which are present in $persist_keys (config.values.php) foreach (array_keys($persistKeys) as $k) { - if ($GLOBALS['PMA_String']->strpos($k, '/') === false) { + if (/*overload*/mb_strpos($k, '/') === false) { $k = preg_replace('/[^A-Za-z0-9_]/', '_', $k); $ret .= self::_getVarExport($k, $cf->getDefault($k), $crlf); } @@ -61,9 +61,9 @@ if (! empty($goto)) { $pmaString = $GLOBALS['PMA_String']; if (! isset($err_url)) { $err_url = (! empty($back) ? $back : $goto) - . PMA_URL_getCommon(array('db' => $GLOBALS['db'])) - . (($pmaString->strpos(' ' . $goto, 'db_') != 1 - && $pmaString->strlen($table)) + . '?' . PMA_URL_getCommon(array('db' => $GLOBALS['db'])) + . ((/*overload*/mb_strpos(' ' . $goto, 'db_') != 1 + && /*overload*/mb_strlen($table)) ? '&table=' . urlencode($table) : '' ); @@ -113,7 +113,7 @@ if (isset($_REQUEST['set_col_prefs']) && $_REQUEST['set_col_prefs'] == true) { // Default to browse if no query set and we have table // (needed for browsing from DefaultTabTable) -if (empty($sql_query) && $pmaString->strlen($table) && $pmaString->strlen($db)) { +if (empty($sql_query) && /*overload*/mb_strlen($table) && /*overload*/mb_strlen($db)) { $sql_query = PMA_getDefaultSqlQueryForBrowse($db, $table); // set $goto to what will be displayed if query returns 0 rows diff --git a/tbl_addfield.php b/tbl_addfield.php index f2d503738b..01b104c656 100644 --- a/tbl_addfield.php +++ b/tbl_addfield.php @@ -70,7 +70,7 @@ if (isset($_REQUEST['do_save_data'])) { $pmaString = $GLOBALS['PMA_String']; foreach ($_REQUEST['field_mimetype'] as $fieldindex => $mimetype) { if (isset($_REQUEST['field_name'][$fieldindex]) - && $pmaString->strlen($_REQUEST['field_name'][$fieldindex]) + && /*overload*/mb_strlen($_REQUEST['field_name'][$fieldindex]) ) { PMA_setMIME( $db, $table, diff --git a/tbl_change.php b/tbl_change.php index 67472fa9a1..7b8c3e9ad0 100644 --- a/tbl_change.php +++ b/tbl_change.php @@ -47,7 +47,7 @@ require_once 'libraries/file_listing.lib.php'; * (at this point, $GLOBALS['goto'] will be set but could be empty) */ if (empty($GLOBALS['goto'])) { - if ($GLOBALS['PMA_String']->strlen($table)) { + if (/*overload*/mb_strlen($table)) { // avoid a problem (see bug #2202709) $GLOBALS['goto'] = 'tbl_sql.php'; } else { diff --git a/tbl_chart.php b/tbl_chart.php index 6d5f316c30..f9609c9094 100644 --- a/tbl_chart.php +++ b/tbl_chart.php @@ -21,7 +21,7 @@ if (isset($_REQUEST['ajax_request']) ) { $response = PMA_Response::getInstance(); - if ($pmaString->strlen($GLOBALS['table']) && $pmaString->strlen($GLOBALS['db']) + if (/*overload*/mb_strlen($GLOBALS['table']) && /*overload*/mb_strlen($GLOBALS['db']) ) { include './libraries/tbl_common.inc.php'; } @@ -81,12 +81,12 @@ $scripts->addFile('jqplot/plugins/jqplot.highlighter.js'); /** * Runs common work */ -if ($pmaString->strlen($GLOBALS['table'])) { +if (/*overload*/mb_strlen($GLOBALS['table'])) { $url_params['goto'] = $cfg['DefaultTabTable']; $url_params['back'] = 'tbl_sql.php'; include 'libraries/tbl_common.inc.php'; include 'libraries/tbl_info.inc.php'; -} elseif ($pmaString->strlen($GLOBALS['db'])) { +} elseif (/*overload*/mb_strlen($GLOBALS['db'])) { $url_params['goto'] = $cfg['DefaultTabDatabase']; $url_params['back'] = 'sql.php'; include 'libraries/db_common.inc.php'; diff --git a/tbl_create.php b/tbl_create.php index 799a063c21..ebbef95151 100644 --- a/tbl_create.php +++ b/tbl_create.php @@ -19,7 +19,7 @@ PMA_Util::checkParameters(array('db')); $pmaString = $GLOBALS['PMA_String']; /* Check if database name is empty */ -if ($pmaString->strlen($db) == 0) { +if (/*overload*/mb_strlen($db) == 0) { PMA_Util::mysqlDie( __('The database name is empty!'), '', false, 'index.php' ); @@ -76,7 +76,7 @@ if (isset($_REQUEST['do_save_data'])) { ) { foreach ($_REQUEST['field_mimetype'] as $fieldindex => $mimetype) { if (isset($_REQUEST['field_name'][$fieldindex]) - && $pmaString->strlen($_REQUEST['field_name'][$fieldindex]) + && /*overload*/mb_strlen($_REQUEST['field_name'][$fieldindex]) ) { PMA_setMIME( $db, $table, diff --git a/tbl_get_field.php b/tbl_get_field.php index be42d20cbe..1ec3c5a8f9 100644 --- a/tbl_get_field.php +++ b/tbl_get_field.php @@ -49,7 +49,7 @@ if ($result === false) { PMA_downloadHeader( $table . '-' . $_GET['transform_key'] . '.bin', PMA_detectMIME($result), - $GLOBALS['PMA_String']->strlen($result) + /*overload*/mb_strlen($result) ); echo $result; ?> diff --git a/tbl_operations.php b/tbl_operations.php index 7da47c1fbf..6a4773ed72 100644 --- a/tbl_operations.php +++ b/tbl_operations.php @@ -113,7 +113,7 @@ if (isset($_REQUEST['submitoptions'])) { } if (! empty($_REQUEST['new_tbl_storage_engine']) - && $pmaString->strtolower($_REQUEST['new_tbl_storage_engine']) !== $pmaString->strtolower($tbl_storage_engine) + && /*overload*/mb_strtolower($_REQUEST['new_tbl_storage_engine']) !== /*overload*/mb_strtolower($tbl_storage_engine) ) { $new_tbl_storage_engine = $_REQUEST['new_tbl_storage_engine']; // reset the globals for the new engine @@ -277,8 +277,8 @@ if (! $hideOrderTable) { */ $response->addHTML(PMA_getHtmlForMoveTable()); -if ($pmaString->strstr($show_comment, '; InnoDB free') === false) { - if ($pmaString->strstr($show_comment, 'InnoDB free') === false) { +if (/*overload*/mb_strstr($show_comment, '; InnoDB free') === false) { + if (/*overload*/mb_strstr($show_comment, 'InnoDB free') === false) { // only user entered comment $comment = $show_comment; } else { diff --git a/tbl_printview.php b/tbl_printview.php index f3f62b3c25..4d55d7d5c5 100644 --- a/tbl_printview.php +++ b/tbl_printview.php @@ -37,10 +37,10 @@ $pmaString = $GLOBALS['PMA_String']; /** * Defines the url to return to in case of error in a sql statement */ -if ($pmaString->strlen($table)) { - $err_url = 'tbl_sql.php' . PMA_URL_getCommon(array( - 'db' => $db, 'table' => $table - )); +if (/*overload*/mb_strlen($table)) { + $err_url = 'tbl_sql.php?' . PMA_URL_getCommon(array( + 'db' => $db, 'table' => $table + )); } else { $err_url = 'db_sql.php' . PMA_URL_getCommon(array('db' => $db)); } @@ -56,7 +56,7 @@ $GLOBALS['dbi']->selectDb($db); */ if (isset($_POST['selected_tbl']) && is_array($_POST['selected_tbl'])) { $the_tables = $_POST['selected_tbl']; -} elseif ($pmaString->strlen($table)) { +} elseif (/*overload*/mb_strlen($table)) { $the_tables[] = $table; } diff --git a/test/classes/PMA_Config_test.php b/test/classes/PMA_Config_test.php index 9ae5c91e19..b6a124c725 100644 --- a/test/classes/PMA_Config_test.php +++ b/test/classes/PMA_Config_test.php @@ -341,13 +341,10 @@ class PMA_ConfigTest extends PHPUnit_Framework_TestCase ); } - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - if (@function_exists('gd_info')) { $this->object->checkGd2(); $gd_nfo = gd_info(); - if ($pmaString->strstr($gd_nfo["GD Version"], '2.')) { + if (/*overload*/mb_strstr($gd_nfo["GD Version"], '2.')) { $this->assertEquals( 1, $this->object->get('PMA_IS_GD2'), @@ -369,7 +366,7 @@ class PMA_ConfigTest extends PHPUnit_Framework_TestCase ob_end_clean(); if (preg_match('@GD Version[[:space:]]*\(.*\)@', $a, $v)) { - if ($pmaString->strstr($v, '2.')) { + if (/*overload*/mb_strstr($v, '2.')) { $this->assertEquals( 1, $this->object->get('PMA_IS_GD2'), diff --git a/test/classes/PMA_DisplayResults_test.php b/test/classes/PMA_DisplayResults_test.php index 956fb589cf..b6ad12a03a 100644 --- a/test/classes/PMA_DisplayResults_test.php +++ b/test/classes/PMA_DisplayResults_test.php @@ -16,6 +16,7 @@ require_once 'libraries/js_escape.lib.php'; require_once 'libraries/core.lib.php'; require_once 'libraries/Config.class.php'; require_once 'libraries/relation.lib.php'; +require_once 'libraries/string.lib.php'; require_once 'libraries/String.class.php'; require_once 'libraries/plugins/transformations/Text_Plain_Link.class.php'; require_once 'libraries/DatabaseInterface.class.php'; diff --git a/test/classes/plugin/auth/PMA_AuthenticationCookie_test.php b/test/classes/plugin/auth/PMA_AuthenticationCookie_test.php index 0e247bd709..841fb424ce 100644 --- a/test/classes/plugin/auth/PMA_AuthenticationCookie_test.php +++ b/test/classes/plugin/auth/PMA_AuthenticationCookie_test.php @@ -1027,7 +1027,7 @@ class PMA_AuthenticationCookie_Test extends PHPUnit_Framework_TestCase $this->assertEquals( 256, - $GLOBALS['PMA_String']->strlen($result) + /*overload*/mb_strlen($result) ); // case 2 diff --git a/test/classes/plugin/import/ImportCsv_test.php b/test/classes/plugin/import/ImportCsv_test.php index e4429feb67..f8cd066251 100644 --- a/test/classes/plugin/import/ImportCsv_test.php +++ b/test/classes/plugin/import/ImportCsv_test.php @@ -34,6 +34,7 @@ require_once 'libraries/plugins/import/ImportCsv.class.php'; class ImportCsv_Test extends PHPUnit_Framework_TestCase { /** + * @var ImportCsv * @access protected */ protected $object; diff --git a/test/libraries/PMA_central_columns_test.php b/test/libraries/PMA_central_columns_test.php index a9abff3683..eba1b9595c 100644 --- a/test/libraries/PMA_central_columns_test.php +++ b/test/libraries/PMA_central_columns_test.php @@ -344,9 +344,6 @@ class PMA_Central_Columns_Test extends PHPUnit_Framework_TestCase */ public function testPMAGetHTMLforCentralColumnsTableRow() { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - $row = array( 'col_name'=>'col_test', 'col_type'=>'int', @@ -372,7 +369,7 @@ class PMA_Central_Columns_Test extends PHPUnit_Framework_TestCase ); $this->assertContains( PMA_getHtmlForColumnDefault( - 1, 5, 0, $pmaString->strtoupper($row['col_type']), '', + 1, 5, 0, /*overload*/mb_strtoupper($row['col_type']), '', array('DefaultType'=>'NONE') ), $result @@ -383,7 +380,7 @@ class PMA_Central_Columns_Test extends PHPUnit_Framework_TestCase ); $this->assertContains( PMA_getHtmlForColumnDefault( - 1, 5, 0, $pmaString->strtoupper($row['col_type']), '', + 1, 5, 0, /*overload*/mb_strtoupper($row['col_type']), '', array('DefaultType'=>'USER_DEFINED', 'DefaultValue'=>100) ), $result_1 @@ -394,7 +391,7 @@ class PMA_Central_Columns_Test extends PHPUnit_Framework_TestCase ); $this->assertContains( PMA_getHtmlForColumnDefault( - 1, 5, 0, $pmaString->strtoupper($row['col_type']), '', + 1, 5, 0, /*overload*/mb_strtoupper($row['col_type']), '', array('DefaultType'=>'CURRENT_TIMESTAMP') ), $result_2 diff --git a/test/libraries/PMA_display_export_test.php b/test/libraries/PMA_display_export_test.php index 27c550cf41..56497db5dd 100644 --- a/test/libraries/PMA_display_export_test.php +++ b/test/libraries/PMA_display_export_test.php @@ -339,7 +339,7 @@ class PMA_DisplayExport_Test extends PHPUnit_Framework_TestCase ); $name_attr = 'aliases[test\'_db][tables][test_<b>table][alias]'; - $id_attr = $GLOBALS['PMA_String']->substr(md5($name_attr), 0, 12); + $id_attr = /*overload*/mb_substr(md5($name_attr), 0, 12); $this->assertContains( '<input type="text" value="" name="' . $name_attr . '" ' diff --git a/test/libraries/PMA_relation_cleanup_test.php b/test/libraries/PMA_relation_cleanup_test.php index b2a74351c5..3fdb57bf47 100644 --- a/test/libraries/PMA_relation_cleanup_test.php +++ b/test/libraries/PMA_relation_cleanup_test.php @@ -379,30 +379,27 @@ class DBI_PMA_Relation_Cleanup extends PMA_DatabaseInterface */ function query($sql, $link = null, $options = 0, $cache_affected_rows = true) { - /** @var PMA_String $pmaString */ - $pmaString = $GLOBALS['PMA_String']; - - if ($pmaString->stripos($sql, "column_info") !== false) { + if (/*overload*/mb_stripos($sql, "column_info") !== false) { unset($this->values[$this->indexs['column_info']]); } - if ($pmaString->stripos($sql, "table_info") !== false) { + if (/*overload*/mb_stripos($sql, "table_info") !== false) { unset ($this->values[$this->indexs['table_info']]); } - if ($pmaString->stripos($sql, "table_coords") !== false) { + if (/*overload*/mb_stripos($sql, "table_coords") !== false) { unset($this->values[$this->indexs['table_coords']]); } - if ($pmaString->stripos($sql, "relation") !== false) { + if (/*overload*/mb_stripos($sql, "relation") !== false) { unset($this->values[$this->indexs['relation']]); } - if ($pmaString->stripos($sql, "pdf_pages") !== false) { + if (/*overload*/mb_stripos($sql, "pdf_pages") !== false) { unset($GLOBALS [$this->indexs['pdf_pages']]); } - if ($pmaString->stripos($sql, "bookmark") !== false) { + if (/*overload*/mb_stripos($sql, "bookmark") !== false) { unset($GLOBALS [$this->indexs['bookmark']]); } return true; diff --git a/test/libraries/core/PMA_warnMissingExtension_test.php b/test/libraries/core/PMA_warnMissingExtension_test.php index 1cf4f28307..481f8fa5d8 100644 --- a/test/libraries/core/PMA_warnMissingExtension_test.php +++ b/test/libraries/core/PMA_warnMissingExtension_test.php @@ -89,6 +89,6 @@ class PMA_WarnMissingExtension_Test extends PHPUnit_Framework_TestCase $printed = ob_get_contents(); ob_end_clean(); - $this->assertGreaterThan(0, $GLOBALS['PMA_String']->strpos($printed, $warn)); + $this->assertGreaterThan(0, /*overload*/mb_strpos($printed, $warn)); } } diff --git a/test/libraries/stringMb_test.php b/test/libraries/stringMb_test.php new file mode 100644 index 0000000000..908ec881cb --- /dev/null +++ b/test/libraries/stringMb_test.php @@ -0,0 +1,103 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * tests for multibytes string library + * + * @package PhpMyAdmin-test + */ + +require_once 'test/libraries/string_test_abstract.php'; + +/** + * tests for multibytes string library + * + * @package PhpMyAdmin-test + */ +class PMA_StringMbTest extends PMA_StringTest +{ + /** + * Setup function for test cases + * + * @access protected + * @return void + */ + protected function setUp() + { + if (!@function_exists('mb_strlen')) { + $this->markTestSkipped( + "Multibyte functions don't exist, skipping test." + ); + } + require_once 'libraries/stringMb.lib.php'; + } + + /** + * Data provider for testStrlen + * + * @return array Test data + */ + public function providerStrlen() + { + return array_merge( + parent::providerStrlen(), + array(array(13, "chaîne testée")) + ); + } + + /** + * Data provider for testSubStr + * + * @return array Test data + */ + public function providerSubstr() + { + return array_merge( + parent::providerSubstr(), + array( + array("rçon", "garçon", 2, 4), + array("de ", "garçon de café", 7, 3) + ) + ); + } + + /** + * Data provider for testSubstrCount + * + * @return array Test data + */ + public function providerSubstrCount() + { + return array_merge( + parent::providerSubstrCount(), + array( + array(2, "garçon de café", "a"), + array(1, "garçon de café attristé", "ç"), + array(2, "garçon de café attristé", "é"), + array(1, "garçon de café attristé", "fé"), + ) + ); + } + + //providerSubstrCountException + + /** + * Data provider for testStrpos + * + * @return array Test data + */ + public function providerStrpos() + { + return array_merge( + parent::providerStrpos(), + array( + array(16, "garçon de café attristé", "t"), + array(13, "garçon de café attristé", "é"), + array(22, "garçon de café attristé", "é", 15), + ) + ); + } + + //providerStrpos + //providerStrrchr + //providerStrtolower +} diff --git a/test/libraries/stringNative_test.php b/test/libraries/stringNative_test.php new file mode 100644 index 0000000000..1de4dc794d --- /dev/null +++ b/test/libraries/stringNative_test.php @@ -0,0 +1,145 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * tests for standard string library + * + * @package PhpMyAdmin-test + */ + +require_once 'test/libraries/string_test_abstract.php'; + +/** + * tests for string library + * + * @package PhpMyAdmin-test + */ +class PMA_StringNativeTest extends PMA_StringTest +{ + /** + * Setup function for test cases + * + * @access protected + * @return void + */ + protected function setUp() + { + if (@function_exists('mb_strlen')) { + $this->markTestSkipped( + "Multibyte functions exist, can't test standard functions, skipping " + . "test." + ); + } + include_once 'libraries/stringNative.lib.php'; + } + + /** + * Data provider for testStrlen + * + * @return array Test data + */ + public function providerStrlen() + { + return array( + array(2, "ab"), + array(9, "test data"), + array(0, ""), + ); + } + + /** + * Data provider for testSubStr + * + * @return array Test data + */ + public function providerSubstr() + { + return array( + array("b", "ab", 1, 1), + array("data", "testdata", 4, 4) + ); + } + + /** + * Data provider for testSubstrCount + * + * @return array Test data + */ + public function providerSubstrCount() + { + return array( + array(1, "ab", "b"), + array(1, "testdata", "data"), + array(2, "testdata", "a"), + array(0, "testdata", "b"), + ); + } + + /** + * Data provider for testSubstrCountException + * + * @return array Test data + */ + public function providerSubstrCountException() + { + return array( + array("testdata", ""), + array("testdata", null), + array("testdata", false), + ); + } + + /** + * Data provider for testStrpos + * + * @return array Test data + */ + public function providerStrpos() + { + return array( + array(1, "ab", "b", 0), + array(4, "test data", " ", 0) + ); + } + + /** + * Data provider for testStrrchr + * + * @return array Test data + */ + public function providerStrrchr() + { + return array( + array('abcdef', 'abcdefabcdef', 'a'), + array(false, 'abcdefabcdef', 'A'), + array('f', 'abcdefabcdef', 'f'), + array(false, 'abcdefabcdef', 'z'), + array(false, 'abcdefabcdef', ''), + array(false, 'abcdefabcdef', false), + array(false, 'abcdefabcdef', true), + array(false, '789456123', true), + array(false, 'abcdefabcdef', null), + array(false, null, null), + array(false, null, 'a'), + array(false, null, '0'), + array(false, false, null), + array(false, false, 'a'), + array(false, false, '0'), + array(false, true, null), + array(false, true, 'a'), + array(false, true, '0'), + ); + } + + /** + * Data provider for testStrpos + * + * @return array Test data + */ + public function providerStrtolower() + { + return array( + array("mary had a", "Mary Had A"), + array("test string", "TEST STRING") + ); + } +} diff --git a/test/libraries/string_test_abstract.php b/test/libraries/string_test_abstract.php new file mode 100644 index 0000000000..a99afc050a --- /dev/null +++ b/test/libraries/string_test_abstract.php @@ -0,0 +1,259 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Abstract tests for string library with default set of tests + * + * @package PhpMyAdmin-test + */ + +/** + * tests for string library + * + * @package PhpMyAdmin-test + */ +abstract class PMA_StringTest extends PHPUnit_Framework_TestCase +{ + /** + * Test for mb_strlen + * + * @param integer $length Length of the string + * @param string $str String to check for + * + * @return void + * @test + * @dataProvider providerStrlen + */ + public function testStrlen($length, $str) + { + $this->assertEquals( + $length, + mb_strlen($str) + ); + } + + /** + * Data provider for testStrlen + * + * @return array Test data + */ + public function providerStrlen() + { + return array( + array(2, "ab"), + array(9, "test data"), + array(0, ""), + ); + } + + /** + * Test for PMA_StringNative::substr + * + * @param string $str Expected substring + * @param string $haystack String to check in + * @param int $start Starting position of substring + * @param int $length Length of substring + * + * @return void + * @test + * @dataProvider providerSubstr + */ + public function testSubStr($str, $haystack, $start, $length) + { + $this->assertEquals( + $str, + mb_substr($haystack, $start, $length) + ); + } + + /** + * Data provider for testSubStr + * + * @return array Test data + */ + public function providerSubstr() + { + return array( + array("b", "ab", 1, 1), + array("data", "testdata", 4, 4), + ); + } + + /** + * Test for PMA_StringNative::substrCount + * + * @param int $expected number of occurrences + * @param string $haystack string to check + * @param string $needle string to count + * + * @return void + * @test + * @dataProvider providerSubstrCount + */ + public function testSubstrCount($expected, $haystack, $needle) + { + $this->assertEquals( + $expected, + mb_substr_count($haystack, $needle) + ); + } + + /** + * Data provider for testSubstrCount + * + * @return array Test data + */ + public function providerSubstrCount() + { + return array( + array(1, "ab", "b"), + array(1, "testdata", "data"), + array(2, "testdata", "a"), + array(0, "testdata", "b"), + ); + } + + /** + * Test for PMA_StringNative::substrCount + * + * @param string $haystack string to check + * @param string $needle string to count + * + * @return void + * @test + * @dataProvider providerSubstrCountException + * + * @expectedException PHPUnit_Framework_Error + */ + public function testSubstrCountException($haystack, $needle) + { + //No test. We're waiting for an exception. + mb_substr_count($haystack, $needle); + } + + /** + * Data provider for testSubstrCountException + * + * @return array Test data + */ + public function providerSubstrCountException() + { + return array( + array("testdata", ""), + array("testdata", null), + array("testdata", false), + ); + } + + /** + * Test for PMA_StringNative::strpos + * + * @param int $pos Expected position + * @param string $haystack String to search in + * @param string $needle String to search for + * @param int $offset Search offset + * + * @return void + * @test + * @dataProvider providerStrpos + */ + public function testStrpos($pos, $haystack, $needle, $offset = 0) + { + $this->assertEquals( + $pos, + mb_strpos($haystack, $needle, $offset) + ); + } + + /** + * Data provider for testStrpos + * + * @return array Test data + */ + public function providerStrpos() + { + return array( + array(1, "ab", "b", 0), + array(4, "test data", " ", 0), + ); + } + + /** + * Test for PMA_StringNative::strrchr + * + * @param string $expected Expected substring + * @param string $haystack String to cut + * @param string $needle Searched string + * + * @return void + * @test + * @dataProvider providerStrrchr + */ + public function testStrrchr($expected, $haystack, $needle) + { + $this->assertEquals( + $expected, + mb_strrchr($haystack, $needle) + ); + } + + /** + * Data provider for testStrrchr + * + * @return array Test data + */ + public function providerStrrchr() + { + return array( + array('abcdef', 'abcdefabcdef', 'a'), + array(false, 'abcdefabcdef', 'A'), + array('f', 'abcdefabcdef', 'f'), + array(false, 'abcdefabcdef', 'z'), + array(false, 'abcdefabcdef', ''), + array(false, 'abcdefabcdef', false), + array(false, 'abcdefabcdef', true), + array('123', '789456123', true), + array(false, '7894560123', false), + array(false, 'abcdefabcdef', null), + array(false, null, null), + array(false, null, 'a'), + array(false, null, '0'), + array(false, false, null), + array(false, false, 'a'), + array(false, false, '0'), + array(false, true, null), + array(false, true, 'a'), + array(false, true, '0'), + ); + } + + /** + * Test for PMA_StringNative::strtolower + * + * @param string $expected Expected lowercased string + * @param string $string String to convert to lowercase + * + * @return void + * @test + * @dataProvider providerStrtolower + */ + public function testStrtolower($expected, $string) + { + $this->assertEquals( + $expected, + mb_strtolower($string) + ); + } + + /** + * Data provider for testStrtolower + * + * @return array Test data + */ + public function providerStrtolower() + { + return array( + array("mary had a", "Mary Had A"), + array("test string", "TEST STRING") + ); + } +} diff --git a/test/selenium/PmaSeleniumTableInsertTest.php b/test/selenium/PmaSeleniumTableInsertTest.php index 965ba1bff1..52598d1525 100644 --- a/test/selenium/PmaSeleniumTableInsertTest.php +++ b/test/selenium/PmaSeleniumTableInsertTest.php @@ -58,7 +58,7 @@ class PMA_SeleniumTableInsertTest extends PMA_SeleniumBase */ public function testAddData() { - if ($GLOBALS['PMA_String']->strtolower($this->getBrowser()) == 'safari') { + if (/*overload*/mb_strtolower($this->getBrowser()) == 'safari') { /* TODO: this should be fixed, but the cause is unclear to me */ $this->markTestIncomplete('Fails with Safari'); } diff --git a/test/selenium/PmaSeleniumXssTest.php b/test/selenium/PmaSeleniumXssTest.php index a1150dbe6a..e6cad9d1c1 100644 --- a/test/selenium/PmaSeleniumXssTest.php +++ b/test/selenium/PmaSeleniumXssTest.php @@ -27,7 +27,7 @@ class PMA_SeleniumXSSTest extends PMA_SeleniumBase */ public function testQueryTabWithNullValue() { - if ($GLOBALS['PMA_String']->strtolower($this->getBrowser()) == 'safari') { + if (/*overload*/mb_strtolower($this->getBrowser()) == 'safari') { $this->markTestSkipped('Alerts not supported on Safari browser.'); } $this->login(); diff --git a/test/selenium/TestBase.php b/test/selenium/TestBase.php index e1bb2687f2..c1dfebf885 100644 --- a/test/selenium/TestBase.php +++ b/test/selenium/TestBase.php @@ -186,7 +186,7 @@ abstract class PMA_SeleniumBase extends PHPUnit_Extensions_Selenium2TestCase ); } $this->database_name = $GLOBALS['TESTSUITE_DATABASE'] - . $GLOBALS['PMA_String']->substr(md5(rand()), 0, 7); + . /*overload*/mb_substr(md5(rand()), 0, 7); $this->dbQuery( 'CREATE DATABASE IF NOT EXISTS ' . $this->database_name ); @@ -463,7 +463,7 @@ abstract class PMA_SeleniumBase extends PHPUnit_Extensions_Selenium2TestCase * Not supported in Safari Webdriver, see * http://code.google.com/p/selenium/issues/detail?id=4136 */ - if ($GLOBALS['PMA_String']->strtolower($this->getBrowser()) == 'safari') { + if (/*overload*/mb_strtolower($this->getBrowser()) == 'safari') { $this->markTestSkipped('Can not send keys to Safari browser.'); } parent::keys($text); @@ -483,7 +483,7 @@ abstract class PMA_SeleniumBase extends PHPUnit_Extensions_Selenium2TestCase * Not supported in Safari Webdriver, see * http://code.google.com/p/selenium/issues/detail?id=4136 */ - if ($GLOBALS['PMA_String']->strtolower($this->getBrowser()) == 'safari') { + if (/*overload*/mb_strtolower($this->getBrowser()) == 'safari') { $this->markTestSkipped('MoveTo not supported on Safari browser.'); } parent::moveto($element); @@ -501,7 +501,7 @@ abstract class PMA_SeleniumBase extends PHPUnit_Extensions_Selenium2TestCase * Not supported in Safari Webdriver, see * http://code.google.com/p/selenium/issues/detail?id=4136 */ - if ($GLOBALS['PMA_String']->strtolower($this->getBrowser()) == 'safari') { + if (/*overload*/mb_strtolower($this->getBrowser()) == 'safari') { $this->markTestSkipped('Alerts not supported on Safari browser.'); } return parent::alertText(); @@ -520,7 +520,7 @@ abstract class PMA_SeleniumBase extends PHPUnit_Extensions_Selenium2TestCase * Firefox needs some escaping of a text, see * http://code.google.com/p/selenium/issues/detail?id=1723 */ - if ($GLOBALS['PMA_String']->strtolower($this->getBrowser()) == 'firefox') { + if (/*overload*/mb_strtolower($this->getBrowser()) == 'firefox') { $text = str_replace( "(", PHPUnit_Extensions_Selenium2TestCase_Keys::SHIFT diff --git a/transformation_wrapper.php b/transformation_wrapper.php index f1462143bc..ac0b04973d 100644 --- a/transformation_wrapper.php +++ b/transformation_wrapper.php @@ -77,7 +77,7 @@ if ($cfgRelation['commwork'] && $cfgRelation['mimework']) { ); foreach ($mime_options as $key => $option) { - if ($GLOBALS['PMA_String']->substr($option, 0, 10) == '; charset=') { + if (substr($option, 0, 10) == '; charset=') { $mime_options['charset'] = $option; } } |