diff options
author | Jason <jason.daurus@gmail.com> | 2015-06-08 16:54:27 +0300 |
---|---|---|
committer | Jason <jason.daurus@gmail.com> | 2015-06-08 16:54:27 +0300 |
commit | 4ecdba91002b688d60fa0bc0aa69b1645acde5cd (patch) | |
tree | 692c90acf34dfbacacea9f3321d5d52fdd7f8dfd | |
parent | 3169c5f48d94029e5ef9e46d1806cace54296700 (diff) |
Refactoring tbl_indexes.lib.php & tbl_chart.lib.php
Signed-off-by: Jason <jason.daurus@gmail.com>
-rw-r--r-- | libraries/DatabaseInterface.class.php | 13 | ||||
-rw-r--r-- | libraries/Table.class.php | 214 | ||||
-rw-r--r-- | libraries/tbl_chart.lib.php | 46 | ||||
-rw-r--r-- | libraries/tbl_indexes.lib.php | 277 | ||||
-rw-r--r-- | tbl_chart.php | 20 | ||||
-rw-r--r-- | tbl_indexes.php | 95 | ||||
-rw-r--r-- | templates/preview_sql.phtml | 11 | ||||
-rw-r--r-- | test/libraries/PMA_tbl_indexes_test.php | 244 |
8 files changed, 387 insertions, 533 deletions
diff --git a/libraries/DatabaseInterface.class.php b/libraries/DatabaseInterface.class.php index 0182011226..56900e48f5 100644 --- a/libraries/DatabaseInterface.class.php +++ b/libraries/DatabaseInterface.class.php @@ -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); + } } ?> diff --git a/libraries/Table.class.php b/libraries/Table.class.php index 95ad0bee25..999cf50f91 100644 --- a/libraries/Table.class.php +++ b/libraries/Table.class.php @@ -27,16 +27,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, ...) */ var $engine = ''; @@ -67,13 +57,33 @@ 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; + } } ?> diff --git a/libraries/tbl_chart.lib.php b/libraries/tbl_chart.lib.php deleted file mode 100644 index 5bc6485341..0000000000 --- a/libraries/tbl_chart.lib.php +++ /dev/null @@ -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 - ) - ); -} diff --git a/libraries/tbl_indexes.lib.php b/libraries/tbl_indexes.lib.php deleted file mode 100644 index 4b8e31b938..0000000000 --- a/libraries/tbl_indexes.lib.php +++ /dev/null @@ -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 - ) - ); -} -?> diff --git a/tbl_chart.php b/tbl_chart.php index aedeea0b82..a05fc95e14 100644 --- a/tbl_chart.php +++ b/tbl_chart.php @@ -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 + ) +)); diff --git a/tbl_indexes.php b/tbl_indexes.php index 12e1ee7bc8..fec42e645c 100644 --- a/tbl_indexes.php +++ b/tbl_indexes.php @@ -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.phtml') + ->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'); diff --git a/templates/preview_sql.phtml b/templates/preview_sql.phtml new file mode 100644 index 0000000000..edc6c6a959 --- /dev/null +++ b/templates/preview_sql.phtml @@ -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> diff --git a/test/libraries/PMA_tbl_indexes_test.php b/test/libraries/PMA_tbl_indexes_test.php index c49634dacb..9ff4240007 100644 --- a/test/libraries/PMA_tbl_indexes_test.php +++ b/test/libraries/PMA_tbl_indexes_test.php @@ -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 ;", @@ -104,90 +103,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. * * @return void @@ -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!'); } } ?> |