Skip to content
Merged

V5.0.6 #3069

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
276 commits
Select commit Hold shift + click to select a range
edf0209
Shopping list templates
adriendupuis Jan 28, 2026
a84fcc1
Shopping list templates
adriendupuis Jan 28, 2026
cf8c65c
install_shopping_list.md: Em. on create permission
adriendupuis Jan 29, 2026
e0f7c8c
Update rest_api_reference.html
adriendupuis Jan 29, 2026
c58dab5
About `cacheable_query_params`
adriendupuis Feb 2, 2026
d921f92
About `cacheable_query_params`
adriendupuis Feb 2, 2026
d31ea55
mkdocs.yml + page_twig_functions.md
adriendupuis Feb 2, 2026
a5a41fa
Update docs/content_management/field_types/field_type_reference/pagef…
adriendupuis Feb 2, 2026
f3bffe1
Merge branch 'cacheable-query-params' into page-twig-functions
adriendupuis Feb 2, 2026
c87e743
page_blocks.md: nobr in table
adriendupuis Feb 3, 2026
393f848
pagefield.md: Move example to file
adriendupuis Feb 3, 2026
ed2dd9b
pagefield.md: emphase on ibexa_append_cacheable_query_params optionality
adriendupuis Feb 3, 2026
afb4bf5
pagefield.md: emphase on ibexa_append_cacheable_query_params optionality
adriendupuis Feb 3, 2026
aaf1d09
data-ez-block-id -> data-ibexa-block-id
adriendupuis Feb 3, 2026
11768ad
page_twig_functions.md
adriendupuis Feb 3, 2026
8ae06dc
Merge branch '5.0' into cacheable-query-params
adriendupuis Feb 3, 2026
43cdb7f
Merge branch 'page-twig-functions' into cacheable-query-params
adriendupuis Feb 3, 2026
86cd14c
pagefield.md: Link to page_twig_functions.md
adriendupuis Feb 3, 2026
38085c2
pagefield.md: typo
adriendupuis Feb 3, 2026
4a07410
Apply suggestions from code review
adriendupuis Feb 3, 2026
190f9c5
pagefield.md: Fix style and syntax
adriendupuis Feb 3, 2026
4430edc
page_blocks.md: rewording
adriendupuis Feb 4, 2026
44d42b2
page_blocks.md: rewording+link
adriendupuis Feb 4, 2026
3481d79
Update docs/content_management/field_types/field_type_reference/pagef…
adriendupuis Feb 4, 2026
b76ddba
pagefield.md: Rewording
adriendupuis Feb 4, 2026
d9666e1
shopping_list_templates.md: Rework table
adriendupuis Feb 4, 2026
d03849f
Merge branch '5.0' into cacheable-query-params
adriendupuis Feb 4, 2026
4fb06ec
search_api.md: Add ShoppingListAdapter
adriendupuis Feb 4, 2026
89a0b62
Apply suggestions from code review
adriendupuis Feb 4, 2026
d6deae0
Merge branch '5.0' into shopping-list
adriendupuis Feb 4, 2026
bba2f96
policies.md: ShoppingListOwner
adriendupuis Feb 4, 2026
5dfbc6c
shopping_list_criteria.md: meta desc, typo
adriendupuis Feb 4, 2026
fffc6e8
shopping_list_sort_clauses.md: Table with ref links
adriendupuis Feb 4, 2026
eb654b0
shopping_list_templates.md: User menu
adriendupuis Feb 5, 2026
033e3a4
Added doc for IBX-10186
mnocon Feb 5, 2026
ff8de38
generate rest_api_reference.html
adriendupuis Feb 5, 2026
545950b
Shopping List PHP API Ref
adriendupuis Feb 5, 2026
e247b05
Added doc for variant querying
mnocon Feb 5, 2026
580dd91
Added release notes stub
mnocon Feb 6, 2026
99e2d18
Continue intro to Shopping List
adriendupuis Feb 6, 2026
edebada
shopping_list_templates.md: ShoppingListViewSubscriber
adriendupuis Feb 6, 2026
291e9f7
Merge branch '5.0' into shopping-list
adriendupuis Feb 6, 2026
a33b54b
Merge branch '5.0' into shopping-list
adriendupuis Feb 6, 2026
794dd19
shopping_list_api.md: Split in sub-sections
adriendupuis Feb 6, 2026
8bf0595
Regenerated baseline
mnocon Feb 9, 2026
350b333
Added Valkey mentions
mnocon Feb 10, 2026
1c434e7
Removed note about DFS and PostgreSQL
mnocon Feb 10, 2026
9ff9ab2
Merge remote-tracking branch 'origin/5.0' into ibea-cloud
mnocon Feb 10, 2026
29f39b2
Rebuild
mnocon Feb 10, 2026
92ff475
Renamed Platform.sh to Ibexa Cloud
mnocon Feb 10, 2026
831fa17
shopping_list_templates.md: Rewrite component usage
adriendupuis Feb 10, 2026
bf1daae
shopping_list_templates.md: Rewrite component usage
adriendupuis Feb 10, 2026
7c5afb6
Merge branch '5.0' into shopping-list
adriendupuis Feb 10, 2026
248bc55
Merge branch '5.0' into shopping-list
adriendupuis Feb 10, 2026
6b6a21f
re-generate REST API Ref after merge
adriendupuis Feb 11, 2026
8e2882e
PHP & JS CS Fixes
adriendupuis Feb 11, 2026
dafdc7c
shopping_list_templates.md: fix typo
adriendupuis Feb 11, 2026
b39d9e3
ProductViewController.php: Fix return
adriendupuis Feb 11, 2026
5ded619
Merge remote-tracking branch 'origin/shopping-list' into shopping-list
adriendupuis Feb 11, 2026
2d4d14f
Added doc for try_catch and sql in migrations
mnocon Feb 11, 2026
9d284c5
Vale suggestions
mnocon Feb 11, 2026
a65cedc
Vale suggestion
mnocon Feb 11, 2026
e9be699
Added missing code block
mnocon Feb 11, 2026
57da608
Continue search API
adriendupuis Feb 11, 2026
af4288e
Review feedback
mnocon Feb 11, 2026
e05f97d
shopping_list_templates.md: Still trying to format the table
adriendupuis Feb 11, 2026
e98cb33
shopping_list_templates.md → shopping_list_design.md
adriendupuis Feb 11, 2026
029dc09
Added info about placeholders
mnocon Feb 11, 2026
2a2451a
Added remark that not all variables must be defined
mnocon Feb 11, 2026
29696f8
Clarified the example even more
mnocon Feb 11, 2026
59dfd31
Minor adjustments
adriendupuis Feb 11, 2026
2be095b
Minor adjustments
adriendupuis Feb 11, 2026
9e0c4c6
shopping_list_api.md: Keep only one example
adriendupuis Feb 11, 2026
30ca955
Apply suggestions from code review
adriendupuis Feb 11, 2026
0bde436
Apply suggestions from code review
adriendupuis Feb 11, 2026
15eaf25
install_shopping_list.md: Highlight max_lists_per_user VS default
adriendupuis Feb 11, 2026
237335c
install_shopping_list.md: Move migration to code_samples
adriendupuis Feb 11, 2026
b4af677
shopping_list_api.md: Move to code_samples/
adriendupuis Feb 11, 2026
f2238c2
shopping_list_api.md: Move to code_samples/
adriendupuis Feb 11, 2026
cdec608
PHP & JS CS Fixes
adriendupuis Feb 11, 2026
802c4d6
shopping_list_api.md: Fix includes after fixes
adriendupuis Feb 11, 2026
c62dcdf
CartShoppingListTransferCommand.php: add comments
adriendupuis Feb 11, 2026
3618acf
composer.json + ibexa/shopping-list
adriendupuis Feb 12, 2026
3163d60
CartShoppingListTransferCommand → CartShoppingListTransferController
adriendupuis Feb 12, 2026
c239c6f
CartShoppingListTransferCommand → CartShoppingListTransferController
adriendupuis Feb 12, 2026
05fbb13
CartShoppingListTransferCommand → CartShoppingListTransferController
adriendupuis Feb 12, 2026
a64d925
ShoppingListMoveCommand.php CS
adriendupuis Feb 12, 2026
111dee3
CartShoppingListTransferController.php CS
adriendupuis Feb 12, 2026
0cc35ac
CartShoppingListTransferController.php fix argument.type
adriendupuis Feb 12, 2026
9bed077
CartShoppingListTransferController.php fix Contracts usage
adriendupuis Feb 12, 2026
00e5ae9
Merge branch '5.0' into shopping-list
adriendupuis Feb 13, 2026
d5b814e
Regenerate PHP API Ref
adriendupuis Feb 16, 2026
b93b95f
shopping_list_design.md: window.ibexaShoppingList
adriendupuis Feb 16, 2026
d23007f
shopping_list_design.md: JS events
adriendupuis Feb 16, 2026
3980ec4
Update docs/release_notes/ibexa_dxp_v5.0.md
mnocon Feb 17, 2026
359e30f
Apply suggestions from code review
mnocon Feb 17, 2026
b286cd9
Removed Memcached mentions
mnocon Feb 17, 2026
d6cc03a
add-to-shopping-list.ts: Test global.ibexaShoppingList
adriendupuis Feb 17, 2026
3698b30
shopping_list_design.md: rewrite window.ibexaShoppingList
adriendupuis Feb 17, 2026
442db3a
Revert "add-to-shopping-list.ts: Test global.ibexaShoppingList"
adriendupuis Feb 17, 2026
feaf270
Apply suggestions from code review
adriendupuis Feb 17, 2026
344b833
shopping_list_design.md: fix heading's code VS whitespace issue
adriendupuis Feb 17, 2026
f497c6c
webpack.config.js: Fix @ibexa-admin-ui
adriendupuis Feb 17, 2026
ba6c88f
Merge branch '5.0' into shopping-list
adriendupuis Feb 17, 2026
86f8a8d
Apply suggestions from code review
mnocon Feb 18, 2026
1193848
shopping_list_guide.md: details, screenshots, extensibility
adriendupuis Feb 18, 2026
efc3c70
shopping_list_guide.md: details, screenshots, extensibility
adriendupuis Feb 18, 2026
2a1751c
shopping_list_guide.md: details, screenshots, extensibility
adriendupuis Feb 18, 2026
6e70de2
shopping_list_guide.md: details, screenshots, extensibility
adriendupuis Feb 18, 2026
939f0c5
Draft Shopping list release note
adriendupuis Feb 19, 2026
64df157
Draft Shopping list release note
adriendupuis Feb 19, 2026
ba5568a
Review feedback
mnocon Feb 19, 2026
6d20aaf
Vale
mnocon Feb 19, 2026
318d85a
Improved example and clarified migration and migratoin step usage
mnocon Feb 19, 2026
9e94cb3
Apply suggestions from code review
mnocon Feb 19, 2026
4a58964
Changed example variant codes
mnocon Feb 19, 2026
885876a
Review suggestion
mnocon Feb 19, 2026
a08b665
Fixed links
mnocon Feb 19, 2026
63b1854
Removed mention about search
mnocon Feb 19, 2026
5feb876
shopping_list_guide.md: More screenshots
adriendupuis Feb 19, 2026
550e0f7
Add to cart increments by 1 the product quantity
adriendupuis Feb 19, 2026
5b95c87
Add to cart increments by 1 the product quantity
adriendupuis Feb 19, 2026
0f71e4f
Update docs/administration/back_office/back_office_configuration.md
mnocon Feb 20, 2026
7195d81
Apply suggestions from code review
mnocon Feb 20, 2026
4500e59
Reverted changes to sort clauses
mnocon Feb 20, 2026
910471d
Merge remote-tracking branch 'refs/remotes/origin/variants-query' int…
mnocon Feb 20, 2026
890e4c8
Add to cart increments by 1 the product quantity
adriendupuis Feb 20, 2026
7c82d70
Regenerate PHP API Ref
adriendupuis Feb 20, 2026
7e70fdc
Regenerate PHP API Ref
adriendupuis Feb 20, 2026
37b314e
Regenerate PHP API Ref
adriendupuis Feb 20, 2026
c070971
Regenerate REST API Ref
adriendupuis Feb 20, 2026
e889095
`ShoppingList\Value\Query\CriterionInterface`
adriendupuis Feb 20, 2026
f40660f
Merge branch '5.0' into migrations-try-catch
adriendupuis Feb 20, 2026
56c2f45
Merge branch '5.0' into cacheable-query-params
adriendupuis Feb 23, 2026
18f5bd4
Add "First release" pill
adriendupuis Feb 23, 2026
f2d1ff6
Add "First release" pills to release notes
adriendupuis Feb 23, 2026
a750dd1
release-notes.js: Also filter the ToC
adriendupuis Feb 23, 2026
11e0ceb
shopping_list_design.md: update event
adriendupuis Feb 24, 2026
5682d37
shopping_list_guide.md: Update behavior
adriendupuis Feb 24, 2026
ecc4982
shopping_list_design: Enh example
adriendupuis Feb 24, 2026
d214221
deptrac.baseline.yaml: ignore MVC View classes
adriendupuis Feb 24, 2026
a144b10
Merge branch '5.0' into shopping-list
adriendupuis Feb 24, 2026
73a9a6c
pills.scss: color management
adriendupuis Feb 25, 2026
7ba30c1
ibexa_dxp_v5.0.md: Prepare 5.0.X release note
adriendupuis Feb 25, 2026
0d57f42
Move colors to _variables.scss; Fix SCSS syntax
adriendupuis Feb 25, 2026
2dc6478
Update docs/release_notes/ibexa_dxp_v4.6.md
adriendupuis Feb 25, 2026
0a459bc
PHP API Ref: Rm MoveEntriesEvent
adriendupuis Feb 25, 2026
36f524d
shopping_list_*.md: Rm MoveEntriesEvent
adriendupuis Feb 25, 2026
7b71b5b
REST API Ref: Rm …/entries/move
adriendupuis Feb 25, 2026
e45e597
shopping_list_api.md: Rm shoppingListService->moveEntries
adriendupuis Feb 25, 2026
88baab2
Vale/self-review
mnocon Feb 26, 2026
51901bf
Rebuild
mnocon Feb 26, 2026
f98b7a0
Apply suggestions from code review
mnocon Feb 26, 2026
06f40ad
shopping_list_guide.md: Rm moving entries
adriendupuis Feb 27, 2026
947cd10
shopping_list_design.md: Rework widget example intro
adriendupuis Feb 27, 2026
5c4230e
Merge branch '5.0' into shopping-list
adriendupuis Mar 2, 2026
0db937e
month_change: true → month_change: false
adriendupuis Mar 2, 2026
6418326
month_change: false → month_change: true
adriendupuis Mar 2, 2026
cda7d02
Format docs/release_notes/ibexa_dxp_v4.6.md
adriendupuis Mar 2, 2026
8dadbf9
Review suggestion
mnocon Mar 2, 2026
69db969
Merge remote-tracking branch 'refs/remotes/origin/variants-query' int…
mnocon Mar 2, 2026
18dd04e
Update docs/release_notes/ibexa_dxp_v5.0.md
mnocon Mar 2, 2026
7f4c161
Fixed typo
mnocon Mar 2, 2026
7056dc9
Apply suggestions from code review
mnocon Mar 2, 2026
1d9cdd2
Merge remote-tracking branch 'refs/remotes/origin/ibea-cloud' into ib…
mnocon Mar 2, 2026
86c3db7
Apply suggestions from code review
mnocon Mar 2, 2026
6872389
Apply suggestions from code review
mnocon Mar 2, 2026
597139c
Converted to warning
mnocon Mar 2, 2026
14befa8
Merge remote-tracking branch 'refs/remotes/origin/ibea-cloud' into ib…
mnocon Mar 2, 2026
9498729
Apply suggestions from code review
mnocon Mar 2, 2026
6be4697
Apply suggestions from code review
mnocon Mar 2, 2026
f633001
Merge branch 'enh-release-notes' into v5.0.6
adriendupuis Mar 2, 2026
3c51f1f
Merge branch 'shopping-list' into v5.0.6
adriendupuis Mar 2, 2026
26b4ef7
Merge remote-tracking branch 'origin/ibea-cloud' into v5.0.6
adriendupuis Mar 2, 2026
f786c97
Merge remote-tracking branch 'origin/php-8.4-support' into v5.0.6
adriendupuis Mar 2, 2026
aed128a
Merge remote-tracking branch 'origin/php-8.4-support' into v4.6.28
adriendupuis Mar 2, 2026
4019619
Merge remote-tracking branch 'origin/subtree-configurations' into v5.0.6
adriendupuis Mar 2, 2026
4be5fcc
Merge remote-tracking branch 'origin/ibexa_render_parameters' into v5…
adriendupuis Mar 2, 2026
e2e9aee
Merge remote-tracking branch 'origin/migrations-try-catch' into v5.0.6
adriendupuis Mar 2, 2026
b68713d
Merge remote-tracking branch 'origin/cacheable-query-params' into v5.0.6
adriendupuis Mar 2, 2026
8aa449e
Merge remote-tracking branch 'origin/variants-query' into v5.0.6
adriendupuis Mar 2, 2026
cc565bc
Format release notes
adriendupuis Mar 2, 2026
b506d23
Added optional table
mnocon Mar 2, 2026
1ae1b75
Merge remote-tracking branch 'refs/remotes/origin/ibea-cloud' into ib…
mnocon Mar 2, 2026
353dcdc
Revert "Merge remote-tracking branch 'origin/migrations-try-catch' in…
adriendupuis Mar 3, 2026
56f3ac9
code_samples: add readonly
adriendupuis Mar 3, 2026
0a63503
Format release notes
adriendupuis Mar 3, 2026
2703f3b
install_shopping_list.md: Use SQL files
adriendupuis Mar 3, 2026
9c4c614
Merge branch 'shopping-list' into v5.0.6
adriendupuis Mar 3, 2026
6545b60
new_in_doc.md: Add releases
adriendupuis Mar 3, 2026
a4eeb8b
Merge remote-tracking branch 'origin/image-editor-blur' into v5.0.6
adriendupuis Mar 2, 2026
d8312e0
Apply suggestion from @adriendupuis
adriendupuis Mar 3, 2026
7d4a168
update_from_5.0.md: Add shopping list
adriendupuis Mar 3, 2026
e16b3da
Merge remote-tracking branch 'origin/ibea-cloud' into v5.0.6
adriendupuis Mar 3, 2026
33f7c37
Format update_from_*.md
adriendupuis Mar 3, 2026
f34263f
Merge branch 'shopping-list' into v5.0.6
adriendupuis Mar 3, 2026
559c42a
Merge branch '5.0' into v5.0.6
adriendupuis Mar 3, 2026
9a344b0
Fix links in release notes
adriendupuis Mar 3, 2026
635db9d
mkdocs.yml: Inc. latest_tag_*
adriendupuis Mar 3, 2026
11a3d80
index.md: Update newest LTS Update
adriendupuis Mar 4, 2026
25a1cdc
Merge branch 'shopping-list' into v5.0.6
adriendupuis Mar 4, 2026
f64c681
new_in_doc.md: Add CDP; fix few links
adriendupuis Mar 4, 2026
68d266a
Apply suggestions from code review
adriendupuis Mar 4, 2026
1c8fe53
Apply suggestion from @adriendupuis
adriendupuis Mar 4, 2026
6c5650f
Apply suggestion from @adriendupuis
adriendupuis Mar 4, 2026
e20e2f2
Apply suggestions from code review
adriendupuis Mar 4, 2026
4fb4b0e
Apply suggestions from code review
adriendupuis Mar 4, 2026
8cb93d6
Apply suggestion from @adriendupuis
adriendupuis Mar 4, 2026
e3f9d07
Move duplicate filtering example
adriendupuis Mar 4, 2026
4824806
shopping_list_rest_api.sh: Add jq to clear request output
adriendupuis Mar 4, 2026
2131e64
ShoppingListFilterCommand.php: increase readability
adriendupuis Mar 4, 2026
1992e37
Apply suggestion from @adriendupuis
adriendupuis Mar 4, 2026
d4ed7a2
shopping_list_design.md: Better example file intros, template before …
adriendupuis Mar 4, 2026
35876f1
Apply suggestion from @mnocon
adriendupuis Mar 4, 2026
c22c7a1
Apply suggestions from code review
adriendupuis Mar 4, 2026
0ea9e6d
search_api.md: Remove links to private repo from adapters table
adriendupuis Mar 4, 2026
205417f
shopping_list_sort_clauses.md: mv example to file, sort table
adriendupuis Mar 4, 2026
340848c
PHP & JS CS Fixes
adriendupuis Mar 4, 2026
22e061f
shopping_list_criteria.md: mv example to file, sort table
adriendupuis Mar 4, 2026
13dabf5
PHP & JS CS Fixes
adriendupuis Mar 4, 2026
611bde2
shopping_list.md: apply rewording suggestion from review
adriendupuis Mar 4, 2026
62acde4
shopping_list.md: apply rewording suggestion from review
adriendupuis Mar 4, 2026
54d16ef
Apply suggestion from @adriendupuis
adriendupuis Mar 4, 2026
49d62b5
install_shopping_list.md: apply review suggestions
adriendupuis Mar 4, 2026
4123b78
shopping_list_api.md: apply review suggestions
adriendupuis Mar 4, 2026
f91361c
shopping_list_guide.md: apply review suggestions
adriendupuis Mar 4, 2026
7c19147
shopping_list_design.md: apply review suggestions
adriendupuis Mar 4, 2026
ff021d1
shopping_list_events.md: ease word breaks
adriendupuis Mar 4, 2026
6b623f5
update_from_*.*.md: update db schema
adriendupuis Mar 4, 2026
1c6394f
update_from_*.*.md: update db schema
adriendupuis Mar 5, 2026
8eac32c
CartShoppingListTransferController: rewrite cart search loop
adriendupuis Mar 5, 2026
fe70314
CartShoppingListTransferController: strict boolean condition
adriendupuis Mar 5, 2026
1112ed7
Update code_samples/shopping_list/php_api/src/Controller/CartShopping…
adriendupuis Mar 5, 2026
0c47ea7
Update docs/release_notes/ibexa_dxp_v5.0.md
adriendupuis Mar 5, 2026
33932ed
PHP & JS CS Fixes
adriendupuis Mar 5, 2026
7f72cd4
Merge branch 'shopping-list' into v5.0.6
adriendupuis Mar 5, 2026
2907a9f
Merge branch '5.0' into v5.0.6
adriendupuis Mar 5, 2026
6b38c62
Revert "Merge remote-tracking branch 'origin/image-editor-blur' into …
adriendupuis Mar 5, 2026
0f7c94f
Revert "Merge remote-tracking branch 'origin/ibexa_render_parameters'…
adriendupuis Mar 5, 2026
6cb454d
ibexa_dxp_v5.0.md: Merging v5.0.6 entries
adriendupuis Mar 5, 2026
60a2529
ibexa_dxp_v*.*.md: Set release dates
adriendupuis Mar 5, 2026
8612356
new_in_doc.md: About yarn before composer
adriendupuis Mar 5, 2026
b2eceef
ibexa_dxp_v4.6.md: PHP API new event
adriendupuis Mar 5, 2026
002d248
ibexa_dxp_v5.0.md: Add security
adriendupuis Mar 5, 2026
7ec14b2
PHP API Ref HTML
ibexa-workflow-automation-1[bot] Mar 5, 2026
3f3c238
REST API Ref HTML
ibexa-workflow-automation-1[bot] Mar 5, 2026
12b9690
REST API OpenAPI spec
ibexa-workflow-automation-1[bot] Mar 5, 2026
1ebad4f
Merge remote-tracking branch 'origin/api_refs_v5.0.6' into v5.0.6
adriendupuis Mar 5, 2026
16c6280
ibexa_dxp_v5.0.md: PHP API new namespaces
adriendupuis Mar 5, 2026
bd1a2ce
ibexa_dxp_v5.0.md: PHP API new namespaces
adriendupuis Mar 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@
use Ibexa\Contracts\ProductCatalog\Local\LocalProductServiceInterface;
use Ibexa\Contracts\ProductCatalog\Local\Values\Product\ProductVariantCreateStruct;
use Ibexa\Contracts\ProductCatalog\ProductServiceInterface;
use Ibexa\Contracts\ProductCatalog\Values\Content\Query\Criterion\ProductCriterionAdapter;
use Ibexa\Contracts\ProductCatalog\Values\Product\ProductVariantQuery;
use Ibexa\Contracts\ProductCatalog\Values\Product\Query\Criterion;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
Expand Down Expand Up @@ -46,12 +48,24 @@ protected function execute(InputInterface $input, OutputInterface $output): int
$productCode = $input->getArgument('productCode');
$product = $this->productService->getProduct($productCode);

// Get variants
$variantQuery = new ProductVariantQuery(0, 5);
// Get variants filtered by variant codes
$codeQuery = new ProductVariantQuery();
$codeQuery->setVariantCodes(['DESK-red', 'DESK-blue']);
$specificVariants = $this->productService->findProductVariants($product, $codeQuery)->getVariants();

$variants = $this->productService->findProductVariants($product, $variantQuery)->getVariants();
// Get variants with specific attributes
$combinedQuery = new ProductVariantQuery();
$combinedQuery->setAttributesCriterion(
new ProductCriterionAdapter(
new Criterion\LogicalAnd([
new Criterion\ColorAttribute('color', ['red', 'blue']),
new Criterion\IntegerAttribute('size', 42),
])
)
);
$filteredVariants = $this->productService->findProductVariants($product, $combinedQuery)->getVariants();

foreach ($variants as $variant) {
foreach ($specificVariants as $variant) {
$output->writeln($variant->getName());
$attributes = $variant->getDiscriminatorAttributes();
foreach ($attributes as $attribute) {
Expand All @@ -61,12 +75,30 @@ protected function execute(InputInterface $input, OutputInterface $output): int

// Create a variant
$variantCreateStructs = [
new ProductVariantCreateStruct(['color' => 'oak', 'frame_color' => 'white'], 'DESK1'),
new ProductVariantCreateStruct(['color' => 'white', 'frame_color' => 'black'], 'DESK2'),
new ProductVariantCreateStruct(['color' => 'oak', 'frame_color' => 'white'], 'DESK-red'),
new ProductVariantCreateStruct(['color' => 'white', 'frame_color' => 'black'], 'DESK-blue'),
];

$this->localProductService->createProductVariants($product, $variantCreateStructs);

// Search variants across all products
$query = new ProductVariantQuery();
$query->setVariantCodes(['DESK-red', 'DESK-blue']);
$variantList = $this->productService->findVariants($query);

foreach ($variantList->getVariants() as $variant) {
$output->writeln($variant->getName());
}

// Search variants with attribute criterion
$colorQuery = new ProductVariantQuery();
$colorQuery->setAttributesCriterion(
new ProductCriterionAdapter(
new Criterion\ColorAttribute('color', ['red'])
)
);
$redVariants = $this->productService->findVariants($colorQuery);

return self::SUCCESS;
}
}
22 changes: 22 additions & 0 deletions code_samples/page/pagefield_layout.html.twig
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<div>
{# The required attribute for the displayed zone #}
<div data-ibexa-zone-id="{{ zones[0].id }}">
{# If a zone with [0] index contains any blocks #}
{% if zones[0].blocks %}
{# for each block #}
{% for block in blocks %}
{# create a new layer with appropriate ID #}
<div class="landing-page__block block_{{ block.type }}" data-ibexa-block-id="{{ block.id }}">
{# render the block by using the "Ibexa\\Bundle\\FieldTypePage\\Controller\\BlockController::renderAction" controller #}
{# location.id is the ID of the Location of the current content item, block.id is the ID of the current block #}
{{ render_esi(controller('Ibexa\\Bundle\\FieldTypePage\\Controller\\BlockController::renderAction', {
'locationId': locationId,
'blockId': block.id,
'versionNo': versionInfo.versionNo,
'languageCode': field.languageCode
}, ibexa_append_cacheable_query_params(block))) }}
</div>
{% endfor %}
{% endif %}
</div>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// Shopping list service
import ShoppingList from '@ibexa-shopping-list/src/bundle/Resources/public/js/component/shopping.list';
// The Add to shopping list interaction
import { AddToShoppingList } from '@ibexa-shopping-list/src/bundle/Resources/public/js/component/add.to.shopping.list';
// List of all user's shopping lists
import { ShoppingListsList } from '@ibexa-shopping-list/src/bundle/Resources/public/js/component/shopping.lists.list';

(function (global: Window, doc: Document) {
const shoppingList = new ShoppingList();
shoppingList.init(); // Fetch user's shopping lists

const addToShoppingListsNodes = doc.querySelectorAll<HTMLDivElement>('.ibexa-sl-add-to-shopping-list');
addToShoppingListsNodes.forEach((addToShoppingListNode) => {
const addToShoppingList = new AddToShoppingList({ node: addToShoppingListNode, ListClass: ShoppingListsList });

addToShoppingList.init();
});
})(window, window.document);
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
ibexa:
system:
default:
content_view:
full:
product:
controller: 'App\Controller\ProductViewController::viewAction'
template: '@ibexadesign/full/product.html.twig'
match:
'@Ibexa\Contracts\ProductCatalog\ViewMatcher\ProductBased\IsProduct': true
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<?php declare(strict_types=1);

namespace App\Controller;

use Ibexa\Contracts\Core\Repository\Iterator\BatchIterator;
use Ibexa\Contracts\ProductCatalog\Iterator\BatchIteratorAdapter\ProductVariantFetchAdapter;
use Ibexa\Contracts\ProductCatalog\Local\LocalProductServiceInterface;
use Ibexa\Contracts\ProductCatalog\Values\Product\ProductVariantQuery;
use Ibexa\Core\MVC\Symfony\View\ContentView;
use Ibexa\Core\MVC\Symfony\View\View;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;

class ProductViewController extends AbstractController
{
public function __construct(private readonly LocalProductServiceInterface $productService)
{
}

public function viewAction(Request $request, ContentView $view): View
{
$product = $this->productService->getProductFromContent($view->getContent());
if ($product->isBaseProduct()) {
$view->addParameters([
'variants' => new BatchIterator(new ProductVariantFetchAdapter(
$this->productService,
$product,
new ProductVariantQuery(),
)),
]);
}

return $view;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
{% extends '@ibexadesign/pagelayout.html.twig' %}

{% set product = content|ibexa_get_product %}

{% block meta %}
{% set token = csrf_token ?? csrf_token(ibexa_get_rest_csrf_token_intention()) %}
<meta name="CSRF-Token" content="{{ token }}"/>
<meta name="SiteAccess" content="{{ app.request.get('siteaccess').name }}"/>
{% endblock %}

{% block content %}
<span>{{ ibexa_content_name(content) }}</span>
<code>{{ product.code }}</code>
{% if not product.isBaseProduct() and can_view_shopping_list and can_edit_shopping_list %}
{% set component %}
{% include '@ibexadesign/shopping_list/component/add_to_shopping_list/add_to_shopping_list.html.twig' with {
product_code: product.code,
} %}
{% endset %}
{{ _self.add_to_shopping_list(product, component) }}
{% endif %}

{% if product.isBaseProduct() %}
<ul>
{% for variant in variants %}
<li>
<span>{{ variant.name }}</span>
<code>{{ variant.code }}</code>
{% if can_view_shopping_list and can_edit_shopping_list %}
{% set component %}
{% include '@ibexadesign/shopping_list/component/add_to_shopping_list/add_to_shopping_list.html.twig' with {
product_code: variant.code,
} %}
{% endset %}
{{ _self.add_to_shopping_list(variant, component) }}
{% endif %}
</li>
{% endfor %}
</ul>
{% endif %}
{% endblock %}

{% block javascripts %}
{{ encore_entry_script_tags('add-to-shopping-list-js') }}
{% endblock %}

{% macro add_to_shopping_list(product, component) %}
{% set widget_id = 'add-to-shopping-list-' ~ product.code|slug %}
<div style="display: inline-block;">
<button onclick="(function(){let e=document.getElementById('{{ widget_id }}'); e.style.display=('none'===window.getComputedStyle(e).display)?'block':'none';})()">
Add to shopping list
</button>
<div id="{{ widget_id }}" style="display: none; position: absolute; background: #fff;">
{{ component }}
</div>
</div>
{% endmacro %}
61 changes: 61 additions & 0 deletions code_samples/shopping_list/add_to_shopping_list/webpack.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
const fs = require('fs');
const path = require('path');
const Encore = require('@symfony/webpack-encore');
const getWebpackConfigs = require('@ibexa/frontend-config/webpack-config/get-configs');
const customConfigsPaths = require('./var/encore/ibexa.webpack.custom.config.js');

const customConfigs = getWebpackConfigs(Encore, customConfigsPaths);
const isReactBlockPathCreated = fs.existsSync('./assets/page-builder/react/blocks');

Encore.reset();
Encore
.setOutputPath('public/build/')
.setPublicPath('/build')
.enableSassLoader()
.enableReactPreset((options) => {
options.runtime = 'classic';
})
.enableSingleRuntimeChunk()
.copyFiles({
from: './assets/images',
to: 'images/[path][name].[ext]',
pattern: /\.(png|svg)$/,
})
.configureBabelPresetEnv((config) => {
config.useBuiltIns = 'usage';
config.corejs = 3;
});

// Welcome page stylesheets
Encore.addEntry('welcome-page-css', [
path.resolve(__dirname, './assets/scss/welcome-page.scss'),
]);

// Welcome page javascripts
Encore.addEntry('welcome-page-js', [
path.resolve(__dirname, './assets/js/welcome.page.js'),
]);

if (isReactBlockPathCreated) {
// React Blocks javascript
Encore.addEntry('react-blocks-js', './assets/js/react.blocks.js');
}

//Encore.addEntry('app', './assets/app.js');

Encore
.enableTypeScriptLoader()
.addAliases({
'@ibexa-shopping-list': path.resolve('./vendor/ibexa/shopping-list'),
'@ibexa-admin-ui': path.resolve('./vendor/ibexa/admin-ui'), // @ibexa-admin-ui/…/text.helper dependency
})
.addEntry('add-to-shopping-list-js', [
path.resolve(__dirname, './assets/js/add-to-shopping-list.ts'),
])
;

const projectConfig = Encore.getWebpackConfig();

projectConfig.name = 'app';

module.exports = [...customConfigs, projectConfig];
32 changes: 32 additions & 0 deletions code_samples/shopping_list/install/schema.mysql.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
CREATE TABLE ibexa_shopping_list (
id INT AUTO_INCREMENT NOT NULL,
owner_id INT NOT NULL,
identifier CHAR(36) NOT NULL COMMENT '(DC2Type:guid)',
name VARCHAR(190) DEFAULT NULL,
created_at DATETIME NOT NULL COMMENT '(DC2Type:datetime_immutable)',
updated_at DATETIME NOT NULL COMMENT '(DC2Type:datetime_immutable)',
is_default TINYINT(1) DEFAULT 0 NOT NULL,
UNIQUE INDEX ibexa_shopping_list_identifier_idx (identifier),
INDEX ibexa_shopping_list_owner_idx (owner_id),
INDEX ibexa_shopping_list_default_idx (is_default),
PRIMARY KEY(id)
) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_520_ci` ENGINE = InnoDB;
CREATE TABLE ibexa_shopping_list_entry (
id INT AUTO_INCREMENT NOT NULL,
shopping_list_id INT NOT NULL,
product_code VARCHAR(64) NOT NULL,
identifier CHAR(36) NOT NULL COMMENT '(DC2Type:guid)',
added_at DATETIME NOT NULL COMMENT '(DC2Type:datetime_immutable)',
UNIQUE INDEX ibexa_shopping_list_entry_identifier_idx (identifier),
INDEX ibexa_shopping_list_entry_list_idx (shopping_list_id),
INDEX ibexa_shopping_list_entry_product_idx (product_code),
INDEX ibexa_shopping_list_entry_added_at_idx (added_at),
UNIQUE INDEX ibexa_shopping_list_entry_unique (shopping_list_id, product_code),
PRIMARY KEY(id)
) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_520_ci` ENGINE = InnoDB;
ALTER TABLE ibexa_shopping_list
ADD CONSTRAINT ibexa_shopping_list_owner_fk FOREIGN KEY (owner_id) REFERENCES ibexa_user (contentobject_id) ON UPDATE CASCADE ON DELETE CASCADE;
ALTER TABLE ibexa_shopping_list_entry
ADD CONSTRAINT ibexa_shopping_list_entry_list_fk FOREIGN KEY (shopping_list_id) REFERENCES ibexa_shopping_list (id) ON UPDATE CASCADE ON DELETE CASCADE;
ALTER TABLE ibexa_shopping_list_entry
ADD CONSTRAINT ibexa_shopping_list_entry_product_fk FOREIGN KEY (product_code) REFERENCES ibexa_product (code) ON UPDATE CASCADE ON DELETE CASCADE;
35 changes: 35 additions & 0 deletions code_samples/shopping_list/install/schema.postgresql.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
CREATE TABLE ibexa_shopping_list (
id SERIAL NOT NULL,
owner_id INT NOT NULL,
identifier UUID NOT NULL,
name VARCHAR(190) DEFAULT NULL,
created_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL,
updated_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL,
is_default BOOLEAN DEFAULT false NOT NULL,
PRIMARY KEY (id)
);
CREATE UNIQUE INDEX ibexa_shopping_list_identifier_idx ON ibexa_shopping_list (identifier);
CREATE INDEX ibexa_shopping_list_owner_idx ON ibexa_shopping_list (owner_id);
CREATE INDEX ibexa_shopping_list_default_idx ON ibexa_shopping_list (is_default);
COMMENT ON COLUMN ibexa_shopping_list.created_at IS '(DC2Type:datetime_immutable)';
COMMENT ON COLUMN ibexa_shopping_list.updated_at IS '(DC2Type:datetime_immutable)';
CREATE TABLE ibexa_shopping_list_entry (
id SERIAL NOT NULL,
shopping_list_id INT NOT NULL,
product_code VARCHAR(64) NOT NULL,
identifier UUID NOT NULL,
added_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL,
PRIMARY KEY (id)
);
CREATE UNIQUE INDEX ibexa_shopping_list_entry_identifier_idx ON ibexa_shopping_list_entry (identifier);
CREATE INDEX ibexa_shopping_list_entry_list_idx ON ibexa_shopping_list_entry (shopping_list_id);
CREATE INDEX ibexa_shopping_list_entry_product_idx ON ibexa_shopping_list_entry (product_code);
CREATE INDEX ibexa_shopping_list_entry_added_at_idx ON ibexa_shopping_list_entry (added_at);
CREATE UNIQUE INDEX ibexa_shopping_list_entry_unique ON ibexa_shopping_list_entry (shopping_list_id, product_code);
COMMENT ON COLUMN ibexa_shopping_list_entry.added_at IS '(DC2Type:datetime_immutable)';
ALTER TABLE ibexa_shopping_list
ADD CONSTRAINT ibexa_shopping_list_owner_fk FOREIGN KEY (owner_id) REFERENCES ibexa_user (contentobject_id) ON UPDATE CASCADE ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE;
ALTER TABLE ibexa_shopping_list_entry
ADD CONSTRAINT ibexa_shopping_list_entry_list_fk FOREIGN KEY (shopping_list_id) REFERENCES ibexa_shopping_list (id) ON UPDATE CASCADE ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE;
ALTER TABLE ibexa_shopping_list_entry
ADD CONSTRAINT ibexa_shopping_list_entry_product_fk FOREIGN KEY (product_code) REFERENCES ibexa_product (code) ON UPDATE CASCADE ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE;
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
- type: reference
mode: load
filename: references/customer_group_references.yml

- type: role
mode: create
metadata:
identifier: Shopping List User
policies:
- module: shopping_list
function: create
limitations:
- identifier: ShoppingListOwner
values: [self]
- module: shopping_list
function: view
limitations:
- identifier: ShoppingListOwner
values: [self]
- module: shopping_list
function: edit
limitations:
- identifier: ShoppingListOwner
values: [self]
- module: shopping_list
function: delete
limitations:
- identifier: ShoppingListOwner
values: [self]
actions:
- action: assign_role_to_user_group
value:
id: 'reference:ref__checkout__customers_user_group__content_id'
Loading
Loading