Merge branch '4.4' into 4

This commit is contained in:
Robbie Averill 2019-08-14 09:31:05 +12:00
commit 45f86658ca
7 changed files with 103 additions and 3 deletions

View File

@ -214,6 +214,9 @@ class GridFieldExportButton implements GridField_HTMLProvider, GridField_ActionP
} }
} }
/** @var GridFieldDataColumns|null $gridFieldColumnsComponent */
$gridFieldColumnsComponent = $gridField->getConfig()->getComponentByType(GridFieldDataColumns::class);
/** @var DataObject $item */ /** @var DataObject $item */
foreach ($items->limit(null) as $item) { foreach ($items->limit(null) as $item) {
if (!$item->hasMethod('canView') || $item->canView()) { if (!$item->hasMethod('canView') || $item->canView()) {
@ -228,6 +231,10 @@ class GridFieldExportButton implements GridField_HTMLProvider, GridField_ActionP
} }
$value = $columnHeader($relObj); $value = $columnHeader($relObj);
} elseif ($gridFieldColumnsComponent) {
$value = strip_tags(
$gridFieldColumnsComponent->getColumnContent($gridField, $item, $columnSource)
);
} else { } else {
$value = $gridField->getDataFieldValue($item, $columnSource); $value = $gridField->getDataFieldValue($item, $columnSource);

View File

@ -156,7 +156,7 @@ class GridFieldPrintButton implements GridField_HTMLProvider, GridField_ActionPr
} }
/** @var GridFieldDataColumns $dataCols */ /** @var GridFieldDataColumns $dataCols */
$dataCols = $gridField->getConfig()->getComponentByType('SilverStripe\\Forms\\GridField\\GridFieldDataColumns'); $dataCols = $gridField->getConfig()->getComponentByType(GridFieldDataColumns::class);
if ($dataCols) { if ($dataCols) {
return $dataCols->getDisplayFields($gridField); return $dataCols->getDisplayFields($gridField);
} }
@ -223,12 +223,17 @@ class GridFieldPrintButton implements GridField_HTMLProvider, GridField_ActionPr
$items = $gridField->getManipulatedList(); $items = $gridField->getManipulatedList();
$itemRows = new ArrayList(); $itemRows = new ArrayList();
/** @var GridFieldDataColumns $gridFieldColumnsComponent */
$gridFieldColumnsComponent = $gridField->getConfig()->getComponentByType(GridFieldDataColumns::class);
/** @var DataObject $item */ /** @var DataObject $item */
foreach ($items->limit(null) as $item) { foreach ($items->limit(null) as $item) {
$itemRow = new ArrayList(); $itemRow = new ArrayList();
foreach ($printColumns as $field => $label) { foreach ($printColumns as $field => $label) {
$value = $gridField->getDataFieldValue($item, $field); $value = $gridFieldColumnsComponent
? strip_tags($gridFieldColumnsComponent->getColumnContent($gridField, $item, $field))
: $gridField->getDataFieldValue($item, $field);
$itemRow->push(new ArrayData(array( $itemRow->push(new ArrayData(array(
"CellString" => $value, "CellString" => $value,

View File

@ -403,7 +403,7 @@ class DataQuery
// Find the first free "_SortColumnX" slot // Find the first free "_SortColumnX" slot
// and assign it to $key // and assign it to $key
$i = 0; $i = 0;
while (isset($orderby[$key = "\"_SortColumn$i\""])) { while (isset($newOrderby[$key = "\"_SortColumn$i\""]) || isset($orderby[$key = "\"_SortColumn$i\""])) {
++$i; ++$i;
} }

View File

@ -24,6 +24,8 @@ class DataQueryTest extends SapphireTest
DataQueryTest\ObjectE::class, DataQueryTest\ObjectE::class,
DataQueryTest\ObjectF::class, DataQueryTest\ObjectF::class,
DataQueryTest\ObjectG::class, DataQueryTest\ObjectG::class,
DataQueryTest\ObjectH::class,
DataQueryTest\ObjectI::class,
SQLSelectTest\TestObject::class, SQLSelectTest\TestObject::class,
SQLSelectTest\TestBase::class, SQLSelectTest\TestBase::class,
SQLSelectTest\TestChild::class, SQLSelectTest\TestChild::class,
@ -443,4 +445,25 @@ class DataQueryTest extends SapphireTest
$this->assertContains('Bar', $result); $this->assertContains('Bar', $result);
$this->assertContains('Foo', $result); $this->assertContains('Foo', $result);
} }
/**
* Tests that sorting against multiple relationships is working
*/
public function testMultipleRelationSort()
{
$query = new DataQuery(DataQueryTest\ObjectH::class);
$query->applyRelation('ManyTestEs');
$query->applyRelation('ManyTestIs');
$query->sort([
'"manytestes_DataQueryTest_E"."SortOrder"',
'"manytestis_DataQueryTest_I"."SortOrder"',
'"SortOrder"',
]);
$titles = $query->column('Name');
$this->assertEquals('First', $titles[0]);
$this->assertEquals('Second', $titles[1]);
$this->assertEquals('Last', $titles[2]);
}
} }

View File

@ -8,3 +8,31 @@ SilverStripe\ORM\Tests\DataQueryTest\ObjectE:
query3: query3:
Title: 'Second' Title: 'Second'
SortOrder: 2 SortOrder: 2
SilverStripe\ORM\Tests\DataQueryTest\ObjectI:
query1:
Title: 'First'
SortOrder: 1
query2:
Title: 'Second'
SortOrder: 2
query3:
Title: 'Last'
SortOrder: 3
SilverStripe\ORM\Tests\DataQueryTest\ObjectH:
query1:
Name: 'First'
SortOrder: 3
ManyTestEs: =>SilverStripe\ORM\Tests\DataQueryTest\ObjectE.query2
ManyTestIs: =>SilverStripe\ORM\Tests\DataQueryTest\ObjectI.query2
query2:
Name: 'Last'
SortOrder: 1
ManyTestEs: =>SilverStripe\ORM\Tests\DataQueryTest\ObjectE.query1
ManyTestIs: =>SilverStripe\ORM\Tests\DataQueryTest\ObjectI.query1
query3:
Name: 'Second'
SortOrder: 2
ManyTestEs: =>SilverStripe\ORM\Tests\DataQueryTest\ObjectE.query2
ManyTestIs: =>SilverStripe\ORM\Tests\DataQueryTest\ObjectI.query3

View File

@ -0,0 +1,21 @@
<?php
namespace SilverStripe\ORM\Tests\DataQueryTest;
use SilverStripe\Dev\TestOnly;
use SilverStripe\ORM\DataObject;
class ObjectH extends DataObject implements TestOnly
{
private static $table_name = 'DataQueryTest_H';
private static $db = array(
'Name' => 'Varchar',
'SortOrder' => 'Int',
);
private static $many_many = array(
'ManyTestEs' => ObjectE::class,
'ManyTestIs' => ObjectI::class,
);
}

View File

@ -0,0 +1,16 @@
<?php
namespace SilverStripe\ORM\Tests\DataQueryTest;
use SilverStripe\Dev\TestOnly;
use SilverStripe\ORM\DataObject;
class ObjectI extends DataObject implements TestOnly
{
private static $table_name = 'DataQueryTest_I';
private static $db = array(
'Name' => 'Varchar',
'SortOrder' => 'Int',
);
}