Skip to content

Commit 31615a1

Browse files
Merge pull request #555 from magento/511_content-snapshot-product-admin-page
[Story] 511 content snapshot product admin page
2 parents 2db591b + db6e435 commit 31615a1

File tree

16 files changed

+270
-63
lines changed

16 files changed

+270
-63
lines changed
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
declare(strict_types = 1);
8+
9+
namespace Magento\PageBuilder\Plugin\Catalog\Ui\DataProvider\Product\Form\Modifier;
10+
11+
use Magento\Catalog\Api\Data\ProductAttributeInterface;
12+
use Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\Eav as EavModifier;
13+
use Magento\Framework\Stdlib\ArrayManager;
14+
15+
/**
16+
* Data Provider for EAV Attributes on Product Page
17+
*/
18+
class EavPlugin
19+
{
20+
public const META_ATTRIBUTE_CONFIG_PATH = 'arguments/data/config';
21+
22+
/**
23+
* @var ArrayManager
24+
*/
25+
private $arrayManager;
26+
27+
/**
28+
* @param ArrayManager $arrayManager
29+
*/
30+
public function __construct(ArrayManager $arrayManager)
31+
{
32+
$this->arrayManager = $arrayManager;
33+
}
34+
35+
/**
36+
* Setup Attribute Meta
37+
*
38+
* @param EavModifier $subject
39+
* @param array $result
40+
* @param ProductAttributeInterface $attribute
41+
* @param string $groupCode
42+
* @param int $sortOrder
43+
* @return array
44+
*
45+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
46+
*/
47+
public function afterSetupAttributeMeta(
48+
EavModifier $subject,
49+
$result,
50+
ProductAttributeInterface $attribute,
51+
$groupCode,
52+
$sortOrder
53+
) {
54+
$meta = $result;
55+
56+
if ($attribute->getData('is_pagebuilder_enabled')) {
57+
$meta = $this->arrayManager->merge(
58+
static::META_ATTRIBUTE_CONFIG_PATH,
59+
$result,
60+
[
61+
'additionalClasses' => 'admin__field-wide admin__field-page-builder'
62+
]
63+
);
64+
}
65+
66+
return $meta;
67+
}
68+
69+
/**
70+
* Setup Attribute Container Meta
71+
*
72+
* @param EavModifier $subject
73+
* @param array $result
74+
* @param ProductAttributeInterface $attribute
75+
* @return array
76+
*
77+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
78+
*/
79+
public function afterSetupAttributeContainerMeta(
80+
EavModifier $subject,
81+
$result,
82+
ProductAttributeInterface $attribute
83+
) {
84+
$containerMeta = $result;
85+
86+
if ($attribute->getData('is_pagebuilder_enabled')) {
87+
$containerMeta = $this->arrayManager->merge(
88+
static::META_ATTRIBUTE_CONFIG_PATH,
89+
$result,
90+
[
91+
'additionalFieldsetClasses' => [
92+
'admin__field-wide' => true,
93+
'admin__fieldset-page-builder' => true
94+
],
95+
'template' => 'Magento_PageBuilder/form/components/group/group'
96+
]
97+
);
98+
}
99+
100+
return $containerMeta;
101+
}
102+
}

app/code/Magento/PageBuilder/Test/Mftf/Section/PageBuilderStageSection/PageBuilderPanelSection.xml

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,27 +8,27 @@
88
<sections xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
99
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Page/etc/SectionObject.xsd">
1010
<section name="PageBuilderPanel">
11-
<element name="leftPanel" type="input" selector="#pagebuilder-panel"/>
12-
<element name="searchField" type="input" selector="//*[@id=&quot;pagebuilder-panel&quot;]/div[1]/a"/>
13-
<element name="clearSearch" type="button" selector="//*[@id=&quot;pagebuilder-panel&quot;]/div[1]/a"/>
14-
<element name="firstSection" type="button" selector="//*[@id=&quot;pagebuilder-panel-menu-sections&quot;]/li[1]" timeout="30"/>
15-
<element name="allPanelMenuSections" type="button" selector="#pagebuilder-panel-menu-sections .menu-section-title"/>
16-
<element name="allMenuSectionContentTypes" type="button" selector="#pagebuilder-panel-menu-sections #menu-section-{{arg1}} .pagebuilder-draggable-content-type" parameterized="true"/>
17-
<element name="panelMenuSection" type="button" selector="//div[@id='pagebuilder-panel']//h4[.='{{arg1}}']" parameterized="true"/>
18-
<element name="panelMenuSectionActive" type="button" selector="//div[@id='pagebuilder-panel']//li[@class='active']//h4[.='{{arg1}}']" parameterized="true"/>
19-
<element name="layoutMenuSection" type="button" selector="//*[@id=&quot;menu-section-layout&quot;]" timeout="10"/>
20-
<element name="layoutMenuSectionContentType" type="button" selector="//*[@id=&quot;menu-section-layout&quot;]/div/div/ul/li/a/span[2]"/>
21-
<element name="elementsMenuSection" type="button" selector="//*[@id=&quot;menu-section-elements&quot;]"/>
22-
<element name="elementsMenuSectionContentType" type="button" selector="//*[@id=&quot;menu-section-elements&quot;]/div/div/ul/li/a/span[2]"/>
23-
<element name="mediaMenuSection" type="button" selector="//*[@id=&quot;menu-section-media&quot;]"/>
24-
<element name="mediaMenuSectionContentType" type="button" selector="//*[@id=&quot;menu-section-media&quot;]/div/div/ul/li/a/span[2]"/>
25-
<element name="addContentMenuSection" type="button" selector="//*[@id=&quot;menu-section-add_content&quot;]"/>
26-
<element name="addContentMenuSectionContentType" type="button" selector="//*[@id=&quot;menu-section-add_content&quot;]/div/div/ul/li/a/span[2]"/>
27-
<element name="searchPanel" type="input" selector="//*[@id=&quot;search-content-types-input&quot;]" timeout="30"/>
28-
<element name="searchResults" type="text" selector="//*[@id=&quot;search-results&quot;]" timeout="30"/>
29-
<element name="nothingFound" type="text" selector="//*[@id=&quot;pagebuilder-panel&quot;]/div[2]/div" timeout="30"/>
30-
<element name="draggableContentTypeInPanel" type="button" selector="//*[text()=&quot;{{arg1}}&quot;]/ancestor::*[contains(@class, &quot;ui-draggable&quot;)]" parameterized="true"/>
31-
<element name="contentTypeInMenuSection" type="button" selector="//ul[@class='pagebuilder-panel-menu-sections']//li[{{arg1}}]//h4[.='{{arg2}}']/../..//ul//li[{{arg3}}]//span[text()='{{arg4}}']" parameterized="true"/>
32-
<element name="contentTypeWithIcon" type="button" selector="//ul[@class='pagebuilder-panel-menu-sections']//span[@class='content-type-icon']//i[@class='icon-pagebuilder-{{arg2}}']/../following-sibling::span[text()='{{arg1}}']" parameterized="true"/>
11+
<element name="leftPanel" type="input" selector=".stage-is-active #pagebuilder-panel"/>
12+
<element name="searchField" type="input" selector="//div[contains(@class,'stage-is-active')]//*[@id=&quot;pagebuilder-panel&quot;]/div[1]/a"/>
13+
<element name="clearSearch" type="button" selector="//div[contains(@class,'stage-is-active')]//*[@id=&quot;pagebuilder-panel&quot;]/div[1]/a"/>
14+
<element name="firstSection" type="button" selector="//div[contains(@class,'stage-is-active')]//*[@id=&quot;pagebuilder-panel-menu-sections&quot;]/li[1]" timeout="30"/>
15+
<element name="allPanelMenuSections" type="button" selector=".stage-is-active #pagebuilder-panel-menu-sections .menu-section-title"/>
16+
<element name="allMenuSectionContentTypes" type="button" selector=".stage-is-active #pagebuilder-panel-menu-sections #menu-section-{{arg1}} .pagebuilder-draggable-content-type" parameterized="true"/>
17+
<element name="panelMenuSection" type="button" selector="//div[contains(@class,'stage-is-active')]//div[@id='pagebuilder-panel']//h4[.='{{arg1}}']" parameterized="true"/>
18+
<element name="panelMenuSectionActive" type="button" selector="//div[contains(@class,'stage-is-active')]//div[@id='pagebuilder-panel']//li[@class='active']//h4[.='{{arg1}}']" parameterized="true"/>
19+
<element name="layoutMenuSection" type="button" selector="//div[contains(@class,'stage-is-active')]//*[@id=&quot;menu-section-layout&quot;]" timeout="10"/>
20+
<element name="layoutMenuSectionContentType" type="button" selector="//div[contains(@class,'stage-is-active')]//*[@id=&quot;menu-section-layout&quot;]/div/div/ul/li/a/span[2]"/>
21+
<element name="elementsMenuSection" type="button" selector="//div[contains(@class,'stage-is-active')]//*[@id=&quot;menu-section-elements&quot;]"/>
22+
<element name="elementsMenuSectionContentType" type="button" selector="//div[contains(@class,'stage-is-active')]//*[@id=&quot;menu-section-elements&quot;]/div/div/ul/li/a/span[2]"/>
23+
<element name="mediaMenuSection" type="button" selector="//div[contains(@class,'stage-is-active')]//*[@id=&quot;menu-section-media&quot;]"/>
24+
<element name="mediaMenuSectionContentType" type="button" selector="//div[contains(@class,'stage-is-active')]//*[@id=&quot;menu-section-media&quot;]/div/div/ul/li/a/span[2]"/>
25+
<element name="addContentMenuSection" type="button" selector="//div[contains(@class,'stage-is-active')]//*[@id=&quot;menu-section-add_content&quot;]"/>
26+
<element name="addContentMenuSectionContentType" type="button" selector="//div[contains(@class,'stage-is-active')]//*[@id=&quot;menu-section-add_content&quot;]/div/div/ul/li/a/span[2]"/>
27+
<element name="searchPanel" type="input" selector="//div[contains(@class,'stage-is-active')]//*[@id=&quot;search-content-types-input&quot;]" timeout="30"/>
28+
<element name="searchResults" type="text" selector="//div[contains(@class,'stage-is-active')]//*[@id=&quot;search-results&quot;]" timeout="30"/>
29+
<element name="nothingFound" type="text" selector="//div[contains(@class,'stage-is-active')]//*[@id=&quot;pagebuilder-panel&quot;]/div[2]/div" timeout="30"/>
30+
<element name="draggableContentTypeInPanel" type="button" selector="//div[contains(@class,'stage-is-active')]//*[text()=&quot;{{arg1}}&quot;]/ancestor::*[contains(@class, &quot;ui-draggable&quot;)]" parameterized="true"/>
31+
<element name="contentTypeInMenuSection" type="button" selector="//div[contains(@class,'stage-is-active')]//ul[@class='pagebuilder-panel-menu-sections']//li[{{arg1}}]//h4[.='{{arg2}}']/../..//ul//li[{{arg3}}]//span[text()='{{arg4}}']" parameterized="true"/>
32+
<element name="contentTypeWithIcon" type="button" selector="//div[contains(@class,'stage-is-active')]//ul[@class='pagebuilder-panel-menu-sections']//span[@class='content-type-icon']//i[@class='icon-pagebuilder-{{arg2}}']/../following-sibling::span[text()='{{arg1}}']" parameterized="true"/>
3333
</section>
3434
</sections>

