kernel/classes/ezpersistentobject.php
public static function reorderObject( $def, $orderField, $conditions, $down = true )
    {
        $db = eZDB::instance();
        $table = $def["name"];
        $keys = $def["keys"];

        reset( $orderField );
        $order_id = key( $orderField );
        $order_val = $orderField[$order_id];
        if ( $down )
        {
            $order_operator = ">=";
            $order_type = "asc";
            $order_add = -1;
        }
        else
        {
            $order_operator = "<=";
            $order_type = "desc";
            $order_add = 1;
        }
        $fields = array_merge( $keys, array( $order_id ) );
        $rows = eZPersistentObject::fetchObjectList( $def,
                                                      $fields,
                                                      array_merge( $conditions,
                                                                   array( $order_id => array( $order_operator,
                                                                                              $order_val ) ) ),
                                                      array( $order_id => $order_type ),
                                                      array( "length" => 2 ),
                                                      false );
        if ( count( $rows ) == 2 )
        {
            $swapSQL1 = eZPersistentObject::swapRow( $table, $keys, $order_id, $rows, 1, 0 );
            $swapSQL2 = eZPersistentObject::swapRow( $table, $keys, $order_id, $rows, 0, 1 );
            $db->begin();
            $db->query( $swapSQL1 );
            $db->query( $swapSQL2 );
            $db->commit();
        }
        else
        {
            $tmp = eZPersistentObject::fetchObjectList( $def,
                                                         $fields,
                                                         $conditions,
                                                         array( $order_id => $order_type ),
                                                         array( "length" => 1 ),
                                                         false );
            $where_text = eZPersistentObject::conditionTextByRow( $keys, $rows[0] );
            $db->query( "UPDATE $table SET $order_id='" . ( $tmp[0][$order_id] + $order_add ) .
                        "'$where_text"  );
        }
    }
public static function reorderObject( $def, $orderField, $conditions, $down = true )
    {
        $db = eZDB::instance();
        $table = $def["name"];
        $keys = $def["keys"];

        reset( $orderField );
        $order_id = key( $orderField );
        $order_val = $orderField[$order_id];
        if ( $down )
        {
            $order_operator = ">=";
            $order_type = "asc";
            $order_add = -1;
        }
        else
        {
            $order_operator = "<=";
            $order_type = "desc";
            $order_add = 1;
        }
        $fields = array_merge( $keys, array( $order_id ) );
        $rows = eZPersistentObject::fetchObjectList( $def,
                                                      $fields,
                                                      array_merge( $conditions,
                                                                   array( $order_id => array( $order_operator,
                                                                                              $order_val ) ) ),
                                                      array( $order_id => $order_type ),
                                                      array( "length" => 2 ),
                                                      false );
        if ( count( $rows ) == 2 )
        {
            $swapSQL1 = eZPersistentObject::swapRow( $table, $keys, $order_id, $rows, 1, 0 );
            $swapSQL2 = eZPersistentObject::swapRow( $table, $keys, $order_id, $rows, 0, 1 );
            $db->begin();
            $db->query( $swapSQL1 );
            $db->query( $swapSQL2 );
            $db->commit();
        }
        else
        {
            $tmp = eZPersistentObject::fetchObjectList( $def,
                                                         $fields,
                                                         $conditions,
                                                         array( $order_id => $order_type ),
                                                         array( "length" => 1 ),
                                                         false );
            $where_text = eZPersistentObject::conditionTextByRow( $keys, $rows[0] );
            $db->query( "UPDATE $table SET $order_id='" . ( $tmp[0][$order_id] + $order_add ) .
                        "'$where_text"  );
        }
    }
public static function reorderObject ( $ def , $ orderField , $ conditions , $ down = true ) { $ db = eZDB :: instance ( ) ; $ table = $ def [ "name" ] ; $ keys = $ def [ "keys" ] ; reset ( $ orderField ) ; $ order_id = key ( $ orderField ) ; $ order_val = $ orderField [ $ order_id ] ; if ( $ down ) { $ order_operator = ">=" ; $ order_type = "asc" ; $ order_add = - 1 ; } else { $ order_operator = "<=" ; $ order_type = "desc" ; $ order_add = 1 ; } $ fields = array_merge ( $ keys , array ( $ order_id ) ) ; $ rows = eZPersistentObject :: fetchObjectList ( $ def , $ fields , array_merge ( $ conditions , array ( $ order_id => array ( $ order_operator , $ order_val ) ) ) , array ( $ order_id => $ order_type ) , array ( "length" => 2 ) , false ) ; if ( count ( $ rows ) == 2 ) { $ swapSQL1 = eZPersistentObject :: swapRow ( $ table , $ keys , $ order_id , $ rows , 1 , 0 ) ; $ swapSQL2 = eZPersistentObject :: swapRow ( $ table , $ keys , $ order_id , $ rows , 0 , 1 ) ; $ db -> begin ( ) ; $ db -> query ( $ swapSQL1 ) ; $ db -> query ( $ swapSQL2 ) ; $ db -> commit ( ) ; } else { $ tmp = eZPersistentObject :: fetchObjectList ( $ def , $ fields , $ conditions , array ( $ order_id => $ order_type ) , array ( "length" => 1 ) , false ) ; $ where_text = eZPersistentObject :: conditionTextByRow ( $ keys , $ rows [ 0 ] ) ; $ db -> query ( "UPDATE $table SET $order_id='" . ( $ tmp [ 0 ] [ $ order_id ] + $ order_add ) . "'$where_text" ) ; } }
Moves a row in a database table.

Uses $orderField to determine the order of objects in a table, usually this
is a placement of some kind. It uses this order field to figure out how move
the row, the row is either swapped with another row which is either above or
below according to whether $down is true or false, or it is swapped
with the first item or the last item depending on whether this row
is first or last.
Uses $conditions to figure out unique rows.

Note: Transaction unsafe. If you call several transaction unsafe methods
you must enclose the calls within a db transaction; thus within db->begin
and db->commit.

@param array $def A definition array of all fields, table name and sorting (see {@link eZPersistentObject::definition()} for more info)
@param array $orderField Associative array with one element, the key is the order id and values is order value.
@param array $conditions
@param bool $down
@return void
Moves a row in a database table .