Compare commits

..

2 Commits
4.0.5 ... 3

Author SHA1 Message Date
Guy Sartorelli d851ce562c
Merge pull request #395 from creative-commoners/pulls/3/manual-workflows
MNT Upaded scheduled workflows on default branch
2024-05-23 11:56:27 +12:00
Steve Boyd 018ab87515 MNT Upaded scheduled workflows on default branch 2024-05-22 16:36:45 +12:00
13 changed files with 90 additions and 105 deletions

View File

@ -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

View File

@ -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:

View File

@ -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

12
.upgrade.yml Normal file
View File

@ -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

View File

View File

@ -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.

1
codecov.yml Normal file
View File

@ -0,0 +1 @@
comment: false

View File

@ -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": [

View File

@ -26,6 +26,9 @@ class GridFieldAddNewInlineButton extends AbstractGridFieldComponent implements
GridField_HTMLProvider,
GridField_SaveHandler
{
/**
* @skipUpgrade
*/
const POST_KEY = 'GridFieldAddNewInlineButton';
private $fragment;

View File

@ -28,6 +28,9 @@ class GridFieldAddNewMultiClass extends AbstractGridFieldComponent implements
GridField_HTMLProvider,
GridField_URLHandler
{
/**
* @skipUpgrade
*/
const POST_KEY = 'GridFieldAddNewMultiClass';
private static $allowed_actions = array(

View File

@ -41,6 +41,9 @@ class GridFieldEditableColumns extends GridFieldDataColumns implements
GridField_SaveHandler,
GridField_URLHandler
{
/**
* @skipUpgrade
*/
const POST_KEY = 'GridFieldEditableColumns';
private static $allowed_actions = array(

View File

@ -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 ?? [])) {

View File

@ -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;
}
}