diff --git a/code_samples/ai_actions/templates/themes/admin/admin/ui/fieldtype/edit/form_fields_binary_ai.html.twig b/code_samples/ai_actions/templates/themes/admin/admin/ui/fieldtype/edit/form_fields_binary_ai.html.twig deleted file mode 100644 index 7ef572c4065..00000000000 --- a/code_samples/ai_actions/templates/themes/admin/admin/ui/fieldtype/edit/form_fields_binary_ai.html.twig +++ /dev/null @@ -1,29 +0,0 @@ -{% extends '@ibexadesign/ui/field_type/edit/ibexa_binaryfile.html.twig' %} - -{% block ibexa_binaryfile_preview %} - {{ parent() }} - - {% import '@ibexadesign/connector_ai/ui/ai_module/macros.html.twig' as ai_macros %} - - {% set transcriptFieldIdentifier = 'transcript' %} - {% set fieldTypeIdentifiers = form.parent.parent.vars.value|keys %} - - {% if transcriptFieldIdentifier in fieldTypeIdentifiers %} - {% set use_ai_btn_attr = { - class: 'btn ibexa-btn ibexa-btn--secondary ibexa-ai-component--custom-btn', - module_id: 'TranscribeAudio', - scroll_selector: '.ibexa-edit-content', - container_selector: '.ibexa-edit-content', - input_selector: '.ibexa-field-edit-preview__action--preview', - output_selector: '#ezplatform_content_forms_content_edit_fieldsData_transcript_value', - ai_config_id: 'transcribe_audio', - } %} - - - {% endif %} -{% endblock %} diff --git a/code_samples/api/public_php_api/templates/themes/standard/full/custom.html.twig b/code_samples/api/public_php_api/templates/themes/standard/full/custom.html.twig deleted file mode 100644 index 4c2c6755ef2..00000000000 --- a/code_samples/api/public_php_api/templates/themes/standard/full/custom.html.twig +++ /dev/null @@ -1,3 +0,0 @@ -{% for item in items %} -

{{ item.valueObject.name }}

-{% endfor %} diff --git a/code_samples/api/public_php_api/templates/themes/standard/full/custom_filter.html.twig b/code_samples/api/public_php_api/templates/themes/standard/full/custom_filter.html.twig deleted file mode 100644 index 916de8609ad..00000000000 --- a/code_samples/api/public_php_api/templates/themes/standard/full/custom_filter.html.twig +++ /dev/null @@ -1,3 +0,0 @@ -{% for item in items %} -

{{ item.name }}

-{% endfor %} diff --git a/code_samples/api/public_php_api/templates/themes/standard/full/custom_pagination.html.twig b/code_samples/api/public_php_api/templates/themes/standard/full/custom_pagination.html.twig deleted file mode 100644 index ae9d3a2bdea..00000000000 --- a/code_samples/api/public_php_api/templates/themes/standard/full/custom_pagination.html.twig +++ /dev/null @@ -1,7 +0,0 @@ -{% for item in pagerItems %} -

{{ ibexa_content_name(item) }}

