diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-01-09 10:55:03 +0100 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-01-09 13:09:38 +0100 |
| commit | 04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa (patch) | |
| tree | 5c691241355c943a3c68ddb06b8cf8c60aa11319 /srcs/phpmyadmin/templates/table/relation | |
| parent | 7e0d85db834d6351ed85d01e5126ac31dc510b86 (diff) | |
| download | ft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.tar.gz ft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.tar.bz2 ft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.zip | |
phpmyadmin working
Diffstat (limited to 'srcs/phpmyadmin/templates/table/relation')
4 files changed, 386 insertions, 0 deletions
diff --git a/srcs/phpmyadmin/templates/table/relation/common_form.twig b/srcs/phpmyadmin/templates/table/relation/common_form.twig new file mode 100644 index 0000000..e85c6ce --- /dev/null +++ b/srcs/phpmyadmin/templates/table/relation/common_form.twig @@ -0,0 +1,223 @@ +{% extends 'table/page_with_secondary_tabs.twig' %} + +{% block content %} +<form method="post" action="tbl_relation.php"> + {{ get_hidden_inputs(db, table) }} + {# InnoDB #} + {% if is_foreign_key_supported(tbl_storage_engine) %} + <fieldset> + <legend>{% trans 'Foreign key constraints' %}</legend> + <div class="responsivetable jsresponsive"> + <table id="foreign_keys" class="relationalTable"> + <thead><tr> + <th>{% trans 'Actions' %}</th> + <th>{% trans 'Constraint properties' %}</th> + {% if tbl_storage_engine|upper == 'INNODB' %} + <th> + {% trans 'Column' %} + {{ show_hint('Creating a foreign key over a non-indexed column would automatically create an index on it. Alternatively, you can define an index below, before creating the foreign key.'|trans) }} + </th> + {% else %} + <th> + {% trans 'Column' %} + {{ show_hint('Only columns with index will be displayed. You can define an index below.'|trans) }} + </th> + {% endif %} + <th colspan="3"> + {% trans 'Foreign key constraint' %} + ({{ tbl_storage_engine }}) + </th> + </tr> + <tr> + <th></th> + <th></th> + <th></th> + <th>{% trans 'Database' %}</th> + <th>{% trans 'Table' %}</th> + <th>{% trans 'Column' %}</th> + </tr></thead> + {% set i = 0 %} + {% if existrel_foreign is not empty %} + {% for key, one_key in existrel_foreign %} + {# Foreign database dropdown #} + {% set foreign_db = one_key['ref_db_name'] is defined + and one_key['ref_db_name'] is not null + ? one_key['ref_db_name'] : db %} + {% set foreign_table = false %} + {% if foreign_db %} + {% set foreign_table = one_key['ref_table_name'] is defined + and one_key['ref_table_name'] is not null + ? one_key['ref_table_name'] : false %} + {% endif %} + {% set unique_columns = [] %} + {% if foreign_db and foreign_table %} + {% set table_obj = table_get(foreign_table, foreign_db) %} + {% set unique_columns = table_obj.getUniqueColumns(false, false) %} + {% endif %} + {% include 'table/relation/foreign_key_row.twig' with { + 'i': i, + 'one_key': one_key, + 'column_array': column_array, + 'options_array': options_array, + 'tbl_storage_engine': tbl_storage_engine, + 'db': db, + 'table': table, + 'url_params': url_params, + 'databases': databases, + 'foreign_db': foreign_db, + 'foreign_table': foreign_table, + 'unique_columns': unique_columns + } only %} + {% set i = i + 1 %} + {% endfor %} + {% endif %} + {% include 'table/relation/foreign_key_row.twig' with { + 'i': i, + 'one_key': [], + 'column_array': column_array, + 'options_array': options_array, + 'tbl_storage_engine': tbl_storage_engine, + 'db': db, + 'table': table, + 'url_params': url_params, + 'databases': databases, + 'foreign_db': foreign_db, + 'foreign_table': foreign_table, + 'unique_columns': unique_columns + } only %} + {% set i = i + 1 %} + <tr> + <th colspan="6"> + <a class="formelement clearfloat add_foreign_key" href=""> + {% trans '+ Add constraint' %} + </a> + </th> + </tr> + </table> + </div> + </fieldset> + {% endif %} + + {% if cfg_relation['relwork'] %} + {% if is_foreign_key_supported(tbl_storage_engine) %} + {% include 'div_for_slider_effect.twig' with { + 'id': 'ir_div', + 'message': 'Internal relationships'|trans, + 'initial_sliders_state': default_sliders_state + } only %} + {% endif %} + + <fieldset> + <legend> + {% trans 'Internal relationships' %} + {{ show_docu('config', 'cfg_Servers_relation') }} + </legend> + <table id="internal_relations" class="relationalTable"> + <tr> + <th>{% trans 'Column' %}</th> + <th>{% trans 'Internal relation' %} + {% if is_foreign_key_supported(tbl_storage_engine) %} + {{ show_hint('An internal relation is not necessary when a corresponding FOREIGN KEY relation exists.'|trans) }} + {% endif %} + </th> + {% set saved_row_cnt = save_row|length - 1 %} + {% for i in 0..saved_row_cnt %} + {% set myfield = save_row[i]['Field'] %} + {# Use an md5 as array index to avoid having special characters + in the name attribute (see bug #1746964 ) #} + {% set myfield_md5 = column_hash_array[myfield] %} + + {% set foreign_table = false %} + {% set foreign_column = false %} + + {# Database dropdown #} + {% if existrel[myfield] is defined %} + {% set foreign_db = existrel[myfield]['foreign_db'] %} + {% else %} + {% set foreign_db = db %} + {% endif %} + + {# Table dropdown #} + {% set tables = [] %} + {% if foreign_db %} + {% if existrel[myfield] is defined %} + {% set foreign_table = existrel[myfield]['foreign_table'] %} + {% endif %} + {% set tables = dbi.getTables(foreign_db) %} + {% endif %} + + {# Column dropdown #} + {% set unique_columns = [] %} + {% if foreign_db and foreign_table %} + {% if existrel[myfield] is defined %} + {% set foreign_column = existrel[myfield]['foreign_field'] %} + {% endif %} + {% set table_obj = table_get(foreign_table, foreign_db) %} + {% set unique_columns = table_obj.getUniqueColumns(false, false) %} + {% endif %} + + <tr> + <td class="vmiddle"> + <strong>{{ myfield }}</strong> + <input type="hidden" name="fields_name[{{ myfield_md5 }}]" + value="{{ myfield }}"> + </td> + + <td> + {% include 'table/relation/relational_dropdown.twig' with { + 'name': 'destination_db[' ~ myfield_md5 ~ ']', + 'title': 'Database'|trans, + 'values': databases, + 'foreign': foreign_db + } only %} + + {% include 'table/relation/relational_dropdown.twig' with { + 'name': 'destination_table[' ~ myfield_md5 ~ ']', + 'title': 'Table'|trans, + 'values': tables, + 'foreign': foreign_table + } only %} + + {% include 'table/relation/relational_dropdown.twig' with { + 'name': 'destination_column[' ~ myfield_md5 ~ ']', + 'title': 'Column'|trans, + 'values': unique_columns, + 'foreign': foreign_column + } only %} + </td> + </tr> + {% endfor %} + </table> + </fieldset> + {% if is_foreign_key_supported(tbl_storage_engine) %} + </div> + {% endif %} + {% endif %} + + {% if cfg_relation['displaywork'] %} + {% set disp = get_display_field(db, table) %} + <fieldset> + <label>{% trans 'Choose column to display:' %}</label> + <select name="display_field"> + <option value="">---</option> + {% for row in save_row %} + <option value="{{ row['Field'] }}" + {%- if disp is defined and row['Field'] == disp %} + selected="selected" + {%- endif %}> + {{ row['Field'] }} + </option> + {% endfor %} + </select> + </fieldset> + {% endif %} + + <fieldset class="tblFooters"> + <input class="btn btn-secondary preview_sql" type="button" value="{% trans 'Preview SQL' %}"> + <input class="btn btn-primary" type="submit" value="{% trans 'Save' %}"> + </fieldset> +</form> +{% if foreignKeySupported %} + {{ displayIndexesHtml|raw }} +{% endif %} +{% endblock %} diff --git a/srcs/phpmyadmin/templates/table/relation/dropdown_generate.twig b/srcs/phpmyadmin/templates/table/relation/dropdown_generate.twig new file mode 100644 index 0000000..ff179bc --- /dev/null +++ b/srcs/phpmyadmin/templates/table/relation/dropdown_generate.twig @@ -0,0 +1,9 @@ +{{ dropdown_question is not empty ? dropdown_question -}} +<select name="{{ select_name }}"> +{% for one_value, one_label in choices %} + <option value="{{ one_value }}" + {%- if selected_value == one_value %} selected="selected"{% endif %}> + {{ one_label }} + </option> +{% endfor %} +</select> diff --git a/srcs/phpmyadmin/templates/table/relation/foreign_key_row.twig b/srcs/phpmyadmin/templates/table/relation/foreign_key_row.twig new file mode 100644 index 0000000..3df6c34 --- /dev/null +++ b/srcs/phpmyadmin/templates/table/relation/foreign_key_row.twig @@ -0,0 +1,136 @@ +<tr> + {# Drop key anchor #} + <td> + {% set js_msg = '' %} + {% set this_params = null %} + {% if one_key['constraint'] is defined %} + {% set drop_fk_query = 'ALTER TABLE ' ~ backquote(db) ~ '.' ~ backquote(table) + ~ ' DROP FOREIGN KEY ' + ~ backquote(one_key['constraint']) ~ ';' + %} + {% set this_params = url_params %} + {% set this_params = { + 'goto': 'tbl_relation.php', + 'back': 'tbl_relation.php', + 'sql_query': drop_fk_query, + 'message_to_show': 'Foreign key constraint %s has been dropped'|trans|format( + one_key['constraint'] + ) + } %} + {% set js_msg = 'ALTER TABLE ' ~ db ~ '.' ~ table ~ ' DROP FOREIGN KEY ' ~ one_key['constraint'] ~ ';'|js_format %} + {% endif %} + {% if one_key['constraint'] is defined %} + <input type="hidden" class="drop_foreign_key_msg" value=" + {{- js_msg }}"> + {% set drop_url = 'sql.php' ~ get_common(this_params) %} + {% set drop_str = get_icon('b_drop', 'Drop'|trans) %} + {{ link_or_button(drop_url, drop_str, {'class': 'drop_foreign_key_anchor ajax'}) }} + {% endif %} + </td> + <td> + <span class="formelement clearfloat"> + <input type="text" name="constraint_name[{{ i }}]" value=" + {{- one_key['constraint'] is defined ? one_key['constraint'] -}} + " placeholder="{% trans 'Constraint name' %}" maxlength="64"> + </span> + <div class="floatleft"> + {# For ON DELETE and ON UPDATE, the default action + is RESTRICT as per MySQL doc; however, a SHOW CREATE TABLE + won't display the clause if it's set as RESTRICT. #} + {% set on_delete = one_key['on_delete'] is defined + ? one_key['on_delete'] : 'RESTRICT' %} + {% set on_update = one_key['on_update'] is defined + ? one_key['on_update'] : 'RESTRICT' %} + <span class="formelement"> + {% include 'table/relation/dropdown_generate.twig' with { + 'dropdown_question': 'ON DELETE', + 'select_name': 'on_delete[' ~ i ~ ']', + 'choices': options_array, + 'selected_value': on_delete + } only %} + </span> + <span class="formelement"> + {% include 'table/relation/dropdown_generate.twig' with { + 'dropdown_question': 'ON UPDATE', + 'select_name': 'on_update[' ~ i ~ ']', + 'choices': options_array, + 'selected_value': on_update + } only %} + </span> + </div> + </td> + <td> + {% if one_key['index_list'] is defined %} + {% for key, column in one_key['index_list'] %} + <span class="formelement clearfloat"> + {% include 'table/relation/dropdown_generate.twig' with { + 'dropdown_question': '', + 'select_name': 'foreign_key_fields_name[' ~ i ~ '][]', + 'choices': column_array, + 'selected_value': column + } only %} + </span> + {% endfor %} + {% else %} + <span class="formelement clearfloat"> + {% include 'table/relation/dropdown_generate.twig' with { + 'dropdown_question': '', + 'select_name': 'foreign_key_fields_name[' ~ i ~ '][]', + 'choices': column_array, + 'selected_value': '' + } only %} + </span> + {% endif %} + <a class="formelement clearfloat add_foreign_key_field" data-index=" + {{- i }}" href=""> + {% trans '+ Add column' %} + </a> + </td> + {% set tables = [] %} + {% if foreign_db %} + {% set tables = get_tables(foreign_db, tbl_storage_engine) %} + {% endif %} + <td> + <span class="formelement clearfloat"> + {% include 'table/relation/relational_dropdown.twig' with { + 'name': 'destination_foreign_db[' ~ i ~ ']', + 'title': 'Database'|trans, + 'values': databases, + 'foreign': foreign_db + } only %} + </span> + </td> + <td> + <span class="formelement clearfloat"> + {% include 'table/relation/relational_dropdown.twig' with { + 'name': 'destination_foreign_table[' ~ i ~ ']', + 'title': 'Table'|trans, + 'values': tables, + 'foreign': foreign_table + } only %} + </span> + </td> + <td> + {% if foreign_db and foreign_table %} + {% for foreign_column in one_key['ref_index_list'] %} + <span class="formelement clearfloat"> + {% include 'table/relation/relational_dropdown.twig' with { + 'name': 'destination_foreign_column[' ~ i ~ '][]', + 'title': 'Column'|trans, + 'values': unique_columns, + 'foreign': foreign_column + } only %} + </span> + {% endfor %} + {% else %} + <span class="formelement clearfloat"> + {% include 'table/relation/relational_dropdown.twig' with { + 'name': 'destination_foreign_column[' ~ i ~ '][]', + 'title': 'Column'|trans, + 'values': [], + 'foreign': '' + } only %} + </span> + {% endif %} + </td> +</tr> diff --git a/srcs/phpmyadmin/templates/table/relation/relational_dropdown.twig b/srcs/phpmyadmin/templates/table/relation/relational_dropdown.twig new file mode 100644 index 0000000..9d5f3c9 --- /dev/null +++ b/srcs/phpmyadmin/templates/table/relation/relational_dropdown.twig @@ -0,0 +1,18 @@ +<select name="{{ name }}" title="{{ title }}"> + <option value=""></option> + {% set seen_key = false %} + {% for value in values %} + <option value="{{ value }}" + {%- if foreign is not same as(false) and value == foreign %} + selected="selected" + {%- set seen_key = true -%} + {%- endif %}> + {{ value }} + </option> + {% endfor %} + {% if foreign is not same as(false) and not seen_key %} + <option value="{{ foreign }}" selected="selected"> + {{ foreign }} + </option> + {% endif %} +</select> |
