Browse Source

Fix #7622: Allow `yii\data\ArrayDataProvider` to control the sort flags for `sortModels` through `yii\data\Sort::sortFlags` property

tags/2.0.33
Arthur Skobara 5 years ago committed by GitHub
parent
commit
a19dd48b79
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      framework/CHANGELOG.md
  2. 2
      framework/data/ArrayDataProvider.php
  3. 6
      framework/data/Sort.php
  4. 26
      tests/framework/data/ArrayDataProviderTest.php

1
framework/CHANGELOG.md

@ -7,6 +7,7 @@ Yii Framework 2 Change Log
- Bug #17843: Fix `yii\web\Session::setCookieParamsInternal` check param "samesite" (schevgeny)
- Bug #17828: Fix `yii\web\UploadedFile::saveAs()` failing when error value in `$_FILES` entry is a string (haveyaseen)
- Bug #17829: `yii\helpers\ArrayHelper::filter` now correctly filters data when passing a filter with more than 2 levels (rhertogh)
- Enh #7622: Allow `yii\data\ArrayDataProvider` to control the sort flags for `sortModels` through `yii\data\Sort::sortFlags` property (askobara)
2.0.32 January 21, 2020

2
framework/data/ArrayDataProvider.php

@ -136,7 +136,7 @@ class ArrayDataProvider extends BaseDataProvider
{
$orders = $sort->getOrders();
if (!empty($orders)) {
ArrayHelper::multisort($models, array_keys($orders), array_values($orders));
ArrayHelper::multisort($models, array_keys($orders), array_values($orders), $sort->sortFlags);
}
return $models;

6
framework/data/Sort.php

@ -186,6 +186,12 @@ class Sort extends BaseObject
*/
public $urlManager;
/**
* @var int Allow to control a value of the fourth parameter which will be
* passed to [[ArrayHelper::multisort()]]
* @since 2.0.33
*/
public $sortFlags = SORT_REGULAR;
/**
* Normalizes the [[attributes]] property.

26
tests/framework/data/ArrayDataProviderTest.php

@ -184,4 +184,30 @@ class ArrayDataProviderTest extends TestCase
$dataProvider = new ArrayDataProvider(['allModels' => $mixedArray, 'pagination' => $pagination]);
$this->assertEquals(['key1', 9], $dataProvider->getKeys());
}
public function testSortFlags()
{
$simpleArray = [['sortField' => 1], ['sortField' => 2], ['sortField' => 11]];
$dataProvider = new ArrayDataProvider(
[
'allModels' => $simpleArray,
'sort' => [
'sortFlags' => SORT_STRING,
'attributes' => [
'sort' => [
'asc' => ['sortField' => SORT_ASC],
'desc' => ['sortField' => SORT_DESC],
'label' => 'Sorting',
'default' => 'asc',
],
],
'defaultOrder' => [
'sort' => SORT_ASC,
],
],
]
);
$sortedArray = [['sortField' => 1], ['sortField' => 11], ['sortField' => 2]];
$this->assertEquals($sortedArray, $dataProvider->getModels());
}
}

Loading…
Cancel
Save