diff --git a/libraries/classes/Controllers/Table/TableStructureController.php b/libraries/classes/Controllers/Table/TableStructureController.php
index f6380266b7..75c36fb4a6 100644
--- a/libraries/classes/Controllers/Table/TableStructureController.php
+++ b/libraries/classes/Controllers/Table/TableStructureController.php
@@ -15,6 +15,7 @@ use PhpMyAdmin\CreateAddField;
use PhpMyAdmin\Index;
use PhpMyAdmin\Message;
use PhpMyAdmin\ParseAnalyze;
+use PhpMyAdmin\Partition;
use PhpMyAdmin\Relation;
use PhpMyAdmin\Sql;
use PhpMyAdmin\SqlParser\Context;
@@ -23,6 +24,7 @@ use PhpMyAdmin\SqlParser\Statements\CreateStatement;
use PhpMyAdmin\SqlParser\Utils\Table as SqlTable;
use PhpMyAdmin\Table;
use PhpMyAdmin\Template;
+use PhpMyAdmin\Tracker;
use PhpMyAdmin\Transformations;
use PhpMyAdmin\Url;
use PhpMyAdmin\Util;
@@ -1259,7 +1261,7 @@ class TableStructureController extends TableController
return Template::get('table/structure/display_structure')->render(
array(
- 'HideStructureActions' => $HideStructureActions,
+ 'hide_structure_actions' => $HideStructureActions,
'db' => $this->db,
'table' => $this->table,
'db_is_system_schema' => $this->_db_is_system_schema,
@@ -1272,11 +1274,23 @@ class TableStructureController extends TableController
'columns_with_unique_index' => $columns_with_unique_index,
'edit_view_url' => isset($edit_view_url) ? $edit_view_url : null,
'columns_list' => $columns_list,
- 'tablestats' => isset($tablestats) ? $tablestats : null,
+ 'table_stats' => isset($tablestats) ? $tablestats : null,
'fields' => $fields,
'columns_with_index' => $columns_with_index,
'central_list' => $central_list,
- 'comments_map' => $comments_map
+ 'comments_map' => $comments_map,
+ 'browse_mime' => $GLOBALS['cfg']['BrowseMIME'],
+ 'show_column_comments' => $GLOBALS['cfg']['ShowColumnComments'],
+ 'show_stats' => $GLOBALS['cfg']['ShowStats'],
+ 'relation_commwork' => $GLOBALS['cfgRelation']['commwork'],
+ 'relation_mimework' => $GLOBALS['cfgRelation']['mimework'],
+ 'central_columns_work' => $GLOBALS['cfgRelation']['centralcolumnswork'],
+ 'mysql_int_version' => $GLOBALS['dbi']->getVersion(),
+ 'pma_theme_image' => $GLOBALS['pmaThemeImage'],
+ 'text_dir' => $GLOBALS['text_dir'],
+ 'is_active' => Tracker::isActive(),
+ 'have_partitioning' => Partition::havePartitioning(),
+ 'partition_names' => Partition::getPartitionNames($this->db, $this->table),
)
);
}
diff --git a/libraries/classes/Template.php b/libraries/classes/Template.php
index b3d6d52a3f..1202e8518a 100644
--- a/libraries/classes/Template.php
+++ b/libraries/classes/Template.php
@@ -10,7 +10,9 @@ namespace PhpMyAdmin;
use PhpMyAdmin\Twig\CharsetsExtension;
use PhpMyAdmin\Twig\CoreExtension;
use PhpMyAdmin\Twig\I18nExtension;
+use PhpMyAdmin\Twig\IndexExtension;
use PhpMyAdmin\Twig\MessageExtension;
+use PhpMyAdmin\Twig\PartitionExtension;
use PhpMyAdmin\Twig\PhpFunctionsExtension;
use PhpMyAdmin\Twig\PluginsExtension;
use PhpMyAdmin\Twig\RelationExtension;
@@ -69,7 +71,9 @@ class Template
$twig->addExtension(new CharsetsExtension());
$twig->addExtension(new CoreExtension());
$twig->addExtension(new I18nExtension());
+ $twig->addExtension(new IndexExtension());
$twig->addExtension(new MessageExtension());
+ $twig->addExtension(new PartitionExtension());
$twig->addExtension(new PhpFunctionsExtension());
$twig->addExtension(new PluginsExtension());
$twig->addExtension(new RelationExtension());
diff --git a/libraries/classes/Twig/IndexExtension.php b/libraries/classes/Twig/IndexExtension.php
new file mode 100644
index 0000000000..02aff6a7c4
--- /dev/null
+++ b/libraries/classes/Twig/IndexExtension.php
@@ -0,0 +1,35 @@
+ array('html'))
+ ),
+ );
+ }
+}
diff --git a/libraries/classes/Twig/PartitionExtension.php b/libraries/classes/Twig/PartitionExtension.php
new file mode 100644
index 0000000000..9d30c005d1
--- /dev/null
+++ b/libraries/classes/Twig/PartitionExtension.php
@@ -0,0 +1,35 @@
+ array('html'))
+ ),
+ );
+ }
+}
diff --git a/libraries/classes/Twig/UtilExtension.php b/libraries/classes/Twig/UtilExtension.php
index 000cc703ce..206eff8fd5 100644
--- a/libraries/classes/Twig/UtilExtension.php
+++ b/libraries/classes/Twig/UtilExtension.php
@@ -37,6 +37,10 @@ class UtilExtension extends Twig_Extension
'Util_escapeMysqlWildcards',
'PhpMyAdmin\Util::escapeMysqlWildcards'
),
+ new Twig_SimpleFunction(
+ 'Util_extractColumnSpec',
+ 'PhpMyAdmin\Util::extractColumnSpec'
+ ),
new Twig_SimpleFunction(
'Util_formatByteDown',
'PhpMyAdmin\Util::formatByteDown'
@@ -55,6 +59,11 @@ class UtilExtension extends Twig_Extension
'PhpMyAdmin\Util::getButtonOrImage',
array('is_safe' => array('html'))
),
+ new Twig_SimpleFunction(
+ 'Util_getClassForType',
+ 'PhpMyAdmin\Util::getClassForType',
+ array('is_safe' => array('html'))
+ ),
new Twig_SimpleFunction(
'Util_getDivForSliderEffect',
'PhpMyAdmin\Util::getDivForSliderEffect',
diff --git a/scripts/generate-twig-cache b/scripts/generate-twig-cache
index 9cdba5ade9..8eb8949653 100644
--- a/scripts/generate-twig-cache
+++ b/scripts/generate-twig-cache
@@ -7,7 +7,9 @@ require_once AUTOLOAD_FILE;
use PhpMyAdmin\Twig\CharsetsExtension;
use PhpMyAdmin\Twig\CoreExtension;
use PhpMyAdmin\Twig\I18nExtension;
+use PhpMyAdmin\Twig\IndexExtension;
use PhpMyAdmin\Twig\MessageExtension;
+use PhpMyAdmin\Twig\PartitionExtension;
use PhpMyAdmin\Twig\PhpFunctionsExtension;
use PhpMyAdmin\Twig\PluginsExtension;
use PhpMyAdmin\Twig\RelationExtension;
@@ -29,7 +31,9 @@ $twig = new Twig_Environment($loader, array(
$twig->addExtension(new CharsetsExtension());
$twig->addExtension(new CoreExtension());
$twig->addExtension(new I18nExtension());
+$twig->addExtension(new IndexExtension());
$twig->addExtension(new MessageExtension());
+$twig->addExtension(new PartitionExtension());
$twig->addExtension(new PhpFunctionsExtension());
$twig->addExtension(new PluginsExtension());
$twig->addExtension(new RelationExtension());
diff --git a/templates/table/structure/display_structure.phtml b/templates/table/structure/display_structure.phtml
deleted file mode 100644
index cde237768c..0000000000
--- a/templates/table/structure/display_structure.phtml
+++ /dev/null
@@ -1,250 +0,0 @@
-
-
-
-= Template::get('table/structure/move_columns_dialog')->render(array(
- 'db' => $GLOBALS['db'],
- 'table' => $GLOBALS['table'],
-)); ?>
-
-
-
- = Util::linkOrButton(
- $edit_view_url,
- Util::getIcon('b_edit.png', __('Edit view'), true)
- ); ?>
-
- = Template::get('table/structure/optional_action_links')->render(
- array(
- 'url_query' => $url_query,
- 'tbl_is_view' => $tbl_is_view,
- 'db_is_system_schema' => $db_is_system_schema,
- 'table' => $GLOBALS['table'],
- 'is_active' => Tracker::isActive()
- )
- ); ?>
-
-
-
- = Template::get('table/structure/add_column')->render(array(
- 'columns_list' => $columns_list,
- 'db' => $GLOBALS['db'],
- 'table' => $GLOBALS['table']
- )); ?>
-
-
-
-
- = Index::getHtmlForDisplayIndexes(); ?>
-
-
-
-getMethod() == 'RANGE'
- || $firstPartition->getMethod() == 'RANGE COLUMNS'
- || $firstPartition->getMethod() == 'LIST'
- || $firstPartition->getMethod() == 'LIST COLUMNS';
- $subParitions = $firstPartition->getSubPartitions();
- $hasSubPartitions = $firstPartition->hasSubPartitions();
- if ($hasSubPartitions) {
- $firstSubPartition = $subParitions[0];
- }
-
- $actionIcons = array(
- 'ANALYZE' => Util::getIcon('b_search.png', __('Analyze')),
- 'CHECK' => Util::getIcon('eye.png', __('Check')),
- 'OPTIMIZE' => Util::getIcon('normalize.png', __('Optimize')),
- 'REBUILD' => Util::getIcon('s_tbl.png', __('Rebuild')),
- 'REPAIR' => Util::getIcon('b_tblops.png', __('Repair')),
- 'TRUNCATE' => Util::getIcon('b_empty.png', __('Truncate')),
- );
- if ($rangeOrList) {
- $actionIcons['DROP'] = Util::getIcon('b_drop.png', __('Drop'));
- }
-
- echo Util::getDivForSliderEffect(
- 'partitions', __('Partitions')
- );
-
- $tmp_partition_description = $firstPartition->getDescription();
-
- $removeSQL = "ALTER TABLE " . Util::backquote($table) . " REMOVE PARTITIONING";
- $removeUrl = 'sql.php' . $url_query . '&sql_query=' . urlencode($removeSQL);
-
- echo Template::get('table/structure/display_partitions')->render(
- array(
- 'db' => $db,
- 'table' => $table,
- 'url_query' => $url_query,
- 'partitions' => $partitions,
- 'partition_method' => $firstPartition->getMethod(),
- 'partition_expression' => $firstPartition->getExpression(),
- 'has_description' => ! empty($tmp_partition_description),
- 'has_sub_partitions' => $hasSubPartitions,
- 'sub_partition_method' => $hasSubPartitions ? $firstSubPartition->getMethod() : null,
- 'sub_partition_expression' => $hasSubPartitions ? $firstSubPartition->getExpression() : null,
- 'action_icons' => $actionIcons,
- 'range_or_list' => $rangeOrList,
- 'remove_url' => $removeUrl,
- )
- );
- else:
- echo Template::get('table/structure/display_partitions')->render(
- array(
- 'db' => $db,
- 'table' => $table,
- )
- );
- endif;
- ?>
-
-
-
-
-
-
- = $tablestats; ?>
-
-
diff --git a/templates/table/structure/display_structure.twig b/templates/table/structure/display_structure.twig
new file mode 100644
index 0000000000..dd2ad4e22b
--- /dev/null
+++ b/templates/table/structure/display_structure.twig
@@ -0,0 +1,224 @@
+
+
+{% include 'table/structure/move_columns_dialog.twig' with {
+ 'db': db,
+ 'table': table
+} only %}
+{# Work on the table #}
+
+ {% if tbl_is_view and not db_is_system_schema %}
+ {{ Util_linkOrButton(
+ edit_view_url,
+ Util_getIcon('b_edit.png', 'Edit view'|trans, true)
+ ) }}
+ {% endif %}
+ {% include 'table/structure/optional_action_links.twig' with {
+ 'url_query': url_query,
+ 'tbl_is_view': tbl_is_view,
+ 'db_is_system_schema': db_is_system_schema,
+ 'table': table,
+ 'is_active': is_active
+ } only %}
+
+{% if not tbl_is_view and not db_is_system_schema %}
+ {% include 'table/structure/add_column.twig' with {
+ 'columns_list': columns_list,
+ 'db': db,
+ 'table': table
+ } only %}
+{% endif %}
+
+{# Displays indexes #}
+{% if not tbl_is_view and not db_is_system_schema
+ and 'ARCHIVE' != tbl_storage_engine %}
+ {{ Index_getHtmlForDisplayIndexes() }}
+{% endif %}
+
+{# Display partition details #}
+{% if have_partitioning %}
+ {# Detect partitioning #}
+ {% if partition_names is not empty and partition_names[0] is not null %}
+ {% set partitions = Partition_getPartitions(db, table) %}
+ {% set first_partition = partitions[0] %}
+ {% set range_or_list = first_partition.getMethod() == 'RANGE'
+ or first_partition.getMethod() == 'RANGE COLUMNS'
+ or first_partition.getMethod() == 'LIST'
+ or first_partition.getMethod() == 'LIST COLUMNS' %}
+ {% set sub_partitions = first_partition.getSubPartitions() %}
+ {% set has_sub_partitions = first_partition.hasSubPartitions() %}
+ {% if has_sub_partitions %}
+ {% set first_sub_partition = sub_partitions[0] %}
+ {% endif %}
+
+ {% set action_icons = {
+ 'ANALYZE': Util_getIcon('b_search.png', 'Analyze'|trans),
+ 'CHECK': Util_getIcon('eye.png', 'Check'|trans),
+ 'OPTIMIZE': Util_getIcon('normalize.png', 'Optimize'|trans),
+ 'REBUILD': Util_getIcon('s_tbl.png', 'Rebuild'|trans),
+ 'REPAIR': Util_getIcon('b_tblops.png', 'Repair'|trans),
+ 'TRUNCATE': Util_getIcon('b_empty.png', 'Truncate'|trans),
+ } %}
+ {% if range_or_list %}
+ {% set action_icons = action_icons|merge({'DROP': Util_getIcon('b_drop.png', 'Drop'|trans)}) %}
+ {% endif %}
+
+ {{ Util_getDivForSliderEffect('partitions', 'Partitions'|trans) }}
+
+ {% set remove_sql = 'ALTER TABLE ' ~ Util_backquote(table) ~ ' REMOVE PARTITIONING' %}
+ {% set remove_url = 'sql.php' ~ url_query ~ '&sql_query=' ~ remove_sql|url_encode %}
+
+ {% include 'table/structure/display_partitions.twig' with {
+ 'db': db,
+ 'table': table,
+ 'url_query': url_query,
+ 'partitions': partitions,
+ 'partition_method': first_partition.getMethod(),
+ 'partition_expression': first_partition.getExpression(),
+ 'has_description': first_partition.getDescription() is not empty,
+ 'has_sub_partitions': has_sub_partitions,
+ 'sub_partition_method': has_sub_partitions ? first_sub_partition.getMethod(),
+ 'sub_partition_expression': has_sub_partitions ? first_sub_partition.getExpression(),
+ 'action_icons': action_icons,
+ 'range_or_list': range_or_list,
+ 'remove_url': remove_url
+ } only %}
+ {% else %}
+ {% include 'table/structure/display_partitions.twig' with {
+ 'db': db,
+ 'table': table
+ } only %}
+ {% endif %}
+ {# For closing Slider effect div #}
+
+{% endif %}
+
+{# Displays Space usage and row statistics #}
+{% if show_stats %}
+ {{ table_stats|raw }}
+{% endif %}
+