Skip to content

Commit 37b2b28

Browse files
MAGETWO-94909: [2.3] Fix scope selector for reports
1 parent e13b87f commit 37b2b28

File tree

3 files changed

+92
-31
lines changed

3 files changed

+92
-31
lines changed

app/code/Magento/Reports/Block/Adminhtml/Grid/AbstractGrid.php

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6+
67
namespace Magento\Reports\Block\Adminhtml\Grid;
78

89
class AbstractGrid extends \Magento\Backend\Block\Widget\Grid\Extended
@@ -170,12 +171,7 @@ public function addColumn($columnId, $column)
170171
*/
171172
protected function _getStoreIds()
172173
{
173-
$filterData = $this->getFilterData();
174-
if ($filterData) {
175-
$storeIds = explode(',', $filterData->getData('store_ids'));
176-
} else {
177-
$storeIds = [];
178-
}
174+
$storeIds = $this->getFilteredStores();
179175
// By default storeIds array contains only allowed stores
180176
$allowedStoreIds = array_keys($this->_storeManager->getStores());
181177
// And then array_intersect with post data for prevent unauthorized stores reports
@@ -411,4 +407,34 @@ protected function _addCustomFilter($collection, $filterData)
411407
{
412408
return $this;
413409
}
410+
411+
/**
412+
*
413+
* @return array
414+
* @throws \Magento\Framework\Exception\LocalizedException
415+
*/
416+
private function getFilteredStores(): array
417+
{
418+
$storeIds = [];
419+
420+
$filterData = $this->getFilterData();
421+
if ($filterData) {
422+
if ($filterData->getWebsite()) {
423+
$storeIds = array_keys(
424+
$this->_storeManager->getWebsite($filterData->getWebsite())->getStores()
425+
);
426+
}
427+
428+
if ($filterData->getGroup()) {
429+
$storeIds = array_keys(
430+
$this->_storeManager->getGroup($filterData->getGroup())->getStores()
431+
);
432+
}
433+
434+
if ($filterData->getData('store_ids')) {
435+
$storeIds = explode(',', $filterData->getData('store_ids'));
436+
}
437+
}
438+
return is_array($storeIds) ? $storeIds : [];
439+
}
414440
}

app/code/Magento/Reports/Block/Adminhtml/Sales/Sales/Grid.php

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
namespace Magento\Reports\Block\Adminhtml\Sales\Sales;
88

9+
use Magento\Reports\Block\Adminhtml\Grid\Column\Renderer\Currency;
10+
911
/**
1012
* Adminhtml sales report grid block
1113
*
@@ -36,7 +38,7 @@ protected function _construct()
3638
*/
3739
public function getResourceCollectionName()
3840
{
39-
return $this->getFilterData()->getData('report_type') == 'updated_at_order'
41+
return $this->getFilterData()->getData('report_type') === 'updated_at_order'
4042
? \Magento\Sales\Model\ResourceModel\Report\Order\Updatedat\Collection::class
4143
: \Magento\Sales\Model\ResourceModel\Report\Order\Collection::class;
4244
}
@@ -103,9 +105,7 @@ protected function _prepareColumns()
103105
]
104106
);
105107

106-
if ($this->getFilterData()->getStoreIds()) {
107-
$this->setStoreIds(explode(',', $this->getFilterData()->getStoreIds()));
108-
}
108+
$this->setStoreIds($this->_getStoreIds());
109109
$currencyCode = $this->getCurrentCurrencyCode();
110110
$rate = $this->getRate($currencyCode);
111111