app/code/Magento/PageBuilder/Test/Mftf/Section/PageBuilderStageSection/PageBuilderStageSection.xml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,11 @@
1515
<element name="openFullScreen" type="button" selector="//i[@class='icon-pagebuilder-fullscreen']"/>
1616
<element name="exitFullScreen" type="button" selector=".pagebuilder-header .icon-pagebuilder-fullscreen-exit"/>
1717
<element name="stageLoading" type="button" selector="div.pagebuilder-stage-loading"/>
18-
<element name="stageWrapper" type="button" selector="//div[@class='pagebuilder-stage-wrapper']"/>
19-
<element name="enabled" type="button" selector="//div[not(contains(@class, '_disabled'))]/div[contains(@class, 'pagebuilder-wysiwyg-wrapper')]/div[@class='pagebuilder-stage-wrapper']"/>
20-
<element name="disabled" type="button" selector="//div[contains(@class, '_disabled')]/div[contains(@class, 'pagebuilder-wysiwyg-wrapper')]/div[@class='pagebuilder-stage-wrapper']"/>
21-
<element name="stageWrapperFullScreen" type="button" selector="div.pagebuilder-stage-wrapper.stage-full-screen"/>
18+
<element name="stagePreview" type="button" selector="//div[contains(@class, 'pagebuilder-stage-wrapper') and not(contains(@class, 'stage-full-screen'))]"/>
19+
<element name="stageWrapper" type="button" selector="//div[contains(@class, 'pagebuilder-stage-wrapper')]"/>
20+
<element name="enabled" type="button" selector="//div[not(contains(@class, '_disabled'))]/div[contains(@class, 'pagebuilder-wysiwyg-wrapper')]/div[contains(@class, 'pagebuilder-stage-wrapper')]"/>
21+
<element name="disabled" type="button" selector="//div[contains(@class, '_disabled')]/div[contains(@class, 'pagebuilder-wysiwyg-wrapper')]/div[contains(@class, 'pagebuilder-stage-wrapper')]"/>
22+
<element name="stageWrapperFullScreen" type="button" selector="div.pagebuilder-stage-wrapper.stage-is-active.stage-full-screen"/>
2223
<element name="stageOverlay" type="button" selector="div.pagebuilder-wysiwyg-overlay"/>
2324
<element name="stageOverlayOnHover" type="button" selector="div.pagebuilder-wysiwyg-overlay._hover"/>
2425
<element name="stageWidthJS" type="button" selector="document.querySelector('div[class~=\'root-container-container\']').clientWidth"/>

