diff --git a/core/DataTable.php b/core/DataTable.php index 2e94d5e89e2717b87808be1151d36bce67bd6bc2..6a76350fd689edba4301006857ae64347bbb20d7 100644 --- a/core/DataTable.php +++ b/core/DataTable.php @@ -591,9 +591,6 @@ class DataTable implements DataTableInterface, \IteratorAggregate, \ArrayAccess public function getRowFromLabel($label) { $rowId = $this->getRowIdFromLabel($label); - if ($rowId instanceof Row) { - return $rowId; - } if (is_int($rowId) && isset($this->rows[$rowId])) { return $this->rows[$rowId]; } @@ -602,6 +599,9 @@ class DataTable implements DataTableInterface, \IteratorAggregate, \ArrayAccess ) { return $this->summaryRow; } + if ($rowId instanceof Row) { + return $rowId; + } return false; } @@ -626,7 +626,8 @@ class DataTable implements DataTableInterface, \IteratorAggregate, \ArrayAccess return self::ID_SUMMARY_ROW; } - $label = (string)$label; + $label = (string) $label; + if (!isset($this->rowsIndexByLabel[$label])) { return false; } @@ -657,12 +658,19 @@ class DataTable implements DataTableInterface, \IteratorAggregate, \ArrayAccess { $this->rebuildIndexContinuously = true; - foreach ($this->getRows() as $id => $row) { + foreach ($this->rows as $id => $row) { $label = $row->getColumn('label'); if ($label !== false) { $this->rowsIndexByLabel[$label] = $id; } } + if ($this->summaryRow) { + $label = $this->summaryRow->getColumn('label'); + if ($label !== false) { + $this->rowsIndexByLabel[$label] = DataTable::ID_SUMMARY_ROW; + } + } + $this->indexNotUpToDate = false; } diff --git a/core/DataTable/Filter/Sort.php b/core/DataTable/Filter/Sort.php index 53c21f526a70df42237daef58996eb5c5f310916..7f590607cd0198482c5f6e528d6adc877027c197 100644 --- a/core/DataTable/Filter/Sort.php +++ b/core/DataTable/Filter/Sort.php @@ -95,15 +95,12 @@ class Sort extends BaseFilter /** * Sorting method used for sorting values natural * - * @param array $rowA array[0 => value of column to sort, 1 => label] - * @param array $rowB array[0 => value of column to sort, 1 => label] + * @param mixed $valA + * @param mixed $valB * @return int */ - function naturalSort($rowA, $rowB) + function naturalSort($valA, $valB) { - $valA = $rowA[0]; - $valB = $rowB[0]; - return !isset($valA) && !isset($valB) ? 0 @@ -122,15 +119,12 @@ class Sort extends BaseFilter /** * Sorting method used for sorting values * - * @param array $rowA array[0 => value of column to sort, 1 => label] - * @param array $rowB array[0 => value of column to sort, 1 => label] + * @param mixed $valA + * @param mixed $valB * @return int */ - function sortString($rowA, $rowB) + function sortString($valA, $valB) { - $valA = $rowA[0]; - $valB = $rowB[0]; - return !isset($valA) && !isset($valB) ? 0 @@ -150,11 +144,10 @@ class Sort extends BaseFilter { $value = $row->getColumn($this->columnToSort); - if ($value === false - || is_array($value) - ) { + if ($value === false || is_array($value)) { return null; } + return $value; } @@ -239,7 +232,7 @@ class Sort extends BaseFilter private function getFirstValueFromDataTable($table) { - foreach ($table->getRows() as $row) { + foreach ($table->getRowsWithoutSummaryRow() as $row) { $value = $this->getColumnValue($row); if (!is_null($value)) { return $value; @@ -262,8 +255,14 @@ class Sort extends BaseFilter // get column value and label only once for performance tweak $values = array(); - foreach ($rows as $key => $row) { - $values[$key] = array($this->getColumnValue($row), $row->getColumn('label')); + if ($functionCallback === 'numberSort') { + foreach ($rows as $key => $row) { + $values[$key] = array($this->getColumnValue($row), $row->getColumn('label')); + } + } else { + foreach ($rows as $key => $row) { + $values[$key] = $this->getColumnValue($row); + } } uasort($values, array($this, $functionCallback));