Fixed GridFieldOrderableRows issue when data class is Versioned and relation is has_many (#243)

* Fixed GridFieldOrderableRows issue when data class is Versioned and relation is has_many

* just compare table names rather than updating existing getSortTable() func
This commit is contained in:
Priyashantha 2018-01-31 02:10:59 +05:30 committed by Daniel Hensby
parent 6bf1a05975
commit d1021ace51

View File

@ -18,8 +18,9 @@ use SilverStripe\ORM\DB;
use SilverStripe\ORM\DataList; use SilverStripe\ORM\DataList;
use SilverStripe\ORM\DataObjectInterface; use SilverStripe\ORM\DataObjectInterface;
use SilverStripe\ORM\ManyManyList; use SilverStripe\ORM\ManyManyList;
use SilverStripe\ORM\Map;
use SilverStripe\ORM\SS_List; use SilverStripe\ORM\SS_List;
use SilverStripe\ORM\SS_Map; use SilverStripe\Versioned\Versioned;
use SilverStripe\View\ViewableData; use SilverStripe\View\ViewableData;
use Exception; use Exception;
@ -180,24 +181,19 @@ class GridFieldOrderableRows extends RequestHandler implements
public function getSortTable(SS_List $list) public function getSortTable(SS_List $list)
{ {
$field = $this->getSortField(); $field = $this->getSortField();
if ($list instanceof ManyManyList) { if ($list instanceof ManyManyList) {
$extra = $list->getExtraFields(); $extra = $list->getExtraFields();
$table = $list->getJoinTable(); $table = $list->getJoinTable();
if ($extra && array_key_exists($field, $extra)) { if ($extra && array_key_exists($field, $extra)) {
return $table; return $table;
} }
} }
$classes = ClassInfo::dataClassesFor($list->dataClass()); $classes = ClassInfo::dataClassesFor($list->dataClass());
foreach ($classes as $class) { foreach ($classes as $class) {
if (singleton($class)->hasDataBaseField($field)) { if (singleton($class)->hasDataBaseField($field)) {
return DataObject::getSchema()->tableName($class); return DataObject::getSchema()->tableName($class);
} }
} }
throw new \Exception("Couldn't find the sort field '$field'"); throw new \Exception("Couldn't find the sort field '$field'");
} }
@ -499,15 +495,15 @@ class GridFieldOrderableRows extends RequestHandler implements
/** @var SS_List $map */ /** @var SS_List $map */
$map = $list->map('ID', $sortField); $map = $list->map('ID', $sortField);
//fix for versions of SS that return inconsistent types for `map` function //fix for versions of SS that return inconsistent types for `map` function
if ($map instanceof SS_Map) { if ($map instanceof Map) {
$map = $map->toArray(); $map = $map->toArray();
} }
// If not a ManyManyList and using versioning, detect it. // If not a ManyManyList and using versioning, detect it.
$isVersioned = false; $isVersioned = false;
$class = $list->dataClass(); $class = $list->dataClass();
if ($class == $this->getSortTable($list)) { if (DataObject::getSchema()->tableName($class) == $this->getSortTable($list)) {
$isVersioned = $class::has_extension('SilverStripe\\ORM\\Versioning\\Versioned'); $isVersioned = $class::has_extension(Versioned::class);
} }
// Loop through each item, and update the sort values which do not // Loop through each item, and update the sort values which do not