@@ -118,6 +118,7 @@ protected function _prepareColumns()
118118
'index' => 'total_income_amount',
119119
'total' => 'sum',
120120
'sortable' => false,
121+
'renderer' => Currency::class,
121122
'rate' => $rate,
122123
'header_css_class' => 'col-sales-total',
123124
'column_css_class' => 'col-sales-total'
@@ -133,6 +134,7 @@ protected function _prepareColumns()
133134
'index' => 'total_revenue_amount',
134135
'total' => 'sum',
135136
'sortable' => false,
137+
'renderer' => Currency::class,
136138
'visibility_filter' => ['show_actual_columns'],
137139
'rate' => $rate,
138140
'header_css_class' => 'col-revenue',
@@ -149,6 +151,7 @@ protected function _prepareColumns()
149151
'index' => 'total_profit_amount',
150152
'total' => 'sum',
151153
'sortable' => false,
154+
'renderer' => Currency::class,
152155
'visibility_filter' => ['show_actual_columns'],
153156
'rate' => $rate,
154157
'header_css_class' => 'col-profit',
@@ -165,6 +168,7 @@ protected function _prepareColumns()
165168
'index' => 'total_invoiced_amount',
166169
'total' => 'sum',
167170
'sortable' => false,
171+
'renderer' => Currency::class,
168172
'rate' => $rate,
169173
'header_css_class' => 'col-invoiced',
170174
'column_css_class' => 'col-invoiced'
@@ -180,6 +184,7 @@ protected function _prepareColumns()
180184
'index' => 'total_paid_amount',
181185
'total' => 'sum',
182186
'sortable' => false,
187+
'renderer' => Currency::class,
183188
'visibility_filter' => ['show_actual_columns'],
184189
'rate' => $rate,
185190
'header_css_class' => 'col-paid',
@@ -196,6 +201,7 @@ protected function _prepareColumns()
196201
'index' => 'total_refunded_amount',
197202
'total' => 'sum',
198203
'sortable' => false,
204+
'renderer' => Currency::class,
199205
'rate' => $rate,
200206
'header_css_class' => 'col-refunded',
201207
'column_css_class' => 'col-refunded'
@@ -211,6 +217,7 @@ protected function _prepareColumns()
211217
'index' => 'total_tax_amount',
212218
'total' => 'sum',
213219
'sortable' => false,
220+
'renderer' => Currency::class,
214221
'rate' => $rate,
215222
'header_css_class' => 'col-sales-tax',
216223
'column_css_class' => 'col-sales-tax'
@@ -226,6 +233,7 @@ protected function _prepareColumns()
226233
'index' => 'total_tax_amount_actual',
227234
'total' => 'sum',
228235
'sortable' => false,
236+
'renderer' => Currency::class,
229237
'visibility_filter' => ['show_actual_columns'],
230238
'rate' => $rate,
231239
'header_css_class' => 'col-tax',
@@ -242,6 +250,7 @@ protected function _prepareColumns()
242250
'index' => 'total_shipping_amount',
243251
'total' => 'sum',
244252
'sortable' => false,
253+
'renderer' => Currency::class,
245254
'rate' => $rate,
246255
'header_css_class' => 'col-sales-shipping',
247256
'column_css_class' => 'col-sales-shipping'
@@ -257,6 +266,7 @@ protected function _prepareColumns()
257266
'index' => 'total_shipping_amount_actual',
258267
'total' => 'sum',
259268
'sortable' => false,
269+
'renderer' => Currency::class,
260270
'visibility_filter' => ['show_actual_columns'],
261271
'rate' => $rate,
262272
'header_css_class' => 'col-shipping',
@@ -273,6 +283,7 @@ protected function _prepareColumns()
273283
'index' => 'total_discount_amount',
274284
'total' => 'sum',
275285
'sortable' => false,
286+
'renderer' => Currency::class,
276287
'rate' => $rate,
277288
'header_css_class' => 'col-sales-discount',
278289
'column_css_class' => 'col-sales-discount'
@@ -288,6 +299,7 @@ protected function _prepareColumns()
288299
'index' => 'total_discount_amount_actual',
289300
'total' => 'sum',
290301
'sortable' => false,
302+
'renderer' => Currency::class,
291303
'visibility_filter' => ['show_actual_columns'],
292304
'rate' => $rate,
293305
'header_css_class' => 'col-discount',
@@ -304,6 +316,7 @@ protected function _prepareColumns()
304316
'index' => 'total_canceled_amount',
305317
'total' => 'sum',
306318
'sortable' => false,
319+
'renderer' => Currency::class,
307320
'rate' => $rate,
308321
'header_css_class' => 'col-canceled',
309322
'column_css_class' => 'col-canceled'

app/code/Magento/Reports/Controller/Adminhtml/Report/AbstractReport.php

Lines changed: 43 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@
99
*
1010
* @author Magento Core Team <core@magentocommerce.com>
1111
*/
12+
1213
namespace Magento\Reports\Controller\Adminhtml\Report;
1314

