Skip to content

Commit

Permalink
Fix EZP-19886: Wrong sort order in object relations list with ezautosave
Browse files Browse the repository at this point in the history
  • Loading branch information
dpobel committed Nov 30, 2012
1 parent eb3efd7 commit 2b4aa08
Showing 1 changed file with 29 additions and 32 deletions.
Expand Up @@ -255,28 +255,23 @@ function fetchObjectAttributeHTTPInput( $http, $base, $contentObjectAttribute )
}
}

$reorderedRelationList = array();
// Contains existing priorities
$existsPriorities = array();

for ( $i = 0, $c = count( $content['relation_list'] ); $i < $c; ++$i )
{
$priorities[$contentObjectAttributeID][$i] = (int) $priorities[$contentObjectAttributeID][$i];
$existsPriorities[$i] = $priorities[$contentObjectAttributeID][$i];

// Change objects' priorities providing their uniqueness.
for ( $j = 0; $j < $c; ++$j )
// Indexing priorities by object id
// and make sure each priority is unique
$existingPriorities = array();
$prioritiesByContentObjectId = array();
foreach ( $selectedObjectIDArray as $k => $id )
{
$priority = (int)$priorities[$contentObjectAttributeID][$k];
while ( isset( $existingPriorities[$priority] ) )
{
if ( $i == $j ) continue;
if ( $priorities[$contentObjectAttributeID][$i] == $priorities[$contentObjectAttributeID][$j] )
{
$index = $priorities[$contentObjectAttributeID][$i];
while ( in_array( $index, $existsPriorities ) )
++$index;
$priorities[$contentObjectAttributeID][$j] = $index;
}
$priority++;
}
$relationItem = $content['relation_list'][$i];
$prioritiesByContentObjectId[$id] = $priority;
$existingPriorities[$priority] = $priority;
}

foreach ( $content['relation_list'] as &$relationItem )
{
if ( $relationItem['is_modified'] )
{
$subObjectID = $relationItem['contentobject_id'];
Expand All @@ -295,21 +290,23 @@ function fetchObjectAttributeHTTPInput( $http, $base, $contentObjectAttribute )
$content['temp'][$subObjectID]['object'] = $object;
}
}
if ( isset( $priorities[$contentObjectAttributeID][$i] ) )
$relationItem['priority'] = $priorities[$contentObjectAttributeID][$i];
$reorderedRelationList[$relationItem['priority']] = $relationItem;
$relationItem['priority'] = $prioritiesByContentObjectId[$relationItem['contentobject_id']];
}
ksort( $reorderedRelationList );
unset( $content['relation_list'] );
$content['relation_list'] = array();
reset( $reorderedRelationList );
$i = 0;
while ( list( $key, $relationItem ) = each( $reorderedRelationList ) )

usort(
$content['relation_list'],
function ( $a, $b )
{
return $a['priority'] - $b['priority'];
}
);
$p = 1;
foreach ( $content['relation_list'] as &$relationItem )
{
$content['relation_list'][] = $relationItem;
$content['relation_list'][$i]['priority'] = $i + 1;
++$i;
$relationItem['priority'] = $p;
$p++;
}

$contentObjectAttribute->setContent( $content );
return true;
}
Expand Down

0 comments on commit 2b4aa08

Please sign in to comment.