<?php
use PMA\libraries\Partition;
use PMA\libraries\Template;
use PMA\libraries\Util;
use PMA\libraries\URL;

$rownum = 0; ?>
<form method="post" action="tbl_structure.php" name="fieldsForm" id="fieldsForm" class="ajax<?= $HideStructureActions; ?>">
    <?= URL::getHiddenInputs($db, $table); ?>
    <input type="hidden" name="table_type" value=
    <?php if ($db_is_system_schema): ?>
        "information_schema" />
    <?php elseif ($tbl_is_view): ?>
        "view" />
    <?php else: ?>
        "table" />
    <?php endif; ?>
    <table id="tablestructure" class="data topmargin">
        <!-- table header -->
        <?= PMA\libraries\Template::get('table/structure/table_structure_header')->render(
            array(
                'db_is_system_schema' => $db_is_system_schema,
                'tbl_is_view' => $tbl_is_view
            )
        ); ?>
        <tbody>
        <!-- table body -->
        <?php foreach($fields as $row): ?>
            <?php
                $rownum++;
                $columns_list[] = $row['Field'];
                $field_charset = $row['Collation'];

                $extracted_columnspec = Util::extractColumnSpec($row['Type']);
                $attribute = $extracted_columnspec['attribute'];
                if (strpos($row['Extra'], 'on update CURRENT_TIMESTAMP') !== false) {
                    $attribute = 'on update CURRENT_TIMESTAMP';
                }

                if (! isset($row['Default'])) {
                    if ($row['Null'] == 'YES') {
                        $row['Default'] = '<i>NULL</i>';
                    }
                } else {
                    $row['Default'] = htmlspecialchars($row['Default']);
                }

                $field_name    = htmlspecialchars($row['Field']);
                $displayed_field_name = $field_name;
                $comments = '';  //For column comments
                // underline commented fields and display a hover-title (CSS only)

                if (isset($comments_map[$row['Field']])) {
                    $displayed_field_name = '<span class="commented_column" title="'
                        . htmlspecialchars($comments_map[$row['Field']]) . '">'
                        . $field_name . '</span>';
                    $comments = htmlspecialchars($comments_map[$row['Field']]);
                }

                if ($primary && $primary->hasColumn($field_name)) {
                    $displayed_field_name .= Util::getImage(
                        'b_primary.png', __('Primary')
                    );
                }
                if (in_array($field_name, $columns_with_index)) {
                    $displayed_field_name .= Util::getImage(
                        'b_key.png', __('Index')
                    );
                }
            ?>
        <tr>
            <?= PMA\libraries\Template::get('table/structure/table_structure_row')->render(
                array(
                    'row' => $row,
                    'rownum' => $rownum,
                    'displayed_field_name' => $displayed_field_name,
                    'type_nowrap' => Util::getClassForType($extracted_columnspec['type']),
                    'extracted_columnspec' => $extracted_columnspec,
                    'attribute' => $attribute,
                    'tbl_is_view' => $tbl_is_view,
                    'db_is_system_schema' => $db_is_system_schema,
                    'url_query' => $url_query,
                    'field_encoded' => urlencode($row['Field']),
                    'titles' => $titles,
                    'table' => $table,
                    'tbl_storage_engine' => $tbl_storage_engine,
                    'field_charset' => $field_charset,
                    'comments' => $comments
                )
            ); ?>
            <?php if (! $tbl_is_view && ! $db_is_system_schema): ?>
                <?= Template::get('table/structure/actions_in_table_structure')->render(
                    array(
                        'extracted_columnspec' => $extracted_columnspec,
                        'type' => (!empty($extracted_columnspec['print_type'])) ? $extracted_columnspec['print_type'] : ' ',
                        'tbl_storage_engine' => $tbl_storage_engine,
                        'primary' => $primary,
                        'field_name' => $field_name,
                        'url_query' => $url_query,
                        'titles' => $titles,
                        'row' => $row,
                        'rownum' => $rownum,
                        'columns_with_unique_index' => $columns_with_unique_index,
                        'isInCentralColumns' => in_array($row['Field'], $central_list) ? true : false
                    )
                ); ?>
            <?php endif; ?>
        </tr>
        <?php endforeach; ?>
        </tbody>
    </table>
    <?= Template::get('table/structure/check_all_table_column')->render(
        array(
            'pmaThemeImage' => $GLOBALS['pmaThemeImage'],
            'text_dir' => $GLOBALS['text_dir'],
            'tbl_is_view' => $tbl_is_view,
            'db_is_system_schema' => $db_is_system_schema,
            'tbl_storage_engine' => $tbl_storage_engine
        )
    ); ?>
</form>
<hr class="print_ignore"/>
<?= Template::get('table/structure/move_columns_dialog')->render(); ?>
<!--Work on the table-->
<div id="structure-action-links">
    <?php if ($tbl_is_view && ! $db_is_system_schema): ?>
        <?= Util::linkOrButton(
            $edit_view_url,
            Util::getIcon('b_edit.png', __('Edit view'), true)
        ); ?>
    <?php endif; ?>
    <?= 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
        )
    ); ?>
</div>
<?php if (! $tbl_is_view && ! $db_is_system_schema): ?>
    <br />
    <?= Template::get('table/structure/add_column')->render(
        array('columns_list' => $columns_list)
    ); ?>
<?php endif; ?>

<!--Displays indexes-->
<?php if (! $tbl_is_view
    && ! $db_is_system_schema && 'ARCHIVE' !=  $tbl_storage_engine): ?>
    <?= PMA_getHtmlForDisplayIndexes(); ?>
<?php endif; ?>

<!--Display partition details-->
<?php if (Partition::havePartitioning()):
    $partition_names = Partition::getPartitionNames($db, $table);

    // detect partitioning
    if (! empty($partition_names) && ! is_null($partition_names[0])):

        $partitions = Partition::getPartitions($db, $table);
        $firstPartition = $partitions[0];
        $rangeOrList = $firstPartition->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,
                'partitionMethod' => $firstPartition->getMethod(),
                'partitionExpression' => $firstPartition->getExpression(),
                'hasDescription' => ! empty($tmp_partition_description),
                'hasSubPartitions' => $hasSubPartitions,
                'subPartitionMethod' => $hasSubPartitions ? $firstSubPartition->getMethod() : null,
                'subPartitionExpression' => $hasSubPartitions ? $firstSubPartition->getExpression() : null,
                'actionIcons' => $actionIcons,
                'rangeOrList' => $rangeOrList,
                'removeUrl' => $removeUrl,
            )
        );
    else:
        echo Template::get('table/structure/display_partitions')->render(
            array(
                'db' => $db,
                'table' => $table,
            )
        );
    endif;
    ?>
    <!-- For closing Slider effect div-->
    </div>
<?php endif; ?>

<!--Displays Space usage and row statistics-->
<?php if ($GLOBALS['cfg']['ShowStats']): ?>
    <?= $tablestats;  ?>
<?php endif; ?>
<div class="clearfloat"></div>
