Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/administration/admin_panel/segments_admin_panel.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@ Each segment group can contain segments that you can target content for.

![Segment](admin_panel_segment.png)

You can assign users to segments [through the API](segment_api.md#assigning-users).
You can assign users to segments over the REST API.
2 changes: 1 addition & 1 deletion docs/administration/configuration/configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ All kinds of values are accepted, including arrays and deep hashes.

For configuration that is meant to be exposed to an end-user (or end-developer), it's usually a good idea to also [implement semantic configuration]([[= symfony_doc =]]/components/config/definition.html).

You can also [implement SiteAccess-aware semantic configuration](siteaccess_aware_configuration.md).
Settings can also be [SiteAccess-aware](siteaccess_aware_configuration.md), taking a different value per SiteAccess, SiteAccess group, or globally.

For example:

Expand Down
8 changes: 0 additions & 8 deletions docs/ai/ai_actions/ai_actions_guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -129,14 +129,6 @@ An intuitive AI Actions interface within the **Admin** panel displays a list of
Here, you can search for specific actions and filter them by type or status.
By accessing the detailed view of individual AI actions, you can quickly review all their parameters.

### Extensibility

Built-in AI action types offer a good starting point, but the real power of AI Actions lies in extensibility.
Extending AI Actions opens up new possibilities for content management and editing.
Developers can define new models and AI action types that use the existing AI service or even integrate additional services.
The latter involves developing a new service connector, writing a handler that communicates with the new service, defining a new AI action type, and creating a form for configuring options, which extends the default action configuration form shown in the **Admin** panel.
For example, if this is your organization's requirement, a developer could write a handler that uses an AI service available internally, without exposing your data to a third-party service.

## Use cases

Out of the box, after you configure access to the OpenAI service, AI Actions come with two action types that can help your organization with the following tasks.
Expand Down
2 changes: 1 addition & 1 deletion docs/ai/ai_actions/configure_ai_actions.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

Once the framework is configured, before you can start using AI Actions, you can configure access to [[= product_name_base =]]-made service connectors by following the instructions below.

Only then you can restart you application and start [working with the AI Actions feature]([[= user_doc =]]/ai_actions/work_with_ai_actions/).
Once the connectors are configured, you can start [working with the AI Actions feature]([[= user_doc =]]/ai_actions/work_with_ai_actions/).

Check notice on line 19 in docs/ai/ai_actions/configure_ai_actions.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ai/ai_actions/configure_ai_actions.md#L19 <Ibexa.Passive>

Try to avoid passive tense, when possible.
Raw output
{"message":"Try to avoid passive tense, when possible.","location":{"path":"docs/ai/ai_actions/configure_ai_actions.md","range":{"start":{"line":19,"column":21},"end":{"line":19,"column":35}}},"severity":"INFO","code":{"value":"Ibexa.Passive"}}

!!! note "Taxonomy suggestions"

Expand Down
1 change: 0 additions & 1 deletion docs/ai/mcp/mcp_guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ With the MCP Servers feature, you can:
- create MCP servers [by using YAML configuration](mcp_config.md#mcp-server-configuration)
- assign different tools, prompts, and resources to different MCP servers, varying them for each site and purpose
- use [built-in tools](mcp_config.md#built-in-tools) included in the package
- [create custom server capabilities](mcp_usage.md#create-capability-class) with PHP API

MCP servers are defined specifically for each repository and assigned to individual [SiteAccesses](siteaccess.md) scopes.
This way you can build flexible configurations that match different contexts.
44 changes: 0 additions & 44 deletions docs/ai/mcp/mcp_usage.md
Original file line number Diff line number Diff line change
Expand Up @@ -115,50 +115,6 @@ An `ibexa.mcp.example` route is now available:
php bin/console debug:router ibexa.mcp.example
```

### Create capability class

Create an `ExampleCapabilities` class that implements `McpCapabilityInterface`.

The class contains:

- a method marked with an `McpTool` attribute that associates it with the `example` server as the `greet` tool
- a method marked with an `McpPrompt` attribute that provides a prompt template to users

``` php
[[= include_code('code_samples/mcp/src/Mcp/ExampleCapabilities.php') =]]
```

In this example, the `servers` attribute parameter associates only this tool with the `example` server.
Alternatively, you can assign all tools from the class to a server by using the `tools` parameter in the server configuration.
For more information, see [tools configuration](mcp_config.md#tool-configuration).

For the prompt, the `servers` parameter is required.
Therefore, the example prompt must use it to be associated with the `example` server.

During development and testing, you may need to clear the cache to ensure that new or modified capabilities are properly re-discovered.
In this example, use the following command:

```bash
php bin/console cache:pool:clear cache.tagaware.filesystem
```

!!! tip "Cache clearing"

During development, clear caches aggressively.
The following commands clear all cache types, regardless of where they are stored:
```bash
php bin/console cache:clear
php bin/console cache:pool:clear --all
```

### Create MCP server list command

To check the MCP server configuration, create a small command that uses the MCP server configuration registry injected through `McpServerConfigurationRegistryInterface` and autowiring:

``` php
[[= include_code('code_samples/mcp/src/Command/McpServerListCommand.php') =]]
```

### Perform `curl` test

To test the `example` MCP server, a sequence of `curl` commands is used to simulate the communication between an AI client and the MCP server.
Expand Down
25 changes: 5 additions & 20 deletions docs/api/rest_api/rest_api_usage/rest_requests.md
Original file line number Diff line number Diff line change
Expand Up @@ -157,26 +157,11 @@ When searching for content items (or locations), the query grammar is also parti

### Creating content with binary attachments

The example below is a command-line script to upload images. It's based on the [Symfony HttpClient]([[= symfony_doc =]]/http_client.html).

This script:

- receives an image path and optionally a name as command-line arguments,
- uses the [HTTP basic authentication](rest_api_authentication.md#http-basic-authentication), if it's enabled,
- creates a draft in the /Media/Images folder by posting (`POST`) data to [`/content/objects`](/api/rest_api/rest_api_reference/rest_api_reference.html#tag/Objects/operation/api_contentobjects_post),
- and, publishes (`PUBLISH`) the draft through [`/content/objects/{contentId}/versions/{versionNo}`](../rest_api_reference/rest_api_reference.html#managing-content-publish-a-content-version).

=== "XML"

``` php
[[= include_code('code_samples/api/rest_api/create_image.xml.php', 1, None, 1) =]]
```

=== "JSON"

``` php
[[= include_code('code_samples/api/rest_api/create_image.json.php', indent_level=1) =]]
```
To create content with a binary attachment, such as an image, post the content
data to [`/content/objects`](/api/rest_api/rest_api_reference/rest_api_reference.html#tag/Objects/operation/api_contentobjects_post)
to create a draft, then publish it through
[`/content/objects/{contentId}/versions/{versionNo}`](../rest_api_reference/rest_api_reference.html#managing-content-publish-a-content-version).
Authenticate the requests as described in [HTTP basic authentication](rest_api_authentication.md#http-basic-authentication).

### Search (`/views`)

Expand Down
16 changes: 0 additions & 16 deletions docs/api/rest_api/rest_api_usage/testing_rest_api.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,22 +19,6 @@ For examples of using `curl`, refer to:
- [Location header](rest_responses.md#location-header)
- [ContentInfo body](rest_responses.md#response-body)

## PHP

You can use [Symfony HttpClient]([[= symfony_doc =]]/http_client.html) to test REST API.
Open a PHP shell in a terminal with <nobr>`php -a`</nobr> and copy-paste this code into it:

``` php
[[= include_code('code_samples/api/rest_api/load_content.php', 3, 9, remove_indent=True) =]]
```

`$resource` URI should be edited to address the right domain.

On a freshly installed [[= product_name =]], `52` is the Content ID of the home page.
If necessary, substitute `52` with the content ID of an item from your database.

For a content creation example that uses PHP, see [Creating content with binary attachments](rest_requests.md#creating-content-with-binary-attachments)

## JS

The REST API can help you implement JavaScript / AJAX interaction.
Expand Down
38 changes: 0 additions & 38 deletions docs/customer_management/cp_applications.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,28 +61,6 @@ First, under the `ibexa.system.<scope>.corporate_accounts.application.states` ad
[[= include_file('code_samples/customer_portal/config/packages/customer_portal.yaml') =]]
```

### Create new Form Type

Next, create a new form type in `src/Form/VerifyType.php`.
It's displayed in the application review stage.

``` php hl_lines="17-18 25"
[[= include_code('code_samples/customer_portal/src/Form/VerifyType.php') =]]
```

Line 29 defines where the form should be displayed, line 21 adds **Note** field, and line 22 adds the **Verify** button.

### Create event subscriber to pass the form

Add an event subscriber that passes a new form type to the frontend.
Create `src/Corporate/EventSubscriber/ApplicationDetailsViewSubscriber.php` following the example below:

``` php hl_lines="35"
[[= include_code('code_samples/customer_portal/src/Corporate/EventSubscriber/ApplicationDetailsViewSubscriber.php') =]]
```

In line 39, you can see the `verify_form` parameter that passes the `verify` form to the application review view.

### 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`.
Expand All @@ -96,19 +74,3 @@ 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)

### Create event subscriber to verify state

Now, you need to pass the information that the button has been selected to the list of applications to change the application status.
Create another event subscriber that passes the information from the created form to the application list `src/Corporate/EventSubscriber/VerifyStateEventSubscriber.php`.

``` php hl_lines="42 68"
[[= include_code('code_samples/customer_portal/src/Corporate/EventSubscriber/VerifyStateEventSubscriber.php') =]]
```

In line 46, you can see that it handles changes to verify status.
The subscriber only informs that the status has been changed (line 72).

Now, if you click the **Verify** button during application review, the application gets **Verify** status.

![Verify status](img/cp_verify_status.png)
28 changes: 1 addition & 27 deletions docs/multisite/languages/back_office_translations.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,33 +47,7 @@ It's good practice to provide your labels in translations files, instead of lite

To provide label strings, make use of the `Symfony\Component\Translation\TranslatorInterface` and its `trans()` method.

The method takes as arguments:

- `id` of the message you want to translate
- an array of parameters
- domain of the string

Here's an example:

``` php hl_lines="12-14"
use Symfony\Contracts\Translation\TranslatorInterface;

final readonly class MyService
{
public function __construct(private TranslatorInterface $translator)
{
}

public function getTranslatedDescription(): string
{
return $this->translator->trans(
'custom.extension.description',
[],
'custom_extension'
);
}
}
```
The method takes the message `id`, an array of parameters, and the string's domain as arguments.

The strings are provided in .xliff files.
The file should be stored in your project's or your bundle's `Resources/translations` folder.
Expand Down
24 changes: 0 additions & 24 deletions docs/multisite/languages/language_api.md

This file was deleted.

37 changes: 0 additions & 37 deletions docs/multisite/siteaccess/injecting_siteaccess.md

This file was deleted.

1 change: 0 additions & 1 deletion docs/multisite/siteaccess/siteaccess.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,4 @@ Many other settings in the application are also configured per SiteAccess (also
[[= cards([
"multisite/siteaccess/siteaccess_matching",
"multisite/siteaccess/siteaccess_aware_configuration",
"multisite/siteaccess/injecting_siteaccess",
], columns=3) =]]
Loading
Loading