-{% endfor %} - -{% if pagerItems.haveToPaginate() %} - {{ pagerfanta(pagerItems, 'ibexa') }} -{% endif %} diff --git a/code_samples/back_office/content_type/templates/themes/admin/content_type/edit/custom_tab.html.twig b/code_samples/back_office/content_type/templates/themes/admin/content_type/edit/custom_tab.html.twig deleted file mode 100644 index 216cc29a506..00000000000 --- a/code_samples/back_office/content_type/templates/themes/admin/content_type/edit/custom_tab.html.twig +++ /dev/null @@ -1,12 +0,0 @@ -{% extends '@ibexadesign/ui/component/anchor_navigation/section_group.html.twig' %} - -{% set data_id = 'ibexa-edit-content-sections-new-tab' %} - -{% block sections %} - {% embed '@ibexadesign/ui/component/anchor_navigation/section.html.twig' %} - {% set data_id = 'ibexa-edit-content-sections-new-tab-item_2' %} - {% block content %} - Contents of custom secondary section - {% endblock %} - {% endembed %} -{% endblock %} diff --git a/code_samples/back_office/images/templates/themes/standard/commons_asset_view.html.twig b/code_samples/back_office/images/templates/themes/standard/commons_asset_view.html.twig deleted file mode 100644 index 33affc33628..00000000000 --- a/code_samples/back_office/images/templates/themes/standard/commons_asset_view.html.twig +++ /dev/null @@ -1,12 +0,0 @@ -{% extends '@ibexadesign/ui/field_type/image_asset_view.html.twig' %} - -{% block asset_preview %} - {{ parent() }} -
- Image - {% if asset.assetMetadata.author %} by {{ asset.assetMetadata.author|striptags }}{% endif %} - {% if asset.assetMetadata.license and asset.assetMetadata.license_url %} - under {{ asset.assetMetadata.license }} - {% endif %}. -
-{% endblock %} diff --git a/code_samples/back_office/images/templates/themes/standard/svg_helper.html.twig b/code_samples/back_office/images/templates/themes/standard/svg_helper.html.twig deleted file mode 100644 index c522a431f65..00000000000 --- a/code_samples/back_office/images/templates/themes/standard/svg_helper.html.twig +++ /dev/null @@ -1,3 +0,0 @@ -{% set svgField = ibexa_field(content, 'file') %} - - diff --git a/code_samples/back_office/limitation/templates/themes/admin/limitation/custom_limitation_form.html.twig b/code_samples/back_office/limitation/templates/themes/admin/limitation/custom_limitation_form.html.twig deleted file mode 100644 index d1cb325aeee..00000000000 --- a/code_samples/back_office/limitation/templates/themes/admin/limitation/custom_limitation_form.html.twig +++ /dev/null @@ -1,3 +0,0 @@ -{# templates/themes/admin/limitation/custom_limitation_form.html.twig #} -{{ form_label(form.limitationValues) }} -{{ form_widget(form.limitationValues) }} diff --git a/code_samples/back_office/limitation/templates/themes/standard/limitation/custom_limitation_value.html.twig b/code_samples/back_office/limitation/templates/themes/standard/limitation/custom_limitation_value.html.twig deleted file mode 100644 index a7a8bca38fa..00000000000 --- a/code_samples/back_office/limitation/templates/themes/standard/limitation/custom_limitation_value.html.twig +++ /dev/null @@ -1,5 +0,0 @@ -{# templates/themes/standard/limitation/custom_limitation_value.html.twig #} -{% block ibexa_limitation_customlimitation_value %} - {% set is_set = values | first %} - {{ is_set ? 'Yes' : 'No' }} -{% endblock %} diff --git a/code_samples/back_office/menu/menu_item/templates/themes/admin/all_content_list.html.twig b/code_samples/back_office/menu/menu_item/templates/themes/admin/all_content_list.html.twig deleted file mode 100644 index 79d307c713f..00000000000 --- a/code_samples/back_office/menu/menu_item/templates/themes/admin/all_content_list.html.twig +++ /dev/null @@ -1,77 +0,0 @@ -{% extends '@ibexadesign/ui/layout.html.twig' %} - -{% block title %}{{ 'Content List'|trans }}{% endblock %} - -{%- block breadcrumbs -%} - {% include '@ibexadesign/ui/breadcrumbs.html.twig' with { items: [ - { value: 'breadcrumb.admin'|trans(domain='messages')|desc('Admin') }, - { value: 'url.list'|trans|desc('Content List') } - ]} %} -{%- endblock -%} - -{%- block header -%} - {% include '@ibexadesign/ui/page_title.html.twig' with { - title: 'url.list'|trans|desc('Content List'), - } %} -{%- endblock -%} - -{%- block content -%} -
- {% set body_rows = [] %} - {% for article in articles.currentPageResults %} - - {% set col_edit %} - - {% endset %} - - {% set body_rows = body_rows|merge([{ - cols: [ - { content: article.contentInfo.name }, - { content: article.contentInfo.contentType.name }, - { content: article.contentInfo.modificationDate|ibexa_full_datetime }, - { content: article.contentInfo.publishedDate|ibexa_full_datetime }, - { content: col_edit, raw: true }, - ], - }]) %} - {% endfor %} - - {% include '@ibexadesign/ui/component/table/table.html.twig' with { - headline: 'Content List', - head_cols: [ - { content: 'Content name'|trans }, - { content: 'Content type'|trans }, - { content: 'Modified'|trans }, - { content: 'Published'|trans }, - { content: '' }, - ], - class: 'ibexa-table', - body_rows - } %} - - {% if articles.haveToPaginate %} - {% include '@ibexadesign/ui/pagination.html.twig' with { - 'pager': articles - } %} - {% endif %} -
- {{ form_start(form_edit, { - 'action': path('ibexa.content.edit'), - 'attr': - { 'class': 'ibexa-edit-content-form'} - }) }} - {{ form_widget(form_edit.language, {'attr': {'hidden': 'hidden', 'class': 'language-input'}}) }} - {{ form_end(form_edit) }} - {% include '@ibexadesign/content/modal/version_conflict.html.twig' %} -{%- endblock -%} - -{% block javascripts %} - {{ encore_entry_script_tags('ibexa-admin-ui-dashboard-js', null, 'ibexa') }} -{%- endblock -%} diff --git a/code_samples/back_office/notifications/templates/themes/admin/notification.html.twig b/code_samples/back_office/notifications/templates/themes/admin/notification.html.twig deleted file mode 100644 index 7156d8f9fa2..00000000000 --- a/code_samples/back_office/notifications/templates/themes/admin/notification.html.twig +++ /dev/null @@ -1,27 +0,0 @@ -{% extends template_to_extend %} - -{% trans_default_domain 'custom_notification' %} - -{% set wrapper_additional_classes = 'css-class-custom' %} - -{% block icon %} - - - - - -{% endblock %} - -{% block notification_type %} - - {{ 'Notice'|trans|desc('Notice') }} - -{% endblock %} - -{% block message %} - {% embed '@ibexadesign/ui/component/table/table_body_cell.html.twig' with { class: 'ibexa-notifications-modal__description' } %} - {% block content %} -

{{ notification.data.content_name }} {{ notification.data.message }}

- {% endblock %} - {% endembed %} -{% endblock %} diff --git a/code_samples/back_office/online_editor/custom_tags/acronym/templates/themes/standard/field_type/ezrichtext/custom_tags/acronym.html.twig b/code_samples/back_office/online_editor/custom_tags/acronym/templates/themes/standard/field_type/ezrichtext/custom_tags/acronym.html.twig deleted file mode 100644 index 555b7dc18fe..00000000000 --- a/code_samples/back_office/online_editor/custom_tags/acronym/templates/themes/standard/field_type/ezrichtext/custom_tags/acronym.html.twig +++ /dev/null @@ -1 +0,0 @@ -{{ content }} diff --git a/code_samples/back_office/online_editor/custom_tags/factbox/templates/themes/standard/field_type/ibexa_richtext/custom_tags/factbox.html.twig b/code_samples/back_office/online_editor/custom_tags/factbox/templates/themes/standard/field_type/ibexa_richtext/custom_tags/factbox.html.twig deleted file mode 100644 index 7a8170e35f2..00000000000 --- a/code_samples/back_office/online_editor/custom_tags/factbox/templates/themes/standard/field_type/ibexa_richtext/custom_tags/factbox.html.twig +++ /dev/null @@ -1,8 +0,0 @@ -{{ encore_entry_link_tags('factbox') }} - -
-

{{ params.name }}

-
- {{ content|raw }} -
-
diff --git a/code_samples/back_office/online_editor/custom_tags/linktag/templates/themes/standard/field_type/ibexa_richtext/custom_tags/linktag.html.twig b/code_samples/back_office/online_editor/custom_tags/linktag/templates/themes/standard/field_type/ibexa_richtext/custom_tags/linktag.html.twig deleted file mode 100644 index 562a7d7e2cd..00000000000 --- a/code_samples/back_office/online_editor/custom_tags/linktag/templates/themes/standard/field_type/ibexa_richtext/custom_tags/linktag.html.twig +++ /dev/null @@ -1,4 +0,0 @@ -

Custom link

-{% for attr_name, attr_value in params %} -
{{ attr_name }}: {{ attr_value }}
-{% endfor %} diff --git a/code_samples/back_office/search/templates/themes/admin/ui/global_search_autocomplete_product_item.html.twig b/code_samples/back_office/search/templates/themes/admin/ui/global_search_autocomplete_product_item.html.twig deleted file mode 100644 index c4f8db57549..00000000000 --- a/code_samples/back_office/search/templates/themes/admin/ui/global_search_autocomplete_product_item.html.twig +++ /dev/null @@ -1,20 +0,0 @@ -
  • - -
    - {{ product_name }} -
    - {{ product_code }} -
    -
    -
    -
    - - - - - {{ product_type_name }} - -
    -
    -
    -
  • diff --git a/code_samples/back_office/search/templates/themes/admin/ui/global_search_autocomplete_product_template.html.twig b/code_samples/back_office/search/templates/themes/admin/ui/global_search_autocomplete_product_template.html.twig deleted file mode 100644 index 0001e432671..00000000000 --- a/code_samples/back_office/search/templates/themes/admin/ui/global_search_autocomplete_product_template.html.twig +++ /dev/null @@ -1,10 +0,0 @@ -
    -
    diff --git a/code_samples/back_office/settings/templates/themes/admin/user/setting/update_unit.html.twig b/code_samples/back_office/settings/templates/themes/admin/user/setting/update_unit.html.twig deleted file mode 100644 index d1fb37d3269..00000000000 --- a/code_samples/back_office/settings/templates/themes/admin/user/setting/update_unit.html.twig +++ /dev/null @@ -1,9 +0,0 @@ -{% extends '@ibexadesign/account/settings/update.html.twig' %} - -{% block form %} - {{ parent() }} - -{% endblock %} diff --git a/code_samples/catalog/custom_catalog_filter/templates/themes/admin/product_catalog/catalog_filters_blocks.html.twig b/code_samples/catalog/custom_catalog_filter/templates/themes/admin/product_catalog/catalog_filters_blocks.html.twig deleted file mode 100644 index b1e5fbe92a6..00000000000 --- a/code_samples/catalog/custom_catalog_filter/templates/themes/admin/product_catalog/catalog_filters_blocks.html.twig +++ /dev/null @@ -1,3 +0,0 @@ -{% block catalog_criteria_product_name_values %} - {% include '@ibexadesign/product_catalog/catalog/edit/list_filter_taggify.html.twig' with { criteria } %} -{% endblock %} diff --git a/code_samples/catalog/custom_catalog_filter/templates/themes/admin/product_catalog/form_field_override.html.twig b/code_samples/catalog/custom_catalog_filter/templates/themes/admin/product_catalog/form_field_override.html.twig deleted file mode 100644 index d9b6cdeed11..00000000000 --- a/code_samples/catalog/custom_catalog_filter/templates/themes/admin/product_catalog/form_field_override.html.twig +++ /dev/null @@ -1,5 +0,0 @@ -{% extends '@ibexadesign/product_catalog/form_fields.html.twig' %} - -{%- block catalog_criteria_product_name_row -%} - {{- block('catalog_taggify_panel') -}} -{%- endblock -%} diff --git a/code_samples/customer_portal/templates/themes/admin/corporate_account/application/details.html.twig b/code_samples/customer_portal/templates/themes/admin/corporate_account/application/details.html.twig deleted file mode 100644 index f7efaa70060..00000000000 --- a/code_samples/customer_portal/templates/themes/admin/corporate_account/application/details.html.twig +++ /dev/null @@ -1,18 +0,0 @@ -{% extends "@IbexaCorporateAccount/themes/admin/corporate_account/application/details.html.twig" %} - -{% block content %} - {{ form_start(verify_form, { action: path('ibexa.corporate_account.application.workflow.state', { - state: 'verify', - applicationId: application.id, - }), method: 'POST'}) }} - {{ form_row(verify_form.notes) }} - -
    - {{ form_widget(verify_form.verify, { attr: { - class: 'ibexa-btn ibexa-btn--primary ibexa-ca-application-workflow-extra-actions__btn', - }}) }} -
    - {{ form_end(verify_form) }} - - {{ parent() }} -{% endblock %} diff --git a/code_samples/field_types/2dpoint_ft/steps/step_4/point2d_field.html.twig b/code_samples/field_types/2dpoint_ft/steps/step_4/point2d_field.html.twig deleted file mode 100644 index 83f401e9a12..00000000000 --- a/code_samples/field_types/2dpoint_ft/steps/step_4/point2d_field.html.twig +++ /dev/null @@ -1,3 +0,0 @@ -{% block point2d_field %} - ({{ field.value.getX() }}, {{ field.value.getY() }}) -{% endblock %} diff --git a/code_samples/field_types/2dpoint_ft/templates/point2d_field.html.twig b/code_samples/field_types/2dpoint_ft/templates/point2d_field.html.twig deleted file mode 100644 index 02af5535d0b..00000000000 --- a/code_samples/field_types/2dpoint_ft/templates/point2d_field.html.twig +++ /dev/null @@ -1,6 +0,0 @@ -{% block point2d_field %} - {{ fieldSettings.format|replace({ - '%x%': field.value.x, - '%y%': field.value.y - }) }} -{% endblock %} \ No newline at end of file diff --git a/code_samples/field_types/2dpoint_ft/templates/point2d_field_type_definition.html.twig b/code_samples/field_types/2dpoint_ft/templates/point2d_field_type_definition.html.twig deleted file mode 100644 index 6630478765c..00000000000 --- a/code_samples/field_types/2dpoint_ft/templates/point2d_field_type_definition.html.twig +++ /dev/null @@ -1,7 +0,0 @@ -{% block point2d_field_definition_edit %} -
    - {{- form_label(form.fieldSettings.format) -}} - {{- form_errors(form.fieldSettings.format) -}} - {{- form_widget(form.fieldSettings.format) -}} -
    -{% endblock %} \ No newline at end of file diff --git a/code_samples/field_types/generic_ft/templates/themes/admin/field_types/field_type_comparison.html.twig b/code_samples/field_types/generic_ft/templates/themes/admin/field_types/field_type_comparison.html.twig deleted file mode 100644 index e8a97d97bd0..00000000000 --- a/code_samples/field_types/generic_ft/templates/themes/admin/field_types/field_type_comparison.html.twig +++ /dev/null @@ -1,13 +0,0 @@ -{% extends '@ibexadesign/version_comparison/comparison_result_blocks.html.twig' %} - -{% block hello_world_field_comparison %} - {% apply spaceless %} - - {% with { - 'comparison_result': comparison_result.getHelloWorldDiff() - } %} - {{ block('string_diff_render') }} - {% endwith %} - - {% endapply %} -{% endblock %} diff --git a/code_samples/field_types/generic_ft/templates/themes/standard/field_types/field_type.html.twig b/code_samples/field_types/generic_ft/templates/themes/standard/field_types/field_type.html.twig deleted file mode 100644 index 40ce50b3a62..00000000000 --- a/code_samples/field_types/generic_ft/templates/themes/standard/field_types/field_type.html.twig +++ /dev/null @@ -1,3 +0,0 @@ -{% block hello_world_field %} - Hello {{ field.value.getName() }}! -{% endblock %} diff --git a/code_samples/forms/custom_form_attribute/templates/bundles/IbexaFormBuilderBundle/fields/config/form_fields.html.twig b/code_samples/forms/custom_form_attribute/templates/bundles/IbexaFormBuilderBundle/fields/config/form_fields.html.twig deleted file mode 100644 index 5ac87a8b384..00000000000 --- a/code_samples/forms/custom_form_attribute/templates/bundles/IbexaFormBuilderBundle/fields/config/form_fields.html.twig +++ /dev/null @@ -1,16 +0,0 @@ -{% extends "@!IbexaFormBuilder/fields/config/form_fields.html.twig" %} -{% block _field_configuration_attributes_richtext_description_row %} -
    - {% set udw_context = { - 'languageCode': 'en', - } %} - {{ form_errors(form) }} - - - - - {{ form_row(form) }} - - {{ encore_entry_script_tags('formbuilder-richtext-checkbox-js') }} -
    -{% endblock %} \ No newline at end of file diff --git a/code_samples/forms/custom_form_attribute/templates/themes/standard/formtheme/formbuilder_checkbox_with_richtext_description.html.twig b/code_samples/forms/custom_form_attribute/templates/themes/standard/formtheme/formbuilder_checkbox_with_richtext_description.html.twig deleted file mode 100644 index adbb13d6a18..00000000000 --- a/code_samples/forms/custom_form_attribute/templates/themes/standard/formtheme/formbuilder_checkbox_with_richtext_description.html.twig +++ /dev/null @@ -1,6 +0,0 @@ -{% block checkbox_with_richtext_description_row %} - {{ form_label(form)}} - {{ form_errors(form) }} - {{ form_widget(form) }} - {{ form.vars.richtextDescription|ibexa_richtext_to_html5() }} -{% endblock %} \ No newline at end of file diff --git a/code_samples/front/add_design/templates/themes/standard/full/article.html.twig b/code_samples/front/add_design/templates/themes/standard/full/article.html.twig deleted file mode 100644 index 37f5b3deb2c..00000000000 --- a/code_samples/front/add_design/templates/themes/standard/full/article.html.twig +++ /dev/null @@ -1,4 +0,0 @@ -{% extends '@ibexadesign/pagelayout.html.twig' %} - -{% block content %} -{% endblock %} diff --git a/code_samples/front/add_design/templates/themes/standard/pagelayout.html.twig b/code_samples/front/add_design/templates/themes/standard/pagelayout.html.twig deleted file mode 100644 index 42fdd33bfb8..00000000000 --- a/code_samples/front/add_design/templates/themes/standard/pagelayout.html.twig +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - {% if content is defined and title is not defined %} - {% set title = ibexa_content_name( content ) %} - {% endif %} - {{ title|default( 'Home' ) }} - - {% if content is defined and content.contentInfo.mainLocationId %} - - {% endif %} - - {% block stylesheets %} - {{ encore_entry_link_tags('app') }} - {% endblock %} - - - -{% include '@ibexadesign/parts/header.html.twig' %} - -{% block content %} -{% endblock %} - -{% include '@ibexadesign/parts/footer.html.twig' %} - -{% block javascripts %} - {{ encore_entry_script_tags('app') }} -{% endblock %} - - diff --git a/code_samples/front/add_design/templates/themes/standard/parts/footer.html.twig b/code_samples/front/add_design/templates/themes/standard/parts/footer.html.twig deleted file mode 100644 index a4515eae6a8..00000000000 --- a/code_samples/front/add_design/templates/themes/standard/parts/footer.html.twig +++ /dev/null @@ -1 +0,0 @@ - diff --git a/code_samples/front/add_design/templates/themes/standard/parts/header.html.twig b/code_samples/front/add_design/templates/themes/standard/parts/header.html.twig deleted file mode 100644 index 32d44270784..00000000000 --- a/code_samples/front/add_design/templates/themes/standard/parts/header.html.twig +++ /dev/null @@ -1 +0,0 @@ - diff --git a/code_samples/front/add_design/templates/themes/summersale/parts/header.html.twig b/code_samples/front/add_design/templates/themes/summersale/parts/header.html.twig deleted file mode 100644 index 41a454f349c..00000000000 --- a/code_samples/front/add_design/templates/themes/summersale/parts/header.html.twig +++ /dev/null @@ -1 +0,0 @@ - diff --git a/code_samples/front/custom_query_type/templates/themes/my_theme/full/latest.html.twig b/code_samples/front/custom_query_type/templates/themes/my_theme/full/latest.html.twig deleted file mode 100644 index 259ae8aea0a..00000000000 --- a/code_samples/front/custom_query_type/templates/themes/my_theme/full/latest.html.twig +++ /dev/null @@ -1,3 +0,0 @@ -{% for item in latest %} - {{ ibexa_render(item.valueObject) }} -{% endfor %} diff --git a/code_samples/front/embed_content/templates/themes/my_theme/full/article.html.twig b/code_samples/front/embed_content/templates/themes/my_theme/full/article.html.twig deleted file mode 100644 index 26507d0438b..00000000000 --- a/code_samples/front/embed_content/templates/themes/my_theme/full/article.html.twig +++ /dev/null @@ -1,8 +0,0 @@ -{% block content %} -

    {{ ibexa_content_name(content) }}

    - -{% endblock %} diff --git a/code_samples/front/embed_content/templates/themes/my_theme/full/blog_post.html.twig b/code_samples/front/embed_content/templates/themes/my_theme/full/blog_post.html.twig deleted file mode 100644 index 5a3512396e4..00000000000 --- a/code_samples/front/embed_content/templates/themes/my_theme/full/blog_post.html.twig +++ /dev/null @@ -1,4 +0,0 @@ -{{ ibexa_content_name(content) }} -{% for item in items.searchHits %} - {{ ibexa_render(item.valueObject, {'viewType': 'line'}) }} -{% endfor %} diff --git a/code_samples/front/layouts/breadcrumbs/templates/themes/my_theme/pagelayout.html.twig b/code_samples/front/layouts/breadcrumbs/templates/themes/my_theme/pagelayout.html.twig deleted file mode 100644 index 54ad26fb5a3..00000000000 --- a/code_samples/front/layouts/breadcrumbs/templates/themes/my_theme/pagelayout.html.twig +++ /dev/null @@ -1,11 +0,0 @@ -{{ render( - controller( - "App\\Controller\\BreadcrumbController::showBreadcrumbsAction", - { - 'locationId': locationId, - } - ) -) }} - -{% block content %} -{% endblock %} diff --git a/code_samples/front/layouts/breadcrumbs/templates/themes/my_theme/parts/breadcrumbs.html.twig b/code_samples/front/layouts/breadcrumbs/templates/themes/my_theme/parts/breadcrumbs.html.twig deleted file mode 100644 index fe58dc30551..00000000000 --- a/code_samples/front/layouts/breadcrumbs/templates/themes/my_theme/parts/breadcrumbs.html.twig +++ /dev/null @@ -1,8 +0,0 @@ -{% for breadcrumb in breadcrumbs %} - {% if not loop.first %} -> {% endif %} - {% if not loop.last %} - {{ breadcrumb.valueObject.contentInfo.name }} - {% else %} - {{ breadcrumb.valueObject.contentInfo.name }} - {% endif %} -{% endfor %} diff --git a/code_samples/front/layouts/menu/templates/themes/my_theme/pagelayout.html.twig b/code_samples/front/layouts/menu/templates/themes/my_theme/pagelayout.html.twig deleted file mode 100644 index fbdcf7cea91..00000000000 --- a/code_samples/front/layouts/menu/templates/themes/my_theme/pagelayout.html.twig +++ /dev/null @@ -1,12 +0,0 @@ -{{ ibexa_render_content_query({ - 'query': { - 'query_type': 'Menu', - 'assign_results_to': 'menuItems' - }, - 'template': '@ibexadesign/pagelayout_menu.html.twig', -}) }} - -{{ knp_menu_render('root') }} - -{% block content %} -{% endblock %} diff --git a/code_samples/front/layouts/menu/templates/themes/my_theme/pagelayout_menu.html.twig b/code_samples/front/layouts/menu/templates/themes/my_theme/pagelayout_menu.html.twig deleted file mode 100644 index 8b49cf21fd2..00000000000 --- a/code_samples/front/layouts/menu/templates/themes/my_theme/pagelayout_menu.html.twig +++ /dev/null @@ -1,5 +0,0 @@ -{% if menuItems is defined and menuItems is not empty %} - {% for item in menuItems %} -
  • {{ ibexa_content_name(item.valueObject.contentInfo) }}
  • - {% endfor %} -{% endif %} diff --git a/code_samples/front/list_content/templates/themes/my_theme/full/blog_post.html.twig b/code_samples/front/list_content/templates/themes/my_theme/full/blog_post.html.twig deleted file mode 100644 index 87af6188e7f..00000000000 --- a/code_samples/front/list_content/templates/themes/my_theme/full/blog_post.html.twig +++ /dev/null @@ -1,3 +0,0 @@ -{% for item in items.searchHits %} - {{ ibexa_render(item.valueObject, {'viewType': 'line'}) }} -{% endfor %} diff --git a/code_samples/front/list_content/templates/themes/my_theme/full/folder.html.twig b/code_samples/front/list_content/templates/themes/my_theme/full/folder.html.twig deleted file mode 100644 index 87af6188e7f..00000000000 --- a/code_samples/front/list_content/templates/themes/my_theme/full/folder.html.twig +++ /dev/null @@ -1,3 +0,0 @@ -{% for item in items.searchHits %} - {{ ibexa_render(item.valueObject, {'viewType': 'line'}) }} -{% endfor %} diff --git a/code_samples/front/query_pagination/templates/themes/my_theme/full/folder.html.twig b/code_samples/front/query_pagination/templates/themes/my_theme/full/folder.html.twig deleted file mode 100644 index bb3b901cc1b..00000000000 --- a/code_samples/front/query_pagination/templates/themes/my_theme/full/folder.html.twig +++ /dev/null @@ -1,8 +0,0 @@ -{% for item in items %} - {{ ibexa_render(item.valueObject) }} -{% endfor %} - -{{ pagerfanta(items, 'twitter_bootstrap5', { - 'routeName': 'ibexa.url.alias', - 'routeParams': {'location': location } -}) }} diff --git a/code_samples/front/render_content/templates/themes/my_theme/fields/author.html.twig b/code_samples/front/render_content/templates/themes/my_theme/fields/author.html.twig deleted file mode 100644 index be851ae3c41..00000000000 --- a/code_samples/front/render_content/templates/themes/my_theme/fields/author.html.twig +++ /dev/null @@ -1,7 +0,0 @@ -{% block ibexa_author_field %} -{% if field.value.authors|length() > 0 %} - {% for author in field.value.authors %} - {{ author.name }} - {% endfor %} -{% endif %} -{% endblock %} diff --git a/code_samples/front/render_content/templates/themes/my_theme/full/article.html.twig b/code_samples/front/render_content/templates/themes/my_theme/full/article.html.twig deleted file mode 100644 index 43e3c4369d5..00000000000 --- a/code_samples/front/render_content/templates/themes/my_theme/full/article.html.twig +++ /dev/null @@ -1,20 +0,0 @@ -{% extends '@ibexadesign/pagelayout.html.twig' %} - -{% block content %} -

    {{ ibexa_content_name(content) }}

    - -{{ content.contentInfo.publishedDate|ibexa_full_datetime }} - -{{ ibexa_render_field(content, 'intro') }} - -{{ ibexa_render_field(content, 'body', { - 'attr': { - class: 'article-body' - } -}) }} - -{{ ibexa_render_field(content, 'author', { - 'template': '@ibexadesign/fields/author.html.twig' -}) }} - -{% endblock %} diff --git a/code_samples/front/render_content/templates/themes/my_theme/pagelayout.html.twig b/code_samples/front/render_content/templates/themes/my_theme/pagelayout.html.twig deleted file mode 100644 index f1a0a3edad0..00000000000 --- a/code_samples/front/render_content/templates/themes/my_theme/pagelayout.html.twig +++ /dev/null @@ -1,5 +0,0 @@ -{{ encore_entry_link_tags('style') }} - -{% block content %} -{% endblock %} - diff --git a/code_samples/front/render_page/templates/themes/my_theme/blocks/contentlist.html.twig b/code_samples/front/render_page/templates/themes/my_theme/blocks/contentlist.html.twig deleted file mode 100644 index 0e185de3420..00000000000 --- a/code_samples/front/render_page/templates/themes/my_theme/blocks/contentlist.html.twig +++ /dev/null @@ -1,12 +0,0 @@ -
    -

    {{ parentName }}

    - {% if contentArray|length > 0 %} -
    - {% for content in contentArray %} - - {% endfor %} -
    - {% endif %} -
    diff --git a/code_samples/front/render_page/templates/themes/my_theme/layouts/sidebar.html.twig b/code_samples/front/render_page/templates/themes/my_theme/layouts/sidebar.html.twig deleted file mode 100644 index b0b00d5925b..00000000000 --- a/code_samples/front/render_page/templates/themes/my_theme/layouts/sidebar.html.twig +++ /dev/null @@ -1,32 +0,0 @@ -
    -
    - {% if zones[0].blocks %} - {% for block in zones[0].blocks %} -
    - {{ render_esi(controller('Ibexa\\Bundle\\FieldTypePage\\Controller\\BlockController::renderAction', { - 'contentId': contentInfo.id, - 'blockId': block.id, - 'versionNo': versionInfo.versionNo, - 'languageCode': field.languageCode - })) - }} -
    - {% endfor %} - {% endif %} -
    -
    - {% if zones[1].blocks %} - {% for block in zones[1].blocks %} -
    - {{ render_esi(controller('Ibexa\\Bundle\\FieldTypePage\\Controller\\BlockController::renderAction', { - 'contentId': contentInfo.id, - 'blockId': block.id, - 'versionNo': versionInfo.versionNo, - 'languageCode': field.languageCode - })) - }} -
    - {% endfor %} - {% endif %} -
    -
    diff --git a/code_samples/front/search/search_bar/templates/themes/my_theme/full/search.html.twig b/code_samples/front/search/search_bar/templates/themes/my_theme/full/search.html.twig deleted file mode 100644 index 70461f0cf8d..00000000000 --- a/code_samples/front/search/search_bar/templates/themes/my_theme/full/search.html.twig +++ /dev/null @@ -1,45 +0,0 @@ -{% block content %} -
    -
    -
    - {% include '@ibexadesign/parts/search_form.html.twig' with { form: form } %} - - {% if results is defined %} -
    -
    {{ 'search.header'|trans({'%total%': pager.nbResults})|desc('%total% search result(s):') }}
    -
    - - {% if results is empty %} -
    - - - - -
    - {{ 'search.no_result'|trans({'%query%': form.vars.value.query})|desc('No results found for "%query%".') }} -
    -
    - {% else %} -

    {{ 'search.name'|trans|desc('Name') }}

    - - - {% if pager.haveToPaginate %} -
    - {{ pagerfanta(pager, '', {'pageParameter': '[search][page]'}) }} -
    - {% endif %} - {% endif %} - {% endif %} -
    -
    -
    -{% endblock %} diff --git a/code_samples/front/search/search_bar/templates/themes/my_theme/pagelayout.html.twig b/code_samples/front/search/search_bar/templates/themes/my_theme/pagelayout.html.twig deleted file mode 100644 index 85ea39ef752..00000000000 --- a/code_samples/front/search/search_bar/templates/themes/my_theme/pagelayout.html.twig +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - {% if content is defined and title is not defined %} - {% set title = ibexa_content_name( content ) %} - {% endif %} - {{ title|default( 'Home' ) }} - - {% if content is defined and content.contentInfo.mainLocationId %} - - {% endif %} - - {% block stylesheets %} - {{ encore_entry_link_tags('app') }} - {% endblock %} - - -{% include '@ibexadesign/parts/search_bar.html.twig' %} -{% block content %} -{% endblock %} - -{% block javascripts %} - {{ encore_entry_script_tags('app') }} -{% endblock %} - - diff --git a/code_samples/front/search/search_bar/templates/themes/my_theme/parts/search_bar.html.twig b/code_samples/front/search/search_bar/templates/themes/my_theme/parts/search_bar.html.twig deleted file mode 100644 index b405caf8f0a..00000000000 --- a/code_samples/front/search/search_bar/templates/themes/my_theme/parts/search_bar.html.twig +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/code_samples/front/search/search_bar/templates/themes/my_theme/parts/search_form.html.twig b/code_samples/front/search/search_bar/templates/themes/my_theme/parts/search_form.html.twig deleted file mode 100644 index a9be97077a8..00000000000 --- a/code_samples/front/search/search_bar/templates/themes/my_theme/parts/search_form.html.twig +++ /dev/null @@ -1,10 +0,0 @@ -{{ form_start(form) }} - -
    - {{ form_row(form.query) }} - -
    - -{{ form_end(form, {'render_rest': false}) }} diff --git a/code_samples/front/view_matcher/templates/themes/my_theme/featured_article.html.twig b/code_samples/front/view_matcher/templates/themes/my_theme/featured_article.html.twig deleted file mode 100644 index a285fbc8320..00000000000 --- a/code_samples/front/view_matcher/templates/themes/my_theme/featured_article.html.twig +++ /dev/null @@ -1,5 +0,0 @@ -{% extends '@ibexadesign/pagelayout.html.twig' %} - -{% block content %} -

    Featured article: {{ ibexa_content_name(content) }}

    -{% endblock %} diff --git a/code_samples/page/custom_attribute/templates/themes/admin/custom_form_templates.html.twig b/code_samples/page/custom_attribute/templates/themes/admin/custom_form_templates.html.twig deleted file mode 100644 index 8e05c5d6f85..00000000000 --- a/code_samples/page/custom_attribute/templates/themes/admin/custom_form_templates.html.twig +++ /dev/null @@ -1,4 +0,0 @@ -{% block my_string_attribute_widget %} -

    My String

    - {{ form_widget(form) }} -{% endblock %} diff --git a/code_samples/page/custom_attribute/templates/themes/standard/blocks/my_block.html.twig b/code_samples/page/custom_attribute/templates/themes/standard/blocks/my_block.html.twig deleted file mode 100644 index 29bd7f74ace..00000000000 --- a/code_samples/page/custom_attribute/templates/themes/standard/blocks/my_block.html.twig +++ /dev/null @@ -1 +0,0 @@ -

    {{ my_string_attribute }}

    diff --git a/code_samples/page/custom_block_validator/templates/themes/standard/blocks/my_block.html.twig b/code_samples/page/custom_block_validator/templates/themes/standard/blocks/my_block.html.twig deleted file mode 100644 index 67246d61751..00000000000 --- a/code_samples/page/custom_block_validator/templates/themes/standard/blocks/my_block.html.twig +++ /dev/null @@ -1 +0,0 @@ -

    {{ my_text_attribute }}

    diff --git a/code_samples/page/custom_page_block/templates/themes/standard/blocks/event/config.html.twig b/code_samples/page/custom_page_block/templates/themes/standard/blocks/event/config.html.twig deleted file mode 100644 index 90218036ae9..00000000000 --- a/code_samples/page/custom_page_block/templates/themes/standard/blocks/event/config.html.twig +++ /dev/null @@ -1,18 +0,0 @@ -{% extends '@IbexaPageBuilder/page_builder/block/config.html.twig' %} - -{% block basic_tab_content %} -
    - {{ form_row(form.name) }} - {% if attributes_per_category['default'] is defined %} -
      - {% for identifier in attributes_per_category['default'] %} - {% block config_entry %} -
    1. - {{ form_row(form.attributes[identifier]) }} -
    2. - {% endblock %} - {% endfor %} -
    - {% endif %} -
    -{% endblock %} diff --git a/code_samples/page/custom_page_block/templates/themes/standard/blocks/event/featured_template.html.twig b/code_samples/page/custom_page_block/templates/themes/standard/blocks/event/featured_template.html.twig deleted file mode 100644 index 9b426a39ef2..00000000000 --- a/code_samples/page/custom_page_block/templates/themes/standard/blocks/event/featured_template.html.twig +++ /dev/null @@ -1,6 +0,0 @@ -

    {{ name }}

    -

    {{ category }}

    -{{ render(controller('ibexa_content::viewAction', { - 'contentId': event, - 'viewType': 'embed' -})) }} diff --git a/code_samples/page/custom_page_block/templates/themes/standard/blocks/event/template.html.twig b/code_samples/page/custom_page_block/templates/themes/standard/blocks/event/template.html.twig deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/code_samples/page/ibexa_connect_scenario_block/config/packages/ibexa_connect.yaml b/code_samples/page/ibexa_connect_scenario_block/config/packages/ibexa_connect.yaml deleted file mode 100644 index 5bea90a2dd9..00000000000 --- a/code_samples/page/ibexa_connect_scenario_block/config/packages/ibexa_connect.yaml +++ /dev/null @@ -1,13 +0,0 @@ -ibexa_connect: - scenario_block: - block_templates: - company_customers: - template: 'blocks/default.html.twig' - external_clients: - label: External clients - template: 'blocks/default.html.twig' - parameters: - external_client_id: string - external_client_name: - type: string - required: true \ No newline at end of file diff --git a/code_samples/page/ibexa_connect_scenario_block/config/packages/views.yaml b/code_samples/page/ibexa_connect_scenario_block/config/packages/views.yaml deleted file mode 100644 index 00804bea64e..00000000000 --- a/code_samples/page/ibexa_connect_scenario_block/config/packages/views.yaml +++ /dev/null @@ -1,6 +0,0 @@ -ibexa: - system: - site: - page_layout: pagelayout.html.twig - user: - layout: pagelayout.html.twig \ No newline at end of file diff --git a/code_samples/page/ibexa_connect_scenario_block/templates/blocks/default.html.twig b/code_samples/page/ibexa_connect_scenario_block/templates/blocks/default.html.twig deleted file mode 100644 index d336ad13938..00000000000 --- a/code_samples/page/ibexa_connect_scenario_block/templates/blocks/default.html.twig +++ /dev/null @@ -1 +0,0 @@ -{{ dump(ibexa_connect_data) }} \ No newline at end of file diff --git a/code_samples/page/ibexa_connect_scenario_block/templates/pagelayout.html.twig b/code_samples/page/ibexa_connect_scenario_block/templates/pagelayout.html.twig deleted file mode 100644 index a19ba7096a2..00000000000 --- a/code_samples/page/ibexa_connect_scenario_block/templates/pagelayout.html.twig +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - {% if content is defined %} - {% set title = ez_content_name(content) %} - {% endif %} - {{ title|default('Home'|trans) }} - {{ "It's a Dog's World!"|trans }} - - -
    -
    - {% block content %}{% endblock %} -
    -
    - - \ No newline at end of file diff --git a/code_samples/page/page_listener/templates/themes/standard/block/my_block.html.twig b/code_samples/page/page_listener/templates/themes/standard/block/my_block.html.twig deleted file mode 100644 index 903e7c46222..00000000000 --- a/code_samples/page/page_listener/templates/themes/standard/block/my_block.html.twig +++ /dev/null @@ -1,3 +0,0 @@ -
    - {{ my_parameter }} -
    diff --git a/code_samples/page/pagefield_layout.html.twig b/code_samples/page/pagefield_layout.html.twig deleted file mode 100644 index 0eacab3fc59..00000000000 --- a/code_samples/page/pagefield_layout.html.twig +++ /dev/null @@ -1,22 +0,0 @@ -
    - {# The required attribute for the displayed zone #} -
    - {# If a zone with [0] index contains any blocks #} - {% if zones[0].blocks %} - {# for each block #} - {% for block in blocks %} - {# create a new layer with appropriate ID #} -
    - {# render the block by using the "Ibexa\\Bundle\\FieldTypePage\\Controller\\BlockController::renderAction" controller #} - {# location.id is the ID of the Location of the current content item, block.id is the ID of the current block #} - {{ render_esi(controller('Ibexa\\Bundle\\FieldTypePage\\Controller\\BlockController::renderAction', { - 'locationId': locationId, - 'blockId': block.id, - 'versionNo': versionInfo.versionNo, - 'languageCode': field.languageCode - }, ibexa_append_cacheable_query_params(block))) }} -
    - {% endfor %} - {% endif %} -
    -
    diff --git a/code_samples/page/react_app_block/assets/page-builder/components/Calculator.jsx b/code_samples/page/react_app_block/assets/page-builder/components/Calculator.jsx deleted file mode 100644 index 34aa0eecc2a..00000000000 --- a/code_samples/page/react_app_block/assets/page-builder/components/Calculator.jsx +++ /dev/null @@ -1,7 +0,0 @@ -import React from 'react'; - -export default function (props) { - // a + b = ... - console.log("Hello React!"); - return
    {props.a} + {props.b} = {parseInt(props.a) + parseInt(props.b)}!
    ; -} diff --git a/code_samples/page/react_app_block/assets/page-builder/react/blocks/Calculator.js b/code_samples/page/react_app_block/assets/page-builder/react/blocks/Calculator.js deleted file mode 100644 index 1c3f055d0c7..00000000000 --- a/code_samples/page/react_app_block/assets/page-builder/react/blocks/Calculator.js +++ /dev/null @@ -1,5 +0,0 @@ -import Calculator from '/assets/page-builder/components/Calculator'; - -export default { - Calculator: Calculator, -}; diff --git a/code_samples/recent_activity/templates/themes/admin/activity_log/ui/default.html.twig b/code_samples/recent_activity/templates/themes/admin/activity_log/ui/default.html.twig deleted file mode 100644 index bb933d1951a..00000000000 --- a/code_samples/recent_activity/templates/themes/admin/activity_log/ui/default.html.twig +++ /dev/null @@ -1,5 +0,0 @@ -{% extends '@IbexaActivityLog/themes/admin/activity_log/ui/default.html.twig' %} - -{%- block activity_log_description_widget -%} - {{ dump(log) }} -{%- endblock activity_log_description_widget -%} diff --git a/code_samples/recent_activity/templates/themes/admin/activity_log/ui/my_feature/simulate.html.twig b/code_samples/recent_activity/templates/themes/admin/activity_log/ui/my_feature/simulate.html.twig deleted file mode 100644 index 1fe2690c43c..00000000000 --- a/code_samples/recent_activity/templates/themes/admin/activity_log/ui/my_feature/simulate.html.twig +++ /dev/null @@ -1,21 +0,0 @@ -{% extends '@ibexadesign/activity_log/ui/default.html.twig' %} - -{%- block activity_log_description_widget -%} - {% if log.getRelatedObject() is not null %} - - {{- log.getRelatedObject().name -}} - - {% if log.getRelatedObject().name != log.getObjectName() %} - (was named “{{ log.getObjectName() }}”) - {% endif %} - {% else %} - {{ log.getObjectName() }} (which doesn't exist anymore) - {% endif %} -{%- endblock activity_log_description_widget -%} diff --git a/code_samples/recommendations/events/basket_event.html.twig b/code_samples/recommendations/events/basket_event.html.twig deleted file mode 100644 index 11df19b560c..00000000000 --- a/code_samples/recommendations/events/basket_event.html.twig +++ /dev/null @@ -1,25 +0,0 @@ -{# templates/cart/add_confirmation.html.twig #} -{% extends 'base.html.twig' %} - -{% block content %} -
    -

    Product "{{ product.name }}" has been added to your cart!

    -

    Quantity: {{ addedQuantity }}

    -
    - - {# Build basket content string: "product-code:quantity;product-code:quantity" #} - {% set basketContent = [] %} - {% for entry in cart.entries %} - {% set basketContent = basketContent|merge([entry.product.code ~ ':' ~ entry.quantity]) %} - {% endfor %} - {# Track basket addition #} - {% set basketContext = { - 'basketContent': basketContent|join(';'), - 'basketId': cart.id, - 'quantity': addedQuantity - } %} - - {{ ibexa_tracking_track_event('basket', product, basketContext) }} - - View Cart -{% endblock %} diff --git a/code_samples/recommendations/events/buy_event.html.twig b/code_samples/recommendations/events/buy_event.html.twig deleted file mode 100644 index 47c97212dda..00000000000 --- a/code_samples/recommendations/events/buy_event.html.twig +++ /dev/null @@ -1,6 +0,0 @@ -{% set buyContext = { - 'subtotal': '10.00', - 'currency': 'EUR', - 'quantity': 1 -} %} -{{ ibexa_tracking_track_event('buy', product, buyContext) }} diff --git a/code_samples/recommendations/events/category_parameter.html.twig b/code_samples/recommendations/events/category_parameter.html.twig deleted file mode 100644 index 16d67a06f1d..00000000000 --- a/code_samples/recommendations/events/category_parameter.html.twig +++ /dev/null @@ -1,11 +0,0 @@ -{% block content %} -
    -

    {{ product.name }}

    - {# ... product content ... #} -
    - - {# Track with category identifier - automatic loading and formatting #} - {{ ibexa_tracking_track_event('visit', product, { - 'categoryIdentifier': 'electronics' - }) }} -{% endblock %} diff --git a/code_samples/recommendations/events/content_visit_event.html.twig b/code_samples/recommendations/events/content_visit_event.html.twig deleted file mode 100644 index 8723147fe6b..00000000000 --- a/code_samples/recommendations/events/content_visit_event.html.twig +++ /dev/null @@ -1,7 +0,0 @@ -{# templates/bundles/IbexaCoreBundle/default/content/full.html.twig #} -{% extends '@!IbexaCore/default/content/full.html.twig' %} - -{% block content %} - {{ parent() }} - {{ ibexa_tracking_track_event('contentvisit', content) }} -{% endblock %} diff --git a/code_samples/recommendations/events/itemclicked_event.html.twig b/code_samples/recommendations/events/itemclicked_event.html.twig deleted file mode 100644 index fc3cf42dfb7..00000000000 --- a/code_samples/recommendations/events/itemclicked_event.html.twig +++ /dev/null @@ -1,4 +0,0 @@ -{{ ibexa_tracking_track_event('itemclick', product.code, { - 'moduleName': 'homepage-recommendations', - 'redirectUrl': path('ibexa.product.view', {'productCode': product.code}) -}) }} diff --git a/code_samples/recommendations/events/product_visit_event.html.twig b/code_samples/recommendations/events/product_visit_event.html.twig deleted file mode 100644 index 0f7b61c3a9f..00000000000 --- a/code_samples/recommendations/events/product_visit_event.html.twig +++ /dev/null @@ -1,13 +0,0 @@ -{# templates/product/view.html.twig #} -{% extends 'base.html.twig' %} - -{% block content %} -
    -

    {{ product.name }}

    -

    {{ product.description }}

    -
    {{ product.price }}
    -
    - - {# Track product visit #} - {{ ibexa_tracking_track_event('visit', product) }} -{% endblock %} diff --git a/code_samples/recommendations/templates/themes/standard/ibexa/tracking/script.html.twig b/code_samples/recommendations/templates/themes/standard/ibexa/tracking/script.html.twig deleted file mode 100644 index 40eedecb7df..00000000000 --- a/code_samples/recommendations/templates/themes/standard/ibexa/tracking/script.html.twig +++ /dev/null @@ -1,4 +0,0 @@ -{% extends '@IbexaConnectorRaptor/themes/standard/ibexa/tracking/script.html.twig' %} -{% block ibexa_tracking_script %} - console.log('My custom tracking script, but relying on loadTracking function.'); -{% endblock %} diff --git a/code_samples/recommendations/templates/themes/standard/ibexa/tracking/script.js.twig b/code_samples/recommendations/templates/themes/standard/ibexa/tracking/script.js.twig deleted file mode 100644 index c9f3ecddae9..00000000000 --- a/code_samples/recommendations/templates/themes/standard/ibexa/tracking/script.js.twig +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/code_samples/recommendations/templates/themes/standard/pagelayout.html.twig b/code_samples/recommendations/templates/themes/standard/pagelayout.html.twig deleted file mode 100644 index 33fc86b1557..00000000000 --- a/code_samples/recommendations/templates/themes/standard/pagelayout.html.twig +++ /dev/null @@ -1,13 +0,0 @@ -{# templates/pagelayout.html.twig #} - - - - {# ... other head content ... #} - - {# Initialize Raptor tracking - must be called before any tracking events #} - {{ ibexa_tracking_script() }} - - - {# ... page content ... #} - - diff --git a/code_samples/recommendations/templates/tracking/custom_visit.html.twig b/code_samples/recommendations/templates/tracking/custom_visit.html.twig deleted file mode 100644 index 9214e47f3bf..00000000000 --- a/code_samples/recommendations/templates/tracking/custom_visit.html.twig +++ /dev/null @@ -1,33 +0,0 @@ -{# templates/tracking/custom_visit.html.twig #} - -{# -# Custom visit tracking template -# -# Available variables, passed to the template by `ibexa_tracking_track_event`: -# - parameters: array of Raptor tracking parameters (p1, p2, p3, etc.) -# - debug: boolean flag to enable debug console messages -#} - - diff --git a/code_samples/tutorials/page_tutorial/templates/base.html.twig b/code_samples/tutorials/page_tutorial/templates/base.html.twig deleted file mode 100644 index d4f83f7f8bf..00000000000 --- a/code_samples/tutorials/page_tutorial/templates/base.html.twig +++ /dev/null @@ -1,19 +0,0 @@ - - - - - {% block title %}Welcome!{% endblock %} - - {# Run `composer require symfony/webpack-encore-bundle` to start using Symfony UX #} - {% block stylesheets %} - {{ encore_entry_link_tags('app') }} - {% endblock %} - - {% block javascripts %} - {{ encore_entry_script_tags('app') }} - {% endblock %} - - - {% block body %}{% endblock %} - - diff --git a/code_samples/tutorials/page_tutorial/templates/blocks/contentlist/default.html.twig b/code_samples/tutorials/page_tutorial/templates/blocks/contentlist/default.html.twig deleted file mode 100644 index 58a48d2b47f..00000000000 --- a/code_samples/tutorials/page_tutorial/templates/blocks/contentlist/default.html.twig +++ /dev/null @@ -1,24 +0,0 @@ -
    -

    {{ parentName }}

    - {% if contentArray|length > 0 %} -
    - {% for content in contentArray %} -
    -
    - {{ ibexa_render_field(content.content, 'photo', { - 'parameters': { - 'alias': 'content_list' - } - }) }} -
    -

    {{ ibexa_content_name(content.content) }}

    - {% if not ibexa_field_is_empty(content.content, 'short_description') %} -
    - {{ ibexa_render_field(content.content, 'short_description') }} -
    - {% endif %} -
    - {% endfor %} -
    - {% endif %} -
    \ No newline at end of file diff --git a/code_samples/tutorials/page_tutorial/templates/blocks/form/newsletter.html.twig b/code_samples/tutorials/page_tutorial/templates/blocks/form/newsletter.html.twig deleted file mode 100644 index bc611f6f3f7..00000000000 --- a/code_samples/tutorials/page_tutorial/templates/blocks/form/newsletter.html.twig +++ /dev/null @@ -1,11 +0,0 @@ -
    -
    - {{ ibexa_http_cache_tag_relation_location_ids(locationId) }} - {{ render(controller('ibexa_content::viewAction', { - 'contentId': contentId, - 'locationId': locationId, - 'viewType': 'embed' - })) }} - -
    -
    diff --git a/code_samples/tutorials/page_tutorial/templates/blocks/random/default.html.twig b/code_samples/tutorials/page_tutorial/templates/blocks/random/default.html.twig deleted file mode 100644 index cc6c24d341f..00000000000 --- a/code_samples/tutorials/page_tutorial/templates/blocks/random/default.html.twig +++ /dev/null @@ -1,7 +0,0 @@ -
    -

    {{ 'Tip of the Day'|trans }}

    -
    {{ ibexa_content_name(randomContent) }}
    -
    - {{ ibexa_render_field(randomContent, 'body') }} -
    -
    \ No newline at end of file diff --git a/code_samples/tutorials/page_tutorial/templates/blocks/schedule/featured.html.twig b/code_samples/tutorials/page_tutorial/templates/blocks/schedule/featured.html.twig deleted file mode 100644 index 13a08dffe6b..00000000000 --- a/code_samples/tutorials/page_tutorial/templates/blocks/schedule/featured.html.twig +++ /dev/null @@ -1,19 +0,0 @@ -{% apply spaceless %} -
    - -
    -{% endapply %} \ No newline at end of file diff --git a/code_samples/tutorials/page_tutorial/templates/featured/article.html.twig b/code_samples/tutorials/page_tutorial/templates/featured/article.html.twig deleted file mode 100644 index 88b476d8f4b..00000000000 --- a/code_samples/tutorials/page_tutorial/templates/featured/article.html.twig +++ /dev/null @@ -1,4 +0,0 @@ -{% set imageAlias = ibexa_image_alias(content.getField('image'), content.versionInfo, 'featured_article') %} -
    -

    {{ ibexa_content_name(content) }}

    -
    \ No newline at end of file diff --git a/code_samples/tutorials/page_tutorial/templates/fields/form_field.html.twig b/code_samples/tutorials/page_tutorial/templates/fields/form_field.html.twig deleted file mode 100644 index b8484beda40..00000000000 --- a/code_samples/tutorials/page_tutorial/templates/fields/form_field.html.twig +++ /dev/null @@ -1,12 +0,0 @@ -{% block ibexa_form_field %} - {% set formValue = field.value.getForm() %} - {% if formValue %} - {% set form = formValue.createView() %} - {% form_theme form 'bootstrap_4_layout.html.twig' %} - {% apply spaceless %} - {% if not ibexa_field_is_empty(content, field) %} - {{ form(form) }} - {% endif %} - {% endapply %} - {% endif %} -{% endblock %} \ No newline at end of file diff --git a/code_samples/tutorials/page_tutorial/templates/full/article.html.twig b/code_samples/tutorials/page_tutorial/templates/full/article.html.twig deleted file mode 100644 index 1d25b67f084..00000000000 --- a/code_samples/tutorials/page_tutorial/templates/full/article.html.twig +++ /dev/null @@ -1,23 +0,0 @@ -{% extends 'pagelayout.html.twig' %} - -{% block content %} -

    {{ ibexa_content_name(content) }}

    -
    -
    - {{ ibexa_render_field(content, 'image', { - 'parameters': { - 'alias': 'article_full', - 'class': 'img-responsive' - } - }) }} -
    -
    -
    -
    - {{ ibexa_render_field(content, 'intro') }} -
    -
    - {{ ibexa_render_field(content, 'body') }} -
    -
    -{% endblock %} \ No newline at end of file diff --git a/code_samples/tutorials/page_tutorial/templates/full/dog_breed.html.twig b/code_samples/tutorials/page_tutorial/templates/full/dog_breed.html.twig deleted file mode 100644 index b473df8c469..00000000000 --- a/code_samples/tutorials/page_tutorial/templates/full/dog_breed.html.twig +++ /dev/null @@ -1,17 +0,0 @@ -{% extends 'pagelayout.html.twig' %} - -{% block content %} -
    -

    {{ ibexa_content_name(content) }}

    -
    - {{ ibexa_render_field(content, 'photo', { - 'parameters': { - 'alias': 'dog_breed_full' - } - }) }} -
    -
    -

    {{ ibexa_render_field(content, 'description') }}

    -
    -
    -{% endblock %} \ No newline at end of file diff --git a/code_samples/tutorials/page_tutorial/templates/full/folder.html.twig b/code_samples/tutorials/page_tutorial/templates/full/folder.html.twig deleted file mode 100644 index ad0a1b59005..00000000000 --- a/code_samples/tutorials/page_tutorial/templates/full/folder.html.twig +++ /dev/null @@ -1,16 +0,0 @@ -{% extends 'pagelayout.html.twig' %} - -{% block content %} -
    -

    {{ ibexa_content_name(content) }}

    -
    - {% for item in items.searchHits %} -
    - {{ ibexa_content_name(item.valueObject.contentInfo) }} -
    - {% endfor %} -
    -
    -{% endblock %} \ No newline at end of file diff --git a/code_samples/tutorials/page_tutorial/templates/full/landing_page.html.twig b/code_samples/tutorials/page_tutorial/templates/full/landing_page.html.twig deleted file mode 100644 index a47ab9dd3b3..00000000000 --- a/code_samples/tutorials/page_tutorial/templates/full/landing_page.html.twig +++ /dev/null @@ -1,7 +0,0 @@ -{% extends 'pagelayout.html.twig' %} - -{% block content %} -
    - {{ ibexa_render_field(content, 'page') }} -
    -{% endblock %} \ No newline at end of file diff --git a/code_samples/tutorials/page_tutorial/templates/full/tip.html.twig b/code_samples/tutorials/page_tutorial/templates/full/tip.html.twig deleted file mode 100644 index 92c656bc06b..00000000000 --- a/code_samples/tutorials/page_tutorial/templates/full/tip.html.twig +++ /dev/null @@ -1,14 +0,0 @@ -{% extends 'pagelayout.html.twig' %} - -{% block content %} -
    -
    -

    {{ ibexa_content_name(content) }}

    - {{ ibexa_render_field( content, 'body', { - 'attr': { - 'class': 'tip-text-full' - } - }) }} -
    -
    -{% endblock %} \ No newline at end of file diff --git a/code_samples/tutorials/page_tutorial/templates/layouts/sidebar.html.twig b/code_samples/tutorials/page_tutorial/templates/layouts/sidebar.html.twig deleted file mode 100644 index 03050166d32..00000000000 --- a/code_samples/tutorials/page_tutorial/templates/layouts/sidebar.html.twig +++ /dev/null @@ -1,36 +0,0 @@ -
    -
    - {% if zones[0].blocks %} - {% set locationId = parameters.location is not null ? parameters.location.id : contentInfo.mainLocationId %} - - {% for block in zones[0].blocks %} -
    - {{ render_esi(controller('Ibexa\\Bundle\\FieldTypePage\\Controller\\BlockController::renderAction', { - 'locationId': locationId, - 'contentId': contentInfo.id, - 'blockId': block.id, - 'versionNo': versionInfo.versionNo, - 'languageCode': field.languageCode - })) }} -
    - {% endfor %} - {% endif %} -
    - -
    diff --git a/code_samples/tutorials/page_tutorial/templates/pagelayout.html.twig b/code_samples/tutorials/page_tutorial/templates/pagelayout.html.twig deleted file mode 100644 index 76eebcb6c4c..00000000000 --- a/code_samples/tutorials/page_tutorial/templates/pagelayout.html.twig +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - {{ encore_entry_link_tags('tutorial') }} - - {% if content is defined %} - {% set title = ez_content_name(content) %} - {% endif %} - {{ title|default('Home'|trans) }} - {{ "It's a Dog's World!"|trans }} - - -
    -
    -
    - -
    -
    -
    -
    - -
    - {% block content %}{% endblock %} -
    -
    - - - - diff --git a/code_samples/tutorials/page_tutorial/templates/pagelayout_menu.html.twig b/code_samples/tutorials/page_tutorial/templates/pagelayout_menu.html.twig deleted file mode 100644 index 8b49cf21fd2..00000000000 --- a/code_samples/tutorials/page_tutorial/templates/pagelayout_menu.html.twig +++ /dev/null @@ -1,5 +0,0 @@ -{% if menuItems is defined and menuItems is not empty %} - {% for item in menuItems %} -
  • {{ ibexa_content_name(item.valueObject.contentInfo) }}
  • - {% endfor %} -{% endif %} diff --git a/code_samples/tutorials/page_tutorial/templates/themes/standard/full/welcome_page.html.twig b/code_samples/tutorials/page_tutorial/templates/themes/standard/full/welcome_page.html.twig deleted file mode 100644 index 57d32c1915b..00000000000 --- a/code_samples/tutorials/page_tutorial/templates/themes/standard/full/welcome_page.html.twig +++ /dev/null @@ -1,159 +0,0 @@ -{% extends '@ibexadesign/pagelayout.html.twig' %} - -{% trans_default_domain 'ibexa_welcome_page' %} - -{% block stylesheets %} - - - - - {{ encore_entry_link_tags('welcome_page') }} -{% endblock %} - -{% block content %} -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    -
    -

    - {{ 'ibexa_platform_welcome_page.welcome_to'|trans|desc('Welcome to') }}
    - {{ ibexa_render_field(content, 'name') }} - {{ constant('Ibexa\\Contracts\\Core\\Ibexa::VERSION') }} -

    -
    - {{ ibexa_render_field(content, 'description') }} -

    {{ 'ibexa_platform_welcome_page.navigate_to'|trans({'%target%': project_dir})|desc('Navigate to: %target%') }}

    - - {% set admin_url = url('ibexa.dashboard', { 'siteaccess': 'admin' }) %} -

    - {{ 'ibexa_platform_welcome_page.create_new_content_at'|trans({'%target%': '' ~ admin_url ~ '' }) - |desc('Create new content at %target%')|raw }} -

    -
    -
    -
    -
    -
    -
    -
    -
    -
    - {{ ibexa_render_field(content, 'page') }} -
    -
    -
    -
    -
    - -
    -
    - -{% endblock %} diff --git a/code_samples/tutorials/page_tutorial/templates/themes/standard/pagelayout.html.twig b/code_samples/tutorials/page_tutorial/templates/themes/standard/pagelayout.html.twig deleted file mode 100644 index 32bea8c626d..00000000000 --- a/code_samples/tutorials/page_tutorial/templates/themes/standard/pagelayout.html.twig +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - {% if content is defined and title is not defined %} - {% set title = ibexa_content_name( content ) %} - {% endif %} - {{ title|default( 'Home' ) }} - - {% if content is defined and content.contentInfo.mainLocationId %} - - {% endif %} - - {% block stylesheets %} - {{ encore_entry_link_tags('app') }} - {% endblock %} - - -{% block content %} -{% endblock %} - -{% block javascripts %} - {{ encore_entry_script_tags('app') }} -{% endblock %} - - diff --git a/code_samples/tutorials/page_tutorial_starting_point/templates/full/article.html.twig b/code_samples/tutorials/page_tutorial_starting_point/templates/full/article.html.twig deleted file mode 100644 index 1d25b67f084..00000000000 --- a/code_samples/tutorials/page_tutorial_starting_point/templates/full/article.html.twig +++ /dev/null @@ -1,23 +0,0 @@ -{% extends 'pagelayout.html.twig' %} - -{% block content %} -

    {{ ibexa_content_name(content) }}

    -
    -
    - {{ ibexa_render_field(content, 'image', { - 'parameters': { - 'alias': 'article_full', - 'class': 'img-responsive' - } - }) }} -
    -
    -
    -
    - {{ ibexa_render_field(content, 'intro') }} -
    -
    - {{ ibexa_render_field(content, 'body') }} -
    -
    -{% endblock %} \ No newline at end of file diff --git a/code_samples/tutorials/page_tutorial_starting_point/templates/full/dog_breed.html.twig b/code_samples/tutorials/page_tutorial_starting_point/templates/full/dog_breed.html.twig deleted file mode 100644 index b517bac42e9..00000000000 --- a/code_samples/tutorials/page_tutorial_starting_point/templates/full/dog_breed.html.twig +++ /dev/null @@ -1,17 +0,0 @@ -{% extends 'pagelayout.html.twig' %} - -{% block content %} -
    -

    {{ ibexa_content_name(content) }}

    -
    - {{ ibexa_render_field(content, 'photo', { - 'parameters': { - 'alias': 'dog_breed_full' - } - }) }} -
    -
    -

    {{ ibexa_render_field(content, 'full_description') }}

    -
    -
    -{% endblock %} diff --git a/code_samples/tutorials/page_tutorial_starting_point/templates/full/folder.html.twig b/code_samples/tutorials/page_tutorial_starting_point/templates/full/folder.html.twig deleted file mode 100644 index ad0a1b59005..00000000000 --- a/code_samples/tutorials/page_tutorial_starting_point/templates/full/folder.html.twig +++ /dev/null @@ -1,16 +0,0 @@ -{% extends 'pagelayout.html.twig' %} - -{% block content %} -
    -

    {{ ibexa_content_name(content) }}

    -
    - {% for item in items.searchHits %} -
    - {{ ibexa_content_name(item.valueObject.contentInfo) }} -
    - {% endfor %} -
    -
    -{% endblock %} \ No newline at end of file diff --git a/code_samples/tutorials/page_tutorial_starting_point/templates/full/tip.html.twig b/code_samples/tutorials/page_tutorial_starting_point/templates/full/tip.html.twig deleted file mode 100644 index 92c656bc06b..00000000000 --- a/code_samples/tutorials/page_tutorial_starting_point/templates/full/tip.html.twig +++ /dev/null @@ -1,14 +0,0 @@ -{% extends 'pagelayout.html.twig' %} - -{% block content %} -
    -
    -

    {{ ibexa_content_name(content) }}

    - {{ ibexa_render_field( content, 'body', { - 'attr': { - 'class': 'tip-text-full' - } - }) }} -
    -
    -{% endblock %} \ No newline at end of file diff --git a/code_samples/tutorials/page_tutorial_starting_point/templates/pagelayout.html.twig b/code_samples/tutorials/page_tutorial_starting_point/templates/pagelayout.html.twig deleted file mode 100644 index 25fec1b429c..00000000000 --- a/code_samples/tutorials/page_tutorial_starting_point/templates/pagelayout.html.twig +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - {{ encore_entry_link_tags('tutorial') }} - - {% if content is defined %} - {% set title = ibexa_content_name(content) %} - {% endif %} - {{ title|default('Home'|trans) }} - {{ "It's a Dog's World!"|trans }} - - -
    -
    -
    - -
    -
    -
    -
    - -
    - {% block content %}{% endblock %} -
    -
    - - - - diff --git a/code_samples/tutorials/page_tutorial_starting_point/templates/pagelayout_menu.html.twig b/code_samples/tutorials/page_tutorial_starting_point/templates/pagelayout_menu.html.twig deleted file mode 100644 index 8b49cf21fd2..00000000000 --- a/code_samples/tutorials/page_tutorial_starting_point/templates/pagelayout_menu.html.twig +++ /dev/null @@ -1,5 +0,0 @@ -{% if menuItems is defined and menuItems is not empty %} - {% for item in menuItems %} -
  • {{ ibexa_content_name(item.valueObject.contentInfo) }}
  • - {% endfor %} -{% endif %} diff --git a/code_samples/user_management/oauth_google/templates/themes/admin/account/login/oauth2_login.html.twig b/code_samples/user_management/oauth_google/templates/themes/admin/account/login/oauth2_login.html.twig deleted file mode 100644 index 9ce4972e5c4..00000000000 --- a/code_samples/user_management/oauth_google/templates/themes/admin/account/login/oauth2_login.html.twig +++ /dev/null @@ -1,10 +0,0 @@ -
    -
    -

    or

    - -
    -
    diff --git a/composer.json b/composer.json index 49af0edf3f2..4cc0c3b9bce 100644 --- a/composer.json +++ b/composer.json @@ -1,8 +1,8 @@ { "name": "ibexa/documentation-developer", - "description": "Ibexa DXP developer documentation as Markdown files, for offline reading and AI coding assistants working inside your project.", + "description": "Cohesivo by Ibexa developer documentation as Markdown files, for offline reading and AI coding assistants working inside your project.", "type": "library", - "keywords": ["ibexa", "ibexa-dxp", "documentation", "markdown", "llm", "ai", "agents"], + "keywords": ["ibexa", "cohesivo", "documentation", "markdown", "llm", "ai", "agents"], "license": "GNU General Public License v2.0", "autoload-dev": { "psr-4": { diff --git a/docs/administration/back_office/back_office_configuration.md b/docs/administration/back_office/back_office_configuration.md index 352c12a65d7..230646368c1 100644 --- a/docs/administration/back_office/back_office_configuration.md +++ b/docs/administration/back_office/back_office_configuration.md @@ -49,12 +49,6 @@ The limit applies only to the UI of the back office and disables the "Copy subtr The default value is `100`. You can set it to `-1` for no limit, or to `0` to completely disable copying subtrees. -To copy a subtree regardless of the limit, use the following console command: - -``` bash -php bin/console ibexa:copy-subtree -``` - ### Query subtree limit When working with large content trees, counting child items or calculating subtree sizes can cause significant performance degradation due to unbounded database queries. diff --git a/docs/administration/back_office/configure_product_tour.md b/docs/administration/back_office/configure_product_tour.md index 7ad6f1626c3..b12806b3abc 100644 --- a/docs/administration/back_office/configure_product_tour.md +++ b/docs/administration/back_office/configure_product_tour.md @@ -21,7 +21,7 @@ You can configure the product tour scenarios to adapt it to your project needs, Product tour scenarios are configured with YAML configuration files. Configuration is SiteAccess-aware, allowing you to create separate onboarding experiences for different back offices in [multisite setups](multisite.md). -Use the default provided configuration, available in `config/packages/ibexa_integrated_help_tours.yaml`, as a starting point that you can adjust to your needs. +Use the default provided configuration as a starting point that you can adjust to your needs. ## Configuration structure @@ -264,28 +264,6 @@ Embed video content by using the [`video` HTML element](https://developer.mozill [[= include_file('code_samples/back_office/product_tour/config/general_scenario.yaml', 26, 30) =]] ``` -### Custom Twig template block - -For advanced content, use custom Twig templates that allows you to fully control the styling of the block: - -```yaml -[[= include_file('code_samples/back_office/product_tour/config/general_scenario.yaml', 37, 40) =]] -``` - -Create the dedicated template, for example in `templates/custom_template.html.twig`. - -``` html+twig -{% trans_default_domain 'app' %} - -{{ 'custom_step_description'|trans }} -``` - -and provide the required translations in `translations/app.en.yaml`: - -``` yaml -custom_step_description: "This is a description coming from a custom template." -``` - ## Configuration examples ### Example 1: General welcome tour diff --git a/docs/administration/back_office/subitems_list.md b/docs/administration/back_office/subitems_list.md index 6d3a845cde4..c2dc1da11ad 100644 --- a/docs/administration/back_office/subitems_list.md +++ b/docs/administration/back_office/subitems_list.md @@ -74,8 +74,6 @@ ibexaConfigManager.add({ }); ``` -Complete the task by running `composer run post-install-cmd`. - ## Use sub-items list !!! caution diff --git a/docs/administration/dashboard/configure_default_dashboard.md b/docs/administration/dashboard/configure_default_dashboard.md index a5b97678ae8..6c048e4abaa 100644 --- a/docs/administration/dashboard/configure_default_dashboard.md +++ b/docs/administration/dashboard/configure_default_dashboard.md @@ -11,7 +11,6 @@ saas_review_note: >- You can configure default dashboard under the `ibexa.system..admin_group` [configuration key](configuration.md#configuration-files). -Create `ibexa_dashboard.yaml` file in the `config/packages/` directory. The following example configuration defines default dashboard: ``` yaml diff --git a/docs/ai/ai_actions/configure_ai_actions.md b/docs/ai/ai_actions/configure_ai_actions.md index 379389b8da6..3797b2f98c8 100644 --- a/docs/ai/ai_actions/configure_ai_actions.md +++ b/docs/ai/ai_actions/configure_ai_actions.md @@ -58,7 +58,7 @@ Provide the API key in your instance's Anthropic connector settings. By default, when reaching out for responses, the Anthropic connector uses the [Claude Sonnet 4](https://platform.claude.com/docs/en/about-claude/models/overview) model. Users can override this setting at runtime when they [edit or create an AI action]([[= user_doc =]]/ai_actions/work_with_ai_actions/#edit-existing-ai-actions). You can also change the default values globally. -To do it, in `config/packages` folder, create a YAML file similar to this example: +To do it, add configuration similar to this example: ```yaml ibexa_connector_anthropic: @@ -141,7 +141,7 @@ Provide the API key in your instance's Google Gemini connector settings. By default, when reaching out for responses, the Gemini connector uses the Gemini Pro [model](https://ai.google.dev/gemini-api/docs/models) for text refinement and Gemini Flash model for alternative text generation. Users can override this setting at runtime when they [edit or create an AI action]([[= user_doc =]]/ai_actions/work_with_ai_actions/#edit-existing-ai-actions). You can also change the default values globally. -To do it, in `config/packages` folder, create a YAML file similar to this example: +To do it, add configuration similar to this example: ```yaml [[= include_file('code_samples/ai_actions/config/packages/ibexa_connector_gemini.yaml') =]] @@ -200,40 +200,6 @@ Copy the token code that appears on the tokens list, next to the label. Provide the token that you got from [[= product_name_connect =]] and the team ID in your instance's [[= product_name_connect =]] integration settings. -### Initiate integration - -Initiate the models provided by the handler by issuing the following command: - -```bash -php bin/console ibexa:connect:init-connect-ai -``` - -For example: - -```bash -php bin/console ibexa:connect:init-connect-ai 2 en connect-image-to-text connect-text-to-text -``` - -!!! note "Support for multiple [[= product_name_connect =]] languages" - - The [`language` attribute](https://developers.make.com/api-documentation/api-reference/templates#post-templates) determines the language in which template details such as module names will be displayed in [[= product_name_connect =]]'s UI. - -Then, create the `Ibexa AI handler` custom property in [[= product_name_connect =]] to store the list of available action handlers for this integration. -You can do it by running the following command: - -``` bash -php bin/console ibexa:connect:init-custom-property-structures -``` - -For example: - -``` bash -php bin/console ibexa:connect:init-custom-property-structures 4 connect-image-to-text connect-text-to-text -``` - -The `Ibexa AI handler` property attaches to a scenario to store information about the action handler associated with it. -When creating a new [[= product_name_connect =]]-based AI action, the back office of [[= product_name =]] shows only the existing scenarios that work with selected action handler. - ### Customize templates Return to the [[= product_name_connect =]] dashboard and modify the **Template for connect...handler** [templates]([[= connect_doc =]]/scenarios/scenario_templates/) by defining the logic needed to process the data. diff --git a/docs/ai/mcp/mcp_config.md b/docs/ai/mcp/mcp_config.md index 48695395825..9f6b0d7d79c 100644 --- a/docs/ai/mcp/mcp_config.md +++ b/docs/ai/mcp/mcp_config.md @@ -26,12 +26,12 @@ You have to create your own MCP servers by providing [their configuration](#mcp- AI agents use JWT authentication against [[= product_name =]]'s MCP servers. -In `config/packages/lexik_jwt_authentication.yaml`, enable the `authorization_header` token extractor to allow the use of JWT token bearer in `Authorization` header. +The `authorization_header` token extractor must be enabled, so that a JWT token bearer can be sent in the `Authorization` header. -In `config/packages/security.yaml`, make the following changes: +Two firewalls are involved: -- Uncomment the `ibexa_jwt_rest` firewall to enable requesting JWT tokens through the REST API. -- Add the `ibexa_jwt_mcp` firewall to allow the use of JWT authentication against MCP servers. +- `ibexa_jwt_rest` enables requesting JWT tokens through the REST API. +- `ibexa_jwt_mcp` allows the use of JWT authentication against MCP servers. ``` yaml hl_lines="4-9" [[= include_code('code_samples/mcp/config/packages/mcp.security.yaml') =]] @@ -66,19 +66,9 @@ You define MCP servers within a repository configuration and then assign those s ``` Servers are automatically registered as services with an ID following the pattern `ibexa.mcp.server..`. -You can list all defined servers by running the following command: - -```bash -php bin/console debug:container ibexa.mcp.server -``` Routes are built automatically from MCP server `path` configs. Those routes are identified as `ibexa.mcp.`. -You can list them by running the following command: - -```bash -php bin/console debug:router --siteaccess= ibexa.mcp` -``` ### MCP server options @@ -168,12 +158,6 @@ For example, you could set up a dedicated Redis/Valkey: For a production cluster, it's recommended to use a Redis/Valkey cache pool so the cache can be shared by all nodes. -Clear the cache pool after making changes: - -```bash -php bin/console cache:pool:clear cache.redis.mcp -``` - !!! tip Use `ibexa.cache_pool` as service identifier to have the default cache service. diff --git a/docs/ai/mcp/mcp_usage.md b/docs/ai/mcp/mcp_usage.md index 06f9eda6189..4b32f7fd7e8 100644 --- a/docs/ai/mcp/mcp_usage.md +++ b/docs/ai/mcp/mcp_usage.md @@ -105,7 +105,7 @@ The server: For development, you can set `discovery_cache: ~` to avoid clearing the cache after each change. This example uses the filesystem storage to illustrate that you have to clear the cache pool to refresh the available capabilities, exactly as when deploying into production. -In a new `config/packages/mcp.yaml` file, define a new MCP server for the `default` repository and assign it to all SiteAccesses: +Define a new MCP server for the `default` repository and assign it to all SiteAccesses: ``` yaml [[= include_code('code_samples/mcp/config/packages/mcp.yaml') =]] @@ -113,17 +113,7 @@ In a new `config/packages/mcp.yaml` file, define a new MCP server for the `defau Adapt the `allowed_hosts` to your case, for example, if you want to use a domain name instead of the equivalent `127.0.0.1` address. -The server is automatically registered as a service with the ID `ibexa.mcp.server.default.example`: - -```bash -php bin/console debug:container ibexa.mcp.server.default.example -``` - -An `ibexa.mcp.example` route is now available: - -```bash -php bin/console debug:router ibexa.mcp.example -``` +The server is automatically registered as a service with the ID `ibexa.mcp.server.default.example`, and an `ibexa.mcp.example` route becomes available. ### Perform `curl` test diff --git a/docs/api/rest_api/rest_api_usage/rest_api_usage.md b/docs/api/rest_api/rest_api_usage/rest_api_usage.md index 00203a72dc8..749eba6bcd8 100644 --- a/docs/api/rest_api/rest_api_usage/rest_api_usage.md +++ b/docs/api/rest_api/rest_api_usage/rest_api_usage.md @@ -20,13 +20,6 @@ You can download the OpenAPI specification in: - [YAML format](/api/rest_api/rest_api_reference/openapi.yaml) - [JSON format](/api/rest_api/rest_api_reference/openapi.json) -You can also generate one for your project by running one of the commands below: - -``` bash -php bin/console ibexa:openapi --output=openapi.json # JSON output -php bin/console ibexa:openapi --yaml --output=openapi.yaml # YAML output -``` - Use the specification file with [available OpenAPI tools](https://tools.openapis.org/) to work faster with the API, for example, by generating libraries and clients for the API. ## URIs diff --git a/docs/api/rest_api/rest_api_usage/rest_responses.md b/docs/api/rest_api/rest_api_usage/rest_responses.md index 4f206392bba..d0b601cb3da 100644 --- a/docs/api/rest_api/rest_api_usage/rest_responses.md +++ b/docs/api/rest_api/rest_api_usage/rest_responses.md @@ -147,11 +147,9 @@ The CORS bundle adds an `Access-Control-Allow-Origin` header to the response. #### Configuration -To enable CORS, add regular expression for an allowed domain using the `.env` variable `CORS_ALLOW_ORIGIN`. +Allowed origins are controlled by the `CORS_ALLOW_ORIGIN` setting, which takes a regular expression matching the domains that may call the API, for example `^https?://example\.com`. -For example, to allow the [JS test](testing_rest_api.md#js) to be executed alongside this page, you could add the following to an `.env` file (like the `.env.local`): `CORS_ALLOW_ORIGIN=^https?://doc.ibexa.co`. - -To add several domains, filter on URIs, or change the default (like not allowing all the methods), refer to [NelmioCorsBundle Configuration Documentation](https://symfony.com/bundles/NelmioCorsBundle/current/index.html#configuration) to learn how to edit `config/packages/nelmio_cors.yaml`. +For the full set of options, such as several domains, filtering on URIs, or restricting the allowed methods, see the [NelmioCorsBundle configuration documentation](https://symfony.com/bundles/NelmioCorsBundle/current/index.html#configuration). ## Response body diff --git a/docs/content_management/field_types/field_type_reference/imageassetfield.md b/docs/content_management/field_types/field_type_reference/imageassetfield.md index 3404833e350..cee4ac7216e 100644 --- a/docs/content_management/field_types/field_type_reference/imageassetfield.md +++ b/docs/content_management/field_types/field_type_reference/imageassetfield.md @@ -58,22 +58,6 @@ ibexa: parent_location_id: 106 ``` -## Customizing ImageAsset field type rendering - -Internally, the Image Asset Type is rendered via subrequest (similar to other relation types). -Rendering customization is possible by configuring view type `asset_image`: - -```yaml -ibexa: - system: - default: - content_view: - asset_image: - default: - template: ::custom_image_asset_template.html.twig - match: [] -``` - ## Generating image variation from the Image Asset Thanks to the `Ibexa\Bundle\Core\Imagine\ImageAsset` decorator you can work with `Ibexa\Contracts\Core\Variation` in the same way as with [Image field type](imagefield.md). diff --git a/docs/content_management/field_types/field_type_reference/matrixfield.md b/docs/content_management/field_types/field_type_reference/matrixfield.md index 673b4438b27..e9b18562bc6 100644 --- a/docs/content_management/field_types/field_type_reference/matrixfield.md +++ b/docs/content_management/field_types/field_type_reference/matrixfield.md @@ -33,5 +33,3 @@ A row is considered empty if it contains only empty cells (or cells containing o Empty rows are removed. If, after removing empty rows, the number of rows doesn't fulfill the configured `Minimum number of rows`, the field doesn't validate. - -For example, the following input doesn't validate if `Minimum number of rows` is set to 3, because the second row is empty: diff --git a/docs/content_management/field_types/field_type_reference/pagefield.md b/docs/content_management/field_types/field_type_reference/pagefield.md index d39278c5971..cb753039d28 100644 --- a/docs/content_management/field_types/field_type_reference/pagefield.md +++ b/docs/content_management/field_types/field_type_reference/pagefield.md @@ -14,51 +14,3 @@ Page field type is only used in the page content type that is included in [[= pr If you create content type with both `ibexa_landing_page` and `ibexa_user` field types, you aren't redirected to Page Builder after selecting `Edit` or `Create`. This is caused by `ibexa_user` field type which requires separate handling. You're redirected to the standard back office edit or create mode. - -## Layout and zones - -Layout defines how a page is divided into zones. - -The placement of zones is defined in a template which is a part of the layout configuration. -You can modify the template to define your own zone layout. - -## Rendering pages - -Page rendering takes place while editing or viewing. - -When rendering a page, its zones are passed to the layout as a `zones` array with a `blocks` array each. -You can access them using twig (for example, `{{ zones[0].id }}` ). - -Each div that's a zone should have the `data-ibexa-zone-id` attribute with zone ID as a value for a zone container. - -To render a block inside the layout, use the Twig [`render_esi()`]([[= symfony_doc =]]/reference/twig_reference.html#render-esi) function to call `Ibexa\\Bundle\\FieldTypePage\\Controller\\BlockController::renderAction`. - -The `renderAction` has the following parameters: - -| Parameter | Description | -|----------------|----------------------------------------------------------------------------------| -| `locationId` | ID of the location of the content item which can be accessed by `contentInfo.id` | -| `blockId` | ID of the block which you want to render. | -| `versionNo` | Version number of the content item to render. | -| `languageCode` | Language code of the content item to render. | - -If your block needs to be dependent on query parameters like "page" and you already configured your custom block with a [`cacheable_query_params configuration`](page_blocks.md#block-configuration), pass `ibexa_append_cacheable_query_params(block)` as the third argument to the [`controller()` Twig function]([[= symfony_doc =]]/reference/twig_reference.html#controller) so that the HTTP cache can vary based on those query parameters. - -In a fresh installation, the feature is only used by the back office's [Dashboard blocks]([[= user_doc =]]/getting_started/dashboard/dashboard_block_reference/): "My content" and "Review queue". - -Example usage: - -``` html+twig -{{ render_esi(controller('Ibexa\\Bundle\\FieldTypePage\\Controller\\BlockController::renderAction', { - 'locationId': locationId, - 'blockId': block.id, - 'versionNo': versionInfo.versionNo, - 'languageCode': field.languageCode -}, ibexa_append_cacheable_query_params(block))) }} -``` - -As a whole a sample layout could look as follows: - -``` html+twig -[[= include_file('code_samples/page/pagefield_layout.html.twig') =]] -``` diff --git a/docs/content_management/forms/work_with_forms.md b/docs/content_management/forms/work_with_forms.md index 0198a37ab6d..fb28a750e5b 100644 --- a/docs/content_management/forms/work_with_forms.md +++ b/docs/content_management/forms/work_with_forms.md @@ -16,7 +16,7 @@ The Captcha Form field is based on [Gregwar/CaptchaBundle](https://github.com/Gr ![Captcha field](extending_form_builder_captcha_default.png) -You can customize the field by adding configuration to `config/packages/gregwar_captcha.yaml` under `gregwar_captcha`: +You can customize the field by adding configuration under the `gregwar_captcha` key: ``` yaml gregwar_captcha: diff --git a/docs/content_management/images/add_image_asset_from_dam.md b/docs/content_management/images/add_image_asset_from_dam.md index 320e50fea9a..714eb86c3d2 100644 --- a/docs/content_management/images/add_image_asset_from_dam.md +++ b/docs/content_management/images/add_image_asset_from_dam.md @@ -28,34 +28,7 @@ The configuration for each connector depends on the requirements of the specific To add Image Assets directly in the Page Builder, you can do it by using the Embed block. The example below shows how to add images from [Unsplash](https://unsplash.com/). -First, in `templates/themes/standard/embed/`, create a custom template `dam.html.twig`: - -``` html+twig -{% set dam_image = ibexa_field_value(content, 'image') %} -{% if dam_image.source is not null %} - {% set transformation = ibexa_dam_image_transformation(dam_image.source, '770px') %} - {% set asset = ibexa_dam_asset(dam_image.destinationContentId, dam_image.source, transformation) %} - {% set image_uri = asset.assetUri.path %} - -{% endif %} -``` - -The `770px` parameter in the template above is used to render the DAM image. It's the `unsplash` specific image variation and must be defined separately. - -Next, in `config/packages/ibexa.yaml`, set the `dam.html.twig` template for the `embed` view type that is matched for the content type, which you created for DAM images. - -``` yaml -ibexa: - system: - site: - content_view: - embed: - image_dam: - template: '@ibexadesign/embed/dam.html.twig' - match: - Identifier\ContentType: -``` - +Every image variation that the connector may request must be declared for the connector. In your [configuration file](configuration.md#configuration-files) add the following configuration: ``` yaml @@ -71,6 +44,7 @@ dam_unsplash: ``` You can customize the parameters according to your needs. +The `770px` variation declared above is an `unsplash`-specific image variation. For more information about supported parameters, see the [Unsplash documentation](https://unsplash.com/documentation#dynamically-resizable-images). @@ -79,4 +53,4 @@ In the **Content** group, create a content type for DAM images, which includes t Now, when you use the Embed block in the Page Builder, you should see a DAM Image. -For more information about block customization (defined templates, variations), see [Page blocks](../pages/page_blocks.md). +For more information about block configuration, see [Page blocks](../pages/page_blocks.md). diff --git a/docs/content_management/images/fastly_io.md b/docs/content_management/images/fastly_io.md index fc29b718978..1784641f9fb 100644 --- a/docs/content_management/images/fastly_io.md +++ b/docs/content_management/images/fastly_io.md @@ -69,13 +69,6 @@ ibexa: variation_handler_identifier: 'fastly' ``` -You can also use environmental variables to configure a specific handler for a SiteAccess. -See the example below to configure it with the `.env` file: - -```bash -IBEXA_VARIATION_HANDLER_IDENTIFIER="fastly" -``` - ## Image configuration When you define image variation keys for Fastly IO, keep in mind diff --git a/docs/content_management/pages/ibexa_connect_scenario_block.md b/docs/content_management/pages/ibexa_connect_scenario_block.md index 4252c3fb3de..4deebdca2ba 100644 --- a/docs/content_management/pages/ibexa_connect_scenario_block.md +++ b/docs/content_management/pages/ibexa_connect_scenario_block.md @@ -7,58 +7,15 @@ description: Work with Ibexa Connect scenario block that retrieves and displays [[= product_name_connect =]] scenario block retrieves and displays data from an [[= product_name_connect =]] webhook. Scenario block is a regular [Page block](page_blocks.md) and can be configured on field definition level as any other block. -!!! caution +## Configure [[= product_name_connect =]] scenario block in Page Builder - When setting up your instance, ensure you have profiler enabled. - -## Scenario block configuration - -In the following example you can learn how to configure [[= product_name_connect =]] scenario block with two available templates: `company_customers` and `external_clients`. - -### Block templates - -First, in `config/packages/ibexa_connect.yaml` add the following configuration: - -``` yaml -[[= include_file('code_samples/page/ibexa_connect_scenario_block/config/packages/ibexa_connect.yaml') =]] -``` - -For each block template you can set up additional settings, for example, label, type or parameters. - -### Define page layouts - -To preview your block in the frontend, define page layouts in `config/packages/views.yaml` directory. This file defines, which layouts are used to render Page Builder. - -```yaml -[[= include_file('code_samples/page/ibexa_connect_scenario_block/config/packages/views.yaml') =]] -``` - -You also need to create `pagelayout.html.twig` file in `templates` folder: - -```html+twig -[[= include_file('code_samples/page/ibexa_connect_scenario_block/templates/pagelayout.html.twig') =]] -``` - -Then, in `templates/blocks` directory under `default.html.twig`, provide your block configuration: - -```html+twig -[[= include_file('code_samples/page/ibexa_connect_scenario_block/templates/blocks/default.html.twig') =]] -``` - -In the following example, the configuration of the block is non-complex - block is only used to display the content transferred from an [[= product_name_connect =]] webhook. -At this point the [[= product_name_connect =]] scenario block is ready to be used in Page Builder. - -### Configure [[= product_name_connect =]] scenario block in Page Builder - -Now, you can configure [[= product_name_connect =]] scenario block in Page Builder. -To do it, in your Page add [[= product_name_connect =]] block by dragging it from the menu to a drop zone and enter block settings. +To use the [[= product_name_connect =]] scenario block, in your Page add the [[= product_name_connect =]] block by dragging it from the menu to a drop zone and enter block settings. - In the **Basic** tab in **Webhook link** field, provide a link to an [[= product_name_connect =]] webhook, for example, `https://connect.ibexa.co/3/scenarios/688/edit`: ![Ibexa Connect Basic tab](ibexa_connect_basic_tab.png) -- In the **Design** tab, choose one of declared templates, in the following example, `company_customers` or `External clients`. -To do it, extend drop-down list in the **View** field and choose one of the available options. +- In the **Design** tab, extend the drop-down list in the **View** field and choose one of the [views configured for the block](page_blocks.md#block-templates). ![Ibexa Connect Design tab](ibexa_connect_design_tab.png) diff --git a/docs/content_management/pages/page_block_attributes.md b/docs/content_management/pages/page_block_attributes.md index 7f9fa7b3747..44e846b1332 100644 --- a/docs/content_management/pages/page_block_attributes.md +++ b/docs/content_management/pages/page_block_attributes.md @@ -7,8 +7,6 @@ month_change: false A block has attributes that the editor fills in when adding the block to a Page. -[[% include 'snippets/page_block_cache_clear.md' %]] - Each block can have the following properties: | Attribute | Description | diff --git a/docs/content_management/pages/page_blocks.md b/docs/content_management/pages/page_blocks.md index aa7c9920e85..430329f7cb8 100644 --- a/docs/content_management/pages/page_blocks.md +++ b/docs/content_management/pages/page_blocks.md @@ -10,8 +10,6 @@ Keep in mind that Page block configuration isn't SiteAccess-aware. [[= product_name =]] ships with a number of page blocks. For a list of all page blocks that are available out-of-the-box, see [Page block reference]([[= user_doc =]]/content_management/block_reference/). -[[% include 'snippets/page_block_cache_clear.md' %]] - ## Block configuration Each configured block has an identifier and the following settings: @@ -23,14 +21,13 @@ Each configured block has an identifier and the following settings: | `thumbnail` | Thumbnail used in the Page Builder **Page blocks** toolbox. | | `views` | Available [templates for the block](#block-templates). | | `visible` | (Optional) Toggles the block's visibility in the Page Builder **Page blocks** toolbox. Remove the block from the layout before you publish another version of the page. | -| `configuration_template` | (Optional) Template for the block settings modal. | | `attributes` | (Optional) List of [block attributes](page_block_attributes.md). | -| `cacheable_query_params` | (Optional) List of query parameters the block's ESI HTTP cache varies on.
    For example, if the block is paginated using `?page=ℕ` from the page URL, add `page` to this list.
    See the `ibexa_append_cacheable_query_params()` Twig function. | +| `cacheable_query_params` | (Optional) List of query parameters the block's ESI HTTP cache varies on.
    For example, if the block is paginated using `?page=ℕ` from the page URL, add `page` to this list. | For example: ``` yaml -[[= include_file('code_samples/page/custom_page_block/config/packages/page_blocks.yaml', 0, 12) =]][[= include_file('code_samples/page/custom_page_block/config/packages/page_blocks.yaml', 16, 17) =]]# ... +[[= include_file('code_samples/page/custom_page_block/config/packages/page_blocks.yaml', 0, 6) =]][[= include_file('code_samples/page/custom_page_block/config/packages/page_blocks.yaml', 7, 12) =]][[= include_file('code_samples/page/custom_page_block/config/packages/page_blocks.yaml', 16, 17) =]]# ... ``` ### Block name and help text @@ -91,23 +88,3 @@ The highest number shows first on the list. Default views have a `priority` of -255. It's good practice to keep the value between -255 and 255. - -### Block modal template - -The template for the configuration modal of built-in Page blocks is contained in -`vendor/ibexa/page-builder/src/bundle/Resources/views/page_builder/block/config.html.twig`. - -You can override it by using the `configuration_template` [configuration key](configuration.md#configuration-files): - -``` yaml -[[= include_file('code_samples/page/custom_page_block/config/packages/page_blocks.yaml', 0, 7) =]] -``` - -The template can extend the default `config.html.twig` and modify its blocks. -Blocks `basic_tab_content` and `design_tab_content` correspond to the **Basic** and **Design** tabs in the modal. - -The following example wraps all form fields for block attributes in an ordered list: - -``` html+twig -[[= include_file('code_samples/page/custom_page_block/templates/themes/standard/blocks/event/config.html.twig') =]] -``` diff --git a/docs/content_management/pages/react_app_block.md b/docs/content_management/pages/react_app_block.md index e342561a98e..55d72f5c0f9 100644 --- a/docs/content_management/pages/react_app_block.md +++ b/docs/content_management/pages/react_app_block.md @@ -8,12 +8,6 @@ React App block allows an editor to embed a preconfigured React application into It's configured in YAML files, under the `ibexa_fieldtype_page` key. Page block configuration isn't SiteAccess-aware. -Another element of React App Block is `\Ibexa\FieldTypePage\FieldType\Page\Block\Event\Listener\ReactBlock` Listener which adds component and props variables. - -It's common to all the blocks. - -[[% include 'snippets/page_block_cache_clear.md' %]] - ## React App Block configuration React App blocks are regular [Page blocks](page_blocks.md) and can be configured on field definition level as any other block. @@ -29,7 +23,7 @@ Each configured React app block has an identifier and the following settings: | `name` | Name of the block used in the Page Builder interface. Also accepts a [`help` key](page_blocks.md#block-name-and-help-text) that adds a helper text under the **Name** field in the block configuration form. | | `category` | Category in the Page Builder **Page blocks** toolbox that the block is shown in. | | `thumbnail` | Thumbnail used in the Page Builder **Page blocks** toolbox. | -| `component` | React App Component name used in `assets/page-builder/react/blocks` directory. | +| `component` | Name of the React app component that this block is bound to. | | `visible` | (Optional) Toggles the block's visibility in the Page Builder **Page blocks** toolbox. Remove the block from the layout before you publish another version of the page. | | `attributes` | (Optional) List of [block attributes](page_block_attributes.md). | @@ -59,46 +53,3 @@ attributes: options: ... ``` - -Apps that are registered this way must be configured and referenced in the semantic configuration to be registered as blocks. - -Parameters passed as props must be converted so that they can be used as the configured type in the app. - -## Create React App block - -In the following example, you learn how to create the `Calculator` React App block [configured in the previous section's example](#react-app-block-configuration). - -### Configure React App Block - -First, install React. -Run `yarn add react` command. - -Next, create a .jsx file which describes your component. -You can place it in any location. - -In the following example, create `Calculator.jsx` file in `assets/page-builder/components/` directory: - -``` js -[[= include_file('code_samples/page/react_app_block/assets/page-builder/components/Calculator.jsx') =]] -``` - -Then, create a `Calculator.js` file in `assets/page-builder/react/blocks` directory. - -Files in this directory create a map of Components which then are imported to `react.blocks.js` file. -As a result, the components are rendered on the page. - -``` js -[[= include_file('code_samples/page/react_app_block/assets/page-builder/react/blocks/Calculator.js') =]] -``` - -Now, you should see new `Calculator` block in the Page Builder blocks list: - -![Calculator](calculator.png "Calculator - React App Block") - -Then, make sure that your Page layout template (like `templates/themes/standard/pagelayout.html.twig`) has the following Twig code in its `{% block javascripts %}`: - -``` twig -{% if encore_entry_exists('react-blocks-js') %} - {{ encore_entry_script_tags('react-blocks-js') }} -{% endif %} -``` diff --git a/docs/content_management/taxonomy/taxonomy.md b/docs/content_management/taxonomy/taxonomy.md index abd2aef3ffa..6ca15520309 100644 --- a/docs/content_management/taxonomy/taxonomy.md +++ b/docs/content_management/taxonomy/taxonomy.md @@ -20,7 +20,7 @@ Taxonomies (**Tags**) allow you to organize content to make it easy for your sit Taxonomies are classifications of logical relationships between content. In [[= product_name =]] you can create many taxonomies, each with many tags. The platform mechanism enables creating any entities with a tree structure and assign them to a content item. -Default tag configuration is available in `config/packages/ibexa_taxonomy.yaml` +The default tag configuration is as follows. The associated content type is `tag`. ``` yaml diff --git a/docs/content_management/user_generated_content.md b/docs/content_management/user_generated_content.md index a35612334e8..e69d232c76a 100644 --- a/docs/content_management/user_generated_content.md +++ b/docs/content_management/user_generated_content.md @@ -51,22 +51,3 @@ To edit an existing draft, use the `/content/edit/draft/` route, with the follow | `languageCode` | `string` | Language code of the version. Example: `eng-GB` | For example, `/content/edit/draft/1/5/eng-GB` enables you to edit draft 5 of content item 1 in English. - -## Content editing templates - -You can use custom templates for the content editing forms. - -Define the templates under the `ibexa.system..content_edit_view` [configuration key](configuration.md#configuration-files): - -``` yaml -ibexa: - system: - default: - content_edit_view: - full: - : - template: content/edit/content_edit.html.twig - match: true - params: - viewbaseLayout: '@ibexadesign/ui/layout.html.twig' -``` diff --git a/docs/content_management/workflow/workflow.md b/docs/content_management/workflow/workflow.md index 4cfe5eedc92..d87cc225925 100644 --- a/docs/content_management/workflow/workflow.md +++ b/docs/content_management/workflow/workflow.md @@ -116,28 +116,6 @@ You can disable the default workflow, for example, if your project doesn't use w Workflow event timeline displays workflow transitions. -You can also use it to render custom entries in the timeline, for example system alerts on workflows. - -### Custom entry type - -To add a custom entry type, create a custom class extending `Ibexa\Workflow\WorkflowTimeline\Value\AbstractEntry`. -Use an `Ibexa\Contracts\Workflow\Event\TimelineEvents::COLLECT_ENTRIES` event to add your entries to the timeline. - -### Custom templates - -To provide custom templates for new event timeline entries, use the following configuration: - -``` yaml -ibexa: - system: - default: - workflows_config: - timeline_entry_templates: - - { template: '@IbexaWorkflow/ibexa_workflow/timeline/entries.html.twig', priority: 10 } -``` - -The template has to provide a block named `ez_workflow_timeline_entry_{ENTRY_IDENTIFIER}`. - ## Permissions You can limit access to workflows at stage and transition level. diff --git a/docs/customer_management/cp_applications.md b/docs/customer_management/cp_applications.md index 5bee0809b21..41c25a86681 100644 --- a/docs/customer_management/cp_applications.md +++ b/docs/customer_management/cp_applications.md @@ -31,52 +31,25 @@ Below, you can find possible configurations for Customer Portal applications. ### Reasons for rejecting application -To change or add reasons for not accepting Corporate Portal application go to `vendor/ibexa/corporate-account/src/bundle/Resources/config/default_settings.yaml`. +The reasons offered when an application isn't accepted are listed under the SiteAccess-scoped `corporate_accounts.reasons` setting, separately for the `reject` and the `on_hold` outcome: ```yaml -parameters: - ibexa.site_access.config.default.corporate_accounts.reasons: - reject: [Malicious intent / Spam] - on_hold: [Verification in progress] +reject: [Malicious intent / Spam] +on_hold: [Verification in progress] ``` ### Timeout Registration form locks for 5 minutes after unsuccessful registration, if the user, for example, tried to use an email address that already exists in a Customer Portal clients database. -To change that duration, go to `config/packages/ibexa.yaml`. - -```yaml -framework: - rate_limiter: - corporate_account_application: - policy: 'fixed_window' - limit: 1 - interval: '5 minutes' - lock_factory: 'lock.corporate_account_application.factory' -``` +This duration is controlled by the `corporate_account_application` rate limiter. ## Customization of an approval process -In this procedure, you add a new status to the approval process of business account application. - -### Add new status - -First, under the `ibexa.system..corporate_accounts.application.states` add a `verify` status to the [configuration](configuration.md#configuration-files): +You can add a new status to the approval process of business account application. +To do it, under the `ibexa.system..corporate_accounts.application.states` add a `verify` status to the [configuration](configuration.md#configuration-files): ```yaml [[= include_file('code_samples/customer_portal/config/packages/customer_portal.yaml') =]] ``` -### Add form template - -To be able to see the changes you need to add a new template `templates/themes/admin/corporate_account/application/details.html.twig`. - -``` html+twig -[[= include_file('code_samples/customer_portal/templates/themes/admin/corporate_account/application/details.html.twig') =]] -``` - -It overrides the default view and adds a **Verify** button to the review view. -To check the progress, go to **Members** -> **Applications**. -Select one application from the list and inspect application review view for a new button. - -![Verify button](img/cp_new_status.png) +To check the progress, go to **Members** -> **Applications** and inspect the application review view. diff --git a/docs/customer_management/cp_configuration.md b/docs/customer_management/cp_configuration.md index 1d3b7266b81..a4df3dd1e2f 100644 --- a/docs/customer_management/cp_configuration.md +++ b/docs/customer_management/cp_configuration.md @@ -15,7 +15,7 @@ You can overwrite the default configuration of the Customer Portal to fit its ca ## `corporate` SiteAccess -The predefined `corporate` SiteAccess in `corporate_group` (configured in `config/packages/ibexa.yaml`) serves the Customer Portal. +The predefined `corporate` SiteAccess in `corporate_group` serves the Customer Portal. If you need a multisite setup with multiple Customer Portals, add any additional SiteAccesses to `corporate_group`. ## Customer identifier @@ -65,29 +65,13 @@ ibexa_corporate_account: ## Registration You can define what fields are required in the Customer Portal registration form. -To do so, [create and configure user registration form](create_user_registration_form.md). +To do so, see [Registration form field configuration](user_registration.md#registration-form-field-configuration). ## Address With the Address field type, you can customize address fields and configure them per country. To learn more, see [Address field type documentation](addressfield.md). -## Templates - -You can also define new templates for, among others: invitation email, reset password message and the information screens after any of the user's actions. - -```yaml -ibexa: - system: - site_group: - content_view: - full: - confirmation_page: - template: "@@ibexadesign/customer_portal/account/forgot_password/confirmation_page.html.twig" - match: - Identifier\ContentType: confirmation_page -``` - ## Order management Reviewing pending and past orders in Customer Portal requires that you configure all currencies that any of the customers may use under the `ibexa.system..product_catalog.currencies` key. diff --git a/docs/customer_management/cp_page_builder.md b/docs/customer_management/cp_page_builder.md index 81a8aa68072..0c6fb27b4f2 100644 --- a/docs/customer_management/cp_page_builder.md +++ b/docs/customer_management/cp_page_builder.md @@ -185,7 +185,7 @@ If members of the Customer group don't have sufficient permissions for any Custo #### Build-in portal mapping Now, you need to assign your custom portals to Customer groups. -Add portal mapping configuration in `config/services.yaml`: +Add portal mapping configuration: ```yaml hl_lines="3 4" parameters: @@ -204,11 +204,6 @@ There, you can specify which Customer Portals should be available to which Custo Portals are displayed to the Customer group in order specified in the configuration based on company member's permissions. -#### Custom portal mapping - -You can specify your own custom logic for redirecting members to a specific Customer Portal. -To do so, implement `\Ibexa\Contracts\CorporateAccount\CustomerPortal\PickRule\CustomerPortalPickRule` and tag it with `ibexa.corporate_account.customer_portal.pick_rule`. - ### Multiple portals on single page You can allow company members to see multiple versions of Customer Portal on a single page by [combining SiteAccess matchers](siteaccess_matching.md#custom-matchers) with `Compound\LogicalAnd`: @@ -230,38 +225,3 @@ ibexa: ``` ![Multiple portals in one view](img/cp_2_page_view.png) - -## Change Customer Portal layout - -You can change Customer Portal layout by adding your custom template under `ibexa.system..page_layout`: - -```yaml hl_lines="5" -ibexa: - system: - custom_portal: - languages: [ eng-GB ] - page_layout: "@App/my_page_layout.html.twig" - content: - tree_root: - location_id: 12345 #location_id_of_customer_portals_root_folder - excluded_uri_prefixes: [ /media/, /images/ ] -``` - -To generate the Customer Portal menu you should use `customer_portal.menu.main` key: - -```html+twig hl_lines="4" -{% block side_column %} -
    - {% block left_sidebar %} - {% set main_menu = knp_menu_get('customer_portal.menu.main', [], {}) %} - {{ knp_menu_render(main_menu, { - depth: 1, - template: '@ibexadesign/customer_portal/menu.html.twig', - currentClass: 'active', - ancestorClass: 'active', - }) }} - {% endblock %} -
    -{% endblock %} -``` - diff --git a/docs/customer_management/create_user_registration_form.md b/docs/customer_management/create_user_registration_form.md deleted file mode 100644 index cafa82e7b80..00000000000 --- a/docs/customer_management/create_user_registration_form.md +++ /dev/null @@ -1,98 +0,0 @@ ---- -description: Customize the registration form for new users in your site front end. ---- - -# Create user registration form - -You can create a registration form for users to your website by creating a Twig template or editing the existing registration form in YAML file. -Follow the instructions below to create and customize templates for a registration form, and a registration confirmation page. - -First, make sure you [enabled user registration](permission_use_cases.md#register-users). - -## Configure existing form - -In your configuration, under `allowed_field_definitions_identifiers` [configuration key](configuration.md#configuration-files), specify the fields that should be part of your registration form. -You can also define what kind of user you want to create under `user_type_identifier`, for example, frontend user. -To learn more about available users, see [user types documentation](user_registration.md#user-types). - -``` yaml -ibexa: - system: - default: - user_registration: - user_type_identifier: customer - form: - allowed_field_definitions_identifiers: - - first_name - - last_name - - user_account -``` - -## Add a form template - -Add the following configuration under the `ibexa.system..user_registration` [configuration key](configuration.md#configuration-files): - -``` yaml -ibexa: - system: - default: - user_registration: - templates: - form: '@ibexadesign/user/registration_form.html.twig' - confirmation: '@ibexadesign/user/registration_confirmation.html.twig' -``` - -This defines which templates are used for rendering the registration form and confirmation page. - -In the `templates/themes//user/registration_form.html.twig` create the template for registration form. - -Example registration form: - -``` html+twig -{% extends no_layout is defined and no_layout == true ? view_base_layout : page_layout %} -{% block content %} -
    - {{ form_start(form) }} - - {% for fieldForm in form.fieldsData %} - {% set fieldIdentifier = fieldForm.vars.data.fieldDefinition.identifier %} -
    - {{ form_widget(fieldForm.value, { - 'contentData': form.vars.data - }) }} -
    - {%- do fieldForm.setRendered() -%} - {% endfor %} - -
    -
    - {{ form_widget(form.register, {'attr': { - 'class': 'btn btn-block btn-primary' - }}) }} -
    -
    - - {{ form_end(form) }} -
    -{% endblock %} -``` - -In the `templates/themes//user/registration_confirmation.html.twig`, create the template for confirmation form. - -Example confirmation form: - -``` html+twig -{% extends no_layout is defined and no_layout == true ? view_base_layout : page_layout %} -{% block content %} -

    Your account has been created

    -

    - Thank you for registering an account. You can now login. -

    -{% endblock %} -``` - -To add a link redirecting to the login form, in the page layout template, provide the following code: - -```html+twig -Register -``` diff --git a/docs/customer_management/customer_portal.md b/docs/customer_management/customer_portal.md index 715b3c919e1..b8553382c6b 100644 --- a/docs/customer_management/customer_portal.md +++ b/docs/customer_management/customer_portal.md @@ -17,5 +17,4 @@ With this feature, your customers can self-register, edit their organization inf "customer_management/cp_applications", "users/invitations", "customer_management/cp_page_builder", - "customer_management/create_user_registration_form", ], columns=3) =]] diff --git a/docs/multisite/languages/back_office_translations.md b/docs/multisite/languages/back_office_translations.md index f22a89c64cd..94e7899534a 100644 --- a/docs/multisite/languages/back_office_translations.md +++ b/docs/multisite/languages/back_office_translations.md @@ -46,4 +46,4 @@ If your browser language is set to French, the back office is displayed in Frenc Once you have language packages enabled, you can switch the language of the back office in the **User Settings** menu. Otherwise, the language is selected based on the browser language. -If you don't have a language defined in the browser, the language is selected based on `parameters.locale_fallback` in `config/packages/ibexa.yaml`. +If you don't have a language defined in the browser, the language is selected based on the `parameters.locale_fallback` setting. diff --git a/docs/multisite/languages/languages.md b/docs/multisite/languages/languages.md index 3e21eccbebd..7ff95fc5a09 100644 --- a/docs/multisite/languages/languages.md +++ b/docs/multisite/languages/languages.md @@ -30,13 +30,6 @@ However, even if work on a draft takes time and other translations are updated i The multilanguage system operates based on a global translation list that contains all languages available in the installation. Languages can be [added to this list from the **Admin** panel]([[= user_doc =]]/content_management/translate_content/) in the back office. -After adding a language be sure to dump all assets to the file system: - -```bash -yarn encore -# OR php bin/console ibexa:encore:compile -``` - **The new language must then be added to the [SiteAccess](multisite.md) configuration**. Once this is done, any user with proper permissions can create content item versions in these languages in the user interface. diff --git a/docs/multisite/multisite_configuration.md b/docs/multisite/multisite_configuration.md index 5740c68b0db..beb4633b50c 100644 --- a/docs/multisite/multisite_configuration.md +++ b/docs/multisite/multisite_configuration.md @@ -48,7 +48,7 @@ A SiteAccess can be part of several groups. SiteAccess configuration has always #### `admin` SiteAccess -The predefined `admin` SiteAccess in `admin_group` (configured in `config/packages/ibexa_admin_ui.yaml`) serves the back office. +The predefined `admin` SiteAccess in `admin_group` serves the back office. Don't remove this group. If you need a multisite setup with multiple back offices, add any additional administration SiteAccesses to `admin_group`. diff --git a/docs/multisite/set_up_translation_siteaccess.md b/docs/multisite/set_up_translation_siteaccess.md index fd04420405f..0d4f49b93e3 100644 --- a/docs/multisite/set_up_translation_siteaccess.md +++ b/docs/multisite/set_up_translation_siteaccess.md @@ -24,11 +24,6 @@ First, add a new language for the whole installation. 1. In the back office, go to **Admin** -> **Languages**. 1. Click **Create a new language** and provide the language name and code (examples below use French with `fre-FR`). -1. After creating the new language, refresh the assets by running: - -```bash -yarn encore -``` ## Configure SiteAccesses @@ -71,8 +66,6 @@ ibexa: With this configuration, the main English site displays content in English and ignores French content. The French site displays content in French, but also in English, if it doesn't exist in French. -Clear the cache by running: `php bin/console cache:clear`. - ## Set permissions By default, the Anonymous user role doesn't have permissions for new SiteAccesses. @@ -81,7 +74,6 @@ As a next step, allow Anonymous users to read content on the new SiteAccesses: 1. In the back office, go to **Admin** -> **Roles**. 1. Click the **Anonymous** role. 1. Edit the **Limitations** of the module `user`, select both SiteAccesses and click **Update**. -1. Clear the cache by running: `php bin/console cache:clear`. You can now start translating content. When you reload the site, access a translated content item through both SiteAccesses to see the difference, for example: `/` and `/fr/`. diff --git a/docs/multisite/site_factory/site_factory.md b/docs/multisite/site_factory/site_factory.md index 22cd8260418..88ac5a2ea00 100644 --- a/docs/multisite/site_factory/site_factory.md +++ b/docs/multisite/site_factory/site_factory.md @@ -23,13 +23,8 @@ It enables you to configure new sites without editing [YAML-based SiteAccess con A SiteAccess that you define for a site by following the [configuration](multisite_configuration.md) is always treated with higher priority than a SiteAccess created by using the Site Factory. For example, if you define a French site within a YAML file, and then create a site that uses the `fr` path in Site Factory, matchers ignore the second site. -Site Factory is disabled by default after installation. - -If you plan to use Site Factory, you need to enable and configure it. -To enable or disable Site Factory, follow: - -- [Enable Site Factory section](#enable-site-factory) -- [Disable Site Factory section](#disable-site-factory) +Site Factory is disabled by default. +If you plan to use Site Factory, you need to [enable and configure it](#enable-site-factory). ## Enable Site Factory @@ -111,57 +106,6 @@ You can check the results of your work in the back office by going to **Site man There, you should be able to add a new site and choose a design for it. -### Define domains - -To be able to see your site online, you need to define a domain for it. - -!!! caution "Define domain for production environment" - - These steps are for `dev` environment only. - If you want to define domains in production environment, you need to configure Apache or Nginx by yourself. - -In the `.env` file change line 2 to: `COMPOSE_FILE=doc/docker/base-dev.yml:doc/docker/multihost.yml` - -Take a look into the `doc/docker/multihost.yml` file. Here you can define domains. -To add a new domain, add it in `command:` and under frontend and backend aliases as shown in the example below: - -```yaml hl_lines="3 6 11" -services: - web: - command: /bin/bash -c "cd /var/www && cp -a doc/nginx/ibexa_params.d /etc/nginx && bin/vhost.sh --host-name=site.example.com --host-alias='admin.example.com test.example.com' --template-file=doc/nginx/vhost.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'" - networks: - frontend: - aliases: - - site.example.com - - admin.example.com - - test.example.com - backend: - aliases: - - site.example.com - - admin.example.com - - test.example.com -``` - -Next, you must define the domains in `etc/hosts`: - -`0.0.0.0 site.example.com admin.example.com test.example.com www.admin.example.com` - -Then, run `docker-compose up`: - -```bash -export COMPOSE_FILE="doc/docker/base-dev.yml:doc/docker/multihost.yml" -docker-compose up -``` - -Your sites should be now visible under: - -- `http://site.example.com:8080/` -- `http://admin.example.com:8080/` -- `http://localhost:8080/` -- `http://test.example.com:8080/` - -![Site Factory enabled](site_factory_site_list.png "Site Factory enabled") - ### Define site directory You can adjust the place where the directory of the new site is created (location with ID 2 by default). @@ -192,41 +136,3 @@ Set the below policies to allow users to: For full documentation on how permissions work and how to set them up, see [the permissions section](permissions.md). To learn how to use Site Factory, see [User Documentation]([[= user_doc =]]/website_organization/work_with_sites/). - -## Disable Site Factory - -Enabled Site Factory may cause following performance issues: - -- [ConfigResolver](dynamic_configuration.md#configresolver) looks for SiteAccesses in the database -- Site Factory matchers are connected to the database in search for new SiteAccesses - -You can disable Site Factory to boost ConfigResolver performance. -Keep in mind that with disabled Site Factory you're unable to add new sites or use existing ones. - -1\. In `config/packages/ibexa_site_factory.yaml` change `enabled` to `false`. - -2\. In `config/packages/ibexa.yaml` comment the `ibexa.siteaccess.match: '@Ibexa\SiteFactory\SiteAccessMatcher': ~` if it's uncommented. - -3\. Remove separate connection to database in `config/packages/doctrine.yaml`. - -``` yaml -doctrine: - dbal: - connections: - # ... - # This connection is dedicated for SiteFactory to avoid known issues - site_factory: -``` - -4\. Remove separate cache pool in `config/packages/cache.yaml`. - -``` yaml -framework: - cache: - # ... - pools: - # This pool should be used only by SiteFactory bundle - site_factory_pool: -``` - -The Site Factory should be disabled. diff --git a/docs/multisite/translations_management/configure_translations_management.md b/docs/multisite/translations_management/configure_translations_management.md index 2bd37a57e3a..3a9a876e5bf 100644 --- a/docs/multisite/translations_management/configure_translations_management.md +++ b/docs/multisite/translations_management/configure_translations_management.md @@ -67,7 +67,6 @@ You can then [customize these configurations in the UI]([[= user_doc =]]/ai_acti ### Add YAML configuration -In `config/packages`, create a `translations_management.yaml` file. You configure the providers in the SiteAccess-aware `translations_management` namespace. ``` yaml @@ -103,16 +102,6 @@ In addition to their required authentication keys, all providers support two opt REST API-based providers come with their own language code lists and mappings, therefore both settings are optional. If configured, they replace the built-in defaults, so use them to restrict available languages or override mappings. -!!! tip "Default values" - - To check the built-in defaults for the existing providers, run: - - ``` bash - php bin/console debug:container --parameters | grep ibexa.translations_management.auto_translate.provider - ``` - - The output lists the default `supported_language_codes` and `language_codes_map` values for each configured provider, which you can use as a reference. - AI-based providers don't provide built-in language code lists or mappings. If `supportedLanguageCodes` is not configured, all enabled languages are used, converted to POSIX format. If `languageCodesMap` is not configured, the system automatically tries to match [[= product_name =]] language codes to the one supported by the provider by trying different format variants, for example, `eng-GB`, `en-GB`, or `en`. diff --git a/docs/product_catalog/add_remote_pim_support.md b/docs/product_catalog/add_remote_pim_support.md index bdff8b311c9..fce62b72c39 100644 --- a/docs/product_catalog/add_remote_pim_support.md +++ b/docs/product_catalog/add_remote_pim_support.md @@ -25,7 +25,7 @@ To connect to your remote PIM, provide your implementation of the following serv ## Switch to the new product catalog engine -To inform the application that the product catalog engine has been replaced by an external one, in `config/packages/ibexa_product_catalog.yaml`, set the new product catalog engine, for example: +To inform the application that the product catalog engine has been replaced by an external one, set the new product catalog engine, for example: ``` yaml ibexa_product_catalog: diff --git a/docs/product_catalog/quable/configure_quable_connector.md b/docs/product_catalog/quable/configure_quable_connector.md index 48ab66d8889..425ddd53555 100644 --- a/docs/product_catalog/quable/configure_quable_connector.md +++ b/docs/product_catalog/quable/configure_quable_connector.md @@ -10,7 +10,7 @@ You can customize the behavior of the [[= pim_product_name =]] integration add-o ## Configuration example -In `config/packages/ibexa_connector_quable.yaml`, specify your configuration by using the `ibexa_connector_quable` key: +Specify your configuration by using the `ibexa_connector_quable` key: ``` yaml ibexa_connector_quable: diff --git a/docs/product_catalog/quable/install_quable.md b/docs/product_catalog/quable/install_quable.md index cab32e3da4f..4ade025155f 100644 --- a/docs/product_catalog/quable/install_quable.md +++ b/docs/product_catalog/quable/install_quable.md @@ -21,7 +21,7 @@ To connect to [[= pim_product_name =]], you need an API token: ## Configure [[= pim_product_name =]] connector -In `config/packages/ibexa_connector_quable.yaml`, specify the configuration for the [[= pim_product_name =]] connector: +Specify the configuration for the [[= pim_product_name =]] connector: ``` yaml ibexa_connector_quable: @@ -43,7 +43,7 @@ To use [[= pim_product_name =]] as a product data source, configure [[= product_ ### Define [[= pim_product_name =]] engine -In `config/packages/ibexa_product_catalog.yaml`, add a new engine configuration: +Add a new engine configuration: ``` yaml hl_lines="8-13" ibexa_product_catalog: @@ -70,7 +70,7 @@ By setting the `ibexa_product_catalog.engines.quable.options.taxonomy` key to `q ### Set [[= pim_product_name =]] as default engine -In your repository configuration, typically in `config/packages/ibexa.yaml`, configure the product catalog to use the [[= pim_product_name =]] engine as the product data source: +In your repository configuration, configure the product catalog to use the [[= pim_product_name =]] engine as the product data source: ``` yaml hl_lines="9" ibexa: @@ -90,13 +90,7 @@ ibexa: To use the products from [[= pim_product_name =]] within [[= product_name =]] content, make sure the [data languages](https://docs.quable.com/v5-EN/docs/data-languages) in [[= pim_product_name =]] have corresponding [languages](languages.md) in [[= product_name =]]. -To compare the language configuration in both systems, run the following command: - -``` bash -php bin/console ibexa:quable:languages:check -``` - -Based on the command output, configure the `language_map` in `config/packages/ibexa_connector_quable.yaml`, mapping each [[= product_name =]] language code to its [[= pim_product_name =]] locale code as in the following example: +Configure the `language_map` setting, mapping each [[= product_name =]] language code to its [[= pim_product_name =]] locale code as in the following example: ``` yaml ibexa_connector_quable: @@ -108,24 +102,6 @@ ibexa_connector_quable: The system uses the language map to retrieve data in the correct language from [[= pim_product_name =]]. -After configuring the map, rerun the `ibexa:quable:languages:check` command to confirm all languages are correctly mapped. - -## Synchronize taxonomy - -After configuring the integration, synchronize [product classifications from [[= pim_product_name =]]](https://docs.quable.com/v5-EN/docs/documents-classification-new-version) to [[= product_name =]]'s [taxonomies](taxonomy.md). - -Run the following command to synchronize classifications: - -``` bash -php bin/console ibexa:quable:classification:sync -``` - -This command imports the product classification structure from [[= pim_product_name =]] into [[= product_name =]], ensuring that product categories are aligned. - -!!! tip - - To keep the classifications aligned, it's recommended that you run the `ibexa:quable:classification:sync` command every night, even when using synchronization with webhooks. - ## Set up real-time synchronization [[= pim_product_name =]] can notify [[= product_name =]] about product data and classification changes in real-time by using webhooks. @@ -153,7 +129,7 @@ The **Authorization Header** value is a secret that must be kept secure. ### Configure webhook in [[= product_name =]] -In `config/packages/ibexa_connector_quable.yaml`, specify the configuration for the [[= pim_product_name =]] connector: +Specify the configuration for the [[= pim_product_name =]] connector: ``` yaml ibexa_connector_quable: diff --git a/docs/raptor_cdp/raptor_cdp_activation/raptor_cdp_configuration.md b/docs/raptor_cdp/raptor_cdp_activation/raptor_cdp_configuration.md index 495f5512a05..589c7813813 100644 --- a/docs/raptor_cdp/raptor_cdp_activation/raptor_cdp_configuration.md +++ b/docs/raptor_cdp/raptor_cdp_activation/raptor_cdp_configuration.md @@ -95,7 +95,6 @@ Add the `membership.activation_id` and `membership.api_key` credentials to your To control for how long resolved segment memberships are cached per visitor, use the `ibexa_segmentation.anonymous.cache` configuration key: ```yaml -# config/packages/ibexa_segmentation.yaml ibexa_segmentation: anonymous: cache: diff --git a/docs/raptor_cdp/raptor_cdp_activation/raptor_cdp_data_export.md b/docs/raptor_cdp/raptor_cdp_activation/raptor_cdp_data_export.md index de2e5ee5c95..fe1f18a1c46 100644 --- a/docs/raptor_cdp/raptor_cdp_activation/raptor_cdp_data_export.md +++ b/docs/raptor_cdp/raptor_cdp_activation/raptor_cdp_data_export.md @@ -19,30 +19,8 @@ In the **Download** section, select **Stream file**. Copy generated steam ID and paste it into the configuration file under `stream_id`. It allows you to establish a datastream from the Streaming API into the Data Manager. -Next, you need to export your data to the CDP. -Go to your installation and use this command: - -- for User: - -```bash -php bin/console ibexa:cdp:stream-user-data --draft -``` - -- for Product: - -```bash -php bin/console ibexa:cdp:stream-product-data --draft -``` - -- for Content: - -```bash -php bin/console ibexa:cdp:stream-content-data --draft -``` - -There are two versions of this command `--draft/--no-draft`. -The first one is used to send the test user data to the Data Manager. -If it passes a validation test in the **Activation** section, use the latter one to send a full version. +User, product and content data is then streamed to the Data Manager. +Draft data is sent first, so that you can validate it in the **Activation** section before a full export. You can extend exported user data with custom fields from your user content, such as date of birth, preferences, or other profile information. @@ -91,13 +69,7 @@ Next, select **userid** from a **Schema columns section** on the right and map i ## Activation In this section you can test the dataflow with provided test user data. -If everything passes, go to your installation and export production data with this command: - -```bash -php bin/console ibexa:cdp:stream-user-data --no-draft -``` - -Now you can run and activate the dataflow. +If everything passes, production data is exported and you can run and activate the dataflow. ## Build new Audience/Segment @@ -124,7 +96,7 @@ Specify name of your activation, select `userid` as **Person Identifier** and cl Next, you can fill in **Ibexa information** they must match the ones provided in the YAML configuration: - **Client Secret** and **Client ID** - are used to authenticate against Webhook endpoint. -In the configuration they're taken from environment variables in `.env` file. +They must match the credentials configured for the webhook. - **Segment Group Identifier** - identifier of the segment group in [[= product_name =]]. It points to a segment group where all the CDP audiences are stored. @@ -152,7 +124,7 @@ By using Messenger while working with large batches of data, requests are queued 1\. Make sure that the transport layer is defined properly in [[= product_name_base =]] Messenger configuration. -2\. Add `bulk_async_threshold` setting in the `config/packages/ibexa_cdp.yaml` configuration: +2\. Add the `bulk_async_threshold` setting to the CDP configuration: ``` bash ibexa_cdp: @@ -165,12 +137,6 @@ Available options: - below threshold - items are processed immediately in a single request, using the standard synchronous behavior - at/above threshold - items are automatically dispatched to the asynchronous queue for background processing -3\. Make sure that the worker starts together with the application to watch the transport bus: - -``` bash -php bin/console messenger:consume ibexa.messenger.transport --bus=ibexa.messenger.bus -``` - ### CDP Monolog channel CDP Monolog channel handles webhook logs for easier separation of logs. @@ -182,7 +148,7 @@ CDP Monolog channel handles webhook logs for easier separation of logs. It's possible to configure `ibexa.cdp.webhook` Monolog channel to direct all logs to specific stream, file, or service. This allows webhook logs to be stored separately from the main application logs for easier debugging and analysis. -To do it, in `config/packages/monolog.yaml` file, define a new handler for the `ibexa.cdp.webhook` channel that directs CPD Webhook events to a separate file. +To do it, define a new logging handler for the `ibexa.cdp.webhook` channel that directs CDP webhook events to a separate file. It can be configured in both `dev` and `prod` environments, for example: ```yaml diff --git a/docs/recommendations/raptor_integration/connector_installation_configuration.md b/docs/recommendations/raptor_integration/connector_installation_configuration.md index 5f373c2b3cd..2565d26d3c7 100644 --- a/docs/recommendations/raptor_integration/connector_installation_configuration.md +++ b/docs/recommendations/raptor_integration/connector_installation_configuration.md @@ -19,7 +19,7 @@ To configure the [[[= product_name_cdp_base =]]](https://www.raptorservices.com/ ## SiteAccess-aware configuration -To configure the [[= product_name_cdp_base =]] connector, use the `ibexa.system..connector_raptor` configuration key in the `config/packages/ibexa_connector_raptor.yaml` file: +To configure the [[= product_name_cdp_base =]] connector, use the `ibexa.system..connector_raptor` [configuration key](configuration.md#configuration-files): ``` yaml [[= include_file('code_samples/recommendations/config/packages/ibexa_connector_raptor.yaml', 0, 17) =]] @@ -71,7 +71,7 @@ The following settings are global and apply to the entire application (they are - `hybrid_tracking_proxy_path` - by default, it's set to `/raptor/track`. The client-side shim sends tracking events to this same-origin endpoint, which forwards them to [[= product_name_cdp_base =]] asynchronously. -This value can be overridden in `config/packages/ibexa_connector_raptor.yaml` file, for example: +This value can be overridden in the connector configuration, for example: ``` yaml hl_lines="18-21" [[= include_file('code_samples/recommendations/config/packages/ibexa_connector_raptor.yaml') =]] diff --git a/docs/search/criteria_reference/ancestor_criterion.md b/docs/search/criteria_reference/ancestor_criterion.md index 64667b62bdb..ff653b8488e 100644 --- a/docs/search/criteria_reference/ancestor_criterion.md +++ b/docs/search/criteria_reference/ancestor_criterion.md @@ -12,8 +12,6 @@ The `Ancestor` Search Criterion searches for content that is an ancestor of the ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/attributegroupidentifier_criterion.md b/docs/search/criteria_reference/attributegroupidentifier_criterion.md index 29e49a5ba47..58027341c36 100644 --- a/docs/search/criteria_reference/attributegroupidentifier_criterion.md +++ b/docs/search/criteria_reference/attributegroupidentifier_criterion.md @@ -12,8 +12,6 @@ The `AttributeGroupIdentifier` Search Criterion searches for products by the val ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/attributename_criterion.md b/docs/search/criteria_reference/attributename_criterion.md index 76eacd55949..f2d295baff6 100644 --- a/docs/search/criteria_reference/attributename_criterion.md +++ b/docs/search/criteria_reference/attributename_criterion.md @@ -12,8 +12,6 @@ The `AttributeName` Search Criterion searches for products by the value of their ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/catalogidentifier_criterion.md b/docs/search/criteria_reference/catalogidentifier_criterion.md index 45418e29d12..a261585e356 100644 --- a/docs/search/criteria_reference/catalogidentifier_criterion.md +++ b/docs/search/criteria_reference/catalogidentifier_criterion.md @@ -12,8 +12,6 @@ The `CatalogIdentifier` Search Criterion searches for a catalog by the value of ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/catalogname_criterion.md b/docs/search/criteria_reference/catalogname_criterion.md index 03e1cc6b83a..871ba47df0c 100644 --- a/docs/search/criteria_reference/catalogname_criterion.md +++ b/docs/search/criteria_reference/catalogname_criterion.md @@ -12,8 +12,6 @@ The `CatalogName` Search Criterion searches for catalogs by the value of their n ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/catalogstatus_criterion.md b/docs/search/criteria_reference/catalogstatus_criterion.md index 652adf48741..2779df8c51d 100644 --- a/docs/search/criteria_reference/catalogstatus_criterion.md +++ b/docs/search/criteria_reference/catalogstatus_criterion.md @@ -12,8 +12,6 @@ The `CatalogStatus` Search Criterion searches for catalogs by the value of their ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/colorattribute_criterion.md b/docs/search/criteria_reference/colorattribute_criterion.md index 5736c6612d3..1dbb828618b 100644 --- a/docs/search/criteria_reference/colorattribute_criterion.md +++ b/docs/search/criteria_reference/colorattribute_criterion.md @@ -13,8 +13,6 @@ The `ColorAttribute` Search Criterion searches for products by the value of thei ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/contentid_criterion.md b/docs/search/criteria_reference/contentid_criterion.md index 78276729b98..cb4a6e38cb6 100644 --- a/docs/search/criteria_reference/contentid_criterion.md +++ b/docs/search/criteria_reference/contentid_criterion.md @@ -12,8 +12,6 @@ The `ContentId` Search Criterion searches for content by its ID. ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/contentname_criterion.md b/docs/search/criteria_reference/contentname_criterion.md index e096aea6748..6011e6aedc5 100644 --- a/docs/search/criteria_reference/contentname_criterion.md +++ b/docs/search/criteria_reference/contentname_criterion.md @@ -12,8 +12,6 @@ The [`ContentName` Search Criterion](https://github.com/ibexa/core/blob/6.0/src/ ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/contenttypegroupid_criterion.md b/docs/search/criteria_reference/contenttypegroupid_criterion.md index 57b84e721b6..27ff20148f4 100644 --- a/docs/search/criteria_reference/contenttypegroupid_criterion.md +++ b/docs/search/criteria_reference/contenttypegroupid_criterion.md @@ -12,8 +12,6 @@ The `ContentTypeGroupId` Search Criterion searches for content based on the ID o ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/contenttypeid_criterion.md b/docs/search/criteria_reference/contenttypeid_criterion.md index 5e138e8b234..7edbdae1e9a 100644 --- a/docs/search/criteria_reference/contenttypeid_criterion.md +++ b/docs/search/criteria_reference/contenttypeid_criterion.md @@ -12,8 +12,6 @@ The `ContentTypeId` Search Criterion searches for content based on the ID of its ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/contenttypeidentifier_criterion.md b/docs/search/criteria_reference/contenttypeidentifier_criterion.md index 14497016ec5..3b400d21a44 100644 --- a/docs/search/criteria_reference/contenttypeidentifier_criterion.md +++ b/docs/search/criteria_reference/contenttypeidentifier_criterion.md @@ -12,8 +12,6 @@ The `ContentTypeIdentifier` Search Criterion searches for content based on the i ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/createdat_criterion.md b/docs/search/criteria_reference/createdat_criterion.md index ea244783a64..6891fd5180e 100644 --- a/docs/search/criteria_reference/createdat_criterion.md +++ b/docs/search/criteria_reference/createdat_criterion.md @@ -13,8 +13,6 @@ The `CreatedAt` Search Criterion searches for products based on the date when th ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/createdatrange_criterion.md b/docs/search/criteria_reference/createdatrange_criterion.md index a2befb0dc4b..fe860215cad 100644 --- a/docs/search/criteria_reference/createdatrange_criterion.md +++ b/docs/search/criteria_reference/createdatrange_criterion.md @@ -13,8 +13,6 @@ The `CreatedAtRange` Search Criterion searches for products based on the date ra ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/datemetadata_criterion.md b/docs/search/criteria_reference/datemetadata_criterion.md index 89d58f8d4a9..bb25dd7a3c5 100644 --- a/docs/search/criteria_reference/datemetadata_criterion.md +++ b/docs/search/criteria_reference/datemetadata_criterion.md @@ -14,8 +14,6 @@ The `DateMetadata` Search Criterion searches for content based on the date when ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/field_criterion.md b/docs/search/criteria_reference/field_criterion.md index 4ae54cf7ac6..2ed5b08effd 100644 --- a/docs/search/criteria_reference/field_criterion.md +++ b/docs/search/criteria_reference/field_criterion.md @@ -19,8 +19,6 @@ Querying for a collection with the `EQ` operator returns result only when the wh ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/floatattribute_criterion.md b/docs/search/criteria_reference/floatattribute_criterion.md index c05daaf96af..e833d5fa41d 100644 --- a/docs/search/criteria_reference/floatattribute_criterion.md +++ b/docs/search/criteria_reference/floatattribute_criterion.md @@ -13,8 +13,6 @@ The `FloatAttribute` Search Criterion searches for products by the value of thei ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/floatattributerange_criterion.md b/docs/search/criteria_reference/floatattributerange_criterion.md index 83f90e63717..c4d4ac8715e 100644 --- a/docs/search/criteria_reference/floatattributerange_criterion.md +++ b/docs/search/criteria_reference/floatattributerange_criterion.md @@ -14,8 +14,6 @@ The `FloatAttributeRange` Search Criterion searches for products by the range of ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/fulltext_criterion.md b/docs/search/criteria_reference/fulltext_criterion.md index 20ec3744bb1..b5aacec5923 100644 --- a/docs/search/criteria_reference/fulltext_criterion.md +++ b/docs/search/criteria_reference/fulltext_criterion.md @@ -35,8 +35,6 @@ When using the Elasticsearch search engine, a full text query performs an OR que ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/image_criterion.md b/docs/search/criteria_reference/image_criterion.md index c3879df04b5..66f674a0f26 100644 --- a/docs/search/criteria_reference/image_criterion.md +++ b/docs/search/criteria_reference/image_criterion.md @@ -13,8 +13,6 @@ The `Image` Search Criterion searches for image by specified image attributes. ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/imagedimensions_criterion.md b/docs/search/criteria_reference/imagedimensions_criterion.md index fd0ce9669f2..0c94dd8757e 100644 --- a/docs/search/criteria_reference/imagedimensions_criterion.md +++ b/docs/search/criteria_reference/imagedimensions_criterion.md @@ -13,8 +13,6 @@ The `Dimensions` Search Criterion searches for image with specified dimensions. ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/imagefilesize_criterion.md b/docs/search/criteria_reference/imagefilesize_criterion.md index 3ae60de7a03..ea6f1fa0a51 100644 --- a/docs/search/criteria_reference/imagefilesize_criterion.md +++ b/docs/search/criteria_reference/imagefilesize_criterion.md @@ -14,8 +14,6 @@ The `FileSize` Search Criterion searches for image with specified size. ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/imagemimetype_criterion.md b/docs/search/criteria_reference/imagemimetype_criterion.md index 500efb3315d..ce206326889 100644 --- a/docs/search/criteria_reference/imagemimetype_criterion.md +++ b/docs/search/criteria_reference/imagemimetype_criterion.md @@ -13,8 +13,6 @@ The `MimeType` Search Criterion searches for image with specified mime type(s). ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/imageorientation_criterion.md b/docs/search/criteria_reference/imageorientation_criterion.md index 9b0b9eb759b..41d5ec77645 100644 --- a/docs/search/criteria_reference/imageorientation_criterion.md +++ b/docs/search/criteria_reference/imageorientation_criterion.md @@ -14,8 +14,6 @@ Supported orientation values: landscape, portrait and square. ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/integerattribute_criterion.md b/docs/search/criteria_reference/integerattribute_criterion.md index a1272741147..601c5bcf526 100644 --- a/docs/search/criteria_reference/integerattribute_criterion.md +++ b/docs/search/criteria_reference/integerattribute_criterion.md @@ -13,8 +13,6 @@ The `IntegerAttribute` Search Criterion searches for products by the value of th ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/integerattributerange_criterion.md b/docs/search/criteria_reference/integerattributerange_criterion.md index 6ff7f6ce4d4..14eb8299217 100644 --- a/docs/search/criteria_reference/integerattributerange_criterion.md +++ b/docs/search/criteria_reference/integerattributerange_criterion.md @@ -14,8 +14,6 @@ The `IntegerAttributeRange` Search Criterion searches for products by the range ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/isbookmarked_criterion.md b/docs/search/criteria_reference/isbookmarked_criterion.md index 2f4ce40b582..3ac396bf4dc 100644 --- a/docs/search/criteria_reference/isbookmarked_criterion.md +++ b/docs/search/criteria_reference/isbookmarked_criterion.md @@ -17,8 +17,6 @@ This Criterion is available only for location Search. ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/isuserbased_criterion.md b/docs/search/criteria_reference/isuserbased_criterion.md index 24af25ecaf6..487e446866f 100644 --- a/docs/search/criteria_reference/isuserbased_criterion.md +++ b/docs/search/criteria_reference/isuserbased_criterion.md @@ -21,8 +21,6 @@ The `IsUserBased` Criterion isn't available in Solr or Elasticsearch engines. ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/isuserenabled_criterion.md b/docs/search/criteria_reference/isuserenabled_criterion.md index 5d2bd4402ad..bcee0ea6a9f 100644 --- a/docs/search/criteria_reference/isuserenabled_criterion.md +++ b/docs/search/criteria_reference/isuserenabled_criterion.md @@ -13,8 +13,6 @@ The `IsUserEnabled` Search Criterion searches for user accounts that are enabled ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/isvirtual_criterion.md b/docs/search/criteria_reference/isvirtual_criterion.md index a0a95f90dc6..51cb7640450 100644 --- a/docs/search/criteria_reference/isvirtual_criterion.md +++ b/docs/search/criteria_reference/isvirtual_criterion.md @@ -12,8 +12,6 @@ The `IsVirtual` Search Criterion searches for virtual or physical products. ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/languagecode_criterion.md b/docs/search/criteria_reference/languagecode_criterion.md index 0a073437c10..5424ee73c38 100644 --- a/docs/search/criteria_reference/languagecode_criterion.md +++ b/docs/search/criteria_reference/languagecode_criterion.md @@ -13,8 +13,6 @@ The `LanguageCode` Search Criterion searches for content based on whether it's t ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/locationid_criterion.md b/docs/search/criteria_reference/locationid_criterion.md index 2c2b3d7345b..9c50a49147a 100644 --- a/docs/search/criteria_reference/locationid_criterion.md +++ b/docs/search/criteria_reference/locationid_criterion.md @@ -12,8 +12,6 @@ The `LocationId` Search Criterion searches for content based in the location ID. ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/locationremoteid_criterion.md b/docs/search/criteria_reference/locationremoteid_criterion.md index b57e532c004..7e0088fcd5e 100644 --- a/docs/search/criteria_reference/locationremoteid_criterion.md +++ b/docs/search/criteria_reference/locationremoteid_criterion.md @@ -12,8 +12,6 @@ The `LocationRemoteId` Search Criterion searches for content based in the locati ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/logicaland_criterion.md b/docs/search/criteria_reference/logicaland_criterion.md index cf0249c795f..19e3a2febd0 100644 --- a/docs/search/criteria_reference/logicaland_criterion.md +++ b/docs/search/criteria_reference/logicaland_criterion.md @@ -14,8 +14,6 @@ When querying for products, use LogicalAnd instead. ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/logicalnot_criterion.md b/docs/search/criteria_reference/logicalnot_criterion.md index fe5a5b8a58e..daa7fc12e08 100644 --- a/docs/search/criteria_reference/logicalnot_criterion.md +++ b/docs/search/criteria_reference/logicalnot_criterion.md @@ -14,8 +14,6 @@ It takes only one Criterion in the array parameter. ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/logicalor_criterion.md b/docs/search/criteria_reference/logicalor_criterion.md index 759625214e6..92ab3e4733f 100644 --- a/docs/search/criteria_reference/logicalor_criterion.md +++ b/docs/search/criteria_reference/logicalor_criterion.md @@ -14,8 +14,6 @@ When querying for products, use LogicalOr instead. ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/objectstateid_criterion.md b/docs/search/criteria_reference/objectstateid_criterion.md index dac8a407b97..ed0ae7cfa40 100644 --- a/docs/search/criteria_reference/objectstateid_criterion.md +++ b/docs/search/criteria_reference/objectstateid_criterion.md @@ -12,8 +12,6 @@ The `ObjectStateId` Search Criterion searches for content based on its object st ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/objectstateidentifier_criterion.md b/docs/search/criteria_reference/objectstateidentifier_criterion.md index 9102dd47cb8..630957592f3 100644 --- a/docs/search/criteria_reference/objectstateidentifier_criterion.md +++ b/docs/search/criteria_reference/objectstateidentifier_criterion.md @@ -13,8 +13,6 @@ The `ObjectStateIdentifier` Search Criterion searches for content based on its o ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/parentlocationid_criterion.md b/docs/search/criteria_reference/parentlocationid_criterion.md index 44fe3bca4a9..f4dc3203eb6 100644 --- a/docs/search/criteria_reference/parentlocationid_criterion.md +++ b/docs/search/criteria_reference/parentlocationid_criterion.md @@ -13,8 +13,6 @@ searches for content based on the Location ID of its parent. ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/productavailability_criterion.md b/docs/search/criteria_reference/productavailability_criterion.md index ef746c11247..229f078452b 100644 --- a/docs/search/criteria_reference/productavailability_criterion.md +++ b/docs/search/criteria_reference/productavailability_criterion.md @@ -16,8 +16,6 @@ For more information, see [Availability and computed availability](products.md#a ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/productcategory_criterion.md b/docs/search/criteria_reference/productcategory_criterion.md index b7c8de8bb66..47b93b0fe9b 100644 --- a/docs/search/criteria_reference/productcategory_criterion.md +++ b/docs/search/criteria_reference/productcategory_criterion.md @@ -12,8 +12,6 @@ The `ProductCategory` Search Criterion searches for products by the category the ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/productcode_criterion.md b/docs/search/criteria_reference/productcode_criterion.md index 30dfbd68b2f..0224486d7b5 100644 --- a/docs/search/criteria_reference/productcode_criterion.md +++ b/docs/search/criteria_reference/productcode_criterion.md @@ -12,8 +12,6 @@ The `ProductCode` Search Criterion searches for products by their codes. ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/productname_criterion.md b/docs/search/criteria_reference/productname_criterion.md index 8925d7e23e8..6b8a71c4407 100644 --- a/docs/search/criteria_reference/productname_criterion.md +++ b/docs/search/criteria_reference/productname_criterion.md @@ -12,8 +12,6 @@ The `ProductName` Search Criterion searches for products by their names. ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/producttype_criterion.md b/docs/search/criteria_reference/producttype_criterion.md index 18cd45cef9e..2548e257a1b 100644 --- a/docs/search/criteria_reference/producttype_criterion.md +++ b/docs/search/criteria_reference/producttype_criterion.md @@ -12,8 +12,6 @@ The `ProductType` Search Criterion searches for products by their codes. ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/remoteid_criterion.md b/docs/search/criteria_reference/remoteid_criterion.md index d5ae571380c..0d057d6e959 100644 --- a/docs/search/criteria_reference/remoteid_criterion.md +++ b/docs/search/criteria_reference/remoteid_criterion.md @@ -13,8 +13,6 @@ searches for content based on its remote content ID. ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/sectionid_criterion.md b/docs/search/criteria_reference/sectionid_criterion.md index e0400707195..bc27efef424 100644 --- a/docs/search/criteria_reference/sectionid_criterion.md +++ b/docs/search/criteria_reference/sectionid_criterion.md @@ -12,8 +12,6 @@ The `SectionId` Search Criterion searches for content based on the ID of the Sec ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/sectionidentifier_criterion.md b/docs/search/criteria_reference/sectionidentifier_criterion.md index 8f46c1cd828..ae26b8d6464 100644 --- a/docs/search/criteria_reference/sectionidentifier_criterion.md +++ b/docs/search/criteria_reference/sectionidentifier_criterion.md @@ -12,8 +12,6 @@ The `SectionIdentifier` Search Criterion searches for content based on the ident ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/selectionattribute_criterion.md b/docs/search/criteria_reference/selectionattribute_criterion.md index 0c59adaec6c..abcdf2d59ab 100644 --- a/docs/search/criteria_reference/selectionattribute_criterion.md +++ b/docs/search/criteria_reference/selectionattribute_criterion.md @@ -13,8 +13,6 @@ The `SelectionAttribute` Search Criterion searches for products by the value of ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/sibling_criterion.md b/docs/search/criteria_reference/sibling_criterion.md index 999b887c597..33d65a075d3 100644 --- a/docs/search/criteria_reference/sibling_criterion.md +++ b/docs/search/criteria_reference/sibling_criterion.md @@ -13,8 +13,6 @@ The `Sibling` Search Criterion searches for content under the same parent as the ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/subtree_criterion.md b/docs/search/criteria_reference/subtree_criterion.md index 135013a78b9..55d16d976a2 100644 --- a/docs/search/criteria_reference/subtree_criterion.md +++ b/docs/search/criteria_reference/subtree_criterion.md @@ -13,8 +13,6 @@ It returns the content item and all the content items below it in the subtree. ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/updated_at_criterion.md b/docs/search/criteria_reference/updated_at_criterion.md index 4118133da45..a40cb2b17e0 100644 --- a/docs/search/criteria_reference/updated_at_criterion.md +++ b/docs/search/criteria_reference/updated_at_criterion.md @@ -24,8 +24,6 @@ The `UpdatedAt` Search Criterion searches for products based on the date when th ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/updated_at_range_criterion.md b/docs/search/criteria_reference/updated_at_range_criterion.md index 5dc4a9b043c..123e90aa421 100644 --- a/docs/search/criteria_reference/updated_at_range_criterion.md +++ b/docs/search/criteria_reference/updated_at_range_criterion.md @@ -16,8 +16,6 @@ At least one of `min` or `max` must be provided. ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/useremail_criterion.md b/docs/search/criteria_reference/useremail_criterion.md index 276c1ade39a..555d2ce75e7 100644 --- a/docs/search/criteria_reference/useremail_criterion.md +++ b/docs/search/criteria_reference/useremail_criterion.md @@ -17,8 +17,6 @@ Solr search engine and Elasticsearch support IN and EQ operators only. ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/userid_criterion.md b/docs/search/criteria_reference/userid_criterion.md index 72402ffdf6c..729718bb4b1 100644 --- a/docs/search/criteria_reference/userid_criterion.md +++ b/docs/search/criteria_reference/userid_criterion.md @@ -12,8 +12,6 @@ The `UserId` Search Criterion searches for content based on the User ID. ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/userlogin_criterion.md b/docs/search/criteria_reference/userlogin_criterion.md index 7e2b3c9c386..c9e1370bacf 100644 --- a/docs/search/criteria_reference/userlogin_criterion.md +++ b/docs/search/criteria_reference/userlogin_criterion.md @@ -17,8 +17,6 @@ Solr search engine and Elasticsearch support IN and EQ operators only. ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/usermetadata_criterion.md b/docs/search/criteria_reference/usermetadata_criterion.md index 1b732d0a961..a59326fc952 100644 --- a/docs/search/criteria_reference/usermetadata_criterion.md +++ b/docs/search/criteria_reference/usermetadata_criterion.md @@ -14,8 +14,6 @@ The `UserMetadata` Search Criterion searches for content based on its creator or ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/criteria_reference/visibility_criterion.md b/docs/search/criteria_reference/visibility_criterion.md index 76bc3c6b0a4..c5572d99acc 100644 --- a/docs/search/criteria_reference/visibility_criterion.md +++ b/docs/search/criteria_reference/visibility_criterion.md @@ -18,8 +18,6 @@ Use Location Search to avoid this. ## Example -### REST API - === "XML" ```xml diff --git a/docs/search/search.md b/docs/search/search.md index f5d62a28b70..c8460580c7a 100644 --- a/docs/search/search.md +++ b/docs/search/search.md @@ -8,12 +8,18 @@ page_type: landing_page [[= product_name =]] exposes a powerful search capability, allowing both full-text search and querying the content repository by using several built-in Search Criteria and Sort Clauses. -You build a query by combining Search Criteria, which select the content to return, -with Sort Clauses, which order the results. -Aggregations group the results into categories, -and embeddings enable semantic similarity search. +You build a query by combining [Search Criteria](criteria_reference/search_criteria_reference.md), +which select the content to return, with [Sort Clauses](sort_clause_reference/sort_clause_reference.md), +which order the results. +[Aggregations](aggregation_reference/aggregation_reference.md) group the results into categories, +and [embeddings](embeddings_reference/embeddings_reference.md) enable semantic similarity search. You run queries over the REST API by using the `/views` resource. [[= cards([ "search/search_criteria_and_sort_clauses", + "search/criteria_reference/search_criteria_reference", + "search/sort_clause_reference/sort_clause_reference", + "search/aggregation_reference/aggregation_reference", + "search/embeddings_reference/embeddings_reference", + "search/search_in_trash_reference", ], columns=2) =]] diff --git a/docs/search/search_criteria_and_sort_clauses.md b/docs/search/search_criteria_and_sort_clauses.md index c3e7d6096b7..e0d5352dfdb 100644 --- a/docs/search/search_criteria_and_sort_clauses.md +++ b/docs/search/search_criteria_and_sort_clauses.md @@ -4,113 +4,31 @@ description: Search Criteria and Sort Clauses help you fine-tune searches done b # Search Criteria and Sort Clauses -Search Criteria and Sort Clauses are value object classes used for building a search query, to define filter criteria and ordering of the result set. -[[= product_name =]] provides a number of standard Search Criteria and Sort Clauses that you can use out of the box and that should cover the majority of use cases. +Search Criteria and Sort Clauses are the building blocks of a search query: Criteria +select which content is returned, and Sort Clauses order the results. +[[= product_name =]] provides a number of standard Search Criteria and Sort Clauses +that cover the majority of use cases. +For the full list, see the [Search Criteria reference](criteria_reference/search_criteria_reference.md) +and the [Sort Clause reference](sort_clause_reference/sort_clause_reference.md). -## Search engine handling of Search Criteria and Sort Clauses +## Content and Location search -As Search Criteria and Sort Clauses are value objects which are used to define the query from API perspective, they're common for all storage engines. -Each storage engine needs to implement its own handlers for the corresponding Criterion and Sort Clause value object, which are used to translate the value object into a storage-specific search query. +There are two basic types of search: you can search for content items, or for locations. -As an example take a look at the [`ContentId` Criterion handler](https://github.com/ibexa/core/blob/6.0/src/lib/Search/Legacy/Content/Common/Gateway/CriterionHandler/ContentId.php) in Legacy search engine or [`ContentId` Criterion handler](https://github.com/ibexa/solr/blob/6.0/src/lib/Query/Common/CriterionVisitor/ContentIdIn.php) in Solr search engine. +All Criteria and Sort Clauses are accepted by Location search, but not all of them can +be used with Content search. +The reason is that while one location always has exactly one content item, one content +item can have several locations. +In that context some Criteria and Sort Clauses would produce ambiguous queries, so +Content search refuses the Criteria and Sort Clauses that apply specifically to +locations. -## Custom Criteria and Sort Clauses - -Sometimes you may find that standard Search Criteria and Sort Clauses provided with [[= product_name =]] aren't sufficient for your needs. -Most often this is the case if you have a custom field type using external storage which cannot be searched using the standard field Criterion. - -!!! note - - Legacy (SQL-based) search can also be used in `ibexa_keyword` external storage. - -In such cases you can implement a custom Criterion or Sort Clause, together with the corresponding handlers for the storage engine you're using. - -!!! caution "Using Field Criterion or Sort Clause with large databases" - - Field Criterion and Sort Clause don't perform well by design when using SQL database. - If you have a large database and want to use them, you either need to use the Solr search engine, or develop your own Custom Criterion or Sort Clause. This way you can avoid using the attributes (fields) database table, and instead use a custom simplified table which can handle the amount of data you have. - -### Difference between Content and Location Search - -There are two basic types of searches, you can either search for locations or for content. -Each type has dedicated methods in the Search Service: - -| Type of search | Method in Search Service | -|----------------|--------------------------| -| Content | `findContent()` | -| Content | `findContentInfo()` | -| Content | `findSingle()` | -| Location | `findLocations()` | - -All Criteria and Sort Clauses are accepted with Location Search, but not all of them can be used with Content Search. -The reason for this is that while one location always has exactly one content item, one content item can have multiple locations. -In this context some Criteria and Sort Clauses would produce ambiguous queries that would not be accepted by Content Search. - -Content Search explicitly refuses to accept Criteria and Sort Clauses implementing these abstract classes: - -- `Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion\Location` -- `Ibexa\Contracts\Core\Repository\Values\Content\SortClause\Criterion\Location` - -### Configuring custom Criterion and Sort Clause handlers - -After you have implemented your Criterion / Sort Clause and its handler, you need to configure the handler for the [service container]([[= symfony_doc =]]/service_container.html) by using dedicated service tags for each type of search. -Doing so automatically registers it and handle your Criterion / Search Clause when it's given as a parameter to one of the Search Service methods. - -Available tags for Criterion handlers in Legacy Storage Engine are: - -- `ibexa.search.legacy.gateway.criterion_handler.content` -- `ibexa.search.legacy.gateway.criterion_handler.location` - -Available tags for Sort Clause handlers in Legacy Storage Engine are: - -- `ibexa.search.legacy.gateway.sort_clause_handler.content` -- `ibexa.search.legacy.gateway.sort_clause_handler.location` - -!!! note - - You can find all the native handlers and the tags for the Legacy Storage Engine in files located in `core/src/lib/Resources/settings/storage_engines/`. - -!!! tip - - When you search in trash, use the following service tags: - - - for Criterion handlers: `ibexa.core.trash.search.legacy.gateway.criterion_handler` - - for Sort Clause handlers: `ibexa.core.trash.search.legacy.gateway.sort_clause_handler` - - For more information about searching for content items in Trash, see [Search in trash](search_in_trash_reference.md). - - For more information about the Criteria and Sort Clauses that are supported when searching for trashed content items, see [Searching in trash reference](search_in_trash_reference.md). - -The following example shows how to register a ContentId Criterion handler, common for both Content and Location Search: - -``` yaml -services: - Ibexa\Core\Search\Legacy\Content\Common\Gateway\CriterionHandler\ContentId: - arguments: ['@ibexa.api.storage_engine.legacy.dbhandler'] - tags: - - {name: ibexa.search.legacy.gateway.criterion_handler.content} - - {name: ibexa.search.legacy.gateway.criterion_handler.location} -``` - -The following example shows how to register a Depth Sort Clause handler for Location Search: - -``` yaml -Ibexa\Core\Search\Legacy\Content\Location\Gateway\SortClauseHandler\Location\Depth: - arguments: ['@ibexa.api.storage_engine.legacy.dbhandler'] - tags: - - {name: ibexa.search.legacy.gateway.sort_clause_handler.location} -``` - -For more information about passing parameters, see [Symfony Service Container documentation]([[= symfony_doc =]]/service_container.html#service-container-parameters). - -## Search using custom Field Criterion [REST] +## Search using a custom Field Criterion REST search can be performed by calling the `POST /views` method with a custom `FieldCriterion`. This allows you to build custom content logic queries with nested logical operators OR/AND/NOT. -Custom Field Criterion search mirrors the one already existing in PHP API `Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion\Field` by exposing it to REST. - ### Example of custom Content Query ```json diff --git a/docs/snippets/page_block_cache_clear.md b/docs/snippets/page_block_cache_clear.md deleted file mode 100644 index ce2b66a0e0a..00000000000 --- a/docs/snippets/page_block_cache_clear.md +++ /dev/null @@ -1,10 +0,0 @@ -!!! caution "Clear the persistence cache" - - Persistence cache must be cleared after any modifications have been made to the block config in Page Builder, such as adding, removing or altering the page blocks, block attributes, validators or views configuration. - - To clear the persistence cache, run `php bin/console cache:pool:clear ` command. - The default cache pool is named `cache.tagaware.filesystem`. - The default cache pool when running Redis or Valkey is named `cache.redis`. - - In prod mode, you also need to clear the symfony cache by running `./bin/console c:c`. - In dev mode, the Symfony cache is rebuilt automatically. diff --git a/docs/users/invitations.md b/docs/users/invitations.md index 27094b91edf..63d4dd9ae92 100644 --- a/docs/users/invitations.md +++ b/docs/users/invitations.md @@ -14,33 +14,22 @@ You can limit the ability to invite other members to specific user groups, such ## Creating and sending invitations -Invitations are created with InvitationService, but sending them requires additional setup. -[[= product_name =]] provides you with `Ibexa\User\Invitation\MailSender` implementation of `InvitationSender` interface for sending invitations via email. -If you want to send invitations through different channels, you need to create a custom setup. +Invitations are sent by email. +The invitation contains a link with a unique hash that lets the recipient create their account. -## Invitation and registration form templates - -### Semantic configuration - -To set up custom templates for invitation or registration forms, create a template file and inform the system, through configuration, when to use this template. +## Invitation expiration +The expiration time for the invitation link is set under the `user_invitation` [configuration key](configuration.md#configuration-files). You might also set a SiteAccess under `scope`, to which the new user is invited. If the SiteAccess isn't set, it falls back to the default `site` value. -For example, use the following [configuration](configuration.md#configuration-files): - ```yaml ibexa: system: : user_invitation: hash_expiration_time: P7D - templates: - mail: "@@App/invitation/mail.html.twig" ``` -Here, you can specify which template should be used for the invitation mail, and what should be the expiration time for the invitation link included in that mail. If a user doesn't click the invitation link sent to them in time, you can refresh the invitation. Refresh resets the time limit and changes the hash in the invitation link. - -You can find more registration related templates in [Register new users documentation](user_registration.md#other-user-management-templates). diff --git a/docs/users/passwords.md b/docs/users/passwords.md index 1d912a0bf35..55d4519c788 100644 --- a/docs/users/passwords.md +++ b/docs/users/passwords.md @@ -27,35 +27,6 @@ It allows them to create a new password. The validity of the password recovery token can be set by using the `ibexa.system..security.token_interval_spec` parameter. By default, it's set to `PT1H` (one hour). -## Revoking passwords - -In case of a security situation such as a data leakage, you may need to force users to change their passwords. -You can do it with the help of the `ibexa:user:expire-password` command, which revokes the passwords for specific users, user groups, or users belonging to the chosen content type. - -To select which users to revoke passwords for, use one of the following options with the command: - -- `--user-id|-u` - the ID of the user. Accepts multiple user IDs -- `--user-group-id|-ug` - the ID of the user group. Accepts multiple group IDs -- `--user-content-type-identifier|-ct` - the identifier of the user content type. Accepts multiple content types - -You can use the following additional options with the command: - -- `--force|-f` - commits the change, otherwise the command only performs a dry run -- `--iteration-count|-c` - defines how many users are fetched at once. Lowering this value helps with memory issues -- `--password-ttl|-t` - number of days after which new passwords expire. Used when the command enables password expiration for user content types that don't use it yet. - -For example, to revoke the passwords of all users of the `user` content type, run: - -``` bash -php bin/console ibexa:user:expire-password --user-content-type-identifier=user --force -``` - -To perform a dry run (without saving the results) of revoking passwords of all users from user group 13, run: - -``` bash -php bin/console ibexa:user:expire-password --user-group-id=13 -``` - ## Password rules You can customize the password policy in your project. diff --git a/docs/users/update_basic_user_data.md b/docs/users/update_basic_user_data.md deleted file mode 100644 index 5992e39e90d..00000000000 --- a/docs/users/update_basic_user_data.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -description: Update basic user account data from the console. ---- - -# Update basic user data from CLI - -Multiple user management scenarios may result in having to update basic user account data, such as user status, the password, or email. -Especially, you may need to revoke user access by disabling the account when offboarding an employee, or change the user's forgotten password. - -You can do it without accessing the Admin UI, by running a console command. -You reference the user account by passing the user login. - -## Disable or enable user account - -Disable the user account: - -```bash -php bin/console ibexa:user:update-user --disable -``` - -For example: - -```bash -php bin/console ibexa:user:update-user --disable johndoe -``` - -Enable the user account: - -```bash -php bin/console ibexa:user:update-user --enable -``` - -## Change password - -Change the password associated with the user account: - -```bash -php bin/console ibexa:user:update-user --password -``` - -After you run the command, enter the new password when prompted. -The command runs in silent mode and inputs are not echoed. - -For more information about changing and revoking passwords, for example, when a security breach occurs, see [Passwords](passwords.md#revoking-passwords). - -## Change email address - -Change the email address associated with the user account: - -```bash -php bin/console ibexa:user:update-user --email= -``` diff --git a/docs/users/user_authentication.md b/docs/users/user_authentication.md deleted file mode 100644 index c17f9be127f..00000000000 --- a/docs/users/user_authentication.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -description: Customize user authentication. -month_change: false ---- - -# User authentication - -## Authenticate user with multiple user providers - -Symfony provides native support for [multiple user providers]([[= symfony_doc =]]/security/user_providers.html). -This makes it easier to integrate any kind of login handlers, including SSO and existing third party bundles (for example, [FR3DLdapBundle](https://github.com/Maks3w/FR3DLdapBundle), [HWIOauthBundle](https://github.com/hwi/HWIOAuthBundle), [FOSUserBundle](https://github.com/FriendsOfSymfony/FOSUserBundle), or [BeSimpleSsoAuthBundle](https://github.com/BeSimple/BeSimpleSsoAuthBundle)). - -However, to be able to use *external* user providers with [[= product_name =]], a valid [[= product_name_base =]] user needs to be injected into the repository. -This is mainly for the kernel to be able to manage content-related permissions (but not limited to this). - -Depending on your context, you either want to create and return an [[= product_name_base =]] user, or return an existing user, even a generic one. - -Whenever a user is matched and authenticated, Symfony initiates an `AuthenticationTokenCreatedEvent`. -Every service listening to this event receives an object containing the original security token, which holds the matched user, and a [passport]([[= symfony_doc =]]/security/custom_authenticator.html#security-passports). - -Then, it's up to a listener to retrieve an [[= product_name_base =]] user from the repository. - -This [[= product_name_base =]] user can be: - -- embedded into `Ibexa\Core\MVC\Symfony\Security\User` while forgetting about the original user -- wrapped into `Ibexa\Core\MVC\Symfony\Security\UserWrapped` with the original user if needed - -Finally, the user is assigned back into the event's token for the rest of the process. - -### User mapping example - -The following example uses the [memory user provider]([[= symfony_doc =]]/security/user_providers.html#memory-user-provider), maps memory user to [[= product_name_base =]] repository user, and [chains]([[= symfony_doc =]]/security/user_providers.html#chain-user-provider) with the [[= product_name_base =]] user provider to be able to use both. - -It's possible to customize the user class used by extending `Ibexa\Core\MVC\Symfony\Security\EventListener\SecurityListener` service, which defaults to `Ibexa\Core\MVC\Symfony\Security\EventListener\SecurityListener`. - -You can override `getUser()` to return whatever user class you want, as long as it implements `Ibexa\Core\MVC\Symfony\Security\UserInterface`. - -The following is an example of using the in-memory user provider: - -``` yaml -# config/packages/security.yaml -security: - providers: - # Chaining in_memory and ibexa user providers - chain_provider: - chain: - providers: [in_memory, ibexa] - ibexa: - id: ibexa.security.user_provider - in_memory: - memory: - users: - # You will then be able to login with username "user" and password "userpass" - user: { password: userpass, roles: [ 'ROLE_USER' ] } - # The "in memory" provider requires an encoder for Symfony\Component\Security\Core\User\User - encoders: - Symfony\Component\Security\Core\User\User: plaintext -``` diff --git a/docs/users/user_registration.md b/docs/users/user_registration.md index 22dd739363c..d876119b339 100644 --- a/docs/users/user_registration.md +++ b/docs/users/user_registration.md @@ -61,46 +61,3 @@ ibexa: - last_name - user_account ``` - -## Other user management templates - -You can also modify form templates in the following way: - -### Changing user password - -``` yaml -ibexa: - system: - : - user_change_password: - templates: - form: -``` - -### Password recovery forms - -``` yaml -ibexa.site_access.config..user_forgot_password.templates.form -ibexa.site_access.config..user_forgot_password_success.templates.form -ibexa.site_access.config..user_forgot_password_login.templates.form -ibexa.site_access.config..user_forgot_password.templates.mail -``` - -### Resetting password - -``` yaml -ibexa.site_access.config..user_reset_password.templates.form -ibexa.site_access.config..user_reset_password.templates.invalid_link -ibexa.site_access.config..user_reset_password.templates.success -``` - -### User settings - -``` yaml -ibexa.site_access.config..user_settings.templates.list -ibexa.site_access.config..user_settings.templates.update -``` - -### Changing registration form templates - -To change the registration form template, follow the instructions in [Invitation and registration form templates](invitations.md#invitation-and-registration-form-templates). diff --git a/docs/users/users.md b/docs/users/users.md index 58ae791ff31..2943df3fbea 100644 --- a/docs/users/users.md +++ b/docs/users/users.md @@ -14,15 +14,13 @@ All such user accounts have the same underlying mechanism and enable you to cont "users/user_management_guide", "users/invitations", "users/user_registration", -"users/update_basic_user_data", -], columns=4) =]] +], columns=3) =]] ## Authenticate users [[= cards([ "users/login_methods", "users/passwords", - "users/user_authentication", ], columns=3) =]] ## Group users diff --git a/mkdocs.yml b/mkdocs.yml index 5fd6608df53..094392b45cc 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -172,7 +172,6 @@ nav: - Customer Portal configuration: customer_management/cp_configuration.md - Create Customer Portal: customer_management/cp_page_builder.md - Customer Portal Applications: customer_management/cp_applications.md - - Create registration form: customer_management/create_user_registration_form.md - Data collection: - Qualifio integration: qualifio/qualifio.md - Create campaign with Qualifio: qualifio/create_campaign.md @@ -209,11 +208,9 @@ nav: - User setup: - Invitations: users/invitations.md - Registration: users/user_registration.md - - Update basic user data: users/update_basic_user_data.md - User authentication: - Login methods: users/login_methods.md - Passwords: users/passwords.md - - User authentication: users/user_authentication.md - User grouping: - Customer groups: users/customer_groups.md - Recommendations: diff --git a/tools/llm_package/README.package.md b/tools/llm_package/README.package.md index 434f4a687c1..59ab869df38 100644 --- a/tools/llm_package/README.package.md +++ b/tools/llm_package/README.package.md @@ -1,6 +1,6 @@ -# Ibexa DXP documentation +# Cohesivo documentation -Official Ibexa DXP documentation as plain Markdown files. +Official Cohesivo by Ibexa documentation as plain Markdown files. ## Installation diff --git a/tools/llms_txt/llmstxt_preprocess.py b/tools/llms_txt/llmstxt_preprocess.py index 7e915713d23..de444b96f04 100644 --- a/tools/llms_txt/llmstxt_preprocess.py +++ b/tools/llms_txt/llmstxt_preprocess.py @@ -25,14 +25,12 @@ from bs4 import BeautifulSoup as Soup, NavigableString -PILL_CLASS_TO_EDITION = { - "pill--lts-update": "LTS Update", - "pill--experience": "Experience", - "pill--headless": "Headless", +PILL_CLASS_TO_CATEGORY = { "pill--new-feature": "New feature", "pill--first-release": "First release", } + def preprocess(soup: Soup, output: str) -> None: """ Preprocess HTML to improve markdown conversion. @@ -171,28 +169,29 @@ def _should_remove(tag) -> bool: Soup(f"{html_module.escape(code_elem.get_text())}", "html.parser") ) + def _process_release_note_tags(soup: Soup) -> None: - """Append edition labels from release-note__tags divs to their preceding heading. + """Append release-note category labels from release-note__tags divs to their preceding heading. Release notes use a
    block after each

    containing empty
    elements rendered via CSS. This converts them to a readable parenthetical on the heading, e.g.: - ## Google Gemini connector v5.0.7 (Headless, Experience, LTS Update, New feature) + ## Google Gemini connector v5.0.7 (New feature, First release) """ for tags_div in soup.find_all("div", class_="release-note__tags"): - editions = [] + categories = [] for pill_div in tags_div.find_all("div"): classes = pill_div.get("class", []) - for pill_cls, name in PILL_CLASS_TO_EDITION.items(): + for pill_cls, name in PILL_CLASS_TO_CATEGORY.items(): if pill_cls in classes: - editions.append(name) + categories.append(name) break heading = tags_div.find_previous_sibling(["h1", "h2", "h3", "h4"]) - if heading and editions: + if heading and categories: # Insert before the permalink anchor so it's part of the heading text anchor = heading.find("a", class_="headerlink") - label = NavigableString(f" ({', '.join(editions)})") + label = NavigableString(f" ({', '.join(categories)})") if anchor: anchor.insert_before(label) else: