diff --git a/.github/workflows/api_refs.yaml b/.github/workflows/api_refs.yaml index cc51f8b54ae..01a6feed9f6 100644 --- a/.github/workflows/api_refs.yaml +++ b/.github/workflows/api_refs.yaml @@ -124,6 +124,9 @@ jobs: fi composer config --global http-basic.updates.ibexa.co $SATIS_NETWORK_KEY $SATIS_NETWORK_TOKEN + git config --global user.name "${GITHUB_ACTOR}" + git config --global user.email "${GITHUB_ACTOR}@users.noreply.github.com" + if [[ '4.6' != $BASE_BRANCH ]]; then tools/api_refs/api_refs.sh # Fix escape character: @@ -140,8 +143,6 @@ jobs: env: BASE_BRANCH: ${{ steps.version_and_branches.outputs.base_branch }} run: | - git config --global user.name "${GITHUB_ACTOR}" - git config --global user.email "${GITHUB_ACTOR}@users.noreply.github.com" git add docs/api/php_api/php_api_reference/ if [[ '4.6' != $BASE_BRANCH ]]; then git add tools/api_refs/.phpdoc/template/package-edition-map.twig diff --git a/.lycheeignore b/.lycheeignore index 829c48f8474..7f2def30441 100644 --- a/.lycheeignore +++ b/.lycheeignore @@ -16,6 +16,7 @@ ^https://support\.ibexa\.co/ ^https://redocly\.com/redoc/ ^https://updates\.ibexa\.co +https://cohesivo.com # Hosts that block automated requests (403) ^https?://(www\.)?linkedin\.com diff --git a/code_samples/back_office/online_editor/custom_tags/factbox/config/packages/custom_tags.yaml b/code_samples/back_office/online_editor/custom_tags/factbox/config/packages/custom_tags.yaml index 533eb6a694a..435d594abdb 100644 --- a/code_samples/back_office/online_editor/custom_tags/factbox/config/packages/custom_tags.yaml +++ b/code_samples/back_office/online_editor/custom_tags/factbox/config/packages/custom_tags.yaml @@ -1,25 +1,31 @@ -ibexa: - system: - admin_group: - fieldtypes: - ibexa_richtext: - custom_tags: [factbox] - toolbar: - custom_tags_group: - buttons: - factbox: - priority: 5 ibexa_fieldtype_richtext: custom_tags: factbox: template: '@ibexadesign/field_type/ibexa_richtext/custom_tags/factbox.html.twig' - icon: '/bundles/ibexaadminuiassets/vendors/ids-assets/dist/img/all-icons.svg#info-square' + icon: '/bundles/ibexaadminuiassets/vendors/ids-assets/dist/img/all-icons.svg#info-square' # Optional + is_inline: false # Optional + label: 'Factbox custom tag' # Optional + description: 'Highlight a piece of information in a box' # Optional attributes: name: type: string - required: true + required: true # Optional + label: 'My name attribute' # Optional style: type: choice - required: true + required: true # Optional default_value: light choices: [light, dark] + label: 'My style attribute' # Optional + +ibexa: + system: + admin_group: + fieldtypes: + ibexa_richtext: + custom_tags: [factbox] + toolbar: + custom_tags_group: + buttons: + factbox: + priority: 5 diff --git a/code_samples/back_office/online_editor/custom_tags/factbox/config/packages/jms_translation.yaml b/code_samples/back_office/online_editor/custom_tags/factbox/config/packages/jms_translation.yaml new file mode 100644 index 00000000000..879ff7b8a09 --- /dev/null +++ b/code_samples/back_office/online_editor/custom_tags/factbox/config/packages/jms_translation.yaml @@ -0,0 +1,9 @@ +jms_translation: + configs: + app_translation_config: + dirs: ['%kernel.project_dir%/src'] + output_dir: '%kernel.project_dir%/translations' + output_format: yaml + extractors: + - 'app.translation_extractor.factbox' + - 'app.translation_extractor.factbox_choice' diff --git a/code_samples/back_office/online_editor/custom_tags/factbox/config/services.yaml b/code_samples/back_office/online_editor/custom_tags/factbox/config/services.yaml new file mode 100644 index 00000000000..8f0617624a7 --- /dev/null +++ b/code_samples/back_office/online_editor/custom_tags/factbox/config/services.yaml @@ -0,0 +1,20 @@ +services: + app.extractor.custom_tag: + class: Ibexa\FieldTypeRichText\Translation\Extractor\CustomTagExtractor + arguments: + $customTags: '%ibexa.field_type.richtext.custom_tags%' + $domain: '%ibexa.field_type.richtext.custom_tags.translation_domain%' + $allowlist: ['factbox'] + tags: + - name: jms_translation.extractor + alias: app.translation_extractor.factbox + + app.extractor.custom_tag_choice: + class: Ibexa\FieldTypeRichText\Translation\Extractor\ChoiceAttributeExtractor + arguments: + $customTags: '%ibexa.field_type.richtext.custom_tags%' + $domain: '%ibexa.field_type.richtext.custom_tags.translation_domain%' + $allowlist: ['factbox'] + tags: + - name: jms_translation.extractor + alias: app.translation_extractor.factbox_choice 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 index 6ffaabc1d13..7a8170e35f2 100644 --- 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 @@ -1,3 +1,5 @@ +{{ encore_entry_link_tags('factbox') }} +