app/code/Magento/PageBuilder/Test/Mftf/Test/AdminCatalogProductPageBuilderTest/PageBuilderCatalogProductCreateProductWithFullWidthPageBuilderAttributeTest.xml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
<actionGroup ref="openPageBuilderForAttribute" stepKey="openPageBuilderForAttribute">
5757
<argument name="attributeCode" value="$$createWysiwygAttribute.attribute_code$$"/>
5858
</actionGroup>
59-
<actionGroup ref="openPageBuilderEditPanel" stepKey="openEditMenuOnStage">
59+
<actionGroup ref="openPageBuilderEditPanelByIndex" stepKey="openEditMenuOnStage">
6060
<argument name="contentType" value="PageBuilderRowContentType"/>
6161
</actionGroup>
6262
<actionGroup ref="fillSlideOutPanelFieldGeneral" stepKey="enterBackgroundColor">
@@ -75,9 +75,11 @@
7575
<click selector="{{AdminProductContentSection.sectionHeader}}" stepKey="openContentSection"/>
7676
<actionGroup ref="openPageBuilderForAttribute" stepKey="openPageBuilderForDescription">
7777
<argument name="attributeCode" value="description"/>
78+
<argument name="pageBuilderArea" value="{{PageBuilderProductAttribute.PageBuilderArea('description')}}"/>
7879
</actionGroup>
79-
<actionGroup ref="openPageBuilderEditPanel" stepKey="openDescriptionEditMenuOnStage">
80+
<actionGroup ref="openPageBuilderEditPanelByIndex" stepKey="openDescriptionEditMenuOnStage">
8081
<argument name="contentType" value="PageBuilderRowContentType"/>
82+
<argument name="contentTypeIndex" value="2"/>
8183
</actionGroup>
8284
<actionGroup ref="fillSlideOutPanelFieldGeneral" stepKey="enterDescriptionRowBackgroundColor">
8385
<argument name="property" value="PageBuilderBackgroundColor_HSV_Orange"/>

app/code/Magento/PageBuilder/Test/Mftf/Test/AdminCatalogProductPageBuilderTest/PageBuilderCatalogProductProductFullWidthValidateAttributeOrderTest.xml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@
6767
<actionGroup ref="openPageBuilderForAttribute" stepKey="openPageBuilderForAttribute1">
6868
<argument name="attributeCode" value="$$createPageBuilderAttribute1.attribute_code$$"/>
6969
</actionGroup>
70-
<actionGroup ref="openPageBuilderEditPanel" stepKey="openEditMenuOnStage">
70+
<actionGroup ref="openPageBuilderEditPanelByIndex" stepKey="openEditMenuOnStage">
7171
<argument name="contentType" value="PageBuilderRowContentType"/>
7272
</actionGroup>
7373
<actionGroup ref="fillSlideOutPanelFieldGeneral" stepKey="enterBackgroundColor">
@@ -85,9 +85,11 @@
8585
<comment userInput="Set background colour of row for our second custom attribute" stepKey="commentSetBackgroundColor1"/>
8686
<actionGroup ref="openPageBuilderForAttribute" stepKey="openPageBuilderForAttribute2">
8787
<argument name="attributeCode" value="$$createPageBuilderAttribute2.attribute_code$$"/>
88+
<argument name="pageBuilderArea" value="{{PageBuilderProductAttribute.PageBuilderArea($$createPageBuilderAttribute2.attribute_code$$)}}"/>
8889
</actionGroup>
89-
<actionGroup ref="openPageBuilderEditPanel" stepKey="openEditMenuOnStage1">
90+
<actionGroup ref="openPageBuilderEditPanelByIndex" stepKey="openEditMenuOnStage1">
9091
<argument name="contentType" value="PageBuilderRowContentType"/>
92+
<argument name="contentTypeIndex" value="2"/>
9193
</actionGroup>
9294
<actionGroup ref="fillSlideOutPanelFieldGeneral" stepKey="enterBackgroundColor1">
9395
<argument name="property" value="PageBuilderBackgroundColor_Plaintext_Green"/>

