diff --git a/docs/en/index.md b/docs/en/index.md index 42d5f9c..7f6412c 100644 --- a/docs/en/index.md +++ b/docs/en/index.md @@ -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 diff --git a/src/GridFieldOrderableRows.php b/src/GridFieldOrderableRows.php index d8c5e0c..23890dd 100755 --- a/src/GridFieldOrderableRows.php +++ b/src/GridFieldOrderableRows.php @@ -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); + } } } }