{% extends 'table/page_with_secondary_tabs.twig' %}
{% block content %}
<form method="post" action="tbl_structure.php" name="fieldsForm" id="fieldsForm"
    class="ajax{{ hide_structure_actions ? ' HideStructureActions' }}">
    {{ get_hidden_inputs(db, table) }}
    <input type="hidden" name="table_type" value=
        {%- if db_is_system_schema -%}
            "information_schema"
        {%- elseif tbl_is_view -%}
            "view"
        {%- else -%}
            "table"
        {%- endif %}>
    <div class="responsivetable">
    <table id="tablestructure" class="data topmargin">
        {# Table header #}
        <thead>
            <tr>
                <th class="print_ignore"></th>
                <th>#</th>
                <th>{% trans 'Name' %}</th>
                <th>{% trans 'Type' %}</th>
                <th>{% trans 'Collation' %}</th>
                <th>{% trans 'Attributes' %}</th>
                <th>{% trans 'Null' %}</th>
                <th>{% trans 'Default' %}</th>
                {% if show_column_comments -%}
                    <th>{% trans 'Comments' %}</th>
                {%- endif %}
                <th>{% trans 'Extra' %}</th>
                {# @see table/structure.js, function moreOptsMenuResize() #}
                {% if not db_is_system_schema and not tbl_is_view %}
                    <th colspan="{{ show_icons('ActionLinksMode') ? '8' : '9' -}}
                        " class="action print_ignore">{% trans 'Action' %}</th>
                {% endif %}
            </tr>
        </thead>
        <tbody>
        {# Table body #}
        {% set rownum = 0 %}
        {% for row in fields %}
            {% set rownum = rownum + 1 %}

            {% set extracted_columnspec = extracted_columnspecs[rownum] %}
            {% set field_name = row['Field']|e %}
            {# For column comments #}
            {% set comments = row_comments[rownum] %}
            {# Underline commented fields and display a hover-title (CSS only) #}

        <tr>
            <td class="center print_ignore">
                <input type="checkbox" class="checkall" name="selected_fld[]" value="{{ row['Field'] }}" id="checkbox_row_{{ rownum }}">
            </td>
            <td class="right">{{ rownum }}</td>
            <th class="nowrap">
                <label for="checkbox_row_{{ rownum }}">
                    {% if displayed_fields[rownum].comment is defined %}
                        <span class="commented_column" title="{{ displayed_fields[rownum].comment }}">{{ displayed_fields[rownum].text }}</span>
                    {% else %}
                        {{ displayed_fields[rownum].text }}
                    {% endif %}
                    {{ displayed_fields[rownum].icon|raw }}
                </label>
            </th>
            <td{{ 'set' != extracted_columnspec['type'] and 'enum' != extracted_columnspec['type'] ? ' class="nowrap"' }}>
                <bdo dir="ltr" lang="en">
                    {{ extracted_columnspec['displayed_type']|raw }}
                    {% if relation_commwork and relation_mimework and browse_mime
                        and mime_map[row['Field']]['mimetype'] is defined %}
                        <br>{% trans 'Media (MIME) type:' %} {{ mime_map[row['Field']]['mimetype']|replace({'_': '/'})|lower }}
                    {% endif %}
                </bdo>
            </td>
            <td>
            {% if row['Collation'] is not empty %}
                <dfn title="{{ collations[row['Collation']].description }}">{{ collations[row['Collation']].name }}</dfn>
            {% endif %}
            </td>
            <td class="column_attribute nowrap">{{ attributes[rownum] }}</td>
            <td>{{ row['Null'] == 'YES' ? 'Yes'|trans : 'No'|trans }}</td>
            <td class="nowrap">
                {% if row['Default'] is not null %}
                    {% if extracted_columnspec['type'] == 'bit' %}
                        {{ row['Default']|convert_bit_default_value }}
                    {% else %}
                        {{ row['Default'] }}
                    {% endif %}
                {% elseif row['Null'] == 'YES' %}
                    <em>NULL</em>
                {% else %}
                    <em>{% trans %}None{% context %}None for default{% endtrans %}</em>
                {% endif %}
            </td>
            {% if show_column_comments %}
                <td>
                    {{ comments }}
                </td>
            {% endif %}
            <td class="nowrap">{{ row['Extra']|upper }}</td>
            {% if not tbl_is_view and not db_is_system_schema %}
                <td class="edit center print_ignore">
                    <a class="change_column_anchor ajax" href="tbl_structure.php
                        {{- url_query }}&amp;field={{ row['Field']|url_encode }}&amp;change_column=1">
                        {{ titles['Change']|raw }}
                    </a>
                </td>
                <td class="drop center print_ignore">
                    <a class="drop_column_anchor ajax" href="sql.php" data-post="{{ url_query }}&amp;sql_query=
                        {{- ('ALTER TABLE ' ~ backquote(table)
                            ~ ' DROP ' ~ backquote(row['Field']) ~ ';')|url_encode -}}
                        &amp;dropped_column={{ row['Field']|url_encode }}&amp;purge=1&amp;message_to_show=
                        {{- ('Column %s has been dropped.'|trans|format(row['Field']|e))|url_encode }}">
                        {{ titles['Drop']|raw }}
                    </a>
                </td>
            {% endif %}

            {% if not tbl_is_view and not db_is_system_schema %}
                {% set type = extracted_columnspec['print_type'] is not empty ? extracted_columnspec['print_type'] %}
                <td class="print_ignore">
                    <ul class="table-structure-actions resizable-menu">
                        {% if hide_structure_actions %}
                            <li class="submenu shown">
                                <a href="#" class="tab nowrap">{{ get_icon('b_more', 'More'|trans) }}</a>
                                <ul>
                        {% endif %}
                        {# Add primary #}
                        {% include 'table/structure/action_row_in_structure_table.twig' with {
                            'type': type,
                            'tbl_storage_engine': tbl_storage_engine,
                            'class': 'primary nowrap',
                            'has_field': primary and primary.hasColumn(field_name),
                            'has_link_class': true,
                            'url_query': url_query,
                            'primary': primary,
                            'syntax': 'ADD PRIMARY KEY',
                            'message': 'A primary key has been added on %s.'|trans,
                            'action': 'Primary',
                            'titles': titles,
                            'row': row,
                            'is_primary': true,
                            'table': table
                        } only %}

                        {# Add unique #}
                        {% include 'table/structure/action_row_in_structure_table.twig' with {
                            'type': type,
                            'tbl_storage_engine': tbl_storage_engine,
                            'class': 'add_unique unique nowrap',
                            'has_field': field_name in columns_with_unique_index,
                            'has_link_class': false,
                            'url_query': url_query,
                            'primary': primary,
                            'syntax': 'ADD UNIQUE',
                            'message': 'An index has been added on %s.'|trans,
                            'action': 'Unique',
                            'titles': titles,
                            'row': row,
                            'is_primary': false,
                            'table': table
                        } only %}

                        {# Add index #}
                        {% include 'table/structure/action_row_in_structure_table.twig' with {
                            'type': type,
                            'tbl_storage_engine': tbl_storage_engine,
                            'class': 'add_index nowrap',
                            'has_field': false,
                            'has_link_class': false,
                            'url_query': url_query,
                            'primary': primary,
                            'syntax': 'ADD INDEX',
                            'message': 'An index has been added on %s.'|trans,
                            'action': 'Index',
                            'titles': titles,
                            'row': row,
                            'is_primary': false,
                            'table': table
                        } only %}

                        {# Add spatial #}
                        {% set spatial_types = [
                            'geometry',
                            'point',
                            'linestring',
                            'polygon',
                            'multipoint',
                            'multilinestring',
                            'multipolygon',
                            'geomtrycollection'
                        ] %}
                        {% include 'table/structure/action_row_in_structure_table.twig' with {
                            'type': type,
                            'tbl_storage_engine': tbl_storage_engine,
                            'class': 'spatial nowrap',
                            'has_field': type not in spatial_types and
                                (tbl_storage_engine == 'MYISAM' or mysql_int_version >= 50705),
                            'has_link_class': false,
                            'url_query': url_query,
                            'primary': primary,
                            'syntax': 'ADD SPATIAL',
                            'message': 'An index has been added on %s.'|trans,
                            'action': 'Spatial',
                            'titles': titles,
                            'row': row,
                            'is_primary': false,
                            'table': table
                        } only %}

                        {# FULLTEXT is possible on TEXT, CHAR and VARCHAR #}
                        <li class="fulltext nowrap">
                        {% if tbl_storage_engine is not empty and (
                                tbl_storage_engine == 'MYISAM'
                                or tbl_storage_engine == 'ARIA'
                                or tbl_storage_engine == 'MARIA'
                                or (tbl_storage_engine == 'INNODB' and mysql_int_version >= 50604)
                            ) and ('text' in type or 'char' in type) %}
                            <a rel="samepage" class="ajax add_key add_fulltext_anchor" href="tbl_structure.php"
                                data-post="{{- url_query|raw }}&amp;add_key=1&amp;sql_query=
                                {{- ('ALTER TABLE ' ~ backquote(table)
                                    ~ ' ADD FULLTEXT(' ~ backquote(row['Field'])
                                    ~ ');')|url_encode }}&amp;message_to_show=
                                {{- ('An index has been added on %s.'|trans|format(row['Field']|e))|url_encode }}">
                                {{ titles['IdxFulltext']|raw }}
                            </a>
                        {% else %}
                            {{ titles['NoIdxFulltext']|raw }}
                        {% endif %}
                        </li>

                        {# Distinct value action #}
                        <li class="browse nowrap">
                            <a href="sql.php" data-post="{{ url_query|raw }}&amp;sql_query=
                                {{- ('SELECT COUNT(*) AS ' ~ backquote('Rows'|trans)
                                    ~ ', ' ~ backquote(row['Field'])
                                    ~ ' FROM ' ~ backquote(table)
                                    ~ ' GROUP BY ' ~ backquote(row['Field'])
                                    ~ ' ORDER BY ' ~ backquote(row['Field']))|url_encode -}}
                                &amp;is_browse_distinct=1">
                                {{ titles['DistinctValues']|raw }}
                            </a>
                        </li>
                        {% if central_columns_work %}
                            <li class="browse nowrap">
                            {% if row['Field'] in central_list %}
                                <a href="#" class="central_columns remove_button">
                                    {{ get_icon('centralColumns_delete', 'Remove from central columns'|trans) }}
                                </a>
                            {% else %}
                                <a href="#" class="central_columns add_button">
                                    {{ get_icon('centralColumns_add', 'Add to central columns'|trans) }}
                                </a>
                            {% endif %}
                            </li>
                        {% endif %}
                        {% if hide_structure_actions %}
                                </ul>
                            </li>
                        {% endif %}
                    </ul>
                </td>
            {% endif %}
        </tr>
        {% endfor %}
        </tbody>
    </table>
    </div>
    <div class="print_ignore">
        {% include 'select_all.twig' with {
            'pma_theme_image': pma_theme_image,
            'text_dir': text_dir,
            'form_name': 'fieldsForm'
        } only %}

        {{ get_button_or_image(
            'submit_mult',
            'mult_submit',
            'Browse'|trans,
            'b_browse',
            'browse'
        ) }}

        {% if not tbl_is_view and not db_is_system_schema %}
            {{ get_button_or_image(
                'submit_mult',
                'mult_submit change_columns_anchor ajax',
                'Change'|trans,
                'b_edit',
                'change'
            ) }}
            {{ get_button_or_image(
                'submit_mult',
                'mult_submit',
                'Drop'|trans,
                'b_drop',
                'drop'
            ) }}

            {% if tbl_storage_engine != 'ARCHIVE' %}
                {{ get_button_or_image(
                    'submit_mult',
                    'mult_submit',
                    'Primary'|trans,
                    'b_primary',
                    'primary'
                ) }}
                {{ get_button_or_image(
                    'submit_mult',
                    'mult_submit',
                    'Unique'|trans,
                    'b_unique',
                    'unique'
                ) }}
                {{ get_button_or_image(
                    'submit_mult',
                    'mult_submit',
                    'Index'|trans,
                    'b_index',
                    'index'
                ) }}
                {{ get_button_or_image(
                    'submit_mult',
                    'mult_submit',
                    'Fulltext'|trans,
                    'b_ftext',
                    'ftext'
                ) }}

                {% if tbl_storage_engine is not empty and (
                    tbl_storage_engine == 'MYISAM'
                    or tbl_storage_engine == 'ARIA'
                    or tbl_storage_engine == 'MARIA') %}
                    {{ get_button_or_image(
                        'submit_mult',
                        'mult_submit',
                        'Fulltext'|trans,
                        'b_ftext',
                        'ftext'
                    ) }}
                {% endif %}

                {% if central_columns_work %}
                    {{ get_button_or_image(
                        'submit_mult',
                        'mult_submit',
                        'Add to central columns'|trans,
                        'centralColumns_add',
                        'add_to_central_columns'
                    ) }}
                    {{ get_button_or_image(
                        'submit_mult',
                        'mult_submit',
                        'Remove from central columns'|trans,
                        'centralColumns_delete',
                        'remove_from_central_columns'
                    ) }}
                {% endif %}
            {% endif %}
        {% endif %}
    </div>
</form>
<hr class="print_ignore">
<div id="move_columns_dialog" class="hide" title="{% trans 'Move columns' %}">
    <p>{% trans 'Move the columns by dragging them up and down.' %}</p>
    <form action="tbl_structure.php" name="move_column_form" id="move_column_form">
        <div>
            {{ get_hidden_inputs(db, table) }}
            <ul></ul>
        </div>
    </form>
</div>
{# Work on the table #}
<div id="structure-action-links">
    {% if tbl_is_view and not db_is_system_schema %}
        {% set edit_view_url = 'view_create.php' ~ edit_view_url %}
        {{ link_or_button(
            edit_view_url,
            get_icon('b_edit', 'Edit view'|trans, true)
        ) }}
    {% endif %}
    <a href="#" id="printView">{{ get_icon('b_print', 'Print'|trans, true) }}</a>
    {% if not tbl_is_view and not db_is_system_schema %}
        {# Only display propose table structure for MySQL < 8.0 #}
        {% if mysql_int_version < 80000 or is_mariadb %}
          <a href="sql.php" data-post="{{ url_query|raw }}&amp;session_max_rows=all&amp;sql_query=
              {{- ('SELECT * FROM ' ~ backquote(table) ~ ' PROCEDURE ANALYSE()')|url_encode -}}
              " style="margin-right: 0;">
              {{ get_icon(
                  'b_tblanalyse',
                  'Propose table structure'|trans,
                  true
              ) }}
          </a>
          {{ show_mysql_docu('procedure_analyse') }}
        {% endif %}
        {% if is_active %}
            <a href="tbl_tracking.php{{ url_query|raw }}">
                {{ get_icon('eye', 'Track table'|trans, true) }}
            </a>
        {% endif %}
        <a href="#" id="move_columns_anchor">
            {{ get_icon('b_move', 'Move columns'|trans, true) }}
        </a>
        <a href="normalization.php{{ url_query|raw }}">
            {{ get_icon('normalize', 'Normalize'|trans, true) }}
        </a>
    {% endif %}
    {% if tbl_is_view and not db_is_system_schema %}
        {% if is_active %}
            <a href="tbl_tracking.php{{ url_query|raw }}">
                {{ get_icon('eye', 'Track view'|trans, true) }}
            </a>
        {% endif %}
    {% endif %}
</div>
{% if not tbl_is_view and not db_is_system_schema %}
    <form method="post" action="tbl_addfield.php" id="addColumns" name="addColumns">
        {{ get_hidden_inputs(db, table) }}
        {% if show_icons('ActionLinksMode') %}
            {{ get_image('b_insrow', 'Add column'|trans) }}&nbsp;
        {% endif %}
        {% set num_fields -%}
            <input type="number" name="num_fields" value="1" onfocus="this.select()" min="1" required>
        {%- endset %}
        {{ 'Add %s column(s)'|trans|format(num_fields)|raw }}
        <input type="hidden" name="field_where" value="after">&nbsp;
        {# I tried displaying the drop-down inside the label but with Firefox the drop-down was blinking #}
        <select name="after_field">
            <option value="first" data-pos="first">
                {% trans 'at beginning of table' %}
            </option>
            {% for one_column_name in columns_list %}
                <option value="{{ one_column_name }}"
                    {{- loop.revindex0 == 0 ? ' selected="selected"' }}>
                    {{ 'after %s'|trans|format(one_column_name) }}
                </option>
            {% endfor %}
        </select>
        <input class="btn btn-primary" type="submit" value="{% trans 'Go' %}">
    </form>
{% endif %}

{# Displays indexes #}
{% if not tbl_is_view and not db_is_system_schema
    and 'ARCHIVE' !=  tbl_storage_engine %}
    {{ displayIndexesHtml|raw }}
{% endif %}

{# Display partition details #}
{% if have_partitioning %}
    {# Detect partitioning #}
    {% if partition_names is not empty and partition_names[0] is not null %}
        {% 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': get_icon('b_search', 'Analyze'|trans),
            'CHECK': get_icon('eye', 'Check'|trans),
            'OPTIMIZE': get_icon('normalize', 'Optimize'|trans),
            'REBUILD': get_icon('s_tbl', 'Rebuild'|trans),
            'REPAIR': get_icon('b_tblops', 'Repair'|trans),
            'TRUNCATE': get_icon('b_empty', 'Truncate'|trans),
        } %}
        {% if range_or_list %}
            {% set action_icons = action_icons|merge({'DROP': get_icon('b_drop', 'Drop'|trans)}) %}
        {% endif %}

        {# open Slider Effect div #}
        {% include 'div_for_slider_effect.twig' with {
            'id': 'partitions-2',
            'message': 'Partitions'|trans,
            'initial_sliders_state': default_sliders_state
        } only %}

        {% set remove_sql = 'ALTER TABLE ' ~ 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 #}
    </div>
{% endif %}

{# Displays Space usage and row statistics #}
{% if show_stats %}
    {{ table_stats|raw }}
{% endif %}
<div class="clearfloat"></div>
{% endblock %}