15+
use Magento\Backend\Helper\Data as BackendHelper;
1416
use Magento\Framework\Stdlib\DateTime\TimezoneInterface;
1517

1618
/**
@@ -41,22 +43,30 @@ abstract class AbstractReport extends \Magento\Backend\App\Action
4143
*/
4244
protected $timezone;
4345

46+
/**
47+
* @var BackendHelper
48+
*/
49+
private $backendHelper;
50+
4451
/**
4552
* @param \Magento\Backend\App\Action\Context $context
4653
* @param \Magento\Framework\App\Response\Http\FileFactory $fileFactory
4754
* @param \Magento\Framework\Stdlib\DateTime\Filter\Date $dateFilter
4855
* @param TimezoneInterface $timezone
56+
* @param BackendHelper|null $backendHelperData
4957
*/
5058
public function __construct(
5159
\Magento\Backend\App\Action\Context $context,
5260
\Magento\Framework\App\Response\Http\FileFactory $fileFactory,
5361
\Magento\Framework\Stdlib\DateTime\Filter\Date $dateFilter,
54-
TimezoneInterface $timezone
62+
TimezoneInterface $timezone,
63+
BackendHelper $backendHelperData = null
5564
) {
5665
parent::__construct($context);
5766
$this->_fileFactory = $fileFactory;
5867
$this->_dateFilter = $dateFilter;
5968
$this->timezone = $timezone;
69+
$this->backendHelper = $backendHelperData ?: $this->_objectManager->get(BackendHelper::class);
6070
}
6171

6272
/**
@@ -103,25 +113,7 @@ public function _initReportAction($blocks)
103113
$blocks = [$blocks];
104114
}
105115

106-
$requestData = $this->_objectManager->get(
107-
\Magento\Backend\Helper\Data::class
108-
)->prepareFilterString(
109-
$this->getRequest()->getParam('filter')
110-
);
111-
$inputFilter = new \Zend_Filter_Input(
112-
['from' => $this->_dateFilter, 'to' => $this->_dateFilter],
113-
[],
114-
$requestData
115-
);
116-
$requestData = $inputFilter->getUnescaped();
117-
$requestData['store_ids'] = $this->getRequest()->getParam('store_ids');
118-
$params = new \Magento\Framework\DataObject();
119-
120-
foreach ($requestData as $key => $value) {
121-
if (!empty($value)) {
122-
$params->setData($key, $value);
123-
}
124-
}
116+
$params = $this->initFilterData();
125117

126118
foreach ($blocks as $block) {
127119
if ($block) {
@@ -147,7 +139,7 @@ protected function _showLastExecutionTime($flagCode, $refreshCode)
147139
->loadSelf();
148140
$updatedAt = 'undefined';
149141
if ($flag->hasData()) {
150-
$updatedAt = $this->timezone->formatDate(
142+
$updatedAt = $this->timezone->formatDate(
151143
$flag->getLastUpdate(),
152144
\IntlDateFormatter::MEDIUM,
153145
true
@@ -168,4 +160,34 @@ protected function _showLastExecutionTime($flagCode, $refreshCode)
168160
);
169161
return $this;
170162
}
163+
164+
/**
165+
* Init filter data
166+
*
167+
* @return \Magento\Framework\DataObject
168+
*/
169+
private function initFilterData(): \Magento\Framework\DataObject
170+
{
171+
$requestData = $this->backendHelper
172+
->prepareFilterString(
173+
$this->getRequest()->getParam('filter')
174+
);
175+
176+
$filterRules = ['from' => $this->_dateFilter, 'to' => $this->_dateFilter];
177+
$inputFilter = new \Zend_Filter_Input($filterRules, [], $requestData);
178+
179+
$requestData = $inputFilter->getUnescaped();
180+
$requestData['store_ids'] = $this->getRequest()->getParam('store_ids');
181+
$requestData['group'] = $this->getRequest()->getParam('group');
182+
$requestData['website'] = $this->getRequest()->getParam('website');
183+
184+
$params = new \Magento\Framework\DataObject();
185+
186+
foreach ($requestData as $key => $value) {
187+
if (!empty($value)) {
188+
$params->setData($key, $value);
189+
}
190+
}
191+
return $params;
192+
}
171193
}

0 commit comments

Comments
 (0)