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

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
name: "Auto Release"
on:
push:
branches: [ master, main ]
jobs:
release:
uses: thelia-modules/ReusableWorkflow/.github/workflows/auto_release.yml@main
4 changes: 2 additions & 2 deletions Action/DisplayProductsListAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
{
public const DEFAULT_LIMIT = 3;

//A product never appears in its own recommendations (#561) — neutral outside
//A product never appears in its own recommendations — neutral outside
//a product page, where :product_id is bound to the 0 sentinel. Only for the
//stateless selection: the sticky path filters AFTER its persistence logic
private const CURRENT_PRODUCT_EXCLUSION = '`product`.`id` != :product_id';
Expand Down Expand Up @@ -139,7 +139,7 @@ private function executeSticky(

//Display-only filter: the sticky rotation (displayability, backfill,
//recording) must never react to which product page is being viewed —
//a slot silently hidden here is not a freed slot (#561)
//a slot silently hidden here is not a freed slot
if ($runtimeContext->productId !== null && $runtimeContext->productId > 0) {
$productIds = array_values(array_diff($productIds, [$runtimeContext->productId]));
}
Expand Down
9 changes: 8 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,20 @@ All notable changes to this module are documented here.

The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the module adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [2.0.2] 2026-10-01

### Changed
- The module is declared stable (`<stability>prod</stability>`).
- Releases are published automatically when the version of `Config/module.xml` changes on `main`.

## [2.0.1] 2026-09-24

### Fixed
- Saving a rule or an action whose tree holds a "list of values" pick on a `:value` field (`product_default_category`, `cart_has_brand`, `cart_has_category`, `context_product_shared_feature_value`) failed with `operator "=" is not allowed for field`. The editor stores that pick as the `=` it stands for, and the compiler only accepted `in` and `notIn` on these fields: an equality on a `:value` expression now compiles as a one-item `in`, `!=` as a one-item `notIn`, each accepted when its inclusion is declared. Such a field may also declare `=` and `!=` outright.

## [2.0.0] 2026-09-16

Port of the module to Thelia 3. The Thelia 2 line (1.0.0 to 1.2.0) lived in the project the module was written for and is not published.
Port of the module to Thelia 3. The Thelia 2 line (1.x) is maintained on the `thelia2` branch.

### Added
- Back-office screens on the default-twig theme (Twig, Bootstrap 5): rule list, rule in three steps, action screen, entry in the Tools menu. Screens and menu entry follow the right granted on the module itself in the administrator profiles.
Expand Down Expand Up @@ -49,5 +55,6 @@ Port of the module to Thelia 3. The Thelia 2 line (1.0.0 to 1.2.0) lived in the
- The `/query_builder/products/{hookCode}` Symfony route, replaced by the API Platform resource.
- The `product.top` and `product.bottom` `BaseHook` front hooks, replaced by the theme hook implementation.

[2.0.2]: https://github.com/thelia-modules/QueryBuilder/releases/tag/2.0.2
[2.0.1]: https://github.com/thelia-modules/QueryBuilder/releases/tag/2.0.1
[2.0.0]: https://github.com/thelia-modules/QueryBuilder/releases/tag/2.0.0
4 changes: 2 additions & 2 deletions Config/module.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
<language>en_US</language>
<language>fr_FR</language>
</languages>
<version>2.0.1</version>
<version>2.0.2</version>
<authors>
<author>
<name>Samuel Diakité</name>
Expand All @@ -26,5 +26,5 @@
</authors>
<type>classic</type>
<thelia>3.0.0</thelia>
<stability>beta</stability>
<stability>prod</stability>
</module>
2 changes: 1 addition & 1 deletion Config/update/1.2.0.sql
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# 1.2.0 — #573 : les hooks orphelins (jamais consommés côté front) sont retirés
# 1.2.0 : les hooks orphelins (jamais consommés côté front) sont retirés
# du dictionnaire ; purge des codes fantômes encore cochés par des règles.

UPDATE `query_builder_rule`
Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ Only the fields of a data dictionary and a closed list of operators are accepted
- PHP 8.3+
- `openstudio/query-builder-bundle` ^1.1 (the back-office editor)

Thelia 2 shops use the 1.x line, maintained on the [`thelia2`](https://github.com/thelia-modules/QueryBuilder/tree/thelia2) branch.

## Installation

```bash
Expand Down
4 changes: 2 additions & 2 deletions Service/HookResultPresenter.php
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ public function present(string $hookCode, RuntimeContext $runtimeContext, bool $

//The hook slot is shared: several rules on the same hook fill a single
//budget (the highest action limit) in rule order, instead of stacking
//their own limits (#562). Presentation only — sticky cycles already
//their own limits. Presentation only — sticky cycles already
//recorded by the actions are never affected.
//Floor at 1 like SqlBuilder::compile() does on the per-action LIMIT,
//so a hand-written "limit: 0" never blanks the whole hook slot
Expand Down Expand Up @@ -87,7 +87,7 @@ public function present(string $hookCode, RuntimeContext $runtimeContext, bool $
}

//The current product carries its own offer (badge « Pour vous aujourd'hui »)
//even though it never appears in its own recommendations (#561)
//even though it never appears in its own recommendations
$offerProductIds = $runtimeContext->productId !== null && $runtimeContext->productId > 0
? array_values(array_unique([...$productIds, $runtimeContext->productId]))
: $productIds;
Expand Down
Loading