diff --git a/code/GridFieldOrderableRows.php b/code/GridFieldOrderableRows.php index 0202bbc..661f044 100755 --- a/code/GridFieldOrderableRows.php +++ b/code/GridFieldOrderableRows.php @@ -25,6 +25,14 @@ class GridFieldOrderableRows extends RequestHandler implements */ protected $sortField; + /** + * Extra sort fields to apply before the sort field. + * + * @see setExtraSortFields() + * @var string|array + */ + protected $extraSortFields = null; + /** * @param string $sortField */ @@ -50,6 +58,24 @@ class GridFieldOrderableRows extends RequestHandler implements return $this; } + /** + * @return string|array + */ + public function getExtraSortFields() { + return $this->extraSortFields; + } + + /** + * Sets extra sort fields to apply before the sort field. + * + * @param string|array $fields + * @return GridFieldOrderableRows $this + */ + public function setExtraSortFields($fields) { + $this->extraSortFields = $fields; + return $this; + } + /** * Gets the table which contains the sort field. * @@ -128,7 +154,18 @@ class GridFieldOrderableRows extends RequestHandler implements $state->GridFieldOrderableRows->enabled = !$sorted; if(!$sorted) { - return $list->sort($this->getSortField()); + $sortterm = ''; + if ($this->extraSortFields) { + if (is_array($this->extraSortFields)) { + foreach($this->extraSortFields as $col => $dir) { + $sortterm .= "$col $dir, "; + } + } else { + $sortterm = $this->extraSortFields.', '; + } + } + $sortterm .= $this->getSortField(); + return $list->sort($sortterm); } else { return $list; } @@ -150,7 +187,18 @@ class GridFieldOrderableRows extends RequestHandler implements $this->httpError(400); } - $items = $list->byIDs($ids)->sort($field); + $sortterm = ''; + if ($this->extraSortFields) { + if (is_array($this->extraSortFields)) { + foreach($this->extraSortFields as $col => $dir) { + $sortterm .= "$col $dir, "; + } + } else { + $sortterm = $this->extraSortFields.', '; + } + } + $sortterm .= $field; + $items = $list->byIDs($ids)->sort($sortterm); // Ensure that each provided ID corresponded to an actual object. if(count($items) != count($ids)) {