Compare commits
2 Commits
Author | SHA1 | Date |
---|---|---|
Guy Sartorelli | d851ce562c | |
Steve Boyd | 018ab87515 |
|
@ -1,16 +1,21 @@
|
|||
name: Dispatch CI
|
||||
|
||||
on:
|
||||
# At 12:10 PM UTC, only on Sunday and Monday
|
||||
# At 8:40 PM UTC, only on Sunday and Monday
|
||||
schedule:
|
||||
- cron: '10 12 * * 0,1'
|
||||
- cron: '40 20 * * 0,1'
|
||||
|
||||
permissions: {}
|
||||
|
||||
jobs:
|
||||
dispatch-ci:
|
||||
name: Dispatch CI
|
||||
# Only run cron on the silverstripe account
|
||||
if: (github.event_name == 'schedule' && github.repository_owner == 'silverstripe') || (github.event_name != 'schedule')
|
||||
# Only run cron on the symbiote account
|
||||
if: (github.event_name == 'schedule' && github.repository_owner == 'symbiote') || (github.event_name != 'schedule')
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
actions: write
|
||||
steps:
|
||||
- name: Dispatch CI
|
||||
uses: silverstripe/gha-dispatch-ci@v1
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
name: Keepalive
|
||||
|
||||
on:
|
||||
# At 1:05 PM UTC, on day 22 of the month
|
||||
schedule:
|
||||
- cron: '5 13 22 * *'
|
||||
workflow_dispatch:
|
||||
# The 7th of every month at 12:50pm UTC
|
||||
schedule:
|
||||
- cron: '50 12 7 * *'
|
||||
|
||||
jobs:
|
||||
keepalive:
|
||||
|
|
|
@ -1,17 +1,22 @@
|
|||
name: Merge-up
|
||||
|
||||
on:
|
||||
# At 12:10 PM UTC, only on Thursday
|
||||
# At 8:40 PM UTC, only on Thursday
|
||||
schedule:
|
||||
- cron: '10 12 * * 4'
|
||||
- cron: '40 20 * * 4'
|
||||
workflow_dispatch:
|
||||
|
||||
permissions: {}
|
||||
|
||||
jobs:
|
||||
merge-up:
|
||||
name: Merge-up
|
||||
# Only run cron on the symbiote account
|
||||
if: (github.event_name == 'schedule' && github.repository_owner == 'symbiote') || (github.event_name != 'schedule')
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
actions: write
|
||||
steps:
|
||||
- name: Merge-up
|
||||
uses: silverstripe/gha-merge-up@v1
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
mappings:
|
||||
GridFieldAddExistingSearchButton: Symbiote\GridFieldExtensions\GridFieldAddExistingSearchButton
|
||||
GridFieldAddExistingSearchHandler: Symbiote\GridFieldExtensions\GridFieldAddExistingSearchHandler
|
||||
GridFieldAddNewInlineButton: Symbiote\GridFieldExtensions\GridFieldAddNewInlineButton
|
||||
GridFieldAddNewMultiClass: Symbiote\GridFieldExtensions\GridFieldAddNewMultiClass
|
||||
GridFieldAddNewMultiClassHandler: Symbiote\GridFieldExtensions\GridFieldAddNewMultiClassHandler
|
||||
GridFieldEditableColumns: Symbiote\GridFieldExtensions\GridFieldEditableColumns
|
||||
GridFieldExtensions: Symbiote\GridFieldExtensions\GridFieldExtensions
|
||||
GridFieldExternalLink: Symbiote\GridFieldExtensions\GridFieldExternalLink
|
||||
GridFieldOrderableRows: Symbiote\GridFieldExtensions\GridFieldOrderableRows
|
||||
GridFieldRequestHandler: Symbiote\GridFieldExtensions\GridFieldRequestHandler
|
||||
GridFieldTitleHeader: Symbiote\GridFieldExtensions\GridFieldTitleHeader
|
|
@ -19,10 +19,13 @@ This module provides a number of useful grid field components:
|
|||
* `GridFieldTitleHeader` - a simple header which displays column titles.
|
||||
* `GridFieldConfigurablePaginator` - a paginator for GridField that allows customisable page sizes.
|
||||
|
||||
## Installation
|
||||
This branch will aim for compatibility with Silverstripe 4.x.
|
||||
|
||||
```sh
|
||||
composer require symbiote/silverstripe-gridfieldextensions
|
||||
## Installation
|
||||
```bash
|
||||
composer require symbiote/silverstripe-gridfieldextensions:^3
|
||||
```
|
||||
|
||||
For Silverstripe 3.x, please see the [compatible branch](https://github.com/symbiote/silverstripe-gridfieldextensions/tree/2).
|
||||
|
||||
See [docs/en/index.md](docs/en/index.md) for documentation and examples.
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
comment: false
|
|
@ -3,13 +3,7 @@
|
|||
"description": "A collection of useful grid field components",
|
||||
"type": "silverstripe-vendormodule",
|
||||
"homepage": "http://github.com/symbiote/silverstripe-gridfieldextensions",
|
||||
"keywords": [
|
||||
"silverstripe",
|
||||
"gridfield",
|
||||
"sortable",
|
||||
"sort",
|
||||
"sort field"
|
||||
],
|
||||
"keywords": ["silverstripe", "gridfield", "sortable", "sort", "sort field"],
|
||||
"license": "BSD-3-Clause",
|
||||
"authors": [
|
||||
{
|
||||
|
@ -25,14 +19,14 @@
|
|||
"issues": "http://github.com/symbiote/silverstripe-gridfieldextensions/issues"
|
||||
},
|
||||
"require": {
|
||||
"php": "^8.1",
|
||||
"silverstripe/vendor-plugin": "^2",
|
||||
"silverstripe/framework": "^5"
|
||||
"php": "^7.4 || ^8.0",
|
||||
"silverstripe/vendor-plugin": "^1.0",
|
||||
"silverstripe/framework": "^4.11"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^9.6",
|
||||
"squizlabs/php_codesniffer": "^3.7",
|
||||
"silverstripe/versioned": "^2"
|
||||
"phpunit/phpunit": "^9.5",
|
||||
"squizlabs/php_codesniffer": "^3.0",
|
||||
"silverstripe/versioned": "^1"
|
||||
},
|
||||
"extra": {
|
||||
"screenshots": [
|
||||
|
|
|
@ -26,6 +26,9 @@ class GridFieldAddNewInlineButton extends AbstractGridFieldComponent implements
|
|||
GridField_HTMLProvider,
|
||||
GridField_SaveHandler
|
||||
{
|
||||
/**
|
||||
* @skipUpgrade
|
||||
*/
|
||||
const POST_KEY = 'GridFieldAddNewInlineButton';
|
||||
|
||||
private $fragment;
|
||||
|
|
|
@ -28,6 +28,9 @@ class GridFieldAddNewMultiClass extends AbstractGridFieldComponent implements
|
|||
GridField_HTMLProvider,
|
||||
GridField_URLHandler
|
||||
{
|
||||
/**
|
||||
* @skipUpgrade
|
||||
*/
|
||||
const POST_KEY = 'GridFieldAddNewMultiClass';
|
||||
|
||||
private static $allowed_actions = array(
|
||||
|
|
|
@ -41,6 +41,9 @@ class GridFieldEditableColumns extends GridFieldDataColumns implements
|
|||
GridField_SaveHandler,
|
||||
GridField_URLHandler
|
||||
{
|
||||
/**
|
||||
* @skipUpgrade
|
||||
*/
|
||||
const POST_KEY = 'GridFieldEditableColumns';
|
||||
|
||||
private static $allowed_actions = array(
|
||||
|
|
|
@ -410,11 +410,7 @@ class GridFieldOrderableRows extends RequestHandler implements
|
|||
}
|
||||
}
|
||||
|
||||
if ($list instanceof DataList) {
|
||||
return $list->orderBy($sortterm);
|
||||
} elseif (method_exists($list, 'sort')) {
|
||||
return $list->sort($sortterm);
|
||||
}
|
||||
return $list->sort($sortterm);
|
||||
}
|
||||
|
||||
return $list;
|
||||
|
@ -591,7 +587,7 @@ class GridFieldOrderableRows extends RequestHandler implements
|
|||
}
|
||||
$list = $grid->getList();
|
||||
$sortterm .= '"'.$this->getSortTable($list).'"."'.$sortField.'"';
|
||||
$items = $list->filter('ID', $sortedIDs)->orderBy($sortterm);
|
||||
$items = $list->filter('ID', $sortedIDs)->sort($sortterm);
|
||||
|
||||
// Ensure that each provided ID corresponded to an actual object.
|
||||
if (count($items ?? []) != count($sortedIDs ?? [])) {
|
||||
|
|
|
@ -6,7 +6,6 @@ use ReflectionMethod;
|
|||
use SilverStripe\Dev\SapphireTest;
|
||||
use SilverStripe\Forms\GridField\GridField;
|
||||
use SilverStripe\Forms\GridField\GridFieldConfig_RelationEditor;
|
||||
use SilverStripe\ORM\ArrayList;
|
||||
use SilverStripe\ORM\DataList;
|
||||
use Symbiote\GridFieldExtensions\GridFieldOrderableRows;
|
||||
use Symbiote\GridFieldExtensions\Tests\Stub\PolymorphM2MMapper;
|
||||
|
@ -315,12 +314,40 @@ class GridFieldOrderableRowsTest extends SapphireTest
|
|||
$this->assertTrue($differenceFound);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider provideGetManipulatedData
|
||||
*/
|
||||
public function testGetManipulatedData(string $dataClass, string $listClass, array $data, array $expected)
|
||||
public function testGetManipulatedDataWithoutDefaultSort()
|
||||
{
|
||||
$list = $listClass == DataList::class ? new DataList($dataClass) : new ArrayList();
|
||||
$sortedList = $this->getTitleSortedListForManipuatedData(TitleObject::class, [
|
||||
['Title' => 'C'],
|
||||
['Title' => 'A'],
|
||||
['Title' => 'B'],
|
||||
]);
|
||||
$this->assertSame(['A', 'B', 'C'], $sortedList->column('Title'));
|
||||
}
|
||||
|
||||
public function testGetManipulatedDataWithDefaultSort()
|
||||
{
|
||||
$sortedList = $this->getTitleSortedListForManipuatedData(TitleSortedObject::class, [
|
||||
['Title' => 'Z', 'Iden' => 'C', 'DefaultSort' => 3],
|
||||
['Title' => 'Z', 'Iden' => 'A', 'DefaultSort' => 2],
|
||||
['Title' => 'Z', 'Iden' => 'B', 'DefaultSort' => 1],
|
||||
]);
|
||||
$this->assertSame(['B', 'A', 'C'], $sortedList->column('Iden'));
|
||||
}
|
||||
|
||||
|
||||
public function testGetManipulatedDataWithDefaultSortArray()
|
||||
{
|
||||
$sortedList = $this->getTitleSortedListForManipuatedData(TitleArraySortedObject::class, [
|
||||
['Title' => 'X', 'Iden' => 'C', 'OtherSort' => 3],
|
||||
['Title' => 'Z', 'Iden' => 'A', 'OtherSort' => 2],
|
||||
['Title' => 'Z', 'Iden' => 'B', 'OtherSort' => 1],
|
||||
]);
|
||||
$this->assertSame(['C', 'B', 'A'], $sortedList->column('Iden'));
|
||||
}
|
||||
|
||||
private function getTitleSortedListForManipuatedData(string $dataClass, array $data): DataList
|
||||
{
|
||||
$list = new DataList($dataClass);
|
||||
foreach ($data as $values) {
|
||||
$item = new $dataClass();
|
||||
$item->update($values);
|
||||
|
@ -332,73 +359,6 @@ class GridFieldOrderableRowsTest extends SapphireTest
|
|||
$config->addComponent($orderable);
|
||||
$grid = new GridField('MyName', 'MyTitle', $list, $config);
|
||||
$sortedList = $orderable->getManipulatedData($grid, $list);
|
||||
$col = $dataClass === TitleObject::class ? 'Title' : 'Iden';
|
||||
$this->assertSame($expected, $sortedList->column($col));
|
||||
}
|
||||
|
||||
public function provideGetManipulatedData(): array
|
||||
{
|
||||
return [
|
||||
[
|
||||
TitleObject::class,
|
||||
ArrayList::class,
|
||||
[
|
||||
['Title' => 'C'],
|
||||
['Title' => 'A'],
|
||||
['Title' => 'B']
|
||||
],
|
||||
['A', 'B', 'C']
|
||||
],
|
||||
[
|
||||
TitleObject::class,
|
||||
DataList::class,
|
||||
[
|
||||
['Title' => 'C'],
|
||||
['Title' => 'A'],
|
||||
['Title' => 'B'],
|
||||
],
|
||||
['A', 'B', 'C']
|
||||
],
|
||||
[
|
||||
TitleSortedObject::class,
|
||||
ArrayList::class,
|
||||
[
|
||||
['Title' => '1', 'Iden' => 'C'],
|
||||
['Title' => '2', 'Iden' => 'A'],
|
||||
['Title' => '3', 'Iden' => 'B'],
|
||||
],
|
||||
['C', 'A', 'B']
|
||||
],
|
||||
[
|
||||
TitleSortedObject::class,
|
||||
DataList::class,
|
||||
[
|
||||
['Title' => '1', 'Iden' => 'C'],
|
||||
['Title' => '2', 'Iden' => 'A'],
|
||||
['Title' => '3', 'Iden' => 'B'],
|
||||
],
|
||||
['C', 'A', 'B']
|
||||
],
|
||||
[
|
||||
TitleSortedObject::class,
|
||||
DataList::class,
|
||||
[
|
||||
['Title' => 'Z', 'Iden' => 'C', 'DefaultSort' => 3],
|
||||
['Title' => 'Z', 'Iden' => 'A', 'DefaultSort' => 2],
|
||||
['Title' => 'Z', 'Iden' => 'B', 'DefaultSort' => 1],
|
||||
],
|
||||
['B', 'A', 'C']
|
||||
],
|
||||
[
|
||||
TitleArraySortedObject::class,
|
||||
DataList::class,
|
||||
[
|
||||
['Title' => 'X', 'Iden' => 'C', 'OtherSort' => 3],
|
||||
['Title' => 'Z', 'Iden' => 'A', 'OtherSort' => 2],
|
||||
['Title' => 'Z', 'Iden' => 'B', 'OtherSort' => 1],
|
||||
],
|
||||
['C', 'B', 'A']
|
||||
],
|
||||
];
|
||||
return $sortedList;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue