static public function registerSearchObject( $objectID, $version = null, $isMoved = false )
    {
        $objectID = (int)$objectID;
        eZDebug::createAccumulatorGroup( 'search_total', 'Search Total' );

        $ini = eZINI::instance( 'site.ini' );
        $insertPendingAction = false;
        $object = null;

        switch ( $ini->variable( 'SearchSettings', 'DelayedIndexing' ) )
        {
            case 'enabled':
                $insertPendingAction = true;
                break;
            case 'classbased':
                $classList = $ini->variable( 'SearchSettings', 'DelayedIndexingClassList' );
                $object = eZContentObject::fetch( $objectID );
                if ( is_array( $classList ) && in_array( $object->attribute( 'class_identifier' ), $classList ) )
                {
                    $insertPendingAction = true;
                }
        }

        if ( $insertPendingAction )
        {
            $action = $isMoved ? 'index_moved_node' : 'index_object';

            eZDB::instance()->query( "INSERT INTO ezpending_actions( action, param ) VALUES ( '$action', '$objectID' )" );
            return;
        }

        if ( $object === null )
            $object = eZContentObject::fetch( $objectID );

        // Register the object in the search engine.
        $needCommit = eZSearch::needCommit();
        if ( eZSearch::needRemoveWithUpdate() )
        {
            eZDebug::accumulatorStart( 'remove_object', 'search_total', 'remove object' );
            eZSearch::removeObjectById( $objectID );
            eZDebug::accumulatorStop( 'remove_object' );
        }

        eZDebug::accumulatorStart( 'add_object', 'search_total', 'add object' );
        if ( !eZSearch::addObject( $object, $needCommit ) )
        {
            eZDebug::writeError( "Failed adding object ID {$object->attribute( 'id' )} in the search engine", __METHOD__ );
        }
        eZDebug::accumulatorStop( 'add_object' );
    }