{{ params.name }}

diff --git a/code_samples/back_office/online_editor/custom_tags/factbox/translations/custom_tags.en.yaml b/code_samples/back_office/online_editor/custom_tags/factbox/translations/custom_tags.en.yaml index fde8e1917cb..9e3c5cce84d 100644 --- a/code_samples/back_office/online_editor/custom_tags/factbox/translations/custom_tags.en.yaml +++ b/code_samples/back_office/online_editor/custom_tags/factbox/translations/custom_tags.en.yaml @@ -1,3 +1,6 @@ ibexa_richtext.custom_tags.factbox.label: 'Factbox' +ibexa_richtext.custom_tags.factbox.description: 'Highlight a piece of information in a box' ibexa_richtext.custom_tags.factbox.attributes.name.label: 'Name' ibexa_richtext.custom_tags.factbox.attributes.style.label: 'Style' +ibexa_richtext.custom_tags.factbox.attributes.style.choice.dark.label: 'Dark' +ibexa_richtext.custom_tags.factbox.attributes.style.choice.light.label: 'Light' diff --git a/code_samples/back_office/online_editor/custom_tags/factbox/webpack.config.js b/code_samples/back_office/online_editor/custom_tags/factbox/webpack.config.js new file mode 100644 index 00000000000..2e3c25d081d --- /dev/null +++ b/code_samples/back_office/online_editor/custom_tags/factbox/webpack.config.js @@ -0,0 +1,3 @@ +Encore.addStyleEntry('factbox', [ + path.resolve(__dirname, './assets/scss/factbox.scss'), +]); diff --git a/code_samples/background_tasks/src/Dispatcher/SomeClassThatSchedulesExecutionInTheBackground.php b/code_samples/background_tasks/src/Dispatcher/SomeClassThatSchedulesExecutionInTheBackground.php index 987189ebaf0..af4039f8aa3 100644 --- a/code_samples/background_tasks/src/Dispatcher/SomeClassThatSchedulesExecutionInTheBackground.php +++ b/code_samples/background_tasks/src/Dispatcher/SomeClassThatSchedulesExecutionInTheBackground.php @@ -2,6 +2,7 @@ namespace App\Dispatcher; +use App\Message\SomeMessage; use Ibexa\Contracts\Core\Repository\PermissionResolver; use Ibexa\Contracts\Messenger\Stamp\DeduplicateStamp; use Ibexa\Contracts\Messenger\Stamp\SudoStamp; @@ -16,15 +17,15 @@ public function __construct( ) { } - public function schedule(object $message): void + public function schedule(): void { - $this->bus->dispatch($message); + $this->bus->dispatch(new SomeMessage()); $currentUserId = $this->permissionResolver->getCurrentUserReference()->getUserId(); - $this->bus->dispatch($message, [new UserPermissionStamp($currentUserId)]); - $this->bus->dispatch($message, [new SudoStamp()]); + $this->bus->dispatch(new SomeMessage(), [new UserPermissionStamp($currentUserId)]); + $this->bus->dispatch(new SomeMessage(), [new SudoStamp()]); $deduplicationKey = 'my_message.project.'; - $this->bus->dispatch($message, [new DeduplicateStamp($deduplicationKey)]); + $this->bus->dispatch(new SomeMessage(), [new DeduplicateStamp($deduplicationKey)]); } } diff --git a/code_samples/background_tasks/src/Messenger/SomeMessageProvider.php b/code_samples/background_tasks/src/Messenger/SomeMessageProvider.php new file mode 100644 index 00000000000..98f53c7123c --- /dev/null +++ b/code_samples/background_tasks/src/Messenger/SomeMessageProvider.php @@ -0,0 +1,14 @@ +getValue(); + if (!$value instanceof ImageValue) { + throw new InvalidArgumentException( + '$field', + sprintf('Expected %s, got %s.', ImageValue::class, get_debug_type($value)) + ); + } + + return new EncodedFieldValue($value->alternativeText ?? ''); + } + + /** + * @param array $metadata + */ + public function decode(string $value, mixed $previousFieldValue, array $metadata): Value + { + if (!$previousFieldValue instanceof ImageValue) { + throw new InvalidArgumentException( + '$previousFieldValue', + sprintf('Expected %s, got %s.', ImageValue::class, get_debug_type($previousFieldValue)) + ); + } + + return new ImageValue([ + 'id' => $previousFieldValue->id, + 'fileName' => $previousFieldValue->fileName, + 'fileSize' => $previousFieldValue->fileSize, + 'uri' => $previousFieldValue->uri, + 'imageId' => $previousFieldValue->imageId, + 'inputUri' => $previousFieldValue->inputUri, + 'width' => $previousFieldValue->width, + 'height' => $previousFieldValue->height, + 'alternativeText' => $value, + 'additionalData' => $previousFieldValue->additionalData, + 'mime' => $previousFieldValue->mime, + ]); + } +} diff --git a/code_samples/translations_management/src/TranslationsManagement/MyApiClient.php b/code_samples/translations_management/src/TranslationsManagement/MyApiClient.php new file mode 100644 index 00000000000..4091bb52859 --- /dev/null +++ b/code_samples/translations_management/src/TranslationsManagement/MyApiClient.php @@ -0,0 +1,15 @@ +apiClient->translate( + $translationData->getText(), + $translationData->getSourceLanguage(), + $translationData->getTargetLanguage() + ); + } + + /** @return array */ + public function getSupportedLanguageCodes(): array + { + return ['eng-GB', 'ger-DE', 'fre-FR']; + } + + /** @return array */ + public function getConfiguration(): array + { + return [ + 'actionConfigurationIdentifier' => $this->actionConfigurationIdentifier, + ]; + } + + public function isConfigured(): bool + { + return $this->actionConfigurationIdentifier !== ''; + } +} diff --git a/code_samples/translations_management/src/TranslationsManagement/MyCustomExclusionRule.php b/code_samples/translations_management/src/TranslationsManagement/MyCustomExclusionRule.php new file mode 100644 index 00000000000..48a55e68e04 --- /dev/null +++ b/code_samples/translations_management/src/TranslationsManagement/MyCustomExclusionRule.php @@ -0,0 +1,16 @@ +getContentType()->identifier === 'my_excluded_type'; + } +} diff --git a/code_samples/translations_management/src/TranslationsManagement/MyCustomLanguageCodeNormalizer.php b/code_samples/translations_management/src/TranslationsManagement/MyCustomLanguageCodeNormalizer.php new file mode 100644 index 00000000000..aeefa2dcaee --- /dev/null +++ b/code_samples/translations_management/src/TranslationsManagement/MyCustomLanguageCodeNormalizer.php @@ -0,0 +1,38 @@ + 'en-GB', + 'ger-DE' => 'de', + 'fre-FR' => 'fr', + ]; + + public function supports(TranslationProviderInterface $provider): bool + { + return $provider->getIdentifier() === 'my_custom_ai_provider'; + } + + public function normalize( + TranslationProviderInterface $provider, + string $languageCode + ): string { + if (isset(self::LANGUAGE_MAP[$languageCode])) { + return self::LANGUAGE_MAP[$languageCode]; + } + + throw new UnsupportedLanguageException( + $languageCode, + $provider->getIdentifier(), + array_values(self::LANGUAGE_MAP) + ); + } +} diff --git a/code_samples/translations_management/src/TranslationsManagement/MyCustomProvider.php b/code_samples/translations_management/src/TranslationsManagement/MyCustomProvider.php new file mode 100644 index 00000000000..e726d3435fd --- /dev/null +++ b/code_samples/translations_management/src/TranslationsManagement/MyCustomProvider.php @@ -0,0 +1,50 @@ +apiClient->translate( + $translationData->getText(), + $translationData->getSourceLanguage(), + $translationData->getTargetLanguage() + ); + } + + /** @return array */ + public function getSupportedLanguageCodes(): array + { + return ['eng-GB', 'ger-DE', 'fre-FR']; + } +} diff --git a/composer.json b/composer.json index 0db07f05c8d..b6fa91384e4 100644 --- a/composer.json +++ b/composer.json @@ -94,6 +94,7 @@ "ibexa/connector-raptor": "~5.0.x-dev", "ibexa/image-editor": "~5.0.x-dev", "ibexa/integrated-help": "~5.0.x-dev", + "ibexa/translations-management": "~5.0.x-dev", "ibexa/site-context": "~5.0.x-dev", "ibexa/fieldtype-richtext-rte": "~5.0.x-dev", "ibexa/site-factory": "~5.0.x-dev", diff --git a/deptrac.baseline.yaml b/deptrac.baseline.yaml index c4701c85205..4a0b3e6f11d 100644 --- a/deptrac.baseline.yaml +++ b/deptrac.baseline.yaml @@ -262,6 +262,10 @@ deptrac: App\Tab\Dashboard\Everyone\EveryoneArticleTab: - Ibexa\AdminUi\Tab\Dashboard\PagerLocationToDataMapper - Ibexa\Core\Pagination\Pagerfanta\LocationSearchAdapter + App\TranslationsManagement\ImageAltTextTransformer: + - Ibexa\Core\Base\Exceptions\InvalidArgumentException + - Ibexa\Core\FieldType\Image\Value + - Ibexa\Core\FieldType\Value App\View\Matcher\Owner: - Ibexa\Core\MVC\Symfony\Matcher\ContentBased\MatcherInterface - Ibexa\Core\MVC\Symfony\View\ContentValueView diff --git a/docs/administration/back_office/back_office_elements/custom_components.md b/docs/administration/back_office/back_office_elements/custom_components.md index cc18410c1cf..37fbab2eb3b 100644 --- a/docs/administration/back_office/back_office_elements/custom_components.md +++ b/docs/administration/back_office/back_office_elements/custom_components.md @@ -134,3 +134,10 @@ For more information, see [this example using few of those components](component |`admin-ui-discount-condition-code-usage-summary`| `vendor/ibexa/discounts/src/bundle/Resources/views/themes/admin/discounts/tab/details.html.twig` | |`admin-ui-discount-condition-code-summary`| `vendor/ibexa/discounts/src/bundle/Resources/views/themes/admin/discounts/tab/details.html.twig` | |`admin-ui-discount-condition-code-usage-limit-summary`| `vendor/ibexa/discounts/src/bundle/Resources/views/themes/admin/discounts/tab/details.html.twig` | + +## Translations management [[% include 'snippets/lts-update_badge.md' %]] + +| Group name | Template file | +|---|---| +|`admin-ui-content-translation-modal-footer`| `vendor/ibexa/translations-management/src/bundle/Resources/views/themes/admin/translations_management/component/side_by_side_modal_footer.html.twig` | +|`admin-ui-content-edit-translation-select-footer`| `vendor/ibexa/translations-management/src/bundle/Resources/views/themes/admin/translations_management/component/side_by_side_content_edit_footer.html.twig` | diff --git a/docs/administration/configuration/dynamic_configuration.md b/docs/administration/configuration/dynamic_configuration.md index 60d8516a973..c5ebd43fe35 100644 --- a/docs/administration/configuration/dynamic_configuration.md +++ b/docs/administration/configuration/dynamic_configuration.md @@ -6,7 +6,7 @@ description: Use the ConfigResolver to inject dynamic configuration into your se ## ConfigResolver -Dynamic configuration is handled by a ConfigResolver. +Dynamic configuration is handled by the [`ConfigResolverInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-SiteAccess-ConfigResolverInterface.html). It exposes the `hasParameter()` and `getParameter()` methods. You can use them to check the different *scopes* available for a given *namespace* to find the appropriate parameter. @@ -68,7 +68,7 @@ services: arguments: ['@ibexa.config.resolver'] ``` -You can also use the [autowire feature]([[= symfony_doc =]]/service_container/autowiring.html), by type hinting against ConfigResolverInterface. +You can also use the [autowire feature]([[= symfony_doc =]]/service_container/autowiring.html), by type hinting against [`ConfigResolverInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-SiteAccess-ConfigResolverInterface.html). For more information about dependency injection, see [Service container](php_api.md#service-container). diff --git a/docs/ai/mcp/mcp_config.md b/docs/ai/mcp/mcp_config.md index 8eb974bad3c..1f0e8a42101 100644 --- a/docs/ai/mcp/mcp_config.md +++ b/docs/ai/mcp/mcp_config.md @@ -90,7 +90,7 @@ php bin/console debug:router --siteaccess= ibexa.mcp` | [`instructions`](https://modelcontextprotocol.io/specification/2025-11-25/schema#initializeresult-instructions) | string | No | `null` | Prompt-like instructions provided to the AI agent | | [`tools`](#tool-configuration) | array | No | `[]` | List of tool classes | | [`discovery_cache`](#discovery-cache) | string | Yes | | PSR-6 or PSR-16 cache pool service identifier | -| [`session`](#session-storage) | object | Yes | | Session storage configuration | +| [`session`](#session-storage) | object | No | `{ type: psr16,`
`service: ibexa.cache_pool }` | Session storage configuration | | [`allowed_hosts`](#allowed-hosts) | array | No | `[`
`'localhost',`
`'127.0.0.1',`
`'[::1]'`
`]` | Accepted `Host` headers | !!! note "New servers are disabled by default" @@ -122,7 +122,8 @@ MCP Servers LTS Update comes with the following **experimental** built-in tools: - `get_content_type` - gets a content type by its ID. - `get_content_type_by_identifier` - gets a content type by its identifier. - `get_content_type_list` - gets content types by their IDs. - - `create_content_type` - creates a content type draft. + - `create_content_type` - creates a draft for a new content type. + - `create_content_type_draft` - creates a draft for an existing content type. - `get_content_type_draft` - gets a content type draft by content type ID. - `publish_content_type_draft` - publishes a content type draft by content type ID. - `Ibexa\Mcp\Tool\ContentType\FieldDefinitionTools` @@ -186,19 +187,19 @@ MCP servers store session data in their own way. #### Options -| Option | Type | Default | Description | -|-------------|---------|------------|-----------------------------------------------------------| -| `type` | enum | (required) | Session store type: [`psr16`](#psr-16) or [`file`](#file) | -| `service` | string | `null` | PSR-16 cache service ID for the `psr16` session store | -| `prefix` | string | `mcp_` | Key prefix for the `psr16` session store | -| `directory` | string | `null` | Directory path for the `file` session store | -| `ttl` | integer | `3600` | Session TTL in seconds | +| Option | Type | Default | Description | +|-------------|---------|--------------------|----------------------------------------------------------------| +| `type` | enum | `psr16` | Session store type: [`psr16`](#psr-16) or [`file`](#file) | +| `service` | string | `ibexa.cache_pool` | PSR-16 or PSR-6 cache service ID for the `psr16` session store | +| `prefix` | string | `mcp_` | Key prefix for the `psr16` session store | +| `directory` | string | `null` | Directory path for the `file` session store | +| `ttl` | integer | `3600` | Session TTL in seconds | In production, it’s recommended to use [`psr16`](#psr-16) with Redis/Valkey, like with [regular sessions](clustering.md#shared-sessions). #### PSR-16 -Sessions are stored with a PSR-16 compatible cache implementation. +Sessions are stored with a PSR-16 or PSR-6 compatible cache implementation. It requires that a `service` option points to a valid cache service ID. Optionally, you could use a more specific `prefix` option than the default `mcp_` to avoid key collisions with other cache usages. Such setup is suitable for production environments. diff --git a/docs/api/event_reference/event_reference.md b/docs/api/event_reference/event_reference.md index 6cc5792d698..49396a4264f 100644 --- a/docs/api/event_reference/event_reference.md +++ b/docs/api/event_reference/event_reference.md @@ -37,6 +37,7 @@ For example, copying a content item is connected with two events: `BeforeCopyCon "api/event_reference/segmentation_events", "api/event_reference/site_events", "api/event_reference/taxonomy_events", + "api/event_reference/translations_management_events", "api/event_reference/trash_events", "api/event_reference/twig_component_events", "api/event_reference/url_events", diff --git a/docs/api/event_reference/translations_management_events.md b/docs/api/event_reference/translations_management_events.md new file mode 100644 index 00000000000..c910933617f --- /dev/null +++ b/docs/api/event_reference/translations_management_events.md @@ -0,0 +1,29 @@ +--- +description: Events that are triggered when working with translations management. +edition: lts-update +page_type: reference +--- + +# Translations management events + +The [Translations management](translations_management_guide.md) package dispatches events at two levels. + +## Translation events + +Translation events are dispatched for every field in each selected target language. +Use them for logging, analytics, and observability. +Both events are read-only, you can't use them to override the translation result. + +| Event | Dispatched by | Dispatched when | +|---|---|---| +| [`BeforeTranslateEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Event-BeforeTranslateEvent.html) | `EventDispatchingProviderTranslator` | Before a translation request is sent to the provider | +| [`TranslateEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Event-TranslateEvent.html) | `EventDispatchingProviderTranslator` | After a translation response is received | + +## Side-by-side creation events + +Side-by-side creation events are dispatched when preparing a new translation draft. + +| Event | Dispatched by | Dispatched when | +|---|---|---| +| [`OnContentSideBySideTranslationCreateEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-SideBySide-Event-OnContentSideBySideTranslationCreateEvent.html) | `ContentTranslationCreateController` | When creating a draft side-by-side translation of a content item | +| [`OnProductSideBySideTranslationCreateEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-SideBySide-Event-OnProductSideBySideTranslationCreateEvent.html) | `ProductTranslationViewController` | When creating a draft side-by-side translation of a product | diff --git a/docs/api/php_api/php_api_reference/classes/Ibexa-Contracts-Collaboration-Invitation-InvitationUpdateStruct.html b/docs/api/php_api/php_api_reference/classes/Ibexa-Contracts-Collaboration-Invitation-InvitationUpdateStruct.html index 92e9aa441bd..c68657e46b8 100644 --- a/docs/api/php_api/php_api_reference/classes/Ibexa-Contracts-Collaboration-Invitation-InvitationUpdateStruct.html +++ b/docs/api/php_api/php_api_reference/classes/Ibexa-Contracts-Collaboration-Invitation-InvitationUpdateStruct.html @@ -241,7 +241,7 @@

InvitationUpdateStruct.php : - 13 + 15
Final
@@ -250,6 +250,9 @@

Extends ValueObject

+
+ Implements + TranslationContainerInterface

The base class for all value objects and structs.

@@ -286,7 +289,7 @@

InvitationUpdateStruct.php : - 26 + 28
@@ -363,7 +366,7 @@

InvitationUpdateStruct.php : - 53 + 55
@@ -400,7 +403,7 @@

InvitationUpdateStruct.php : - 37 + 39
@@ -429,6 +432,43 @@

Return values

string|null

+
+

+ publicgetTranslationMessages() + +

+
+ InvitationUpdateStruct.php + : + 68 + +
+
+ +
+ + + + + + + +
+
+
+
+
+
+
public static getTranslationMessages() : array<string|int, mixed>
+
+
+
+
+
+

Return values

+

array<string|int, mixed>

+ +

publicsetContext() @@ -437,7 +477,7 @@

InvitationUpdateStruct.php : - 61 + 63

@@ -499,7 +539,7 @@

InvitationUpdateStruct.php : - 45 + 47
@@ -671,6 +711,11 @@

getStatus() + +
  • + + getTranslationMessages() +
  • diff --git a/docs/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Ibexa.html b/docs/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Ibexa.html index 3deb788c81f..2a7d6e01709 100644 --- a/docs/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Ibexa.html +++ b/docs/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Ibexa.html @@ -284,7 +284,7 @@

    -
    public mixed VERSION = '5.0.9'
    +
    public mixed VERSION = '5.0.10'
    diff --git a/docs/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Exceptions-ContentTypeOwnedBySomeoneElseException.html b/docs/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Exceptions-ContentTypeOwnedBySomeoneElseException.html new file mode 100644 index 00000000000..30cc0a0c3e8 --- /dev/null +++ b/docs/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Exceptions-ContentTypeOwnedBySomeoneElseException.html @@ -0,0 +1,305 @@ + + + + + ContentTypeOwnedBySomeoneElseException | PHP API Reference (Ibexa Documentation) + + + + + + + + + + + + + + + + +
    Copied!
    + + + + +
    + +
    + + + +
    +
    +
    + + + + + + + + +
    +
    +
    + + + +
    +
    + + +
    +

    + ContentTypeOwnedBySomeoneElseException

    + +
    + ContentTypeOwnedBySomeoneElseException.php + : + 11 + +
    +
    Interface
    + +
    + Extends + Exception
    +
    +

    Marker interface for all Repository related exceptions.

    + + + + + + + + + + + + + +
    +
    +
    + +
    +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + + diff --git a/docs/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-SiteAccess-ConfigResolverInterface.html b/docs/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-SiteAccess-ConfigResolverInterface.html index 6efcc1a4ad1..e13b489ffd2 100644 --- a/docs/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-SiteAccess-ConfigResolverInterface.html +++ b/docs/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-SiteAccess-ConfigResolverInterface.html @@ -267,7 +267,74 @@

    +

    + Constants +

    +
    +

    + publicSCOPE_DEFAULT +

    +
    + ConfigResolverInterface.php + : + 23 + +
    +
    + +
    + + + + + + + +
    +
    +
    +
    +
    +
    +
    public string SCOPE_DEFAULT = 'default'
    +
    +
    +
    + + +
    +

    + publicSCOPE_GLOBAL +

    +
    + ConfigResolverInterface.php + : + 21 + +
    +
    + +
    + + + + + + + +
    +
    +
    +
    +
    +
    +
    public string SCOPE_GLOBAL = 'global'
    +
    +
    +
    + +

    Methods

    @@ -280,7 +347,7 @@

    ConfigResolverInterface.php : - 49 + 53
    @@ -318,7 +385,7 @@

    ConfigResolverInterface.php : - 30 + 34
    @@ -335,7 +402,7 @@

    -
    public getParameter(string $paramName[, string $namespace = null ][, string $scope = null ]) : mixed
    +
    public getParameter(string $paramName[, string|null $namespace = null ][, string|null $scope = null ]) : mixed
    @@ -378,7 +445,7 @@

    Parameters

    $namespace - string + string|null null @@ -396,7 +463,7 @@

    Parameters

    $scope - string + string|null null @@ -421,7 +488,7 @@

    ConfigResolverInterface.php : - 39 + 43
    @@ -438,7 +505,7 @@

    -
    public hasParameter(string $paramName[, string $namespace = null ][, string $scope = null ]) : bool
    +
    public hasParameter(string $paramName[, string|null $namespace = null ][, string|null $scope = null ]) : bool
    @@ -481,7 +548,7 @@

    Parameters

    $namespace - string + string|null null @@ -499,7 +566,7 @@

    Parameters

    $scope - string + string|null null @@ -526,7 +593,7 @@

    ConfigResolverInterface.php : - 44 + 48
    @@ -595,6 +662,25 @@

    Parameters