Fix sorting of pivot tables

This commit is contained in:
Johannes Meyer 2014-03-20 13:21:18 +01:00
parent edc3deeec8
commit ea473cf08a
2 changed files with 42 additions and 1 deletions

View File

@ -274,6 +274,16 @@ abstract class BaseQuery implements Filterable
return $this;
}
/**
* Set the columns used for ordering
*
* @param array $orderColumns
*/
public function setOrderColumns(array $orderColumns)
{
$this->orderColumns = $orderColumns;
}
/**
* Determine the default sort direction constant for the given column
*

View File

@ -58,11 +58,13 @@ class PivotTable
$this->baseQuery = $query;
$this->xAxisColumn = $xAxisColumn;
$this->yAxisColumn = $yAxisColumn;
$this->prepareQueries();
$this->prepareQueries()->adjustSorting();
}
/**
* Prepare the queries used for the pre processing
*
* @return self
*/
protected function prepareQueries()
{
@ -72,6 +74,35 @@ class PivotTable
$this->yAxisQuery = clone $this->baseQuery;
$this->yAxisQuery->distinct();
$this->yAxisQuery->setColumns(array($this->yAxisColumn));
return $this;
}
/**
* Set a default sorting for the x- and y-axis without losing any existing rules
*
* @return self
*/
protected function adjustSorting()
{
$currentOrderColumns = $this->baseQuery->getOrderColumns();
$xAxisOrderColumns = array(array($this->baseQuery->getMappedField($this->xAxisColumn), BaseQuery::SORT_ASC));
$yAxisOrderColumns = array(array($this->baseQuery->getMappedField($this->yAxisColumn), BaseQuery::SORT_ASC));
foreach ($currentOrderColumns as $orderInfo) {
if ($orderInfo[0] === $xAxisOrderColumns[0][0]) {
$xAxisOrderColumns[0] = $orderInfo;
} elseif ($orderInfo[0] === $yAxisOrderColumns[0][0]) {
$yAxisOrderColumns[0] = $orderInfo;
} else {
$xAxisOrderColumns[] = $orderInfo;
$yAxisOrderColumns[] = $orderInfo;
}
}
$this->xAxisQuery->setOrderColumns($xAxisOrderColumns);
$this->yAxisQuery->setOrderColumns($yAxisOrderColumns);
return $this;
}
/**