diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_creditmemo_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_creditmemo_grid.xml index ecc2b5beee32190c5e4d407ece25344840c10259..10b7b1c028c6636e8700c272fbec254e2ede2754 100644 --- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_creditmemo_grid.xml +++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_creditmemo_grid.xml @@ -35,7 +35,13 @@ <listingToolbar name="listing_top"> <bookmark name="bookmarks"/> <columnsControls name="columns_controls"/> - <exportButton name="export_button"/> + <exportButton name="export_button"> + <settings> + <additionalParams> + <param xsi:type="string" active="true" name="order_id">*</param> + </additionalParams> + </settings> + </exportButton> <filterSearch name="fulltext"/> <filters name="listing_filters"> <filterSelect name="store_id" provider="${ $.parentName }"> diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_invoice_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_invoice_grid.xml index 3ec450a570b463c6b966364d10fdb41df05bc20b..ac1233c5e4961209433fcf6c442eb2c2fd067a06 100644 --- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_invoice_grid.xml +++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_invoice_grid.xml @@ -35,7 +35,13 @@ <listingToolbar name="listing_top"> <bookmark name="bookmarks"/> <columnsControls name="columns_controls"/> - <exportButton name="export_button"/> + <exportButton name="export_button"> + <settings> + <additionalParams> + <param xsi:type="string" active="true" name="order_id">*</param> + </additionalParams> + </settings> + </exportButton> <filterSearch name="fulltext"/> <filters name="listing_filters"> <filterSelect name="store_id" provider="${ $.parentName }"> diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml index 27cef507421632e4f798a3ad6609ff2a5f87ed37..6db77a79b8c1496900e9655d3762943c52545e43 100644 --- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml +++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml @@ -35,7 +35,13 @@ <listingToolbar name="listing_top"> <bookmark name="bookmarks"/> <columnsControls name="columns_controls"/> - <exportButton name="export_button"/> + <exportButton name="export_button"> + <settings> + <additionalParams> + <param xsi:type="string" active="true" name="order_id">*</param> + </additionalParams> + </settings> + </exportButton> <filterSearch name="fulltext"/> <filters name="listing_filters"> <filterSelect name="store_id" provider="${ $.parentName }"> diff --git a/app/code/Magento/Ui/Component/ExportButton.php b/app/code/Magento/Ui/Component/ExportButton.php index 9d5f12583900316e89709bb7663a4bf74e499f38..284362a119bad030efce899ac08a4c6b127bf1c3 100644 --- a/app/code/Magento/Ui/Component/ExportButton.php +++ b/app/code/Magento/Ui/Component/ExportButton.php @@ -54,11 +54,13 @@ class ExportButton extends AbstractComponent */ public function prepare() { + $context = $this->getContext(); $config = $this->getData('config'); if (isset($config['options'])) { $options = []; foreach ($config['options'] as $option) { - $option['url'] = $this->urlBuilder->getUrl($option['url']); + $additionalParams = $this->getAdditionalParams($config, $context); + $option['url'] = $this->urlBuilder->getUrl($option['url'], $additionalParams); $options[] = $option; } $config['options'] = $options; @@ -66,4 +68,25 @@ class ExportButton extends AbstractComponent } parent::prepare(); } + + /** + * Get export button additional parameters + * + * @param array $config + * @param ContextInterface $context + * @return array + */ + protected function getAdditionalParams($config, $context) + { + $additionalParams = []; + if (isset($config['additionalParams'])) { + foreach ($config['additionalParams'] as $paramName => $paramValue) { + if ('*' == $paramValue) { + $paramValue = $context->getRequestParam($paramName); + } + $additionalParams[$paramName] = $paramValue; + } + } + return $additionalParams; + } } diff --git a/app/code/Magento/Ui/TemplateEngine/Xhtml/Result.php b/app/code/Magento/Ui/TemplateEngine/Xhtml/Result.php index cda3106a14f492af4c60fa383a2278321016308d..bd1dde10f8eedbcb958290f3882ae98c3b3498a0 100644 --- a/app/code/Magento/Ui/TemplateEngine/Xhtml/Result.php +++ b/app/code/Magento/Ui/TemplateEngine/Xhtml/Result.php @@ -119,7 +119,7 @@ class Result implements ResultInterface protected function wrapContent($content) { return '<script type="text/x-magento-init"><![CDATA[' - . '{"*": {"Magento_Ui/js/core/app": ' . str_replace(['<![CDATA[', ']]>'], '', $content) . '}}' + . '{"*": {"Magento_Ui/js/core/app": ' . str_replace(']]>', ']]]]><![CDATA[>', $content) . '}}' . ']]></script>'; } } diff --git a/app/code/Magento/Ui/Test/Unit/TemplateEngine/Xhtml/ResultTest.php b/app/code/Magento/Ui/Test/Unit/TemplateEngine/Xhtml/ResultTest.php new file mode 100644 index 0000000000000000000000000000000000000000..e51062e1cb36b7396902b6a74728789218b13ee3 --- /dev/null +++ b/app/code/Magento/Ui/Test/Unit/TemplateEngine/Xhtml/ResultTest.php @@ -0,0 +1,97 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Ui\Test\Unit\TemplateEngine\Xhtml; + +use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; +use Magento\Framework\View\Layout\Generator\Structure; +use Magento\Framework\View\Element\UiComponentInterface; +use Magento\Framework\View\TemplateEngine\Xhtml\CompilerInterface; +use Magento\Framework\View\TemplateEngine\Xhtml\Template; +use Magento\Ui\TemplateEngine\Xhtml\Result; +use PHPUnit_Framework_MockObject_MockObject as MockObject; +use Psr\Log\LoggerInterface; + +/** + * Test Class for Class Result. + * @see \Magento\Ui\TemplateEngine\Xhtml\Result + * + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + */ +class ResultTest extends \PHPUnit\Framework\TestCase +{ + /** + * @var Template|MockObject + */ + private $template; + + /** + * @var CompilerInterface|MockObject + */ + private $compiler; + + /** + * @var UiComponentInterface|MockObject + */ + private $component; + + /** + * @var Structure|MockObject + */ + private $structure; + + /** + * @var LoggerInterface|MockObject + */ + private $logger; + + /** + * @var Result + */ + private $testModel; + + /** + * @var ObjectManager + */ + private $objectManager; + + protected function setUp() + { + $this->template = $this->createPartialMock(Template::class, ['append']); + $this->compiler = $this->createMock(CompilerInterface::class); + $this->component = $this->createMock(UiComponentInterface::class); + $this->structure = $this->createPartialMock(Structure::class, ['generate']); + $this->logger = $this->createMock(LoggerInterface::class); + + $this->objectManager = new ObjectManager($this); + $this->testModel = $this->objectManager->getObject(Result::class, [ + 'template' => $this->template, + 'compiler' => $this->compiler, + 'component' => $this->component, + 'structure' => $this->structure, + 'logger' => $this->logger, + ]); + } + + /** + * Test Append layout configuration method + */ + public function testAppendLayoutConfiguration() + { + $configWithCdata = 'text before <![CDATA[cdata text]]>'; + $this->structure->expects($this->once()) + ->method('generate') + ->with($this->component) + ->willReturn([$configWithCdata]); + $this->template->expects($this->once()) + ->method('append') + ->with('<script type="text/x-magento-init"><![CDATA[{"*": {"Magento_Ui/js/core/app": ' + . '["text before <![CDATA[cdata text]]]]><![CDATA[>"]' + . '}}]]></script>'); + + $this->testModel->appendLayoutConfiguration(); + } +}