mirror of
https://github.com/UndefinedOffset/SortableGridField.git
synced 2024-10-22 17:05:38 +02:00
Fixed issue #48 where duplicate sort indexes would occur when appending to top instead of the bottom
This commit is contained in:
parent
15ead2ae94
commit
e3895cc5ef
@ -205,13 +205,19 @@ class GridFieldSortableRows implements GridField_HTMLProvider, GridField_ActionP
|
|||||||
$idCondition='"ID" IN(\''.implode("','", $list->getIDList()).'\')';
|
$idCondition='"ID" IN(\''.implode("','", $list->getIDList()).'\')';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if($this->append_to_top) {
|
||||||
|
$topIncremented=array();
|
||||||
|
}
|
||||||
|
|
||||||
foreach($list as $obj) {
|
foreach($list as $obj) {
|
||||||
if($many_many) {
|
if($many_many) {
|
||||||
if($this->append_to_top) {
|
if($this->append_to_top) {
|
||||||
//Upgrade all the records (including the last iserted from 0 to 1)
|
//Upgrade all the records (including the last inserted from 0 to 1)
|
||||||
DB::query('UPDATE "' . $table
|
DB::query('UPDATE "' . $table
|
||||||
. '" SET "' . $sortColumn . '" = "' . $sortColumn .'"+1'
|
. '" SET "' . $sortColumn . '" = "' . $sortColumn .'"+1'
|
||||||
. ' WHERE "' . $parentField . '" = ' . $owner->ID);
|
. ' WHERE "' . $parentField . '" = ' . $owner->ID . (!empty($topIncremented) ? ' AND "' . $componentField . '" NOT IN(\''.implode('\',\'', $topIncremented).'\')':''));
|
||||||
|
|
||||||
|
$topIncremented[]=$obj->ID;
|
||||||
}else {
|
}else {
|
||||||
//Append the last record to the bottom
|
//Append the last record to the bottom
|
||||||
DB::query('UPDATE "' . $table
|
DB::query('UPDATE "' . $table
|
||||||
@ -219,15 +225,17 @@ class GridFieldSortableRows implements GridField_HTMLProvider, GridField_ActionP
|
|||||||
. ' WHERE "' . $componentField . '" = ' . $obj->ID . ' AND "' . $parentField . '" = ' . $owner->ID);
|
. ' WHERE "' . $componentField . '" = ' . $obj->ID . ' AND "' . $parentField . '" = ' . $owner->ID);
|
||||||
}
|
}
|
||||||
}else if($this->append_to_top) {
|
}else if($this->append_to_top) {
|
||||||
//Upgrade all the records (including the last iserted from 0 to 1)
|
//Upgrade all the records (including the last inserted from 0 to 1)
|
||||||
DB::query('UPDATE "' . $table
|
DB::query('UPDATE "' . $table
|
||||||
. '" SET "' . $sortColumn . '" = "' . $sortColumn .'"+1'
|
. '" SET "' . $sortColumn . '" = "' . $sortColumn .'"+1'
|
||||||
. ' WHERE '.($list instanceof RelationList ? '"' . $list->foreignKey . '" = '. $owner->ID:$idCondition));
|
. ' WHERE '.($list instanceof RelationList ? '"' . $list->foreignKey . '" = '. $owner->ID:$idCondition) . (!empty($topIncremented) ? ' AND "ID" NOT IN(\''.implode('\',\'', $topIncremented).'\')':''));
|
||||||
|
|
||||||
//LastEdited
|
//LastEdited
|
||||||
DB::query('UPDATE "' . $baseDataClass
|
DB::query('UPDATE "' . $baseDataClass
|
||||||
. '" SET "LastEdited" = \'' . date('Y-m-d H:i:s') . '\''
|
. '" SET "LastEdited" = \'' . date('Y-m-d H:i:s') . '\''
|
||||||
. ' WHERE '.($list instanceof RelationList ? '"' . $list->foreignKey . '" = '. $owner->ID:$idCondition));
|
. ' WHERE '.($list instanceof RelationList ? '"' . $list->foreignKey . '" = '. $owner->ID:$idCondition) . (!empty($topIncremented) ? ' AND "ID" NOT IN(\''.implode('\',\'', $topIncremented).'\')':''));
|
||||||
|
|
||||||
|
$topIncremented[]=$obj->ID;
|
||||||
}else {
|
}else {
|
||||||
//Append the last record to the bottom
|
//Append the last record to the bottom
|
||||||
DB::query('UPDATE "' . $table
|
DB::query('UPDATE "' . $table
|
||||||
|
@ -31,7 +31,15 @@ class GridFieldSortableRowsAutoSortTest extends SapphireTest {
|
|||||||
Session::set($stateID, array('grid'=>'', 'actionName'=>'sortableRowsToggle', 'args'=>array('GridFieldSortableRows'=>array('sortableToggle'=>true))));
|
Session::set($stateID, array('grid'=>'', 'actionName'=>'sortableRowsToggle', 'args'=>array('GridFieldSortableRows'=>array('sortableToggle'=>true))));
|
||||||
$request = new SS_HTTPRequest('POST', 'url', array(), array('action_gridFieldAlterAction?StateID='.$stateID=>true));
|
$request = new SS_HTTPRequest('POST', 'url', array(), array('action_gridFieldAlterAction?StateID='.$stateID=>true));
|
||||||
$this->gridField->gridFieldAlterAction(array('StateID'=>$stateID), $this->form, $request);
|
$this->gridField->gridFieldAlterAction(array('StateID'=>$stateID), $this->form, $request);
|
||||||
|
|
||||||
|
//Insure sort ran
|
||||||
$this->assertEquals(3, $this->list->last()->SortOrder, 'Auto sort should have run');
|
$this->assertEquals(3, $this->list->last()->SortOrder, 'Auto sort should have run');
|
||||||
|
|
||||||
|
|
||||||
|
//Check for duplicates (there shouldn't be any)
|
||||||
|
$count=$this->list->Count();
|
||||||
|
$indexes=count(array_unique($this->list->column('SortOrder')));
|
||||||
|
$this->assertEquals(0, $count-$indexes, 'Duplicate indexes detected');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testAppendToTopAutoSort() {
|
public function testAppendToTopAutoSort() {
|
||||||
@ -45,7 +53,15 @@ class GridFieldSortableRowsAutoSortTest extends SapphireTest {
|
|||||||
Session::set($stateID, array('grid'=>'', 'actionName'=>'sortableRowsToggle', 'args'=>array('GridFieldSortableRows'=>array('sortableToggle'=>true))));
|
Session::set($stateID, array('grid'=>'', 'actionName'=>'sortableRowsToggle', 'args'=>array('GridFieldSortableRows'=>array('sortableToggle'=>true))));
|
||||||
$request = new SS_HTTPRequest('POST', 'url', array(), array('action_gridFieldAlterAction?StateID='.$stateID=>true));
|
$request = new SS_HTTPRequest('POST', 'url', array(), array('action_gridFieldAlterAction?StateID='.$stateID=>true));
|
||||||
$this->gridField->gridFieldAlterAction(array('StateID'=>$stateID), $this->form, $request);
|
$this->gridField->gridFieldAlterAction(array('StateID'=>$stateID), $this->form, $request);
|
||||||
|
|
||||||
|
//Insure sort ran
|
||||||
$this->assertEquals(3, $this->list->last()->SortOrder, 'Auto sort should have run');
|
$this->assertEquals(3, $this->list->last()->SortOrder, 'Auto sort should have run');
|
||||||
|
|
||||||
|
|
||||||
|
//Check for duplicates (there shouldn't be any)
|
||||||
|
$count=$this->list->Count();
|
||||||
|
$indexes=count(array_unique($this->list->column('SortOrder')));
|
||||||
|
$this->assertEquals(0, $count-$indexes, 'Duplicate indexes detected');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user