diff --git a/docs/api/field_type_form_and_template.md b/docs/api/field_type_form_and_template.md index 1282e2786c..29f4b2ef9a 100644 --- a/docs/api/field_type_form_and_template.md +++ b/docs/api/field_type_form_and_template.md @@ -156,7 +156,7 @@ The block can receive the following variables: ### Reusing blocks -For easier Field Type template development you can take advantage of all defined blocks by using the [`block()` function](http://twig.sensiolabs.org/doc/functions/block.html). +For easier Field Type template development you can take advantage of all defined blocks by using the [`block()` function](https://twig.symfony.com/doc/3.x/functions/block.html). You can for example use `simple_block_field`, `simple_inline_field` or `field_attributes` blocks provided in [`content_fields.html.twig`](https://github.com/ezsystems/ezplatform-kernel/blob/v1.0.0/eZ/Bundle/EzPublishCoreBundle/Resources/views/content_fields.html.twig#L477). diff --git a/docs/api/field_type_type_and_value.md b/docs/api/field_type_type_and_value.md index 4e445df73e..efa632fb04 100644 --- a/docs/api/field_type_type_and_value.md +++ b/docs/api/field_type_type_and_value.md @@ -118,7 +118,7 @@ services: #### `parent` -As described in the [Symfony service container documentation]([[= symfony_doc =]]/components/dependency_injection/parentservices.html), the `parent` config key indicates that you want your service to inherit from the parent's dependencies, including constructor arguments and method calls. This helps avoiding repetition in your Field Type configuration and keeps consistency between all Field Types. +As described in the [Symfony service container documentation]([[= symfony_doc =]]/service_container/parent_services.html), the `parent` config key indicates that you want your service to inherit from the parent's dependencies, including constructor arguments and method calls. This helps avoiding repetition in your Field Type configuration and keeps consistency between all Field Types. If you need to inject other services into your Type class, skip using the `parent` config key. #### `tags` @@ -128,7 +128,7 @@ Like most API components, Field Types use the [Symfony service tag mechanism]([[ A service can be assigned one or several tags, with specific parameters. When the [service container](../api/public_php_api.md#service-container) is compiled into a PHP file, tags are read by `CompilerPass` implementations that add extra handling for tagged services. -Each service tagged as `ezplatform.field_type` is added to a [registry](http://martinfowler.com/eaaCatalog/registry.html) using the `alias` key as its unique `fieldTypeIdentifier` e.g. `ezstring`. +Each service tagged as `ezplatform.field_type` is added to a [registry](https://martinfowler.com/eaaCatalog/registry.html) using the `alias` key as its unique `fieldTypeIdentifier` e.g. `ezstring`. Each Field Type must also inherit from the abstract `ezplatform.field_type` service. This ensures that the initialization steps shared by all Field Types are executed. diff --git a/docs/api/field_types_reference/dateandtimefield.md b/docs/api/field_types_reference/dateandtimefield.md index fbeebf99e4..e19d713885 100644 --- a/docs/api/field_types_reference/dateandtimefield.md +++ b/docs/api/field_types_reference/dateandtimefield.md @@ -10,7 +10,7 @@ This Field Type represents a full date and time information. ### Input expectations -If input value is of type `string` or `integer`, it will be passed directly to the [PHP's built-in `\DateTime` class constructor](http://www.php.net/manual/en/datetime.construct.php), therefore the same input format expectations apply. +If input value is of type `string` or `integer`, it will be passed directly to the [PHP's built-in `\DateTime` class constructor](https://www.php.net/manual/en/datetime.construct.php), therefore the same input format expectations apply. It is also possible to directly pass an instance of `\DateTime`. @@ -36,7 +36,7 @@ The constructor for this value object will initialize a new Value object with t ##### String representation -String representation of the date value will generate the date string in the format `D Y-d-m H:i:s` as accepted by [PHP's built-in `date()` function](http://www.php.net/manual/en/function.date.php). +String representation of the date value will generate the date string in the format `D Y-d-m H:i:s` as accepted by [PHP's built-in `date()` function](https://www.php.net/manual/en/function.date.php). |Character|Description|Example| |---------|----------|--------| @@ -56,8 +56,8 @@ Hash value of this Field Type is an array with two keys: |Key|Type|Description|Example| |------|------|------|------| -|`timestamp`|`integer`|Time information in [Unix format timestamp](http://en.wikipedia.org/wiki/Unix_time).|`1400856992`| -|`rfc850`|`string`|Time information as a string in [RFC 850 date format](http://tools.ietf.org/html/rfc850). As input, this will have precedence over the timestamp value.|`"Friday, 23-May-14 14:56:14 GMT+0000"`| +|`timestamp`|`integer`|Time information in [Unix format timestamp](https://en.wikipedia.org/wiki/Unix_time).|`1400856992`| +|`rfc850`|`string`|Time information as a string in [RFC 850 date format](https://datatracker.ietf.org/doc/html/rfc850). As input, this will have precedence over the timestamp value.|`"Friday, 23-May-14 14:56:14 GMT+0000"`| ``` php $hash = [ diff --git a/docs/api/field_types_reference/datefield.md b/docs/api/field_types_reference/datefield.md index 4f588e49f2..04a2925e11 100644 --- a/docs/api/field_types_reference/datefield.md +++ b/docs/api/field_types_reference/datefield.md @@ -10,7 +10,7 @@ This Field Type represents a date without time information. ### Input expectations -If input value is in `string` or `integer` format, it will be passed directly to [PHP's built-in `\DateTime` class constructor](http://www.php.net/manual/en/datetime.construct.php), therefore the same input format expectations apply. +If input value is in `string` or `integer` format, it will be passed directly to [PHP's built-in `\DateTime` class constructor](https://www.php.net/manual/en/datetime.construct.php), therefore the same input format expectations apply. It is also possible to directly pass an instance of `\DateTime`. @@ -36,7 +36,7 @@ The Value class of this Field Type contains the following properties: ##### String representation -String representation of the date value will generate the date string in the format "l d F Y" as accepted by [PHP's built-in `date()` function](http://www.php.net/manual/en/function.date.php). +String representation of the date value will generate the date string in the format "l d F Y" as accepted by [PHP's built-in `date()` function](https://www.php.net/manual/en/function.date.php). |Character|Description|Example| |---------|----------|--------| @@ -49,7 +49,7 @@ Example: `Wednesday 22 May 2016` ##### Constructor -The constructor for this value object will initialize a new Value object with the value provided. It accepts an instance of [PHP's built-in `\DateTime` class](http://www.php.net/manual/en/datetime.construct.php). +The constructor for this value object will initialize a new Value object with the value provided. It accepts an instance of [PHP's built-in `\DateTime` class](https://www.php.net/manual/en/datetime.construct.php). ### Hash format @@ -57,8 +57,8 @@ Hash value of this Field Type is an array with two keys: |Key|Type|Description|Example| |------|------|------|------| -|`timestamp`|`integer`|Time information in [unix format timestamp](http://en.wikipedia.org/wiki/Unix_time).|`1400856992`| -|`rfc850`|`string`|Time information as a string in [RFC 850 date format](http://tools.ietf.org/html/rfc850). As input, this will have higher precedence over the timestamp value.|`"Friday, 23-May-14 14:56:14 GMT+0000"`| +|`timestamp`|`integer`|Time information in [unix format timestamp](https://en.wikipedia.org/wiki/Unix_time).|`1400856992`| +|`rfc850`|`string`|Time information as a string in [RFC 850 date format](https://datatracker.ietf.org/doc/html/rfc850). As input, this will have higher precedence over the timestamp value.|`"Friday, 23-May-14 14:56:14 GMT+0000"`| ``` php // Example of the hash value in PHP diff --git a/docs/api/field_types_reference/timefield.md b/docs/api/field_types_reference/timefield.md index 7700c63922..c7dac5fd4c 100644 --- a/docs/api/field_types_reference/timefield.md +++ b/docs/api/field_types_reference/timefield.md @@ -14,7 +14,7 @@ What is stored is the number of seconds, calculated from the beginning of the da ### Input expectations -If input value is of type `string` or `integer`, it will be passed directly to the [PHP's built-in `\DateTime` class](http://www.php.net/manual/en/datetime.construct.php) constructor, therefore the same input format expectations apply. +If input value is of type `string` or `integer`, it will be passed directly to the [PHP's built-in `\DateTime` class](https://www.php.net/manual/en/datetime.construct.php) constructor, therefore the same input format expectations apply. It is also possible to directly pass an instance of `\DateTime`. @@ -40,7 +40,7 @@ The constructor for this Value object will initialize a new Value object with t ##### String representation -String representation of the date value will generate the date string in the format "H:i:s" as accepted by [PHP's built-in `date()` function](http://www.php.net/manual/en/function.date.php). +String representation of the date value will generate the date string in the format "H:i:s" as accepted by [PHP's built-in `date()` function](https://www.php.net/manual/en/function.date.php). |Character|Description|Example| |---------|----------|--------| diff --git a/docs/api/public_php_api.md b/docs/api/public_php_api.md index a1009a8806..1189efd230 100644 --- a/docs/api/public_php_api.md +++ b/docs/api/public_php_api.md @@ -134,7 +134,7 @@ $permissionResolver->setCurrentUserReference($user); ## Exception handling -PHP API uses [Exceptions](http://php.net/exceptions) to handle errors. +PHP API uses [Exceptions](https://www.php.net/exceptions) to handle errors. Each API method may throw different exceptions, depending on what it does. It is good practice to cover every exception you expect to happen. @@ -156,9 +156,9 @@ try { ## Service container -[[= product_name =]] uses the [Symfony service container]([[=symfony_doc=]]/service_container.html) for dependency resolution. +[[= product_name =]] uses the [Symfony service container]([[= symfony_doc =]]/service_container.html) for dependency resolution. -[Symfony dependency injection]([[=symfony_doc=]]/components/dependency_injection.html) ensures that any required services are available in your custom code +[Symfony dependency injection]([[= symfony_doc =]]/components/dependency_injection.html) ensures that any required services are available in your custom code (for example, controllers) when you inject them into the constructor. Symfony service container uses service tags to dedicate services to a specific purpose. They are usually used for extension points. @@ -167,4 +167,4 @@ Symfony service container uses service tags to dedicate services to a specific p !!! tip - For a list of all service tags exposed by Symfony, see its [reference documentation]([[=symfony_doc=]]/reference/dic_tags.html). + For a list of all service tags exposed by Symfony, see its [reference documentation]([[= symfony_doc =]]/reference/dic_tags.html). diff --git a/docs/api/public_php_api_search.md b/docs/api/public_php_api_search.md index 6a37db3632..2590c1cf05 100644 --- a/docs/api/public_php_api_search.md +++ b/docs/api/public_php_api_search.md @@ -10,7 +10,7 @@ To do this, you can use the [`SearchService`](#searchservice) or [Repository fil ## SearchService -[`SearchService`](https://github.com/ezsystems/ezplatform-kernel/blob/v1.0.0/eZ/Publish/API/Repository/SearchService.php) +[`SearchService`](https://github.com/ezsystems/ezplatform-kernel/blob/v1.3.0/eZ/Publish/API/Repository/SearchService.php) enables you to perform search queries using the PHP API. The service should be [injected into the constructor of your command or controller](../api/public_php_api.md#service-container). @@ -22,7 +22,7 @@ The service should be [injected into the constructor of your command or controll ### Performing a search -To search through content you need to create a [`LocationQuery`](https://github.com/ezsystems/ezplatform-kernel/blob/v1.0.0/eZ/Publish/API/Repository/Values/Content/LocationQuery.php) +To search through content you need to create a [`LocationQuery`](https://github.com/ezsystems/ezplatform-kernel/blob/v1.3.0/eZ/Publish/API/Repository/Values/Content/LocationQuery.php) and provide your search criteria as a series of Criterion objects. For example, to search for all content of a selected Content Type, use one Criterion, @@ -36,12 +36,12 @@ The following command takes the Content Type identifier as an argument and lists [[= include_file('code_samples/api/public_php_api/src/Command/FindContentCommand.php', 31, 47) =]] ``` -[`SearchService::findContentInfo`](https://github.com/ezsystems/ezplatform-kernel/blob/v1.0.0/eZ/Publish/API/Repository/SearchService.php#L144) (line 16) -retrieves [`ContentInfo`](https://github.com/ezsystems/ezplatform-kernel/blob/v1.0.0/eZ/Publish/API/Repository/Values/Content/ContentInfo.php) objects of the found Content items. -You can also use [`SearchService::findContent`](https://github.com/ezsystems/ezplatform-kernel/blob/v1.0.0/eZ/Publish/API/Repository/SearchService.php#L124) to get full Content objects, together with their Field information. +[`SearchService::findContentInfo`](https://github.com/ezsystems/ezplatform-kernel/blob/v1.3.0/eZ/Publish/API/Repository/SearchService.php#L144) (line 16) +retrieves [`ContentInfo`](https://github.com/ezsystems/ezplatform-kernel/blob/v1.3.0/eZ/Publish/API/Repository/Values/Content/ContentInfo.php) objects of the found Content items. +You can also use [`SearchService::findContent`](https://github.com/ezsystems/ezplatform-kernel/blob/v1.3.0/eZ/Publish/API/Repository/SearchService.php#L124) to get full Content objects, together with their Field information. To query for a single result, for example by providing a Content ID, -use the [`SearchService::findSingle`](https://github.com/ezsystems/ezplatform-kernel/blob/v1.0.0/eZ/Publish/API/Repository/SearchService.php#L161) method: +use the [`SearchService::findSingle`](https://github.com/ezsystems/ezplatform-kernel/blob/v1.3.0/eZ/Publish/API/Repository/SearchService.php#L161) method: ``` php $criterion = new Criterion\ContentId($contentId); @@ -107,12 +107,12 @@ The following BatchIterator adapters are available, for both `query` and `filter You can use the `ContentService::find(Filter)` method to find Content items or `LocationService::find(Filter)` to find Locations using a defined Filter. -`ContentService::find` returns an iterable [`ContentList`](https://github.com/ezsystems/ezplatform-kernel/blob/v1.1.0/eZ/Publish/API/Repository/Values/Content/ContentList) -while `LocationService::find` returns an iterable [`LocationList`](https://github.com/ezsystems/ezplatform-kernel/blob/v1.1.0/eZ/Publish/API/Repository/Values/Content/LocationList). +`ContentService::find` returns an iterable [`ContentList`](https://github.com/ezsystems/ezplatform-kernel/blob/v1.3.0/eZ/Publish/API/Repository/Values/Content/ContentList.php) +while `LocationService::find` returns an iterable [`LocationList`](https://github.com/ezsystems/ezplatform-kernel/blob/v1.3.0/eZ/Publish/API/Repository/Values/Content/LocationList.php). Filtering differs from search. It does not use the `SearchService` and is not based on indexed data. -[`Filter`](https://github.com/ezsystems/ezplatform-kernel/blob/v1.1.0/eZ/Publish/API/Repository/Values/Filter/Filter.php) enables you to configure a query using chained methods to select criteria, sorting, limit and offset. +[`Filter`](https://github.com/ezsystems/ezplatform-kernel/blob/v1.3.0/eZ/Publish/API/Repository/Values/Filter/Filter.php) enables you to configure a query using chained methods to select criteria, sorting, limit and offset. For example, the following command lists all Content items under the specified parent Location and sorts them by name in descending order: @@ -168,8 +168,8 @@ $filter Not all Search Criteria and Sort Clauses are available for use in Repository filtering. - Only Criteria implementing [`FilteringCriterion`](https://github.com/ezsystems/ezplatform-kernel/blob/v1.1.0/eZ/Publish/SPI/Repository/Values/Filter/FilteringCriterion.php) - and Sort Clauses implementing [`FilteringSortClause`](https://github.com/ezsystems/ezplatform-kernel/blob/v1.1.0/eZ/Publish/SPI/Repository/Values/Filter/FilteringSortClause.php) + Only Criteria implementing [`FilteringCriterion`](https://github.com/ezsystems/ezplatform-kernel/blob/v1.3.0/eZ/Publish/SPI/Repository/Values/Filter/FilteringCriterion.php) + and Sort Clauses implementing [`FilteringSortClause`](https://github.com/ezsystems/ezplatform-kernel/blob/v1.3.0/eZ/Publish/SPI/Repository/Values/Filter/FilteringSortClause.php) are supported. See [Search Criteria](../guide/search/criteria_reference/search_criteria_reference.md) @@ -203,7 +203,7 @@ When using Repository filtering, provide the results of `ContentService::find()` ### Paginating search results -To paginate search or filtering results, it is recommended to use the [Pagerfanta library](https://github.com/whiteoctober/Pagerfanta) and [[[= product_name =]]'s adapters for it.](https://github.com/ezsystems/ezplatform-kernel/tree/v1.0.0/eZ/Publish/Core/Pagination/Pagerfanta) +To paginate search or filtering results, it is recommended to use the [Pagerfanta library](https://github.com/whiteoctober/Pagerfanta) and [[[= product_name =]]'s adapters for it.](https://github.com/ezsystems/ezplatform-kernel/tree/v1.3.0/eZ/Publish/Core/Pagination/Pagerfanta) ``` php // ... @@ -242,12 +242,12 @@ You can access the following additional search result data from PagerFanta: |Adapter class name|Description| |------|------| -|[`ContentSearchAdapter`](https://github.com/ezsystems/ezplatform-kernel/blob/v1.0.0/eZ/Publish/Core/Pagination/Pagerfanta/ContentSearchAdapter.php)|Makes a search against passed Query and returns [Content](https://github.com/ezsystems/ezplatform-kernel/blob/v1.0.0/eZ/Publish/API/Repository/Values/Content/Content.php) objects.| -|[`ContentSearchHitAdapter`](https://github.com/ezsystems/ezplatform-kernel/blob/v1.0.0/eZ/Publish/Core/Pagination/Pagerfanta/ContentSearchHitAdapter.php)|Makes a search against passed Query and returns [SearchHit](https://github.com/ezsystems/ezplatform-kernel/blob/v1.0.0/eZ/Publish/API/Repository/Values/Content/Search/SearchHit.php) objects instead.| -|[`LocationSearchAdapter`](https://github.com/ezsystems/ezplatform-kernel/blob/v1.0.0/eZ/Publish/Core/Pagination/Pagerfanta/LocationSearchAdapter.php)|Makes a Location search against passed Query and returns [Location](https://github.com/ezsystems/ezplatform-kernel/blob/v1.0.0/eZ/Publish/API/Repository/Values/Content/Location.php) objects.| -|[`LocationSearchHitAdapter`](https://github.com/ezsystems/ezplatform-kernel/blob/v1.0.0/eZ/Publish/Core/Pagination/Pagerfanta/LocationSearchHitAdapter.php)|Makes a Location search against passed Query and returns [SearchHit](https://github.com/ezsystems/ezplatform-kernel/blob/v1.0.0/eZ/Publish/API/Repository/Values/Content/Search/SearchHit.php) objects instead.| -|[`ContentFilteringAdapter`](https://github.com/ezsystems/ezplatform-kernel/blob/master/eZ/Publish/Core/Pagination/Pagerfanta/ContentFilteringAdapter.php)|Applies a Content filter and returns a `ContentList` object.| -|[`LocationFilteringAdapter`](https://github.com/ezsystems/ezplatform-kernel/blob/master/eZ/Publish/Core/Pagination/Pagerfanta/LocationFilteringAdapter.php)|Applies a Location filter and returns a `LocationList` object.| +|[`ContentSearchAdapter`](https://github.com/ezsystems/ezplatform-kernel/blob/v1.3.0/eZ/Publish/Core/Pagination/Pagerfanta/ContentSearchAdapter.php)|Makes a search against passed Query and returns [Content](https://github.com/ezsystems/ezplatform-kernel/blob/v1.3.0/eZ/Publish/API/Repository/Values/Content/Content.php) objects.| +|[`ContentSearchHitAdapter`](https://github.com/ezsystems/ezplatform-kernel/blob/v1.3.0/eZ/Publish/Core/Pagination/Pagerfanta/ContentSearchHitAdapter.php)|Makes a search against passed Query and returns [SearchHit](https://github.com/ezsystems/ezplatform-kernel/blob/v1.3.0/eZ/Publish/API/Repository/Values/Content/Search/SearchHit.php) objects instead.| +|[`LocationSearchAdapter`](https://github.com/ezsystems/ezplatform-kernel/blob/v1.3.0/eZ/Publish/Core/Pagination/Pagerfanta/LocationSearchAdapter.php)|Makes a Location search against passed Query and returns [Location](https://github.com/ezsystems/ezplatform-kernel/blob/v1.3.0/eZ/Publish/API/Repository/Values/Content/Location.php) objects.| +|[`LocationSearchHitAdapter`](https://github.com/ezsystems/ezplatform-kernel/blob/v1.3.0/eZ/Publish/Core/Pagination/Pagerfanta/LocationSearchHitAdapter.php)|Makes a Location search against passed Query and returns [SearchHit](https://github.com/ezsystems/ezplatform-kernel/blob/v1.3.0/eZ/Publish/API/Repository/Values/Content/Search/SearchHit.php) objects instead.| +|[`ContentFilteringAdapter`](https://github.com/ezsystems/ezplatform-kernel/blob/v1.3.0/eZ/Publish/Core/Pagination/Pagerfanta/ContentFilteringAdapter.php)|Applies a Content filter and returns a `ContentList` object.| +|[`LocationFilteringAdapter`](https://github.com/ezsystems/ezplatform-kernel/blob/v1.3.0/eZ/Publish/Core/Pagination/Pagerfanta/LocationFilteringAdapter.php)|Applies a Location filter and returns a `LocationList` object.| ## Complex search diff --git a/docs/api/rest_api_authentication.md b/docs/api/rest_api_authentication.md index 32fede26ce..6bbc8c5373 100644 --- a/docs/api/rest_api_authentication.md +++ b/docs/api/rest_api_authentication.md @@ -353,7 +353,7 @@ you can get the JWT token through the following request: ## HTTP basic authentication -For more information, see [HTTP Authentication: Basic and Digest Access Authentication](http://tools.ietf.org/html/rfc2617). +For more information, see [HTTP Authentication: Basic and Digest Access Authentication](https://datatracker.ietf.org/doc/html/rfc2617). ### Configuration @@ -381,7 +381,7 @@ If the installation has a dedicated host for REST, you can enable HTTP basic aut ### Usage example Basic authentication requires the username and password to be sent *(username:password)*, base64 encoded, with each request. -For details, see [RFC 2617](http://tools.ietf.org/html/rfc2617). +For details, see [RFC 2617](https://datatracker.ietf.org/doc/html/rfc2617). Most HTTP client libraries as well as REST libraries support this method. [Creating content with binary attachments](rest_api_requests.md#creating-content-with-binary-attachments) has an example using basic authentication with [cURL](https://www.php.net/manual/en/book.curl.php) and its `CURLOPT_USERPWD`. diff --git a/docs/api/rest_api_extension_resource.md b/docs/api/rest_api_extension_resource.md index 0345f178e8..469f28f7ce 100644 --- a/docs/api/rest_api_extension_resource.md +++ b/docs/api/rest_api_extension_resource.md @@ -187,7 +187,7 @@ ez_publish_rest: ``` The `router.generate` renders a URI based on the name of the route and its parameters. The parameter values can be a real value or a placeholder. For example, `'router.generate("ibexa.rest.load_location", {locationPath: "1/2"})'` results in `/api/ezp/v2/content/locations/1/2` while `'router.generate("ibexa.rest.load_location", {locationPath: "{locationPath}"})'` gives `/api/ezp/v2/content/locations/{locationPath}`. -This syntax is based on Symfony's [expression language]([[= symfony_doc =]]/components/expression_language/index.html), an extensible component that allows limited/readable scripting to be used outside the code context. +This syntax is based on Symfony's [expression language]([[= symfony_doc =]]/components/expression_language.html), an extensible component that allows limited/readable scripting to be used outside the code context. In this example, `app.rest.greeting` is available in every SiteAccess (`default`): diff --git a/docs/api/rest_api_requests.md b/docs/api/rest_api_requests.md index 4791dde2a4..7249699d59 100644 --- a/docs/api/rest_api_requests.md +++ b/docs/api/rest_api_requests.md @@ -20,18 +20,18 @@ Depending on the HTTP method used, different actions will be possible on the sam The following list of available methods gives an overview of the kind of action a method triggers on a resource, if available. For method action details per resource, see the [REST API reference](rest_api_reference/rest_api_reference.html). -| HTTP method | Status | Description | Safe | -|------------------------------------------------------------|----------|------------------------|------| -| [OPTIONS](https://tools.ietf.org/html/rfc2616#section-9.2) | Standard | List available methods | Yes | -| [GET](https://tools.ietf.org/html/rfc2616#section-9.3) | Standard | Collect data | Yes | -| [HEAD](https://tools.ietf.org/html/rfc2616#section-9.4) | Standard | Check existence | Yes | -| [POST](https://tools.ietf.org/html/rfc2616#section-9.5) | Standard | Create an item | No | -| [PATCH](http://tools.ietf.org/html/rfc5789) | Custom | Update an item | No | -| COPY | Custom | Duplicate an item | No | -| [MOVE](http://tools.ietf.org/html/rfc2518) | Custom | Move an item | No | -| SWAP | Custom | Swap two Locations | No | -| PUBLISH | Custom | Publish an item | No | -| [DELETE](https://tools.ietf.org/html/rfc2616#section-9.7) | Standard | Remove an item | No | +| HTTP method | Status | Description | Safe | +|---------------------------------------------------------------------|----------|------------------------|------| +| [OPTIONS](https://datatracker.ietf.org/doc/html/rfc2616#section-9.2) | Standard | List available methods | Yes | +| [GET](https://datatracker.ietf.org/doc/html/rfc2616#section-9.3) | Standard | Collect data | Yes | +| [HEAD](https://datatracker.ietf.org/doc/html/rfc2616#section-9.4) | Standard | Check existence | Yes | +| [POST](https://datatracker.ietf.org/doc/html/rfc2616#section-9.5) | Standard | Create an item | No | +| [PATCH](https://datatracker.ietf.org/doc/html/rfc5789) | Custom | Update an item | No | +| COPY | Custom | Duplicate an item | No | +| [MOVE](https://datatracker.ietf.org/doc/html/rfc2518) | Custom | Move an item | No | +| SWAP | Custom | Swap two Locations | No | +| PUBLISH | Custom | Publish an item | No | +| [DELETE](https://datatracker.ietf.org/doc/html/rfc2616#section-9.7) | Standard | Remove an item | No | !!! note "Caution with custom HTTP methods" @@ -47,7 +47,7 @@ Unsafe methods will require a CSRF token if [session-based authentication](rest_ Any URI resource that the REST API responds to will respond to an `OPTIONS` request. -The response contains an [`Allow` header](https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.7), which lists the methods accepted by the resource. +The response contains an [`Allow` header](https://www.rfc-editor.org/rfc/rfc9110.html#name-allow), which lists the methods accepted by the resource. ```shell curl -IX OPTIONS https://api.example.com/api/ezp/v2/content/objects/1 @@ -81,8 +81,8 @@ Allow: GET,PATCH,DELETE,COPY,MOVE,SWAP You can use the following HTTP headers with a REST request: -- [`Accept`](https://tools.ietf.org/html/rfc2616#section-14.1) describing the desired response type and format; -- [`Content-Type`](https://toos.ietf.org/html/rfc2616#section-14.17) describing the payload type and format; +- [`Accept`](https://datatracker.ietf.org/doc/html/rfc2616#section-14.1) describing the desired response type and format; +- [`Content-Type`](https://datatracker.ietf.org/doc/html/rfc2616#section-14.17) describing the payload type and format; - [`X-Siteaccess`](#siteaccess) specifying the target SiteAccess; - `X-HTTP-Method-Override` allowing to pass a custom method while using `POST` method as previously seen in [HTTP method](#request-method). - [`Destination`](#destination) specifying where to move an item @@ -114,8 +114,8 @@ On top of methods, HTTP request headers allow you to personalize the request's b On every resource, you can use the `Accept` header to indicate which format you want to communicate in, JSON or XML. This header is also used to specify the response type you want the server to send when multiple types are available. -- `Accept: application/vnd.ez.api.Content+xml` to get `Content` (full data, Fields included) as **[XML](http://www.w3.org/XML/)** -- `Accept: application/vnd.ez.api.ContentInfo+json` to get `ContentInfo` (metadata only) as **[JSON](http://www.json.org/)** +- `Accept: application/vnd.ez.api.Content+xml` to get `Content` (full data, Fields included) as **[XML](https://www.w3.org/XML/)** +- `Accept: application/vnd.ez.api.ContentInfo+json` to get `ContentInfo` (metadata only) as **[JSON](https://www.json.org/)** Media types are also used with the [`Content-Type` header](rest_api_responses.md#content-type-header) to characterize a [request body](#request-body) or a [response body](rest_api_responses.md#response-body). See [Creating content with binary attachments](#creating-content-with-binary-attachments) below. @@ -142,11 +142,11 @@ You can pass some short scalar parameters in the URIs or as GET parameters, but in particular the ones to create (`POST`) or update (`PATCH`) items. In the [REST API reference](rest_api_reference/rest_api_reference.html), request payload examples are given when needed. -One example is the [creation of an authentication session](rest_api_authentication.md#establishing-a-session). +One example is the [creation of an authentication session](rest_api_authentication.md#establishing-session). When creating a Content item, a special payload is needed if the ContentType has some [Image](field_types_reference/imagefield.md) or [BinaryFile](field_types_reference/binaryfilefield.md) Fields as files need to be attached. See the example of a [script uploading images](#creating-content-with-binary-attachments) below. -When searching for Content items (or Locations), the query grammar is also particular. See the [Search section](#search-view) below. +When searching for Content items (or Locations), the query grammar is also particular. See the [Search section](#search-views) below. ### Creating content with binary attachments diff --git a/docs/api/rest_api_usage.md b/docs/api/rest_api_usage.md index 8fc9ce6046..b01b4907e6 100644 --- a/docs/api/rest_api_usage.md +++ b/docs/api/rest_api_usage.md @@ -5,7 +5,7 @@ description: The REST API covers objects in the Ibexa DXP Repository with regula # REST API usage The REST API in [[= product_name =]] allows you to interact with an [[= product_name =]] installation using the HTTP protocol, -following a [REST](http://en.wikipedia.org/wiki/Representational_state_transfer) interaction model. +following a [REST](https://en.wikipedia.org/wiki/Representational_state_transfer) interaction model. Each resource (URI) interacts with a part of the system (content, users, search, and so on). Every interaction with the Repository than you can do from Back Office or using the [Public PHP API](public_php_api.md) can also be done using the REST API. @@ -58,7 +58,7 @@ curl -H "Accept: application/json" https://api.example.com/api/ezp/v2/ ### Country list -Alongside regular Repository interactions, there is a REST service providing a list of countries with their names, [ISO-3166](http://en.wikipedia.org/wiki/ISO_3166) codes and International Dialing Codes (IDC). It could be useful when presenting a country options list from any application. +Alongside regular Repository interactions, there is a REST service providing a list of countries with their names, [ISO-3166](https://en.wikipedia.org/wiki/ISO_3166) codes and International Dialing Codes (IDC). It could be useful when presenting a country options list from any application. This country list's URI is `/services/countries`. @@ -68,7 +68,7 @@ The ISO-3166 country codes can be represented as: - three-letter code (alpha-3) — related to the country name - three-digit numeric code (numeric-3) — useful if you need to avoid using Latin script -For details, see the [ISO-3166 glossary](http://www.iso.org/iso/home/standards/country_codes/country_codes_glossary.htm). +For details, see the [ISO-3166 glossary](https://www.iso.org/glossary-for-iso-3166.html). ## REST communication summary diff --git a/docs/community_resources/support_maintenance_faq.md b/docs/community_resources/support_maintenance_faq.md index 74a6935d34..3f6226cdde 100644 --- a/docs/community_resources/support_maintenance_faq.md +++ b/docs/community_resources/support_maintenance_faq.md @@ -45,7 +45,7 @@ To read more about language managing in [[= product_name =]], see the following #### How can I apply patches to the installation? -The easiest way to apply a patch to your project is by using the Unix [`patch`](http://man7.org/linux/man-pages/man1/patch.1.html) command. +The easiest way to apply a patch to your project is by using the Unix [`patch`](https://man7.org/linux/man-pages/man1/patch.1.html) command. Remember to clear the cache afterwards. As an alternative to manually applying the patch, you can use [composer-patches](https://github.com/cweagans/composer-patches). @@ -57,7 +57,7 @@ will be removed during `composer update` or `composer require` so they can be re When updating to the release that already contains specified patches, Composer will throw an error alongside a message that they cannot be applied and will be skipped -([this is configurable](https://github.com/cweagans/composer-patches#error-handling)). +([this is configurable](https://github.com/cweagans/composer-patches/tree/1.x#error-handling)). They can be manually removed from `composer.json` now. #### How to clear the cache properly? diff --git a/docs/extending/extending_online_editor.md b/docs/extending/extending_online_editor.md index 5c9b2a1ada..b49d87c909 100644 --- a/docs/extending/extending_online_editor.md +++ b/docs/extending/extending_online_editor.md @@ -13,7 +13,7 @@ and creating [custom buttons](online_editor_button.md) and [custom plugins](online_editor_plugin.md). Online Editor is based on the Alloy Editor. -Refer to [Alloy Editor documentation](https://alloyeditor.com/docs/develop/) to learn +Refer to [Alloy Editor documentation](https://alloyeditor.com/docs/develop/about.html) to learn how you can extend the Online Editor with even more elements. For more information about extending the Back Office UI, see [Extend Back Office](extending_back_office.md). diff --git a/docs/getting_started/install_ez_platform.md b/docs/getting_started/install_ez_platform.md index 7c10aece97..e820f0bca9 100644 --- a/docs/getting_started/install_ez_platform.md +++ b/docs/getting_started/install_ez_platform.md @@ -21,11 +21,11 @@ description: Install Ibexa DXP on a Linux system and prepare your installation f To install [[= product_name =]] you need a stack with your operating system, MySQL or MariaDB, and PHP. -You can install it by following your favorite tutorial, for example: [Install LAMP stack on Ubuntu](https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-ubuntu-18-04). +You can install it by following your favorite tutorial, for example: [Install LAMP stack on Ubuntu](https://www.digitalocean.com/community/tutorials/how-to-install-lamp-stack-on-ubuntu). Additional requirements: -- [Node.js](https://nodejs.org/en/) and [Yarn](https://yarnpkg.com/lang/en/docs/install/#debian-stable) for asset management. +- [Node.js](https://nodejs.org/en/) and [Yarn](https://classic.yarnpkg.com/en/docs/install/) for asset management. - `git` for version control. - to use search in the shop front end, you must [install a search engine](#install-and-configure-a-search-engine). @@ -183,7 +183,7 @@ run the following command: !!! note "Platform.sh" - If you are deploying your installation on [Platform.sh](https://docs.platform.sh/frameworks/ibexa.html), + If you are deploying your installation on [Platform.sh](https://docs.platform.sh/guides/ibexa/deploy.html), run the following command: ``` bash @@ -227,7 +227,7 @@ Choose a [secret]([[= symfony_doc =]]/reference/configuration/framework.html#sec and provide it in the `APP_SECRET` parameter in `.env`. It should be a random string, made up of at least 32 characters, numbers, and symbols. This is used by Symfony when generating [CSRF tokens]([[= symfony_doc =]]/security/csrf.html), -[encrypting cookies]([[= symfony_doc =]]/cookbook/security/remember_me.html), +[encrypting cookies]([[= symfony_doc =]]/security/remember_me.html), and for creating signed URIs when using [ESI (Edge Side Includes)]([[= symfony_doc =]]/http_cache/esi.html). !!! caution @@ -264,7 +264,7 @@ You may choose to replace the [default search engine](../guide/search/search.md# === "Solr" - Follow [How to set up Solr search engine](../guide/search/solr.md#how-to-set-up-solr-search-engine) to install Solr. + Follow [How to set up Solr search engine](solr.md#set-up-solr-search-engine) to install Solr. === "Elasticsearch" @@ -423,7 +423,7 @@ Finally, remove the temporary file: ### Enable the Link manager -To make use of the [Link Manager](../guide/url_management.md), you must [set up cron](../guide/url_management.md#enable-automatic-url-validation). +To make use of the [Link Manager](../guide/url_management.md), you must [set up cron](url_management.md#enabling-automatic-url-validation). #### JMS payment secret [[% include 'snippets/commerce_badge.md' %]] diff --git a/docs/getting_started/troubleshooting.md b/docs/getting_started/troubleshooting.md index f707c6ff81..5f9baf3a7b 100644 --- a/docs/getting_started/troubleshooting.md +++ b/docs/getting_started/troubleshooting.md @@ -48,9 +48,9 @@ You also need to define settings for uploading files in `php.ini`: `upload_max_f ## Cloning failed using an ssh key -When dealing with Composer packages from [updates.ibexa.co](http://updates.ibexa.co), you may get a "Cloning failed using an ssh key" error +When dealing with Composer packages from [updates.ibexa.co](https://updates.ibexa.co), you may get a "Cloning failed using an ssh key" error if you tell Composer to download dev packages or to download from source. -[updates.ibexa.co](http://updates.ibexa.co) currently supports only distribution packages in alpha stability or higher. +[updates.ibexa.co](https://updates.ibexa.co) currently supports only distribution packages in alpha stability or higher. To avoid the error, check the stability of packages and avoid using `--prefer-source`. diff --git a/docs/guide/admin_panel.md b/docs/guide/admin_panel.md index 6286130ae8..c443b35830 100644 --- a/docs/guide/admin_panel.md +++ b/docs/guide/admin_panel.md @@ -132,7 +132,7 @@ Content Types are organized into groups. You can add your own groups here to keep your Content Types in better order. -For a full tutorial, see [Create a Content Type](first_steps.md#create-a-content-type) or follow [user documentation](https://doc.ezplatform.com/projects/userguide/en/latest/organizing_the_site/#content-types). +For a full tutorial, see [Create a Content Type](first_steps.md#create-a-content-type) or follow [user documentation]([[= user_doc =]]/site_organization/organizing_the_site/#content-types). For a detailed overview of the content model, see [Content model overview](content_model.md). ## Object States diff --git a/docs/guide/bundles.md b/docs/guide/bundles.md index 4c6eb4306a..5f97a28d3c 100644 --- a/docs/guide/bundles.md +++ b/docs/guide/bundles.md @@ -54,7 +54,7 @@ see the [How to Remove a Bundle]([[= symfony_doc =]]/bundles/remove.html) instru |[ezsystems/ezplatform-rest](https://github.com/ezsystems/ezplatform-rest)|REST API| |[ezsystems/ezplatform-richtext](https://github.com/ezsystems/ezplatform-richtext)|Field Type for supporting rich-formatted text stored in a structured XML format| |[ezsystems/ezplatform-search](https://github.com/ezsystems/ezplatform-search)|Common search functionalities| -|[ezsystems/ezplatform-solr-search-engine](https://github.com/ezsystems/ezplatform-solr-search-engine)|[Solr-powered](http://lucene.apache.org/solr/) search handler| +|[ezsystems/ezplatform-solr-search-engine](https://github.com/ezsystems/ezplatform-solr-search-engine)|[Solr-powered](https://solr.apache.org/) search handler| |[ezsystems/ezplatform-standard-design](https://github.com/ezsystems/ezplatform-standard-design)|Standard design and theme to be handled by `ezplatform-design-engine`| |[ezsystems/ezplatform-user](https://github.com/ezsystems/ezplatform-user)|User management| diff --git a/docs/guide/cache/content_aware_cache.md b/docs/guide/cache/content_aware_cache.md index 2230d6a1e3..f26ec12ff3 100644 --- a/docs/guide/cache/content_aware_cache.md +++ b/docs/guide/cache/content_aware_cache.md @@ -92,7 +92,7 @@ Apache has a [hard](https://github.com/apache/httpd/blob/5f32ea94af5f1e7ea68d6fc 1\. For inline rendering just displaying the content name, image attribute, and/or link, it would be enough to: - Look into how many inline (non ESI) render calls for content rendering you are doing, and see if you can organize it differently. -- Consider inlining the views not used elsewhere in the given template and [tagging the response in Twig](#response-tagging-in-twig) with "relation" tags. +- Consider inlining the views not used elsewhere in the given template and [tagging the response in Twig](#response-tagging-in-templates) with "relation" tags. - (Optional) You can set reduced cache TTL for the given view, to reduce the risk of stale cache on subtree operations affecting the inlined content. 2\. You can opt in to set a max length parameter (in bytes) and corresponding ttl (in seconds) @@ -197,7 +197,7 @@ but parent response needs these tags to get refreshed if they are deleted: $responseTagger->addTags([ContentTagInterface::RELATION_PREFIX . '33', ContentTagInterface::RELATION_PREFIX . '34']); ``` -See [Tagging from code](https://foshttpcachebundle.readthedocs.io/en/2.8.0/features/tagging.html#tagging-and-invalidating-from-php-code) in FOSHttpCacheBundle doc. +See [Tagging from code](https://foshttpcachebundle.readthedocs.io/en/stable/features/tagging.html#tagging-and-invalidating-from-php-code) in FOSHttpCacheBundle doc. 4\. Use deprecated `X-Location-Id` header. @@ -250,7 +250,7 @@ As a last resort you can also use the following function from FOS which lets you {{ fos_httpcache_tag(['r33', 'r44']) }} ``` -See [Tagging from Twig Templates](https://foshttpcachebundle.readthedocs.io/en/latest/features/tagging.html#tagging-from-twig-templates) in FOSHttpCacheBundle documentation. +See [Tagging from Twig Templates](https://foshttpcachebundle.readthedocs.io/en/stable/features/tagging.html#tagging-from-twig-templates) in FOSHttpCacheBundle documentation. ## Tag purging @@ -400,7 +400,7 @@ To find a valid route, click an element in the **URLs** drop-down for the specif A route may look like this: `https://www.staging.foobar.com.us-2.platformsh.site/` -In this case the region is `us-2` and you can find the public IP list on [Platform.sh documentation page](https://docs.platform.sh/development/public-ips.html) +In this case the region is `us-2` and you can find the public IP list on [Platform.sh documentation page](https://docs.platform.sh/development/regions.html#public-ip-addresses) Typically, you can add a `gw` to the hostname and use nslookup to find it. ```bash diff --git a/docs/guide/cache/context_aware_cache.md b/docs/guide/cache/context_aware_cache.md index c4160b7865..232069360d 100644 --- a/docs/guide/cache/context_aware_cache.md +++ b/docs/guide/cache/context_aware_cache.md @@ -18,7 +18,7 @@ A similar but internal logic is done in the provided enhanced Symfony Proxy (App ## Request lifecycle -This expands steps covered in [FOSHttpCacheBundle documentation on user context feature](https://foshttpcachebundle.readthedocs.io/en/latest/features/user-context.html#how-it-works): +This expands steps covered in [FOSHttpCacheBundle documentation on user context feature](https://foshttpcachebundle.readthedocs.io/en/stable/features/user-context.html#how-it-works): 1. A client (browser) requests URI `/foo`. 1. The caching proxy receives the request and holds it. It first sends a hash request to the application's context hash route: `/_fos_user_context_hash`. @@ -32,7 +32,7 @@ as the hash lookup itself is cached by the cache proxy as described below. ### User context hash caching -Example of a response sent to reverse proxy from `/_fos_user_context_hash` with [[[= product_name =]]'s default config](#default-options-for-FOSHttpCacheBundle-defined-in-ibexa-dxp): +Example of a response sent to reverse proxy from `/_fos_user_context_hash` with [[[= product_name =]]'s default config](#default-options-for-foshttpcachebundle): ``` HTTP/1.1 200 OK @@ -68,6 +68,7 @@ It also varies on `Authorization` to cover any possible basic authorization head !!! caution "Default options for FOSHttpCacheBundle" + The following configuration is defined by default for FOSHttpCacheBundle. You should not override these settings unless you know what you are doing. @@ -125,16 +126,16 @@ This solution requires more effort (controller, VCL logic and adapting your own If you need to handle a paywall on a per-item basis, or example, do a lookup to backend for each URL where this is relevant. - You can find an example for paywall authorization in [FOSHTTPCache documentation.](https://foshttpcache.readthedocs.io/en/latest/user-context.html#alternative-for-paywalls-authorization-request) + You can find an example for paywall authorization in [FOSHTTPCache documentation.](https://foshttpcache.readthedocs.io/en/stable/user-context.html#alternative-for-paywalls-authorization-request) ### Best practices for custom vary by logic -For information on how user context hashes are generated, see [FOSHttpCacheBundle documentation](https://foshttpcachebundle.readthedocs.io/en/latest/features/user-context.html#generating-hashes). +For information on how user context hashes are generated, see [FOSHttpCacheBundle documentation](https://foshttpcachebundle.readthedocs.io/en/stable/features/user-context.html#generating-hashes). [[= product_name =]] implements a custom context provider in order to make user context hash reflect the current User's Roles and Limitations. This is needed given [[= product_name =]]'s more complex permission model compared to Symfony's. -You can technically extend the user context hash by [implementing your own custom context provider(s)](https://foshttpcachebundle.readthedocs.io/en/latest/reference/configuration/user-context.html#custom-context-providers). +You can technically extend the user context hash by [implementing your own custom context provider(s)](https://foshttpcachebundle.readthedocs.io/en/stable/reference/configuration/user-context.html#custom-context-providers). However, **this is strongly discouraged** as it means increasing the amount of cache variations stored in proxy for every single cache item, lowering cache hit ratio and increasing memory use. @@ -151,7 +152,7 @@ needs, and adapt the user context hash VCL logic to use the additional header. To avoid overloading any application code, take advantage of Symfony's event system: -1\. Add a [Response event (`kernel.response`)](https://symfony.com/doc/5.4/reference/events.html#kernel-response) [listener or subscriber](https://symfony.com/doc/5.4/event_dispatcher.html) to add your own hash to `/_fos_user_context_hash`: +1\. Add a [Response event (`kernel.response`)]([[= symfony_doc =]]/reference/events.html#kernel-response) [listener or subscriber]([[= symfony_doc =]]/event_dispatcher.html) to add your own hash to `/_fos_user_context_hash`: ```php public function addPreferenceHash(FilterResponseEvent $event) diff --git a/docs/guide/cache/fastly.md b/docs/guide/cache/fastly.md index 9c3b314190..d902d4e476 100644 --- a/docs/guide/cache/fastly.md +++ b/docs/guide/cache/fastly.md @@ -5,7 +5,7 @@ description: Configure Fastly for use with Ibexa DXP. # Configure and customize Fastly You can configure Fastly by using API calls or through the Fastly Web Interface. -Fastly provides a [Fastly CLI](https://developer.fastly.com/reference/cli/) for configuring Fastly through its API. +Fastly provides a [Fastly CLI](https://www.fastly.com/documentation/reference/cli/) for configuring Fastly through its API. Ibexa Cloud is delivered with Fastly preconfigured. It means that you don't have to do any changes to the Fastly configuration to make your site work. @@ -44,7 +44,7 @@ When you configure the Fastly CLI, use the credentials for the environment that Use the commands below to install VCL configuration required for running Fastly with [[= product_name =]]. You also need to set up domains, HTTPS and origin configuration (not covered here). -All commands are explained in detail [below](#viewing-and-modifying-the-vcl-configuration): +All commands are explained in detail [below](#view-and-modify-vcl-configuration): ``` bash fastly vcl custom create --name=ez_main.vcl --version=active --autoclone --content=vendor/ezsystems/ezplatform-http-cache-fastly/fastly/ez_main.vcl --main @@ -335,11 +335,11 @@ diff -ruN generated_vcl_11_json_done generated_vcl_12_json_done ## Enable basic-auth on Fastly -To enable basic-auth, use [Fastly documentation](https://developer.fastly.com/solutions/examples/http-basic-auth) as an example. +To enable basic-auth, use [Fastly documentation](https://www.fastly.com/documentation/solutions/examples/http-basic-auth/) as an example. Follow the steps below. -Usernames and passwords can be stored inside the VCL file, but in this case credentials are stored in a [dictionary](https://docs.fastly.com/en/guides/working-with-dictionaries-using-the-web-interface#working-with-dictionaries-using-vcl-snippets). +Usernames and passwords can be stored inside the VCL file, but in this case credentials are stored in a [dictionary](https://docs.fastly.com/en/guides/working-with-dictionaries#working-with-dictionaries-using-vcl-snippets). !!! note To make this example work, you must run [[= product_name =]] in version 3.3.16 or later, or 4.5. @@ -484,5 +484,3 @@ fastly vcl snippet create --name="BasicAuth recv" --version=active --autoclone - fastly vcl snippet create --name="BasicAuth error" --version=latest --priority 100 --type error --content=snippet_basic_auth_error.vcl fastly service-version activate --version=latest ``` - - diff --git a/docs/guide/cache/http_cache.md b/docs/guide/cache/http_cache.md index 37d6305361..27219571d6 100644 --- a/docs/guide/cache/http_cache.md +++ b/docs/guide/cache/http_cache.md @@ -9,8 +9,8 @@ to make Varnish and Fastly act as the view cache for the system. This and other features allow [[= product_name =]] to be scaled up to serve high traffic websites and applications. HTTP cache is handled by the [ezplatform-http-cache](https://github.com/ezsystems/ezplatform-http-cache) bundle, -which extends [friendsofsymfony/http-cache-bundle](https://foshttpcachebundle.readthedocs.io/en/2.8.0/), -a Symfony community bundle that in turn extends [Symfony HTTP cache](http://symfony.com/doc/5.1/http_cache.html). +which extends [friendsofsymfony/http-cache-bundle](https://foshttpcachebundle.readthedocs.io/en/stable/), +a Symfony community bundle that in turn extends [Symfony HTTP cache](https://symfony.com/doc/5.x/http_cache.html). For content view responses coming from [[= product_name =]] itself, this means that: diff --git a/docs/guide/cache/http_cache_config.md b/docs/guide/cache/http_cache_config.md index bd90a79fd8..1b3b20dce2 100644 --- a/docs/guide/cache/http_cache_config.md +++ b/docs/guide/cache/http_cache_config.md @@ -29,7 +29,7 @@ As the system takes care of purges, the cache should not become stale with the e A few redirect and error pages are served through the content view system. If you set a high `default_ttl`, they can also be served from cache. To avoid this, the installation ships with configuration to match these specific situations and set a much lower TTL. -[FOSHttpCacheBundle matching rules](http://foshttpcachebundle.readthedocs.io/en/2.8.0/reference/configuration/headers.html) enables you to specify a different TTL: +[FOSHttpCacheBundle matching rules](https://foshttpcachebundle.readthedocs.io/en/stable/reference/configuration/headers.html) enables you to specify a different TTL: ``` yaml fos_http_cache: diff --git a/docs/guide/cache/symfony_reverse_proxy.md b/docs/guide/cache/symfony_reverse_proxy.md index 4d9dfdc9a1..41eb9f601e 100644 --- a/docs/guide/cache/symfony_reverse_proxy.md +++ b/docs/guide/cache/symfony_reverse_proxy.md @@ -61,8 +61,8 @@ For more information on how to configure Fastly with [[= product_name =]], see [ Support for Fastly Shielding was added in [[= product_name =]] v3.3.24 and v4.1.6. - When you extend [FOSHttpCacheBundle](https://foshttpcachebundle.readthedocs.io/en/2.9.1/), - you can also adapt your VCL further with [FOSHttpCache documentation](http://foshttpcache.readthedocs.org/en/latest/varnish-configuration.html) + When you extend [FOSHttpCacheBundle](https://foshttpcachebundle.readthedocs.io/en/stable/), + you can also adapt your VCL further with [FOSHttpCache documentation](https://foshttpcache.readthedocs.io/en/stable/varnish-configuration.html) to use additional features. ## Configure Varnish and Fastly @@ -77,7 +77,7 @@ Failing to configure reverse proxies correctly may introduce several problems, i ### Configure Symfony front controller -You need to consider your `TrustedProxy` configuration when you use Symfony [behind a load balancer or a reverse proxy.](https://symfony.com/doc/5.1/deployment/proxies.html) +You need to consider your `TrustedProxy` configuration when you use Symfony [behind a load balancer or a reverse proxy.](https://symfony.com/doc/5.x/deployment/proxies.html) Set the following environment variable: - `TRUSTED_PROXIES`: String with trusted IP, multiple proxies can be configured with a comma, for example, `TRUSTED_PROXIES="192.0.0.1,10.0.0.0/8"` @@ -91,7 +91,7 @@ framework: !!! caution "Careful when trusting dynamic IP using `REMOTE_ADDR` value or similar" - On Platform.sh, Varnish does not have a static IP, like with [AWS LB](https://symfony.com/doc/5.1/deployment/proxies.html#but-what-if-the-ip-of-my-reverse-proxy-changes-constantly). + On Platform.sh, Varnish does not have a static IP, like with [AWS LB](https://symfony.com/doc/5.x/deployment/proxies.html#but-what-if-the-ip-of-my-reverse-proxy-changes-constantly). For this reason, the `TRUSTED_PROXIES` env variable supports being set to value `REMOTE_ADDR`, which is equal to: ```php @@ -104,7 +104,7 @@ framework: Make sure that **all** traffic always comes from the trusted proxy/load balancer, and that there is no other way to configure it. -When using Fastly, you need to set `trusted_proxies` according to the [IP ranges used by Fastly](https://docs.fastly.com/en/guides/accessing-fastlys-ip-ranges). +When using Fastly, you need to set `trusted_proxies` according to the [IP ranges used by Fastly](https://www.fastly.com/documentation/reference/api/utils/public-ip-list/). !!! tip @@ -194,7 +194,7 @@ For more information about configuring Captcha fields, see [Captcha field](../.. ### Use Fastly as HttpCache proxy [Fastly](https://www.fastly.com/) delivers Varnish as a CDN service and is supported with [[= product_name =]]. -To learn how it works, see [Fastly documentation](https://docs.fastly.com/guides/basic-concepts/how-fastlys-cdn-service-works). +To learn how it works, see [Fastly documentation](https://docs.fastly.com/en/guides/using-fastlys-global-pop-network). #### Configure Fastly in YML @@ -230,16 +230,16 @@ FASTLY_KEY="token" #### Configure Fastly on Platform.sh -If you use Platform.sh, it is recommended to configure all environment variables through [Platform.sh variables](https://docs.platform.sh/frameworks/ibexa/fastly.html). +If you use Platform.sh, it is recommended to configure all environment variables through [Platform.sh variables](https://docs.platform.sh/guides/ibexa/fastly.html). In [[= product_name =]], Varnish is enabled by default. To use Fastly, first you must -[disable Varnish](https://docs.platform.sh/frameworks/ibexa/fastly.html#remove-varnish-configuration) +[disable Varnish](https://docs.platform.sh/guides/ibexa/fastly.html#remove-varnish-configuration) #### Get Fastly service ID and API token -To get the service ID, log in to http://fastly.com. In the upper menu, click the **CONFIGURE** tab. +To get the service ID, log in to https://www.fastly.com/. In the upper menu, click the **CONFIGURE** tab. The service ID is displayed next to the name of your service on any page. -For instructions on how to generate a Fastly API token, see [the Fastly guide](https://docs.fastly.com/guides/account-management-and-security/using-api-tokens). +For instructions on how to generate a Fastly API token, see [the Fastly guide](https://docs.fastly.com/en/guides/using-api-tokens). The API token needs the `purge_all` an `purge_select` scopes. ### Configuration examples @@ -272,7 +272,7 @@ fastcgi_param HTTPCACHE_PURGE_SERVER "http://varnish:80"; Example for Platform.sh: -You can configure environment variables through [Platform.sh variables](https://docs.platform.sh/frameworks/ibexa/fastly.html). +You can configure environment variables through [Platform.sh variables](https://docs.platform.sh/guides/ibexa/fastly.html). !!! tip diff --git a/docs/guide/catalog/product.md b/docs/guide/catalog/product.md index 35f063c7bc..e59ec42356 100644 --- a/docs/guide/catalog/product.md +++ b/docs/guide/catalog/product.md @@ -12,7 +12,7 @@ The built-in Product Content Type contains the following Fields: |Long description | `ses_long_description` | `ezrichtext` | Long product description | |Specifications | `ses_specifications` | `sesspecificationstype` | A set of product specification values. They are indexed in the search engine and can be used for faceted search | |EAN | `ses_ean` | `ezstring` | European Article Number | -|Variants | `ses_variants` | `uivarvarianttype` | [Product variants](#product-variants) | +|Variants | `ses_variants` | `uivarvarianttype` | [Product variants](product_variants.md) | |Manufacturer SKU | `ses_manufacturer_sku` | `ezstring` | SKU of the product as assigned by the manufacturer | |Unit price | `ses_unit_price` | `ezstring` | Product price | |Product image | `ses_image_main` | ezimage | Main product image | diff --git a/docs/guide/catalog/product_variants/setting_up_variants_from_external_source.md b/docs/guide/catalog/product_variants/setting_up_variants_from_external_source.md index bf19f61eba..8d4f1547c1 100644 --- a/docs/guide/catalog/product_variants/setting_up_variants_from_external_source.md +++ b/docs/guide/catalog/product_variants/setting_up_variants_from_external_source.md @@ -7,11 +7,11 @@ You can set the variants up by [using a variant Field Type](product_variants.md) You can also set up variants if you are not using the default Content Types and don't want to set up variants manually in the Back Office. -To do this, you need to map your variant structure to the [`VariantProductNode`](product_variants.md#variantproductsnode) structure. +To do this, you need to map your variant structure to the [`VariantProductNode`](product_variant_api.md#variantproductnode) structure. !!! tip - The main job of every catalog factory is to fill the [`VariantProductNode`](product_variants.md#variantproductsnode) attribute `variantCharacteristics`. + The main job of every catalog factory is to fill the [`VariantProductNode`](product_variant_api.md#variantproductnode) attribute `variantCharacteristics`. The basic concept is to take information from the provided `dataMap` (e.g. coming from the data provider, either from the content model or from an external source) and create an attribute `variantCharacteristic` for the `VariantProductNode`. diff --git a/docs/guide/clustering_aws_s3.md b/docs/guide/clustering_aws_s3.md index 1602d851e3..d92857b922 100644 --- a/docs/guide/clustering_aws_s3.md +++ b/docs/guide/clustering_aws_s3.md @@ -14,13 +14,13 @@ meaning AWS S3 will be used to store binary files. ## Set up AWS S3 account 1. Go to  and create an account. -An [existing Amazon account can be used](http://docs.aws.amazon.com/AmazonS3/latest/gsg/SigningUpforS3.html). -1. [Choose a region](http://docs.aws.amazon.com/storagegateway/latest/userguide/available-regions-intro.html). +An [existing Amazon account can be used](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html#sign-up-for-aws). +1. [Choose a region](https://docs.aws.amazon.com/storagegateway/latest/vgw/available-regions-intro.html). The example below uses EU (Ireland): `eu-west-1` 1. Create a bucket in your chosen region and make note of the bucket name: -. +. 1. Go to the [IAM Management Console](https://console.aws.amazon.com/iam/home#/users) and create a user. -See . +See . 1. Then create a group and assign the user to the group. 1. Assign policies to the group. The `AmazonS3FullAccess` policy gives read/write access to your bucket. 1. Still in the IAM console, view the user you created. Click the "Security credentials" tab. @@ -30,7 +30,7 @@ The secret key cannot be retrieved again after the key has been created, so don' !!! note - Make sure that your bucket is [configured as Public](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/block-public-access-bucket.html) to avoid facing 403 errors, as the current S3 handler is meant to store files publicly so they can be served directly from S3. + Make sure that your bucket is [configured as Public](https://docs.aws.amazon.com/AmazonS3/latest/userguide/configuring-block-public-access-bucket.html) to avoid facing 403 errors, as the current S3 handler is meant to store files publicly so they can be served directly from S3. ## Set up [[= product_name =]] for AWS S3 @@ -77,7 +77,7 @@ ez_io: You can configure multiple handlers. For example, you could configure one called `gcloud_storage` for a third-party (community-supported) - [Google Cloud Storage adapter](https://github.com/thephpleague/flysystem#community-supported). + [Google Cloud Storage adapter](https://github.com/thephpleague/flysystem#officially-supported-adapters). In your [[= product_name =]] system settings, e.g. `config/packages/ezplatform.yaml`, enable the binary data handler: diff --git a/docs/guide/configuration/config_repository.md b/docs/guide/configuration/config_repository.md index 762a6be250..685a6a4aa1 100644 --- a/docs/guide/configuration/config_repository.md +++ b/docs/guide/configuration/config_repository.md @@ -26,9 +26,9 @@ ezplatform: Legacy storage engine is the default storage engine for the Repository. - It uses [Doctrine DBAL](http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/) (Database Abstraction Layer). + It uses [Doctrine DBAL](https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/) (Database Abstraction Layer). Database settings are supplied by [DoctrineBundle](https://github.com/doctrine/DoctrineBundle). - As such, you can refer to [DoctrineBundle's documentation](https://github.com/doctrine/DoctrineBundle/blob/master/Resources/doc/configuration.rst#doctrine-dbal-configuration). + As such, you can refer to [DoctrineBundle's documentation](https://github.com/doctrine/DoctrineBundle/blob/2.3.x/Resources/doc/configuration.rst#doctrine-dbal-configuration). If no Repository is specified for a SiteAccess or SiteAccess group, the first Repository defined under `ezplatform.repositories` will be used: @@ -83,7 +83,7 @@ ezplatform: prefix: eZ\Bundle\EzPublishCoreBundle\Entity ``` -Refer to [DoctrineBundle documentation](https://symfony.com/doc/3.4/reference/configuration/doctrine.html) +Refer to [DoctrineBundle documentation](https://symfony.com/doc/5.x/reference/configuration/doctrine.html) for more information. !!! note diff --git a/docs/guide/configuration/configuration.md b/docs/guide/configuration/configuration.md index b9495655bb..1645e80b97 100644 --- a/docs/guide/configuration/configuration.md +++ b/docs/guide/configuration/configuration.md @@ -29,7 +29,7 @@ These files contain additional settings and point to the general (not environmen !!! tip - Read more about [how configuration is handled in Symfony]([[= symfony_doc =]]/best_practices/configuration.html). + Read more about [how configuration is handled in Symfony]([[= symfony_doc =]]/best_practices.html). !!! caution "Special characters" diff --git a/docs/guide/content_management.md b/docs/guide/content_management.md index 76df8807ff..c53579bd76 100644 --- a/docs/guide/content_management.md +++ b/docs/guide/content_management.md @@ -79,7 +79,7 @@ It contains a User Group Content item. #### Forms [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]] -**Forms** is the top level Location that is intended for Forms created using the [Form Builder](https://doc.ibexa.co/projects/userguide/en/3.3/creating_forms/). +**Forms** is the top level Location that is intended for Forms created using the [Form Builder]([[= user_doc =]]/creating_forms/). ![Forms](img/content_management_forms.png "Forms") diff --git a/docs/guide/content_model.md b/docs/guide/content_model.md index 47006f0b35..b907824736 100644 --- a/docs/guide/content_model.md +++ b/docs/guide/content_model.md @@ -12,7 +12,7 @@ Each Content item is an instance of a Content Type. !!! tip - An introduction to the content model for non-developer users is available in [[[= product_name =]] user documentation](https://doc.ezplatform.com/projects/userguide/en/latest/content_model/). + An introduction to the content model for non-developer users is available in [[[= product_name =]] user documentation]([[= user_doc =]]/content_model/). ## Content items diff --git a/docs/guide/content_rendering/twig_function_reference/twig_functions_reference.md b/docs/guide/content_rendering/twig_function_reference/twig_functions_reference.md index 46a064d64c..d1795e0bb6 100644 --- a/docs/guide/content_rendering/twig_function_reference/twig_functions_reference.md +++ b/docs/guide/content_rendering/twig_function_reference/twig_functions_reference.md @@ -4,7 +4,7 @@ description: Built-in Twig functions speed up rendering content in Twig template # Twig function reference -In addition to the [native functions provided by Twig](http://twig.sensiolabs.org/doc/functions/index.html), +In addition to the [native functions provided by Twig](https://twig.symfony.com/doc/3.x/functions/index.html), and [Twig extensions provided by Symfony]([[= symfony_doc =]]/reference/twig_reference.html), [[= product_name =]] offers the following custom Twig functions and filters: diff --git a/docs/guide/forms/using_recaptcha.md b/docs/guide/forms/using_recaptcha.md index 23d16a1db2..e8601e7915 100644 --- a/docs/guide/forms/using_recaptcha.md +++ b/docs/guide/forms/using_recaptcha.md @@ -24,7 +24,7 @@ You can configure the following reCAPTCHA options in the Back Office: ### 1\. Generate the reCAPTCHA API-Key pair -Go to: http://www.google.com/recaptcha/admin and log in. +Go to: https://www.google.com/recaptcha/admin and log in. Register a new domain to get a pair of keys. diff --git a/docs/guide/internationalization.md b/docs/guide/internationalization.md index f037e55fac..231a788185 100644 --- a/docs/guide/internationalization.md +++ b/docs/guide/internationalization.md @@ -19,7 +19,7 @@ publishing the draft will not overwrite later modifications. ### Adding available languages -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](https://doc.ibexa.co/projects/userguide/en/latest/translating_content/) in the Back Office. After adding a language be sure to dump all assets to the file system: +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 =]]/translating_content/) in the Back Office. After adding a language be sure to dump all assets to the file system: ``` yarn encore diff --git a/docs/guide/multisite/site_factory_configuration.md b/docs/guide/multisite/site_factory_configuration.md index 8f2bd4f16a..72cf11f15f 100644 --- a/docs/guide/multisite/site_factory_configuration.md +++ b/docs/guide/multisite/site_factory_configuration.md @@ -88,7 +88,7 @@ ez_platform_site_factory: user_group_skeleton_remote_ids: [ , , ... ] ``` -Manage the permissions associated to the User Group skeleton by [assigning Roles](https://doc.ibexa.co/projects/userguide/en/latest/site_organization/organizing_the_site/#managing-permissions). +Manage the permissions associated to the User Group skeleton by [assigning Roles]([[= user_doc =]]/site_organization/organizing_the_site/#managing-permissions). Make sure that the Roles that you assign to the User Group skeleton do not contain Location-based Limitations. User Group skeletons cannot contain individual User Content items either. diff --git a/docs/guide/page/create_custom_page_block.md b/docs/guide/page/create_custom_page_block.md index f377abb185..d688d307fd 100644 --- a/docs/guide/page/create_custom_page_block.md +++ b/docs/guide/page/create_custom_page_block.md @@ -99,4 +99,4 @@ The following UDW configuration is used so only an `event` typed content item ca For more information, see [UDW configuration](extending_udw.md#udw-configuration). Your custom page block is now ready. -Before you can use it in Page Builder, you must [enable it in Page field settings]([[= user_doc =]]/content_management/configure_ct_field_settings/#block-display). +Before you can use it in Page Builder, you must [enable it in Page field settings]([[= user_doc_4_6 =]]/content_management/configure_ct_field_settings/#block-display). diff --git a/docs/guide/payment/payment_troubleshooting.md b/docs/guide/payment/payment_troubleshooting.md index 41d60e96f1..fd1cf12d23 100644 --- a/docs/guide/payment/payment_troubleshooting.md +++ b/docs/guide/payment/payment_troubleshooting.md @@ -9,7 +9,7 @@ edition: commerce Due to a restriction in JmsPaymentBundle, an order exceeding 99999.99999 causes an error message. -It is possible to extend this limit using an [official workaround for the JMSPaymentCoreBundle.](http://jmspaymentcorebundle.readthedocs.io/en/latest/guides/overriding_entity_mapping.html) +It is possible to extend this limit using an [official workaround for the JMSPaymentCoreBundle.](https://jmspaymentcorebundle.readthedocs.io/en/latest/guides/overriding_entity_mapping.html) You need to override the service class `Siso\Bundle\PaymentBundle\Api\StandardPaymentService` and modify the `EXCEEDED_ENTITY_AMOUNT_VALUE` constant. This constant is read by late static binding and will use the overridden value. @@ -49,7 +49,7 @@ Error: Maximum execution time of 60 seconds exceeded Occured in file /var/www/project/vendor/jms/payment-core-bundle/JMS/Payment/CoreBundle/Cryptography/MCryptEncryptionService.php line 91 ``` -The problem is with the usage of the PHP function [`mcrypt_create_iv`](http://php.net/manual/en/function.mcrypt-create-iv.php) in that line. +The problem is with the usage of the PHP function [`mcrypt_create_iv`](https://www.php.net/manual/en/function.mcrypt-create-iv.php) in that line. The default implementation uses the `/dev/urandom` device to determine a random number. This can take a long time if the hosting system doesn't generate random events fast enough. Then the call runs into a timeout. diff --git a/docs/guide/payment/paypal.md b/docs/guide/payment/paypal.md index 16fa4a1070..b934a356fa 100644 --- a/docs/guide/payment/paypal.md +++ b/docs/guide/payment/paypal.md @@ -34,7 +34,7 @@ _siso_paypal_payment: ## Getting API credentials -Provide your [PayPal API credentials](https://developer.paypal.com/docs/nvp-soap-api/apiCredentials/#api-certificates) in configuration: +Provide your [PayPal API credentials](https://developer.paypal.com/api/nvp-soap/apiCredentials/#api-certificates) in configuration: ``` yaml jms_payment_paypal: diff --git a/docs/guide/persistence_cache.md b/docs/guide/persistence_cache.md index d69b5e8209..c0fb50981d 100644 --- a/docs/guide/persistence_cache.md +++ b/docs/guide/persistence_cache.md @@ -68,7 +68,7 @@ You can select a different cache backend and configure its parameters in the rel ### Multi Repository setup -You can [configure multisite to work with multiple Repositories](multisite/multisite_configuration.md#location-id). +You can [configure multisite to work with multiple Repositories](config_repository.md). Then, in `ezplatform.yaml` you can specify which cache pool you want to use on a SiteAccess or SiteAccess group level. The following example shows use in a SiteAccess group: @@ -126,7 +126,7 @@ parameters: ### Redis -[Redis](http://redis.io/), an in-memory data structure store, is one of the supported cache solutions for clustering. +[Redis](https://redis.io/), an in-memory data structure store, is one of the supported cache solutions for clustering. Redis is used via [Redis pecl extension](https://pecl.php.net/package/redis). See [Redis Cache Adapter in Symfony documentation]([[= symfony_doc =]]/components/cache/adapters/redis_adapter.html#configure-the-connection) @@ -138,7 +138,7 @@ There are two Redis adapters available out of the box that fit different needs. ##### `Symfony\Component\Cache\Adapter\RedisTagAwareAdapter` -**Requirement**: Redis server configured with eviction [`maxmemory-policy`](https://redis.io/topics/lru-cache#eviction-policies): +**Requirement**: Redis server configured with eviction [`maxmemory-policy`](https://redis.io/docs/latest/develop/reference/eviction/#eviction-policies): `volatile-ttl`, `volatile-lru` or `volatile-lfu` (Redis 4.0+). Use of LRU or LFU is recommended. It is also possible to use `noeviction`, but it is usually not practical. @@ -191,21 +191,21 @@ See `.env`, `config/packages/ezplatform.yaml` and `config/packages/cache_pool/ca Persistence cache depends on all involved web servers, each of them seeing the same view of the cache because it's shared among them. With that in mind, the following configurations of Redis are possible: -- [Redis Cluster](https://redis.io/topics/cluster-tutorial) +- [Redis Cluster](https://redis.io/docs/latest/operate/oss_and_stack/management/scaling/) - Shards cache across several instances in order to be able to cache more than memory of one server allows - - Shard slaves can improve availability, however [they use asynchronous replication](https://redis.io/topics/cluster-tutorial#redis-cluster-consistency-guarantees) so they can't be used for reads - - Unsupported Redis features that can affect performance: [pipelining](https://github.com/phpredis/phpredis/blob/develop/cluster.markdown#pipelining) and [most multiple key commands](https://github.com/phpredis/phpredis/blob/develop/cluster.markdown#multiple-key-commands) -- [Redis Sentinel](https://redis.io/topics/sentinel) + - Shard slaves can improve availability, however [they use asynchronous replication](https://redis.io/docs/latest/operate/oss_and_stack/management/scaling/#redis-cluster-consistency-guarantees) so they can't be used for reads + - Unsupported Redis features that can affect performance: [pipelining](https://github.com/phpredis/phpredis/blob/5.3.7/cluster.markdown#pipelining) and [most multiple key commands](https://github.com/phpredis/phpredis/blob/5.3.7/cluster.markdown#multiple-key-commands) +- [Redis Sentinel](https://redis.io/docs/latest/operate/oss_and_stack/management/sentinel/) - Provides high availability by providing one or several slaves (ideally 2 slaves or more, e.g. minimum 3 servers), and handle failover - - [Slaves are asynchronously replicated](https://redis.io/topics/sentinel#fundamental-things-to-know-about-sentinel-before-deploying), so they can't be used for reads + - [Slaves are asynchronously replicated](https://redis.io/docs/latest/operate/oss_and_stack/management/sentinel/#fundamental-things-to-know-about-sentinel-before-deploying), so they can't be used for reads - Typically used with a load balancer (e.g. HAproxy with occasional calls to Redis Sentinel API) in the front in order to only speak to elected master - As of v3 you can also configure this [directly on the connection string]([[= symfony_doc =]]/components/cache/adapters/redis_adapter.html#configure-the-connection), **if** you use `Predis` instead of `php-redis` Several cloud providers have managed services that are easier to set up, handle replication and scalability for you, and might perform better. Notable services include: - [Amazon ElastiCache](https://aws.amazon.com/elasticache/) -- [Azure Redis Cache](https://azure.microsoft.com/en-us/services/cache/) -- [Google Cloud Memorystore](https://cloud.google.com/memorystore/) +- [Azure Redis Cache](https://azure.microsoft.com/en-us/products/cache/) +- [Google Cloud Memorystore](https://cloud.google.com/memorystore) ###### Ibexa Cloud / Platform.sh usage diff --git a/docs/guide/personalization/basic_integration.md b/docs/guide/personalization/basic_integration.md index bcce166d5c..e16431cea6 100644 --- a/docs/guide/personalization/basic_integration.md +++ b/docs/guide/personalization/basic_integration.md @@ -153,7 +153,7 @@ curl_close($curl); Triggers are push messages with recommendations. With this feature, your organization can invite individual visitors to return to the website or remind them of items abandoned in a cart by delivering a message, for example, by sending emails. -Before you can start [using triggers]([[= user_doc =]]/personalization/triggers), you must contact [[= product_name_base =]] and define specific conditions, for example: +Before you can start [using triggers]([[= user_doc_4_6 =]]/personalization/triggers/), you must contact [[= product_name_base =]] and define specific conditions, for example: - the time that must pass before messages start being sent - Content Types and attributes that are included in a response @@ -216,6 +216,6 @@ You can configure integration at a more advanced level to track more events, use additional parameters, apply custom scenario configurations, apply filters, and enable additional features. -For more information about available functionalities, see the [User Documentation]([[= user_doc =]]/personalization/personalization). +For more information about available functionalities, see the [User Documentation]([[= user_doc =]]/personalization/personalization/). For more information about integrating the Personalization service, see [Developer guide](developer_guide/tracking_api.md) and [Best practices](best_practices/tracking_integration.md). diff --git a/docs/guide/personalization/developer_guide/content_api.md b/docs/guide/personalization/developer_guide/content_api.md index ff2985ffaf..9d888c4f45 100644 --- a/docs/guide/personalization/developer_guide/content_api.md +++ b/docs/guide/personalization/developer_guide/content_api.md @@ -4,7 +4,7 @@ description: Personalization server can use external information about the items # Content API -Apart from the [events]([[= user_doc =]]/personalization/event_types) +Apart from the [events]([[= user_doc =]]/personalization/event_types/) collected by the recommendation client, the recommendation engine can use external information about the products. This information must be uploaded to the recommendation engine by the administrator of the website. @@ -58,7 +58,7 @@ The following call attributes are available: | Parameter name | Description | Value | |---|---|---| -| `customerid` | Your customer ID, as defined when [enabling Personalization](../enabling_personalization.md#configuring-customer-credentials) (for example, "00000"). | alphanumeric | +| `customerid` | Your customer ID, as defined when [enabling Personalization](enabling_personalization.md#setting-up-customer-credentials) (for example, "00000"). | alphanumeric | | `itemid` | A unique ID of the Content item/product. Used to identify the item in the database. | integer | | `itemtypeid` | An ID of the type of Content item/product. In most cases, the value is 1 but you might have items/products of more than one type. | integer | | `lang` | A [language code](../../internationalization.md) of the Content item/product (for example, "ger-DE"). This parameter is optional. | string | diff --git a/docs/guide/personalization/developer_guide/recommendation_api.md b/docs/guide/personalization/developer_guide/recommendation_api.md index e933e1e070..e80c9f629b 100644 --- a/docs/guide/personalization/developer_guide/recommendation_api.md +++ b/docs/guide/personalization/developer_guide/recommendation_api.md @@ -28,7 +28,7 @@ For the request to return recommendations, you must provide the following parame |Parameter|Description|Value| |---|---|---| -|`customerid`|Your customer ID, as defined when [enabling Personalization](../enabling_personalization.md#configuring-customer-credentials) (for example, "00000").|alphanumeric| +|`customerid`|Your customer ID, as defined when [enabling Personalization](enabling_personalization.md#setting-up-customer-credentials) (for example, "00000").|alphanumeric| |`userid`|An ID of the tracked user in the website (for example, an internal customer code, a session code or a cookie for anonymous users.|alphanumeric| |`scenarioid`|An ID of the scenario used for providing recommendations, as defined in the Back Office.|alphanumeric| |`extension`|A format of the response (either JSON or JSONP).|`json` or `jsonp`| @@ -40,7 +40,7 @@ For the request to return recommendations, you must provide the following parame ### Customizing the recommendation request You can customize the recommendation request by using additional query string parameters. -For example, you can send the following request to the recommendation engine:  +For example, you can send the following request to the recommendation engine: `GET https://reco.yoochoose.net/api/v2/00000/john.doe/landing_page.json ?contextitems=123&categorypath=%2FCamera%2FCompact&attribute=title&attribute=deeplink,description&numrecs=8` @@ -53,7 +53,7 @@ You can use the following parameters to customize a request: |Parameter|Example|Description|Value| |---|---|---|---| |`numrecs`|20|Defines a number of recommendations to be delivered. The lower this value, the shorter the response time. The default value is 10. |1 to 50| -|`contextitems`|10,13,14 or "CLICKED"|A comma-separated list of items that the user is viewing on the web page. The list is required by [context-based recommendations]([[= user_doc =]]/personalization/recommendation_models). All items must be of the same type. The type is defined in the scenario configuration. If history code is used ("CLICKED","CONSUMED", "OWNS", "RATED" or "BASKET"), context items are pulled from the user profile (for example, the most recent clicks or purchases). This parameter is optional. |1 to 2147483647 (or alphanumeric if enabled)| +|`contextitems`|10,13,14 or "CLICKED"|A comma-separated list of items that the user is viewing on the web page. The list is required by [context-based recommendations]([[= user_doc =]]/personalization/recommendation_models/). All items must be of the same type. The type is defined in the scenario configuration. If history code is used ("CLICKED","CONSUMED", "OWNS", "RATED" or "BASKET"), context items are pulled from the user profile (for example, the most recent clicks or purchases). This parameter is optional. |1 to 2147483647 (or alphanumeric if enabled)| |`outputtypeid`|1|Required for scenarios that are defined with multiple output item types, otherwise optional. By default it is the first/lowest output type enabled in the scenario config.|numeric| |`jsonpCallback`|"myCallback"|Function or method name (used for JSONP request only). It can be a function ("callme"), or a method ("obj.callme"). The default value is "jsonpCallback".|legal JavaScript function call| |`attribute`|"title" or "description"|If you apply this parameter, the engine tries to fetch the value of the attribute. For example, `&attribute=title` means fetching the title for the item that is delivered in the response, if available. The fetch works if content import has been successful. You can pass multiple attributes: `&attribute=title&attribute=description` or `&attribute=title,description`. Use this to pull "pure" client-based recommendations without requesting local customer data.|string| @@ -99,7 +99,7 @@ Parameter|Example|Description|Value| |---|---|---|---| |`segments`|`&segments=7,8,10,11`|ID from segment group management|string| -For more information, see [Segments]([[= user_doc =]]/personalization/segment_management). +For more information, see [Segments]([[= user_doc_4_6 =]]/personalization/segment_management/). ## Responses @@ -111,7 +111,7 @@ For more information, see inline comments below. !!! note "Previewing recommendations" You can preview the actual responses that come from the recommendation engine and how they are rendered in the user interface. - For more information, see [Scenarios]([[= user_doc =]]/personalization/scenarios/#previewing-scenario-results). + For more information, see [Scenarios]([[= user_doc =]]/personalization/previewing_scenario/). For more information about integrating recommendations in the web page, see [Best practices](../best_practices/recommendation_integration.md). @@ -258,7 +258,7 @@ Error messages can change, do not use them for automated processing. In most cases the recommendation engine's response can be cached. Depending on the recommendation model and context, it can drastically reduce the number of recommendation requests. -The recommendation service supports the following HTTP headers to enable cache control on the client side (all date values must follow the "HTTP-date" format as defined by [RFC 2616](https://tools.ietf.org/html/rfc2616)): +The recommendation service supports the following HTTP headers to enable cache control on the client side (all date values must follow the "HTTP-date" format as defined by [RFC 2616](https://datatracker.ietf.org/doc/html/rfc2616)): |Scope|Header|Description|Example| |---|---|---|---| diff --git a/docs/guide/personalization/developer_guide/tracking_api.md b/docs/guide/personalization/developer_guide/tracking_api.md index 2d37c3964a..db7a66a03a 100644 --- a/docs/guide/personalization/developer_guide/tracking_api.md +++ b/docs/guide/personalization/developer_guide/tracking_api.md @@ -13,7 +13,7 @@ The most popular user events are: - Login - When a user logs in on a website - Clickrecommended - When a user clicks a recommendation -For a complete list of events, see [Event types]([[= user_doc =]]/personalization/event_types) in the user documentation. +For a complete list of events, see [Event types]([[= user_doc =]]/personalization/event_types/) in the user documentation. Depending on the event type, some additional parameters, such as item price or user rating, must be provided. @@ -171,7 +171,7 @@ For a list of embedded parameters that each of the events may use, see the follo |Name|Description|Values| |---|---|---| -|`customerid`|A customer ID (for example "00000"). Can be used to identify a website in installations that [hosts multiple SiteAccesses]([[= user_doc =]]/personalization/use_cases/#multiple-website-hosting).|alphanumeric| +|`customerid`|A customer ID (for example "00000"). Can be used to identify a website in installations that [hosts multiple SiteAccesses]([[= user_doc_4_6 =]]/personalization/use_cases/#multiple-website-hosting).|alphanumeric| |userid|A user's ID on the website of the customer. It could be an internal customer code, a session code or a cookie for anonymous users.|URL-encoded alphanumeric| |`itemtypeid`|Item type ID.|1 to 2147483647| |`itemid`|A unique ID of the item the user has clicked.
String-based identifiers are also supported as item IDs to track content on a website, but it is discouraged due to fraud and security issues. If you are unable to provide numeric identifiers for the tracking process, contact Ibexa for further information and implementation notes.|1 to 2147483647| diff --git a/docs/guide/personalization/enabling_personalization.md b/docs/guide/personalization/enabling_personalization.md index 98ba768d6f..f0b7fadb23 100644 --- a/docs/guide/personalization/enabling_personalization.md +++ b/docs/guide/personalization/enabling_personalization.md @@ -32,5 +32,5 @@ that tracks visitor events in relation to Content Types. ## Configuring recommendation logic Once you enable the recommendation client, you can go back to the Back Office, -refresh the Personalization dashboard and proceed with [configuring the logic]([[= user_doc =]]/personalization/perso_configuration) used to calculate +refresh the Personalization dashboard and proceed with [configuring the logic]([[= user_doc =]]/personalization/perso_configuration/) used to calculate the recommendation results. diff --git a/docs/guide/personalization/personalization.md b/docs/guide/personalization/personalization.md index 8982b9e956..4d2943c139 100644 --- a/docs/guide/personalization/personalization.md +++ b/docs/guide/personalization/personalization.md @@ -29,6 +29,6 @@ The idea behind the Personalization service is built upon four main steps. ![Overview of how recommendation works](img/recommendation_overview.png) -For more information about available functionalities, see [User Documentation]([[= user_doc =]]/personalization/personalization). +For more information about available functionalities, see [User Documentation]([[= user_doc =]]/personalization/personalization/). For more information about enabling the Personalization service, see [Enabling Personalization](enabling_personalization.md). diff --git a/docs/guide/personalization/recommendation_client.md b/docs/guide/personalization/recommendation_client.md index 4a77692013..31f272be64 100644 --- a/docs/guide/personalization/recommendation_client.md +++ b/docs/guide/personalization/recommendation_client.md @@ -464,7 +464,7 @@ if the content Fields were previously exported by the export script. You can retrieve data returned from the recommendation engine and modify it before it is shown to the user. To modify recommendation data, subscribe to `RecommendationResponseEvent`. -See [`Event/Subscriber/RecommendationEventSubscriber.php`](https://github.com/ezsystems/ezrecommendation-client/blob/master/src/lib/Event/Subscriber/RecommendationEventSubscriber.php) for example: +See [`Event/Subscriber/RecommendationEventSubscriber.php`](https://github.com/ezsystems/ezrecommendation-client/blob/2.1/src/lib/Event/Subscriber/RecommendationEventSubscriber.php) for example: ``` php public static function getSubscribedEvents(): array @@ -482,7 +482,7 @@ The `-10` refers to priority, which must be negative so this action is performed Displaying image variations is not readily supported yet. You can work around this limitation by creating a template -(based on [recommendations.html.twig](https://github.com/ezsystems/ezrecommendation-client/blob/master/src/bundle/Resources/views/recommendations.html.twig)). +(based on [recommendations.html.twig](https://github.com/ezsystems/ezrecommendation-client/blob/2.1/src/bundle/Resources/views/recommendations.html.twig)). To access a specific image variation through API, add the `image` parameter to the request URL with the name of the variation as its value. For example, to retrieve the `rss` variation of the image, use: @@ -493,7 +493,7 @@ For example, to retrieve the `rss` variation of the image, use: ### Logging -Most operations are logged via the `ez_recommendation` [Monolog channel]([[= symfony_doc =]]/cookbook/logging/channels_handlers.html). +Most operations are logged via the `ez_recommendation` [Monolog channel]([[= symfony_doc =]]/logging/channels_handlers.html). To log everything about Recommendation to `dev.recommendation.log`, add the following to the `ezplatform.yaml`: ``` yaml diff --git a/docs/guide/search/search.md b/docs/guide/search/search.md index 042478d95b..efa7cb175c 100644 --- a/docs/guide/search/search.md +++ b/docs/guide/search/search.md @@ -166,7 +166,7 @@ eZ\Publish\Core\Search\Legacy\Content\Location\Gateway\SortClauseHandler\Locatio !!! note "See also" - For more information about passing parameters, see [Symfony Service Container documentation]([[= symfony_doc =]]/book/service_container.html#service-parameters). + For more information about passing parameters, see [Symfony Service Container documentation]([[= symfony_doc =]]/service_container.html#service-parameters). ### Search using custom Field Criterion [REST] diff --git a/docs/guide/security.md b/docs/guide/security.md index 2e22121fcb..f8fe02d3c5 100644 --- a/docs/guide/security.md +++ b/docs/guide/security.md @@ -46,17 +46,17 @@ logout: You can fully customize the routes and/or the controller used for login. However, remember to match `login_path`, `check_path` and `logout.path` from `security.yaml`. - See [security configuration reference]([[= symfony_doc =]]/reference/configuration/security.html) and [standard login form documentation]([[= symfony_doc =]]/security/form_login_setup.html). + See [security configuration reference]([[= symfony_doc =]]/reference/configuration/security.html) and [standard login form documentation]([[= symfony_doc =]]/security.html#form-login). ### Authentication using Symfony Security component Authentication is provided using the Symfony Security component. -[Native and universal `form_login`]([[= symfony_doc =]]/security/form_login_setup.html) is used, in conjunction with an extended `DaoAuthenticationProvider` (DAO stands for *Data Access Object*), the `RepositoryAuthenticationProvider`. Native behavior of `DaoAuthenticationProvider` has been preserved, making it possible to still use it for pure Symfony applications. +[Native and universal `form_login`]([[= symfony_doc =]]/security.html#form-login) is used, in conjunction with an extended `DaoAuthenticationProvider` (DAO stands for *Data Access Object*), the `RepositoryAuthenticationProvider`. Native behavior of `DaoAuthenticationProvider` has been preserved, making it possible to still use it for pure Symfony applications. #### Security controller -A `SecurityController` is used to manage all security-related actions and is thus used to display the login form. It follows all standards explained in [Symfony security documentation]([[= symfony_doc =]]/security/form_login_setup.html). +A `SecurityController` is used to manage all security-related actions and is thus used to display the login form. It follows all standards explained in [Symfony security documentation]([[= symfony_doc =]]/security.html#form-login). The base template used is [`EzPublishCore/Security/login.html.twig`](https://github.com/ezsystems/ezplatform-kernel/blob/v1.0.0/eZ/Bundle/EzPublishCoreBundle/Resources/views/Security/login.html.twig). @@ -94,7 +94,7 @@ If you want to use this feature, you must at least extend the login template in #### Login handlers / SSO -Symfony provides native support for [multiple user providers]([[= symfony_doc =]]/security/multiple_user_providers.html). This makes it easy to integrate any kind of login handlers, including SSO and existing third-party bundles (e.g. [FR3DLdapBundle](https://github.com/Maks3w/FR3DLdapBundle), [HWIOauthBundle](https://github.com/hwi/HWIOAuthBundle), [FOSUserBundle](https://github.com/FriendsOfSymfony/FOSUserBundle), [BeSimpleSsoAuthBundle](http://github.com/BeSimple/BeSimpleSsoAuthBundle), etc.). +Symfony provides native support for [multiple user providers]([[= symfony_doc =]]/security/user_providers.html). This makes it easy to integrate any kind of login handlers, including SSO and existing third-party bundles (e.g. [FR3DLdapBundle](https://github.com/Maks3w/FR3DLdapBundle), [HWIOauthBundle](https://github.com/hwi/HWIOAuthBundle), [FOSUserBundle](https://github.com/FriendsOfSymfony/FOSUserBundle), [BeSimpleSsoAuthBundle](https://github.com/BeSimple/BeSimpleSsoAuthBundle), etc.). See [Authenticating a user with multiple user provider](users/user_authentication.md#authenticate-user-with-multiple-user-providers) for more information. diff --git a/docs/guide/sessions.md b/docs/guide/sessions.md index 5c7bece170..2e21934d83 100644 --- a/docs/guide/sessions.md +++ b/docs/guide/sessions.md @@ -83,7 +83,7 @@ See [shared sessions in the clustering guide](clustering.md#shared-sessions). To set up [[= product_name =]] using [Memcached](https://pecl.php.net/package/memcached) you need to: -- [Configure the session save handler settings in `php.ini`](http://php.net/manual/en/memcached.sessions.php) +- [Configure the session save handler settings in `php.ini`](https://www.php.net/manual/en/memcached.sessions.php) - Set `%ezplatform.session.handler_id%` to `~` (null) in `config/packages/ezplatform.yaml` Alternatively if you need to configure Memcached servers dynamically: @@ -99,9 +99,9 @@ Alternatively if you need to configure Memcached servers dynamically: ``` - Set `%ezplatform.session.handler_id%` (or `SESSION_HANDLER_ID` env var) to `app.session.handler.native_memcached` -- Set `%ezplatform.session.save_path%` (or `SESSION_SAVE_PATH` env var) to [`save_path` config for Memcached](http://php.net/manual/en/memcached.sessions.php) +- Set `%ezplatform.session.save_path%` (or `SESSION_SAVE_PATH` env var) to [`save_path` config for Memcached](https://www.php.net/manual/en/memcached.sessions.php) -Optionally tweak [`php-memcached` session settings](http://php.net/manual/en/memcached.configuration.php) for things like +Optionally tweak [`php-memcached` session settings](https://www.php.net/manual/en/memcached.configuration.php) for things like session locking. ##### Handling sessions with Redis @@ -124,18 +124,18 @@ If you are on `php-redis` v4.2.0 and higher, you can optionally tweak [`php-redi Ideally keep [persistence cache](persistence_cache.md) and session data separated: -- Sessions can't risk getting [randomly evicted](https://redis.io/topics/lru-cache#eviction-policies) when you run out of memory for cache. +- Sessions can't risk getting [randomly evicted](https://redis.io/docs/latest/develop/reference/eviction/#eviction-policies) when you run out of memory for cache. - You can't completely disable eviction either, as Redis will then start to refuse new entries once full, including new sessions. - Either way, you should monitor your Redis instances and make sure you have enough memory set aside for active sessions/cache items. -If you want to make sure sessions survive Redis or server restarts, consider using a [persistent Redis](https://redis.io/topics/persistence) instance for sessions. +If you want to make sure sessions survive Redis or server restarts, consider using a [persistent Redis](https://redis.io/docs/latest/operate/oss_and_stack/management/persistence/) instance for sessions. ##### Alternative storing sessions in database using PDO For setups where database is preferred for storing sessions, you may use Symfony's PdoSessionHandler, although it is not currently recommended from performance perspective. -Below is a configuration example for [[= product_name =]]. Refer to the [Symfony Cookbook]([[= symfony_doc =]]/doctrine/pdo_session_storage.html) for full documentation. +Below is a configuration example for [[= product_name =]]. Refer to the [Symfony Cookbook]([[= symfony_doc =]]/session.html#session-database-pdo) for full documentation. ``` yaml framework: diff --git a/docs/guide/shop_translations.md b/docs/guide/shop_translations.md index e2776435d9..3684a440e3 100644 --- a/docs/guide/shop_translations.md +++ b/docs/guide/shop_translations.md @@ -7,7 +7,7 @@ edition: commerce You can use special translation Content items called "text modules" to create translations of the interface. The translation service first checks if a Content item with a specific identifier exists and then returns the text attribute of this object. -If it does not find any translations, the [standard Symfony translation service]([[= symfony_doc =]]/book/translation.html) is used. +If it does not find any translations, the [standard Symfony translation service]([[= symfony_doc =]]/translation.html) is used. ## Twig filter diff --git a/docs/guide/users/user_authentication.md b/docs/guide/users/user_authentication.md index e00d86c268..0d296103e2 100644 --- a/docs/guide/users/user_authentication.md +++ b/docs/guide/users/user_authentication.md @@ -6,8 +6,8 @@ description: Customize user authentication. ## Authenticate user with multiple user providers -Symfony provides native support for [multiple user providers]([[= symfony_doc =]]/security/multiple_user_providers.html). -This makes it easier to integrate any kind of login handlers, including SSO and existing third party bundles (e.g. [FR3DLdapBundle](https://github.com/Maks3w/FR3DLdapBundle), [HWIOauthBundle](https://github.com/hwi/HWIOAuthBundle), [FOSUserBundle](https://github.com/FriendsOfSymfony/FOSUserBundle), [BeSimpleSsoAuthBundle](http://github.com/BeSimple/BeSimpleSsoAuthBundle), etc.). +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 (e.g. [FR3DLdapBundle](https://github.com/Maks3w/FR3DLdapBundle), [HWIOauthBundle](https://github.com/hwi/HWIOAuthBundle), [FOSUserBundle](https://github.com/FriendsOfSymfony/FOSUserBundle), [BeSimpleSsoAuthBundle](https://github.com/BeSimple/BeSimpleSsoAuthBundle), etc.). However, to be able to use *external* user providers with [[= product_name =]], a valid Platform 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). diff --git a/docs/tutorials/platform_beginner/3_customize_the_front_page.md b/docs/tutorials/platform_beginner/3_customize_the_front_page.md index 1b2f7234f6..7150d8dc21 100644 --- a/docs/tutorials/platform_beginner/3_customize_the_front_page.md +++ b/docs/tutorials/platform_beginner/3_customize_the_front_page.md @@ -235,7 +235,7 @@ To add one template to another, edit `templates/full/home_page.html.twig` and re {% endblock %} ``` -The templating language Twig supports [template inheritance](http://twig.sensiolabs.org/doc/templates.html#template-inheritance). +The templating language Twig supports [template inheritance](https://twig.symfony.com/doc/3.x/templates.html#template-inheritance). Templates can contain named blocks. Any template can extend other templates, and modify the blocks defined by its parents. The code above points to `main_layout.html.twig` in line 1. It also wraps your "Hello world" message in a `content` block. diff --git a/mkdocs.yml b/mkdocs.yml index 4eb731ce4c..895c175e30 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -703,8 +703,9 @@ extra: latest_tag_4_5: '4.5.7' latest_tag_4_6: '4.6.17' - symfony_doc: 'http://symfony.com/doc/5.4' - user_doc: 'https://doc.ibexa.co/projects/userguide/en/master' + symfony_doc: 'https://symfony.com/doc/5.x' + user_doc: 'https://doc.ibexa.co/projects/userguide/en/3.3' + user_doc_4_6: 'https://doc.ibexa.co/projects/userguide/en/4.6' extra_css: - fonts/MavenPro.css