Merge branch 'master' of github.com:phpmyadmin/phpmyadmin
This commit is contained in:
commit
9081189a9a
@ -3111,5 +3111,18 @@ class PMA_DatabaseInterface
|
||||
{
|
||||
return new PMA\SystemDatabase($this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a table with database name and table name
|
||||
*
|
||||
* @param $db_name
|
||||
* @param $table_name
|
||||
*
|
||||
* @return PMA_Table
|
||||
*/
|
||||
public function getTable($db_name, $table_name)
|
||||
{
|
||||
return new PMA_Table($table_name, $db_name, $this);
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
@ -26,16 +26,6 @@ class PMA_Table
|
||||
|
||||
static public $cache = array();
|
||||
|
||||
/**
|
||||
* @var string table name
|
||||
*/
|
||||
var $name = '';
|
||||
|
||||
/**
|
||||
* @var string database name
|
||||
*/
|
||||
var $db_name = '';
|
||||
|
||||
/**
|
||||
* @var string engine (innodb, myisam, bdb, ...)
|
||||
*/
|
||||
@ -66,14 +56,34 @@ class PMA_Table
|
||||
*/
|
||||
var $messages = array();
|
||||
|
||||
/**
|
||||
* @var string table name
|
||||
*/
|
||||
protected $_name = '';
|
||||
|
||||
/**
|
||||
* @var string database name
|
||||
*/
|
||||
protected $_db_name = '';
|
||||
|
||||
/**
|
||||
* @var PMA_DatabaseInterface
|
||||
*/
|
||||
protected $_dbi;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param string $table_name table name
|
||||
* @param string $db_name database name
|
||||
* @param string $db_name database name
|
||||
* @param PMA_DatabaseInterface $dbi database interface for the table
|
||||
*/
|
||||
function __construct($table_name, $db_name)
|
||||
function __construct($table_name, $db_name, PMA_DatabaseInterface $dbi = null)
|
||||
{
|
||||
if (empty($dbi)) {
|
||||
$dbi = $GLOBALS['dbi'];
|
||||
}
|
||||
$this->_dbi = $dbi;
|
||||
$this->setName($table_name);
|
||||
$this->setDbName($db_name);
|
||||
}
|
||||
@ -118,7 +128,7 @@ class PMA_Table
|
||||
*/
|
||||
function setName($table_name)
|
||||
{
|
||||
$this->name = $table_name;
|
||||
$this->_name = $table_name;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -131,9 +141,9 @@ class PMA_Table
|
||||
function getName($backquoted = false)
|
||||
{
|
||||
if ($backquoted) {
|
||||
return PMA_Util::backquote($this->name);
|
||||
return PMA_Util::backquote($this->_name);
|
||||
}
|
||||
return $this->name;
|
||||
return $this->_name;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -145,7 +155,7 @@ class PMA_Table
|
||||
*/
|
||||
function setDbName($db_name)
|
||||
{
|
||||
$this->db_name = $db_name;
|
||||
$this->_db_name = $db_name;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -158,9 +168,9 @@ class PMA_Table
|
||||
function getDbName($backquoted = false)
|
||||
{
|
||||
if ($backquoted) {
|
||||
return PMA_Util::backquote($this->db_name);
|
||||
return PMA_Util::backquote($this->_db_name);
|
||||
}
|
||||
return $this->db_name;
|
||||
return $this->_db_name;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1520,8 +1530,8 @@ class PMA_Table
|
||||
// Read from phpMyAdmin database
|
||||
$sql_query = " SELECT `prefs` FROM " . $pma_table
|
||||
. " WHERE `username` = '" . $GLOBALS['cfg']['Server']['user'] . "'"
|
||||
. " AND `db_name` = '" . PMA_Util::sqlAddSlashes($this->db_name) . "'"
|
||||
. " AND `table_name` = '" . PMA_Util::sqlAddSlashes($this->name) . "'";
|
||||
. " AND `db_name` = '" . PMA_Util::sqlAddSlashes($this->_db_name) . "'"
|
||||
. " AND `table_name` = '" . PMA_Util::sqlAddSlashes($this->_name) . "'";
|
||||
|
||||
$row = $GLOBALS['dbi']->fetchArray(PMA_queryAsControlUser($sql_query));
|
||||
if (isset($row[0])) {
|
||||
@ -1542,13 +1552,13 @@ class PMA_Table
|
||||
$pma_table = PMA_Util::backquote($cfgRelation['db']) . "."
|
||||
. PMA_Util::backquote($cfgRelation['table_uiprefs']);
|
||||
|
||||
$secureDbName = PMA_Util::sqlAddSlashes($this->db_name);
|
||||
$secureDbName = PMA_Util::sqlAddSlashes($this->_db_name);
|
||||
|
||||
$username = $GLOBALS['cfg']['Server']['user'];
|
||||
$sql_query = " REPLACE INTO " . $pma_table
|
||||
. " (username, db_name, table_name, prefs) VALUES ('"
|
||||
. $username . "', '" . $secureDbName
|
||||
. "', '" . PMA_Util::sqlAddSlashes($this->name) . "', '"
|
||||
. "', '" . PMA_Util::sqlAddSlashes($this->_name) . "', '"
|
||||
. PMA_Util::sqlAddSlashes(json_encode($this->uiprefs)) . "')";
|
||||
|
||||
$success = $GLOBALS['dbi']->tryQuery($sql_query, $GLOBALS['controllink']);
|
||||
@ -1615,15 +1625,15 @@ class PMA_Table
|
||||
$server_id = $GLOBALS['server'];
|
||||
|
||||
// set session variable if it's still undefined
|
||||
if (! isset($_SESSION['tmpval']['table_uiprefs'][$server_id][$this->db_name][$this->name])) {
|
||||
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] = $cfgRelation['uiprefswork']
|
||||
$_SESSION['tmpval']['table_uiprefs'][$server_id][$this->_db_name]
|
||||
[$this->_name] = $cfgRelation['uiprefswork']
|
||||
? $this->getUiPrefsFromDb()
|
||||
: array();
|
||||
}
|
||||
$this->uiprefs =& $_SESSION['tmpval']['table_uiprefs'][$server_id]
|
||||
[$this->db_name][$this->name];
|
||||
[$this->_db_name][$this->_name];
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1677,13 +1687,13 @@ class PMA_Table
|
||||
} elseif ($property == self::PROP_COLUMN_ORDER
|
||||
|| $property == self::PROP_COLUMN_VISIB
|
||||
) {
|
||||
if (! PMA_Table::isView($this->db_name, $this->name)
|
||||
if (! PMA_Table::isView($this->_db_name, $this->_name)
|
||||
&& isset($this->uiprefs[$property])
|
||||
) {
|
||||
// check if the table has not been modified
|
||||
if (self::sGetStatusInfo(
|
||||
$this->db_name,
|
||||
$this->name, 'Create_time'
|
||||
$this->_db_name,
|
||||
$this->_name, 'Create_time'
|
||||
) == $this->uiprefs['CREATE_TIME']) {
|
||||
return $this->uiprefs[$property];
|
||||
} else {
|
||||
@ -1721,13 +1731,13 @@ class PMA_Table
|
||||
$this->loadUiPrefs();
|
||||
}
|
||||
// we want to save the create time if the property is PROP_COLUMN_ORDER
|
||||
if (! PMA_Table::isView($this->db_name, $this->name)
|
||||
if (! PMA_Table::isView($this->_db_name, $this->_name)
|
||||
&& ($property == self::PROP_COLUMN_ORDER
|
||||
|| $property == self::PROP_COLUMN_VISIB)
|
||||
) {
|
||||
$curr_create_time = self::sGetStatusInfo(
|
||||
$this->db_name,
|
||||
$this->name,
|
||||
$this->_db_name,
|
||||
$this->_name,
|
||||
'CREATE_TIME'
|
||||
);
|
||||
if (isset($table_create_time)
|
||||
@ -1800,5 +1810,145 @@ class PMA_Table
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to get the name and type of the columns of a table
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getNameAndTypeOfTheColumns()
|
||||
{
|
||||
$columns = array();
|
||||
foreach ($this->_dbi->getColumnsFull($this->_db_name, $this->_name) as $row) {
|
||||
if (preg_match('@^(set|enum)\((.+)\)$@i', $row['Type'], $tmp)) {
|
||||
$tmp[2] = /*overload*/mb_substr(
|
||||
preg_replace('@([^,])\'\'@', '\\1\\\'', ',' . $tmp[2]), 1
|
||||
);
|
||||
$columns[$row['Field']] = $tmp[1] . '('
|
||||
. str_replace(',', ', ', $tmp[2]) . ')';
|
||||
} else {
|
||||
$columns[$row['Field']] = $row['Type'];
|
||||
}
|
||||
}
|
||||
return $columns;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get index with index name
|
||||
*
|
||||
* @param $index
|
||||
* @return PMA_Index
|
||||
*/
|
||||
public function getIndex($index)
|
||||
{
|
||||
return PMA_Index::singleton($this->_db_name, $this->_name, $index);
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to get the sql query for index creation or edit
|
||||
*
|
||||
* @param PMA_Index $index current index
|
||||
* @param bool &$error whether error occurred or not
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getSqlQueryForIndexCreateOrEdit($index, &$error)
|
||||
{
|
||||
// $sql_query is the one displayed in the query box
|
||||
$sql_query = sprintf(
|
||||
'ALTER TABLE %s.%s',
|
||||
PMA_Util::backquote($this->_db_name),
|
||||
PMA_Util::backquote($this->_name)
|
||||
);
|
||||
|
||||
// Drops the old index
|
||||
if (! empty($_REQUEST['old_index'])) {
|
||||
if ($_REQUEST['old_index'] == 'PRIMARY') {
|
||||
$sql_query .= ' DROP PRIMARY KEY,';
|
||||
} else {
|
||||
$sql_query .= sprintf(
|
||||
' DROP INDEX %s,',
|
||||
PMA_Util::backquote($_REQUEST['old_index'])
|
||||
);
|
||||
}
|
||||
} // end if
|
||||
|
||||
// Builds the new one
|
||||
switch ($index->getChoice()) {
|
||||
case 'PRIMARY':
|
||||
if ($index->getName() == '') {
|
||||
$index->setName('PRIMARY');
|
||||
} elseif ($index->getName() != 'PRIMARY') {
|
||||
$error = PMA_Message::error(
|
||||
__('The name of the primary key must be "PRIMARY"!')
|
||||
);
|
||||
}
|
||||
$sql_query .= ' ADD PRIMARY KEY';
|
||||
break;
|
||||
case 'FULLTEXT':
|
||||
case 'UNIQUE':
|
||||
case 'INDEX':
|
||||
case 'SPATIAL':
|
||||
if ($index->getName() == 'PRIMARY') {
|
||||
$error = PMA_Message::error(__('Can\'t rename index to PRIMARY!'));
|
||||
}
|
||||
$sql_query .= sprintf(
|
||||
' ADD %s ',
|
||||
$index->getChoice()
|
||||
);
|
||||
if ($index->getName()) {
|
||||
$sql_query .= PMA_Util::backquote($index->getName());
|
||||
}
|
||||
break;
|
||||
} // end switch
|
||||
|
||||
$index_fields = array();
|
||||
foreach ($index->getColumns() as $key => $column) {
|
||||
$index_fields[$key] = PMA_Util::backquote($column->getName());
|
||||
if ($column->getSubPart()) {
|
||||
$index_fields[$key] .= '(' . $column->getSubPart() . ')';
|
||||
}
|
||||
} // end while
|
||||
|
||||
if (empty($index_fields)) {
|
||||
$error = PMA_Message::error(__('No index parts defined!'));
|
||||
} else {
|
||||
$sql_query .= ' (' . implode(', ', $index_fields) . ')';
|
||||
}
|
||||
|
||||
$keyBlockSizes = $index->getKeyBlockSize();
|
||||
if (! empty($keyBlockSizes)) {
|
||||
$sql_query .= sprintf(
|
||||
' KEY_BLOCK_SIZE = ',
|
||||
PMA_Util::sqlAddSlashes($keyBlockSizes)
|
||||
);
|
||||
}
|
||||
|
||||
// specifying index type is allowed only for primary, unique and index only
|
||||
$type = $index->getType();
|
||||
if ($index->getChoice() != 'SPATIAL'
|
||||
&& $index->getChoice() != 'FULLTEXT'
|
||||
&& in_array($type, PMA_Index::getIndexTypes())
|
||||
) {
|
||||
$sql_query .= ' USING ' . $type;
|
||||
}
|
||||
|
||||
$parser = $index->getParser();
|
||||
if ($index->getChoice() == 'FULLTEXT' && ! empty($parser)) {
|
||||
$sql_query .= ' WITH PARSER ' . PMA_Util::sqlAddSlashes($parser);
|
||||
}
|
||||
|
||||
$comment = $index->getComment();
|
||||
if (! empty($comment)) {
|
||||
$sql_query .= sprintf(
|
||||
" COMMENT '%s'",
|
||||
PMA_Util::sqlAddSlashes($comment)
|
||||
);
|
||||
}
|
||||
|
||||
$sql_query .= ';';
|
||||
|
||||
return $sql_query;
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
@ -1,46 +0,0 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
|
||||
/**
|
||||
* functions for displaying chart
|
||||
*
|
||||
* @usedby tbl_chart.php
|
||||
*
|
||||
* @package PhpMyAdmin
|
||||
*/
|
||||
if (! defined('PHPMYADMIN')) {
|
||||
exit;
|
||||
}
|
||||
|
||||
require_once 'libraries/Template.class.php';
|
||||
use PMA\Template;
|
||||
|
||||
/**
|
||||
* Function to get html for displaying table chart
|
||||
*
|
||||
* @param string $url_query url query
|
||||
* @param array $url_params url parameters
|
||||
* @param array $keys keys
|
||||
* @param array $fields_meta fields meta
|
||||
* @param array $numeric_types numeric types
|
||||
* @param int $numeric_column_count numeric column count
|
||||
* @param string $sql_query sql query
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function PMA_getHtmlForTableChartDisplay($url_query, $url_params, $keys,
|
||||
$fields_meta, $numeric_types, $numeric_column_count, $sql_query
|
||||
) {
|
||||
return Template::get('tbl_chart')
|
||||
->render(
|
||||
array(
|
||||
'url_query' => $url_query,
|
||||
'url_params' => $url_params,
|
||||
'keys' => $keys,
|
||||
'fields_meta' => $fields_meta,
|
||||
'numeric_types' => $numeric_types,
|
||||
'numeric_column_count' => $numeric_column_count,
|
||||
'sql_query' => $sql_query
|
||||
)
|
||||
);
|
||||
}
|
||||
@ -1,277 +0,0 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* Set of functions related to table indexes
|
||||
*
|
||||
* @package PhpMyAdmin
|
||||
*/
|
||||
if (! defined('PHPMYADMIN')) {
|
||||
exit;
|
||||
}
|
||||
|
||||
require_once 'libraries/Template.class.php';
|
||||
|
||||
/**
|
||||
* Function to get the name and type of the columns of a table
|
||||
*
|
||||
* @param string $db current database
|
||||
* @param string $table current table
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
function PMA_getNameAndTypeOfTheColumns($db, $table)
|
||||
{
|
||||
$columns = array();
|
||||
foreach ($GLOBALS['dbi']->getColumnsFull($db, $table) as $row) {
|
||||
if (preg_match('@^(set|enum)\((.+)\)$@i', $row['Type'], $tmp)) {
|
||||
$tmp[2] = /*overload*/mb_substr(
|
||||
preg_replace('@([^,])\'\'@', '\\1\\\'', ',' . $tmp[2]), 1
|
||||
);
|
||||
$columns[$row['Field']] = $tmp[1] . '('
|
||||
. str_replace(',', ', ', $tmp[2]) . ')';
|
||||
} else {
|
||||
$columns[$row['Field']] = $row['Type'];
|
||||
}
|
||||
} // end while
|
||||
|
||||
return $columns;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to handle the creation or edit of an index
|
||||
*
|
||||
* @param string $db current db
|
||||
* @param string $table current table
|
||||
* @param PMA_Index $index current index
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function PMA_handleCreateOrEditIndex($db, $table, $index)
|
||||
{
|
||||
$error = false;
|
||||
|
||||
$sql_query = PMA_getSqlQueryForIndexCreateOrEdit($db, $table, $index, $error);
|
||||
|
||||
// If there is a request for SQL previewing.
|
||||
if (isset($_REQUEST['preview_sql'])) {
|
||||
PMA_previewSQL($sql_query);
|
||||
}
|
||||
|
||||
if (! $error) {
|
||||
$GLOBALS['dbi']->query($sql_query);
|
||||
$message = PMA_Message::success(
|
||||
__('Table %1$s has been altered successfully.')
|
||||
);
|
||||
$message->addParam($table);
|
||||
|
||||
if ($GLOBALS['is_ajax_request'] == true) {
|
||||
$response = PMA_Response::getInstance();
|
||||
$response->addJSON(
|
||||
'message', PMA_Util::getMessage($message, $sql_query, 'success')
|
||||
);
|
||||
$response->addJSON('index_table', PMA_Index::getHtmlForIndexes($table, $db));
|
||||
} else {
|
||||
include 'tbl_structure.php';
|
||||
}
|
||||
exit;
|
||||
} else {
|
||||
$response = PMA_Response::getInstance();
|
||||
$response->isSuccess(false);
|
||||
$response->addJSON('message', $error);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to get the sql query for index creation or edit
|
||||
*
|
||||
* @param string $db current db
|
||||
* @param string $table current table
|
||||
* @param PMA_Index $index current index
|
||||
* @param bool &$error whether error occurred or not
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function PMA_getSqlQueryForIndexCreateOrEdit($db, $table, $index, &$error)
|
||||
{
|
||||
// $sql_query is the one displayed in the query box
|
||||
$sql_query = 'ALTER TABLE ' . PMA_Util::backquote($db)
|
||||
. '.' . PMA_Util::backquote($table);
|
||||
|
||||
// Drops the old index
|
||||
if (! empty($_REQUEST['old_index'])) {
|
||||
if ($_REQUEST['old_index'] == 'PRIMARY') {
|
||||
$sql_query .= ' DROP PRIMARY KEY,';
|
||||
} else {
|
||||
$sql_query .= ' DROP INDEX '
|
||||
. PMA_Util::backquote($_REQUEST['old_index']) . ',';
|
||||
}
|
||||
} // end if
|
||||
|
||||
// Builds the new one
|
||||
switch ($index->getChoice()) {
|
||||
case 'PRIMARY':
|
||||
if ($index->getName() == '') {
|
||||
$index->setName('PRIMARY');
|
||||
} elseif ($index->getName() != 'PRIMARY') {
|
||||
$error = PMA_Message::error(
|
||||
__('The name of the primary key must be "PRIMARY"!')
|
||||
);
|
||||
}
|
||||
$sql_query .= ' ADD PRIMARY KEY';
|
||||
break;
|
||||
case 'FULLTEXT':
|
||||
case 'UNIQUE':
|
||||
case 'INDEX':
|
||||
case 'SPATIAL':
|
||||
if ($index->getName() == 'PRIMARY') {
|
||||
$error = PMA_Message::error(__('Can\'t rename index to PRIMARY!'));
|
||||
}
|
||||
$sql_query .= ' ADD ' . $index->getChoice() . ' '
|
||||
. ($index->getName() ? PMA_Util::backquote($index->getName()) : '');
|
||||
break;
|
||||
} // end switch
|
||||
|
||||
$index_fields = array();
|
||||
foreach ($index->getColumns() as $key => $column) {
|
||||
$index_fields[$key] = PMA_Util::backquote($column->getName());
|
||||
if ($column->getSubPart()) {
|
||||
$index_fields[$key] .= '(' . $column->getSubPart() . ')';
|
||||
}
|
||||
} // end while
|
||||
|
||||
if (empty($index_fields)) {
|
||||
$error = PMA_Message::error(__('No index parts defined!'));
|
||||
} else {
|
||||
$sql_query .= ' (' . implode(', ', $index_fields) . ')';
|
||||
}
|
||||
|
||||
$keyBlockSizes = $index->getKeyBlockSize();
|
||||
if (! empty($keyBlockSizes)) {
|
||||
$sql_query .= " KEY_BLOCK_SIZE = "
|
||||
. PMA_Util::sqlAddSlashes($keyBlockSizes);
|
||||
}
|
||||
|
||||
// specifying index type is allowed only for primary, unique and index only
|
||||
$type = $index->getType();
|
||||
if ($index->getChoice() != 'SPATIAL'
|
||||
&& $index->getChoice() != 'FULLTEXT'
|
||||
&& in_array($type, PMA_Index::getIndexTypes())
|
||||
) {
|
||||
$sql_query .= ' USING ' . $type;
|
||||
}
|
||||
|
||||
$parser = $index->getParser();
|
||||
if ($index->getChoice() == 'FULLTEXT' && ! empty($parser)) {
|
||||
$sql_query .= " WITH PARSER " . PMA_Util::sqlAddSlashes($parser);
|
||||
}
|
||||
|
||||
$comment = $index->getComment();
|
||||
if (! empty($comment)) {
|
||||
$sql_query .= " COMMENT '" . PMA_Util::sqlAddSlashes($comment) . "'";
|
||||
}
|
||||
|
||||
$sql_query .= ';';
|
||||
|
||||
return $sql_query;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to prepare the form values for index
|
||||
*
|
||||
* @param string $db current database
|
||||
* @param string $table current table
|
||||
*
|
||||
* @return PMA_Index
|
||||
*/
|
||||
function PMA_prepareFormValues($db, $table)
|
||||
{
|
||||
if (isset($_REQUEST['index'])) {
|
||||
if (is_array($_REQUEST['index'])) {
|
||||
// coming already from form
|
||||
$index = new PMA_Index($_REQUEST['index']);
|
||||
} else {
|
||||
$index = PMA_Index::singleton($db, $table, $_REQUEST['index']);
|
||||
}
|
||||
} else {
|
||||
$index = new PMA_Index;
|
||||
}
|
||||
|
||||
return $index;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to get the number of fields for the form
|
||||
*
|
||||
* @param PMA_Index $index index
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
function PMA_getNumberOfFieldsForForm($index)
|
||||
{
|
||||
if (isset($_REQUEST['index']) && is_array($_REQUEST['index'])) {
|
||||
// coming already from form
|
||||
$add_fields
|
||||
= isset($_REQUEST['index']['columns']['names'])?
|
||||
count($_REQUEST['index']['columns']['names'])
|
||||
- $index->getColumnCount():0;
|
||||
if (isset($_REQUEST['add_fields'])) {
|
||||
$add_fields += $_REQUEST['added_fields'];
|
||||
}
|
||||
} elseif (isset($_REQUEST['create_index'])) {
|
||||
$add_fields = $_REQUEST['added_fields'];
|
||||
} else {
|
||||
$add_fields = 0;
|
||||
}// end preparing form values
|
||||
|
||||
return $add_fields;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to get form parameters
|
||||
*
|
||||
* @param string $db current db
|
||||
* @param string $table current table
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
function PMA_getFormParameters($db, $table)
|
||||
{
|
||||
$form_params = array(
|
||||
'db' => $db,
|
||||
'table' => $table,
|
||||
);
|
||||
|
||||
if (isset($_REQUEST['create_index'])) {
|
||||
$form_params['create_index'] = 1;
|
||||
} elseif (isset($_REQUEST['old_index'])) {
|
||||
$form_params['old_index'] = $_REQUEST['old_index'];
|
||||
} elseif (isset($_REQUEST['index'])) {
|
||||
$form_params['old_index'] = $_REQUEST['index'];
|
||||
}
|
||||
|
||||
return $form_params;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to get html for displaying the index form
|
||||
*
|
||||
* @param array $fields fields
|
||||
* @param PMA_Index $index index
|
||||
* @param array $form_params form parameters
|
||||
* @param int $add_fields number of fields in the form
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function PMA_getHtmlForIndexForm($fields, $index, $form_params, $add_fields)
|
||||
{
|
||||
return PMA\Template::get('index_form')->render(
|
||||
array(
|
||||
'fields' => $fields,
|
||||
'index' => $index,
|
||||
'form_params' => $form_params,
|
||||
'add_fields' => $add_fields
|
||||
)
|
||||
);
|
||||
}
|
||||
?>
|
||||
@ -7,7 +7,8 @@
|
||||
*/
|
||||
|
||||
require_once 'libraries/common.inc.php';
|
||||
require_once 'libraries/tbl_chart.lib.php';
|
||||
require_once 'libraries/Template.class.php';
|
||||
use PMA\Template;
|
||||
|
||||
/*
|
||||
* Execute the query and return the result
|
||||
@ -133,9 +134,14 @@ $url_params['reload'] = 1;
|
||||
/**
|
||||
* Displays the page
|
||||
*/
|
||||
$htmlString = PMA_getHtmlForTableChartDisplay(
|
||||
$url_query, $url_params, $keys, $fields_meta, $numeric_types,
|
||||
$numeric_column_count, $sql_query
|
||||
);
|
||||
|
||||
$response->addHTML($htmlString);
|
||||
$response->addHTML(Template::get('tbl_chart')->render(
|
||||
array(
|
||||
'url_query' => $url_query,
|
||||
'url_params' => $url_params,
|
||||
'keys' => $keys,
|
||||
'fields_meta' => $fields_meta,
|
||||
'numeric_types' => $numeric_types,
|
||||
'numeric_column_count' => $numeric_column_count,
|
||||
'sql_query' => $sql_query
|
||||
)
|
||||
));
|
||||
|
||||
@ -11,21 +11,68 @@
|
||||
*/
|
||||
require_once 'libraries/common.inc.php';
|
||||
require_once 'libraries/Index.class.php';
|
||||
require_once 'libraries/tbl_indexes.lib.php';
|
||||
require_once 'libraries/Template.class.php';
|
||||
|
||||
if (! isset($_REQUEST['create_edit_table'])) {
|
||||
include_once 'libraries/tbl_common.inc.php';
|
||||
}
|
||||
|
||||
if (isset($_REQUEST['index'])) {
|
||||
if (is_array($_REQUEST['index'])) {
|
||||
// coming already from form
|
||||
$index = new PMA_Index($_REQUEST['index']);
|
||||
} else {
|
||||
$index = $GLOBALS['dbi']->getTable($db, $table)
|
||||
->getIndex($_REQUEST['index']);
|
||||
}
|
||||
} else {
|
||||
$index = new PMA_Index;
|
||||
}
|
||||
|
||||
$index = PMA_prepareFormValues($db, $table);
|
||||
/**
|
||||
* Process the data from the edit/create index form,
|
||||
* run the query to build the new index
|
||||
* and moves back to "tbl_sql.php"
|
||||
*/
|
||||
if (isset($_REQUEST['do_save_data'])) {
|
||||
PMA_handleCreateOrEditIndex($db, $table, $index);
|
||||
|
||||
$error = false;
|
||||
|
||||
$sql_query = $GLOBALS['dbi']->getTable($db, $table)
|
||||
->getSqlQueryForIndexCreateOrEdit($index, $error);
|
||||
|
||||
// If there is a request for SQL previewing.
|
||||
if (isset($_REQUEST['preview_sql'])) {
|
||||
|
||||
PMA_Response::getInstance()->addJSON(
|
||||
'sql_data',
|
||||
PMA\Template::get('preview_sql')
|
||||
->render(array(
|
||||
'query_data' => $sql_query
|
||||
))
|
||||
);
|
||||
} elseif (!$error) {
|
||||
|
||||
$GLOBALS['dbi']->query($sql_query);
|
||||
if ($GLOBALS['is_ajax_request'] == true) {
|
||||
$message = PMA_Message::success(
|
||||
__('Table %1$s has been altered successfully.')
|
||||
);
|
||||
$message->addParam($table);
|
||||
$response = PMA_Response::getInstance();
|
||||
$response->addJSON(
|
||||
'message', PMA_Util::getMessage($message, $sql_query, 'success')
|
||||
);
|
||||
$response->addJSON('index_table', PMA_Index::getHtmlForIndexes($table, $db));
|
||||
} else {
|
||||
include 'tbl_structure.php';
|
||||
}
|
||||
} else {
|
||||
$response = PMA_Response::getInstance();
|
||||
$response->isSuccess(false);
|
||||
$response->addJSON('message', $error);
|
||||
}
|
||||
exit;
|
||||
} // end builds the new index
|
||||
|
||||
|
||||
@ -34,9 +81,19 @@ if (isset($_REQUEST['do_save_data'])) {
|
||||
*/
|
||||
require_once 'libraries/tbl_info.inc.php';
|
||||
|
||||
$add_fields = PMA_getNumberOfFieldsForForm($index);
|
||||
|
||||
$form_params = PMA_getFormParameters($db, $table);
|
||||
$add_fields = 0;
|
||||
if (isset($_REQUEST['index']) && is_array($_REQUEST['index'])) {
|
||||
// coming already from form
|
||||
if (isset($_REQUEST['index']['columns']['names'])) {
|
||||
$add_fields = count($_REQUEST['index']['columns']['names'])
|
||||
- $index->getColumnCount();
|
||||
}
|
||||
if (isset($_REQUEST['add_fields'])) {
|
||||
$add_fields += $_REQUEST['added_fields'];
|
||||
}
|
||||
} elseif (isset($_REQUEST['create_index'])) {
|
||||
$add_fields = $_REQUEST['added_fields'];
|
||||
} // end preparing form values
|
||||
|
||||
// Get fields and stores their name/type
|
||||
if (isset($_REQUEST['create_edit_table'])) {
|
||||
@ -47,13 +104,33 @@ if (isset($_REQUEST['create_edit_table'])) {
|
||||
$index->set($index_params);
|
||||
$add_fields = count($fields);
|
||||
} else {
|
||||
$fields = PMA_getNameAndTypeOfTheColumns($db, $table);
|
||||
$fields = $GLOBALS['dbi']->getTable($db, $table)->getNameAndTypeOfTheColumns();
|
||||
}
|
||||
|
||||
$html = PMA_getHtmlForIndexForm($fields, $index, $form_params, $add_fields);
|
||||
$form_params = array(
|
||||
'db' => $db,
|
||||
'table' => $table,
|
||||
);
|
||||
|
||||
if (isset($_REQUEST['create_index'])) {
|
||||
$form_params['create_index'] = 1;
|
||||
} elseif (isset($_REQUEST['old_index'])) {
|
||||
$form_params['old_index'] = $_REQUEST['old_index'];
|
||||
} elseif (isset($_REQUEST['index'])) {
|
||||
$form_params['old_index'] = $_REQUEST['index'];
|
||||
}
|
||||
|
||||
$response = PMA_Response::getInstance();
|
||||
$response->addHTML($html);
|
||||
$response->addHTML(PMA\Template::get('index_form')
|
||||
->render(
|
||||
array(
|
||||
'fields' => $fields,
|
||||
'index' => $index,
|
||||
'form_params' => $form_params,
|
||||
'add_fields' => $add_fields
|
||||
)
|
||||
)
|
||||
);
|
||||
$header = $response->getHeader();
|
||||
$scripts = $header->getScripts();
|
||||
$scripts->addFile('indexes.js');
|
||||
|
||||
11
templates/preview_sql.phtml
Normal file
11
templates/preview_sql.phtml
Normal file
@ -0,0 +1,11 @@
|
||||
<div class="preview_sql">
|
||||
<?php if (empty($query_data)): ?>
|
||||
<?php echo __('No change'); ?>
|
||||
<?php elseif (is_array($query_data)): ?>
|
||||
<?php foreach ($query_data as $query): ?>
|
||||
<?php echo PMA_Util::formatSql($query); ?>
|
||||
<?php endforeach; ?>
|
||||
<?php else: ?>
|
||||
<?php echo PMA_Util::formatSql($query_data); ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
@ -10,8 +10,8 @@
|
||||
* Include to test.
|
||||
*/
|
||||
require_once 'libraries/Template.class.php';
|
||||
require_once 'libraries/tbl_indexes.lib.php';
|
||||
require_once 'libraries/Util.class.php';
|
||||
require_once 'libraries/Table.class.php';
|
||||
require_once 'libraries/Index.class.php';
|
||||
require_once 'libraries/Message.class.php';
|
||||
require_once 'libraries/database_interface.inc.php';
|
||||
@ -93,9 +93,8 @@ class PMA_TblIndexTest extends PHPUnit_Framework_TestCase
|
||||
|
||||
$_REQUEST['old_index'] = "PRIMARY";
|
||||
|
||||
$sql = PMA_getSqlQueryForIndexCreateOrEdit(
|
||||
$db, $table, $index, $error
|
||||
);
|
||||
$table = new PMA_Table($table, $db);
|
||||
$sql = $table->getSqlQueryForIndexCreateOrEdit($index, $error);
|
||||
|
||||
$this->assertEquals(
|
||||
"ALTER TABLE `pma_db`.`pma_table` DROP PRIMARY KEY, ADD UNIQUE ;",
|
||||
@ -103,90 +102,6 @@ class PMA_TblIndexTest extends PHPUnit_Framework_TestCase
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for PMA_getNumberOfFieldsForForm() method.
|
||||
*
|
||||
* @return void
|
||||
* @test
|
||||
*/
|
||||
public function testPMAGetNumberOfFieldsForForm()
|
||||
{
|
||||
$index = new PMA_Index();
|
||||
|
||||
$add_fields = PMA_getNumberOfFieldsForForm($index);
|
||||
|
||||
$this->assertEquals(
|
||||
0,
|
||||
$add_fields
|
||||
);
|
||||
|
||||
$_REQUEST['create_index'] = true;
|
||||
$_REQUEST['added_fields'] = 2;
|
||||
$add_fields = PMA_getNumberOfFieldsForForm($index);
|
||||
$this->assertEquals(
|
||||
$_REQUEST['added_fields'],
|
||||
$add_fields
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for PMA_getFormParameters() method.
|
||||
*
|
||||
* @return void
|
||||
* @test
|
||||
*/
|
||||
public function testPMAGetFormParameters()
|
||||
{
|
||||
$db = "pma_db";
|
||||
$table = "pma_table";
|
||||
|
||||
$form_params = PMA_getFormParameters($db, $table);
|
||||
$expect = array(
|
||||
'db' => $db,
|
||||
'table' => $table,
|
||||
);
|
||||
$this->assertEquals(
|
||||
$expect,
|
||||
$form_params
|
||||
);
|
||||
|
||||
$_REQUEST['index'] = "index";
|
||||
$form_params = PMA_getFormParameters($db, $table);
|
||||
$expect = array(
|
||||
'db' => $db,
|
||||
'table' => $table,
|
||||
'old_index' => $_REQUEST['index'],
|
||||
);
|
||||
$this->assertEquals(
|
||||
$expect,
|
||||
$form_params
|
||||
);
|
||||
|
||||
$_REQUEST['old_index'] = "old_index";
|
||||
$form_params = PMA_getFormParameters($db, $table);
|
||||
$expect = array(
|
||||
'db' => $db,
|
||||
'table' => $table,
|
||||
'old_index' => $_REQUEST['old_index'],
|
||||
);
|
||||
$this->assertEquals(
|
||||
$expect,
|
||||
$form_params
|
||||
);
|
||||
|
||||
$_REQUEST['create_index'] = "create_index";
|
||||
$form_params = PMA_getFormParameters($db, $table);
|
||||
$expect = array(
|
||||
'db' => $db,
|
||||
'table' => $table,
|
||||
'create_index' => 1,
|
||||
);
|
||||
$this->assertEquals(
|
||||
$expect,
|
||||
$form_params
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for PMA_getHtmlForIndexForm() method.
|
||||
*
|
||||
@ -195,80 +110,85 @@ class PMA_TblIndexTest extends PHPUnit_Framework_TestCase
|
||||
*/
|
||||
public function testPMAGetHtmlForIndexForm()
|
||||
{
|
||||
$fields = array("field_name" => "field_type");
|
||||
$index = new PMA_Index();
|
||||
$form_params = array(
|
||||
'db' => 'db',
|
||||
'table' => 'table',
|
||||
'create_index' => 1,
|
||||
);
|
||||
$add_fields = 3;
|
||||
|
||||
$html = PMA_getHtmlForIndexForm($fields, $index, $form_params, $add_fields);
|
||||
|
||||
//PMA_URL_getHiddenInputs
|
||||
$this->assertContains(
|
||||
PMA_URL_getHiddenInputs($form_params),
|
||||
$html
|
||||
);
|
||||
|
||||
//Index name
|
||||
$this->assertContains(
|
||||
__('Index name:'),
|
||||
$html
|
||||
);
|
||||
$doc_html = PMA_Util::showHint(
|
||||
PMA_Message::notice(
|
||||
__(
|
||||
'"PRIMARY" <b>must</b> be the name of'
|
||||
. ' and <b>only of</b> a primary key!'
|
||||
)
|
||||
)
|
||||
);
|
||||
$this->assertContains(
|
||||
$doc_html,
|
||||
$html
|
||||
);
|
||||
|
||||
//Index name
|
||||
$this->assertContains(
|
||||
__('Index name:'),
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
PMA_Util::showMySQLDocu('ALTER_TABLE'),
|
||||
$html
|
||||
);
|
||||
|
||||
//generateIndexSelector
|
||||
$this->assertContains(
|
||||
PMA\Template::trim($index->generateIndexChoiceSelector(false)),
|
||||
$html
|
||||
);
|
||||
|
||||
//items
|
||||
$this->assertContains(
|
||||
__('Column'),
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
__('Size'),
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
sprintf(__('Add %s column(s) to index'), 1),
|
||||
$html
|
||||
);
|
||||
|
||||
//$field_name & $field_type
|
||||
$this->assertContains(
|
||||
"field_name",
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
"field_type",
|
||||
$html
|
||||
);
|
||||
/**
|
||||
* @todo Find out a better method to test for HTML
|
||||
*
|
||||
* $fields = array("field_name" => "field_type");
|
||||
* $index = new PMA_Index();
|
||||
* $form_params = array(
|
||||
* 'db' => 'db',
|
||||
* 'table' => 'table',
|
||||
* 'create_index' => 1,
|
||||
* );
|
||||
* $add_fields = 3;
|
||||
*
|
||||
* $html = PMA_getHtmlForIndexForm($fields, $index, $form_params, $add_fields);
|
||||
*
|
||||
* //PMA_URL_getHiddenInputs
|
||||
* $this->assertContains(
|
||||
* PMA_URL_getHiddenInputs($form_params),
|
||||
* $html
|
||||
* );
|
||||
*
|
||||
* //Index name
|
||||
* $this->assertContains(
|
||||
* __('Index name:'),
|
||||
* $html
|
||||
* );
|
||||
* $doc_html = PMA_Util::showHint(
|
||||
* PMA_Message::notice(
|
||||
* __(
|
||||
* '"PRIMARY" <b>must</b> be the name of'
|
||||
* . ' and <b>only of</b> a primary key!'
|
||||
* )
|
||||
* )
|
||||
* );
|
||||
* $this->assertContains(
|
||||
* $doc_html,
|
||||
* $html
|
||||
* );
|
||||
*
|
||||
* //Index name
|
||||
* $this->assertContains(
|
||||
* __('Index name:'),
|
||||
* $html
|
||||
* );
|
||||
* $this->assertContains(
|
||||
* PMA_Util::showMySQLDocu('ALTER_TABLE'),
|
||||
* $html
|
||||
* );
|
||||
*
|
||||
* //generateIndexSelector
|
||||
* $this->assertContains(
|
||||
* PMA\Template::trim($index->generateIndexChoiceSelector(false)),
|
||||
* $html
|
||||
* );
|
||||
*
|
||||
* //items
|
||||
* $this->assertContains(
|
||||
* __('Column'),
|
||||
* $html
|
||||
* );
|
||||
* $this->assertContains(
|
||||
* __('Size'),
|
||||
* $html
|
||||
* );
|
||||
* $this->assertContains(
|
||||
* sprintf(__('Add %s column(s) to index'), 1),
|
||||
* $html
|
||||
* );
|
||||
*
|
||||
* //$field_name & $field_type
|
||||
* $this->assertContains(
|
||||
* "field_name",
|
||||
* $html
|
||||
* );
|
||||
* $this->assertContains(
|
||||
* "field_type",
|
||||
* $html
|
||||
* );
|
||||
*/
|
||||
$this->markTestIncomplete('Not yet implemented!');
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user