diff --git a/src/bundle/Resources/config/services/tabs.yaml b/src/bundle/Resources/config/services/tabs.yaml index db108b4ae2..028080d772 100644 --- a/src/bundle/Resources/config/services/tabs.yaml +++ b/src/bundle/Resources/config/services/tabs.yaml @@ -2,6 +2,7 @@ imports: - { resource: tabs/locationview.yaml } - { resource: tabs/content_type.yaml } - { resource: tabs/url_management.yaml } + - { resource: tabs/languages.yaml } services: _defaults: diff --git a/src/bundle/Resources/config/services/tabs/languages.yaml b/src/bundle/Resources/config/services/tabs/languages.yaml new file mode 100644 index 0000000000..268ee6cb61 --- /dev/null +++ b/src/bundle/Resources/config/services/tabs/languages.yaml @@ -0,0 +1,13 @@ +services: + ibexa.admin_ui.languages.tab_group: + parent: Ibexa\AdminUi\Component\TabsComponent + arguments: + $template: '@@ibexadesign/ui/tab/languages.html.twig' + $groupIdentifier: 'languages' + tags: + - { name: ibexa.twig.component, group: 'admin-ui-languages-tab-groups' } + + Ibexa\AdminUi\Tab\Language\LanguagesTab: + parent: Ibexa\Contracts\AdminUi\Tab\AbstractTab + tags: + - { name: ibexa.admin_ui.tab, group: 'languages' } diff --git a/src/bundle/Resources/views/themes/admin/language/list.html.twig b/src/bundle/Resources/views/themes/admin/language/list.html.twig index 52d1deda3c..571c2d8522 100644 --- a/src/bundle/Resources/views/themes/admin/language/list.html.twig +++ b/src/bundle/Resources/views/themes/admin/language/list.html.twig @@ -1,9 +1,5 @@ {% extends "@ibexadesign/ui/layout.html.twig" %} -{% from '@ibexadesign/ui/component/macros.html.twig' import results_headline %} - -{% form_theme form_languages_delete '@ibexadesign/ui/form_fields.html.twig' %} - {% trans_default_domain 'ibexa_language' %} {% block body_class %}ibexa-language-list-view{% endblock %} @@ -45,140 +41,11 @@ {% endblock %} {% block content %} -
- {% set body_rows = [] %} - {% for language in pager.currentPageResults %} - {% set body_row_cols = [] %} - - {% set col_raw %} - {% if can_administrate %} - {{ form_widget(form_languages_delete.languages[language.id]) }} - {% else %} - {% do form_languages_delete.languages.setRendered %} - {% endif %} - {% endset %} - {% set body_row_cols = body_row_cols|merge([{ - has_checkbox: true, - content: col_raw, - raw: true, - }]) %} - - {% set col_raw %} - - {{ language.name }} - - {% endset %} - {% set body_row_cols = body_row_cols|merge([{ - content: col_raw, - raw: true, - }]) %} - - {% set body_row_cols = body_row_cols|merge([ - { content: language.languageCode }, - { content: language.id }, - ]) %} - - {% set col_raw %} -
- -
- {% endset %} - {% set body_row_cols = body_row_cols|merge([{ - content: col_raw, - center_content: true, - raw: true, - }]) %} - - {% set col_raw %} - {% if can_administrate %} - - - - - - {% endif %} - {% endset %} - {% set body_row_cols = body_row_cols|merge([{ - has_action_btns: true, - content: col_raw, - raw: true, - }]) %} - - {% set body_rows = body_rows|merge([{ cols: body_row_cols }]) %} - {% endfor %} - - {% embed '@ibexadesign/ui/component/table/table.html.twig' with { - headline: custom_results_headline ?? results_headline(pager.getNbResults()), - head_cols: [ - { has_checkbox: true }, - { content: 'language.name'|trans|desc('Name') }, - { content: 'language.code'|trans|desc('Code') }, - { content: 'language.id'|trans|desc('ID') }, - { - content: 'language.enabled'|trans|desc('Enabled'), - center_content: true, - }, - { }, - ], - body_rows, - } %} - {% block header %} - {% embed '@ibexadesign/ui/component/table/table_header.html.twig' %} - {% block actions %} - {% if can_administrate %} - {% set modal_data_target = 'delete-languages-modal' %} - - {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { - 'id': modal_data_target, - 'message': 'language.modal.message'|trans|desc( - 'Delete the languages?' - ), - 'data_click': '#languages_delete_delete', - }%} - {% endif %} - {% endblock %} - {% endembed %} - {% endblock %} - - {% block between_header_and_table %} - {{ form_start(form_languages_delete, { - 'action': path('ibexa.language.bulk_delete'), - 'attr': { 'class': 'ibexa-toggle-btn-state', 'data-toggle-button-id': '#delete-languages' } - }) }} - {% endblock %} - {% endembed %} - {{ form_end(form_languages_delete) }} - - {% if pager.haveToPaginate %} - {% include '@ibexadesign/ui/pagination.html.twig' with { - 'pager': pager - } %} - {% endif %} -
+ {{ ibexa_twig_component_group('admin-ui-languages-tab-groups', { + pager: pager, + form_languages_delete: form_languages_delete, + can_administrate: can_administrate, + }) }} {% endblock %} {% block javascripts %} diff --git a/src/bundle/Resources/views/themes/admin/language/tab/languages.html.twig b/src/bundle/Resources/views/themes/admin/language/tab/languages.html.twig new file mode 100644 index 0000000000..ab47eae92b --- /dev/null +++ b/src/bundle/Resources/views/themes/admin/language/tab/languages.html.twig @@ -0,0 +1,138 @@ +{% trans_default_domain 'ibexa_language' %} + +{% from '@ibexadesign/ui/component/macros.html.twig' import results_headline %} + +{% form_theme form_languages_delete '@ibexadesign/ui/form_fields.html.twig' %} + +
+ {% set body_rows = [] %} + {% for language in pager.currentPageResults %} + {% set body_row_cols = [] %} + + {% set col_raw %} + {% if can_administrate %} + {{ form_widget(form_languages_delete.languages[language.id]) }} + {% else %} + {% do form_languages_delete.languages.setRendered %} + {% endif %} + {% endset %} + {% set body_row_cols = body_row_cols|merge([{ + has_checkbox: true, + content: col_raw, + raw: true, + }]) %} + + {% set col_raw %} + + {{ language.name }} + + {% endset %} + {% set body_row_cols = body_row_cols|merge([{ + content: col_raw, + raw: true, + }]) %} + + {% set body_row_cols = body_row_cols|merge([ + { content: language.languageCode }, + { content: language.id }, + ]) %} + + {% set col_raw %} +
+ +
+ {% endset %} + {% set body_row_cols = body_row_cols|merge([{ + content: col_raw, + center_content: true, + raw: true, + }]) %} + + {% set col_raw %} + {% if can_administrate %} + + + + + + {% endif %} + {% endset %} + {% set body_row_cols = body_row_cols|merge([{ + has_action_btns: true, + content: col_raw, + raw: true, + }]) %} + + {% set body_rows = body_rows|merge([{ cols: body_row_cols }]) %} + {% endfor %} + + {% embed '@ibexadesign/ui/component/table/table.html.twig' with { + headline: custom_results_headline ?? results_headline(pager.getNbResults()), + head_cols: [ + { has_checkbox: true }, + { content: 'language.name'|trans|desc('Name') }, + { content: 'language.code'|trans|desc('Code') }, + { content: 'language.id'|trans|desc('ID') }, + { + content: 'language.enabled'|trans|desc('Enabled'), + center_content: true, + }, + {}, + ], + body_rows, + } %} + {% block header %} + {% embed '@ibexadesign/ui/component/table/table_header.html.twig' %} + {% block actions %} + {% if can_administrate %} + {% set modal_data_target = 'delete-languages-modal' %} + + {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { + id: modal_data_target, + message: 'language.modal.message'|trans|desc('Delete the languages?'), + data_click: '#languages_delete_delete', + } %} + {% endif %} + {% endblock %} + {% endembed %} + {% endblock %} + + {% block between_header_and_table %} + {{ form_start(form_languages_delete, { + action: path('ibexa.language.bulk_delete'), + attr: {'class': 'ibexa-toggle-btn-state', 'data-toggle-button-id': '#delete-languages'} + }) }} + {% endblock %} + {% endembed %} + {{ form_end(form_languages_delete) }} + + {% if pager.haveToPaginate %} + {% include '@ibexadesign/ui/pagination.html.twig' with { + pager: pager, + } %} + {% endif %} +
diff --git a/src/bundle/Resources/views/themes/admin/ui/tab/languages.html.twig b/src/bundle/Resources/views/themes/admin/ui/tab/languages.html.twig new file mode 100644 index 0000000000..01a019ced5 --- /dev/null +++ b/src/bundle/Resources/views/themes/admin/ui/tab/languages.html.twig @@ -0,0 +1,13 @@ +{% set tabs_to_show = tabs|map((tab, index) => { + id: group ~ '-' ~ tab.identifier, + label: tab.name, + content: tab.view, + active: index == 0, +}) %} +{% include '@ibexadesign/ui/component/tab/tabs.html.twig' with { + tabs: tabs_to_show, +} %} + +{% block javascripts %} + {{ encore_entry_script_tags('ibexa-admin-ui-tabs-js', null, 'ibexa') }} +{% endblock %} diff --git a/src/lib/Tab/Language/LanguagesTab.php b/src/lib/Tab/Language/LanguagesTab.php new file mode 100644 index 0000000000..6a9a4431cc --- /dev/null +++ b/src/lib/Tab/Language/LanguagesTab.php @@ -0,0 +1,43 @@ +translator->trans('language.list', [], 'ibexa_language'); + } + + public function getOrder(): int + { + return 10; + } + + /** + * @param array $parameters + */ + public function renderView(array $parameters): string + { + return $this->twig->render( + '@ibexadesign/language/tab/languages.html.twig', + $parameters + ); + } +}