Merge pull request #289 from silverstripe-superchargers/feature/republish-live-records

NEW added the ability to autopublish items that are already live
This commit is contained in:
Robbie Averill 2019-03-25 09:25:41 +13:00 committed by GitHub
commit 06bb23919d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 53 additions and 0 deletions

View File

@ -114,6 +114,19 @@ class Item extends DataObject {
}
```
### Versioning
By default `GridFieldOrderableRows` will handle versioning but won't automatically publish any records. The user will need to go into each record and publish them manually which could get cumbersome for large lists.
You can configure the list to automatically publish a record if the record is the latest version and is already published. This won't publish any records which have draft changes.
```php
$orderable = new GridFieldOrderableRows()
->setRepublishLiveRecords(true);
```
There are caveats with both approaches so consideration should be made for which approach best suits the requirements.
**Please NOTE:** There is a limitation when using `GridFieldOrderableRows` on unsaved data objects; namely, that it doesn't work as without data being saved, the list of related objects has no context. Please check `$this->ID` before adding the `GridFieldOrderableRows` component to the grid field config (or even, before adding the gridfield at all).
Configurable Paginator

View File

@ -89,8 +89,18 @@ class GridFieldOrderableRows extends RequestHandler implements
*/
protected $reorderColumnNumber = 0;
/**
* If the items in the list are versioned and this is set to true, then
* we will check to see if the version we're sorting is the latest published
* version and if so then we will re-publish the item.
*
* @var boolean
*/
protected $republishLiveRecords = false;
/**
* @param string $sortField
* @param boolean $republishLiveRecords
*/
public function __construct($sortField = 'Sort')
{
@ -138,6 +148,28 @@ class GridFieldOrderableRows extends RequestHandler implements
return $this;
}
/**
* @see $republishLiveRecords
*
* @return boolean
*/
public function getRepublishLiveRecords()
{
return $this->republishLiveRecords;
}
/**
* @see $republishLiveRecords
*
* @param boolean $bool
* @return GridFieldOrderableRows $this
*/
public function setRepublishLiveRecords($bool)
{
$this->republishLiveRecords = $bool;
return $this;
}
/**
* @return string|array
*/
@ -656,7 +688,15 @@ class GridFieldOrderableRows extends RequestHandler implements
$record = $currentSortList[$targetRecordID];
if ($record->$sortField != $newSortValue) {
$record->$sortField = $newSortValue;
// We need to do this before writing otherwith isLiveVersion() will always be false
$shouldRepublish = $this->getRepublishLiveRecords() && $record->isLiveVersion();
// Write our staged record and publish if required
$record->write();
if ($shouldRepublish) {
$record->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE, true);
}
}
}
}