app/code/Magento/PageBuilder/Test/Mftf/Test/AdminCatalogProductPageBuilderTest/PageBuilderCatalogProductStorefrontPageBuilderFullWidthProductsContentsAreOrderedCorrectlyTest.xml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
<actionGroup ref="openPageBuilderForAttribute" stepKey="openPageBuilderForAttribute1">
6161
<argument name="attributeCode" value="$$createPageBuilderAttribute.attribute_code$$"/>
6262
</actionGroup>
63-
<actionGroup ref="openPageBuilderEditPanel" stepKey="openEditMenuOnStage">
63+
<actionGroup ref="openPageBuilderEditPanelByIndex" stepKey="openEditMenuOnStage">
6464
<argument name="contentType" value="PageBuilderRowContentType"/>
6565
</actionGroup>
6666
<actionGroup ref="fillSlideOutPanelFieldGeneral" stepKey="enterBackgroundColor">
@@ -80,11 +80,13 @@
8080
<waitForPageLoad stepKey="waitForPageLoadContentSection"/>
8181
<actionGroup ref="openPageBuilderForAttribute" stepKey="openPageBuilderForDescription">
8282
<argument name="attributeCode" value="description"/>
83+
<argument name="pageBuilderArea" value="{{PageBuilderProductAttribute.PageBuilderArea('description')}}"/>
8384
</actionGroup>
8485
<!-- Set background color of row -->
8586
<comment userInput="Set background color of row" stepKey="commentSetRowBackgroundColor"/>
86-
<actionGroup ref="openPageBuilderEditPanel" stepKey="openEditMenuOnStage1">
87+
<actionGroup ref="openPageBuilderEditPanelByIndex" stepKey="openEditMenuOnStage1">
8788
<argument name="contentType" value="PageBuilderRowContentType"/>
89+
<argument name="contentTypeIndex" value="2"/>
8890
</actionGroup>
8991
<actionGroup ref="fillSlideOutPanelFieldGeneral" stepKey="enterBackgroundColor1">
9092
<argument name="property" value="PageBuilderBackgroundColorProperty_3C3C3C"/>

app/code/Magento/PageBuilder/Test/Mftf/Test/AdminCatalogProductPageBuilderTest/PageBuilderWorksForEachCatalogProductAttributeTest.xml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@
7777
</actionGroup>
7878
<actionGroup ref="dragContentTypeToContainer" stepKey="dragHeadingIntoRow">
7979
<argument name="contentType" value="PageBuilderHeadingContentType"/>
80+
<argument name="containerTargetType" value="PageBuilderRowContentType"/>
8081
<argument name="pageBuilderArea" value="{{PageBuilderProductAttribute.PageBuilderArea($$createProductAttribute.attribute_code$$)}}"/>
8182
</actionGroup>
8283
<actionGroup ref="enterHeadingOnStage" stepKey="enterHeadingOnStage">
@@ -110,7 +111,8 @@
110111
</actionGroup>
111112
<actionGroup ref="dragContentTypeToContainer" stepKey="dragButtonsToRow">
112113
<argument name="contentType" value="PageBuilderButtonsContentType"/>
113-
<argument name="containerTargetIndex" value="2"/>
114+
<argument name="containerTargetType" value="PageBuilderRowContentType"/>
115+
<argument name="containerTargetIndex" value="3"/>
114116
<argument name="pageBuilderArea" value="{{PageBuilderProductAttribute.PageBuilderArea('description')}}"/>
115117
</actionGroup>
116118
<!-- Edit Button Item -->
@@ -151,6 +153,7 @@
151153
</actionGroup>
152154
<actionGroup ref="dragContentTypeToContainer" stepKey="dragDividerIntoRow">
153155
<argument name="contentType" value="PageBuilderDividerContentType"/>
156+
<argument name="containerTargetType" value="PageBuilderRowContentType"/>
154157
<argument name="containerTargetIndex" value="2"/>
155158
<argument name="pageBuilderArea" value="{{PageBuilderProductAttribute.PageBuilderArea('short_description')}}"/>
156159
</actionGroup>

0 commit comments

Comments
 (0)