PEAR is archived and read-only

This mirror preserves historical PEAR package releases and metadata so existing references remain available.

Home » Structures » Structures_DataGrid » Bug #4403

Structures_DataGrid_sortRecordSet

Details

Submitted2005-05-22 00:16 UTC
Fromar dot newsgroup at gmx dot de
Assignedasnagy
StatusClosed
PackageStructures_DataGrid
PHP Version5.0.4
OSWindows 2000
Roadmaps(Not assigned)

Comments

[2005-05-22 00:16 UTC] ar dot newsgroup at gmx dot de

Description:
------------
Versions:
DB_DataObject: 1.7.13
Structures_DataGrid: 0.6.2
---------------

There is a bug by sorting method in Structures_DataGrid_sortRecordSet in combination with DB_DataObject DataSource binding!

With Structures_DataGrid_sortRecordSet you can not sort any DataObject Tables! I think it is caused by the wrong method call in sortRecordSet ($this->_dataSource->sort($sortBy, $direction). In DB_DataObject class the sorting method is called "orderBy()" !!!

Befor instantiating a DataGrid if I call the orderBy method of DB_DataObject it works fine.

I hope it is a bug! If not, please show me my mistake!

greetings...
abbas

Reproduce code:
---------------
$orderBy = isset($_GET['orderBy']) ? $_GET['orderBy'] : 'Time';
$dir = isset($_GET['direction']) ? $_GET['direction'] : 'ASC';

$do = DB_DataObject::factory('log');
// this is my workaround
$do->orderBy($orderBy . " " . $dir);
$num_of_rows = $do->find();

$dg =& new Structures_DataGrid(15);
$data = Structures_DataGrid_DataSource::create($do);
$dg->bindDataSource($data);
// this is not working
//$dg->sortRecordSet($orderBy, $dir);

Expected result:
----------------
with:
$dg->sortRecordSet($orderBy, $dir);
NO sorting!!!

but with:
$do->orderBy($orderBy . " " . $dir);
sorting works fine!

[2005-06-10 19:08 UTC] jessup at mrpath dot com

I don't know if this is the same bug or a very similar one but I came across a bug with not sorting when not using the built in dataSource functionality.

In DataGrid/Core.php function sortRecordSet(...):
$this->sortArray needs to be set for the usort($this->recordSet, array($this, '_sort')) call to work.

Right now, it's set after so the usort call raises some errors and fails to sort.