aboutsummaryrefslogtreecommitdiff
path: root/srcs/phpmyadmin/templates/database/designer
diff options
context:
space:
mode:
Diffstat (limited to 'srcs/phpmyadmin/templates/database/designer')
-rw-r--r--srcs/phpmyadmin/templates/database/designer/database_tables.twig121
-rw-r--r--srcs/phpmyadmin/templates/database/designer/edit_delete_pages.twig13
-rw-r--r--srcs/phpmyadmin/templates/database/designer/main.twig1105
-rw-r--r--srcs/phpmyadmin/templates/database/designer/page_save_as.twig37
-rw-r--r--srcs/phpmyadmin/templates/database/designer/page_selector.twig10
-rw-r--r--srcs/phpmyadmin/templates/database/designer/schema_export.twig9
6 files changed, 1295 insertions, 0 deletions
diff --git a/srcs/phpmyadmin/templates/database/designer/database_tables.twig b/srcs/phpmyadmin/templates/database/designer/database_tables.twig
new file mode 100644
index 0000000..5453bb5
--- /dev/null
+++ b/srcs/phpmyadmin/templates/database/designer/database_tables.twig
@@ -0,0 +1,121 @@
+{% for designerTable in tables %}
+ {% set i = loop.index0 %}
+ {% set t_n_url = designerTable.getDbTableString()|escape('url') %}
+ {% set db = designerTable.getDatabaseName() %}
+ {% set db_url = db|escape('url') %}
+ {% set t_n = designerTable.getDbTableString() %}
+ {% set table_name = designerTable.getTableName()|escape('html') %}
+ <input name="t_x[{{ t_n_url }}]" type="hidden" id="t_x_{{ t_n_url }}_" />
+ <input name="t_y[{{ t_n_url }}]" type="hidden" id="t_y_{{ t_n_url }}_" />
+ <input name="t_v[{{ t_n_url }}]" type="hidden" id="t_v_{{ t_n_url }}_" />
+ <input name="t_h[{{ t_n_url }}]" type="hidden" id="t_h_{{ t_n_url }}_" />
+ <table id="{{ t_n_url }}"
+ db_url="{{ designerTable.getDatabaseName()|escape('url') }}"
+ table_name_url="{{ designerTable.getTableName()|escape('url') }}"
+ cellpadding="0"
+ cellspacing="0"
+ class="designer_tab"
+ style="position:absolute; left:
+ {{- tab_pos[t_n] is defined ? tab_pos[t_n]['X'] : random(range(20, 700)) }}px; top:
+ {{- tab_pos[t_n] is defined ? tab_pos[t_n]['Y'] : random(range(20, 550)) }}px; display:
+ {{- tab_pos[t_n] is defined or display_page == -1 ? 'block' : 'none' }}; z-index: 1;"> <!--"-->
+ <thead>
+ <tr class="header">
+ {% if has_query %}
+ <td class="select_all">
+ <input class="select_all_1"
+ type="checkbox"
+ style="margin: 0;"
+ value="select_all_{{ t_n_url }}"
+ id="select_all_{{ i }}"
+ title="{% trans 'Select all' %}"
+ table_name="{{ table_name }}"
+ db_name="{{ db }}">
+ </td>
+ {% endif %}
+ <td class="small_tab"
+ title="{% trans 'Show/hide columns' %}"
+ id="id_hide_tbody_{{ t_n_url }}"
+ table_name="{{ t_n_url }}">{{ tab_pos[t_n] is not defined or tab_pos[t_n]['V'] is not empty ? 'v' : '&gt;' }}</td>
+ <td class="small_tab_pref small_tab_pref_1"
+ db="{{ designerTable.getDatabaseName() }}"
+ db_url="{{ designerTable.getDatabaseName()|escape('url') }}"
+ table_name="{{ designerTable.getTableName() }}"
+ table_name_url="{{ designerTable.getTableName()|escape('url') }}">
+ <img src="{{ theme.getImgPath('designer/exec_small.png') }}"
+ title="{% trans 'See table structure' %}">
+ </td>
+ <td id="id_zag_{{ t_n_url }}"
+ class="tab_zag nowrap tab_zag_noquery"
+ table_name="{{ t_n_url }}"
+ query_set="{{ has_query ? 1 : 0 }}">
+ <span class="owner">{{ designerTable.getDatabaseName() }}</span>
+ {{ designerTable.getTableName() }}
+ </td>
+ {% if has_query %}
+ <td class="tab_zag tab_zag_query"
+ id="id_zag_{{ t_n_url }}_2"
+ table_name="{{ t_n_url }}">
+ </td>
+ {% endif %}
+ </tr>
+ </thead>
+ <tbody id="id_tbody_{{ t_n_url }}"
+ {{- tab_pos[t_n] is defined and tab_pos[t_n]['V'] is empty ? ' style="display: none"' }}>
+ {% set display_field = designerTable.getDisplayField() %}
+ {% for j in 0..tab_column[t_n]['COLUMN_ID']|length - 1 %}
+ {% set col_name = tab_column[t_n]['COLUMN_NAME'][j] %}
+ {% set tmp_column = t_n ~ '.' ~ tab_column[t_n]['COLUMN_NAME'][j] %}
+ {% set click_field_param = [
+ designerTable.getTableName()|escape('url'),
+ tab_column[t_n]['COLUMN_NAME'][j]|url_encode
+ ] %}
+ {% if not designerTable.supportsForeignkeys() %}
+ {% set click_field_param = click_field_param|merge([tables_pk_or_unique_keys[tmp_column] is defined ? 1 : 0]) %}
+ {% else %}
+ {# if foreign keys are supported, it's not necessary that the
+ index is a primary key #}
+ {% set click_field_param = click_field_param|merge([tables_all_keys[tmp_column] is defined ? 1 : 0]) %}
+ {% endif %}
+ {% set click_field_param = click_field_param|merge([db]) %}
+ <tr id="id_tr_{{ designerTable.getTableName()|escape('url') }}.{{ tab_column[t_n]['COLUMN_NAME'][j] }}" class="tab_field
+ {{- display_field == tab_column[t_n]['COLUMN_NAME'][j] ? '_3' }}" click_field_param="
+ {{- click_field_param|join(',') }}">
+ {% if has_query %}
+ <td class="select_all">
+ <input class="select_all_store_col"
+ value="{{ t_n_url }}{{ tab_column[t_n]['COLUMN_NAME'][j]|url_encode }}"
+ type="checkbox"
+ id="select_{{ t_n_url }}._{{ tab_column[t_n]['COLUMN_NAME'][j]|url_encode }}"
+ style="margin: 0;"
+ title="{{ 'Select "%s"'|trans|format(col_name) }}"
+ id_check_all="select_all_{{ i }}"
+ db_name="{{ db }}"
+ table_name="{{ table_name }}"
+ col_name="{{ col_name }}">
+ </td>
+ {% endif %}
+ <td width="10px" colspan="3" id="{{ t_n_url }}.
+ {{- tab_column[t_n]['COLUMN_NAME'][j]|url_encode }}">
+ <div class="nowrap">
+ {% set type = columns_type[t_n ~ '.' ~ tab_column[t_n]['COLUMN_NAME'][j]] %}
+ <img src="{{ theme.getImgPath(type) }}.png" alt="*">
+ {{ tab_column[t_n]['COLUMN_NAME'][j] }} : {{ tab_column[t_n]['TYPE'][j] }}
+ </div>
+ </td>
+ {% if has_query %}
+ <td class="small_tab_pref small_tab_pref_click_opt"
+ {# Escaped 2 times to be able to use it in innerHtml #}
+ option_col_name_modal="<strong>{{ 'Add an option for column "%s".'|trans|format(col_name)|escape('html')|escape('html') }}</strong>"
+ db_name="{{ db }}"
+ table_name="{{ table_name }}"
+ col_name="{{ col_name }}"
+ db_table_name_url="{{ t_n_url }}">
+ <img src="{{ theme.getImgPath('designer/exec_small.png') }}" title="{% trans 'Options' %}" />
+ </td>
+ {% endif %}
+ </tr>
+ {% endfor %}
+ </tbody>
+ </table>
+{% endfor %}
diff --git a/srcs/phpmyadmin/templates/database/designer/edit_delete_pages.twig b/srcs/phpmyadmin/templates/database/designer/edit_delete_pages.twig
new file mode 100644
index 0000000..75d1a1a
--- /dev/null
+++ b/srcs/phpmyadmin/templates/database/designer/edit_delete_pages.twig
@@ -0,0 +1,13 @@
+<form action="db_designer.php" method="post" name="edit_delete_pages" id="edit_delete_pages" class="ajax">
+ {{ get_hidden_inputs(db) }}
+ <fieldset id="page_edit_delete_options">
+ <input type="hidden" name="operation" value="{{ operation }}">
+ <label for="selected_page">
+ {{ operation == 'editPage' ? 'Page to open'|trans : 'Page to delete'|trans }}:
+ </label>
+ {% include 'database/designer/page_selector.twig' with {
+ 'pdfwork': pdfwork,
+ 'pages': pages
+ } only %}
+ </fieldset>
+</form>
diff --git a/srcs/phpmyadmin/templates/database/designer/main.twig b/srcs/phpmyadmin/templates/database/designer/main.twig
new file mode 100644
index 0000000..f971dc5
--- /dev/null
+++ b/srcs/phpmyadmin/templates/database/designer/main.twig
@@ -0,0 +1,1105 @@
+{# Invisible characters will make javascript crash #}
+{% apply spaceless %}
+<script type="text/javascript">
+var designerConfig = {{ designer_config|raw }};
+</script>
+{% endapply %}
+
+{# side menu #}
+{% if not has_query %}
+ <div id="name-panel">
+ <span id="page_name">
+ {{ selected_page == null ? 'Untitled'|trans : selected_page }}
+ </span>
+ <span id="saved_state">
+ {{ selected_page == null ? '*' : '' }}
+ </span>
+ </div>
+{% endif %}
+<div class="designer_header side-menu" id="side_menu">
+ <a class="M_butt" id="key_Show_left_menu" href="#">
+ <img title="{% trans 'Show/Hide tables list' %}"
+ alt="v"
+ src="{{ theme.getImgPath('designer/downarrow2_m.png') }}"
+ data-down="{{ theme.getImgPath('designer/downarrow2_m.png') }}"
+ data-up="{{ theme.getImgPath('designer/uparrow2_m.png') }}">
+ <span class="hide hidable">
+ {% trans 'Show/Hide tables list' %}
+ </span>
+ </a>
+ <a href="#" id="toggleFullscreen" class="M_butt">
+ <img title="{% trans 'View in fullscreen' %}"
+ src="{{ theme.getImgPath('designer/viewInFullscreen.png') }}"
+ data-enter="{{ theme.getImgPath('designer/viewInFullscreen.png') }}"
+ data-exit="{{ theme.getImgPath('designer/exitFullscreen.png') }}">
+ <span class="hide hidable"
+ data-exit="{% trans 'Exit fullscreen' %}"
+ data-enter="{% trans 'View in fullscreen' %}">
+ {% trans 'View in fullscreen' %}
+ </span>
+ </a>
+ <a href="#" id="addOtherDbTables" class="M_butt">
+ <img title="{% trans 'Add tables from other databases' %}"
+ src="{{ theme.getImgPath('designer/other_table.png') }}">
+ <span class="hide hidable">
+ {% trans 'Add tables from other databases' %}
+ </span>
+ </a>
+ {% if not has_query %}
+ <a id="newPage" href="#" class="M_butt">
+ <img title="{% trans 'New page' %}"
+ alt=""
+ src="{{ theme.getImgPath('designer/page_add.png') }}">
+ <span class="hide hidable">
+ {% trans 'New page' %}
+ </span>
+ </a>
+ <a href="#" id="editPage" class="M_butt ajax">
+ <img title="{% trans 'Open page' %}"
+ src="{{ theme.getImgPath('designer/page_edit.png') }}">
+ <span class="hide hidable">
+ {% trans 'Open page' %}
+ </span>
+ </a>
+ <a href="#" id="savePos" class="M_butt">
+ <img title="{% trans 'Save page' %}"
+ src="{{ theme.getImgPath('designer/save.png') }}">
+ <span class="hide hidable">
+ {% trans 'Save page' %}
+ </span>
+ </a>
+ <a href="#" id="SaveAs" class="M_butt ajax">
+ <img title="{% trans 'Save page as' %}"
+ src="{{ theme.getImgPath('designer/save_as.png') }}">
+ <span class="hide hidable">
+ {% trans 'Save page as' %}
+ </span>
+ </a>
+ <a href="#" id="delPages" class="M_butt ajax">
+ <img title="{% trans 'Delete pages' %}"
+ src="{{ theme.getImgPath('designer/page_delete.png') }}">
+ <span class="hide hidable">
+ {% trans 'Delete pages' %}
+ </span>
+ </a>
+ <a href="#" id="StartTableNew" class="M_butt">
+ <img title="{% trans 'Create table' %}"
+ src="{{ theme.getImgPath('designer/table.png') }}">
+ <span class="hide hidable">
+ {% trans 'Create table' %}
+ </span>
+ </a>
+ <a href="#" class="M_butt" id="rel_button">
+ <img title="{% trans 'Create relationship' %}"
+ src="{{ theme.getImgPath('designer/relation.png') }}">
+ <span class="hide hidable">
+ {% trans 'Create relationship' %}
+ </span>
+ </a>
+ <a href="#" class="M_butt" id="display_field_button">
+ <img title="{% trans 'Choose column to display' %}"
+ src="{{ theme.getImgPath('designer/display_field.png') }}">
+ <span class="hide hidable">
+ {% trans 'Choose column to display' %}
+ </span>
+ </a>
+ <a href="#" id="reloadPage" class="M_butt">
+ <img title="{% trans 'Reload' %}"
+ src="{{ theme.getImgPath('designer/reload.png') }}">
+ <span class="hide hidable">
+ {% trans 'Reload' %}
+ </span>
+ </a>
+ <a href="{{ get_docu_link('faq', 'faq6-31') }}"
+ target="documentation"
+ class="M_butt">
+ <img title="{% trans 'Help' %}"
+ src="{{ theme.getImgPath('designer/help.png') }}">
+ <span class="hide hidable">
+ {% trans 'Help' %}
+ </span>
+ </a>
+ {% endif %}
+ <a href="#" class="{{ params_array['angular_direct'] }}" id="angular_direct_button">
+ <img title="{% trans 'Angular links' %} / {% trans 'Direct links' %}"
+ src="{{ theme.getImgPath('designer/ang_direct.png') }}">
+ <span class="hide hidable">
+ {% trans 'Angular links' %} / {% trans 'Direct links' %}
+ </span>
+ </a>
+ <a href="#" class="{{ params_array['snap_to_grid'] }}" id="grid_button">
+ <img title="{% trans 'Snap to grid' %}" src="{{ theme.getImgPath('designer/grid.png') }}">
+ <span class="hide hidable">
+ {% trans 'Snap to grid' %}
+ </span>
+ </a>
+ <a href="#" class="{{ params_array['small_big_all'] }}" id="key_SB_all">
+ <img title="{% trans 'Small/Big All' %}"
+ alt="v"
+ src="{{ theme.getImgPath('designer/downarrow1.png') }}"
+ data-down="{{ theme.getImgPath('designer/downarrow1.png') }}"
+ data-right="{{ theme.getImgPath('designer/rightarrow1.png') }}">
+ <span class="hide hidable">
+ {% trans 'Small/Big All' %}
+ </span>
+ </a>
+ <a href="#" id="SmallTabInvert" class="M_butt">
+ <img title="{% trans 'Toggle small/big' %}"
+ src="{{ theme.getImgPath('designer/bottom.png') }}">
+ <span class="hide hidable">
+ {% trans 'Toggle small/big' %}
+ </span>
+ </a>
+ <a href="#" id="relLineInvert" class="{{ params_array['relation_lines'] }}" >
+ <img title="{% trans 'Toggle relationship lines' %}"
+ src="{{ theme.getImgPath('designer/toggle_lines.png') }}">
+ <span class="hide hidable">
+ {% trans 'Toggle relationship lines' %}
+ </span>
+ </a>
+ {% if not visual_builder %}
+ <a href="#" id="exportPages" class="M_butt" >
+ <img title="{% trans 'Export schema' %}"
+ src="{{ theme.getImgPath('designer/export.png') }}">
+ <span class="hide hidable">
+ {% trans 'Export schema' %}
+ </span>
+ </a>
+ {% else %}
+ <a id="build_query_button"
+ class="M_butt"
+ href="#"
+ class="M_butt">
+ <img title="{% trans 'Build Query' %}"
+ src="{{ theme.getImgPath('designer/query_builder.png') }}">
+ <span class="hide hidable">
+ {% trans 'Build Query' %}
+ </span>
+ </a>
+ {% endif %}
+ <a href="#" class="{{ params_array['side_menu'] }}" id="key_Left_Right">
+ <img title="{% trans 'Move Menu' %}" alt=">"
+ data-right="{{ theme.getImgPath('designer/2leftarrow_m.png') }}"
+ src="{{ theme.getImgPath('designer/2rightarrow_m.png') }}">
+ <span class="hide hidable">
+ {% trans 'Move Menu' %}
+ </span>
+ </a>
+ <a href="#" class="{{ params_array['pin_text'] }}" id="pin_Text">
+ <img title="{% trans 'Pin text' %}"
+ alt=">"
+ data-right="{{ theme.getImgPath('designer/anchor.png') }}"
+ src="{{ theme.getImgPath('designer/anchor.png') }}">
+ <span class="hide hidable">
+ {% trans 'Pin text' %}
+ </span>
+ </a>
+</div>
+<div id="canvas_outer">
+ <form action="" id="container-form" method="post" name="form1">
+ <div id="osn_tab">
+ <canvas class="designer" id="canvas" width="100" height="100"></canvas>
+ </div>
+ <div id="layer_menu" class="hide">
+ <div class="center">
+ <a href="#" class="M_butt" target="_self" >
+ <img title="{% trans 'Hide/Show all' %}"
+ alt="v"
+ id="key_HS_all"
+ src="{{ theme.getImgPath('designer/downarrow1.png') }}"
+ data-down="{{ theme.getImgPath('designer/downarrow1.png') }}"
+ data-right="{{ theme.getImgPath('designer/rightarrow1.png') }}">
+ </a>
+ <a href="#" class="M_butt" target="_self" >
+ <img alt="v"
+ id="key_HS"
+ title="{% trans 'Hide/Show tables with no relationship' %}"
+ src="{{ theme.getImgPath('designer/downarrow2.png') }}"
+ data-down="{{ theme.getImgPath('designer/downarrow2.png') }}"
+ data-right="{{ theme.getImgPath('designer/rightarrow2.png') }}">
+ </a>
+ </div>
+ <div id="id_scroll_tab" class="scroll_tab">
+ <table width="100%" style="padding-left: 3px;"></table>
+ </div>
+ {# end id_scroll_tab #}
+ <div class="center">
+ {% trans 'Number of tables:' %} <span id="tables_counter">0</span>
+ </div>
+ <div id="layer_menu_sizer">
+ <div class="floatleft">
+ <img class="icon"
+ data-right="{{ theme.getImgPath('designer/resizeright.png') }}"
+ src="{{ theme.getImgPath('designer/resize.png') }}">
+ </div>
+ </div>
+ </div>
+ {# end layer_menu #}
+ {% include 'database/designer/database_tables.twig' with {
+ 'db': db,
+ 'get_db': get_db,
+ 'has_query': has_query,
+ 'tab_pos': tab_pos,
+ 'display_page': display_page,
+ 'tab_column': tab_column,
+ 'tables_all_keys': tables_all_keys,
+ 'tables_pk_or_unique_keys': tables_pk_or_unique_keys,
+ 'columns_type': columns_type,
+ 'tables': designerTables,
+ 'theme': theme,
+ } only %}
+ </form>
+</div>
+<div id="designer_hint"></div>
+{# create relation pane #}
+<table id="layer_new_relation" class="hide" width="5%" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="frams1" width="10px">
+ </td>
+ <td class="frams5" width="99%" >
+ </td>
+ <td class="frams2" width="10px">
+ <div class="bor">
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td class="frams8">
+ </td>
+ <td class="input_tab">
+ <table width="168" class="center" cellpadding="2" cellspacing="0">
+ <thead>
+ <tr>
+ <td colspan="2" class="center nowrap">
+ <strong>
+ {% trans 'Create relationship' %}
+ </strong>
+ </td>
+ </tr>
+ </thead>
+ <tbody id="foreign_relation">
+ <tr>
+ <td colspan="2" class="center nowrap">
+ <strong>
+ FOREIGN KEY
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="58" class="nowrap">
+ on delete
+ </td>
+ <td width="102">
+ <select name="on_delete" id="on_delete">
+ <option value="nix" selected="selected">
+ --
+ </option>
+ <option value="CASCADE">
+ CASCADE
+ </option>
+ <option value="SET NULL">
+ SET NULL
+ </option>
+ <option value="NO ACTION">
+ NO ACTION
+ </option>
+ <option value="RESTRICT">
+ RESTRICT
+ </option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td class="nowrap">
+ on update
+ </td>
+ <td>
+ <select name="on_update" id="on_update">
+ <option value="nix" selected="selected">
+ --
+ </option>
+ <option value="CASCADE">
+ CASCADE
+ </option>
+ <option value="SET NULL">
+ SET NULL
+ </option>
+ <option value="NO ACTION">
+ NO ACTION
+ </option>
+ <option value="RESTRICT">
+ RESTRICT
+ </option>
+ </select>
+ </td>
+ </tr>
+ </tbody>
+ <tbody>
+ <tr>
+ <td colspan="2" class="center nowrap">
+ <input type="button" id="ok_new_rel_panel" class="btn btn-secondary butt"
+ name="Button" value="{% trans 'OK' %}">
+ <input type="button" id="cancel_new_rel_panel"
+ class="btn btn-secondary butt" name="Button" value="{% trans 'Cancel' %}">
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ <td class="frams6">
+ </td>
+ </tr>
+ <tr>
+ <td class="frams4">
+ <div class="bor">
+ </div>
+ </td>
+ <td class="frams7">
+ </td>
+ <td class="frams3">
+ </td>
+ </tr>
+ </tbody>
+</table>
+{# delete relation pane #}
+<table id="layer_upd_relation" class="hide" width="5%" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="frams1" width="10px">
+ </td>
+ <td class="frams5" width="99%">
+ </td>
+ <td class="frams2" width="10px">
+ <div class="bor">
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td class="frams8">
+ </td>
+ <td class="input_tab">
+ <table width="100%" class="center" cellpadding="2" cellspacing="0">
+ <tr>
+ <td colspan="3" class="center nowrap">
+ <strong>
+ {% trans 'Delete relationship' %}
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="3" class="center nowrap">
+ <input id="del_button" name="Button" type="button"
+ class="btn btn-secondary butt" value="{% trans 'Delete' %}">
+ <input id="cancel_button" type="button" class="btn btn-secondary butt"
+ name="Button" value="{% trans 'Cancel' %}">
+ </td>
+ </tr>
+ </table>
+ </td>
+ <td class="frams6">
+ </td>
+ </tr>
+ <tr>
+ <td class="frams4">
+ <div class="bor">
+ </div>
+ </td>
+ <td class="frams7">
+ </td>
+ <td class="frams3">
+ </td>
+ </tr>
+ </tbody>
+</table>
+{% if has_query %}
+ {# options pane #}
+ <table id="designer_optionse" class="hide" width="5%" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="frams1" width="10px">
+ </td>
+ <td class="frams5" width="99%" >
+ </td>
+ <td class="frams2" width="10px">
+ <div class="bor">
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td class="frams8">
+ </td>
+ <td class="input_tab">
+ <table width="168" class="center" cellpadding="2" cellspacing="0">
+ <thead>
+ <tr>
+ <td colspan="2" rowspan="2" id="option_col_name" class="center nowrap">
+ </td>
+ </tr>
+ </thead>
+ <tbody id="where">
+ <tr>
+ <td class="center nowrap">
+ <b>
+ WHERE
+ </b>
+ </td>
+ </tr>
+ <tr>
+ <td width="58" class="nowrap">
+ {% trans 'Relationship operator' %}
+ </td>
+ <td width="102">
+ <select name="rel_opt" id="rel_opt">
+ <option value="--" selected="selected">
+ --
+ </option>
+ <option value="=">
+ =
+ </option>
+ <option value="&gt;">
+ &gt;
+ </option>
+ <option value="&lt;">
+ &lt;
+ </option>
+ <option value="&gt;=">
+ &gt;=
+ </option>
+ <option value="&lt;=">
+ &lt;=
+ </option>
+ <option value="NOT">
+ NOT
+ </option>
+ <option value="IN">
+ IN
+ </option>
+ <option value="EXCEPT">
+ {% trans 'Except' %}
+ </option>
+ <option value="NOT IN">
+ NOT IN
+ </option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td class="nowrap">
+ {% trans 'Value' %}
+ <br>
+ {% trans 'subquery' %}
+ </td>
+ <td>
+ <textarea id="Query" cols="18"></textarea>
+ </td>
+ </tr>
+ <tr>
+ <td class="center nowrap">
+ <b>
+ {% trans 'Rename to' %}
+ </b>
+ </td>
+ </tr>
+ <tr>
+ <td width="58" class="nowrap">
+ {% trans 'New name' %}
+ </td>
+ <td width="102">
+ <input type="text" id="new_name">
+ </td>
+ </tr>
+ <tr>
+ <td class="center nowrap">
+ <b>
+ {% trans 'Aggregate' %}
+ </b>
+ </td>
+ </tr>
+ <tr>
+ <td width="58" class="nowrap">
+ {% trans 'Operator' %}
+ </td>
+ <td width="102">
+ <select name="operator" id="operator">
+ <option value="---" selected="selected">
+ ---
+ </option>
+ <option value="sum" >
+ SUM
+ </option>
+ <option value="min">
+ MIN
+ </option>
+ <option value="max">
+ MAX
+ </option>
+ <option value="avg">
+ AVG
+ </option>
+ <option value="count">
+ COUNT
+ </option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="58" class="center nowrap">
+ <b>
+ GROUP BY
+ </b>
+ </td>
+ <td>
+ <input type="checkbox" value="groupby" id="groupby">
+ </td>
+ </tr>
+ <tr>
+ <td width="58" class="center nowrap">
+ <b>
+ ORDER BY
+ </b>
+ </td>
+ <td>
+ <select name="orderby" id="orderby">
+ <option value="---" selected="selected">
+ ---
+ </option>
+ <option value="ASC" >
+ ASC
+ </option>
+ <option value="DESC">
+ DESC
+ </option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td class="center nowrap">
+ <b>
+ HAVING
+ </b>
+ </td>
+ </tr>
+ <tr>
+ <td width="58" class="nowrap">
+ {% trans 'Operator' %}
+ </td>
+ <td width="102">
+ <select name="h_operator" id="h_operator">
+ <option value="---" selected="selected">
+ ---
+ </option>
+ <option value="None" >
+ {% trans 'None' %}
+ </option>
+ <option value="sum" >
+ SUM
+ </option>
+ <option value="min">
+ MIN
+ </option>
+ <option value="max">
+ MAX
+ </option>
+ <option value="avg">
+ AVG
+ </option>
+ <option value="count">
+ COUNT
+ </option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="58" class="nowrap">
+ {% trans 'Relationship operator' %}
+ </td>
+ <td width="102">
+ <select name="h_rel_opt" id="h_rel_opt">
+ <option value="--" selected="selected">
+ --
+ </option>
+ <option value="=">
+ =
+ </option>
+ <option value="&gt;">
+ &gt;
+ </option>
+ <option value="&lt;">
+ &lt;
+ </option>
+ <option value="&gt;=">
+ &gt;=
+ </option>
+ <option value="&lt;=">
+ &lt;=
+ </option>
+ <option value="NOT">
+ NOT
+ </option>
+ <option value="IN">
+ IN
+ </option>
+ <option value="EXCEPT">
+ {% trans 'Except' %}
+ </option>
+ <option value="NOT IN">
+ NOT IN
+ </option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="58" class="nowrap">
+ {% trans 'Value' %}
+ <br>
+ {% trans 'subquery' %}
+ </td>
+ <td width="102">
+ <textarea id="having" cols="18"></textarea>
+ </td>
+ </tr>
+ </tbody>
+ <tbody>
+ <tr>
+ <td colspan="2" class="center nowrap">
+ <input type="hidden" id="ok_add_object_db_and_table_name_url" />
+ <input type="hidden" id="ok_add_object_db_name" />
+ <input type="hidden" id="ok_add_object_table_name" />
+ <input type="hidden" id="ok_add_object_col_name" />
+ <input type="button" id="ok_add_object" class="btn btn-secondary butt"
+ name="Button" value="{% trans 'OK' %}">
+ <input type="button" id="cancel_close_option" class="btn btn-secondary butt"
+ name="Button" value="{% trans 'Cancel' %}">
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ <td class="frams6">
+ </td>
+ </tr>
+ <tr>
+ <td class="frams4">
+ <div class="bor">
+ </div>
+ </td>
+ <td class="frams7">
+ </td>
+ <td class="frams3">
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ {# rename to pane #}
+ <table id="query_rename_to" class="hide" width="5%" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="frams1" width="10px">
+ </td>
+ <td class="frams5" width="99%" >
+ </td>
+ <td class="frams2" width="10px">
+ <div class="bor">
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td class="frams8">
+ </td>
+ <td class="input_tab">
+ <table width="168" class="center" cellpadding="2" cellspacing="0">
+ <thead>
+ <tr>
+ <td colspan="2" class="center nowrap">
+ <strong>
+ {% trans 'Rename to' %}
+ </strong>
+ </td>
+ </tr>
+ </thead>
+ <tbody id="rename_to">
+ <tr>
+ <td width="58" class="nowrap">
+ {% trans 'New name' %}
+ </td>
+ <td width="102">
+ <input type="text" id="e_rename">
+ </td>
+ </tr>
+ </tbody>
+ <tbody>
+ <tr>
+ <td colspan="2" class="center nowrap">
+ <input type="button" id="ok_edit_rename" class="btn btn-secondary butt"
+ name="Button" value="{% trans 'OK' %}">
+ <input id="query_rename_to_button" type="button"
+ class="btn btn-secondary butt"
+ name="Button"
+ value="{% trans 'Cancel' %}">
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ <td class="frams6">
+ </td>
+ </tr>
+ <tr>
+ <td class="frams4">
+ <div class="bor">
+ </div>
+ </td>
+ <td class="frams7">
+ </td>
+ <td class="frams3">
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ {# having query panel #}
+ <table id="query_having" class="hide" width="5%" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="frams1" width="10px">
+ </td>
+ <td class="frams5" width="99%" >
+ </td>
+ <td class="frams2" width="10px">
+ <div class="bor">
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td class="frams8">
+ </td>
+ <td class="input_tab">
+ <table width="168" class="center" cellpadding="2" cellspacing="0">
+ <thead>
+ <tr>
+ <td colspan="2" class="center nowrap">
+ <strong>
+ HAVING
+ </strong>
+ </td>
+ </tr>
+ </thead>
+ <tbody id="rename_to">
+ <tr>
+ <td width="58" class="nowrap">
+ {% trans 'Operator' %}
+ </td>
+ <td width="102">
+ <select name="hoperator" id="hoperator">
+ <option value="---" selected="selected">
+ ---
+ </option>
+ <option value="None" >
+ None
+ </option>
+ <option value="sum" >
+ SUM
+ </option>
+ <option value="min">
+ MIN
+ </option>
+ <option value="max">
+ MAX
+ </option>
+ <option value="avg">
+ AVG
+ </option>
+ <option value="count">
+ COUNT
+ </option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <tr>
+ <td width="58" class="nowrap">
+ {% trans 'Operator' %}
+ </td>
+ <td width="102">
+ <select name="hrel_opt" id="hrel_opt">
+ <option value="--" selected="selected">
+ --
+ </option>
+ <option value="=">
+ =
+ </option>
+ <option value="&gt;">
+ &gt;
+ </option>
+ <option value="&lt;">
+ &lt;
+ </option>
+ <option value="&gt;=">
+ &gt;=
+ </option>
+ <option value="&lt;=">
+ &lt;=
+ </option>
+ <option value="NOT">
+ NOT
+ </option>
+ <option value="IN">
+ IN
+ </option>
+ <option value="EXCEPT">
+ {% trans 'Except' %}
+ </option>
+ <option value="NOT IN">
+ NOT IN
+ </option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td class="nowrap">
+ {% trans 'Value' %}
+ <br>
+ {% trans 'subquery' %}
+ </td>
+ <td>
+ <textarea id="hQuery" cols="18">
+ </textarea>
+ </td>
+ </tr>
+ </tbody>
+ <tbody>
+ <tr>
+ <td colspan="2" class="center nowrap">
+ <input type="button" id="ok_edit_having" class="btn btn-secondary butt"
+ name="Button" value="{% trans 'OK' %}">
+ <input id="query_having_button" type="button"
+ class="btn btn-secondary butt"
+ name="Button"
+ value="{% trans 'Cancel' %}">
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ <td class="frams6">
+ </td>
+ </tr>
+ <tr>
+ <td class="frams4">
+ <div class="bor">
+ </div>
+ </td>
+ <td class="frams7">
+ </td>
+ <td class="frams3">
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ {# aggregate query pane #}
+ <table id="query_Aggregate" class="hide" width="5%" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="frams1" width="10px">
+ </td>
+ <td class="frams5" width="99%" >
+ </td>
+ <td class="frams2" width="10px">
+ <div class="bor">
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td class="frams8">
+ </td>
+ <td class="input_tab">
+ <table width="168" class="center" cellpadding="2" cellspacing="0">
+ <thead>
+ <tr>
+ <td colspan="2" class="center nowrap">
+ <strong>
+ {% trans 'Aggregate' %}
+ </strong>
+ </td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td width="58" class="nowrap">
+ {% trans 'Operator' %}
+ </td>
+ <td width="102">
+ <select name="operator" id="e_operator">
+ <option value="---" selected="selected">
+ ---
+ </option>
+ <option value="sum" >
+ SUM
+ </option>
+ <option value="min">
+ MIN
+ </option>
+ <option value="max">
+ MAX
+ </option>
+ <option value="avg">
+ AVG
+ </option>
+ <option value="count">
+ COUNT
+ </option>
+ </select>
+ </td>
+ </tr>
+ </tbody>
+ <tbody>
+ <tr>
+ <td colspan="2" class="center nowrap">
+ <input type="button" id="ok_edit_Aggr" class="btn btn-secondary butt"
+ name="Button" value="{% trans 'OK' %}">
+ <input id="query_Aggregate_Button" type="button"
+ class="btn btn-secondary butt"
+ name="Button"
+ value="{% trans 'Cancel' %}">
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ <td class="frams6">
+ </td>
+ </tr>
+ <tr>
+ <td class="frams4">
+ <div class="bor">
+ </div>
+ </td>
+ <td class="frams7">
+ </td>
+ <td class="frams3">
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ {# where query pane #}
+ <table id="query_where" class="hide" width="5%" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="frams1" width="10px">
+ </td>
+ <td class="frams5" width="99%" >
+ </td>
+ <td class="frams2" width="10px">
+ <div class="bor">
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td class="frams8">
+ </td>
+ <td class="input_tab">
+ <table width="168" class="center" cellpadding="2" cellspacing="0">
+ <thead>
+ <tr>
+ <td colspan="2" class="center nowrap">
+ <strong>
+ WHERE
+ </strong>
+ </td>
+ </tr>
+ </thead>
+ <tbody id="rename_to">
+ <tr>
+ <td width="58" class="nowrap">
+ {% trans 'Operator' %}
+ </td>
+ <td width="102">
+ <select name="erel_opt" id="erel_opt">
+ <option value="--" selected="selected">
+ --
+ </option>
+ <option value="=" >
+ =
+ </option>
+ <option value="&gt;">
+ &gt;
+ </option>
+ <option value="&lt;">
+ &lt;
+ </option>
+ <option value="&gt;=">
+ &gt;=
+ </option>
+ <option value="&lt;=">
+ &lt;=
+ </option>
+ <option value="NOT">
+ NOT
+ </option>
+ <option value="IN">
+ IN
+ </option>
+ <option value="EXCEPT">
+ {% trans 'Except' %}
+ </option>
+ <option value="NOT IN">
+ NOT IN
+ </option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td class="nowrap">
+ {% trans 'Value' %}
+ <br>
+ {% trans 'subquery' %}
+ </td>
+ <td>
+ <textarea id="eQuery" cols="18">
+ </textarea>
+ </td>
+ </tr>
+ </tbody>
+ <tbody>
+ <tr>
+ <td colspan="2" class="center nowrap">
+ <input type="button" id="ok_edit_where" class="btn btn-secondary butt"
+ name="Button" value="{% trans 'OK' %}">
+ <input id="query_where_button" type="button" class="btn btn-secondary butt" name="Button"
+ value="{% trans 'Cancel' %}">
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ <td class="frams6">
+ </td>
+ </tr>
+ <tr>
+ <td class="frams4">
+ <div class="bor">
+ </div>
+ </td>
+ <td class="frams7">
+ </td>
+ <td class="frams3">
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ {# query details #}
+ <div class="panel">
+ <div class="clearfloat"></div>
+ <div id="ab"></div>
+ <div class="clearfloat"></div>
+ </div>
+ <a class="trigger" href="#">{% trans 'Active options' %}</a>
+ <div id="box">
+ <form method="post" action="db_qbe.php" id="vqb_form">
+ <textarea cols="80" name="sql_query" id="textSqlquery" rows="15"></textarea>
+ <input type="hidden" name="submit_sql" value="true">
+ {{ get_hidden_inputs(get_db) }}
+ </form>
+ </div>
+{% endif %}
+<div id="PMA_disable_floating_menubar"></div>
diff --git a/srcs/phpmyadmin/templates/database/designer/page_save_as.twig b/srcs/phpmyadmin/templates/database/designer/page_save_as.twig
new file mode 100644
index 0000000..bbcf34b
--- /dev/null
+++ b/srcs/phpmyadmin/templates/database/designer/page_save_as.twig
@@ -0,0 +1,37 @@
+<form action="db_designer.php" method="post" name="save_as_pages" id="save_as_pages" class="ajax">
+ {{ get_hidden_inputs(db) }}
+ <fieldset id="page_save_as_options">
+ <table>
+ <tbody>
+ <tr>
+ <td>
+ <input type="hidden" name="operation" value="savePage">
+ {% include 'database/designer/page_selector.twig' with {
+ 'pdfwork': pdfwork,
+ 'pages': pages
+ } only %}
+ </td>
+ </tr>
+ <tr>
+ <td>
+ {{ get_radio_fields(
+ 'save_page',
+ {
+ 'same': 'Save to selected page'|trans,
+ 'new': 'Create a page and save to it'|trans
+ },
+ 'same',
+ true
+ ) }}
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <label for="selected_value">{% trans 'New page name' %}</label>
+ <input type="text" name="selected_value" id="selected_value">
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </fieldset>
+</form>
diff --git a/srcs/phpmyadmin/templates/database/designer/page_selector.twig b/srcs/phpmyadmin/templates/database/designer/page_selector.twig
new file mode 100644
index 0000000..01c0650
--- /dev/null
+++ b/srcs/phpmyadmin/templates/database/designer/page_selector.twig
@@ -0,0 +1,10 @@
+<select name="selected_page" id="selected_page">
+ <option value="0">-- {% trans 'Select page' %} --</option>
+ {% if pdfwork %}
+ {% for nr, desc in pages %}
+ <option value="{{ nr }}">
+ {{ desc }}
+ </option>
+ {% endfor %}
+ {% endif %}
+</select>
diff --git a/srcs/phpmyadmin/templates/database/designer/schema_export.twig b/srcs/phpmyadmin/templates/database/designer/schema_export.twig
new file mode 100644
index 0000000..71f15f2
--- /dev/null
+++ b/srcs/phpmyadmin/templates/database/designer/schema_export.twig
@@ -0,0 +1,9 @@
+<form method="post" action="schema_export.php" class="disableAjax" id="id_export_pages">
+ <fieldset>
+ {{ get_hidden_inputs(db) }}
+ <label>{% trans 'Select Export Relational Type' %}</label>
+ {{ get_choice('Schema', 'export_type', export_list, 'format') }}
+ <input type="hidden" name="page_number" value="{{ page }}">
+ {{ get_options('Schema', export_list) }}
+ </fieldset>
+</form>