From f7baf29d595511b91b4012604d39c6ea5d15b496 Mon Sep 17 00:00:00 2001
From: Sanjay Patel <sanjay@wagento.com>
Date: Tue, 16 Jan 2018 14:00:56 +0530
Subject: [PATCH] #12714 - pass parameter for export button url

---
 .../sales_order_view_creditmemo_grid.xml      |  8 +++++-
 .../sales_order_view_invoice_grid.xml         |  8 +++++-
 .../sales_order_view_shipment_grid.xml        |  8 +++++-
 .../Magento/Ui/Component/ExportButton.php     | 25 ++++++++++++++++++-
 4 files changed, 45 insertions(+), 4 deletions(-)

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 ecc2b5beee3..10b7b1c028c 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 3ec450a570b..ac1233c5e49 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 27cef507421..6db77a79b8c 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 9d5f1258390..284362a119b 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;
+    }
 }
-- 
GitLab