Skip to content

Commit

Permalink
NEW added the ability to autopublish items that are already live
Browse files Browse the repository at this point in the history
  • Loading branch information
micmania1 committed Mar 20, 2019
1 parent 33a8768 commit d45f80c
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 1 deletion.
13 changes: 13 additions & 0 deletions docs/en/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -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()
->setRebpublishLiveRecords(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
Expand Down
40 changes: 39 additions & 1 deletion src/GridFieldOrderableRows.php
Original file line number Diff line number Diff line change
Expand Up @@ -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')
{
Expand Down Expand Up @@ -138,6 +148,28 @@ public function setImmediateUpdate($bool)
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
*/
Expand Down Expand Up @@ -656,7 +688,13 @@ protected function reorderItems($list, array $values, array $sortedIDs)
$record = $currentSortList[$targetRecordID];
if ($record->$sortField != $newSortValue) {
$record->$sortField = $newSortValue;
$record->write();

if ($this->getRepublishLiveRecords() && $record->isLiveVersion()) {
$record->write();
$record->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE, true);
} else {
$record->write();
}
}
}
}
Expand Down

0 comments on commit d45f80c

Please sign in to comment.